[
  {
    "path": ".babelrc",
    "content": "{\n  \"presets\": [\"@babel/preset-env\"]\n}\n"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n# Unix-style newlines with a newline ending every file\n[*]\nend_of_line = lf\ninsert_final_newline = true\ncharset = utf-8\n\n[*.{html, js, css, less, scss, xml}]\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n[*.yml]\nindent_style = space\nindent_size = 4\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE/bug.yml",
    "content": "name: Bug 反馈\ndescription: 当你在代码中发现了一个 Bug，导致应用崩溃或抛出异常，或者有一个组件存在问题，或者某些地方看起来不对劲。\ntitle: \"[Bug]: \"\nlabels: [\"bug\"]\nbody:\n    - type: markdown\n      attributes:\n          value: |\n              感谢对项目的支持与关注。在提出问题之前，请确保你已查看相关开发或使用文档：\n              - https://open.modstart.com/ueditor-plus\n    - type: textarea\n      attributes:\n          label: 如何复现\n          description: 请搭建一个最小可复现的 Demo 压缩为 zip 发送到 modstart@163.com ，否则我们提交的问题可能会被关闭。\n          placeholder: 请搭建一个最小可复现的 Demo 压缩为 zip 发送到 modstart@163.com ，否则我们提交的问题可能会被关闭。\n      validations:\n          required: true\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n    - name: UEditorPlus 文档中心\n      url: https://open.modstart.com/ueditor-plus\n      about: 提供基本功能使用、介绍和常见问题解答\n"
  },
  {
    "path": ".gitee/ISSUE_TEMPLATE/feature.yml",
    "content": "name: 功能建议\ndescription: 对本项目提出一个功能建议\ntitle: \"[功能建议]: \"\nlabels: [\"enhancement\"]\nbody:\n    - type: markdown\n      attributes:\n          value: |\n              感谢提出功能建议，我们将仔细考虑！\n    - type: textarea\n      id: related-problem\n      attributes:\n          label: 你的功能建议是否和某个问题相关？\n          description: 清晰并简洁地描述问题是什么，例如，当我...时，我总是感到困扰。\n      validations:\n          required: false\n    - type: textarea\n      id: desired-solution\n      attributes:\n          label: 你希望看到什么解决方案？\n          description: 清晰并简洁地描述你希望发生的事情。\n      validations:\n          required: true\n    - type: textarea\n      id: alternatives\n      attributes:\n          label: 你考虑过哪些替代方案？\n          description: 清晰并简洁地描述你考虑过的任何替代解决方案或功能。\n      validations:\n          required: false\n    - type: textarea\n      id: additional-context\n      attributes:\n          label: 你有其他上下文或截图吗？\n          description: 在此处添加有关功能请求的任何其他上下文或截图。\n      validations:\n          required: false\n    - type: checkboxes\n      attributes:\n          label: 意向参与贡献\n          options:\n              - label: 我有意向参与具体功能的开发实现并将代码贡献回到上游社区\n                required: false\n"
  },
  {
    "path": ".gitignore",
    "content": "###############\n#    folder   #\n###############\n.idea\nlog\njsp/upload\nphp/upload\nnet/upload\nasp/upload\nnode/upload\nref/\n_deleted/\n\n###############\n#  fixed file #\n###############\n*.pptx\n*.doc\n*.docx\n*.xml\n/doc/\n/dist/\n/dist-min/\n\n\n\n\n\n\n\n\n\n\n#################\n## Eclipse\n#################\n\n*.pydevproject\n.project\n.metadata\nbin/\ntmp/\n*.tmp\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# External tool builders\n.externalToolBuilders/\n\n# Locally stored \"Eclipse launch configurations\"\n*.launch\n\n# CDT-specific\n.cproject\n\n# PDT-specific\n.buildpath\n\n\n#################\n## Visual Studio\n#################\n\n## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n\n# Build results\n[Dd]ebug/\n[Rr]elease/\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.vspscc\n.builds\n*.dotCover\n\n## TODO: If you have NuGet Package Restore enabled, uncomment this\n#packages/\n\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n\n# Visual Studio profiler\n*.psess\n*.vsp\n\n# ReSharper is a .NET coding add-in\n_ReSharper*\n\n# Installshield output folder\n[Ee]xpress\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish\n\n# Others\n[Bb]in\n[Oo]bj\nsql\nTestResults\n*.Cache\nClientBin\nstylecop.*\n~$*\n*.dbmdl\nGenerated_Code #added for RIA/Silverlight projects\n\n# Backup & report files from converting an old project file to a newer\n# Visual Studio version. Backup files are not needed, because we have git ;-)\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\n\n\n\n############\n## Windows\n############\n\n# Windows image file caches\nThumbs.db\n\n# Folder config file\nDesktop.ini\n\n\n#############\n## Python\n#############\n\n*.py[co]\n\n# Packages\n*.egg\n*.egg-info\neggs\nparts\n# bin\nvar\nsdist\ndevelop-eggs\n.installed.cfg\n\n# Installer logs\npip-log.txt\n\n# Unit test / coverage reports\n.coverage\n.tox\n\n#Translations\n*.mo\n\n#Mr Developer\n.mr.developer.cfg\n\n# Mac crap\n.DS_Store\n/node_modules\n\n/.github/\n/AGENTS.md\n/openspec/\n"
  },
  {
    "path": ".nvmrc",
    "content": "14\n"
  },
  {
    "path": "Gruntfile.js",
    "content": "\"use strict\";\n\nmodule.exports = function (grunt) {\n    var fs = require(\"fs\"),\n        Util = {\n            jsBasePath: \"_src/\",\n            parseBasePath: \"_parse/\",\n            cssBasePath: \"themes/default/_css/\",\n\n            fetchScripts: function (readFile, basePath) {\n                var sources = fs.readFileSync(readFile);\n                sources = /\\[([^\\]]+\\.js'[^\\]]+)\\]/.exec(sources);\n                sources = sources[1]\n                    .replace(/\\/\\/.*\\n/g, \"\\n\")\n                    .replace(/'|\"|\\n|\\t|\\s/g, \"\");\n                sources = sources.split(\",\").filter(o => o);\n                sources.forEach(function (filepath, index) {\n                    sources[index] = basePath + filepath;\n                });\n                return sources;\n            },\n\n            fetchStyles: function () {\n                var sources = fs.readFileSync(this.cssBasePath + \"ueditor.css\"),\n                    filepath = null,\n                    pattern = /@import\\s+([^;]+)*;/g,\n                    src = [];\n\n                while ((filepath = pattern.exec(sources))) {\n                    src.push(this.cssBasePath + filepath[1].replace(/'|\"/g, \"\"));\n                }\n\n                return src;\n            }\n        },\n        packageJson = grunt.file.readJSON(\"package.json\"),\n        distDir = \"dist/\",\n        distMinDir = \"dist-min/\",\n        banner = \"/*! \" + packageJson.title + \" v\" + packageJson.version + \"*/\\n\";\n\n    //init\n    (function () {\n        distDir = \"dist/\";\n    })();\n\n    var dateHash = (new Date()).getTime();\n\n    grunt.initConfig({\n        pkg: packageJson,\n        concat: {\n            js: {\n                options: {\n                    banner: \"/*!\\n * \" +\n                        packageJson.title +\n                        \"\\n * version: \" +\n                        packageJson.version +\n                        \"\\n*/\\n(function(){\\n\\n\",\n                    footer: \"\\n\\n})();\\n\",\n                    process: function (src, s) {\n                        var filename = s.substr(s.indexOf(\"/\") + 1);\n                        return (\n                            \"// \" + filename + \"\\n\" + src.replace(\"/_css/\", \"/css/\") + \"\\n\"\n                        );\n                    }\n                },\n                src: Util.fetchScripts(\"_examples/editor_api.js\", Util.jsBasePath),\n                dest: distDir + \"ueditor.all.js\"\n            },\n            parse: {\n                options: {\n                    banner: \"/*!\\n * \" +\n                        packageJson.title +\n                        \" parse\\n * version: \" +\n                        packageJson.version +\n                        \"\\n*/\\n(function(){\\n\\n\",\n                    footer: \"\\n\\n})();\\n\"\n                },\n                src: Util.fetchScripts(\"ueditor.parse.js\", Util.parseBasePath),\n                dest: distDir + \"ueditor.parse.js\"\n            },\n            css: {\n                src: Util.fetchStyles(),\n                dest: distDir + \"themes/default/css/ueditor.css\"\n            }\n        },\n        cssmin: {\n            options: {\n                banner: banner\n            },\n            files: {\n                cwd: distDir,\n                src: [\n                    '**/*.css',\n                ],\n                dest: distMinDir,\n                expand: true\n            }\n        },\n        uglify: {\n            options: {\n                banner: banner\n            },\n            files: {\n                cwd: distDir,\n                src: [\n                    '**/*.js',\n                    '!third-party/zeroclipboard/ZeroClipboard.js',\n                    '!dialogs/ai/ai.js',\n                    '!ueditor.all.js',\n                ],\n                dest: distMinDir,\n                expand: true\n            },\n        },\n        copy: {\n            base: {\n                files: [\n                    {\n                        src: [\n                            \"*.html\",\n                            \"themes/iframe.css\",\n                            \"themes/default/dialog.css\",\n                            \"themes/default/dialogbase.css\",\n                            \"themes/default/images/**\",\n                            \"themes/default/exts/**\",\n                            // \"themes/default/font/**\",\n                            \"dialogs/**\",\n                            \"lang/**\",\n                            \"third-party/**\",\n                            \"plugins/**\",\n                        ],\n                        dest: distDir\n                    }\n                ]\n            },\n            dist: {\n                files: [\n                    {\n                        cwd: distDir,\n                        src: '**/*',\n                        dest: distMinDir,\n                        expand: true\n                    }\n                ]\n            },\n            demo: {\n                files: [\n                    {\n                        src: \"_examples/completeDemo.html\",\n                        dest: distDir + \"index.html\"\n                    }\n                ]\n            },\n        },\n        transcoding: {\n            options: {\n                charset: 'utf-8'\n            },\n            src: [\n                distDir + \"**/*.html\",\n                distDir + \"**/*.js\",\n                distDir + \"**/*.css\",\n                distDir + \"**/*.json\",\n            ]\n        },\n        replace: {\n            demo: {\n                src: distDir + \"index.html\",\n                overwrite: true,\n                replacements: [\n                    {\n                        from: /\\.\\.\\//gi,\n                        to: \"\"\n                    },\n                    {\n                        from: \"editor_api.js\",\n                        to: \"ueditor.all.js\"\n                    }\n                ]\n            },\n        },\n        clean: {\n            build: {\n                src: [\n                    distDir + \".DS_Store\",\n                    distDir + \"**/.DS_Store\",\n                    distDir + \".git\",\n                    distDir + \"**/.git\"\n                ]\n            }\n        }\n    });\n\n    grunt.loadNpmTasks(\"grunt-text-replace\");\n    grunt.loadNpmTasks(\"grunt-contrib-concat\");\n    grunt.loadNpmTasks(\"grunt-contrib-cssmin\");\n    grunt.loadNpmTasks(\"grunt-contrib-uglify\");\n    grunt.loadNpmTasks(\"grunt-contrib-copy\");\n    grunt.loadNpmTasks(\"grunt-transcoding\");\n    grunt.loadNpmTasks(\"grunt-contrib-clean\");\n\n    grunt.registerTask(\"default\", \"UEditor build\", function () {\n        var tasks = [\n            \"concat\",\n            \"copy:base\",\n            \"copy:demo\",\n            \"replace:demo\",\n            \"copy:dist\",\n            \"uglify:files\",\n            \"cssmin:files\",\n            \"clean\"\n        ];\n\n        tasks.push(\"transcoding\");\n\n        //config修改\n        updateConfigFile();\n\n        grunt.task.run(tasks);\n    });\n\n    function updateConfigFile() {\n        var filename = \"ueditor.config.js\",\n            file = grunt.file.read(filename);\n        //写入到dist\n        if (grunt.file.write(distDir + filename, file)) {\n            grunt.log.writeln(\"config file update success\");\n        } else {\n            grunt.log.warn(\"config file update error\");\n        }\n    }\n};\n"
  },
  {
    "path": "LICENSE",
    "content": "Apache License\nVersion 2.0, January 2004\nhttp://www.apache.org/licenses/\n\nTERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n1. Definitions.\n\n\"License\" shall mean the terms and conditions for use, reproduction, and\ndistribution as defined by Sections 1 through 9 of this document.\n\n\"Licensor\" shall mean the copyright owner or entity authorized by the copyright\nowner that is granting the License.\n\n\"Legal Entity\" shall mean the union of the acting entity and all other entities\nthat control, are controlled by, or are under common control with that entity.\nFor the purposes of this definition, \"control\" means (i) the power, direct or\nindirect, to cause the direction or management of such entity, whether by\ncontract or otherwise, or (ii) ownership of fifty percent (50%) or more of the\noutstanding shares, or (iii) beneficial ownership of such entity.\n\n\"You\" (or \"Your\") shall mean an individual or Legal Entity exercising\npermissions granted by this License.\n\n\"Source\" form shall mean the preferred form for making modifications, including\nbut not limited to software source code, documentation source, and configuration\nfiles.\n\n\"Object\" form shall mean any form resulting from mechanical transformation or\ntranslation of a Source form, including but not limited to compiled object code,\ngenerated documentation, and conversions to other media types.\n\n\"Work\" shall mean the work of authorship, whether in Source or Object form, made\navailable under the License, as indicated by a copyright notice that is included\nin or attached to the work (an example is provided in the Appendix below).\n\n\"Derivative Works\" shall mean any work, whether in Source or Object form, that\nis based on (or derived from) the Work and for which the editorial revisions,\nannotations, elaborations, or other modifications represent, as a whole, an\noriginal work of authorship. For the purposes of this License, Derivative Works\nshall not include works that remain separable from, or merely link (or bind by\nname) to the interfaces of, the Work and Derivative Works thereof.\n\n\"Contribution\" shall mean any work of authorship, including the original version\nof the Work and any modifications or additions to that Work or Derivative Works\nthereof, that is intentionally submitted to Licensor for inclusion in the Work\nby the copyright owner or by an individual or Legal Entity authorized to submit\non behalf of the copyright owner. For the purposes of this definition,\n\"submitted\" means any form of electronic, verbal, or written communication sent\nto the Licensor or its representatives, including but not limited to\ncommunication on electronic mailing lists, source code control systems, and\nissue tracking systems that are managed by, or on behalf of, the Licensor for\nthe purpose of discussing and improving the Work, but excluding communication\nthat is conspicuously marked or otherwise designated in writing by the copyright\nowner as \"Not a Contribution.\"\n\n\"Contributor\" shall mean Licensor and any individual or Legal Entity on behalf\nof whom a Contribution has been received by Licensor and subsequently\nincorporated within the Work.\n\n2. Grant of Copyright License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable copyright license to reproduce, prepare Derivative Works of,\npublicly display, publicly perform, sublicense, and distribute the Work and such\nDerivative Works in Source or Object form.\n\n3. Grant of Patent License.\n\nSubject to the terms and conditions of this License, each Contributor hereby\ngrants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free,\nirrevocable (except as stated in this section) patent license to make, have\nmade, use, offer to sell, sell, import, and otherwise transfer the Work, where\nsuch license applies only to those patent claims licensable by such Contributor\nthat are necessarily infringed by their Contribution(s) alone or by combination\nof their Contribution(s) with the Work to which such Contribution(s) was\nsubmitted. If You institute patent litigation against any entity (including a\ncross-claim or counterclaim in a lawsuit) alleging that the Work or a\nContribution incorporated within the Work constitutes direct or contributory\npatent infringement, then any patent licenses granted to You under this License\nfor that Work shall terminate as of the date such litigation is filed.\n\n4. Redistribution.\n\nYou may reproduce and distribute copies of the Work or Derivative Works thereof\nin any medium, with or without modifications, and in Source or Object form,\nprovided that You meet the following conditions:\n\nYou must give any other recipients of the Work or Derivative Works a copy of\nthis License; and\nYou must cause any modified files to carry prominent notices stating that You\nchanged the files; and\nYou must retain, in the Source form of any Derivative Works that You distribute,\nall copyright, patent, trademark, and attribution notices from the Source form\nof the Work, excluding those notices that do not pertain to any part of the\nDerivative Works; and\nIf the Work includes a \"NOTICE\" text file as part of its distribution, then any\nDerivative Works that You distribute must include a readable copy of the\nattribution notices contained within such NOTICE file, excluding those notices\nthat do not pertain to any part of the Derivative Works, in at least one of the\nfollowing places: within a NOTICE text file distributed as part of the\nDerivative Works; within the Source form or documentation, if provided along\nwith the Derivative Works; or, within a display generated by the Derivative\nWorks, if and wherever such third-party notices normally appear. The contents of\nthe NOTICE file are for informational purposes only and do not modify the\nLicense. You may add Your own attribution notices within Derivative Works that\nYou distribute, alongside or as an addendum to the NOTICE text from the Work,\nprovided that such additional attribution notices cannot be construed as\nmodifying the License.\nYou may add Your own copyright statement to Your modifications and may provide\nadditional or different license terms and conditions for use, reproduction, or\ndistribution of Your modifications, or for any such Derivative Works as a whole,\nprovided Your use, reproduction, and distribution of the Work otherwise complies\nwith the conditions stated in this License.\n\n5. Submission of Contributions.\n\nUnless You explicitly state otherwise, any Contribution intentionally submitted\nfor inclusion in the Work by You to the Licensor shall be under the terms and\nconditions of this License, without any additional terms or conditions.\nNotwithstanding the above, nothing herein shall supersede or modify the terms of\nany separate license agreement you may have executed with Licensor regarding\nsuch Contributions.\n\n6. Trademarks.\n\nThis License does not grant permission to use the trade names, trademarks,\nservice marks, or product names of the Licensor, except as required for\nreasonable and customary use in describing the origin of the Work and\nreproducing the content of the NOTICE file.\n\n7. Disclaimer of Warranty.\n\nUnless required by applicable law or agreed to in writing, Licensor provides the\nWork (and each Contributor provides its Contributions) on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied,\nincluding, without limitation, any warranties or conditions of TITLE,\nNON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are\nsolely responsible for determining the appropriateness of using or\nredistributing the Work and assume any risks associated with Your exercise of\npermissions under this License.\n\n8. Limitation of Liability.\n\nIn no event and under no legal theory, whether in tort (including negligence),\ncontract, or otherwise, unless required by applicable law (such as deliberate\nand grossly negligent acts) or agreed to in writing, shall any Contributor be\nliable to You for damages, including any direct, indirect, special, incidental,\nor consequential damages of any character arising as a result of this License or\nout of the use or inability to use the Work (including but not limited to\ndamages for loss of goodwill, work stoppage, computer failure or malfunction, or\nany and all other commercial damages or losses), even if such Contributor has\nbeen advised of the possibility of such damages.\n\n9. Accepting Warranty or Additional Liability.\n\nWhile redistributing the Work or Derivative Works thereof, You may choose to\noffer, and charge a fee for, acceptance of support, warranty, indemnity, or\nother liability obligations and/or rights consistent with this License. However,\nin accepting such obligations, You may act only on Your own behalf and on Your\nsole responsibility, not on behalf of any other Contributor, and only if You\nagree to indemnify, defend, and hold each Contributor harmless for any liability\nincurred by, or claims asserted against, such Contributor by reason of your\naccepting any such warranty or additional liability.\n\nEND OF TERMS AND CONDITIONS\n\nAPPENDIX: How to apply the Apache License to your work\n\nTo apply the Apache License to your work, attach the following boilerplate\nnotice, with the fields enclosed by brackets \"{}\" replaced with your own\nidentifying information. (Don't include the brackets!) The text should be\nenclosed in the appropriate comment syntax for the file format. We also\nrecommend that a file or class name and description of purpose be included on\nthe same \"printed page\" as the copyright notice for easier identification within\nthird-party archives.\n\n   Copyright 2017 Karson\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n     http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n"
  },
  {
    "path": "Makefile",
    "content": "prepare:\n\tnpm install\n\nbuild:\n\trm -rfv ./dist/; \\\n\trm -rfv ./dist-min/; \\\n\tgrunt default --force; \\\n\tnode ./scripts/postBuild.js; \\\n\tuglifyjs -o dist-min/ueditor.all.js dist/ueditor.all.js; \\\n\tnpx babel dist/dialogs/ai/ai.js -o dist/dialogs/ai/ai.js; \\\n\tuglifyjs -o dist-min/dialogs/ai/ai.js dist/dialogs/ai/ai.js;\n\n\n\n"
  },
  {
    "path": "README.md",
    "content": "# UEditor Plus\n\n基于 UEditor 二次开发的富文本编辑器，让UEditor重新焕发活力\n\n![UEditor Plus](https://ms-assets.modstart.com/demo/UEditorPlus_v2.1.0.jpeg)\n\n[![star](https://img.shields.io/github/stars/modstart-lib/ueditor-plus.svg)](https://github.com/modstart-lib/ueditor-plus)\n[![star](https://gitee.com/modstart-lib/ueditor-plus/badge/star.svg)](https://gitee.com/modstart-lib/ueditor-plus)\n[![star](https://gitcode.com/modstart-lib/ueditor-plus/star/badge.svg)](https://gitcode.com/modstart-lib/ueditor-plus)\n\n> `/dist/` 和 `/dist-min/` 目录分别为构建的非压缩和压缩版代码，可直接使用\n\n## 功能亮点\n\n- 支持文档一键导入，支持Word文档（docx）、Markdown文档（md）文档\n- 全新的UI外观，使用字体图标替换原有图片图标\n- 移除过时、无用的插件支持，不断完善使用体验\n- 图片、文件、视频上传配置化定制增强\n- 演示界面重构，右上角可直接查看当前演示界面代码\n- 兼容现有UEditor，实现无缝切换\n\n## 相关链接\n\n- 在线演示：[https://open.modstart.com/ueditor-plus/_examples/](https://open.modstart.com/ueditor-plus/_examples/)\n- 使用文档： [https://open.modstart.com/ueditor-plus](https://open.modstart.com/ueditor-plus)\n\n## 使用遇到问题\n\n自开源以来，UEditor Plus 已经被大家广泛关注，也收到了很多反馈。\n\n为提高问题解决的效率，在提交问题时，请大家自行搭建一个最小可复现的环境代码（`zip` 压缩包 或 `git` 仓库地址），不提供的问题或者 `issue` 将不予解决和解答。\n\n## 使用教程\n\n### 原生使用\n\n```html\n\n<script id=\"editor\" type=\"text/plain\" style=\"height:300px;\"></script>\n<script type=\"text/javascript\" src=\"/path/to/UEditorPlus/ueditor.config.js\"></script>\n<script type=\"text/javascript\" src=\"/path/to/UEditorPlus/ueditor.all.js\"></script>\n<script>\n    var ue = UE.getEditor('editor', {\n        // ... 更多配置\n    });\n</script>\n```\n\n### vue2 使用\n\n① 安装插件支持\n\n```shell\nnpm i --save vue-ueditor-wrap@2.x\n# 或\nyarn add --save vue-ueditor-wrap@2.x\n```\n\n② 解压 UEditorPlus 到静态资源目录\n\n复制 `dist-min` 到项目 `public/static/UEditorPlus/` 目录\n\n③ 引入组件并使用\n\n```html\n\n<template>\n    <div>\n        <vue-ueditor-wrap v-model=\"content\"\n                          editor-id=\"editor\"\n                          :config=\"editorConfig\"\n                          :editorDependencies=\"['ueditor.config.js','ueditor.all.js']\"\n                          style=\"height:500px;\"/>\n    </div>\n</template>\n<script>\n    import VueUeditorWrap from 'vue-ueditor-wrap'\n\n    export default {\n        components: {\n            VueUeditorWrap\n        },\n        data() {\n            return {\n                content: '<p>Hello UEditorPlus</p>',\n                editorConfig: {\n                    // 后端服务地址，后端处理参考\n                    // https://open.modstart.com/ueditor-plus/backend.html\n                    serverUrl: '/api/path/to/server',\n                    UEDITOR_HOME_URL: '/static/UEditorPlus/',\n                    UEDITOR_CORS_URL: '/static/UEditorPlus/',\n                }\n            }\n        }\n    }\n</script>\n```\n\n### vue3 使用\n\n① 安装插件支持\n\n```shell\nnpm i --save vue-ueditor-wrap@3.x\n# 或\nyarn add --save vue-ueditor-wrap@3.x\n```\n\n② 解压 UEditorPlus 到静态资源目录\n\n复制 `dist-min` 到项目 `public/static/UEditorPlus/` 目录\n\n③ 引入组件并使用\n\n**main.js**\n\n```javascript\nimport {createApp} from 'vue'\nimport App from './App.vue'\nimport VueUeditorWrap from 'vue-ueditor-wrap';\n\ncreateApp(App).use(VueUeditorWrap).mount('#app')\n```\n\n**App.vue**\n\n```html\n\n<template>\n    <div>\n        <vue-ueditor-wrap v-model=\"content\"\n                          editor-id=\"editor\"\n                          :config=\"editorConfig\"\n                          :editorDependencies=\"['ueditor.config.js','ueditor.all.js']\"\n                          style=\"height:500px;\"/>\n    </div>\n</template>\n\n<script setup>\n    import {ref} from 'vue';\n\n    const content = ref('<p>Hello UEditorPlus</p>');\n    const editorConfig = {\n        // 后端服务地址，后端处理参考\n        // https://open.modstart.com/ueditor-plus/backend.html\n        serverUrl: '/api/path/to/server',\n        UEDITOR_HOME_URL: '/static/UEditorPlus/',\n        UEDITOR_CORS_URL: '/static/UEditorPlus/',\n    }\n</script>\n```\n\n### react 使用\n\n① 安装插件支持\n\n```shell\nnpm i --save react-ueditor-wrap\n# 或\nyarn add --save react-ueditor-wrap\n```\n\n② 解压 UEditorPlus 到静态资源目录\n\n复制 `dist-min` 到项目 `public/static/UEditorPlus/` 目录\n\n③ 引入组件并使用\n\n```jsx\nimport RcUeditor from 'react-ueditor-wrap';\n\nfunction App() {\n    const hanldeChage = (value) => {\n        console.log('RcUeditor', value);\n    }\n    return (\n        <div className=\"App\">\n            <div style={{margin: '0 auto', maxWidth: '800px'}}>\n                <RcUeditor\n                    value={'<p>Hello UEditorPlus</p>'}\n                    ueditorUrl={'/static/UEditorPlus/ueditor.all.js'}\n                    ueditorConfigUrl={'/static/UEditorPlus/ueditor.config.js'}\n                    editorConfig={{\n                        // 后端服务地址，后端处理参考\n                        // https://open.modstart.com/ueditor-plus/backend.html\n                        initialFrameWidth: '100%',\n                        serverUrl: '/api/path/to/server',\n                        UEDITOR_HOME_URL: '/static/UEditorPlus/',\n                        UEDITOR_CORS_URL: '/static/UEditorPlus/',\n                    }}\n                    onChange={hanldeChage}/>\n            </div>\n        </div>\n    );\n}\n\nexport default App;\n```\n\n## 关于Bug反馈与维护\n\n- 众所周知 UEditor 使用的人数多，目前已经累积了N个Bug，开源不易需要大家共同维护\n- 对于在实际使用中遇到的问题，如果急需解决推荐使用 [悬赏Issue](https://gitee.com/modstart-lib/ueditor-plus/reward_issues/new)，这样让更多有能力的开发者有共同维护的动力\n\n## ✉️ 使用交流\n\n> 添加好友请备注 UEditorPlus\n\n<table width=\"100%\">\n    <thead>\n        <tr>\n            <th width=\"50%\">微信交流群</th>\n            <th>QQ交流群</th>\n        </tr>\n    </thead>\n    <tbody>\n        <tr>\n            <td>\n                <img style=\"width:100%;\" \n                     src=\"https://modstart.com/contact/ContactWechatGroup\" />\n            </td>\n            <td>\n                <img style=\"width:100%;\"\n                     src=\"https://modstart.com/contact/ContactQQGroup\" />\n            </td>\n        </tr>\n    </tbody>\n</table>\n\n\n## 二次开发\n\n### 第一步，clone代码到本地\n\n```shell\ngit clone https://gitee.com/modstart-lib/ueditor-plus.git\n```\n\n### 第二步，开始功能开发\n\n使用浏览器打开 `_examples/index.html` 页面相关内容，完成功能开发\n\n### 第三步，打包\n\n```shell\nnpm install\ngrunt default\n```\n\n## UEditor相关链接\n\n- UEditor 官网：[http://ueditor.baidu.com](http://ueditor.baidu.com)\n- UEditor API 文档：[http://ueditor.baidu.com/doc](http://ueditor.baidu.com/doc)\n- UEditor 文档：[http://fex.baidu.com/ueditor/](http://fex.baidu.com/ueditor/)\n- UEditor API 文档：[http://ueditor.baidu.com/doc](http://ueditor.baidu.com/doc)\n\n## 更新日志\n\n- [https://open.modstart.com/ueditor-plus/change-log.html](https://open.modstart.com/ueditor-plus/change-log.html)\n\n## 好项目推荐\n\n- 开源数字人系统 [AigcPanel](https://aigcpanel.com)\n- 智能桌面助理 [FocusAny](https://focusany.com)\n- 安卓连接助手 [LinkAndroid](https://linkandroid.com)\n- 快速开发框架 [ModStart](https://modstart.com)\n- 企业内容建站系统 [ModStartCMS](https://modstart.com)\n- 现代化个人博客系统 [ModStartBlog](https://modstart.com)\n\n## 开源协议\n\n- Apache 2.0\n"
  },
  {
    "path": "_demo_server/handle.php",
    "content": "<?php\ndate_default_timezone_set('Asia/Shanghai');\n\n$config = [\n    // 上传图片配置项\n    \"imageActionName\" => \"image\",\n    \"imageFieldName\" => \"file\",\n    \"imageMaxSize\" => 1024 * 1024 * 10,\n    \"imageAllowFiles\" => ['.jpg', '.png', '.jpeg', '.gif'],\n    \"imageCompressEnable\" => true,\n    \"imageCompressBorder\" => 5000,\n    \"imageInsertAlign\" => \"none\",\n    \"imageUrlPrefix\" => \"\",\n\n    // 涂鸦图片上传配置项\n    \"scrawlActionName\" => \"crawl\",\n    \"scrawlFieldName\" => \"file\",\n    \"scrawlMaxSize\" => 1024 * 1024 * 10,\n    \"scrawlUrlPrefix\" => \"\",\n    \"scrawlInsertAlign\" => \"none\",\n\n    // 截图工具上传\n    \"snapscreenActionName\" => \"snap\",\n    \"snapscreenUrlPrefix\" => \"\",\n    \"snapscreenInsertAlign\" => \"none\",\n\n    // 抓取\n    \"catcherLocalDomain\" => [\n        \"127.0.0.1\",\n        \"localhost\",\n    ],\n    \"catcherActionName\" => \"catch\",\n    \"catcherFieldName\" => \"source\",\n    \"catcherUrlPrefix\" => \"\",\n    \"catcherMaxSize\" => 1024 * 1024 * 10,\n    \"catcherAllowFiles\" => ['.jpg', '.png', '.jpeg'],\n\n    // 上传视频配置\n    \"videoActionName\" => \"video\",\n    \"videoFieldName\" => \"file\",\n    \"videoUrlPrefix\" => \"\",\n    \"videoMaxSize\" => 1024 * 1024 * 100,\n    \"videoAllowFiles\" => ['.mp4'],\n\n    // 上传音频配置\n    \"audioActionName\" => \"audio\",\n    \"audioFieldName\" => \"file\",\n    \"audioUrlPrefix\" => \"\",\n    \"audioMaxSize\" => 1024 * 1024 * 100,\n    \"audioAllowFiles\" => ['.mp3'],\n\n    // 上传文件配置\n    \"fileActionName\" => \"file\",\n    \"fileFieldName\" => \"file\",\n    \"fileUrlPrefix\" => \"\",\n    \"fileMaxSize\" => 1024 * 1024 * 100,\n    \"fileAllowFiles\" => ['.zip', '.pdf', '.doc'],\n\n    // 列出图片\n    \"imageManagerActionName\" => \"listImage\",\n    \"imageManagerListSize\" => 20,\n    \"imageManagerUrlPrefix\" => \"\",\n    \"imageManagerInsertAlign\" => \"none\",\n    \"imageManagerAllowFiles\" => ['.jpg', '.png', '.jpeg'],\n\n    // 列出指定目录下的文件\n    \"fileManagerActionName\" => \"listFile\",\n    \"fileManagerUrlPrefix\" => \"\",\n    \"fileManagerListSize\" => 20,\n    \"fileManagerAllowFiles\" => ['.zip', '.pdf', '.doc'],\n\n    //\n    \"toolbarShows\" => [\n        \"ai\" => true,\n    ],\n    \"shortcutMenuShows\" => [\n        \"ai\" => true,\n    ],\n\n];\n\nfunction output($data)\n{\n    $callback = isset($_GET['callback']) ? $_GET['callback'] : null;\n    $data['_all'] = [\n        'POST' => $_POST,\n        'FILES' => $_FILES,\n        'GET' => $_GET,\n    ];\n    if($callback){\n        header('Content-Type: application/javascript');\n        echo $callback . '(' . json_encode($data) . ');';\n    }else{\n        header('Content-Type: application/json');\n        echo json_encode($data);\n    }\n    exit();\n}\n\n$action = @$_GET['action'];\n// var_dump($action);exit();\nswitch ($action) {\n    case 'showPost':\n        output($_POST);\n        break;\n    case 'image':\n        // 图片文件上传\n        // print_r($_FILES);\n        // output(['state' => '上传错误信息']);\n        // move uploaded file\n        //$file = @$_FILES['file'];\n        //if (empty($file)) {\n        //    output(['state' => '上传错误信息']);\n        //}\n        //$ext = strtolower(strrchr($file['name'], '.'));\n        //if (!in_array($ext, $config['imageAllowFiles'])) {\n        //    output(['state' => '上传文件类型不允许']);\n        //}\n        //$name = date('YmdHis') . $ext;\n        //move_uploaded_file($file['tmp_name'], $name);\n        sleep(1);\n        $name = isset($_POST['name']) ? $_POST['name'] : '';\n        output([\n            'state' => 'SUCCESS',\n            'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg?name=' . urlencode($name),\n        ]);\n    case 'listImage':\n        // 图片列表\n        $list = [];\n        for ($i = 0; $i < 20; $i++) {\n            $list[] = [\n                'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg',\n                'mtime' => time(),\n            ];\n        }\n        $result = [\n            \"state\" => \"SUCCESS\",\n            \"list\" => $list,\n            \"start\" => intval(@$_GET['start']),\n            \"total\" => 100\n        ];\n        output($result);\n    case 'video':\n        // 上传视频\n        // print_r($_FILES);\n        // output(['state' => '上传错误信息']);\n        output(['state' => 'SUCCESS', 'url' => 'https://ms-assets.modstart.com/demo/modstart.mp4']);\n    case 'audio':\n        // 上传音频\n        // print_r($_FILES);\n        // output(['state' => '上传错误信息']);\n        output(['state' => 'SUCCESS', 'url' => 'https://ms-assets.modstart.com/demo/music.mp3']);\n    case 'file':\n        // 上传文件\n        // print_r($_FILES);\n        // output(['state' => '上传错误信息']);\n        output(['state' => 'SUCCESS', 'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg']);\n    case 'listFile':\n        // 文件列表\n        $list = [];\n        for ($i = 0; $i < 20; $i++) {\n            $list[] = [\n                'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg',\n                'mtime' => time(),\n            ];\n        }\n        $result = [\n            \"state\" => \"SUCCESS\",\n            \"list\" => $list,\n            \"start\" => intval(@$_GET['start']),\n            \"total\" => 100\n        ];\n        output($result);\n    case 'crawl':\n        // 涂鸦上传\n        // output(['state' => '上传错误信息']);\n        output(['state' => 'SUCCESS', 'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg']);\n    case 'catch':\n        // 图片抓取\n        // output(['state' => '上传错误信息']);\n        $list = [];\n        $source = @$_POST['source'];\n        if (!is_array($source) || empty($source)) {\n            $source = [];\n        }\n        foreach ($source as $imgUrl) {\n            $list[] = [\n                'state' => 'SUCCESS',\n                'url' => 'https://ms-assets.modstart.com/demo/modstart.jpg',\n                'size' => 100,\n                'title' => 'title',\n                'original' => '',\n                'source' => htmlspecialchars($imgUrl),\n            ];\n        }\n        output(['state' => 'SUCCESS', 'list' => $list]);\n    default:\n        output($config);\n}\n"
  },
  {
    "path": "_examples/addCustomizeButton.js",
    "content": "UE.registerUI('button', function (editor, uiName) {\n    //注册按钮执行时的command命令，使用命令默认就会带有回退操作\n    editor.registerCommand(uiName, {\n        execCommand: function () {\n            alert('execCommand:' + uiName)\n        }\n    });\n\n    //创建一个button\n    var btn = new UE.ui.Button({\n        //按钮的名字\n        name: uiName,\n        //提示\n        title: uiName,\n        //需要添加的额外样式，指定icon图标，这里默认使用一个重复的icon\n        cssRules: 'background-position: -500px 0;',\n        //点击时执行的命令\n        onclick: function () {\n            //这里可以不用执行命令,做你自己的操作也可\n            editor.execCommand(uiName);\n        }\n    });\n\n    //当点到编辑内容上时，按钮要做的状态反射\n    editor.addListener('selectionchange', function () {\n        var state = editor.queryCommandState(uiName);\n        if (state == -1) {\n            btn.setDisabled(true);\n            btn.setChecked(false);\n        } else {\n            btn.setDisabled(false);\n            btn.setChecked(state);\n        }\n    });\n\n    //因为你是添加button,所以需要返回这个button\n    return btn;\n}/*index 指定添加到工具栏上的那个位置，默认时追加到最后,editorId 指定这个UI是那个编辑器实例上的，默认是页面上所有的编辑器都会添加这个按钮*/);\n\n//自定义引用样式例子\nUE.registerUI('myblockquote', function (editor, uiName) {\n    editor.registerCommand(uiName, {\n        execCommand: function () {\n            this.execCommand('blockquote', {\n                \"style\": \"border-left: 3px solid #E5E6E1; margin-left: 0px; padding-left: 5px; line-height:36px;\"\n            });\n        }\n    });\n\n    var btn = new UE.ui.Button({\n        name: uiName,\n        title: '自定义引用',\n        cssRules: \"background-position: -220px 0;\",\n        onclick: function () {\n            editor.execCommand(uiName);\n        }\n    });\n\n    editor.addListener('selectionchange', function () {\n        console.log(this);\n        var state = editor.queryCommandState('blockquote');\n        if (state == -1) {\n            btn.setDisabled(true);\n            btn.setChecked(false);\n        } else {\n            btn.setDisabled(false);\n            btn.setChecked(state);\n        }\n    });\n\n    return btn;\n});\n"
  },
  {
    "path": "_examples/addCustomizeCombox.js",
    "content": "UE.registerUI('combox', function (editor, uiName) {\n    //注册按钮执行时的command命令,用uiName作为command名字，使用命令默认就会带有回退操作\n    editor.registerCommand(uiName, {\n        execCommand: function (cmdName, value) {\n            //这里借用fontsize的命令\n            this.execCommand('fontsize', value + 'px')\n        },\n        queryCommandValue: function () {\n            //这里借用fontsize的查询命令\n            return this.queryCommandValue('fontsize')\n        }\n    });\n\n\n    //创建下拉菜单中的键值对，这里我用字体大小作为例子\n    var items = [];\n    for (var i = 0, ci; ci = [10, 11, 12, 14, 16, 18, 20, 24, 36][i++];) {\n        items.push({\n            //显示的条目\n            label: '字体:' + ci + 'px',\n            //选中条目后的返回值\n            value: ci,\n            //针对每个条目进行特殊的渲染\n            renderLabelHtml: function () {\n                //这个是希望每个条目的字体是不同的\n                return '<div class=\"edui-label %%-label\" style=\"line-height:2;font-size:' +\n                    this.value + 'px;\">' + (this.label || '') + '</div>';\n            }\n        });\n    }\n    //创建下来框\n    var combox = new UE.ui.Combox({\n        //需要指定当前的编辑器实例\n        editor: editor,\n        //添加条目\n        items: items,\n        //当选中时要做的事情\n        onselect: function (t, index) {\n            //拿到选中条目的值\n            editor.execCommand(uiName, this.items[index].value);\n        },\n        //提示\n        title: uiName,\n        //当编辑器没有焦点时，combox默认显示的内容\n        initValue: uiName\n    });\n\n    editor.addListener('selectionchange', function (type, causeByUi, uiReady) {\n        if (!uiReady) {\n            var state = editor.queryCommandState(uiName);\n            if (state == -1) {\n                combox.setDisabled(true);\n            } else {\n                combox.setDisabled(false);\n                var value = editor.queryCommandValue(uiName);\n                if (!value) {\n                    combox.setValue(uiName);\n                    return;\n                }\n                //ie下从源码模式切换回来时，字体会带单引号，而且会有逗号\n                value && (value = value.replace(/['\"]/g, '').split(',')[0]);\n                combox.setValue(value);\n\n            }\n        }\n\n    });\n    return combox;\n}, 2/*index 指定添加到工具栏上的那个位置，默认时追加到最后,editorId 指定这个UI是那个编辑器实例上的，默认是页面上所有的编辑器都会添加这个按钮*/);\n"
  },
  {
    "path": "_examples/addCustomizeDialog.js",
    "content": "UE.registerUI('dialog', function (editor, uiName) {\n\n    //创建dialog\n    var dialog = new UE.ui.Dialog({\n        //指定弹出层中页面的路径，这里只能支持页面,因为跟addCustomizeDialog.js相同目录，所以无需加路径\n        iframeUrl: 'customizeDialogPage.html',\n        //需要指定当前的编辑器实例\n        editor: editor,\n        //指定dialog的名字\n        name: uiName,\n        //dialog的标题\n        title: \"这是个测试浮层\",\n\n        //指定dialog的外围样式\n        cssRules: \"width:600px;height:300px;\",\n\n        //如果给出了buttons就代表dialog有确定和取消\n        buttons: [\n            {\n                className: 'edui-okbutton',\n                label: '确定',\n                onclick: function () {\n                    dialog.close(true);\n                }\n            },\n            {\n                className: 'edui-cancelbutton',\n                label: '取消',\n                onclick: function () {\n                    dialog.close(false);\n                }\n            }\n        ]\n    });\n\n    //参考addCustomizeButton.js\n    var btn = new UE.ui.Button({\n        name: 'dialogbutton' + uiName,\n        title: 'dialogbutton' + uiName,\n        //需要添加的额外样式，指定icon图标，这里默认使用一个重复的icon\n        cssRules: 'background-position: -500px 0;',\n        onclick: function () {\n            //渲染dialog\n            dialog.render();\n            dialog.open();\n        }\n    });\n\n    return btn;\n}/*index 指定添加到工具栏上的那个位置，默认时追加到最后,editorId 指定这个UI是那个编辑器实例上的，默认是页面上所有的编辑器都会添加这个按钮*/);\n"
  },
  {
    "path": "_examples/bugTest.html",
    "content": "<!DOCTYPE html>\n<head>\n    <meta charset=\"UTF-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <script src=\"./example.js\"></script>\n    <title></title>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n</head>\n<body>\n<input type=\"file\" name=\"file\"/>\n<div id=\"container\" style=\"margin:10px;padding:10px;border:1px solid; text-align:left; min-height:500px;\"></div>\n<script src=\"./../docx2html.min.js\"></script>\n<script>\n    const docx2html = require(\"docx2html\");\n    document.querySelector('input[type=file]').addEventListener('change', function (e) {\n        docx2html(e.target.files[0], {container: document.querySelector(\"#container\")})\n            .then(function (html) {\n                console.log(html);\n            });\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/completeDemo.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>UEditorPlus 完整演示</title>\n    <meta name=\"viewport\" content=\"width=device-width, minimum-scale=0.5, maximum-scale=5, user-scalable=no\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../lang/zh-cn/zh-cn.js?{timestamp}\"></script>\n    <script src=\"./../plugins/demo/demo.js\"></script>\n    <script>\n        // window.UEDITOR_CONFIG.toolbars[0].push('undo');\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <style>\n        :root {\n            /*--ueditor-top-offset: 20px;*/\n        }\n    </style>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>完整示例</h1>\n    <div>\n        <script id=\"editor\" type=\"text/plain\" style=\"height:300px;\">\n<h1>\n    你好 UEditorPlus\n</h1>\n<p>\n    UEditorPlus 是基于 UEditor 二次开发的富文本编辑器，让 UEditor <span style=\"color: #E36C09;\">焕<span style=\"color: #0070C0;\">然</span><span style=\"color: #31859B;\"><span style=\"color: #00B050;\">一</span><span style=\"color: #FF0000;\">新</span></span></span>\n</p>\n\n<table data-sort=\"sortDisabled\">\n    <tbody>\n        <tr class=\"firstRow\">\n            <td valign=\"top\" style=\"word-break: break-all;\" rowspan=\"1\" colspan=\"3\">\n                我是表格\n            </td>\n        </tr>\n        <tr>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                如果\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                有一天\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                我离开了\n            </td>\n        </tr>\n        <tr>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                怎么才能\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                证明我\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                曾经来过\n            </td>\n        </tr>\n    </tbody>\n</table>\n<pre class=\"brush:html;toolbar:false\">&lt;div&gt;\n  &lt;span&gt;这里是HTML标签&lt;/span&gt;\n&lt;/div&gt;</pre>\n<h2>\n公式支持\n</h2>\n<p>\n    <img src=\"https://r.latexeasy.com/image.svg?%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"\n      data-formula-image=\"%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"/>\n</p>\n<p>\n    <br/>\n</p>\n\n        </script>\n    </div>\n    <div id=\"btns\" style=\"margin-top:20px;height:2000px;\">\n        <div>\n\n            <button onclick=\"alert(UE.getEditor('editor').getAllHtml())\">获得整个html的内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContent())\">获得内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', false)\">写入内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', true)\">追加内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContentTxt())\">获得纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').getPlainTxt())\">获得带格式的纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').hasContents())\">判断是否有内容</button>\n            <button onclick=\"UE.getEditor('editor').focus()\">使编辑器获得焦点</button>\n            <button onmousedown=\"isFocus()\">编辑器是否获得焦点</button>\n            <button onmousedown=\"setBlur()\">编辑器失去焦点</button>\n            <button onclick=\"getSelectText()\">获得当前选中的文本</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('insertHtml', '插入的内容')\">插入内容</button>\n            <button onclick=\"UE.getEditor('editor').setEnabled()\">设定可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setDisabled('fullscreen')\">设定不可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setHide()\">隐藏编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setShow()\">显示编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setHeight(300)\">设置固定高度</button>\n            <button onclick=\"UE.getEditor('editor')\">创建编辑器</button>\n            <button onclick=\"UE.getEditor('editor').destroy()\">销毁编辑器</button>\n            <button onclick=\"alert( UE.getEditor('editor').execCommand('get_auto_save_content') )\">草稿箱-获取</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('clear_auto_save_content'); alert('已清空草稿箱')\">草稿箱-清空\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('set_auto_save_content'); alert('已保存')\">草稿箱-立即保存\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('auto_save_restore')\">草稿箱-恢复到编辑器</button>\n        </div>\n    </div>\n\n    <script type=\"text/javascript\">\n        var ue = UE.getEditor('editor',{\n            // autoHeightEnabled: false,\n            // retainOnlyLabelPasted: true,\n            ai:{\n                // 自定义接入\n                driverRequest: function (option) {\n                    console.log('模拟 AI 请求，参数如下：', option);\n                    var texts = []\n                    var i = 0;\n                    var mock = function () {\n                        var text = '测试' + (i++)\n                        texts.push(text)\n                        if (texts.length >= 10) {\n                            // 调用 onFinish 方法表示结束\n                            option.onFinish({code: 0, msg: 'ok', data: {text: texts.join(\"\")}})\n                            return\n                        }\n                        // 调用 onStream 方法模拟流式返回\n                        option.onStream({code: 0, msg: 'ok', data: {text: text}})\n                        setTimeout(mock, 50);\n                    };\n                    mock();\n                },\n            }\n        });\n        ue.on('contentchange', function () {\n            // console.log('contentchange', ue.getContent());\n        });\n\n        function isFocus(e) {\n            alert(UE.getEditor('editor').isFocus());\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function setBlur(e) {\n            UE.getEditor('editor').blur();\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function getSelectText() {\n            var range = UE.getEditor('editor').selection.getRange();\n            range.select();\n            var txt = UE.getEditor('editor').selection.getText();\n            alert(txt)\n        }\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/customPluginDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>UEditor自定义插件</h1>\n\n    <!--style给定宽度可以影响编辑器的最终宽度-->\n    <script type=\"text/plain\" id=\"myEditor\">\n    <p><img src=\"http://ueditor.baidu.com/website/images/banner-dl.png\" alt=\"\"></p>\n    <p>插件描述：选中图片，在其上单击，会改变图片的边框！</p>\n\n    </script>\n    <script type=\"text/javascript\">\n\n\n        //创建一个在选中的图片单击时添加边框的插件，其实质就是在baidu.editor.plugins塞进一个闭包\n        UE.plugins[\"addborder\"] = function () {\n            var me = this;\n            //创建一个改变图片边框的命令\n            me.commands[\"addborder\"] = {\n                execCommand: function () {\n                    //获取当前选区\n                    var range = me.selection.getRange();\n                    //选区没闭合的情况下操作\n                    if (!range.collapsed) {\n                        //图片判断\n                        var img = range.getClosedNode();\n                        if (img && img.tagName == \"IMG\") {\n                            //点击切换图片边框\n                            img.style.border = img.style.borderWidth == \"5px\" ? \"1px\" : \"5px solid red\";\n                        }\n                    }\n                }\n            };\n            //注册一个触发命令的事件，同学们可以在任意地放绑定触发此命令的事件\n            me.addListener('click', function () {\n                setTimeout(function () {\n                    me.execCommand(\"addborder\");\n                })\n\n            });\n        };\n        var editor_a = UE.getEditor('myEditor');\n    </script>\n\n</div>\n</body>\n\n\n</html>\n"
  },
  {
    "path": "_examples/customToolbarDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <style type=\"text/css\">\n        #editor_toolbar_box {\n            background: #F0F0EE;\n            padding: 2px;\n        }\n\n        #editor_iframe_holder {\n            border-top: 1px solid #CCC;\n            border-bottom: 1px solid #CCC;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>UEditorPlus自定义toolbar</h1>\n    <div id=\"editor\">\n        <div id=\"editor_toolbar_box\">\n            <div id=\"editor_toolbar\">\n                <input id=\"bold\" type=\"button\" value=\"加粗\" onclick=\"myeditor.execCommand('bold')\"\n                       style=\"height:24px;line-height:20px\"/>\n                <input id=\"italic\" type=\"button\" value=\"加斜\" onclick=\"myeditor.execCommand('italic')\"\n                       style=\"height:24px;line-height:20px\"/>\n                <select id=\"fontfamily\" onchange=\"myeditor.execCommand('fontfamily',this.value)\">\n                    <option value=\"宋体,simsun\">宋体</option>\n                    <option value=\"楷体,楷体_gb2312,simkai\">楷体</option>\n                    <option value=\"隶书,simli\">隶书</option>\n                    <option value=\"黑体,simhei\">黑体</option>\n                    <option value=\"andale mono,times\">andale mono</option>\n                    <option value=\"arial,helvetica,sans-serif\">arial</option>\n                    <option value=\"arial black,avant garde\">arial black</option>\n                    <option value=\"comic sans ms,sans-serif\">comic sans ms</option>\n                </select>\n                <select id=\"fontsize\" onchange=\"myeditor.execCommand('fontsize',this.value)\">\n                    <option value=\"10pt\">10pt</option>\n                    <option value=\"11pt\">11pt</option>\n                    <option value=\"12pt\">12pt</option>\n                    <option value=\"14pt\">14pt</option>\n                    <option value=\"16pt\">16pt</option>\n                    <option value=\"18pt\">18pt</option>\n                    <option value=\"20pt\">20pt</option>\n                    <option value=\"22pt\">22pt</option>\n                    <option value=\"24pt\">24pt</option>\n                    <option value=\"36pt\">36pt</option>\n                </select>\n                <input type=\"button\" value=\"插入html\" onclick=\"insert()\" style=\"height:24px;line-height:20px\"/>\n                <input type=\"button\" value=\"清除格式\" onclick=\"myeditor.execCommand('removeformat')\"\n                       style=\"height:24px;line-height:20px\"/>\n                <input type=\"button\" value=\"获得编辑器内容\" onclick=\"alert(myeditor.getContent())\"\n                       style=\"height:24px;line-height:20px\"/>\n                <input type=\"button\" value=\"获得编辑器纯文本内容\" onclick=\"alert(myeditor.getContentTxt())\"\n                       style=\"height:24px;line-height:20px\"/>\n            </div>\n        </div>\n        <div id=\"editor_iframe_holder\"></div>\n    </div>\n    <script type=\"text/javascript\" charset=\"utf-8\">\n        function $G(id) {\n            return document.getElementById(id);\n        }\n\n        //实例化一个不带ui的编辑器,注意此处的实例化对象是baidu.editor下的Editor，而非baidu.editor.ui下的Editor\n        var myeditor = UE.getEditor('editor_iframe_holder', {\n            toolbars: [[]],\n            initialContent: '初始化内容',//初始化编辑器的内容\n            initialFrameHeight: 200\n        });\n        //给编辑器增加一个选中改变的事件，用来判断所选内容以及状态\n        myeditor.addListener('selectionchange', function () {\n            var cmdName = ['bold', 'italic'],//命令列表\n                fontName = ['fontfamily', 'fontsize'];//字体设置下拉框列表，此处选择其中两个\n\n            //查询每个命令当前的状态，并设置对应状态样式\n            var i = -1;\n            while (i++ < cmdName.length - 1) {\n                var state = myeditor.queryCommandState(cmdName[i]);\n                $G(cmdName[i]).style.color = state == 1 ? \"red\" : \"\";\n            }\n            //依据当前光标所在的字体改变下拉列表的选中值\n            i = -1;\n            while (i++ < fontName.length - 1) {\n                var fstate = myeditor.queryCommandValue(fontName[i]).toLowerCase();\n                var fselect = $G(fontName[i]);\n                for (var j = 0; j < fselect.options.length; j++) {\n                    if (fselect.options[j].value.toLowerCase().indexOf(fstate.split(\",\")[0]) != -1) {\n                        fselect.options[j].selected = \"true\";\n                    }\n                }\n            }\n        });\n\n        //插入文本\n        function insert() {\n            var insertTxt = \"插入的文本\";\n            insertTxt = prompt(\"插入的内容\", insertTxt);\n            insertTxt && myeditor.execCommand(\"inserthtml\", insertTxt);\n        }\n\n        function execUnderline(cmd) {\n            myeditor.execCommand(cmd);\n        }\n\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/customizeDialogPage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <script src=\"./example.js\"></script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <div class=\"content\">\n        <h1>测试页面</h1>\n    </div>\n    <!--页面中一定要引入internal.js为了能直接使用当前打开dialog的实例变量-->\n    <!--internal.js默认是放到dialogs目录下的-->\n    <script type=\"text/javascript\" src=\"../dialogs/internal.js\"></script>\n    <script>\n        //可以直接使用以下全局变量\n        //当前打开dialog的实例变量\n        alert('editor: ' + editor);\n        //一些常用工具\n        alert('domUtils: ' + domUtils);\n        alert('utils: ' + utils);\n        alert('browser: ' + browser);\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/customizeToolbarUIDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title>完整demo</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <!--建议手动加在语言，避免在ie下有时因为加载语言失败导致编辑器加载失败-->\n    <!--这里加载的语言文件会覆盖你在配置项目里添加的语言类型，比如你在配置项目里配置的是英文，这里加载的中文，那最后就是中文-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../lang/zh-cn/zh-cn.js?{timestamp}\"></script>\n    <!--添加按钮-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"addCustomizeButton.js\"></script>\n    <!--添加下拉菜单-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"addCustomizeCombox.js\"></script>\n    <!--添加弹出层-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"addCustomizeDialog.js\"></script>\n\n    <style type=\"text/css\">\n        .clear {\n            clear: both;\n        }\n\n        div {\n            width: 100%;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>二次开发demo</h1>\n    <script id=\"editor\" type=\"text/plain\" style=\"height:300px;\"></script>\n</div>\n</body>\n<script type=\"text/javascript\">\n\n    //实例化编辑器\n    //建议使用工厂方法getEditor创建和引用编辑器实例，如果在某个闭包下引用该编辑器，直接调用UE.getEditor('editor')就能拿到相关的实例\n    UE.getEditor('editor', {\n        //清空了工具栏\n        toolbars: [['combox', 'bold', 'button', 'dialog']]\n    });\n\n</script>\n</html>\n"
  },
  {
    "path": "_examples/editor_api.js",
    "content": "/**\n * 开发版本的文件导入\n */\n(function () {\n    var paths = [\n            'editor.js',\n            'core/browser.js',\n            'core/utils.js',\n            'core/EventBase.js',\n            'core/dtd.js',\n            'core/domUtils.js',\n            'core/Range.js',\n            'core/Selection.js',\n            'core/Editor.js',\n            'core/Editor.defaultoptions.js',\n            'core/loadconfig.js',\n            'core/ajax.js',\n            'core/api.js',\n            'core/image.js',\n            'core/dialog.js',\n            'core/filterword.js',\n            'core/node.js',\n            'core/htmlparser.js',\n            'core/filternode.js',\n            'core/plugin.js',\n            'core/keymap.js',\n            'core/localstorage.js',\n            'plugins/defaultfilter.js',\n            'plugins/inserthtml.js',\n            'plugins/autotypeset.js',\n            'plugins/autosubmit.js',\n            'plugins/background.js',\n            'plugins/image.js',\n            'plugins/justify.js',\n            'plugins/font.js',\n            'plugins/link.js',\n            'plugins/iframe.js',\n            'plugins/scrawl.js',\n            'plugins/removeformat.js',\n            'plugins/blockquote.js',\n            'plugins/convertcase.js',\n            'plugins/indent.js',\n            'plugins/print.js',\n            'plugins/preview.js',\n            'plugins/selectall.js',\n            'plugins/paragraph.js',\n            'plugins/directionality.js',\n            'plugins/horizontal.js',\n            'plugins/time.js',\n            'plugins/rowspacing.js',\n            'plugins/lineheight.js',\n            'plugins/insertcode.js',\n            'plugins/cleardoc.js',\n            'plugins/anchor.js',\n            'plugins/wordcount.js',\n            'plugins/pagebreak.js',\n            'plugins/wordimage.js',\n            'plugins/autosave.js',\n            'plugins/formula.js',\n            'plugins/dragdrop.js',\n            'plugins/undo.js',\n            'plugins/copy.js',\n            'plugins/paste.js',\n            'plugins/puretxtpaste.js',\n            'plugins/list.js',\n            'plugins/source.js',\n            'plugins/enterkey.js',\n            'plugins/keystrokes.js',\n            'plugins/fiximgclick.js',\n            'plugins/autolink.js',\n            'plugins/autoheight.js',\n            'plugins/autofloat.js',\n            'plugins/video.js',\n            'plugins/audio.js',\n            'plugins/table.core.js',\n            'plugins/table.cmds.js',\n            'plugins/table.action.js',\n            'plugins/table.sort.js',\n            'plugins/contextmenu.js',\n            'plugins/shortcutmenu.js',\n            'plugins/basestyle.js',\n            'plugins/elementpath.js',\n            'plugins/formatmatch.js',\n            'plugins/searchreplace.js',\n            'plugins/customstyle.js',\n            'plugins/catchremoteimage.js',\n            'plugins/insertparagraph.js',\n            'plugins/template.js',\n            'plugins/autoupload.js',\n            'plugins/section.js',\n            'plugins/simpleupload.js',\n            'plugins/serverparam.js',\n            'plugins/insertfile.js',\n            'plugins/markdown-shortcut.js',\n            'plugins/quick-operate.js',\n            'plugins/letterspacing.js',\n\n            'ui/ui.js',\n            'ui/uiutils.js',\n            'ui/uibase.js',\n            'ui/separator.js',\n            'ui/mask.js',\n            'ui/popup.js',\n            'ui/colorpicker.js',\n            'ui/tablepicker.js',\n            'ui/stateful.js',\n            'ui/button.js',\n            'ui/splitbutton.js',\n            'ui/colorbutton.js',\n            'ui/tablebutton.js',\n            'ui/autotypesetpicker.js',\n            'ui/autotypesetbutton.js',\n            'ui/cellalignpicker.js',\n            'ui/pastepicker.js',\n            'ui/toolbar.js',\n            'ui/quick-operate.js',\n            'ui/menu.js',\n            'ui/combox.js',\n            'ui/dialog.js',\n            'ui/menubutton.js',\n            'ui/multiMenu.js',\n            'ui/shortcutmenu.js',\n            'ui/breakline.js',\n            'ui/message.js',\n\n            'adapter/editorui.js',\n            'adapter/editor.js',\n            'adapter/message.js',\n        ],\n        baseURL = '../_src/';\n    if (window.UEDITOR_HOME_URL) {\n        baseURL = window.UEDITOR_HOME_URL + '_src/';\n    }\n    for (var i = 0, pi; pi = paths[i++];) {\n        document.write('<script src=\"' + baseURL + pi + '?v20250415\"></script>');\n    }\n})();\n"
  },
  {
    "path": "_examples/example.js",
    "content": "if('open.modstart.com'===window.location.host){\n    window.UEDITOR_HOME_URL = 'https://open-cdn.modstart.com/ueditor-plus/'\n    window.UEDITOR_CORS_URL = 'https://open.modstart.com/ueditor-plus/'\n}\n"
  },
  {
    "path": "_examples/filterRuleDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title>过滤规则定制化</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <style type=\"text/css\">\n        .clear {\n            clear: both;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <p>尝试粘贴内容近来，这里边不能粘贴任何inline的样式，不能有iframe,style,script,embed等标签，表格不能嵌套</p>\n    <div>\n        <script id=\"editor\" type=\"text/plain\" style=\"width:500px;height:500px\"></script>\n    </div>\n\n</div>\n</body>\n<script type=\"text/javascript\">\n\n    UE.getEditor('editor', {\n        filterRules: function () {\n            return {\n                span: function (node) {\n                    if (/Wingdings|Symbol/.test(node.getStyle('font-family'))) {\n                        return true;\n                    } else {\n                        node.parentNode.removeChild(node, true)\n                    }\n                },\n                p: function (node) {\n                    var listTag;\n                    if (node.getAttr('class') == 'MsoListParagraph') {\n                        listTag = 'MsoListParagraph'\n                    }\n                    node.setAttr();\n                    if (listTag) {\n                        node.setAttr('class', 'MsoListParagraph')\n                    }\n                    if (!node.firstChild()) {\n                        node.innerHTML(UE.browser.ie ? '&nbsp;' : '<br>')\n                    }\n                },\n                div: function (node) {\n                    var tmpNode, p = UE.uNode.createElement('p');\n                    while (tmpNode = node.firstChild()) {\n                        if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) {\n                            p.appendChild(tmpNode);\n                        } else {\n                            if (p.firstChild()) {\n                                node.parentNode.insertBefore(p, node);\n                                p = UE.uNode.createElement('p');\n                            } else {\n                                node.parentNode.insertBefore(tmpNode, node);\n                            }\n                        }\n                    }\n                    if (p.firstChild()) {\n                        node.parentNode.insertBefore(p, node);\n                    }\n                    node.parentNode.removeChild(node);\n                },\n                //$:{}表示不保留任何属性\n                br: {$: {}},\n//                a: function (node) {\n//                    if(!node.firstChild()){\n//                        node.parentNode.removeChild(node);\n//                        return;\n//                    }\n//                    node.setAttr();\n//                    node.setAttr('href', '#')\n//                },\n//                strong: {$: {}},\n//                b:function(node){\n//                    node.tagName = 'strong'\n//                },\n//                i:function(node){\n//                    node.tagName = 'em'\n//                },\n//                em: {$: {}},\n//                img: function (node) {\n//                    var src = node.getAttr('src');\n//                    node.setAttr();\n//                    node.setAttr({'src':src})\n//                },\n                ol: {$: {}},\n                ul: {$: {}},\n\n                dl: function (node) {\n                    node.tagName = 'ul';\n                    node.setAttr()\n                },\n                dt: function (node) {\n                    node.tagName = 'li';\n                    node.setAttr()\n                },\n                dd: function (node) {\n                    node.tagName = 'li';\n                    node.setAttr()\n                },\n                li: function (node) {\n\n                    var className = node.getAttr('class');\n                    if (!className || !/list\\-/.test(className)) {\n                        node.setAttr()\n                    }\n                    var tmpNodes = node.getNodesByTagName('ol ul');\n                    UE.utils.each(tmpNodes, function (n) {\n                        node.parentNode.insertAfter(n, node);\n\n                    })\n\n                },\n                table: function (node) {\n                    UE.utils.each(node.getNodesByTagName('table'), function (t) {\n                        UE.utils.each(t.getNodesByTagName('tr'), function (tr) {\n                            var p = UE.uNode.createElement('p'), child, html = [];\n                            while (child = tr.firstChild()) {\n                                html.push(child.innerHTML());\n                                tr.removeChild(child);\n                            }\n                            p.innerHTML(html.join('&nbsp;&nbsp;'));\n                            t.parentNode.insertBefore(p, t);\n                        })\n                        t.parentNode.removeChild(t)\n                    });\n                    var val = node.getAttr('width');\n                    node.setAttr();\n                    if (val) {\n                        node.setAttr('width', val);\n                    }\n                },\n                tbody: {$: {}},\n                caption: {$: {}},\n                th: {$: {}},\n                td: {$: {valign: 1, align: 1, rowspan: 1, colspan: 1, width: 1, height: 1}},\n                tr: {$: {}},\n                h3: {$: {}},\n                h2: {$: {}},\n                //黑名单，以下标签及其子节点都会被过滤掉\n                '-': 'script style meta iframe embed object'\n            }\n        }()\n    });\n\n\n</script>\n</html>\n"
  },
  {
    "path": "_examples/highlightDemo.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <!--加入高亮的js和css文件，如果你的编辑器和展示也是一个页面那么高亮的js可以不加载-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../third-party/SyntaxHighlighter/shCore.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../third-party/SyntaxHighlighter/shCoreDefault.css\"/>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>代码高亮演示</h1>\n    <h2>获得编辑器实例</h2>\n    <div style=\"width:200px\">\n    <pre class=\"brush:js;toolbar:false;\">\n        UE.getEditor('myEditor');\n    </pre>\n    </div>\n</div>\n\n<!--style给定宽度可以影响编辑器的最终宽度-->\n<script type=\"text/plain\" id=\"myEditor\" style=\"width:500px\">\n    <h3>实例化编辑器</h3>\n     <pre class=\"brush:js;toolbar:false;\">\n         UE.getEditor('myEditor');\n</pre>\n\n</script>\n<script type=\"text/javascript\">\n    //为了在编辑器之外能展示高亮代码\n    SyntaxHighlighter.highlight();\n    UE.getEditor('myEditor');\n</script>\n\n</body>\n\n\n</html>\n"
  },
  {
    "path": "_examples/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <title>UEditor Plus演示</title>\n    <script src=\"./example.js\"></script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n    <script src=\"./../third-party/jquery-1.10.2.js\"></script>\n    <script>\n        $(function () {\n            $(document).on('click', '[target=\"editor_iframe\"]', function () {\n                $('[data-github-source]').attr('href', 'https://github.com/modstart-lib/ueditor-plus/blob/master/_examples/' + $(this).attr('href'));\n                $('[data-gitee-source]').attr('href', 'https://gitee.com/modstart-lib/ueditor-plus/blob/master/_examples/' + $(this).attr('href'));\n            });\n        });\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n</head>\n<body>\n<div class=\"demo-header\">\n    <div class=\"link\">\n        <a data-github-source\n           href=\"https://github.com/modstart-lib/ueditor-plus/blob/master/_examples/completeDemo.html\" target=\"_blank\">Github源码</a>\n        <a data-gitee-source href=\"https://gitee.com/modstart-lib/ueditor-plus/blob/master/_examples/completeDemo.html\"\n           target=\"_blank\">Gitee源码</a>\n    </div>\n    <h1>UEditor Plus 功能演示</h1>\n</div>\n<div class=\"demo-menu\">\n    <h3>基础示例</h3>\n    <ul>\n        <li>\n            <a href=\"completeDemo.html\" target=\"editor_iframe\">完整示例</a><br/>\n            编辑器的完整功能\n        </li>\n        <li>\n            <a href=\"simpleDemo.html\" target=\"editor_iframe\">简单示例</a><br/>\n            使用基础的按钮实现简单的功能\n        </li>\n    </ul>\n    <h3>应用展示</h3>\n    <ul>\n        <li>\n            <a href=\"submitFormDemo.html\" target=\"editor_iframe\">表单应用</a><br/>\n            编辑器的内容通过表单提交到后台\n        </li>\n        <li>\n            <a href=\"resetDemo.html\" target=\"editor_iframe\">重置编辑器</a><br/>\n            将编辑器的内部变量清空，重置。\n        </li>\n        <li>\n            <a href=\"textareaDemo.html\" target=\"editor_iframe\">文本域渲染编辑器</a><br/>\n            将编辑器渲染到文本域，并且将文本域的内容放到编辑器的初始化内容里\n        </li>\n    </ul>\n    <h3>二次开发</h3>\n    <ul>\n        <li>\n            <a style=\"color:red;\" href=\"customizeToolbarUIDemo.html\" target=\"editor_iframe\">二次开发例子</a><br/>\n            添加自定义的普通按钮、下拉菜单按钮、对话框按钮\n        </li>\n        <li>\n            <a href=\"customToolbarDemo.html\" target=\"editor_iframe\">自定义Toolbar</a><br/>\n            用自己的皮肤，设计自己的编辑器\n        </li>\n        <li>\n            <a href=\"customPluginDemo.html\" target=\"editor_iframe\">自定义插件</a><br/>\n            在编辑器的基础上开发自己的插件\n        </li>\n    </ul>\n    <h3>高级案例</h3>\n    <ul>\n        <li>\n            <a href=\"sortableDemo.html\" target=\"editor_iframe\">表格排序示例</a><br/>\n            编辑表格,并设置排序后可在展示区域点击排序\n        </li>\n        <li>\n            <a href=\"sectionDemo.html\" target=\"editor_iframe\">目录大纲示例</a><br/>\n            获取编辑内容的目录大纲，并通过操作目录，更新编辑器内容\n        </li>\n        <li>\n            <a href=\"multiDemo.html\" target=\"editor_iframe\">多编辑器实例</a><br/>\n            一个页面实例化多个编辑器，互不影响\n        </li>\n        <li>\n            <a href=\"renderInTable.html\" target=\"editor_iframe\">在表格中渲染编辑器</a><br/>\n            表格中渲染编辑器\n        </li>\n        <li>\n            <a href=\"jqueryCompleteDemo.html\" target=\"editor_iframe\">jquery</a><br/>\n            jquery中使用编辑器\n        </li>\n        <li>\n            <a href=\"jqueryValidation.html\" target=\"editor_iframe\">jqueryValidation</a><br/>\n            编辑器在jqueryValidation中验证\n        </li>\n        <li>\n            <a href=\"uparsedemo.html\" target=\"editor_iframe\">展示页面uparse.js解析</a><br/>\n            通过调用uparse.js在展示页面中自动解析编辑内容\n        </li>\n        <li>\n            <a href=\"filterRuleDemo.html\" target=\"editor_iframe\">过滤规则定制化</a><br/>\n            通过配置filterRules可以定制黑白名单，过滤和转换你要的标签和属性\n        </li>\n        <li>\n            <a href=\"setWidthHeightDemo.html\" target=\"editor_iframe\">设置宽高</a><br/>\n            设置宽高的demo页面\n        </li>\n        <li>\n            <a href=\"multiEditorWithOneInstance.html\" target=\"editor_iframe\">多编辑共用实例</a><br/>\n            多个编辑区使用同一个编辑器实例\n        </li>\n    </ul>\n</div>\n<div class=\"demo-iframe\">\n    <div class=\"demo-iframe-container\">\n        <iframe name=\"editor_iframe\" src=\"./completeDemo.html\"></iframe>\n    </div>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/jqueryCompleteDemo.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>使用jquery的完整demo</title>\n    <script src=\"./example.js\"></script>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js\" charset=\"\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>\n        $(function () {\n            var ue = UE.getEditor('myEditor');\n            $('#btn').click(function () {\n                //手动提交需要手动同步编辑器数据\n                ue.sync();\n                $('#form')[0].submit();\n            });\n            //--自动切换提交地址----\n            var version = ue.options.serverUrl || ue.options.imageUrl || \"php\",\n                form = $('#form')[0];\n\n            if (version.match(/php/)) {\n                form.action = \"./server/getContent.php\";\n            } else if (version.match(/net/)) {\n                form.action = \"./server/getContent.ashx\";\n            } else if (version.match(/jsp/)) {\n                form.action = \"./server/getContent.jsp\";\n            } else if (version.match(/asp/)) {\n                form.action = \"./server/getContent.asp\";\n            }\n\n        })\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <form id=\"form\" method=\"post\" target=\"_blank\">\n        <script type=\"text/plain\" id=\"myEditor\" name=\"myEditor\">\n        <p>欢迎使用UEditor！</p>\n\n        </script>\n        <input type=\"button\" id=\"btn\" value=\"提交数据\">\n    </form>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/jqueryValidation.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title>Ueditor在jquery validation下的验证</title>\n    <script src=\"./example.js\"></script>\n    <script src=\"http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js\"></script>\n    <script type=\"text/javascript\"\n            src=\"http://ajax.aspnetcdn.com/ajax/jquery.validate/1.10.0/jquery.validate.min.js\"></script>\n\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>\n        $(function () {\n            UE.getEditor('content');\n\n            var validator = $(\"#myform\").submit(function () {\n                UE.getEditor('content').sync();\n            }).validate({\n                ignore: \"\",\n                rules: {\n                    title: \"required\",\n                    content: \"required\"\n                },\n                errorPlacement: function (label, element) {\n                    label.insertAfter(element.is(\"textarea\") ? element.next() : element);\n                }\n            });\n            validator.focusInvalid = function () {\n                if (this.settings.focusInvalid) {\n                    try {\n                        var toFocus = $(this.findLastActive() || this.errorList.length && this.errorList[0].element || []);\n                        if (toFocus.is(\"textarea\")) {\n                            UE.getEditor('content').focus()\n                        } else {\n                            toFocus.filter(\":visible\").focus();\n                        }\n                    } catch (e) {\n                    }\n                }\n            }\n        })\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n\n    <form id=\"myform\" action=\"\">\n        <h3>Ueditor在jquery validation下的验证</h3>\n\n        <label>其他内容</label>\n        <input name=\"title\"/>\n\n        <br/>\n\n        <label>编辑器</label>\n        <textarea id=\"content\" name=\"content\" rows=\"15\" cols=\"80\" style=\"width: 80%\"></textarea>\n\n        <br/>\n        <input type=\"submit\" name=\"save\" value=\"Submit\"/>\n    </form>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/multiDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>UEditor多实例</h1>\n\n    <!--style给定宽度可以影响编辑器的最终宽度-->\n    <script type=\"text/plain\" id=\"myEditor1\" style=\"margin-bottom:100px;\">\n        <p>这里是初始化内容1</p>\n    </script>\n    <script type=\"text/plain\" id=\"myEditor2\" style=\"margin-bottom:100px;\">\n        <p>这里我可以写一些输入提示2</p>\n    </script>\n    <script type=\"text/plain\" id=\"myEditor3\" style=\"margin-bottom:100px;\">\n        <p>这里是初始化内容3</p>\n    </script>\n\n    <script type=\"text/javascript\">\n        UE.getEditor('myEditor1', {\n            theme: \"default\", //皮肤\n            lang: 'zh-cn' //语言\n        });\n        UE.getEditor('myEditor2', {\n            autoClearinitialContent: true, //focus时自动清空初始化时的内容\n            wordCount: false, //关闭字数统计\n            elementPathEnabled: false//关闭elementPath\n        });\n        UE.getEditor('myEditor3', {\n            //toolbars:[['FullScreen', 'Source', 'Undo', 'Redo','Bold']],//这里可以选择自己需要的工具按钮名称,此处仅选择如下五个\n            lang: \"en\"\n            //更多其他参数，请参考ueditor.config.js中的配置项\n        });\n    </script>\n\n</div>\n</body>\n\n\n</html>\n"
  },
  {
    "path": "_examples/multiEditorWithOneInstance.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script src=\"http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.3.min.js\"></script>\n    <style>\n        table {\n            margin-bottom: 10px;\n            border-collapse: collapse;\n            display: table;\n            border: 1px dashed #ddd\n        }\n\n        #test td {\n            padding: 5px;\n            border: 1px solid #DDD;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page wide\">\n<div>\n    <h1>UEditor多编辑区域一个编辑器实例</h1>\n    <table id=\"test\">\n        <tr>\n            <td width=\"100\">\n                编辑区域一\n            </td>\n            <td class=\"content\" id=\"content1\">\n                <script id=\"editor1\" type=\"text/plain\" style=\"width:1024px;height:200px;\">内容1</script>\n            </td>\n        </tr>\n        <tr>\n            <td>\n                编辑区域二\n            </td>\n            <td class=\"content\" id=\"content2\">内容2</td>\n        </tr>\n        <tr>\n            <td>\n                编辑区域三\n            </td>\n            <td class=\"content\" id=\"content3\">内容3</td>\n        </tr>\n    </table>\n\n    <script type=\"text/javascript\">\n        var ue = UE.getEditor('editor1');\n        ue.ready(function () {\n            //阻止工具栏的点击向上冒泡\n            $(this.container).click(function (e) {\n                e.stopPropagation()\n            })\n        });\n        $('.content').click(function (e) {\n            var $target = $(this);\n            var content = $target.html();\n            var currentParnet = ue.container.parentNode.parentNode;\n            var currentContent = ue.getContent();\n            $target.html('');\n            $target.append(ue.container.parentNode);\n            ue.reset();\n            setTimeout(function () {\n                ue.setContent(content);\n            }, 200)\n            $(currentParnet).html(currentContent);\n        })\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/renderInTable.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <title>表格内实例化编辑器实例</title>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <div style=\"height: 100px\"></div>\n    <div id=\"div\" style=\"border: 1px solid #fff\">\n        <table border=\"1\">\n            <caption>表格标题</caption>\n            <tr>\n                <th>标题</th>\n                <th>内容</th>\n            </tr>\n            <!--编辑器实例化到表格内部时，请在对应的单元格上明确标注宽度值（百分数或者直接数均可），否则有可能在工具栏浮动等功能状态下出现移位-->\n            <tr>\n                <td>中国</td>\n                <td width=\"100%\"><textarea id=\"editor\"></textarea></td>\n            </tr>\n        </table>\n    </div>\n    <script type=\"text/javascript\">\n        UE.getEditor('editor');\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/resetDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=8\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <title>重置编辑器</title>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h2>重置编辑器和销毁编辑器示例</h2>\n    <div class=\"content\" id=\"simple\"></div>\n    <p><input type=\"button\" onclick=\"doSimple()\" value=\"重置编辑器内部参数\"><span id=\"txt\"></span></p>\n    <p><input id=\"destroy\" type=\"button\" onclick=\"doDestroy()\" value=\"销毁编辑器\"></p>\n    <script type=\"text/javascript\" charset=\"utf-8\">\n        var editor = UE.getEditor('simple');\n\n        function doSimple() {\n            if (editor) {\n                editor.setContent(\"编辑器内部变量已经被重置!\");\n                editor.reset();\n            }\n        }\n\n        function doDestroy() {\n            editor.destroy();\n            editor = null;\n            clearInterval(timer);\n            var button = document.getElementById(\"destroy\");\n\n            button.value = \"重新渲染\";\n            button.onclick = function () {\n                editor = UE.getEditor('simple');\n                this.value = \"销毁编辑器\";\n                this.onclick = doDestroy;\n                timer = setInterval(setMsg, 100);\n            }\n        }\n\n        function setMsg() {\n            if (editor && editor.undoManger) {\n                document.getElementById(\"txt\").innerHTML = \"编辑器当前保存了 <span style='color: red'> \" + editor.undoManger.list.length + \" </span>次操作\";\n            }\n        }\n\n        var timer = setInterval(setMsg, 100);\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/sectionDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title>目录大纲demo</title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../lang/zh-cn/zh-cn.js?{timestamp}\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../third-party/jquery-1.10.2.js\"></script>\n    <style>\n        #directionContainer ul {\n            margin: 0px;\n            padding: 0px 0px 0px 20px;\n        }\n\n        .main {\n            width: 1024px;\n        }\n\n        .left {\n            width: 250px;\n            height: 50px;\n            float: left;\n            margin-right: 4px;\n        }\n\n        .right {\n            width: 730px;\n            float: left;\n        }\n\n        #directionWrapper {\n            padding: 15px 7px;\n            width: 234px;\n            border: 1px solid #CCC;\n        }\n\n        .directionTitle {\n            font-weight: bold;\n            font-size: 14px;\n            padding-bottom: 3px;\n            border-bottom: 1px dashed #ccc;\n        }\n\n        .sectionItem {\n            height: 20px;\n            padding: 4px;\n        }\n\n        .sectionItem span {\n            *zoom: 1;\n            display: inline-block;\n        }\n\n        .itemTitle {\n            _float: left;\n        }\n\n        .selectIcon, .deleteIcon, .moveUp, .moveDown {\n            float: right;\n            color: red;\n            font-size: 0px;\n            line-height: 20px;\n            height: 20px;\n            text-align: center;\n            cursor: pointer;\n        }\n\n        .selectIcon, .moveUp, .moveDown {\n            width: 14px;\n            font-size: 10px;\n        }\n\n        .selectIcon:hover, .moveUp:hover, .moveDown:hover {\n            text-decoration: underline;\n        }\n\n        .deleteIcon {\n            width: 20px;\n            margin-left: 3px;\n            background: url(../themes/default/images/icons-all.gif) 0 -89px;\n        }\n\n        .fixTop {\n            position: fixed;\n            top: -1px;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div style=\"max-width:1024px;\">\n    <div class=\"main\">\n        <h1>目录大纲demo</h1>\n        <div class=\"left\">\n            <div id=\"directionWrapper\">\n                <div class=\"directionTitle\">目录：</div>\n                <div id=\"directionContainer\"></div>\n            </div>\n        </div>\n        <div class=\"right\">\n            <script id=\"editor\" type=\"text/plain\" style=\"width:730px;height:500px;\">\n            <p style=\"text-indent: 2em;\"><strong>UEditor</strong>是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器，具有轻量、可定制、用户体验优秀等特点。开源基于BSD协议，所有源代码在协议允许范围内可自由修改和使用。百度UEditor的推出，可以帮助不少网站开者在开发富文本编辑器所遇到的难题，节约开发者因开发富文本编辑器所需要的大量时间，有效降低了企业的开发成本。</p><h2>特点 </h2><p>UEditor在设计上采用了经典的分层架构设计理念，尽量做到功能层次之间的轻度耦合。具体来讲，整个系统分为了核心层、命令插件层和UI层这样三个低耦合的层次。</p><h2 index=\"3\"> 应用领域 </h2> <h3 index=\"3_1\"> 百度产品线 </h3><p>百度百科、百度空间、百度经验、百度旅游、百度知道、百度贴吧、百度新知</p><h3 index=\"3_2\"> 其他公司产品 </h3><p>麦库记事、网易lofter</p><h2 index=\"4\"> 更新记录 </h2> <h3 index=\"4_3\"> 1.2.6.1版本 </h3> <h4> 新增功能 </h4> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li> <p>查找替换支持正则表达式</p></li><li><p>增加类似word中的快捷菜单，默认关闭</p></li><li><p>针对默认过滤回转换div为p标签，提供了配置开关allowDivTransToP,默认为true</p></li><li><p>工具栏支持指定位置折行，&#39;|&#39;表示分割符,&#39;||&#39;表示折行</p></li> </ul> <h4> 优化修复 </h4> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li> <p>修复了ie67下初始化宽高给定百分比</p></li><li><p>修复了在ie下删除分割线后光标定位的问题</p></li><li><p>提供了手动加载语言文件，避免ie下有时会因语言文件加载失败导致编辑器加载失败,提示&quot;not import language file&quot;的错误</p></li><li><p>优化了编辑器初始化时获得contentWindow可能不存在的情况</p></li><li><p>优化了编辑器加载自定义样式的问题，默认initialStyle传入的css样式优先级最高，其次是指定的外部css文件</p></li><li><p>表格操作功能升级，优化了对表格的拖拉及双击操作，并且支持IE6+浏览器</p></li><li><p>修复编辑器在禁用状态下仍然可以拖动表格边框的bug</p></li><li><p>修复了分割线不能删除的问题</p></li><li><p>修复了初始化内容过多时，编辑器不自动长高，要点击编辑器才会长高的问题</p></li><li><p>优化了添加字符边框的展示效果，避免出现重叠的问题</p></li><li><p>修复下拉菜单超出屏幕的bug</p></li><li><p>修复table属性初始化时table布局错误的bug</p></li><li><p>优化了选择工具栏上下拉菜单类型的操作命令时，选区会有闪动的问题</p></li><li><p>优化了关于swfupload的一个xss漏洞</p></li><li><p>优化了对于ie9,10的支持</p></li> </ul> <h3 index=\"4_5\"> 1.2.5版本 </h3> <h4> 新增功能 </h4> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li><p>table整体重构</p></li><li><p> table支持插入表头和标题</p></li><li><p> table支持拷贝</p></li><li><p> table支持任意调整宽高</p></li><li><p> ...</p></li> </ul> <h3 index=\"4_6\"> 1.2.4版本 </h3> <h4> 新增功能 </h4> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li><p>官网新增API文档</p></li><li><p> CSS按照UI结构进行了模块化拆分</p></li><li><p> 新增皮肤切换功能，并提供一套新皮肤（可通过配置项theme来设置）</p></li><li><p> ...</p></li> </ul> <h2 index=\"5\"> 正式版 </h2> <h3 index=\"5_11\"> 新增功能 </h3> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li> <p>新增了编辑器路径的设置，可以不用手动设置路径，自动识别相关路径，解决路径设置繁琐的问题</p></li><li><p>重写了过滤粘贴机制，采用黑白名单，可以书写符合自己需求的过滤规则，可以完全定义标签的属性，甚至是style上的某个属性及其数值</p></li><li><p>数据同步改为失去焦点就执行，可以不再使用sync方法手动同步数据</p></li><li><p>改使用closure的压缩工具</p></li><li><p>表格支持排序和隔行显示</p></li><li><p>优化了undo/redo操作</p></li><li><p>优化了ui界面</p></li><li><p>添加了字体边框</p></li> </ul> <h3 index=\"5_12\"> 优化修复 </h3> <ul class=\" list-paddingleft-2\" style=\"list-style-type: disc;\"> <li> <p>优化了拖拽机制，处理浮动图片拖拽不能跟指定的某行对齐</p></li><li><p>优化了backspace/del键的操作</p></li><li><p>重写了插入代码功能，插入代码编写支持tab和回车键</p></li><li><p>列表粘贴优化，模仿word的列表粘贴</p></li><li><p>修复jsp后台8080端口,截屏插件返回错误的问题</p></li><li><p>修复firefox下编辑状态切换的问题</p></li><li><p>修复查找替换报错</p></li><li><p>修复表格新增行后宽度丢失问题</p></li><li><p>修复表格底纹和表格排序多语言配置遗漏</p></li><li><p>解决右键，粘贴，对话框内容报错</p></li><li><p>修复设置单元格颜色问题</p></li><li><p>优化大字号下的显示问题</p></li><li><p>解决IE下表格粘贴失效问题</p></li><li><p>修复选中内容设置成代码，出现多余字符的问题</p></li><li><p>修复从word粘贴内容到编辑器，过滤失效的问题</p></li><li><p>修复光标闭合，多次点击字符边框按钮，会出现多余的字符“font”的问题</p></li><li><p>修复字符边框效果错误的问题</p></li> <li><p>以及其他的一些问题.</p></li> </ul><p><br/></p>\n\n            </script>\n        </div>\n    </div>\n</div>\n\n</body>\n<script type=\"text/javascript\">\n    //实例化编辑器\n    var ue = UE.getEditor('editor', {\n        autoHeightEnabled: false\n    });\n\n    ue.ready(function () {\n        ue.addListener('updateSections', resetHandler);\n    });\n\n    var resetHandler = function () {\n        var dirmap = {}, dir = ue.execCommand('getsections');\n\n        // 更新目录树\n        $('#directionContainer').html(traversal(dir) || null);\n        // 删除章节按钮\n        $('.deleteIcon').click(function (e) {\n            var $target = $(this),\n                address = $target.parent().attr('data-address');\n            ue.execCommand('deletesection', dirmap[address]);\n        });\n        // 选中章节按钮\n        $('.selectIcon').click(function (e) {\n            var $target = $(this),\n                address = $target.parent().attr('data-address');\n            ue.execCommand('selectsection', dirmap[address], true);\n        });\n        // 章节上移\n        $('.moveUp,.moveDown').click(function (e) {\n            var $target = $(this),\n                address = $target.parent().attr('data-address'),\n                moveUp = $target.hasClass('moveUp') ? true : false;\n            if ($target.hasClass('moveUp')) {\n                ue.execCommand('movesection', dirmap[address], dirmap[address].previousSection);\n            } else {\n                ue.execCommand('movesection', dirmap[address], dirmap[address].nextSection, true);\n            }\n        });\n        // 页面网上滚动时，让目录固定在顶部\n        $(window).scroll(function (e) {\n            if ($('.left').offset().top < (document.body.scrollTop || document.documentElement.scrollTop)) {\n                $('#directionWrapper').addClass('fixTop');\n            } else {\n                $('#directionWrapper').removeClass('fixTop');\n            }\n        });\n\n        function traversal(section) {\n            var $list, $item, $itemContent, child, childList;\n            if (section.children.length) {\n                $list = $('<ul>');\n                for (var i = 0; i < section.children.length; i++) {\n                    child = section.children[i];\n                    //设置目录节点内容标签\n                    var title = getSubStr(child['title'], 18);\n                    $itemContent = $('<div class=\"sectionItem\"></div>').html($('<span class=\"itemTitle\">' + title + '</span>'));\n                    $itemContent.attr('data-address', child['startAddress'].join(','));\n                    $itemContent.append($('<span class=\"deleteIcon\">删</span>' +\n                        '<span class=\"selectIcon\">选</span>' +\n                        '<span class=\"moveUp\">↑</span>' +\n                        '<span class=\"moveDown\">↓</span>'));\n                    dirmap[child['startAddress'].join(',')] = child;\n                    //设置目录节点容器标签\n                    $item = $('<li>');\n                    $item.append($itemContent);\n                    //继续遍历子节点\n                    if ($item.children.length) {\n                        childList = traversal(child);\n                        childList && $item.append(childList);\n                    }\n                    $list.append($item);\n                }\n            }\n            return $list;\n        }\n    }\n\n    function getSubStr(s, l) {\n        var i = 0, len = 0;\n        for (i; i < s.length; i++) {\n            if (s.charAt(i).match(/[^\\x00-\\xff]/g) != null) {\n                len += 2;\n            } else {\n                len++;\n            }\n            if (len > l) {\n                break;\n            }\n        }\n        return s.substr(0, i);\n    };\n</script>\n</html>\n"
  },
  {
    "path": "_examples/setWidthHeightDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js?{timestamp}\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js?{timestamp}\"></script>\n    <!--建议手动加在语言，避免在ie下有时因为加载语言失败导致编辑器加载失败-->\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../lang/zh-cn/zh-cn.js?{timestamp}\"></script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>UEditor设置宽高demo</h1>\n    <h2><span style=\"color:red\">这里的宽高都只是编辑区域的宽高，不包括工具栏的高度和状态栏的高度</span></h2>\n    <h2>容器给定编辑器的宽高</h2>\n\n    <script type=\"text/plain\" id=\"myEditor\" style=\"width:500px;height:500px\"></script>\n\n    <div style=\"clear:both\"></div>\n    <h2>初始化时给定编辑器的宽高</h2>\n    <script type=\"text/plain\" id=\"myEditor1\"></script>\n\n    <h2>没有工具栏的编辑器</h2>\n    <div id=\"myEditor2\" style=\"width:700px;height:300px;border:1px solid #ccc\"></div>\n\n    <script type=\"text/javascript\">\n        //根据容器的宽高\n        //容器给定高度\n        UE.getEditor('myEditor');\n        UE.getEditor('myEditor1', {\n            initialFrameWidth: 600,\n            initialFrameHeight: 600\n        });\n\n        var noToolbar = new UE.Editor();\n        noToolbar.render('myEditor2', {\n            autoFloatEnabled: false\n        })\n\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/simpleDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script src=\"./example.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>UEditorPlus简单功能</h1>\n    <!--style给定宽度可以影响编辑器的最终宽度-->\n    <script type=\"text/plain\" id=\"myEditor\">\n        <p>这里我可以写一些输入提示</p>\n\n    </script>\n    <script type=\"text/javascript\">\n        UE.getEditor('myEditor', {\n            //这里可以选择自己需要的工具按钮名称,此处仅选择如下五个\n            toolbars: [['fullscreen', 'source', 'undo', 'redo', 'bold']],\n            //focus时自动清空初始化时的内容\n            autoClearinitialContent: true,\n            //关闭字数统计\n            wordCount: false,\n            //关闭elementPath\n            elementPathEnabled: false,\n            //默认的编辑区域高度\n            initialFrameHeight: 300\n            //更多其他参数，请参考ueditor.config.js中的配置项\n        })\n    </script>\n</div>\n</body>\n\n\n</html>\n"
  },
  {
    "path": "_examples/sortableDemo.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <script src=\"./example.js\"></script>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"../ueditor.parse.js\" type=\"text/javascript\"></script>\n    <title></title>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>表格排序演示</h1>\n    <p>\n    <p>\n        <strong>默认排序方法有五种:</strong><br/>\n        reversecurrent : 逆序当前<br/>\n        orderbyasc : 按ASCII字符升序<br/>\n        reversebyasc : 按ASCII字符降序<br/>\n        orderbynum : 按数值大小升序<br/>\n        reversebynum : 按数值大小降序\n    </p>\n    <p>\n        <span style=\"font-size: 14px; color: rgb(127, 127, 127);\">表格data-sort-type属性值为reversebynum，<span\n            style=\"color:#ff511a; font-weight: bold;\">按照数值大小降序排序</span>，点击第一行的单元格进行排序。</span>\n    </p>\n    <div id=\"content1\" class=\"content\">\n        <table data-sort=\"sortEnabled\" width=\"992\" class=\"sortEnabled\" data-sort-type=\"reversebynum\">\n            <tbody>\n            <tr class=\"firstRow\">\n                <td width=\"165\">343</td>\n                <td width=\"165\">352</td>\n                <td width=\"165\">323</td>\n                <td width=\"165\">234</td>\n                <td width=\"165\">379</td>\n                <td width=\"166\">782</td>\n            </tr>\n            <tr>\n                <td width=\"165\">341</td>\n                <td width=\"165\">163</td>\n                <td width=\"165\">422</td>\n                <td width=\"165\">234</td>\n                <td width=\"165\">725</td>\n                <td width=\"166\">833</td>\n            </tr>\n            <tr>\n                <td width=\"165\">221</td>\n                <td width=\"165\">456</td>\n                <td width=\"165\">335</td>\n                <td width=\"165\">423</td>\n                <td width=\"165\">445</td>\n                <td width=\"166\">793</td>\n            </tr>\n            <tr>\n                <td width=\"165\">112</td>\n                <td width=\"165\">277</td>\n                <td width=\"165\">563</td>\n                <td width=\"165\">423</td>\n                <td width=\"165\">932</td>\n                <td width=\"166\">425</td>\n            </tr>\n            <tr>\n                <td width=\"165\">587</td>\n                <td width=\"165\">175</td>\n                <td width=\"165\">159</td>\n                <td width=\"165\">734</td>\n                <td width=\"165\">582</td>\n                <td width=\"166\">458</td>\n            </tr>\n            </tbody>\n        </table>\n    </div>\n\n    <p>\n        <br/>\n    </p>\n    <p>\n        <span style=\"font-size: 14px; color: rgb(127, 127, 127);\">自定义排序，<span style=\"color:#ff511a; font-weight: bold;\">按照个位数排序</span>，点击第一行的单元格进行排序。</span>\n    </p>\n    <div id=\"content2\" class=\"content\">\n        <table data-sort=\"sortEnabled\" width=\"992\" class=\"sortEnabled\">\n            <tbody>\n            <tr class=\"firstRow\">\n                <td width=\"165\">343</td>\n                <td width=\"165\">352</td>\n                <td width=\"165\">323</td>\n                <td width=\"165\">234</td>\n                <td width=\"165\">379</td>\n                <td width=\"166\">782</td>\n            </tr>\n            <tr>\n                <td width=\"165\">341</td>\n                <td width=\"165\">163</td>\n                <td width=\"165\">422</td>\n                <td width=\"165\">234</td>\n                <td width=\"165\">725</td>\n                <td width=\"166\">833</td>\n            </tr>\n            <tr>\n                <td width=\"165\">221</td>\n                <td width=\"165\">456</td>\n                <td width=\"165\">335</td>\n                <td width=\"165\">423</td>\n                <td width=\"165\">445</td>\n                <td width=\"166\">793</td>\n            </tr>\n            <tr>\n                <td width=\"165\">112</td>\n                <td width=\"165\">277</td>\n                <td width=\"165\">563</td>\n                <td width=\"165\">423</td>\n                <td width=\"165\">932</td>\n                <td width=\"166\">425</td>\n            </tr>\n            <tr>\n                <td width=\"165\">587</td>\n                <td width=\"165\">175</td>\n                <td width=\"165\">159</td>\n                <td width=\"165\">734</td>\n                <td width=\"165\">582</td>\n                <td width=\"166\">458</td>\n            </tr>\n            </tbody>\n        </table>\n    </div>\n\n\n    <script>\n        // 语法\n        // uParse(selector,[option])\n        /*\n         selector支持\n         id,class,tagName\n         */\n        /*\n         目前支持的参数\n         option:\n         highlightJsUrl 代码高亮相关js的路径 如果展示有代码高亮，必须给定该属性\n         highlightCssUrl 代码高亮相关css的路径 如果展示有代码高亮，必须给定该属性\n         liiconpath 自定义列表样式的图标路径，可以不给定，默认'http://bs.baidu.com/listicon/',\n         listDefaultPaddingLeft : 自定义列表样式的左边宽度 默认'20',\n         customRule 可以传入你自己的处理规则函数，函数第一个参数是容器节点\n         */\n        uParse('#content1', {\n            rootPath: '../'\n        })\n        uParse('#content2', {\n            rootPath: '../',\n            tableSortCompareFn: function (td1, td2) {\n                var value1 = td1.innerText || td1.textContent,\n                    value2 = td2.innerText || td2.textContent;\n                return parseInt(value1) % 10 > parseInt(value2) % 10;\n            }\n        })\n\n    </script>\n\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/style.css",
    "content": "body, html, * {\n    padding: 0;\n    margin: 0;\n}\n\nbody {\n    -ms-overflow-style: auto;\n    -webkit-tap-highlight-color: transparent;\n    font-family: \"Segoe UI\", \"Lucida Grande\", Helvetica, Arial, \"Microsoft YaHei\", FreeSans, Arimo, \"Droid Sans\", \"wenquanyi micro hei\", \"Hiragino Sans GB\", \"Hiragino Sans GB W3\", FontAwesome, sans-serif;\n    -webkit-text-size-adjust: 100%;\n    -ms-text-size-adjust: 100%;\n    background: #F4F6F8;\n    color: #34495e;\n}\n\n.demo-header {\n    background: #5248FE;\n    color: #FFF;\n    height: 50px;\n    padding: 0 10px;\n}\n\n.demo-header .link {\n    float: right;\n}\n\n.demo-header .link a {\n    color: #FFF;\n    display: inline-block;\n    line-height: 50px;\n    text-decoration: none;\n    font-size: 14px;\n}\n\n.demo-header h1 {\n    font-size: 20px;\n    line-height: 50px;\n}\n\n.demo-iframe {\n    border: 2px solid #EEE;\n    position: fixed;\n    left: 200px;\n    top: 50px;\n    width: calc(100vw - 200px);\n    height: calc(100vh - 52px);\n    overflow: auto;\n    background: #FFF;\n}\n\n.demo-iframe-container {\n    position: absolute;\n    top: 0px;\n    left: 0px;\n    right: 0px;\n    bottom: 0px;\n    overflow: hidden;\n}\n\n.demo-iframe .demo-iframe-container iframe {\n    width: 100%;\n    height: 100%;\n    border: none;\n}\n\n.demo-menu {\n    border: 2px solid #EEE;\n    position: fixed;\n    left: 0;\n    bottom: 0px;\n    top: 50px;\n    width: 200px;\n    height: calc(100vh - 52px);\n    overflow: auto;\n    padding: 10px;\n    background: #FFF;\n    box-sizing: border-box;\n}\n\n.demo-menu * {\n    padding: 0;\n    margin: 0;\n    list-style: none;\n}\n\n.demo-menu h3 {\n    font-size: 16px;\n}\n\n.demo-menu ul {\n    margin-left: 10px;\n    margin-bottom: 10px;\n}\n\n.demo-menu ul li {\n    font-size: 12px;\n    color: #999;\n    padding: 5px 5px 5px 0;\n    white-space: normal;\n    word-break: break-all;\n}\n\n.demo-menu ul li a {\n    color: #34495e;\n    text-decoration: none;\n    font-size: 14px;\n}\n\n.demo-editor-page {\n    background: #FFF;\n    padding: 0;\n}\n\n.demo-editor-page > div {\n    max-width: 800px;\n    margin: 20px auto;\n}\n\n.demo-editor-page.wide > div {\n    max-width: inherit;\n}\n\n.demo-editor-page h1 {\n    font-size: 30px;\n    line-height: 30px;\n    margin-bottom: 10px;\n}\n\nbutton, input[type=\"submit\"], input[type=\"button\"] {\n    display: inline-block;\n    font-weight: 400;\n    text-align: center;\n    white-space: nowrap;\n    vertical-align: middle;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n    border: none;\n    padding: 5px 10px;\n    font-size: 13px;\n    line-height: 1.5;\n    border-radius: 4rem;\n    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    -webkit-appearance: none;\n    cursor: pointer;\n    margin-bottom: 5px;\n    color: #34495e;\n    background-color: #EEE;\n}\n\nbutton:hover, input[type=\"submit\"]:hover, input[type=\"button\"]:hover {\n    background-color: #DDD;\n    box-shadow: 0 0 5px #999;\n}\n"
  },
  {
    "path": "_examples/submitFormDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <script src=\"./example.js\"></script>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <style type=\"text/css\">\n        body {\n            font-size: 14px;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h2>UEditorPlus提交示例</h2>\n    <form id=\"form\" method=\"post\" target=\"_blank\">\n        <script type=\"text/plain\" id=\"myEditor\" name=\"myEditor\">\n            <p>欢迎使用UEditorPlus！</p>\n\n        </script>\n        <input type=\"submit\" value=\"通过input的submit提交\">\n    </form>\n    <p>\n        <button onclick=\"document.getElementById('form').submit()\">通过js调用submit提交</button>\n    </p>\n    <script type=\"text/javascript\">\n        var editor_a = UE.getEditor('myEditor', {initialFrameHeight: 500});\n        editor_a.addListener(\"contentchange\", function () {\n            console.log('编辑器内容发生改变', editor_a.getContent());\n        })\n        //--自动切换提交地址----\n        var doc = document,\n            version = editor_a.options.serverUrl || editor_a.options.imageUrl || \"php\",\n            form = doc.getElementById(\"form\");\n        form.action = \"../_demo_server/handle.php?action=showPost\";\n    </script>\n\n</div>\n</body>\n\n\n</html>\n"
  },
  {
    "path": "_examples/textareaDemo.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <script src=\"./example.js\"></script>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <title></title>\n\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"../ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"editor_api.js\"></script>\n    <style type=\"text/css\">\n        #myEditor {\n            height: 300px;\n        }\n    </style>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>文本域渲染编辑器</h1>\n    <form action=\"\">\n        <!--style给定宽度可以影响编辑器的最终宽度-->\n        <textarea id=\"myEditor\" name=\"myEditor\">这里是原始的textarea中的内容，可以从数据中读取</textarea>\n        <br/>\n        <input type=\"button\" onclick=\"render()\" value=\"渲染编辑器\">\n    </form>\n    <script type=\"text/javascript\">\n        //渲染编辑器\n        var ue = null;\n        function render() {\n            ue = UE.getEditor('myEditor')\n        }\n    </script>\n\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples/uparsedemo.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <script src=\"./example.js\"></script>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script src=\"../ueditor.parse.js\"></script>\n    <title></title>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>解析编辑的内容</h1>\n    <div class=\"content\" style=\"width:200px\">\n        <ol class=\"custom_cn2 list-paddingleft-1\">\n            <li class=\"list-cn-3-1 list-cn2-paddingleft-1\"><p>这里可以书写，编辑器的初始内容</p></li>\n        </ol>\n        <ul class=\"custom_dash list-paddingleft-1\">\n            <li class=\"list-dash list-dash-paddingleft\"><p>sdfas</p></li>\n        </ul>\n        <ol class=\"custom_cn2 list-paddingleft-1\">\n            <ol style=\"list-style-type: decimal; \" class=\" list-paddingleft-3\">\n                <li><p>dfas</p></li>\n            </ol>\n            <li class=\"list-cn-3-1 list-cn2-paddingleft-1\"><p>dfa</p></li>\n            <ol style=\"list-style-type: decimal; \" class=\" list-paddingleft-3\">\n                <li><p>sdfadf</p></li>\n            </ol>\n        </ol>\n        <p>\n            这里可以书写，编辑器的初始内容\n        </p>\n        <p>\n            <video class=\"video-js vjs-default-skin\" data-setup=\"{}\" controls preload=\"none\" width=\"640\" height=\"264\"\n                   src=\"http://video-js.zencoder.com/oceans-clip.mp4\"\n                   poster=\"http://video-js.zencoder.com/oceans-clip.png\">\n                <source src=\"http://video-js.zencoder.com/oceans-clip.mp4\" type='video/mp4'/>\n            </video>\n        </p>\n        <pre class=\"brush:js;toolbar:false;\">\n               moveToBookmark:function (bookmark) {\n            var start = bookmark.id ? this.document.getElementById(bookmark.start) : bookmark.start,\n                end = bookmark.end && bookmark.id ? this.document.getElementById(bookmark.end) : bookmark.end;\n            this.setStartBefore(start);\n            domUtils.remove(start);\n            if (end) {\n                this.setEndBefore(end);\n                domUtils.remove(end);\n            } else {\n                this.collapse(true);\n            }\n            return this;\n        },\n        </pre>\n        <ol class=\"custom_cn2 list-paddingleft-1\">\n            <li class=\"list-cn-3-1 list-cn2-paddingleft-1\">\n                <p>\n                    dfasdf\n                </p>\n            </li>\n            <li class=\"list-cn-3-2 list-cn2-paddingleft-1\">\n                <p>\n                    asd\n                </p>\n            </li>\n            <li class=\"list-cn-3-3 list-cn2-paddingleft-1\">\n                <p>\n                    fa\n                </p>\n            </li>\n            <li class=\"list-cn-3-4 list-cn2-paddingleft-1\">\n                <p>\n                    sdfa\n                </p>\n            </li>\n            <li class=\"list-cn-3-5 list-cn2-paddingleft-1\">\n                <p>\n                    sdfa\n                </p>\n            </li>\n        </ol>\n    </div>\n    <div id=\"content\" class=\"content\">\n        <table width=\"960\">\n            <caption>\n                sdf<br/>\n            </caption>\n            <tbody>\n            <tr>\n                <th valign=\"null\">\n                    sdf<br/>\n                </th>\n                <th valign=\"null\">\n                    sdf<br/>\n                </th>\n                <th valign=\"null\">\n                    <br/>\n                </th>\n                <th valign=\"null\">\n                    <br/>\n                </th>\n                <th valign=\"null\">\n                    <br/>\n                </th>\n                <th valign=\"null\">\n                    <br/>\n                </th>\n                <th valign=\"null\">\n                    <br/>\n                </th>\n            </tr>\n            <tr>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n            </tr>\n            <tr>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n                <td width=\"116\" valign=\"top\">\n                    <br/>\n                </td>\n            </tr>\n            </tbody>\n        </table>\n    </div>\n    <div class=\"content_background\">\n        <h1>\n            UEditor\n        </h1>\n        <h2>\n            简介\n        </h2>\n        <p>\n            UEditor是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器，具有轻量、可定制、用户体验优秀等特点。开源基于BSD协议，所有源代码在协议允许范围内可自由修改和使用。百度UEditor的推出，可以帮助不少网站开者在开发富文本编辑器所遇到的难题，节约开发者因开发富文本编辑器所需要的大量时间，有效降低了企业的开发成本。\n        </p>\n        <h2>\n            特点<br/>\n        </h2>\n        <p>\n            1、核心层提供了编辑器底层的一些方法和概念，如DOM树操作、Selection、Range等。\n        </p>\n        <p>\n            2、在核心层之上覆盖的是命令插件层。之所以叫命令插件层，是因为UEditor中所有的功能型实现都是通过这一层中的命令和插件来完成的，并且各个命令和插件之间基本互不耦合——使用者需要使用哪个功能就导入哪个功能对应的命令或者插件文件，完全不用考虑另外那些杂七杂八的JS文件（极少数插件除外，关于这些插件下文会整理出一个依赖列表来供同学们参考）。\n        </p>\n        <p>\n            理论上来讲，所有的命令都是可以用插件来代替的，但是依然将两者分开的主要原因是命令都是一些静态的方法，无需随editor实例初始化，从而优化了编辑器的性能。而插件随编辑器的初始化而初始化，性能上会有少许的影响，但相比命令而言，插件能够完成更加复杂的功能。其中最主要的一个特点是在插件内部既可以为编辑器注册命令，也可以为编辑器绑定监听事件。这个特点使得为编辑器添加任何功能都可以在插件中独立完成。\n        </p>\n        <p>\n            3、在命令插件层之上则是UI层。UEditor的UI设计与核心层和命令插件层几乎完全解耦，简单的几个配置就可以为编辑器在界面上添加额外的UI元素和功能，具体的配置下面将会深入阐述。\n        </p>\n        <p>\n            <br/>\n        </p>\n        <p style=\"display:none;\"\n           data-background=\"background-repeat:no-repeat;background-position:center center;background-color:#C3D69B;background-image:url(http://www.baidu.com/img/bdlogo.gif);\">\n            <br/>\n        </p>\n    </div>\n\n    <script>\n        // 语法\n        // uParse(selector,[option])\n        /*\n         selector支持\n         id,class,tagName\n         */\n        /*\n         目前支持的参数\n         option:\n         highlightJsUrl 代码高亮相关js的路径 如果展示有代码高亮，必须给定该属性\n         highlightCssUrl 代码高亮相关css的路径 如果展示有代码高亮，必须给定该属性\n         liiconpath 自定义列表样式的图标路径，可以不给定，默认'http://bs.baidu.com/listicon/',\n         listDefaultPaddingLeft : 自定义列表样式的左边宽度 默认'20',\n         customRule 可以传入你自己的处理规则函数，函数第一个参数是容器节点\n         */\n\n        uParse('.content', {\n            rootPath: '../'\n        })\n        uParse('.content_background', {\n            rootPath: '../'\n        })\n    </script>\n\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/.gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pnp\n.pnp.js\n\n# testing\n/coverage\n\n# production\n/build\n\n# misc\n.DS_Store\n.env.local\n.env.development.local\n.env.test.local\n.env.production.local\n\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n"
  },
  {
    "path": "_examples-integrate/reactx/README.md",
    "content": "# Getting Started with Create React App\n\nThis project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).\n\n## Available Scripts\n\nIn the project directory, you can run:\n\n### `npm start`\n\nRuns the app in the development mode.\\\nOpen [http://localhost:3000](http://localhost:3000) to view it in your browser.\n\nThe page will reload when you make changes.\\\nYou may also see any lint errors in the console.\n\n### `npm test`\n\nLaunches the test runner in the interactive watch mode.\\\nSee the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.\n\n### `npm run build`\n\nBuilds the app for production to the `build` folder.\\\nIt correctly bundles React in production mode and optimizes the build for the best performance.\n\nThe build is minified and the filenames include the hashes.\\\nYour app is ready to be deployed!\n\nSee the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.\n\n### `npm run eject`\n\n**Note: this is a one-way operation. Once you `eject`, you can't go back!**\n\nIf you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.\n\nInstead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.\n\nYou don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.\n\n## Learn More\n\nYou can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).\n\nTo learn React, check out the [React documentation](https://reactjs.org/).\n\n### Code Splitting\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)\n\n### Analyzing the Bundle Size\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)\n\n### Making a Progressive Web App\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)\n\n### Advanced Configuration\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)\n\n### Deployment\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)\n\n### `npm run build` fails to minify\n\nThis section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)\n"
  },
  {
    "path": "_examples-integrate/reactx/package.json",
    "content": "{\n  \"name\": \"reactx\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"dependencies\": {\n    \"@testing-library/jest-dom\": \"^5.17.0\",\n    \"@testing-library/react\": \"^13.4.0\",\n    \"@testing-library/user-event\": \"^13.5.0\",\n    \"react\": \"^18.3.1\",\n    \"react-dom\": \"^18.3.1\",\n    \"react-scripts\": \"5.0.1\",\n    \"react-ueditor-wrap\": \"^1.0.8\",\n    \"web-vitals\": \"^2.1.4\"\n  },\n  \"scripts\": {\n    \"start\": \"react-scripts start\",\n    \"build\": \"react-scripts build\",\n    \"test\": \"react-scripts test\",\n    \"eject\": \"react-scripts eject\"\n  },\n  \"eslintConfig\": {\n    \"extends\": [\n      \"react-app\",\n      \"react-app/jest\"\n    ]\n  },\n  \"browserslist\": {\n    \"production\": [\n      \">0.2%\",\n      \"not dead\",\n      \"not op_mini all\"\n    ],\n    \"development\": [\n      \"last 1 chrome version\",\n      \"last 1 firefox version\",\n      \"last 1 safari version\"\n    ]\n  }\n}\n"
  },
  {
    "path": "_examples-integrate/reactx/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\" />\n    <link rel=\"icon\" href=\"%PUBLIC_URL%/favicon.ico\" />\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n    <meta name=\"theme-color\" content=\"#000000\" />\n    <meta\n      name=\"description\"\n      content=\"Web site created using create-react-app\"\n    />\n    <link rel=\"apple-touch-icon\" href=\"%PUBLIC_URL%/logo192.png\" />\n    <!--\n      manifest.json provides metadata used when your web app is installed on a\n      user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/\n    -->\n    <link rel=\"manifest\" href=\"%PUBLIC_URL%/manifest.json\" />\n    <!--\n      Notice the use of %PUBLIC_URL% in the tags above.\n      It will be replaced with the URL of the `public` folder during the build.\n      Only files inside the `public` folder can be referenced from the HTML.\n\n      Unlike \"/favicon.ico\" or \"favicon.ico\", \"%PUBLIC_URL%/favicon.ico\" will\n      work correctly both with client-side routing and a non-root public URL.\n      Learn how to configure a non-root public URL by running `npm run build`.\n    -->\n    <title>React App</title>\n  </head>\n  <body>\n    <noscript>You need to enable JavaScript to run this app.</noscript>\n    <div id=\"root\"></div>\n    <!--\n      This HTML file is a template.\n      If you open it directly in the browser, you will see an empty page.\n\n      You can add webfonts, meta tags, or analytics to this file.\n      The build step will place the bundled scripts into the <body> tag.\n\n      To begin the development, run `npm start` or `yarn start`.\n      To create a production bundle, use `npm run build` or `yarn build`.\n    -->\n  </body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/manifest.json",
    "content": "{\n  \"short_name\": \"React App\",\n  \"name\": \"Create React App Sample\",\n  \"icons\": [\n    {\n      \"src\": \"favicon.ico\",\n      \"sizes\": \"64x64 32x32 24x24 16x16\",\n      \"type\": \"image/x-icon\"\n    },\n    {\n      \"src\": \"logo192.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"192x192\"\n    },\n    {\n      \"src\": \"logo512.png\",\n      \"type\": \"image/png\",\n      \"sizes\": \"512x512\"\n    }\n  ],\n  \"start_url\": \".\",\n  \"display\": \"standalone\",\n  \"theme_color\": \"#000000\",\n  \"background_color\": \"#ffffff\"\n}\n"
  },
  {
    "path": "_examples-integrate/reactx/public/robots.txt",
    "content": "# https://www.robotstxt.org/robotstxt.html\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <style type=\"text/css\">\n        * {\n            color: #838383;\n            margin: 0;\n            padding: 0\n        }\n\n        html, body {\n            font-size: 12px;\n            overflow: hidden;\n        }\n\n        .content {\n            padding: 5px 0 0 15px;\n        }\n\n        input {\n            margin-left: 4px;\n            box-sizing: border-box;\n            width: 210px;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\" value=\"\"/>\n</div>\n<script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n<script type=\"text/javascript\">\n    var anchorInput = $G('anchorName'),\n        node = editor.selection.getRange().getClosedNode();\n    if (node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))) {\n        anchorInput.value = node;\n    }\n    anchorInput.onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            editor.execCommand('anchor', anchorInput.value);\n            dialog.close();\n            domUtils.preventDefault(evt)\n        }\n    };\n    dialog.onok = function () {\n        editor.execCommand('anchor', anchorInput.value);\n        dialog.close();\n    };\n    $focus(anchorInput);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/attachment/attachment.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #fileList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li div.file-wrapper{cursor:pointer;position:absolute;display:block;width:111px;height:111px;border:1px solid #eee;background:url(./images/bg.png) repeat}#online li div span.file-title{display:block;padding:0 3px;margin:3px 0 0;font-size:12px;height:15px;color:#555;text-align:center;width:107px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css?32c6a90a\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"attachment.js?1598cea7\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/attachment/attachment.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});setTabFocus(\"upload\")}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"upload\":uploadFile=uploadFile||new UploadFile(\"queueList\");break;case\"online\":onlineFile=onlineFile||new OnlineFile(\"fileList\")}}}function initButtons(){dialog.onok=function(){for(var a,b=[],c=$G(\"tabhead\").children,d=0;d<c.length;d++)if(domUtils.hasClass(c[d],\"focus\")){a=c[d].getAttribute(\"data-content-id\");break}switch(a){case\"upload\":b=uploadFile.getInsertList();var e=uploadFile.getQueueCount();if(e)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,e)+\"</span>\"),!1;break;case\"online\":b=onlineFile.getInsertList()}editor.execCommand(\"insertfile\",b)}}function UploadFile(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineFile(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var uploadFile,onlineFile;window.onload=function(){initTabs(),initButtons()},UploadFile.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\" title=\"'+a.name+'\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&A.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"fileActionName\")),z=editor.getOpt(\"fileMaxSize\"),A=(editor.getOpt(\"fileAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"fileActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"fileFieldName\"),duplicate:!0,fileSingleSizeLimit:z,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){b.ext&&A.indexOf(b.ext.toLowerCase())!=-1&&b.size<=z&&(q++,r+=b.size),1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&A.indexOf(a.ext.toLowerCase())!=-1&&a.size<=z&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.fileList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"file\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},getInsertList:function(){var a,b,c,d=[],e=editor.getOpt(\"fileUrlPrefix\");for(a=0;a<this.fileList.length;a++)c=this.fileList[a],b=c.url,d.push({title:c.original||b.substr(b.lastIndexOf(\"/\")+1),url:e+b});return d}},OnlineFile.prototype={init:function(){this.initContainer(),this.initEvents(),this.initData()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"fileList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getFileData()}),domUtils.on(this.list,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"fileManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getFileData()},getFileData:function(){var _this=this;_this.listEnd||this.isLoadingData||(this.isLoadingData=!0,ajax.request(editor.getActionUrl(editor.getOpt(\"fileManagerActionName\")),{timeout:1e5,data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}}))},pushData:function(a){var b,c,d,e,f,g=this,h=editor.getOpt(\"fileManagerUrlPrefix\");for(b=0;b<a.length;b++)if(a[b]&&a[b].url){if(c=document.createElement(\"li\"),f=document.createElement(\"span\"),d=a[b].url.substr(a[b].url.lastIndexOf(\".\")+1),\"png|jpg|jpeg|gif|bmp\".indexOf(d)!=-1)e=document.createElement(\"img\"),domUtils.on(e,\"load\",function(a){return function(){g.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(e)),e.width=113,e.setAttribute(\"src\",h+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36));else{var i=document.createElement(\"i\"),j=document.createElement(\"span\");j.innerHTML=a[b].original||a[b].url.substr(a[b].url.lastIndexOf(\"/\")+1),e=document.createElement(\"div\"),e.appendChild(i),e.appendChild(j),domUtils.addClass(e,\"file-wrapper\"),domUtils.addClass(j,\"file-title\"),domUtils.addClass(i,\"file-type-\"+d),domUtils.addClass(i,\"file-preview\")}domUtils.addClass(f,\"icon\"),c.setAttribute(\"data-url\",h+a[b].url),a[b].original&&c.setAttribute(\"data-title\",a[b].original),c.appendChild(e),c.appendChild(f),this.list.insertBefore(c,this.clearFloat)}},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[];for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var d=b[a].getAttribute(\"data-url\"),e=b[a].getAttribute(\"data-title\")||d.substr(d.lastIndexOf(\"/\")+1);c.push({title:e,url:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/audio/audio.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#audioUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#audioSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#audioSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#audioType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#audioSearchBtn,#audioSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewaudio{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-audio-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#audioInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#audioFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#audioFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadaudioInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/audio/audio.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"audio.css?622512f6\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"audioTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"audio\" class=\"focus\" data-content-id=\"audio\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"audio\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"audioUrl\" class=\"url\"><var id=\"lang_audio_url\"></var></label></td>\n                        <td><input id=\"audioUrl\" type=\"text\"><a href=\"javascript:;\" id=\"audioSelect\"\n                                                                style=\"display:none;\">选择音频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链音频支持MP3格式\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"audioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"audioFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadaudioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- audio -->\n<script type=\"text/javascript\" src=\"audio.js?d76559eb\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/audio/audio.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});r.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),r.selectCallback&&($G(\"audioSelect\").style.display=\"inline-block\",domUtils.on($G(\"audioSelect\"),\"click\",function(a){r.selectCallback(editor,function(a){a&&($G(\"audioUrl\").value=a.path,k(a.path))})}))}function b(){g([\"audioFloat\",\"upload_alignment\"]),i($G(\"audioUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-audio\"==b.className,e=b.className.indexOf(\"edui-upload-audio\")!=-1;if(c||e){$G(\"audioUrl\").value=a=b.getAttribute(\"_url\");var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(q=!0)}k(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=f(\"tabHeads\",\"tabSrc\");switch(a){case\"audio\":return e();case\"upload\":return l()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"audioFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"audioUrl\").value;f(\"audioFloat\",\"name\");return!!a&&void editor.execCommand(\"insertaudio\",{url:a},q?\"upload\":null)}function f(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function g(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}h(b)}}function h(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function i(a){browser.ie?a.onpropertychange=function(){k(this.value)}:a.addEventListener(\"input\",function(){k(this.value)},!1)}function j(a,b){b=b||{};var c=[\"<audio\",b.id?' id=\"'+b.id+'\"':\"\",b.cls?' class=\"'+b.cls+'\"':\"\",\" controls >\",'<source src=\"'+a+'\" type=\"audio/mpeg\" />',\"</audio>\"];return c.join(\"\")}function k(a){a&&($G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><div style=\"position: absolute; inset: 0; background: #FFF; text-align: center; display: flex; justify-items: center; align-items: center;\"><div style=\"text-align:center;flex-grow:1;\">'+j(a)+\"</div></div>\")}function l(){var a=[],b=editor.getOpt(\"audioUrlPrefix\"),c=f(\"upload_alignment\",\"name\")||\"none\";for(var d in p){var e=p[d];a.push({url:b+e.url,align:c})}var g=o.getQueueCount();return g?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,g)+\"</span>\"),!1):void editor.execCommand(\"insertaudio\",a,\"upload\")}function m(){o=new n(\"queueList\")}function n(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var o,p=[],q=!1,r={};window.onload=function(){r=editor.getOpt(\"audioConfig\"),$focus($G(\"audioUrl\")),a(),b(),m()},n.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=q.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),q.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),q.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":q.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":q.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(q.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":q.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),q=k.find(\".progress\").hide(),r=0,s=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"audioActionName\")),A=editor.getOpt(\"audioMaxSize\"),B=(editor.getOpt(\"audioAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"audioActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"audioFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){r++,s+=b.size,1===r&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){r--,s-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(p.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>')):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/background/background.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:424px;margin:10px auto;zoom:1;position:relative}.tabbody{height:225px}.tabbody .panel{position:absolute;width:100%;height:100%;background:#fff;display:none}.tabbody .focus{display:block}body{font-size:12px;color:#888;overflow:hidden}input,label{vertical-align:middle}.clear{clear:both}.pl{padding-left:18px;padding-left:23px \\9}#imageList{width:420px;height:215px;margin-top:10px;overflow:hidden;overflow-y:auto}#imageList div{float:left;width:100px;height:95px;margin:5px 10px}#imageList img{cursor:pointer;border:2px solid #fff}.bgarea{margin:10px;padding:5px;height:84%;border:1px solid #A8A297}.content div{margin:10px 0 10px 5px}.content .iptradio{margin:0 5px 5px 0}.txt{width:280px}.wrapcolor{height:19px}div.color{float:left;margin:0}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA;margin:0;float:left}div.alignment,#custom{margin-left:23px;margin-left:28px \\9}#custom input{height:15px;min-height:15px;width:20px}#repeatType{width:100px}#imgManager{width:100%;height:225px}#imgManager #imageList{width:100%;overflow-x:hidden;overflow-y:auto}#imgManager ul{display:block;list-style:none;margin:0;padding:0}#imgManager li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:9px 0 0 19px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#imgManager li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#imgManager li img{cursor:pointer}#imgManager li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#imgManager li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#imgManager li.selected .icon{background-image:url(images/success.png);background-position:75px 75px}#imgManager li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css?982ee6c2\">\n</head>\n<body>\n<div id=\"bg_container\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"normal\" class=\"panel focus\">\n            <fieldset class=\"bgarea\">\n                <legend><var id=\"lang_background_set\"></var></legend>\n                <div class=\"content\">\n                    <div>\n                        <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\"\n                                      checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                        <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var\n                            id=\"lang_background_colored\"></var></label>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <div class=\"color\">\n                            <var id=\"lang_background_color\"></var>:\n                        </div>\n                        <div id=\"colorPicker\"></div>\n                        <div class=\"clear\"></div>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                    </div>\n                    <div id=\"alignment\" class=\"alignment\">\n                        <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                        <option value=\"center\"></option>\n                        <option value=\"repeat-x\"></option>\n                        <option value=\"repeat-y\"></option>\n                        <option value=\"repeat\"></option>\n                        <option value=\"self\"></option>\n                    </select>\n                    </div>\n                    <div id=\"custom\">\n                        <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\"\n                                                                           value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\"\n                                                                                                            size=\"1\"\n                                                                                                            id=\"y\"\n                                                                                                            maxlength=\"4\"\n                                                                                                            value=\"0\">px\n                    </div>\n                </div>\n            </fieldset>\n\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"background.js?e67eb657\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/background/background.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){for(var c=b.target||b.srcElement,d=0;d<a.length;d++)if(a[d]==c){a[d].className=\"focus\";var e=a[d].getAttribute(\"data-content-id\");$G(e).style.display=\"block\"}else a[d].className=\"\",$G(a[d].getAttribute(\"data-content-id\")).style.display=\"none\"})}function initColorSelector(){var a=editor.queryCommandValue(\"background\");if(a){var b=a[\"background-color\"],c=a[\"background-repeat\"]||\"repeat\",d=a[\"background-image\"]||\"\",e=a[\"background-position\"]||\"center center\",f=e.split(\" \"),g=parseInt(f[0])||0,h=parseInt(f[1])||0;\"no-repeat\"==c&&(g||h)&&(c=\"self\"),d=d.match(/url[\\s]*\\(([^\\)]*)\\)/),d=d?d[1]:\"\",updateFormState(\"colored\",b,d,c,g,h)}else updateFormState();var i=function(){updateFormState(),updateBackground()};domUtils.on($G(\"nocolorRadio\"),\"click\",updateBackground),domUtils.on($G(\"coloredRadio\"),\"click\",i),domUtils.on($G(\"url\"),\"keyup\",function(){$G(\"url\").value&&\"none\"==$G(\"alignment\").style.display&&utils.each($G(\"repeatType\").children,function(a){a.selected=\"repeat\"==a.getAttribute(\"value\")&&\"selected\"}),i()}),domUtils.on($G(\"repeatType\"),\"change\",i),domUtils.on($G(\"x\"),\"keyup\",updateBackground),domUtils.on($G(\"y\"),\"keyup\",updateBackground),initColorPicker()}function initColorPicker(){var a=editor,b=$G(\"colorPicker\"),c=new UE.ui.Popup({content:new UE.ui.ColorPicker({noColorText:a.getLang(\"clearColor\"),editor:a,onpickcolor:function(a,b){updateFormState(\"colored\",b),updateBackground(),UE.ui.Popup.postHide()},onpicknocolor:function(a,b){updateFormState(\"colored\",\"transparent\"),updateBackground(),UE.ui.Popup.postHide()}}),editor:a,onhide:function(){}});domUtils.on(b,\"click\",function(){c.showAnchor(this)}),domUtils.on(document,\"mousedown\",function(a){var b=a.target||a.srcElement;UE.ui.Popup.postHide(b)}),domUtils.on(window,\"scroll\",function(){UE.ui.Popup.postHide()})}function updateFormState(a,b,c,d,e,f){var g=$G(\"nocolorRadio\"),h=$G(\"coloredRadio\");if(a&&(g.checked=\"colored\"!=a&&\"checked\",h.checked=\"colored\"==a&&\"checked\"),b&&domUtils.setStyle($G(\"colorPicker\"),\"background-color\",b),c&&/^\\//.test(c)){var i=document.createElement(\"a\");i.href=c,browser.ie&&(i.href=i.href),c=browser.ie?i.href:i.protocol+\"//\"+i.host+i.pathname+i.search+i.hash}(c||\"\"===c)&&($G(\"url\").value=c),d&&utils.each($G(\"repeatType\").children,function(a){a.selected=d==a.getAttribute(\"value\")&&\"selected\"}),(e||f)&&($G(\"x\").value=parseInt(e)||0,$G(\"y\").value=parseInt(f)||0),$G(\"alignment\").style.display=h.checked&&$G(\"url\").value?\"\":\"none\",$G(\"custom\").style.display=h.checked&&$G(\"url\").value&&\"self\"==$G(\"repeatType\").value?\"\":\"none\"}function updateBackground(){if($G(\"coloredRadio\").checked){var a=domUtils.getStyle($G(\"colorPicker\"),\"background-color\"),b=$G(\"url\").value,c=$G(\"repeatType\").value,d={\"background-repeat\":\"no-repeat\",\"background-position\":\"center center\"};a&&(d[\"background-color\"]=a),b&&(d[\"background-image\"]=\"url(\"+b+\")\"),\"self\"==c?d[\"background-position\"]=$G(\"x\").value+\"px \"+$G(\"y\").value+\"px\":\"repeat-x\"!=c&&\"repeat-y\"!=c&&\"repeat\"!=c||(d[\"background-repeat\"]=c),editor.execCommand(\"background\",d)}else editor.execCommand(\"background\",null)}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var onlineImage,backupStyle=editor.queryCommandValue(\"background\");window.onload=function(){initTabs(),initColorSelector()},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.id=\"imageListUl\",this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode,d=$G(\"imageListUl\").childNodes;if(\"li\"==c.tagName.toLowerCase()){updateFormState(\"nocolor\",null,\"\");for(var e,f=0;e=d[f++];)e!=c||domUtils.hasClass(e,\"selected\")?domUtils.removeClasses(e,\"selected\"):(domUtils.addClass(e,\"selected\"),updateFormState(\"colored\",null,c.firstChild.getAttribute(\"_src\"),\"repeat\"));updateBackground()}})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,floatStyle:d})}return c}},dialog.onok=function(){updateBackground(),editor.fireEvent(\"saveScene\")},dialog.oncancel=function(){editor.execCommand(\"background\",backupStyle)}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/contentimport/contentimport.html",
    "content": "<!DOCTYPE html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7;\n        }\n\n        .wrapper .file-upload {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .file-upload .file-tip {\n            color: #999;\n            font-size: 12px;\n            padding-left: 10px;\n            flex-grow: 1;\n        }\n\n        .wrapper .file-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .file-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .file-manual .body {\n        }\n\n        .wrapper .file-manual .body li {\n            list-style: disc;\n            margin-left: 20px;\n        }\n\n        .wrapper .upload-button {\n            width: 100px;\n            height: 30px;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n            border-radius: 4px;\n            text-align: center;\n            line-height: 28px;\n            cursor: pointer;\n            position: relative;\n            flex-shrink: 0;\n            margin-right: 5px;\n        }\n\n        .wrapper .upload-button .text {\n            display: inline-block;\n            vertical-align: middle;\n        }\n\n        .wrapper .upload-button input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n            height: 100%;\n            width: 100%;\n        }\n\n        .wrapper .file-result {\n            border: 1px solid #333;\n            padding: 10px;\n            border-radius: 5px;\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #FFF;\n            bottom: 10px;\n            overflow: auto;\n            display: none;\n        }\n        .wrapper .file-input{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #EEE;\n            bottom: 10px;\n            border-radius: 5px;\n            display:none;\n        }\n        .wrapper .file-input textarea{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            bottom: 10px;\n            border: none;\n            resize: none;\n            border-radius: 5px;\n            padding: 5px;\n            outline: none;\n            top: 30px;\n        }\n        .wrapper .file-input .tool{\n            text-align: right;\n            padding: 5px 10px;\n        }\n        .wrapper .file-input .tool a{\n            display: inline-block;\n            text-decoration: none;\n            color: #333;\n            background: #FFF;\n            padding: 0 10px;\n            line-height: 20px;\n            border-radius: 3px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"file-upload\">\n        <div class=\"upload-button\">\n            <div class=\"text\">选择本地文件</div>\n            <input type=\"file\" id=\"contentImport\"/>\n        </div>\n        <div class=\"upload-button\">\n            <div class=\"text\" onclick=\"$('.file-input').show();\">粘贴Markdown</div>\n        </div>\n        <div class=\"file-tip\"></div>\n    </div>\n    <div class=\"file-manual\">\n        <div class=\"title\">\n            支持文档格式\n        </div>\n        <div class=\"body\">\n            <ul>\n                <li><b>Word</b>：docx</li>\n                <li><b>Markdown</b>：md</li>\n            </ul>\n        </div>\n    </div>\n    <div class=\"file-result\"></div>\n    <div class=\"file-input\">\n        <textarea id=\"fileInputContent\"></textarea>\n        <div class=\"tool\">\n            <a href=\"javascript:;\" id=\"fileInputConfirm\">\n                确定\n            </a>\n            <a href=\"javascript:;\" onclick=\"$(this).closest('.file-input').hide();\">\n                关闭\n            </a>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"mammoth.browser.min.js?109831e5\"></script>\n<script src=\"showdown.min.js?a1c1e879\"></script>\n<script type=\"text/javascript\" src=\"contentimport.js?100d2e1a\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        contentImport.init(options, callbacks);\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/contentimport/contentimport.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction processWord(a){$(\".file-tip\").html(\"正在转换Word文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){mammoth.convertToHtml({arrayBuffer:a.target.result}).then(function(a){$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=a.value,$(\".file-result\").html(a.value).show()},function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)})},b.onerror=function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)},b.readAsArrayBuffer(a)}function processMarkdown(a){var b=new showdown.Converter,c=b.makeHtml(a);$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=c,$(\".file-result\").html(c).show()}function processMarkdownFile(a){$(\".file-tip\").html(\"正在转换Markdown文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){processMarkdown(a.target.result)},b.onerror=function(a){$(\".file-tip\").html(\"Markdown文件转换失败:\"+a)},b.readAsText(a,\"UTF-8\")}function addUploadButtonListener(){g(\"contentImport\").addEventListener(\"change\",function(){const a=this.files[0],b=a.name,c=b.substring(b.lastIndexOf(\".\")+1).toLowerCase();switch(c){case\"docx\":case\"doc\":processWord(a);break;case\"md\":processMarkdownFile(a);break;default:$(\".file-tip\").html(\"不支持的文件格式:\"+c)}}),g(\"fileInputConfirm\").addEventListener(\"click\",function(){processMarkdown(g(\"fileInputContent\").value),$(\".file-input\").hide()})}function addOkListener(){dialog.onok=function(){return contentImport.data.result?(editor.fireEvent(\"saveScene\"),editor.execCommand(\"inserthtml\",contentImport.data.result),void editor.fireEvent(\"saveScene\")):(alert(\"请先上传文件识别内容\"),!1)},dialog.oncancel=function(){}}var contentImport={},g=$G;contentImport.data={result:null},contentImport.init=function(a,b){addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/emotion/emotion.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.jd img{background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.pp img{background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:25px;height:25px;display:block}.ldw img{background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.tsj img{background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.cat img{background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.bb img{background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.youa img{background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.smileytable td{height:37px}#tabPanel{margin-left:5px;overflow:hidden}#tabContent{float:left;background:#FFF}#tabContent div{display:none;width:480px;overflow:hidden}#tabIconReview.show{left:17px;display:block}.menuFocus{background:#ACCD3C}.menuDefault{background:#FFF}#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px}img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFF;background-position:center;background-repeat:no-repeat}.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width:95%}.tabbody table{width:100%}.tabbody td{border:1px solid #BAC498}.tabbody td span{display:block;zoom:1;padding:0 4px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css?f71063c6\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js?cb3216b7\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum: 7, //切换面板数量\n        SmilmgName: {\n            tab0: ['j_00', 84],\n            tab1: ['t_00', 40],\n            tab2: ['w_00', 52],\n            tab3: ['B_00', 63],\n            tab4: ['C_00', 20],\n            tab5: ['i_f', 50],\n            tab6: ['y_00', 40]\n        }, //图片前缀名\n        imageFolders: {\n            tab0: 'jx2/',\n            tab1: 'tsj/',\n            tab2: 'ldw/',\n            tab3: 'bobo/',\n            tab4: 'babycat/',\n            tab5: 'face/',\n            tab6: 'youa/'\n        }, //图片对应文件夹路径\n        imageCss: {tab0: 'jd', tab1: 'tsj', tab2: 'ldw', tab3: 'bb', tab4: 'cat', tab5: 'pp', tab6: 'youa'}, //图片css类名\n        imageCssOffset: {tab0: 35, tab1: 35, tab2: 35, tab3: 35, tab4: 35, tab5: 25, tab6: 35}, //图片偏移\n        SmileyInfor: {\n            tab0: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2: ['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3: ['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4: ['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5: ['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6: ['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/emotion/emotion.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction initImgName(){for(var a in emotion.SmilmgName){var b=emotion.SmilmgName[a],c=emotion.SmileyBox[a],d=\"\";if(c.length)return;for(var e=1;e<=b[1];e++)d=b[0],e<10&&(d+=\"0\"),d=d+e+\".gif\",c.push(d)}}function initEvtHandler(a){for(var b=$G(a),c=0,d=0;c<b.childNodes.length;c++){var e=b.childNodes[c];1==e.nodeType&&(domUtils.on(e,\"click\",function(a){return function(){switchTab(a)}}(d)),d++)}switchTab(0),$G(\"tabIconReview\").style.display=\"none\"}function InsertSmiley(a,b){var c={src:editor.options.emotionLocalization?editor.options.UEDITOR_HOME_URL+\"dialogs/emotion/\"+a:a};c._src=c.src,editor.execCommand(\"insertimage\",c),b.ctrlKey||dialog.popup.hide()}function switchTab(a){autoHeight(a),0==emotion.tabExist[a]&&(emotion.tabExist[a]=1,createTab(\"tab\"+a));for(var b=$G(\"tabHeads\").getElementsByTagName(\"span\"),c=$G(\"tabBodys\").getElementsByTagName(\"div\"),d=0,e=b.length;d<e;d++)b[d].className=\"\",c[d].style.display=\"none\";b[a].className=\"focus\",c[a].style.display=\"block\"}function autoHeight(a){var b=dialog.getDom(\"iframe\"),c=b.parentNode.parentNode;switch(a){case 0:b.style.height=\"380px\",c.style.height=\"392px\";break;case 1:b.style.height=\"220px\",c.style.height=\"232px\";break;case 2:b.style.height=\"260px\",c.style.height=\"272px\";break;case 3:b.style.height=\"300px\",c.style.height=\"312px\";break;case 4:b.style.height=\"140px\",c.style.height=\"152px\";break;case 5:b.style.height=\"260px\",c.style.height=\"272px\";break;case 6:b.style.height=\"230px\",c.style.height=\"242px\"}}function createTab(a){for(var b,c,d,e,f,g,h=\"?v=1.1\",i=$G(a),j=emotion.SmileyPath+emotion.imageFolders[a],k=5.5,l=iHeight=35,m=3,n=emotion.imageCss[a],o=emotion.imageCssOffset[a],p=['<table class=\"smileytable\">'],q=0,r=emotion.SmileyBox[a].length,s=11;q<r;){p.push(\"<tr>\");for(var t=0;t<s;t++,q++)b=emotion.SmileyBox[a][q],b?(c=j+b+h,d=j+b,e=t<k?0:1,f=o*q*-1-1,g=emotion.SmileyInfor[a][q],p.push('<td  class=\"'+n+'\"   border=\"1\" width=\"'+m+'%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\''+d.replace(/'/g,\"\\\\'\")+\"',event)\\\" onmouseover=\\\"over(this,'\"+c+\"','\"+e+'\\')\" onmouseout=\"out(this)\">'),p.push(\"<span>\"),p.push('<img  style=\"background-position:left '+f+'px;\" title=\"'+g+'\" src=\"'+emotion.SmileyPath+(editor.options.emotionLocalization?'0.gif\" width=\"':'default/0.gif\" width=\"')+l+'\" height=\"'+iHeight+'\"></img>'),p.push(\"</span>\")):p.push('<td width=\"'+m+'%\"   bgcolor=\"#FFFFFF\">'),p.push(\"</td>\");p.push(\"</tr>\")}p.push(\"</table>\"),p=p.join(\"\"),i.innerHTML=p}function over(a,b,c){a.style.backgroundColor=\"#ACCD3C\",$G(\"faceReview\").style.backgroundImage=\"url(\"+b+\")\",1==c&&($G(\"tabIconReview\").className=\"show\"),$G(\"tabIconReview\").style.display=\"block\"}function out(a){a.style.backgroundColor=\"transparent\";var b=$G(\"tabIconReview\");b.className=\"\",b.style.display=\"none\"}function createTabList(a){for(var b={},c=0;c<a;c++)b[\"tab\"+c]=[];return b}function createArr(a){for(var b=[],c=0;c<a;c++)b[c]=0;return b}window.onload=function(){editor.setOpt({emotionLocalization:!1}),emotion.SmileyPath=editor.options.emotionLocalization===!0?\"images/\":\"http://img.baidu.com/hi/\",emotion.SmileyBox=createTabList(emotion.tabNum),emotion.tabExist=createArr(emotion.tabNum),initImgName(),initEvtHandler(\"tabHeads\")};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/formula/formula.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            box-sizing: border-box;\n            width: 800px;\n            height: 390px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .editor-wrap {\n            display: flex;\n            margin: 10px;\n        }\n\n        .editor-wrap #editor {\n            width: 0;\n            flex-grow: 1;\n            border: 1px solid #CCC;\n            border-radius: 3px;\n            padding: 5px;\n            height: 100px;\n            outline: none;\n        }\n\n        .input-tip {\n            margin: 10px;\n        }\n\n        .input-tip a {\n            color: #0f0d0d;\n        }\n\n        .editor-preview {\n            background: #FFF;\n            border-radius: 3px;\n            border: 1px solid #EEE;\n            display: none;\n            margin: 10px;\n        }\n\n        .editor-preview .title {\n            padding: 5px;\n        }\n\n        .editor-preview .body {\n            padding: 5px 5px 15px 5px;\n            text-align: center;\n        }\n\n        .editor-preview .body .image {\n            max-width: 100%;\n            max-height: 100px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n\n    <div id=\"modeLive\" style=\"display:none;\">\n        <iframe id=\"liveEditor\"\n                frameborder=\"0\"\n                style=\"width:800px;height:390px;border: 0;outline: none;\"\n        ></iframe>\n    </div>\n\n    <div id=\"modePlain\" style=\"display:none;\">\n        <div class=\"editor-wrap\">\n            <textarea id=\"editor\"></textarea>\n        </div>\n        <div class=\"input-tip\">\n            基于 latex 语法，<a href=\"javascript:;\" id=\"inputDemo\">点击输入示例</a>。\n        </div>\n        <div class=\"editor-preview\" id=\"preview\">\n            <div class=\"title\">预览</div>\n            <div class=\"body\">\n                <img class=\"image\" id=\"previewImage\"/>\n            </div>\n        </div>\n    </div>\n\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"formula.js?3e957a67\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        Formula.init();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/formula/formula.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction preg_quote(a,b){return(a+\"\").replace(new RegExp(\"[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\\"+(b||\"\")+\"-]\",\"g\"),\"\\\\$&\")}function loadScript(a,b){var c;c=document.createElement(\"script\"),c.src=a,c.onload=function(){b&&b({isNew:!0})},document.getElementsByTagName(\"head\")[0].appendChild(c)}var Formula={mode:\"plain\",latexeasy:null,init:function(){Formula.initMode(),Formula.initEvent(),Formula.initSubmit()},renderPlain:function(){var a=$(\"#preview\"),b=$(\"#editor\").val();if(!b)return void a.hide();b=encodeURIComponent(b);var c=editor.getOpt(\"formulaConfig\"),d=c.imageUrlTemplate.replace(/\\{\\}/,b);$(\"#previewImage\").attr(\"src\",d),a.show()},setValuePlain:function(a){$(\"#editor\").val(a),Formula.renderPlain()},setValueLive:function(a){return Formula.latexeasy?void Formula.latexeasy.call(\"set.latex\",{latex:a}):void setTimeout(function(){Formula.setValueLive(a)},100)},initMode:function(){var a=editor.getOpt(\"formulaConfig\");\"live\"===a.editorMode?($(\"#liveEditor\").attr(\"src\",a.editorLiveServer+\"/editor\"),$(\"#modeLive\").show(),Formula.mode=\"live\"):($(\"#modePlain\").show(),Formula.mode=\"plain\");var b=editor.selection.getRange().getClosedNode();if(b&&null!==b.getAttribute(\"data-formula-image\")){var c=b.getAttribute(\"data-formula-image\");c&&Formula.setValue(decodeURIComponent(c))}},setValue:function(a){switch(Formula.mode){case\"plain\":Formula.setValuePlain(a);break;case\"live\":Formula.setValueLive(a)}},getValue:function(a){switch(Formula.mode){case\"plain\":a($.trim($(\"#editor\").val()));break;case\"live\":Formula.latexeasy.call(\"get.latex\",{},function(b){a(b.latex)})}},initEvent:function(){var a,b=null;switch(Formula.mode){case\"plain\":$(\"#editor\").on(\"change keypress\",function(){b&&clearTimeout(b),b=setTimeout(function(){Formula.renderPlain()},1e3)}),$(\"#inputDemo\").on(\"click\",function(){$(\"#editor\").val(\"f(a) = \\\\frac{1}{2\\\\pi i} \\\\oint\\\\frac{f(z)}{z-a}dz\"),Formula.renderPlain()});break;case\"live\":var c=editor.getOpt(\"formulaConfig\");loadScript(c.editorLiveServer+\"/vendor/LatexEasyEditor/editor/sdk.js\",function(){a=new window.LatexEasy(document.getElementById(\"liveEditor\")),a.on(\"ready\",function(){Formula.latexeasy=a}),a.init()})}},initSubmit:function(){dialog.onclose=function(a,b){return!b||(Formula.getValue(function(a){editor.execCommand(\"formula\",a),editor.fireEvent(\"saveScene\"),dialog.close(!1)}),!1)}}};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/help/help.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:370px;margin:10px auto;zoom:1}.tabbody{height:360px}.tabbody .panel{width:100%;height:360px;position:absolute;background:#fff}.tabbody .panel h1{font-size:26px;margin:5px 0 0 5px}.tabbody .panel p{font-size:12px;margin:5px 0 0 5px}.tabbody table{width:90%;line-height:20px;margin:5px 0 0 5px}.tabbody table thead{font-weight:700;line-height:25px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css?94b325b2\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor Plus</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js?cf43351e\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/help/help.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");i.onclick=function(){this.style.zoom=1},j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}switchTab(\"helptab\"),document.getElementById(\"version\").innerHTML=parent.UE.version;"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/image/image.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.alignBar{float:right;margin-top:5px;position:relative}.alignBar .algnLabel{float:left;height:20px;line-height:20px}.alignBar #alignIcon{zoom:1;_display:inline;display:inline-block;position:relative}.alignBar #alignIcon span{float:left;cursor:pointer;display:block;width:19px;height:17px;margin-right:3px;margin-left:3px;background-image:url(./images/alignicon.jpg)}.alignBar #alignIcon .none-align{background-position:0 -18px}.alignBar #alignIcon .left-align{background-position:-20px -18px}.alignBar #alignIcon .right-align{background-position:-40px -18px}.alignBar #alignIcon .center-align{background-position:-60px -18px}.alignBar #alignIcon .none-align.focus{background-position:0 0}.alignBar #alignIcon .left-align.focus{background-position:-20px 0}.alignBar #alignIcon .right-align.focus{background-position:-40px 0}.alignBar #alignIcon .center-align.focus{background-position:-60px 0}#remote{z-index:200}#remote .top{width:100%;margin-top:25px}#remote .left{display:block;float:left;width:300px;height:10px}#remote .right{display:block;float:right;width:300px;height:10px}#remote .row{margin-left:20px;clear:both;height:40px}#remote .row label{text-align:center;width:50px;zoom:1;_display:inline;display:inline-block;vertical-align:middle}#remote .row label.algnLabel{float:left}#remote input.text{width:150px;padding:3px 6px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}#remote input.text:focus{outline:0}#remote #url{width:400px;margin-bottom:2px}#remote #imageSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:top}#remote #width,#remote #height{width:30px;margin-left:2px;margin-right:2px;text-align:center}#remote #border,#remote #vhSpace,#remote #title{width:180px;margin-right:5px}#remote #lock{display:inline-block;vertical-align:middle}#remote #lockicon{zoom:1;_display:inline;display:inline-block;width:20px;height:20px;background:url(../../themes/default/images/lock.gif) -13px -13px no-repeat;vertical-align:middle}#remote #preview{clear:both;width:260px;height:240px;z-index:9999;margin-top:10px;background-color:#eee;overflow:hidden}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both;position:relative}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background:url(./images/success.gif) no-repeat right bottom \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #imageList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/image/image.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css?4cbad164\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"remote\"><var id=\"lang_tab_remote\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n                        <span id=\"noneAlign\" class=\"none-align focus\" data-align=\"none\"></span>\n                        <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n                        <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n                        <span id=\"centerAlign\" class=\"center-align\" data-align=\"center\"></span>\n                    </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\"/>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n            <div class=\"top\">\n                <div class=\"row\">\n                    <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n                    <span><input class=\"text\" id=\"url\" type=\"text\"/></span>\n                    <a href=\"javascript:;\" id=\"imageSelect\" style=\"display:none;\">选择图片</a>\n                </div>\n            </div>\n            <div class=\"left\">\n                <div class=\"row\">\n                    <label><var id=\"lang_input_size\"></var></label>\n                    <span><var id=\"lang_input_width\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\"\n                                                                              id=\"width\"/>px </span>\n                    <span><var id=\"lang_input_height\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"height\"/>px </span>\n                    <span><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\"><span id=\"lockicon\"></span></span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_border\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"border\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_vhspace\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"vhSpace\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_title\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"title\"/></span>\n                </div>\n            </div>\n            <div class=\"right\">\n                <div id=\"preview\"></div>\n            </div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n            <div class=\"searchBar\">\n                <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\"/>\n                <select id=\"searchType\" class=\"searchType\">\n                    <option value=\"&s=4&z=0\"></option>\n                    <option value=\"&s=1&z=19\"></option>\n                    <option value=\"&s=2&z=0\"></option>\n                    <option value=\"&s=3&z=0\"></option>\n                </select>\n                <input id=\"searchReset\" type=\"button\"/>\n                <input id=\"searchBtn\" type=\"button\"/>\n            </div>\n            <div id=\"searchList\" class=\"searchList\">\n                <ul id=\"searchListUl\"></ul>\n            </div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"image.js?2137df65\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/image/image.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});editorOpt.disableUpload||($G(\"tabhead\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),editorOpt.disableOnline||($G(\"tabhead\").querySelector('[data-content-id=\"online\"]').style.display=\"inline-block\"),editorOpt.selectCallback&&($G(\"imageSelect\").style.display=\"inline-block\",domUtils.on($G(\"imageSelect\"),\"click\",function(a){editorOpt.selectCallback(editor,function(a){if(a){$G(\"url\").value=a.path,$G(\"title\").value=a.name;var b=new Image;b.onload=function(){$G(\"width\").value=b.width,$G(\"height\").value=b.height,remoteImage.setPreview()},b.onerror=function(){remoteImage.setPreview()},b.src=a.path}})}));var c=editor.selection.getRange().getClosedNode();setTabFocus((c&&c.tagName&&\"img\"==c.tagName.toLowerCase(),\"remote\"))}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"remote\":remoteImage=remoteImage||new RemoteImage;break;case\"upload\":setAlign(editor.getOpt(\"imageInsertAlign\")),uploadImage=uploadImage||new UploadImage(\"queueList\");break;case\"online\":setAlign(editor.getOpt(\"imageManagerInsertAlign\")),onlineImage=onlineImage||new OnlineImage(\"imageList\"),onlineImage.reset()}}}function initButtons(){dialog.onok=function(){for(var a,b=!1,c=[],d=$G(\"tabhead\").children,e=0;e<d.length;e++)if(domUtils.hasClass(d[e],\"focus\")){a=d[e].getAttribute(\"data-content-id\");break}switch(a){case\"remote\":c=remoteImage.getInsertList();break;case\"upload\":c=uploadImage.getInsertList();var f=uploadImage.getQueueCount();if(f)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,f)+\"</span>\"),!1;break;case\"online\":c=onlineImage.getInsertList()}c&&(editor.execCommand(\"insertimage\",c),b&&editor.fireEvent(\"catchRemoteImage\"))}}function initAlign(){domUtils.on($G(\"alignIcon\"),\"click\",function(a){var b=a.target||a.srcElement;b.className&&b.className.indexOf(\"-align\")!=-1&&setAlign(b.getAttribute(\"data-align\"))})}function setAlign(a){a=a||\"none\";var b=$G(\"alignIcon\").children;for(i=0;i<b.length;i++)b[i].getAttribute(\"data-align\")==a?(domUtils.addClass(b[i],\"focus\"),$G(\"align\").value=b[i].getAttribute(\"data-align\")):domUtils.removeClasses(b[i],\"focus\")}function getAlign(){var a=$G(\"align\").value||\"none\";return\"none\"==a?\"\":a}function RemoteImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}function UploadImage(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var remoteImage,uploadImage,onlineImage,editorOpt={};window.onload=function(){editorOpt=editor.getOpt(\"imageConfig\"),initTabs(),initAlign(),initButtons()},RemoteImage.prototype={init:function(){this.initContainer(),this.initEvents()},initContainer:function(){this.dom={url:$G(\"url\"),width:$G(\"width\"),height:$G(\"height\"),border:$G(\"border\"),vhSpace:$G(\"vhSpace\"),title:$G(\"title\"),align:$G(\"align\")};var a=editor.selection.getRange().getClosedNode();a&&this.setImage(a)},initEvents:function(){function a(){b.setPreview()}var b=this,c=$G(\"lock\");domUtils.on($G(\"url\"),\"keyup\",a),domUtils.on($G(\"border\"),\"keyup\",a),domUtils.on($G(\"title\"),\"keyup\",a),domUtils.on($G(\"width\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"height\").value=Math.round(this.value/d)}else b.updateLocker();a()}),domUtils.on($G(\"height\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"width\").value=Math.round(this.value*d)}else b.updateLocker();a()}),domUtils.on($G(\"lock\"),\"change\",function(){var a=parseInt($G(\"width\").value)/parseInt($G(\"height\").value);c.setAttribute(\"data-proportion\",a)})},updateLocker:function(){var a=$G(\"width\").value,b=$G(\"height\").value,c=$G(\"lock\");a&&b&&a==parseInt(a)&&b==parseInt(b)?(c.disabled=!1,c.title=\"\"):(c.checked=!1,c.disabled=\"disabled\",c.title=lang.remoteLockError)},setImage:function(a){if(a.tagName&&(\"img\"==a.tagName.toLowerCase()||a.getAttribute(\"src\"))&&a.src){var b=a.getAttribute(\"data-word-image\"),c=b?b.replace(\"&amp;\",\"&\"):a.getAttribute(\"_src\")||a.getAttribute(\"src\",2).replace(\"&amp;\",\"&\"),d=editor.queryCommandValue(\"imageFloat\");c!==$G(\"url\").value&&($G(\"url\").value=c),c&&($G(\"width\").value=a.width||\"\",$G(\"height\").value=a.height||\"\",$G(\"border\").value=a.getAttribute(\"border\")||\"0\",$G(\"vhSpace\").value=a.getAttribute(\"vspace\")||\"0\",$G(\"title\").value=a.title||a.alt||\"\",setAlign(d),this.setPreview(),this.updateLocker())}},getData:function(){var a={};for(var b in this.dom)a[b]=this.dom[b].value;return a},setPreview:function(){var a,b,c=$G(\"url\").value,d=$G(\"width\").value,e=$G(\"height\").value,f=$G(\"border\").value,g=$G(\"title\").value,h=$G(\"preview\");a=d&&e?Math.min(d,h.offsetWidth):h.offsetWidth,a=a+2*f>h.offsetWidth?a:h.offsetWidth-2*f,b=d&&e?a*e/d:\"\",c&&(h.innerHTML='<img src=\"'+c+'\" width=\"'+a+'\" height=\"'+b+'\" border=\"'+f+'px solid #000\" title=\"'+g+'\" />')},getInsertList:function(){var a=this.getData();if(a.url){var b={src:a.url,_src:a.url};return b._propertyDelete=[],b.style=[],a.width?(b.width=a.width,b.style.push(\"width:\"+a.width+\"px\")):b._propertyDelete.push(\"width\"),a.height?(b.height=a.height,b.style.push(\"height:\"+a.height+\"px\")):b._propertyDelete.push(\"height\"),a.border?b.border=a.border:b._propertyDelete.push(\"border\"),a.align?b.floatStyle=a.align:b._propertyDelete.push(\"floatStyle\"),a.vhSpace?b.vspace=a.vhSpace:b._propertyDelete.push(\"vspace\"),a.title?b.alt=a.title:b._propertyDelete.push(\"alt\"),b.style.length>0?b.style=b.style.join(\";\"):b._propertyDelete.push(\"style\"),[b]}return[]}},UploadImage.prototype={init:function(){this.imageList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&z.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!==v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"imageActionName\")),z=(editor.getOpt(\"imageAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\"),A=editor.getOpt(\"imageMaxSize\"),B=editor.getOpt(\"imageCompressBorder\");return WebUploader.Uploader.support()?editor.getOpt(\"imageActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},accept:{title:\"Images\",extensions:z,mimeTypes:\"image/*\"},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"imageFieldName\"),duplicate:!0,fileSingleSizeLimit:A,threads:1,headers:editor.getOpt(\"serverHeaders\")||{},compress:!!editor.getOpt(\"imageCompressEnable\")&&{enable:editor.getOpt(\"imageCompressEnable\"),maxWidthOrHeight:B,maxSize:A}}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&z.indexOf(a.ext.toLowerCase())!=-1&&a.size<=A&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c[\"X-Requested-With\"]=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.imageList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"image\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},destroy:function(){this.$wrap.remove()},getInsertList:function(){var a,b,c=[],d=getAlign(),e=editor.getOpt(\"imageUrlPrefix\");for(a=0;a<this.imageList.length;a++)b=this.imageList[a],c.push({src:e+b.url,_src:e+b.url,alt:b.original,floatStyle:d});return c}},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",headers:editor.options.serverHeaders||{},data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"===json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,alt:f.substr(f.lastIndexOf(\"/\")+1),floatStyle:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" href=\"../../themes/default/dialog.css?c473027a\">\n    <style type=\"text/css\">\n        .warp {\n            width: 320px;\n            height: 200px;\n            margin-left: 5px;\n            padding: 20px 0 0 15px;\n            position: relative;\n        }\n\n        #url {\n            width: 290px;\n            margin-bottom: 2px;\n            margin-left: -6px;\n            margin-left: -2px \\9;\n            *margin-left: 0;\n            _margin-left: 0;\n        }\n\n        .format span {\n            display: inline-block;\n            width: 58px;\n            text-align: left;\n            zoom: 1;\n        }\n\n        table td {\n            padding: 5px 0;\n        }\n\n        #align {\n            width: 65px;\n            height: 23px;\n            line-height: 22px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n    <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td colspan=\"2\" class=\"format\">\n                <span><var id=\"lang_input_address\"></var></span>\n                <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\"\n                                                                                                type=\"text\" id=\"width\"/>\n                px\n            </td>\n\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\"\n                                                                                                 type=\"text\"\n                                                                                                 id=\"height\"/> px\n            </td>\n        </tr>\n        <tr>\n            <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/></td>\n            <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/></td>\n        </tr>\n\n        <tr>\n            <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                <select id=\"align\">\n                    <option value=\"\"></option>\n                    <option value=\"left\"></option>\n                    <option value=\"right\"></option>\n                </select>\n            </td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if (iframe) {\n        $G(\"url\").value = iframe.getAttribute(\"src\") || \"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\") || iframe.style.width.replace(\"px\", \"\") || \"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\", \"\") || \"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n\n    function queding() {\n        var url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig, \"\"),\n            width = $G(\"width\").value,\n            height = $G(\"height\").value,\n            scroll = $G(\"scroll\"),\n            frameborder = $G(\"frameborder\"),\n            float = $G(\"align\").value,\n            newIframe = editor.document.createElement(\"iframe\"),\n            div;\n        if (!url) {\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\", /http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\" + url);\n        /^[1-9]+[.]?\\d*$/g.test(width) ? newIframe.setAttribute(\"width\", width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test(height) ? newIframe.setAttribute(\"height\", height) : \"\";\n        scroll.checked ? newIframe.setAttribute(\"scrolling\", \"yes\") : newIframe.setAttribute(\"scrolling\", \"no\");\n        frameborder.checked ? newIframe.setAttribute(\"frameborder\", \"1\", 0) : newIframe.setAttribute(\"frameborder\", \"0\", 0);\n        float ? newIframe.setAttribute(\"align\", float) : newIframe.setAttribute(\"align\", \"\");\n        if (iframe) {\n            iframe.parentNode.insertBefore(newIframe, iframe);\n            domUtils.remove(iframe);\n        } else {\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\", div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function (evt) {\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            queding();\n        }\n    };\n    $focus($G(\"url\"));\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/internal.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a=window.parent;dialog=a.$EDITORUI[window.frameElement.id.replace(/_iframe$/,\"\")],editor=dialog.editor,UE=a.UE,domUtils=UE.dom.domUtils,utils=UE.utils,browser=UE.browser,ajax=UE.ajax,$G=function(a){return document.getElementById(a)},$focus=function(a){setTimeout(function(){if(browser.ie){var b=a.createTextRange();b.collapse(!1),b.select()}else a.focus()},0)},utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/dialogbase.css?cache=\"+Math.random(),tag:\"link\",type:\"text/css\",rel:\"stylesheet\"}),lang=editor.getLang(dialog.className.split(\"-\")[2]),lang&&domUtils.on(window,\"load\",function(){var a=editor.options.langPath+editor.options.lang+\"/images/\";for(var b in lang[\"static\"]){var c=$G(b);if(c){var d=c.tagName,e=lang[\"static\"][b];switch(e.src&&(e=utils.extend({},e,!1),e.src=a+e.src),e.style&&(e=utils.extend({},e,!1),e.style=e.style.replace(/url\\s*\\(/g,\"url(\"+a)),d.toLowerCase()){case\"var\":c.parentNode.replaceChild(document.createTextNode(e),c);break;case\"select\":for(var f,g=c.options,h=0;f=g[h];)f.innerHTML=e.options[h++];for(var i in e)\"options\"!=i&&c.setAttribute(i,e[i]);break;default:domUtils.setAttributes(c,e)}}}})}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        * {\n            margin: 0;\n            padding: 0;\n            color: #838383;\n        }\n\n        table {\n            font-size: 12px;\n            margin: 10px;\n            line-height: 36px;\n            width: 100%;\n        }\n\n        .txt {\n            box-sizing: border-box;\n            width: 90%;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div style=\"padding:10px;\">\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                <input id=\"target\" type=\"checkbox\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue(\"link\") : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(), 'a', true),\n        orgText;\n\n    link = domUtils.findParentByTagName(link, \"a\", true);\n\n    if (link) {\n        url = utils.html(link.getAttribute('_href') || link.getAttribute('href', 2));\n\n        if (rangeLink === link && !link.getElementsByTagName('img').length) {\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText' : 'textContent'];\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    } else {\n        if (range.collapsed) {\n            text.removeAttribute('disabled');\n            text.value = '';\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url : '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true : false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk() {\n        var href = $G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if (href) {\n            if (!hrefStartWith(href, allowLinkProtocols)) {\n                href = \"http://\" + href;\n            }\n            var obj = {\n                'href': href,\n                'target': $G(\"target\").checked ? \"_blank\" : '_self',\n                'title': $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href': href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if (orgText && text.value != orgText) {\n                link[browser.ie ? 'innerText' : 'textContent'] = obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if (range.collapsed) {\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link', utils.clearEmptyAttrs(obj));\n            dialog.close();\n        }\n    }\n\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function () {\n        if (!hrefStartWith(this.value, allowLinkProtocols)) {\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\" + lang.httpPrompt + \"</span>\";\n        } else {\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href, arr) {\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for (var i = 0, ai; ai = arr[i++];) {\n            if (href.indexOf(ai) == 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <style>\n        html, body {\n            height: 100%;\n            width: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview {\n            width: 100%;\n            height: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview * {\n            font-family: sans-serif;\n            font-size: 16px;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <script src=\"../../ueditor.parse.js?63488b91\"></script>\n    <title></title>\n</head>\n<body class=\"view\">\n<div id=\"preview\" style=\"margin:8px\">\n\n</div>\n</body>\n<script>\n    document.getElementById('preview').innerHTML = editor.getContent();\n    uParse('#preview', {\n        rootPath: '../../',\n        chartContainerHeight: 500\n    })\n    dialog.oncancel = function () {\n        document.getElementById('preview').innerHTML = '';\n    }\n</script>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/scrawl/scrawl.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{margin:0}table{width:100%}table td{padding:2px 4px;vertical-align:middle}a{text-decoration:none}em{font-style:normal}.border_style1{border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}.main{margin:8px;overflow:hidden}.hot{float:left;height:335px}.drawBoard{position:relative;cursor:crosshair}.brushBorad{position:absolute;left:0;top:0;z-index:998}.picBoard{border:0;text-align:center;line-height:300px;cursor:default}.operateBar{margin-top:10px;font-size:12px;text-align:center}.operateBar span{margin-left:10px}.drawToolbar{float:right;width:110px;height:300px;overflow:hidden}.colorBar{margin-top:10px;font-size:12px;text-align:center}.colorBar a{display:block;width:10px;height:10px;border:1px solid #1006F1;border-radius:3px;box-shadow:2px 2px 5px #d3d6da;opacity:.3}.sectionBar{margin-top:15px;font-size:12px;text-align:center}.sectionBar a{display:inline-block;width:10px;height:12px;color:#888;text-indent:-999px;opacity:.3}.size1{background:url(images/size.png) 1px center no-repeat}.size2{background:url(images/size.png) -10px center no-repeat}.size3{background:url(images/size.png) -22px center no-repeat}.size4{background:url(images/size.png) -35px center no-repeat}.addImgH{position:relative}.addImgH_form{position:absolute;left:18px;top:-1px;width:75px;height:21px;opacity:0;cursor:pointer}.addImgH_form input{width:100%}.maskLayerNull{display:none}.maskLayer{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.7;background-color:#fff;text-align:center;font-weight:700;line-height:300px;z-index:1000}.previousStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undoH.png);cursor:pointer}.previousStepH .text{color:#888;cursor:pointer}.previousStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undo.png);cursor:default}.previousStep .text{color:#ccc;cursor:default}.nextStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redoH.png);cursor:pointer}.nextStepH .text{color:#888;cursor:pointer}.nextStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redo.png);cursor:default}.nextStep .text{color:#ccc;cursor:default}.clearBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/emptyH.png);cursor:pointer}.clearBoardH .text{color:#888;cursor:pointer}.clearBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/empty.png);cursor:default}.clearBoard .text{color:#ccc;cursor:default}.scaleBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scaleH.png);cursor:pointer}.scaleBoardH .text{color:#888;cursor:pointer}.scaleBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scale.png);cursor:default}.scaleBoard .text{color:#ccc;cursor:default}.removeImgH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimgH.png);cursor:pointer}.removeImgH .text{color:#888;cursor:pointer}.removeImg .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimg.png);cursor:default}.removeImg .text{color:#ccc;cursor:default}.addImgH .icon{vertical-align:top;display:inline-block;width:16px;height:16px;background-image:url(images/addimg.png)}.addImgH .text{color:#888;cursor:pointer}.brushIcon{display:inline-block;width:16px;height:16px;background-image:url(images/brush.png)}.eraserIcon{display:inline-block;width:16px;height:16px;background-image:url(images/eraser.png)}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css?dce615c7\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js?eb98629c\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize: 3, //画笔初始大小\n        drawBrushColor: \"#4bacc6\", //画笔初始颜色\n        colorList: ['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum: 10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl(settings);\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec(scrawlObj);\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/scrawl/scrawl.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction ue_callback(a,b){function c(a,b,c,d){var e,f=0,g=0,h=a.width||c,i=a.height||d;(h>b||i>b)&&(h>=i?(f=h-b)&&(e=(f/h).toFixed(2),a.height=i-i*e,a.width=b):(g=i-b)&&(e=(g/i).toFixed(2),a.width=h-h*e,a.height=b))}var d=document,e=$G(\"J_picBoard\"),f=d.createElement(\"img\");removeMaskLayer(),\"SUCCESS\"==b?(e.innerHTML=\"\",f.onload=function(){c(this,300),e.appendChild(f);var a=new scrawl;a.btn2Highlight(\"J_removeImg\"),a.btn2Highlight(\"J_sacleBoard\")},f.src=a):alert(b)}function removeMaskLayer(){var a=$G(\"J_maskLayer\");a.className=\"maskLayerNull\",a.innerHTML=\"\",dialog.buttons[0].setDisabled(!1)}function addMaskLayer(a){var b=$G(\"J_maskLayer\");dialog.buttons[0].setDisabled(!0),b.className=\"maskLayer\",b.innerHTML=a}function exec(scrawlObj){if(scrawlObj.isScrawl){addMaskLayer(lang.scrawlUpLoading);var base64=scrawlObj.getCanvasData();if(base64){var options={timeout:1e5,headers:editor.options.serverHeaders||{},onsuccess:function(xhr){if(!scrawlObj.isCancelScrawl){var responseObj;if(responseObj=eval(\"(\"+xhr.responseText+\")\"),\"SUCCESS\"===responseObj.state){var imgObj={},url=editor.options.scrawlUrlPrefix+responseObj.url;imgObj.src=url,imgObj._src=url,imgObj.alt=responseObj.original||\"\",editor.execCommand(\"insertImage\",imgObj),dialog.close(),editor.fireEvent(\"uploadsuccess\",{res:responseObj,type:\"scrawl\"})}else alert(responseObj.state)}},onerror:function(){alert(lang.imageError),dialog.close()}};options[editor.getOpt(\"scrawlFieldName\")]=base64;var actionUrl=editor.getActionUrl(editor.getOpt(\"scrawlActionName\")),params=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(actionUrl+(actionUrl.indexOf(\"?\")==-1?\"?\":\"&\")+params);ajax.request(url,options)}}else addMaskLayer(lang.noScarwl+\"&nbsp;&nbsp;&nbsp;<input type='button' value='\"+lang.continueBtn+\"'  onclick='removeMaskLayer()'/>\")}var scrawl=function(a){a&&this.initOptions(a)};!function(){var a=$G(\"J_brushBoard\"),b=a.getContext(\"2d\"),c=[],d=0;scrawl.prototype={isScrawl:!1,brushWidth:-1,brushColor:\"\",initOptions:function(a){var b=this;b.originalState(a),b._buildToolbarColor(a.colorList),b._addBoardListener(a.saveNum),b._addOPerateListener(a.saveNum),b._addColorBarListener(),b._addBrushBarListener(),b._addEraserBarListener(),b._addAddImgListener(),b._addRemoveImgListenter(),b._addScalePicListenter(),b._addClearSelectionListenter(),b._originalColorSelect(a.drawBrushColor),b._originalBrushSelect(a.drawBrushSize),b._clearSelection()},originalState:function(a){var c=this;c.brushWidth=a.drawBrushSize,c.brushColor=a.drawBrushColor,b.lineWidth=c.brushWidth,b.strokeStyle=c.brushColor,b.fillStyle=\"transparent\",b.lineCap=\"round\",b.fill()},_buildToolbarColor:function(a){var b=null,c=[];c.push(\"<table id='J_colorList'>\");for(var d,e=0;d=a[e++];)(e-1)%5==0&&(1!=e&&c.push(\"</tr>\"),c.push(\"<tr>\")),b=\"#\"+d,c.push(\"<td><a title='\"+b+\"' href='javascript:void(0)' style='background-color:\"+b+\"'></a></td>\");c.push(\"</tr></table>\"),$G(\"J_colorBar\").innerHTML=c.join(\"\")},_addBoardListener:function(e){var f,g=this,h=0,i=-1,j=-1,k=!1,l=!1,m=!1,n=0,o=\"\";h=parseInt(domUtils.getComputedStyle($G(\"J_wrap\"),\"margin-left\")),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d+=1,domUtils.on(a,[\"mousedown\",\"mousemove\",\"mouseup\",\"mouseout\"],function(a){switch(f=browser.webkit?a.which:n,a.type){case\"mousedown\":n=1,o=1,k=!0,m=!1,l=!1,g.isScrawl=!0,i=a.clientX-h,j=a.clientY-h,b.beginPath();break;case\"mousemove\":if(!o&&0==f)return;if(!o&&f&&(i=a.clientX-h,j=a.clientY-h,b.beginPath(),o=1),m||!k)return;var c=a.clientX-h,d=a.clientY-h;b.moveTo(i,j),b.lineTo(c,d),b.stroke(),i=c,j=d,l=!0;break;case\"mouseup\":if(n=0,!k)return;l||(b.arc(i,j,b.lineWidth,0,2*Math.PI,!1),b.fillStyle=b.strokeStyle,b.fill()),b.closePath(),g._saveOPerate(e),k=!1,l=!1,m=!0,i=-1,j=-1;break;case\"mouseout\":if(o=\"\",n=0,1==f)return;b.closePath()}})},_addOPerateListener:function(a){var e=this;domUtils.on($G(\"J_previousStep\"),\"click\",function(){d>1&&(d-=1,b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d-1],0,0),e.btn2Highlight(\"J_nextStep\"),1==d&&e.btn2disable(\"J_previousStep\"))}),domUtils.on($G(\"J_nextStep\"),\"click\",function(){d>0&&d<c.length&&(b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d],0,0),d+=1,e.btn2Highlight(\"J_previousStep\"),d==c.length&&e.btn2disable(\"J_nextStep\"))}),domUtils.on($G(\"J_clearBoard\"),\"click\",function(){b.clearRect(0,0,b.canvas.width,b.canvas.height),c=[],e._saveOPerate(a),d=1,e.isScrawl=!1,e.btn2disable(\"J_previousStep\"),e.btn2disable(\"J_nextStep\"),e.btn2disable(\"J_clearBoard\")})},_addColorBarListener:function(){var a=this;domUtils.on($G(\"J_colorBar\"),\"click\",function(c){var d=a.getTarget(c),e=d.title;e&&(a._addColorSelect(d),a.brushColor=e,b.globalCompositeOperation=\"source-over\",b.lineWidth=a.brushWidth,b.strokeStyle=e)})},_addBrushBarListener:function(){var a=this;domUtils.on($G(\"J_brushBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.globalCompositeOperation=\"source-over\",b.lineWidth=parseInt(e),b.strokeStyle=a.brushColor,a.brushWidth=b.lineWidth)})},_addEraserBarListener:function(){var a=this;domUtils.on($G(\"J_eraserBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.lineWidth=parseInt(e),b.globalCompositeOperation=\"destination-out\",b.strokeStyle=\"#FFF\")})},_addAddImgListener:function(){var a=$G(\"J_imgTxt\");window.FileReader||($G(\"J_addImg\").style.display=\"none\",$G(\"J_removeImg\").style.display=\"none\",$G(\"J_sacleBoard\").style.display=\"none\"),domUtils.on(a,\"change\",function(b){var c=a.parentNode;addMaskLayer(lang.backgroundUploading);var d=b.target||b.srcElement,e=new FileReader;e.onload=function(a){var b=a.target||a.srcElement;ue_callback(b.result,\"SUCCESS\")},e.readAsDataURL(d.files[0]),c.reset()})},_addRemoveImgListenter:function(){var a=this;domUtils.on($G(\"J_removeImg\"),\"click\",function(){$G(\"J_picBoard\").innerHTML=\"\",a.btn2disable(\"J_removeImg\"),a.btn2disable(\"J_sacleBoard\")})},_addScalePicListenter:function(){domUtils.on($G(\"J_sacleBoard\"),\"click\",function(){var b=$G(\"J_picBoard\"),c=$G(\"J_scaleCon\"),d=b.children[0];if(d)if(c)\"visible\"==c.style.visibility?(c.style.visibility=\"hidden\",b.style.position=\"\",b.style.zIndex=\"\"):(c.style.visibility=\"visible\",b.style.cssText+=\"position:relative;z-index:999\");else{b.style.cssText=\"position:relative;z-index:999;\"+b.style.cssText,d.style.cssText=\"position: absolute;top:\"+(a.height-d.height)/2+\"px;left:\"+(a.width-d.width)/2+\"px;\";var e=new ScaleBoy;b.appendChild(e.init()),e.startScale(d)}})},_addClearSelectionListenter:function(){var a=document;domUtils.on(a,\"mousemove\",function(b){browser.ie&&browser.version<11?a.selection.clear():window.getSelection().removeAllRanges()})},_clearSelection:function(){for(var a,b=[\"J_operateBar\",\"J_colorBar\",\"J_brushBar\",\"J_eraserBar\",\"J_picBoard\"],c=0;a=b[c++];)domUtils.unSelectable($G(a))},_saveOPerate:function(a){var e=this;c.length<=a?(d<c.length&&(e.btn2disable(\"J_nextStep\"),c.splice(d)),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length):(c.shift(),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length),e.btn2Highlight(\"J_previousStep\"),e.btn2Highlight(\"J_clearBoard\")},_originalColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=0;b=c[d++];)b.children[0].title.toLowerCase()==a&&(b.children[0].style.opacity=1)},_originalBrushSelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=0;b=c[d++];)if(\"a\"==b.tagName.toLowerCase()){var e=browser.ie?b.innerText:b.text;e.toLowerCase()==a&&(b.style.opacity=1)}},_addColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=$G(\"J_eraserBar\").children,e=$G(\"J_brushBar\").children,f=0;b=c[f++];)b.children[0].style.opacity=.3;for(var g,h=0;g=e[h++];)if(\"a\"==g.tagName.toLowerCase()){g.style.opacity=.3;var i=browser.ie?g.innerText:g.text;i.toLowerCase()==this.brushWidth&&(g.style.opacity=1)}for(var j,k=0;j=d[k++];)\"a\"==j.tagName.toLowerCase()&&(j.style.opacity=.3);a.style.opacity=1,a.blur()},_addBESelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=$G(\"J_eraserBar\").children,e=0;b=c[e++];)\"a\"==b.tagName.toLowerCase()&&(b.style.opacity=.3);for(var f,g=0;f=d[g++];)\"a\"==f.tagName.toLowerCase()&&(f.style.opacity=.3);a.style.opacity=1,a.blur()},getCanvasData:function(){var c=$G(\"J_picBoard\"),d=c.children[0];if(d){var e,f;\"absolute\"==d.style.position?(e=parseInt(d.style.left),f=parseInt(d.style.top)):(e=(c.offsetWidth-d.width)/2,f=(c.offsetHeight-d.height)/2),b.globalCompositeOperation=\"destination-over\",b.drawImage(d,e,f,d.width,d.height)}else b.globalCompositeOperation=\"destination-atop\",b.fillStyle=\"#fff\",b.fillRect(0,0,a.width,a.height);try{return a.toDataURL(\"image/png\").substring(22)}catch(g){return\"\"}},btn2Highlight:function(a){var b=$G(a);b.className.indexOf(\"H\")==-1&&(b.className+=\"H\")},btn2disable:function(a){var b=$G(a);b.className.indexOf(\"H\")!=-1&&(b.className=b.className.replace(\"H\",\"\"))},getTarget:function(a){return a.target||a.srcElement}}}();var ScaleBoy=function(){this.dom=null,this.scalingElement=null};!function(){function a(){var a=document,b=a.getElementsByTagName(\"head\")[0],c=a.createElement(\"style\"),d=\".scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}.scale .hand0, .scale .hand7{cursor:nw-resize;}.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}.scale .hand2, .scale .hand5{cursor:ne-resize;}\";c.type=\"text/css\";try{c.appendChild(a.createTextNode(d))}catch(e){c.styleSheet.cssText=d}b.appendChild(c)}function b(){var a=document,b=[],c=a.createElement(\"div\");c.id=\"J_scaleCon\",c.className=\"scale\";for(var d=0;d<8;d++)b.push(\"<span class='hand\"+d+\"'></span>\");return c.innerHTML=b.join(\"\"),c}var c=[[1,1,-1,-1],[0,1,0,-1],[0,1,1,-1],[1,0,-1,0],[0,0,1,0],[1,0,-1,1],[0,0,0,1],[0,0,1,1]];ScaleBoy.prototype={init:function(){a();var c=this,d=c.dom=b();return c.scaleMousemove.fp=c,domUtils.on(d,\"mousedown\",function(a){var b=a.target||a.srcElement;c.start={x:a.clientX,y:a.clientY},b.className.indexOf(\"hand\")!=-1&&(c.dir=b.className.replace(\"hand\",\"\")),domUtils.on(document.body,\"mousemove\",c.scaleMousemove),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}),domUtils.on(document.body,\"mouseup\",function(a){c.start&&(domUtils.un(document.body,\"mousemove\",c.scaleMousemove),c.moved&&c.updateScaledElement({position:{x:d.style.left,y:d.style.top},size:{w:d.style.width,h:d.style.height}}),delete c.start,delete c.moved,delete c.dir)}),d},startScale:function(a){var b=this,c=b.dom;c.style.cssText=\"visibility:visible;top:\"+a.style.top+\";left:\"+a.style.left+\";width:\"+a.offsetWidth+\"px;height:\"+a.offsetHeight+\"px;\",b.scalingElement=a},updateScaledElement:function(a){var b=this.scalingElement,c=a.position,d=a.size;c&&(\"undefined\"!=typeof c.x&&(b.style.left=c.x),\"undefined\"!=typeof c.y&&(b.style.top=c.y)),d&&(d.w&&(b.style.width=d.w),d.h&&(b.style.height=d.h))},updateStyleByDir:function(a,b){var d,e=this,f=e.dom;c.def=[1,1,0,0],0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp(\"left\",d)+\"px\"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp(\"top\",d)+\"px\"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp(\"width\",d)+\"px\"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp(\"height\",d)+\"px\"),\"def\"===a&&e.updateScaledElement({position:{x:f.style.left,y:f.style.top}})},scaleMousemove:function(a){var b=arguments.callee.fp,c=b.start,d=b.dir||\"def\",e={x:a.clientX-c.x,y:a.clientY-c.y};b.updateStyleByDir(d,e),arguments.callee.fp.start={x:a.clientX,y:a.clientY},arguments.callee.fp.moved=1},_validScaledProp:function(a,b){var c=this.dom,d=$G(\"J_picBoard\");switch(b=isNaN(b)?0:b,a){case\"left\":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case\"top\":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case\"width\":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case\"height\":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}}}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .warpper {\n            position: relative;\n            width: 380px;\n            height: 100%;\n            margin: 10px auto;\n        }\n\n        .tabbody {\n            height: 160px;\n        }\n\n        .tabbody table {\n            width: 100%;\n            border-collapse: separate;\n            border-spacing: 3px;\n            line-height: 36px;\n        }\n\n        .tabbody .panel {\n            width: 373px;\n            height: 100%;\n            padding-left: 5px;\n            position: absolute;\n            background-color: #fff;\n        }\n\n        .tabbody input.int {\n            width: 190px;\n            height: 30px;\n            border: 1px solid #d7d7d7;\n            line-height: 21px;\n            border-radius: 3px;\n            outline: none;\n            padding: 0 5px;\n        }\n\n        .tabbody input.btn {\n            text-align: center;\n            line-height: 28px;\n            text-decoration: none;\n            height: 30px;\n            border: 1px solid #ccc;\n            background: #FFF;\n            border-radius: 3px;\n            padding: 0 5px;\n            font-size: 12px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span tabsrc=\"replace\"><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>:</td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>:</td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>:</td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js?54c26e9a\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}function getMatchCase(a){return!!$G(a).checked}editor.firstForSR=0,editor.currentRangeForSR=null,$G(\"searchtab\").onmousedown=function(){$G(\"search-msg\").innerHTML=\"\",$G(\"replace-msg\").innerHTML=\"\"},$G(\"nextFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;if(!e)return!1;if(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase\")},!frCommond(d)){var f=editor.selection.getRange().createBookmark();$G(\"search-msg\").innerHTML=lang.getEnd,editor.selection.getRange().moveToBookmark(f).select()}},$G(\"nextReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"preFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase\")},void(frCommond(d)||($G(\"search-msg\").innerHTML=lang.getStart)))},$G(\"preReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"repalceBtn\").onclick=function(){editor.trigger(\"clearLastSearchResult\");var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");return!!b&&(!(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())&&(a={searchStr:b,dir:1,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c},void frCommond(a)))},$G(\"repalceAllBtn\").onclick=function(){var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");if(!b)return!1;if(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())return!1;a={searchStr:b,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c,all:!0};var d=frCommond(a);d&&($G(\"replace-msg\").innerHTML=lang.countMsg.replace(\"{#count}\",d))};var frCommond=function(a){return editor.execCommand(\"searchreplace\",a)};switchTab(\"searchtab\"),dialog.onclose=function(){editor.trigger(\"clearLastSearchResult\")};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        html, body {\n            overflow: hidden;\n        }\n\n        #specharsTab {\n            width: 97%;\n            margin: 10px auto;\n            zoom: 1;\n            position: relative\n        }\n\n        .tabbody {\n            height: 447px;\n        }\n\n        .tabbody span {\n            margin: 5px 3px;\n            text-align: center;\n            display: inline-block;\n            width: 40px;\n            height: 16px;\n            line-height: 16px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div id=\"specharsTab\">\n    <div id=\"tabHeads\" class=\"tabhead\"></div>\n    <div id=\"tabBodys\" class=\"tabbody\"></div>\n</div>\n<script type=\"text/javascript\" src=\"spechars.js?78a9bbd0\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/spechars/spechars.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction toArray(a){return a.split(\",\")}var charsContent=[{name:\"tsfh\",title:lang.tsfh,content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},{name:\"lmsz\",title:lang.lmsz,content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},{name:\"szfh\",title:lang.szfh,content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},{name:\"rwfh\",title:lang.rwfh,content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},{name:\"xlzm\",title:lang.xlzm,content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},{name:\"ewzm\",title:lang.ewzm,content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},{name:\"pyzm\",title:lang.pyzm,content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},{name:\"yyyb\",title:lang.yyyb,content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},{name:\"zyzf\",title:lang.zyzf,content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}];!function(a){for(var b,c=0;b=a[c++];){var d=document.createElement(\"span\");d.setAttribute(\"tabSrc\",b.name),d.innerHTML=b.title,1==c&&(d.className=\"focus\"),domUtils.on(d,\"click\",function(){for(var a,b=$G(\"tabHeads\").children,c=0;a=b[c++];)a.className=\"\";b=$G(\"tabBodys\").children;for(var a,c=0;a=b[c++];)a.style.display=\"none\";this.className=\"focus\",$G(this.getAttribute(\"tabSrc\")).style.display=\"\"}),$G(\"tabHeads\").appendChild(d),domUtils.insertAfter(d,document.createTextNode(\"\\n\"));var e=document.createElement(\"div\");e.id=b.name,e.style.display=1==c?\"\":\"none\";for(var f,g=b.content,h=0;f=g[h++];){var i=document.createElement(\"span\");i.innerHTML=f,domUtils.on(i,\"click\",function(){editor.execCommand(\"insertHTML\",this.innerHTML),dialog.close()}),e.appendChild(i)}$G(\"tabBodys\").appendChild(e)}}(charsContent);"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/table/edittable.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{overflow:hidden;width:540px}.wrapper{margin:10px auto 0;font-size:12px;overflow:hidden;width:520px;height:315px}.clear{clear:both}.wrapper .left{float:left;margin-left:10px}.wrapper .right{float:right;border-left:2px dotted #EDEDED;padding-left:15px}.section{margin-bottom:15px;width:240px;overflow:hidden}.section h3{font-weight:700;padding:5px 0;margin-bottom:10px;border-bottom:1px solid #EDEDED;font-size:12px}.section ul{list-style:none;overflow:hidden;clear:both}.section li{float:left;width:120px}.section .tone{width:80px}.section .preview{width:220px}.section .preview table{text-align:center;vertical-align:middle;color:#666}.section .preview caption{font-weight:700}.section .preview td{border-width:1px;border-style:solid;height:22px}.section .preview th{border-style:solid;border-color:#DDD;border-width:2px 1px 1px;height:22px;background-color:#F7F7F7}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css?97f6eb5f\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var\n                        id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var\n                        id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var\n                        id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var\n                        id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var\n                        id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly'/>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js?69ed0ec5\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/table/edittable.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=$G(\"J_title\"),c=$G(\"J_titleCol\"),d=$G(\"J_caption\"),e=$G(\"J_sorttable\"),f=$G(\"J_autoSizeContent\"),g=$G(\"J_autoSizePage\"),h=$G(\"J_tone\"),i=$G(\"J_preview\"),j=function(){a=this,a.init()};j.prototype={init:function(){var i=new UE.ui.ColorPicker({editor:editor}),j=new UE.ui.Popup({editor:editor,content:i});b.checked=editor.queryCommandState(\"inserttitle\")==-1,c.checked=editor.queryCommandState(\"inserttitlecol\")==-1,d.checked=editor.queryCommandState(\"insertcaption\")==-1,e.checked=1==editor.queryCommandState(\"enablesort\");var k=editor.queryCommandState(\"enablesort\"),l=editor.queryCommandState(\"disablesort\");e.checked=!!(k<0&&l>=0),e.disabled=!!(k<0&&l<0),e.title=k<0&&l<0?lang.errorMsg:\"\",a.createTable(b.checked,c.checked,d.checked),a.setAutoSize(),a.setColor(a.getColor()),domUtils.on(b,\"click\",a.titleHanler),domUtils.on(c,\"click\",a.titleColHanler),domUtils.on(d,\"click\",a.captionHanler),domUtils.on(e,\"click\",a.sorttableHanler),domUtils.on(f,\"click\",a.autoSizeContentHanler),domUtils.on(g,\"click\",a.autoSizePageHanler),domUtils.on(h,\"click\",function(){j.showAnchor(h)}),domUtils.on(document,\"mousedown\",function(){j.hide()}),i.addListener(\"pickcolor\",function(){a.setColor(arguments[1]),j.hide()}),i.addListener(\"picknocolor\",function(){a.setColor(\"\"),j.hide()})},createTable:function(a,b,c){var d=[];if(d.push(\"<table id='J_example'>\"),c&&d.push(\"<caption>\"+lang.captionName+\"</caption>\"),a){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var e=0;e<5;e++)d.push(\"<th>\"+lang.titleName+\"</th>\");d.push(\"</tr>\")}for(var f=0;f<6;f++){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var g=0;g<5;g++)d.push(\"<td>\"+lang.cellsName+\"</td>\");d.push(\"</tr>\")}d.push(\"</table>\"),i.innerHTML=d.join(\"\"),this.updateSortSpan()},titleHanler:function(){var c=$G(\"J_example\"),d=document.createDocumentFragment(),e=domUtils.getComputedStyle(domUtils.getElementsByTagName(c,\"td\")[0],\"border-color\"),f=c.rows[0].children.length;if(b.checked){c.insertRow(0);for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,d.appendChild(g);c.rows[0].appendChild(d)}else domUtils.remove(c.rows[0]);a.setColor(e),a.updateSortSpan()},titleColHanler:function(){var b=$G(\"J_example\"),d=domUtils.getComputedStyle(domUtils.getElementsByTagName(b,\"td\")[0],\"border-color\"),e=b.rows,f=e.length;if(c.checked)for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,e[h].insertBefore(g,e[h].children[0]);else for(var h=0;h<f;h++)domUtils.remove(e[h].children[0]);a.setColor(d),a.updateSortSpan()},captionHanler:function(){var a=$G(\"J_example\");if(d.checked){var b=document.createElement(\"caption\");b.innerHTML=lang.captionName,a.insertBefore(b,a.firstChild)}else domUtils.remove(domUtils.getElementsByTagName(a,\"caption\")[0])},sorttableHanler:function(){a.updateSortSpan()},autoSizeContentHanler:function(){var a=$G(\"J_example\");a.removeAttribute(\"width\")},autoSizePageHanler:function(){var a=$G(\"J_example\"),b=a.getElementsByTagName(a,\"td\");utils.each(b,function(a){a.removeAttribute(\"width\")}),a.setAttribute(\"width\",\"100%\")},updateSortSpan:function(){var a=$G(\"J_example\"),b=a.rows[0],c=domUtils.getElementsByTagName(a,\"span\");utils.each(c,function(a){a.parentNode.removeChild(a)}),e.checked&&utils.each(b.cells,function(a,b){var c=document.createElement(\"span\");c.innerHTML=\"^\",a.appendChild(c)})},getColor:function(){var a,b=editor.selection.getStart(),c=domUtils.findParentByTagName(b,[\"td\",\"th\",\"caption\"],!0);return a=c&&domUtils.getComputedStyle(c,\"border-color\"),a||(a=\"#DDDDDD\"),a},setColor:function(a){var b=$G(\"J_example\"),c=domUtils.getElementsByTagName(b,\"td\").concat(domUtils.getElementsByTagName(b,\"th\"),domUtils.getElementsByTagName(b,\"caption\"));h.value=a,utils.each(c,function(b){b.style.borderColor=a})},setAutoSize:function(){var a=this;g.checked=!0,a.autoSizePageHanler()}},new j,dialog.onok=function(){editor.__hasEnterExecCommand=!0;var a={title:\"inserttitle deletetitle\",titleCol:\"inserttitlecol deletetitlecol\",caption:\"insertcaption deletecaption\",sorttable:\"enablesort disablesort\"};editor.fireEvent(\"saveScene\");for(var b in a){var c=a[b].split(\" \"),d=$G(\"J_\"+b);d.checked?editor.queryCommandState(c[0])!=-1&&editor.execCommand(c[0]):editor.queryCommandState(c[1])!=-1&&editor.execCommand(c[1])}editor.execCommand(\"edittable\",h.value),f.checked?editor.execCommand(\"adaptbytext\"):\"\",g.checked?editor.execCommand(\"adaptbywindow\"):\"\",editor.fireEvent(\"saveScene\"),editor.__hasEnterExecCommand=!1}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n        colorPiker = new UE.ui.ColorPicker({\n            editor: editor\n        }),\n        colorPop = new UE.ui.Popup({\n            editor: editor,\n            content: colorPiker\n        });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value = \"\";\n        colorPop.hide();\n    });\n    dialog.onok = function () {\n        editor.execCommand(\"edittd\", tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if (cell) {\n        var color = domUtils.getComputedStyle(cell, 'background-color');\n        if (/^#/.test(color)) {\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/template/config.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar templates=[{pre:\"pre0.png\",title:lang.blank,preHtml:'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',html:'<p class=\"ue_t\">欢迎使用UEditor！</p>'},{pre:\"pre1.png\",title:lang.blog,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',html:'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'},{pre:\"pre2.png\",title:lang.resume,preHtml:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',html:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'},{pre:\"pre3.png\",title:lang.richText,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',html:'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'},{pre:\"pre4.png\",title:lang.sciPapers,preHtml:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',html:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'}];"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/template/template.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrap{padding:5px;font-size:14px}.left{width:425px;float:left}.right{width:160px;border:1px solid #ccc;float:right;padding:5px;margin-right:5px}.right .pre{height:332px;overflow-y:auto}.right .preitem{border:#fff 1px solid;margin:5px 0;padding:2px 0}.right .preitem:hover{background-color:#fffacd;cursor:pointer;border:#ccc 1px solid}.right .preitem img{display:block;margin:0 auto;width:100px}.clear{clear:both}.top{height:26px;line-height:26px;padding:5px}.bottom{height:320px;width:100%;margin:0 auto}.transparent{background:url(images/bg.gif) repeat}.bottom table tr td{border:1px dashed #ccc}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA}.border_style1{padding:2px;border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}p{margin:5px 0}table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all}li{clear:both}ol{padding-left:40px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css?65b4074c\">\n</head>\n<body>\n<div class=\"wrap\">\n    <div class=\"left\">\n        <div class=\"top\">\n            <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n        </div>\n        <div class=\"bottom border_style1\" id=\"preview\"></div>\n    </div>\n    <fieldset class=\"right border_style1\">\n        <legend><var id=\"lang_template_select\"></var></legend>\n        <div class=\"pre\" id=\"preitem\"></div>\n    </fieldset>\n    <div class=\"clear\"></div>\n</div>\n<script type=\"text/javascript\" src=\"config.js?5c9539a4\"></script>\n<script type=\"text/javascript\" src=\"template.js?08eb5fca\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/template/template.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=editor,c=$G(\"preview\"),d=$G(\"preitem\"),e=templates,f=function(){for(var a,b=\"\",c=0;a=e[c++];)b+='<div class=\"preitem\" onclick=\"pre('+c+')\"><img src=\"images/'+a.pre+'\" '+(a.title?\"alt=\"+a.title+\" title=\"+a.title:\"\")+\"></div>\";d.innerHTML=b},g=function(b){var f=e[b-1];a=f,h(),domUtils.setStyles(d.childNodes[b-1],{\"background-color\":\"lemonChiffon\",border:\"#ccc 1px solid\"}),c.innerHTML=f.preHtml?f.preHtml:\"\"},h=function(){for(var a,b=d.children,c=0;a=b[c++];)domUtils.setStyles(a,{\"background-color\":\"\",border:\"white 1px solid\"})};dialog.onok=function(){$G(\"issave\").checked||b.execCommand(\"cleardoc\");var c={html:a&&a.html};b.execCommand(\"template\",c)},f(),window.pre=g,g(2)}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/video/video.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#videoUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#videoSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#videoSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#videoType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#videoSearchBtn,#videoSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewVideo{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-video-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#videoInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#videoFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#videoFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css?0043553c\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td>\n                        <td><input id=\"videoUrl\" type=\"text\"><a href=\"javascript:;\" id=\"videoSelect\"\n                                                                style=\"display:none;\">选择视频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链视频支持：优酷、腾讯视频、哔哩哔哩\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"videoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_video_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"videoFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label><var id=\"lang_upload_width\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label><var id=\"lang_upload_height\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js?ce575232\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/video/video.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});u.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),u.selectCallback&&($G(\"videoSelect\").style.display=\"inline-block\",domUtils.on($G(\"videoSelect\"),\"click\",function(a){u.selectCallback(editor,function(a){a&&($G(\"videoUrl\").value=a.path,n(a.path))})}))}function b(){k([\"videoFloat\",\"upload_alignment\"]),m($G(\"videoUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-video\"==b.className,e=b.className.indexOf(\"edui-upload-video\")!=-1;if(c||e){$G(\"videoUrl\").value=a=b.getAttribute(\"_url\"),$G(\"videoWidth\").value=b.width,$G(\"videoHeight\").value=b.height;var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(t=!0)}n(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=g(\"tabHeads\",\"tabSrc\");switch(a){case\"video\":return e();case\"videoSearch\":return f(\"searchList\");case\"upload\":return o()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"videoFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"videoWidth\"),b=$G(\"videoHeight\"),c=$G(\"videoUrl\").value,d=g(\"videoFloat\",\"name\");return!!c&&(!!i([a,b])&&void editor.execCommand(\"insertvideo\",{url:h(c),width:a.value,height:b.value,align:d},t?\"upload\":null))}function f(a){for(var b,c=domUtils.getElementsByTagName($G(a),\"img\"),d=[],e=0;b=c[e++];)b.getAttribute(\"selected\")&&d.push({url:b.getAttribute(\"ue_video_url\"),width:420,height:280,align:\"none\"});editor.execCommand(\"insertvideo\",d)}function g(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function h(a){return a?a=utils.trim(a).replace(/v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i,\"player.youku.com/embed/$1\").replace(/v\\.qq\\.com\\/x\\/cover\\/[\\w]+\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/v\\.qq\\.com\\/x\\/page\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/www\\.bilibili\\.com\\/video\\/([a-zA-Z0-9]+)\\/?.*$/i,\"player.bilibili.com/player.html?bvid=$1\"):\"\"}function i(a){for(var b,c=0;b=a[c++];){var d=b.value;if(!j(d)&&d)return alert(lang.numError),b.value=\"\",b.focus(),!1}return!0}function j(a){return/(0|^[1-9]\\d*$)/.test(a)}function k(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}l(b)}}function l(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function m(a){browser.ie?a.onpropertychange=function(){n(this.value)}:a.addEventListener(\"input\",function(){n(this.value)},!1)}function n(a){if(a){var b=h(a);b=utils.unhtml(b),$G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><iframe class=\"previewVideo\"  src=\"'+b+'\" width=\"420\" height=\"280\" frameborder=0 allowfullscreen></iframe>'}}function o(){var a=[],b=editor.getOpt(\"videoUrlPrefix\"),c=$G(\"upload_width\").value||420,d=$G(\"upload_height\").value||280,e=g(\"upload_alignment\",\"name\")||\"none\";for(var f in s){var h=s[f];a.push({url:b+h.url,width:c,height:d,align:e})}var i=r.getQueueCount();return i?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,i)+\"</span>\"),!1):void editor.execCommand(\"insertvideo\",a,\"upload\")}function p(){r=new q(\"queueList\")}function q(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var r,s=[],t=!1,u={};window.onload=function(){u=editor.getOpt(\"videoConfig\"),$focus($G(\"videoUrl\")),a(),b(),p()},q.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"videoActionName\")),A=editor.getOpt(\"videoMaxSize\"),B=(editor.getOpt(\"videoAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"videoActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"videoFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){q--,r-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(s.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"video\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .wrapper .image-info {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .image-info .input {\n            flex-grow: 1;\n            display: flex;\n        }\n\n        .wrapper .image-info .input input {\n            display: block;\n            border: 1px solid #CCC;\n            height: 23px;\n            border-radius: 3px;\n            flex-grow: 1;\n            outline: none;\n        }\n\n        .wrapper .image-info .copy {\n            width: 60px;\n            cursor: pointer;\n            margin: 0 5px;\n        }\n\n        .wrapper .image-info .copy div {\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action {\n            width: 100px;\n            cursor: pointer;\n        }\n\n        .wrapper .image-info .action .save-from-local {\n            position: relative;\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action .save-from-local input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n        }\n\n        .wrapper .image-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .image-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .image-manual .body {\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"image-info\">\n        <div class=\"input\">\n            <input type=\"text\" id=\"fileUrl\"/>\n        </div>\n        <div class=\"copy\">\n            <div id=\"copyButton\">复制路径</div>\n        </div>\n        <div class=\"action\">\n            <div class=\"save-from-local\">\n                <div>本地选择保存</div>\n                <input type=\"file\" id=\"saveFile\" multiple=true/>\n            </div>\n        </div>\n    </div>\n    <div class=\"image-tip\"></div>\n    <div class=\"image-manual\">\n        <div class=\"title\">\n            Windows使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n        <div class=\"title\">\n            Mac使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，按快捷 Command+Shift+G ，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"wordimage.js?94055851\"></script>\n<script type=\"text/javascript\">\n    editor.setOpt({\n        wordImageFieldName: \"upfile\",\n        compressSide: 0,\n        maxImageSideLength: 900\n    });\n    //全局变量\n    var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n        selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n        optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        optImageFieldName = editor.getOpt('imageFieldName'),\n        optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder') : null,\n        maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n        extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n    /* 添加额外的GET参数 */\n    var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n        urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?' : '&') + params;\n\n    var uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder');\n    uploader = WebUploader.create({\n        accept: {\n            title: 'Images',\n            extensions: acceptExtensions,\n            mimeTypes: 'image/*'\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n        threads: 1,\n        compress: editor.getOpt('imageCompressEnable') ? {\n            width: imageCompressBorder,\n            height: imageCompressBorder,\n            // 图片质量，只有type为`image/jpeg`的时候才有效。\n            quality: 90,\n            // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n            allowMagnify: false,\n            // 是否允许裁剪。\n            crop: false,\n            // 是否保留头部meta信息。\n            preserveHeaders: true\n        } : false\n    });\n    uploader.on('uploadSuccess', function (file, res) {\n        if ('state' in res) {\n            if (res.state === 'SUCCESS') {\n                if (res.url) {\n                    imageUrls.push({\n                        name: file.name,\n                        url: res.url,\n                        title: '',\n                    });\n                    $('.image-tip').html('<span style=\"color:#139213;\">图片' + imageUrls.length + '(' + file.name + ')' + '转存成功</span>');\n                } else {\n                    $('.image-tip').html('上传失败:' + JSON.stringify(res))\n                }\n                // 触发上传附件事件\n                editor.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'image'\n                });\n            } else {\n                $('.image-tip').html('上传失败:' + JSON.stringify(res))\n            }\n        } else {\n            $('.image-tip').html('上传失败:' + JSON.stringify(res))\n        }\n    });\n    uploader.on('uploadFinished', function () {\n        $('.image-tip').html('<span style=\"color:#139213;\">转存成功，请提交确认</span>');\n    });\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        wordImage.init(options, callbacks);\n    });\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/dialogs/wordimage/wordimage.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction addUploadButtonListener(){g(\"saveFile\").addEventListener(\"change\",function(){$(\".image-tip\").html(\"正在转存，请稍后...\"),uploader.addFile(this.files),uploader.upload()})}function addOkListener(){dialog.onok=function(){if(imageUrls.length){var a=editor.getOpt(\"imageUrlPrefix\"),b=domUtils.getElementsByTagName(editor.document,\"img\");editor.fireEvent(\"saveScene\");for(var c,d=0;c=b[d++];){var e=c.getAttribute(\"data-word-image\");if(e)for(var f,g=0;f=imageUrls[g++];)if(e.indexOf(f.name.replace(\" \",\"\"))!=-1){c.src=a+f.url,c.setAttribute(\"_src\",a+f.url),c.setAttribute(\"title\",f.title),domUtils.removeAttributes(c,[\"data-word-image\",\"style\",\"width\",\"height\"]),editor.fireEvent(\"selectionchange\");break}}editor.fireEvent(\"saveScene\")}},dialog.oncancel=function(){}}function showLocalPath(a){var b=editor.selection.getRange().getClosedNode(),c=editor.execCommand(\"wordimage\");if(1==c.length||b&&\"IMG\"==b.tagName)return void(g(a).value=c[0]);var d=c[0],e=d.lastIndexOf(\"/\")||0,f=d.lastIndexOf(\"\\\\\")||0,h=e>f?\"/\":\"\\\\\";d=d.substring(0,d.lastIndexOf(h)+1),g(a).value=d;for(var i=[],j=0,k=c.length;j<k;j++){var b=c[j];i.push(b.substring(b.lastIndexOf(h)+1,b.length))}$(\".image-tip\").html('<span style=\"color:#ff0000;\">请选择:'+i.join(\"、\")+\"共\"+c.length+\"个文件</span>\")}function createCopyButton(a,b){var c=g(b).value;c.startsWith(\"file:////\")&&(c=c.substring(8)),c=decodeURI(c),g(a).setAttribute(\"data-clipboard-text\",c);var d=new Clipboard(\"[data-clipboard-text]\");d.on(\"success\",function(a){g(\"copyButton\").innerHTML=\"复制成功\"})}var wordImage={},g=$G,flashObj,flashContainer;wordImage.init=function(a,b){showLocalPath(\"fileUrl\"),createCopyButton(\"copyButton\",\"fileUrl\"),addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>UEditorPlus 完整演示</title>\n    <meta name=\"viewport\" content=\"width=device-width, minimum-scale=0.5, maximum-scale=5, user-scalable=no\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.all.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"lang/zh-cn/zh-cn.js?49010875\"></script>\n    <script src=\"./plugins/demo/demo.js\"></script>\n    <script>\n        // window.UEDITOR_CONFIG.toolbars[0].push('undo');\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <style>\n        :root {\n            /*--ueditor-top-offset: 20px;*/\n        }\n    </style>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>完整示例</h1>\n    <div>\n        <script id=\"editor\" type=\"text/plain\" style=\"height:300px;\">\n<h1>\n    你好 UEditorPlus\n</h1>\n<p>\n    UEditorPlus 是基于 UEditor 二次开发的富文本编辑器，让 UEditor <span style=\"color: #E36C09;\">焕<span style=\"color: #0070C0;\">然</span><span style=\"color: #31859B;\"><span style=\"color: #00B050;\">一</span><span style=\"color: #FF0000;\">新</span></span></span>\n</p>\n\n<table data-sort=\"sortDisabled\">\n    <tbody>\n        <tr class=\"firstRow\">\n            <td valign=\"top\" style=\"word-break: break-all;\" rowspan=\"1\" colspan=\"3\">\n                我是表格\n            </td>\n        </tr>\n        <tr>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                如果\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                有一天\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                我离开了\n            </td>\n        </tr>\n        <tr>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                怎么才能\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                证明我\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                曾经来过\n            </td>\n        </tr>\n    </tbody>\n</table>\n<pre class=\"brush:html;toolbar:false\">&lt;div&gt;\n  &lt;span&gt;这里是HTML标签&lt;/span&gt;\n&lt;/div&gt;</pre>\n<h2>\n公式支持\n</h2>\n<p>\n    <img src=\"https://r.latexeasy.com/image.svg?%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"\n      data-formula-image=\"%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"/>\n</p>\n<p>\n    <br/>\n</p>\n\n        </script>\n    </div>\n    <div id=\"btns\" style=\"margin-top:20px;\">\n        <div>\n\n            <button onclick=\"alert(UE.getEditor('editor').getAllHtml())\">获得整个html的内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContent())\">获得内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', false)\">写入内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', true)\">追加内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContentTxt())\">获得纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').getPlainTxt())\">获得带格式的纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').hasContents())\">判断是否有内容</button>\n            <button onclick=\"UE.getEditor('editor').focus()\">使编辑器获得焦点</button>\n            <button onmousedown=\"isFocus()\">编辑器是否获得焦点</button>\n            <button onmousedown=\"setBlur()\">编辑器失去焦点</button>\n            <button onclick=\"getSelectText()\">获得当前选中的文本</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('insertHtml', '插入的内容')\">插入内容</button>\n            <button onclick=\"UE.getEditor('editor').setEnabled()\">设定可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setDisabled('fullscreen')\">设定不可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setHide()\">隐藏编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setShow()\">显示编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setHeight(300)\">设置固定高度</button>\n            <button onclick=\"UE.getEditor('editor')\">创建编辑器</button>\n            <button onclick=\"UE.getEditor('editor').destroy()\">销毁编辑器</button>\n            <button onclick=\"alert( UE.getEditor('editor').execCommand('get_auto_save_content') )\">草稿箱-获取</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('clear_auto_save_content'); alert('已清空草稿箱')\">草稿箱-清空\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('set_auto_save_content'); alert('已保存')\">草稿箱-立即保存\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('auto_save_restore')\">草稿箱-恢复到编辑器</button>\n        </div>\n    </div>\n\n    <script type=\"text/javascript\">\n        var ue = UE.getEditor('editor',{\n            // autoHeightEnabled: false,\n        });\n        ue.on('contentchange', function () {\n            // console.log('contentchange', ue.getContent());\n        });\n\n        function isFocus(e) {\n            alert(UE.getEditor('editor').isFocus());\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function setBlur(e) {\n            UE.getEditor('editor').blur();\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function getSelectText() {\n            var range = UE.getEditor('editor').selection.getRange();\n            range.select();\n            var txt = UE.getEditor('editor').selection.getText();\n            alert(txt)\n        }\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/lang/en/en.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N.en={labelMap:{anchor:\"Anchor\",undo:\"Undo\",redo:\"Redo\",bold:\"Bold\",indent:\"Indent\",italic:\"Italic\",underline:\"Underline\",strikethrough:\"Strikethrough\",subscript:\"SubScript\",fontborder:\"text border\",superscript:\"SuperScript\",formatmatch:\"Format Match\",source:\"Source\",blockquote:\"BlockQuote\",pasteplain:\"PastePlain\",selectall:\"SelectAll\",print:\"Print\",preview:\"Preview\",horizontal:\"Horizontal\",removeformat:\"RemoveFormat\",time:\"Time\",date:\"Date\",unlink:\"Unlink\",insertrow:\"InsertRow\",insertcol:\"InsertCol\",mergeright:\"MergeRight\",mergedown:\"MergeDown\",deleterow:\"DeleteRow\",deletecol:\"DeleteCol\",splittorows:\"SplitToRows\",insertcode:\"insert code\",splittocols:\"SplitToCols\",splittocells:\"SplitToCells\",deletecaption:\"DeleteCaption\",inserttitle:\"InsertTitle\",mergecells:\"MergeCells\",deletetable:\"DeleteTable\",cleardoc:\"Clear\",contentimport:\"Content Import\",insertparagraphbeforetable:\"InsertParagraphBeforeTable\",fontfamily:\"FontFamily\",fontsize:\"FontSize\",paragraph:\"Paragraph\",simpleupload:\"Single Image\",insertimage:\"Multi Image\",edittable:\"Edit Table\",edittd:\"Edit Td\",link:\"Link\",emotion:\"Emotion\",spechars:\"Spechars\",searchreplace:\"SearchReplace\",insertvideo:\"Video\",help:\"Help\",justifyleft:\"JustifyLeft\",justifyright:\"JustifyRight\",justifycenter:\"JustifyCenter\",justifyjustify:\"Justify\",forecolor:\"FontColor\",backcolor:\"BackColor\",insertorderedlist:\"OL\",insertunorderedlist:\"UL\",fullscreen:\"FullScreen\",directionalityltr:\"EnterFromLeft\",directionalityrtl:\"EnterFromRight\",rowspacingtop:\"RowSpacingTop\",rowspacingbottom:\"RowSpacingBottom\",pagebreak:\"PageBreak\",insertframe:\"Iframe\",imagenone:\"Default\",imageleft:\"ImageLeft\",imageright:\"ImageRight\",attachment:\"Attachment\",imagecenter:\"ImageCenter\",wordimage:\"WordImage\",formula:\"Formula\",lineheight:\"LineHeight\",edittip:\"EditTip\",customstyle:\"CustomStyle\",scrawl:\"Scrawl\",autotypeset:\"AutoTypeset\",touppercase:\"UpperCase\",tolowercase:\"LowerCase\",template:\"Template\",background:\"Background\",inserttable:\"InsertTable\"},autosave:{autoRestoreTip:\"Has been recovered from draft\"},insertorderedlist:{num:\"1,2,3...\",num1:\"1),2),3)...\",num2:\"(1),(2),(3)...\",cn:\"一,二,三....\",cn1:\"一),二),三)....\",cn2:\"(一),(二),(三)....\",decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ Circle\",disc:\"● Circle dot\",square:\"■ Rectangle \",dash:\"－ Dash\",dot:\"。dot\"},paragraph:{p:\"Paragraph\",h1:\"Title 1\",h2:\"Title 2\",h3:\"Title 3\",h4:\"Title 4\",h5:\"Title 5\",h6:\"Title 6\"},fontfamily:{\"default\":\"Default\",songti:\"Sim Sun\",kaiti:\"Sim Kai\",heiti:\"Sim Hei\",lishu:\"Sim Li\",yahei:\"Microsoft YaHei\",arial:\"Arial\",timesNewRoman:\"Times New Roman\"},customstyle:{tc:\"Title center\",tl:\"Title left\",im:\"Important\",hi:\"Highlight\"},autoupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},simpleupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},elementPathTip:\"Path\",wordCountTip:\"Word Count\",wordCountMsg:\"{#count} characters entered,{#leave} left. \",wordOverFlowMsg:'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',ok:\"OK\",cancel:\"Cancel\",closeDialog:\"closeDialog\",tableDrag:\"You must import the file uiUtils.js before drag! \",autofloatMsg:\"The plugin AutoFloat depends on EditorUI!\",loadconfigError:\"Get server config error.\",loadconfigFormatError:\"Server config format error.\",loadconfigHttpError:\"Get server config http error.\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"Do you confirm to clear the Document?\",contextMenu:{\"delete\":\"Delete\",selectall:\"Select all\",deletecode:\"Delete Code\",cleardoc:\"Clear Document\",confirmclear:\"Do you confirm to clear the Document?\",unlink:\"Unlink\",paragraph:\"Paragraph\",edittable:\"Table property\",aligncell:\"Align cell\",aligntable:\"Table alignment\",tableleft:\"Left float\",tablecenter:\"Center\",tableright:\"Right float\",aligntd:\"Cell alignment\",edittd:\"Cell property\",setbordervisible:\"set table edge visible\",table:\"Table\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justifyjustify:\"Default\",deletetable:\"Delete table\",insertparagraphbefore:\"InsertedBeforeLine\",insertparagraphafter:\"InsertedAfterLine\",inserttable:\"Insert table\",insertcaption:\"Insert caption\",deletecaption:\"Delete Caption\",inserttitle:\"Insert Title\",deletetitle:\"Delete Title\",inserttitlecol:\"Insert Title Col\",deletetitlecol:\"Delete Title Col\",averageDiseRow:\"AverageDise Row\",averageDisCol:\"AverageDis Col\",deleterow:\"Delete row\",deletecol:\"Delete col\",insertrow:\"Insert row\",insertcol:\"Insert col\",insertrownext:\"Insert Row Next\",insertcolnext:\"Insert Col Next\",mergeright:\"Merge right\",mergeleft:\"Merge left\",mergedown:\"Merge down\",mergecells:\"Merge cells\",splittocells:\"Split to cells\",splittocols:\"Split to Cols\",splittorows:\"Split to Rows\",tablesort:\"Table sorting\",enablesort:\"Sorting Enable\",disablesort:\"Sorting Disable\",reversecurrent:\"Reverse current\",orderbyasc:\"Order By ASCII\",reversebyasc:\"Reverse By ASCII\",orderbynum:\"Order By Num\",reversebynum:\"Reverse By Num\",borderbk:\"Border shading\",setcolor:\"interlaced color\",unsetcolor:\"Cancel interlacedcolor\",setbackground:\"Background interlaced\",unsetbackground:\"Cancel Bk interlaced\",redandblue:\"Blue and red\",threecolorgradient:\"Three-color gradient\",copy:\"Copy(Ctrl + c)\",copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",paste:\"Paste(Ctrl + v)\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\"},copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\",anchorMsg:\"Link\",clearColor:\"Clear\",standardColor:\"Standard color\",themeColor:\"Theme color\",property:\"Property\",\"default\":\"Default\",modify:\"Modify\",save:\"Save\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justify:\"Default\",clear:\"Clear\",\"delete\":\"Delete\",clickToUpload:\"Click to upload\",unset:\"Language hasn't been set!\",t_row:\"row\",t_col:\"col\",pasteOpt:\"Paste Option\",pasteSourceFormat:\"Keep Source Formatting\",tagFormat:\"Keep tag\",pasteTextFormat:\"Keep Text only\",more:\"More\",autoTypeSet:{mergeLine:\"Merge empty line\",delLine:\"Del empty line\",removeFormat:\"Remove format\",indent:\"Indent\",alignment:\"Alignment\",imageFloat:\"Image float\",removeFontsize:\"Remove font size\",removeFontFamily:\"Remove fontFamily\",removeHtml:\"Remove redundant HTML code\",pasteFilter:\"Paste filter\",run:\"Done\",symbol:\"Symbol Conversion\",bdc2sb:\"Full-width to Half-width\",tobdc:\"Half-width to Full-width\"},background:{\"static\":{lang_background_normal:\"Normal\",lang_background_local:\"Online\",lang_background_set:\"Background Set\",lang_background_none:\"No Background\",lang_background_colored:\"Colored Background\",lang_background_color:\"Color Set\",lang_background_netimg:\"Net-Image\",lang_background_align:\"Align Type\",lang_background_position:\"Position\",repeatType:{options:[\"Center\",\"Repeat-x\",\"Repeat-y\",\"Tile\",\"Custom\"]}},noUploadImage:\"No pictures has been uploaded！\",toggleSelect:\"Change the active state by click!\\n Image Size: \"},insertimage:{\"static\":{lang_tab_remote:\"Insert\",lang_tab_upload:\"Local\",lang_tab_online:\"Manager\",lang_tab_search:\"Search\",lang_input_url:\"Address:\",lang_input_size:\"Size:\",lang_input_width:\"Width\",lang_input_height:\"Height\",lang_input_border:\"Border:\",lang_input_vhspace:\"Margins:\",lang_input_title:\"Title:\",lang_input_align:\"Image Float Style:\",lang_imgLoading:\"Loading...\",lang_start_upload:\"Start Upload\",lock:{title:\"Lock rate\"},searchType:{title:\"ImageType\",options:[\"News\",\"Wallpaper\",\"emotions\",\"photo\"]},searchTxt:{value:\"Enter the search keyword!\"},searchBtn:{value:\"Search\"},searchReset:{value:\"Clear\"},noneAlign:{title:\"None Float\"},leftAlign:{title:\"Left Float\"},rightAlign:{title:\"Right Float\"},centerAlign:{title:\"Center In A Line\"}},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",uploadNoPreview:\"Can Not Preview\",updateStatusReady:\"Selected _ pictures, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ pictures (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\",remoteLockError:\"Cannot Lock the Proportion between width and height\",numError:\"Please enter the correct Num. e.g 123,400\",imageUrlError:\"The image format may be wrong!\",imageLoadError:\"Error,please check the network or URL！\",searchRemind:\"Enter the search keyword!\",searchLoading:\"Image is loading,please wait...\",searchRetry:\" Sorry,can't find the image,please try again!\"},attachment:{\"static\":{lang_tab_upload:\"Upload\",lang_tab_online:\"Online\",lang_start_upload:\"Start upload\",lang_drop_remind:\"You can drop files here, a single maximum of 300 files\"},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},insertvideo:{\"static\":{lang_tab_insertV:\"Video\",lang_tab_searchV:\"Search\",lang_tab_uploadV:\"Upload\",lang_video_url:\" URL \",lang_video_size:\"Video Size\",lang_videoW:\"Width\",lang_videoH:\"Height\",lang_alignment:\"Alignment\",videoSearchTxt:{value:\"Enter the search keyword!\"},videoType:{options:[\"All\",\"Hot\",\"Entertainment\",\"Funny\",\"Sports\",\"Science\",\"variety\"]},videoSearchBtn:{value:\"Search in Baidu\"},videoSearchReset:{value:\"Clear result\"},lang_input_fileStatus:\" No file uploaded!\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"Video Size\",lang_upload_width:\"Width\",lang_upload_height:\"Height\",lang_upload_alignment:\"Alignment\",lang_format_advice:\"Recommends mp4 format.\"},numError:\"Please enter the correct Num. e.g 123,400\",floatLeft:\"Float left\",floatRight:\"Float right\",\"default\":\"Default\",block:\"Display in block\",urlError:\"The video url format may be wrong!\",loading:\" &nbsp;The video is loading, please wait…\",clickToSelect:\"Click to select\",goToSource:\"Visit source video \",noVideo:\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",browseFiles:\"Open files\",uploadSuccess:\"Upload Successful!\",delSuccessFile:\"Remove from the success of the queue\",delFailSaveFile:\"Remove the save failed file\",statusPrompt:\" file(s) uploaded! \",flashVersionError:\"The current Flash version is too low, please update FlashPlayer,then try again!\",flashLoadingError:\"The Flash failed loading! Please check the path or network state\",fileUploadReady:\"Wait for uploading...\",delUploadQueue:\"Remove from the uploading queue \",limitPrompt1:\"Can not choose more than single\",limitPrompt2:\"file(s)！Please choose again！\",delFailFile:\"Remove failure file\",fileSizeLimit:\"File size exceeds the limit！\",emptyFile:\"Can not upload an empty file！\",fileTypeError:\"File type error！\",unknownError:\"Unknown error！\",fileUploading:\"Uploading,please wait...\",cancelUpload:\"Cancel upload\",netError:\"Network error\",failUpload:\"Upload failed\",serverIOError:\"Server IO error！\",noAuthority:\"No Permission！\",fileNumLimit:\"Upload limit to the number\",failCheck:\"Authentication fails, the upload is skipped!\",fileCanceling:\"Cancel, please wait...\",stopUploading:\"Upload has stopped...\",uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},template:{\"static\":{lang_template_bkcolor:\"Background Color\",lang_template_clear:\"Keep Content\",lang_template_select:\"Select Template\"},blank:\"Blank\",blog:\"Blog\",resume:\"Resume\",richText:\"Rich Text\",scrPapers:\"Scientific Papers\"},scrawl:{\"static\":{lang_input_previousStep:\"Previous\",lang_input_nextsStep:\"Next\",lang_input_clear:\"Clear\",lang_input_addPic:\"AddImage\",lang_input_ScalePic:\"ScaleImage\",lang_input_removePic:\"RemoveImage\",J_imgTxt:{title:\"Add background image\"}},noScarwl:\"No paint, a white paper...\",scrawlUpLoading:\"Image is uploading, please wait...\",continueBtn:\"Try again\",imageError:\"Image failed to load!\",backgroundUploading:\"Image is uploading,please wait...\"},anchor:{\"static\":{lang_input_anchorName:\"Anchor Name:\"}},emotion:{\"static\":{lang_input_choice:\"Choice\",lang_input_Tuzki:\"Tuzki\",lang_input_lvdouwa:\"LvDouWa\",lang_input_BOBO:\"BOBO\",lang_input_babyCat:\"BabyCat\",lang_input_bubble:\"Bubble\",lang_input_youa:\"YouA\"}},help:{\"static\":{lang_input_about:\"About UEditor Plus\",lang_input_shortcuts:\"Shortcuts\",lang_input_introduction:\"UEditor Plus is based on UEditor.\",lang_Txt_shortcuts:\"Shortcuts\",lang_Txt_func:\"Function\",lang_Txt_bold:\"Bold\",lang_Txt_copy:\"Copy\",lang_Txt_cut:\"Cut\",lang_Txt_Paste:\"Paste\",lang_Txt_undo:\"Undo\",lang_Txt_redo:\"Redo\",lang_Txt_italic:\"Italic\",lang_Txt_underline:\"Underline\",lang_Txt_selectAll:\"Select All\",lang_Txt_visualEnter:\"Submit\",lang_Txt_fullscreen:\"Fullscreen\"}},insertframe:{\"static\":{lang_input_address:\"Address：\",lang_input_width:\"Width：\",lang_input_height:\"height：\",lang_input_isScroll:\"Enable scrollbars：\",lang_input_frameborder:\"Show frame border：\",lang_input_alignMode:\"Alignment：\",align:{title:\"Alignment\",options:[\"Default\",\"Left\",\"Right\",\"Center\"]}},enterAddress:\"Please enter an address!\"},link:{\"static\":{lang_input_text:\"Text：\",lang_input_url:\"URL：\",lang_input_title:\"Title：\",lang_input_target:\"open in new window：\"},validLink:\"Supports only effective when a link is selected\",httpPrompt:'The hyperlink you enter should start with \"http|https|ftp://\"!'},searchreplace:{\"static\":{lang_tab_search:\"Search\",lang_tab_replace:\"Replace\",lang_search1:\"Search\",lang_search2:\"Search\",lang_replace:\"Replace\",lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_case_sensitive1:\"Case sense\",lang_case_sensitive2:\"Case sense\",nextFindBtn:{value:\"Next\"},preFindBtn:{value:\"Preview\"},nextReplaceBtn:{value:\"Next\"},preReplaceBtn:{value:\"Preview\"},repalceBtn:{value:\"Replace\"},repalceAllBtn:{value:\"Replace all\"}},getEnd:\"Has the search to the bottom!\",getStart:\"Has the search to the top!\",countMsg:\"Altogether replaced {#count} character(s)!\"},spechars:{\"static\":{},tsfh:\"Special\",lmsz:\"Roman\",szfh:\"Numeral\",rwfh:\"Japanese\",xlzm:\"The Greek\",ewzm:\"Russian\",pyzm:\"Phonetic\",yyyb:\"English\",zyzf:\"Others\"},edittable:{\"static\":{lang_tableStyle:\"Table style\",lang_insertCaption:\"Add table header row\",lang_insertTitle:\"Add table title row\",lang_insertTitleCol:\"Add table title col\",lang_tableSize:\"Automatically adjust table size\",lang_autoSizeContent:\"Adaptive by form text\",lang_orderbycontent:\"Table of contents sortable\",lang_autoSizePage:\"Page width adaptive\",lang_example:\"Example\",lang_borderStyle:\"Table Border\",lang_color:\"Color:\"},captionName:\"Caption\",titleName:\"Title\",cellsName:\"text\",errorMsg:\"There are merged cells, can not sort.\"},edittip:{\"static\":{lang_delRow:\"Delete entire row\",lang_delCol:\"Delete entire col\"}},edittd:{\"static\":{lang_tdBkColor:\"Background Color:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"The re-save step\",uploadBtn:{src:\"upload.png\",alt:\"Upload\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"},fileType:\"Image\",flashError:\"Flash initialization failed!\",netError:\"Network error! Please try again!\",copySuccess:\"URL has been copied!\",flashI18n:{lang:encodeURI('{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}'),uploadingTF:encodeURI('{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}'),imageTF:encodeURI('{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}'),textEncoding:\"utf-8\",addImageSkinURL:\"addImage.png\",allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",deleteBtnEnableSkinURL:\"deleteEnable.png\",deleteBtnDisableSkinURL:\"deleteDisable.png\",backgroundURL:\"\",listBackgroundURL:\"\",buttonURL:\"button.png\"}}};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/lang/zh-cn/zh-cn.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N[\"zh-cn\"]={labelMap:{anchor:\"锚点\",undo:\"撤销\",redo:\"重做\",bold:\"加粗\",indent:\"首行缩进\",italic:\"斜体\",underline:\"下划线\",strikethrough:\"删除线\",subscript:\"下标\",fontborder:\"字符边框\",superscript:\"上标\",formatmatch:\"格式刷\",source:\"源代码\",blockquote:\"引用\",pasteplain:\"纯文本粘贴模式\",selectall:\"全选\",print:\"打印\",preview:\"预览\",horizontal:\"分隔线\",removeformat:\"清除格式\",time:\"时间\",date:\"日期\",unlink:\"取消链接\",insertrow:\"前插入行\",insertcol:\"前插入列\",mergeright:\"右合并单元格\",mergedown:\"下合并单元格\",deleterow:\"删除行\",deletecol:\"删除列\",splittorows:\"拆分成行\",splittocols:\"拆分成列\",splittocells:\"完全拆分单元格\",deletecaption:\"删除表格标题\",inserttitle:\"插入标题\",mergecells:\"合并多个单元格\",deletetable:\"删除表格\",cleardoc:\"清空文档\",contentimport:\"导入内容\",insertparagraphbeforetable:\"表格前插入行\",insertcode:\"代码语言\",fontfamily:\"字体\",fontsize:\"字号\",paragraph:\"段落格式\",simpleupload:\"单图上传\",insertimage:\"插入图片\",edittable:\"表格属性\",edittd:\"单元格属性\",link:\"超链接\",emotion:\"表情\",spechars:\"特殊字符\",searchreplace:\"查询替换\",insertvideo:\"视频\",insertaudio:\"音频\",help:\"帮助\",justifyleft:\"居左对齐\",justifyright:\"居右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",forecolor:\"字体颜色\",backcolor:\"背景色\",insertorderedlist:\"有序列表\",insertunorderedlist:\"无序列表\",fullscreen:\"全屏\",directionalityltr:\"从左向右输入\",directionalityrtl:\"从右向左输入\",rowspacingtop:\"段前距\",rowspacingbottom:\"段后距\",pagebreak:\"分页\",insertframe:\"插入Iframe\",imagenone:\"默认\",imageleft:\"左浮动\",imageright:\"右浮动\",attachment:\"附件\",imagecenter:\"居中\",wordimage:\"图片转存\",formula:\"公式\",lineheight:\"行间距\",edittip:\"编辑提示\",customstyle:\"自定义标题\",autotypeset:\"自动排版\",touppercase:\"字母大写\",tolowercase:\"字母小写\",background:\"背景\",template:\"模板\",scrawl:\"涂鸦\",inserttable:\"插入表格\"},autosave:{autoRestoreTip:\"已自动从草稿箱恢复\"},insertorderedlist:{decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ 大圆圈\",disc:\"● 小黑点\",square:\"■ 小方块 \"},paragraph:{p:\"段落\",h1:\"标题 1\",h2:\"标题 2\",h3:\"标题 3\",h4:\"标题 4\",h5:\"标题 5\",h6:\"标题 6\"},fontfamily:{\"default\":\"默认\",songti:\"宋体\",kaiti:\"楷体\",heiti:\"黑体\",lishu:\"隶书\",yahei:\"微软雅黑\",arial:\"arial\",timesNewRoman:\"times new roman\"},customstyle:{tc:\"标题居中\",tl:\"标题居左\",im:\"强调\",hi:\"明显强调\"},autoupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},simpleupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},elementPathTip:\"元素路径\",wordCountTip:\"字数统计\",wordCountMsg:\"{#count} / {#leave}\",wordOverFlowMsg:'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',ok:\"确认\",cancel:\"取消\",closeDialog:\"关闭对话框\",tableDrag:\"表格拖动必须引入uiUtils.js文件！\",autofloatMsg:\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",loadconfigError:\"获取后台配置项请求出错，上传功能将不能正常使用！\",loadconfigFormatError:\"后台配置项返回格式出错，上传功能将不能正常使用！\",loadconfigHttpError:\"请求后台配置项http错误，上传功能将不能正常使用！\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"确定清空当前文档么？\",contextMenu:{\"delete\":\"删除\",selectall:\"全选\",deletecode:\"删除代码\",cleardoc:\"清空文档\",confirmclear:\"确定清空当前文档么？\",unlink:\"删除超链接\",paragraph:\"段落格式\",edittable:\"表格属性\",aligntd:\"单元格对齐方式\",aligntable:\"表格对齐方式\",tableleft:\"左浮动\",tablecenter:\"居中显示\",tableright:\"右浮动\",edittd:\"单元格属性\",setbordervisible:\"设置表格边线可见\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",table:\"表格\",inserttable:\"插入表格\",deletetable:\"删除表格\",insertparagraphbefore:\"前插入段落\",insertparagraphafter:\"后插入段落\",deleterow:\"删除当前行\",deletecol:\"删除当前列\",insertrow:\"前插入行\",insertcol:\"左插入列\",insertrownext:\"后插入行\",insertcolnext:\"右插入列\",insertcaption:\"插入表格名称\",deletecaption:\"删除表格名称\",inserttitle:\"插入表格标题行\",deletetitle:\"删除表格标题行\",inserttitlecol:\"插入表格标题列\",deletetitlecol:\"删除表格标题列\",averageDiseRow:\"平均分布各行\",averageDisCol:\"平均分布各列\",mergeright:\"向右合并\",mergeleft:\"向左合并\",mergedown:\"向下合并\",mergecells:\"合并单元格\",splittocells:\"完全拆分单元格\",splittocols:\"拆分成列\",splittorows:\"拆分成行\",tablesort:\"表格排序\",enablesort:\"设置表格可排序\",disablesort:\"取消表格可排序\",reversecurrent:\"逆序当前\",orderbyasc:\"按ASCII字符升序\",reversebyasc:\"按ASCII字符降序\",orderbynum:\"按数值大小升序\",reversebynum:\"按数值大小降序\",borderbk:\"边框底纹\",setcolor:\"表格隔行变色\",unsetcolor:\"取消表格隔行变色\",setbackground:\"选区背景隔行\",unsetbackground:\"取消选区背景\",redandblue:\"红蓝相间\",threecolorgradient:\"三色渐变\",copy:\"复制(Ctrl + c)\",copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",paste:\"粘贴(Ctrl + v)\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\"},copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\",anchorMsg:\"链接\",clearColor:\"清空颜色\",standardColor:\"标准颜色\",themeColor:\"主题颜色\",property:\"属性\",\"default\":\"默认\",modify:\"修改\",save:\"保存\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中\",justify:\"默认\",clear:\"清除\",\"delete\":\"删除\",clickToUpload:\"点击上传\",unset:\"尚未设置语言文件\",t_row:\"行\",t_col:\"列\",more:\"更多\",pasteOpt:\"粘贴选项\",pasteSourceFormat:\"保留源格式\",tagFormat:\"只保留标签\",pasteTextFormat:\"只保留文本\",autoTypeSet:{mergeLine:\"合并空行\",delLine:\"清除空行\",removeFormat:\"清除格式\",indent:\"首行缩进\",alignment:\"对齐方式\",imageFloat:\"图片浮动\",removeFontsize:\"清除字号\",removeFontFamily:\"清除字体\",removeHtml:\"清除冗余HTML代码\",pasteFilter:\"粘贴过滤\",run:\"执行\",symbol:\"符号转换\",bdc2sb:\"全角转半角\",tobdc:\"半角转全角\"},background:{\"static\":{lang_background_normal:\"背景设置\",lang_background_local:\"在线图片\",lang_background_set:\"选项\",lang_background_none:\"无背景色\",lang_background_colored:\"有背景色\",lang_background_color:\"颜色设置\",lang_background_netimg:\"网络图片\",lang_background_align:\"对齐方式\",lang_background_position:\"精确定位\",repeatType:{options:[\"居中\",\"横向重复\",\"纵向重复\",\"平铺\",\"自定义\"]}},noUploadImage:\"当前未上传过任何图片！\",toggleSelect:\"单击可切换选中状态\\n原图尺寸: \"},insertimage:{\"static\":{lang_tab_remote:\"插入图片\",lang_tab_upload:\"本地上传\",lang_tab_online:\"在线管理\",lang_input_url:\"地 址：\",lang_input_size:\"大 小：\",lang_input_width:\"宽度\",lang_input_height:\"高度\",lang_input_border:\"边 框：\",lang_input_vhspace:\"边 距：\",lang_input_title:\"描 述：\",lang_input_align:\"图片浮动方式：\",lang_imgLoading:\"　图片加载中……\",lang_start_upload:\"开始上传\",lock:{title:\"锁定宽高比例\"},searchType:{title:\"图片类型\",options:[\"新闻\",\"壁纸\",\"表情\",\"头像\"]},searchTxt:{value:\"请输入搜索关键词\"},searchBtn:{value:\"百度一下\"},searchReset:{value:\"清空搜索\"},noneAlign:{title:\"无浮动\"},leftAlign:{title:\"左浮动\"},rightAlign:{title:\"右浮动\"},centerAlign:{title:\"居中独占一行\"}},uploadSelectFile:\"点击选择图片\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",uploadNoPreview:\"不能预览\",updateStatusReady:\"选中_张图片，共_KB。\",updateStatusConfirm:\"已成功上传_张照片，_张照片上传失败\",updateStatusFinish:\"共_张（_KB），_张上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\",remoteLockError:\"宽高不正确,不能所定比例\",numError:\"请输入正确的长度或者宽度值！例如：123，400\",imageUrlError:\"不允许的图片格式或者图片域！\",imageLoadError:\"图片加载失败！请检查链接地址或网络状态！\",searchRemind:\"请输入搜索关键词\",searchLoading:\"图片加载中，请稍后……\",searchRetry:\" :( ，抱歉，没有找到图片！请重试一次！\"},attachment:{\"static\":{lang_tab_upload:\"上传附件\",lang_tab_online:\"在线附件\",lang_start_upload:\"开始上传\",lang_drop_remind:\"可以将文件拖到这里，单次最多可选100个文件\"},uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"已成功上传_个文件，_个文件上传失败\",updateStatusFinish:\"共_个（_KB），_个上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertvideo:{\"static\":{lang_tab_insertV:\"插入视频\",lang_tab_searchV:\"搜索视频\",lang_tab_uploadV:\"上传视频\",lang_video_url:\"视频网址\",lang_video_size:\"视频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"视频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的视频地址有误，请检查后再试！\",loading:\" &nbsp;视频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源视频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertaudio:{\"static\":{lang_tab_insertV:\"插入音频\",lang_tab_searchV:\"搜索音频\",lang_tab_uploadV:\"上传音频\",lang_video_url:\"音频网址\",lang_video_size:\"音频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"音频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的音频地址有误，请检查后再试！\",loading:\" &nbsp;音频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源音频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的音频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},template:{\"static\":{lang_template_bkcolor:\"背景颜色\",lang_template_clear:\"保留原有内容\",lang_template_select:\"选择模板\"},blank:\"空白文档\",blog:\"博客文章\",resume:\"个人简历\",richText:\"图文混排\",sciPapers:\"科技论文\"},scrawl:{\"static\":{lang_input_previousStep:\"上一步\",lang_input_nextsStep:\"下一步\",lang_input_clear:\"清空\",lang_input_addPic:\"添加背景\",lang_input_ScalePic:\"缩放背景\",lang_input_removePic:\"删除背景\",J_imgTxt:{title:\"添加背景图片\"}},noScarwl:\"尚未作画，白纸一张~\",scrawlUpLoading:\"涂鸦上传中,别急哦~\",continueBtn:\"继续\",imageError:\"糟糕，图片读取失败了！\",backgroundUploading:\"背景图片上传中,别急哦~\"},anchor:{\"static\":{lang_input_anchorName:\"锚点名字：\"}},emotion:{\"static\":{lang_input_choice:\"精选\",lang_input_Tuzki:\"兔斯基\",lang_input_BOBO:\"BOBO\",lang_input_lvdouwa:\"绿豆蛙\",lang_input_babyCat:\"baby猫\",lang_input_bubble:\"泡泡\",lang_input_youa:\"有啊\"}},help:{\"static\":{lang_input_about:\"关于 UEditor Plus\",lang_input_shortcuts:\"快捷键\",lang_input_introduction:\"UEditor Plus 是基于百度UEditor二次开发的所见即所得富文本web编辑器，主要丰富也界面样式，注重用户体验等特点。基于Apache 2.0协议开源，允许自由使用和修改代码。\",lang_Txt_shortcuts:\"快捷键\",lang_Txt_func:\"功能\",lang_Txt_bold:\"给选中字设置为加粗\",lang_Txt_copy:\"复制选中内容\",lang_Txt_cut:\"剪切选中内容\",lang_Txt_Paste:\"粘贴\",lang_Txt_undo:\"重新执行上次操作\",lang_Txt_redo:\"撤销上一次操作\",lang_Txt_italic:\"给选中字设置为斜体\",lang_Txt_underline:\"给选中字加下划线\",lang_Txt_selectAll:\"全部选中\",lang_Txt_visualEnter:\"软回车\",lang_Txt_fullscreen:\"全屏\"}},insertframe:{\"static\":{lang_input_address:\"地址：\",lang_input_width:\"宽度：\",lang_input_height:\"高度：\",lang_input_isScroll:\"允许滚动条：\",lang_input_frameborder:\"显示框架边框：\",lang_input_alignMode:\"对齐方式：\",align:{title:\"对齐方式\",options:[\"默认\",\"左对齐\",\"右对齐\",\"居中\"]}},enterAddress:\"请输入地址!\"},link:{\"static\":{lang_input_text:\"文本内容：\",lang_input_url:\"链接地址：\",lang_input_title:\"标题：\",lang_input_target:\"是否在新窗口打开：\"},validLink:\"只支持选中一个链接时生效\",httpPrompt:\"您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀\"},searchreplace:{\"static\":{lang_tab_search:\"查找\",lang_tab_replace:\"替换\",lang_search1:\"查找\",lang_search2:\"查找\",lang_replace:\"替换\",lang_searchReg:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_searchReg1:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_case_sensitive1:\"区分大小写\",lang_case_sensitive2:\"区分大小写\",nextFindBtn:{value:\"下一个\"},preFindBtn:{value:\"上一个\"},nextReplaceBtn:{value:\"下一个\"},preReplaceBtn:{value:\"上一个\"},repalceBtn:{value:\"替换\"},repalceAllBtn:{value:\"全部替换\"}},getEnd:\"已经搜索到文章末尾！\",getStart:\"已经搜索到文章头部\",countMsg:\"总共替换了{#count}处！\"},spechars:{\"static\":{},tsfh:\"特殊字符\",lmsz:\"罗马字符\",szfh:\"数学字符\",rwfh:\"日文字符\",xlzm:\"希腊字母\",ewzm:\"俄文字符\",pyzm:\"拼音字母\",yyyb:\"英语音标\",zyzf:\"其他\"},edittable:{\"static\":{lang_tableStyle:\"表格样式\",lang_insertCaption:\"添加表格名称行\",lang_insertTitle:\"添加表格标题行\",lang_insertTitleCol:\"添加表格标题列\",lang_orderbycontent:\"使表格内容可排序\",lang_tableSize:\"自动调整表格尺寸\",lang_autoSizeContent:\"按表格文字自适应\",lang_autoSizePage:\"按页面宽度自适应\",lang_example:\"示例\",lang_borderStyle:\"表格边框\",lang_color:\"颜色:\"},captionName:\"表格名称\",titleName:\"标题\",cellsName:\"内容\",errorMsg:\"有合并单元格，不可排序\"},edittip:{\"static\":{lang_delRow:\"删除整行\",lang_delCol:\"删除整列\"}},edittd:{\"static\":{lang_tdBkColor:\"背景颜色:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"转存步骤\",uploadBtn:{src:\"upload.png\",alt:\"上传\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"},fileType:\"图片\",flashError:\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",netError:\"网络连接错误，请重试！\",copySuccess:\"图片地址已经复制！\",flashI18n:{}}};"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/plugins/demo/demo.js",
    "content": "/*! UEditorPlus v2.0.0*/\n"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/themes/default/css/ueditor.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--edui-color-active-bg:rgba(200,200,200,.3);--edui-color-border:#EEE;--edui-bg-toolbar:#FFF;--edui-color-muted:#CCC}@font-face{font-family:edui-iconfont;src:url(\"data:font/woff2;base64,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\") format('woff2'),url(\"data:font/woff;base64,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\") format('woff'),url(\"data:font/ttf;base64,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b2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBlAGQAdQBpAC0AaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQADmNvbnRlbnQtaW1wb3J0BXNvdW5kBXJpZ2h0D2ljX2ltYWdlX3VwbG9hZAVjaGVjawZpZnJhbWUQQmFja2dyb3VuZEVmZmVjdANsdHIDcnRsC2ZpbmRyZXBsYWNlCWljcHJldmlldwVyaXFpMgtldXJvLXN5bWJvbAVtdXNpYwRoZWxwCWhhbmRfZHJhdwVwcmludAR0aW1lBWJhaWR1C0dvb2dsZS1NYXBzCmltYWdlLW5vbmUMaW1hZ2UtY2VudGVyCmltYWdlLWxlZnQLaW1hZ2UtcmlnaHQJY2xlYXItZG9jCnBhZ2UtYnJlYWsGYXV0aG9yCndvcmQtaW1hZ2ULdG91cHBlcmNhc2ULdG9sb3dlcmNhc2UKaG9yaXpvbnRhbA9tZXJnZS1kb3duLWNlbGwLbWVyZ2UtY2VsbHMQbWVyZ2UtcmlnaHQtY2VsbA1zcGxpdC10by1yb3dzDXNwbGl0LXRvLWNvbHMOc3BsaXQtdG8tY2VsbHMOaW5zZXJ0cm93YWJvdmUaMjRnbC1wYXJhZ3JhcGhNYXJnaW5Cb3R0b20XMjRnbC1wYXJhZ3JhcGhNYXJnaW5Ub3ANdW5vcmRlcmVkbGlzdAxsaXN0LW9yZGVyZWQUc3BsaXQtY2VsbHMtdmVydGljYWwWc3BsaXQtY2VsbHMtaG9yaXpvbnRhbAphdHRhY2htZW50CXN1YnNjcmlwdAlzZWxlY3RhbGwLc3VwZXJzY3JpcHQDbWFwCWJnLWNvbG9ycw1hZGRfY29sX2FmdGVyDmFkZF9jb2xfYmVmb3JlDWFkZF9yb3dfYWZ0ZXIOYWRkX3Jvd19iZWZvcmUKZGVsZXRlX2NvbA1jb21iaW5lX2NlbGxzAm9sCmRlbGV0ZV9yb3cMZGVsZXRlX3RhYmxlAnVsBHJlZG8FdGFibGUEdW5kbwVwYXN0ZQZ1cGxvYWQFYnJ1c2gKdGV4dF9xdW90ZRFpbnNlcnQtcm93LWJvdHRvbRFmdWxsc2NyZWVuLWV4cGFuZA5pbnNlcnQtcm93LXRvcAh0ZW1wbGF0ZRJmb3JtYXQtaW1hZ2UtcmlnaHQRZm9ybWF0LWltYWdlLWxlZnQTZm9ybWF0LWltYWdlLWNlbnRlcgtsaW5lLWhlaWdodBdBZnRlcmNsYXNzVGV4dC1PdXRsaW5lZAVzbWlsZQ1hbGlnbi1qdXN0aWZ5B2Zvcm11bGEKYW5nbGUtZG93bgVjbG9zZQptYWdpYy13YW5kBmVyYXNlcgRodG1sBnVubGluawZpbmRlbnQLYWxpZ24tcmlnaHQMYWxpZ24tY2VudGVyCmFsaWduLWxlZnQLZm9udC1jb2xvcnMEcGxheQl1bmRlcmxpbmUFaW1hZ2UGaXRhbGljBGxpbmsGc3RyaWtlBGNvZGUEYm9sZAAAAAAA\") format('truetype')}.edui-default{accent-color:#333}.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden;line-height:30px}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:inline-block;vertical-align:middle}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:pointer}.edui-default span.edui-clickable{color:#666;cursor:pointer;text-decoration:none}.edui-default span.edui-clickable:hover{color:#333}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default span.edui-popup-action-item{margin-right:5px}.edui-default span.edui-popup-action-item:last-child{margin-right:0}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid var(--edui-color-border);background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid var(--edui-color-border);background-color:var(--edui-bg-toolbar);-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid var(--edui-color-border);line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;padding:0 5px;color:var(--edui-color-muted)}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px;color:var(--edui-color-muted)}.edui-default .edui-editor-breadcrumb span{cursor:pointer;color:var(--edui-color-muted);line-height:16px;display:inline-block}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{font-size:13px;box-shadow:0 0 10px #0001f;transition:.25s;color:#666;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap;cursor:pointer}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#EEE;border:1px solid #EEE;padding:0;border-radius:3px}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;cursor:pointer}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:24px;line-height:22px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-menuitem .edui-menuitem-body .edui-icon:before{display:none}.edui-default .edui-contextmenu .edui-popup-content .edui-menuitem-body .edui-icon:before{display:inline-block}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon{line-height:20px;text-align:center}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon:before{content:\"\\e7fc\";font-size:10px;display:inline-block}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:30px;line-height:30px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid var(--edui-color-border);background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox .edui-combox-body>div{vertical-align:top}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:30px!important;width:30px!important;background-position:center;background-repeat:no-repeat;font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;text-align:center;cursor:pointer}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative;border-radius:3px}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid #EEE;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-toolbar-button-custom{display:inline-block!important;line-height:30px;vertical-align:middle;padding:0 10px;border-radius:3px;margin:0 5px}.edui-default .edui-toolbar-button-custom:hover{background:#EEE}.edui-default .edui-for-undo .edui-icon:before{content:\"\\e60f\"}.edui-default .edui-for-redo .edui-icon:before{content:\"\\e60c\"}.edui-default .edui-for-bold .edui-icon:before{content:\"\\e628\"}.edui-default .edui-for-italic .edui-icon:before{content:\"\\e62a\"}.edui-default .edui-for-fontborder .edui-icon:before{content:'\\e62d'}.edui-default .edui-for-underline .edui-icon:before{content:\"\\e63e\"}.edui-default .edui-for-strikethrough .edui-icon:before{content:\"\\e64a\"}.edui-default .edui-for-subscript .edui-icon:before{content:\"\\ece9\"}.edui-default .edui-for-superscript .edui-icon:before{content:\"\\e83e\"}.edui-default .edui-for-blockquote .edui-icon:before{content:\"\\e6d8\"}.edui-default .edui-for-forecolor .edui-icon:before{content:\"\\e7f8\"}.edui-default .edui-for-backcolor .edui-icon:before{content:\"\\e71a\"}.edui-default .edui-for-inserttable .edui-icon:before{content:\"\\e60d\"}.edui-default .edui-for-autotypeset .edui-icon:before{content:\"\\e662\"}.edui-default .edui-for-justifyleft .edui-icon:before{content:\"\\e7f7\"}.edui-default .edui-for-justifycenter .edui-icon:before{content:\"\\e7f6\"}.edui-default .edui-for-justifyright .edui-icon:before{content:\"\\e7f5\"}.edui-default .edui-for-justifyjustify .edui-icon:before{content:\"\\e87c\"}.edui-default .edui-for-insertorderedlist .edui-icon:before{content:\"\\e737\"}.edui-default .edui-for-insertunorderedlist .edui-icon:before{content:\"\\e7f4\"}.edui-default .edui-for-lineheight .edui-icon:before{content:\"\\e638\"}.edui-default .edui-for-rowspacingbottom .edui-icon:before{content:'\\eb09'}.edui-default .edui-for-rowspacingtop .edui-icon:before{content:'\\eb0a'}.edui-default .edui-for-horizontal .edui-icon:before{content:\"\\e617\"}.edui-default .edui-for-link .edui-icon:before{content:\"\\e648\"}.edui-default .edui-for-code .edui-icon:before{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon:before{content:\"\\e605\"}.edui-default .edui-for-insertframe .edui-icon:before{content:\"\\e6c0\"}.edui-default .edui-for-emoticon .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-spechars .edui-icon:before{content:\"\\e891\"}.edui-default .edui-for-help .edui-icon:before{content:\"\\e752\"}.edui-default .edui-for-print .edui-icon:before{content:\"\\e67a\"}.edui-default .edui-for-preview .edui-icon:before{content:\"\\e644\"}.edui-default .edui-for-selectall .edui-icon:before{content:'\\e62f'}.edui-default .edui-for-searchreplace .edui-icon:before{content:\"\\eb6c\"}.edui-default .edui-for-contentimport .edui-icon:before{content:\"\\e6f1\"}.edui-default .edui-for-map .edui-icon:before{content:\"\\e649\"}.edui-default .edui-for-insertvideo .edui-icon:before{content:\"\\e636\"}.edui-default .edui-for-insertaudio .edui-icon:before{content:\"\\e77b\"}.edui-default .edui-for-time .edui-icon:before{content:\"\\e680\"}.edui-default .edui-for-date .edui-icon:before{content:\"\\e697\"}.edui-default .edui-for-cut .edui-icon:before{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon:before{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon:before{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon:before{content:\"\\e637\"}.edui-default .edui-for-pasteplain .edui-icon:before{content:'\\edfb'}.edui-default .edui-for-directionalityltr .edui-icon:before{content:\"\\e623\"}.edui-default .edui-for-directionalityrtl .edui-icon:before{content:\"\\e7bc\"}.edui-default .edui-for-source .edui-icon:before{content:\"\\e608\"}.edui-default .edui-for-removeformat .edui-icon:before{content:\"\\e782\"}.edui-default .edui-for-unlink .edui-icon:before{content:\"\\e92b\"}.edui-default .edui-for-touppercase .edui-icon:before{content:\"\\e619\"}.edui-default .edui-for-tolowercase .edui-icon:before{content:\"\\e61a\"}.edui-default .edui-for-insertrow .edui-icon:before{content:\"\\e603\"}.edui-default .edui-for-insertrownext .edui-icon:before{content:\"\\e602\"}.edui-default .edui-for-insertcol .edui-icon:before{content:\"\\e601\"}.edui-default .edui-for-insertcolnext .edui-icon:before{content:\"\\e600\"}.edui-default .edui-for-mergeright .edui-icon:before{content:\"\\e615\"}.edui-default .edui-for-mergedown .edui-icon:before{content:\"\\e613\"}.edui-default .edui-for-splittorows .edui-icon:before{content:\"\\e610\"}.edui-default .edui-for-splittocols .edui-icon:before{content:\"\\e611\"}.edui-default .edui-for-insertparagraphbeforetable .edui-icon:before{content:'\\e901'}.edui-default .edui-for-deleterow .edui-icon:before{content:\"\\e609\"}.edui-default .edui-for-deletecol .edui-icon:before{content:\"\\e604\"}.edui-default .edui-for-splittocells .edui-icon:before{content:\"\\e612\"}.edui-default .edui-for-mergecells .edui-icon:before{content:\"\\e606\"}.edui-default .edui-for-deletetable .edui-icon:before{content:\"\\e60a\"}.edui-default .edui-for-cleardoc .edui-icon:before{content:\"\\e61e\"}.edui-default .edui-for-fullscreen .edui-icon:before{content:\"\\e675\"}.edui-default .edui-for-anchor .edui-icon:before{content:\"\\e61b\"}.edui-default .edui-for-pagebreak .edui-icon:before{content:\"\\e61d\"}.edui-default .edui-for-imagenone .edui-icon:before{content:\"\\e61f\"}.edui-default .edui-for-imageleft .edui-icon:before{content:\"\\e621\"}.edui-default .edui-for-wordimage .edui-icon:before{content:\"\\e618\"}.edui-default .edui-for-imageright .edui-icon:before{content:\"\\e622\"}.edui-default .edui-for-imagecenter .edui-icon:before{content:\"\\e620\"}.edui-default .edui-for-indent .edui-icon:before{content:\"\\e7f3\"}.edui-default .edui-for-outdent .edui-icon:before{background-position:-540px 0}.edui-default .edui-for-table .edui-icon:before{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon:before{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon:before{content:\"\\e6ad\"}.edui-default .edui-for-delete .edui-icon:before{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon:before{content:\"\\e704\"}.edui-default .edui-for-edittd .edui-icon:before{background-position:-700px -40px}.edui-default .edui-for-scrawl .edui-icon:before{content:\"\\e70b\"}.edui-default .edui-for-background .edui-icon:before{content:\"\\e624\"}.edui-default .edui-for-formula .edui-icon:before{content:\"\\e616\"}.edui-default .edui-for-aligntd .edui-icon:before{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon:before{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon:before{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon:before{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon:before{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon:before{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon:before{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon:before{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon:before{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon:before{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon:before{background-position:-480px 0}.edui-default .edui-for-inserttitlecol .edui-icon:before{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon:before{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon:before{content:\"\\edfc\"}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow:before,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px;vertical-align:middle}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px;border-radius:3px;display:flex}.edui-default .edui-toolbar .edui-splitborder{width:0;height:30px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin-top:1px}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{font-size:13px;box-shadow:0 0 10px rgba(0,0,0,.2);transition:.25s;color:#333;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-popup .edui-bordereraser{background-color:transparent;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff;border-radius:0 0 5px 5px;height:40px}.edui-default .edui-dialog-titlebar{height:30px;background:#FFF;position:relative;cursor:move;border-radius:5px 5px 0 0}.edui-default .edui-dialog-caption{font-weight:700;font-size:14px;line-height:30px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:30px;padding:5px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:10px;top:10px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon{width:20px;height:20px;font-family:edui-iconfont;line-height:20px;font-size:20px;text-align:center;color:#999;vertical-align:top}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon:before{content:\"\\e6a7\"}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body .edui-icon{color:#333}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body .edui-icon{display:none!important}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{height:30px;font-size:12px;line-height:28px;cursor:pointer;border-radius:4px;text-align:center;background-color:#F8F8F8;border:1px solid #EEE;padding:0 15px}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:230px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-formula .edui-dialog-content{width:800px;height:400px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-insertaudio .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-contentimport .edui-dialog-content{width:620px;height:400px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:30px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left;border-radius:3px;position:relative}.edui-default .edui-colorpicker-preview input{padding:0;left:0;border:0;position:absolute;top:0;width:100%;height:100%;border-radius:3px;opacity:0;cursor:pointer}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:20px;height:20px;border:1px solid #333;padding:0 5px;cursor:pointer;border-radius:3px;box-sizing:content-box}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer;border-radius:2px}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-autotypesetpicker-body td button{border:0;padding:5px 10px;font-size:13px;line-height:1.5;border-radius:4rem;-webkit-appearance:none;cursor:pointer;margin-bottom:5px;background-color:#EEE}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:1px;height:20px;margin:5px;background:var(--edui-color-border)}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:5px;width:20px;height:4px}.edui-default .edui-for-emotion .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-hassubmenu .edui-arrow:before{content:\"\\e665\"}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:var(--edui-color-active-bg);border-radius:3px;border:1px solid var(--edui-color-active-bg)}.edui-default .edui-shortcutmenu{padding:2px;white-space:nowrap;height:auto;background-color:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.2)}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}.edui-quick-operate{position:relative;margin:-10px;height:40px;background:#FFF;width:50px!important;border-radius:4px}.edui-quick-operate:hover .edui-quick-operate-menu{display:block}.edui-quick-operate-status{display:flex}.edui-quick-operate-icon{display:inline-block;line-height:30px!important;width:30px!important;text-align:center;cursor:pointer;color:#2A57FE}.edui-quick-operate-icon:last-child{width:20px!important;font-size:0;color:#999}.edui-quick-operate-icon:last-child svg{vertical-align:middle}.edui-quick-operate-menu{border:1px solid #CCC;border-radius:5px;box-shadow:0 0 10px #CCC;position:absolute;left:50px;top:0;background:#FFF;width:100px!important;display:none}.edui-quick-operate-menu .item{height:30px;line-height:30px;padding:0 10px;cursor:pointer}.edui-quick-operate-menu .item:hover{background:#F5F5F5}.edui-quick-operate-menu .item i{display:inline-block;width:2em}.edui-quick-operate .icon{font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased}.edui-quick-operate .icon.icon-image:before{content:\"\\e605\"}.edui-quick-operate .icon.icon-list:before{content:\"\\e87c\"}.edui-quick-operate .icon.icon-trash:before{content:\"\\e87c\"}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/themes/default/dialog.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\ninput[type=text]{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}select{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/themes/default/dialogbase.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nhtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;outline:0;font-size:100%}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}body{background-color:#fff;font:12px/1.5 sans-serif,\"宋体\",\"Arial Narrow\",HELVETICA;color:#646464}.tabhead{position:relative;z-index:10}.tabhead span{display:inline-block;padding:0 5px;height:30px;border:1px solid #ccc;background:#EEE;text-align:center;line-height:30px;cursor:pointer;*margin-right:5px;border-radius:3px 3px 0 0}.tabhead span.focus{height:31px;border-bottom:0;background:#fff}.tabbody{position:relative;top:-1px;margin:0 auto;border:1px solid #ccc}a.button{display:block;text-align:center;line-height:24px;text-decoration:none;height:24px;width:95px;border:0;color:#838383;background:url(../../themes/default/images/icons-all.gif) no-repeat}a.button:hover{background-position:0 -30px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/themes/iframe.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}a{color:#09f;text-decoration:none}a:hover,a:focus{color:#09f;text-decoration:none}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #EEE}img+br{display:block;padding:4px 0;content:' '}body p{margin-bottom:1em}iframe{border:0}img{max-width:100%}img[data-word-image]{cursor:pointer}pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;line-height:1.5}img{cursor:pointer}.edui-quick-operate-active{background:#E6ECFF}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCore.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar XRegExp;if(XRegExp)throw Error(\"can't load XRegExp twice in the same frame\");if(function(a){function b(a,b){if(!XRegExp.isRegExp(a))throw TypeError(\"type RegExp expected\");var d=a._xregexp;return a=XRegExp(a.source,c(a)+(b||\"\")),d&&(a._xregexp={source:d.source,captureNames:d.captureNames?d.captureNames.slice(0):null}),a}function c(a){return(a.global?\"g\":\"\")+(a.ignoreCase?\"i\":\"\")+(a.multiline?\"m\":\"\")+(a.extended?\"x\":\"\")+(a.sticky?\"y\":\"\")}function d(a,b,c,d){var e,f,g,h=j.length;i=!0;try{for(;h--;)if(g=j[h],c&g.scope&&(!g.trigger||g.trigger.call(d))&&(g.pattern.lastIndex=b,f=g.pattern.exec(a),f&&f.index===b)){e={output:g.handler.call(d,f,c),match:f};break}}catch(k){throw k}finally{i=!1}return e}function e(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}XRegExp=function(c,e){var f,h,j,l,m,n=[],p=XRegExp.OUTSIDE_CLASS,q=0;if(XRegExp.isRegExp(c)){if(e!==a)throw TypeError(\"can't supply flags when constructing one RegExp from another\");return b(c)}if(i)throw Error(\"can't call the XRegExp constructor within token definition functions\");for(e=e||\"\",f={hasNamedCapture:!1,captureNames:[],hasFlag:function(a){return e.indexOf(a)>-1},setFlag:function(a){e+=a}};q<c.length;)h=d(c,q,p,f),h?(n.push(h.output),q+=h.match[0].length||1):(j=k.exec.call(o[p],c.slice(q)))?(n.push(j[0]),q+=j[0].length):(l=c.charAt(q),\"[\"===l?p=XRegExp.INSIDE_CLASS:\"]\"===l&&(p=XRegExp.OUTSIDE_CLASS),n.push(l),q++);return m=RegExp(n.join(\"\"),k.replace.call(e,g,\"\")),m._xregexp={source:c,captureNames:f.hasNamedCapture?f.captureNames:null},m},XRegExp.version=\"1.5.1\",XRegExp.INSIDE_CLASS=1,XRegExp.OUTSIDE_CLASS=2;var f=/\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,g=/[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g,h=/^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,i=!1,j=[],k={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},l=k.exec.call(/()??/,\"\")[1]===a,m=function(){var a=/^/g;return k.test.call(a,\"\"),!a.lastIndex}(),n=RegExp.prototype.sticky!==a,o={};o[XRegExp.INSIDE_CLASS]=/^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/,o[XRegExp.OUTSIDE_CLASS]=/^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/,XRegExp.addToken=function(a,c,d,e){j.push({pattern:b(a,\"g\"+(n?\"y\":\"\")),handler:c,scope:d||XRegExp.OUTSIDE_CLASS,trigger:e||null})},XRegExp.cache=function(a,b){var c=a+\"/\"+(b||\"\");return XRegExp.cache[c]||(XRegExp.cache[c]=XRegExp(a,b))},XRegExp.copyAsGlobal=function(a){return b(a,\"g\")},XRegExp.escape=function(a){return a.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},XRegExp.execAt=function(a,c,d,e){var f,g=b(c,\"g\"+(e&&n?\"y\":\"\"));return g.lastIndex=d=d||0,f=g.exec(a),e&&f&&f.index!==d&&(f=null),c.global&&(c.lastIndex=f?g.lastIndex:0),f},XRegExp.freezeTokens=function(){XRegExp.addToken=function(){throw Error(\"can't run addToken after freezeTokens\")}},XRegExp.isRegExp=function(a){return\"[object RegExp]\"===Object.prototype.toString.call(a)},XRegExp.iterate=function(a,c,d,e){for(var f,g=b(c,\"g\"),h=-1;f=g.exec(a);)c.global&&(c.lastIndex=g.lastIndex),d.call(e,f,++h,a,c),g.lastIndex===f.index&&g.lastIndex++;c.global&&(c.lastIndex=0)},XRegExp.matchChain=function(a,c){return function d(a,e){var f,g=c[e].regex?c[e]:{regex:c[e]},h=b(g.regex,\"g\"),i=[];for(f=0;f<a.length;f++)XRegExp.iterate(a[f],h,function(a){i.push(g.backref?a[g.backref]||\"\":a[0])});return e!==c.length-1&&i.length?d(i,e+1):i}([a],0)},RegExp.prototype.apply=function(a,b){return this.exec(b[0])},RegExp.prototype.call=function(a,b){return this.exec(b)},RegExp.prototype.exec=function(b){var d,f,g,h;if(this.global||(h=this.lastIndex),d=k.exec.apply(this,arguments)){if(!l&&d.length>1&&e(d,\"\")>-1&&(g=RegExp(this.source,k.replace.call(c(this),\"g\",\"\")),k.replace.call((b+\"\").slice(d.index),g,function(){for(var b=1;b<arguments.length-2;b++)arguments[b]===a&&(d[b]=a)})),this._xregexp&&this._xregexp.captureNames)for(var i=1;i<d.length;i++)f=this._xregexp.captureNames[i-1],f&&(d[f]=d[i]);!m&&this.global&&!d[0].length&&this.lastIndex>d.index&&this.lastIndex--}return this.global||(this.lastIndex=h),d},RegExp.prototype.test=function(a){var b,c;return this.global||(c=this.lastIndex),b=k.exec.call(this,a),b&&!m&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,this.global||(this.lastIndex=c),!!b},String.prototype.match=function(a){if(XRegExp.isRegExp(a)||(a=RegExp(a)),a.global){var b=k.match.apply(this,arguments);return a.lastIndex=0,b}return a.exec(this)},String.prototype.replace=function(a,b){var c,d,g,h,i=XRegExp.isRegExp(a);return i?(a._xregexp&&(c=a._xregexp.captureNames),a.global||(h=a.lastIndex)):a+=\"\",\"[object Function]\"===Object.prototype.toString.call(b)?d=k.replace.call(this+\"\",a,function(){if(c){arguments[0]=new String(arguments[0]);for(var d=0;d<c.length;d++)c[d]&&(arguments[0][c[d]]=arguments[d+1])}return i&&a.global&&(a.lastIndex=arguments[arguments.length-2]+arguments[0].length),b.apply(null,arguments)}):(g=this+\"\",d=k.replace.call(g,a,function(){var a=arguments;return k.replace.call(b+\"\",f,function(b,d,f){if(!d){var g=+f;return g<=a.length-3?a[g]:(g=c?e(c,f):-1,g>-1?a[g+1]:b)}switch(d){case\"$\":return\"$\";case\"&\":return a[0];case\"`\":return a[a.length-1].slice(0,a[a.length-2]);case\"'\":return a[a.length-1].slice(a[a.length-2]+a[0].length);default:var h=\"\";if(d=+d,!d)return b;for(;d>a.length-3;)h=String.prototype.slice.call(d,-1)+h,d=Math.floor(d/10);return(d?a[d]||\"\":\"$\")+h}})})),i&&(a.global?a.lastIndex=0:a.lastIndex=h),d},String.prototype.split=function(b,c){if(!XRegExp.isRegExp(b))return k.split.apply(this,arguments);var d,e,f=this+\"\",g=[],h=0;if(c===a||+c<0)c=1/0;else if(c=Math.floor(+c),!c)return[];for(b=XRegExp.copyAsGlobal(b);(d=b.exec(f))&&!(b.lastIndex>h&&(g.push(f.slice(h,d.index)),d.length>1&&d.index<f.length&&Array.prototype.push.apply(g,d.slice(1)),e=d[0].length,h=b.lastIndex,g.length>=c));)b.lastIndex===d.index&&b.lastIndex++;return h===f.length?k.test.call(b,\"\")&&!e||g.push(\"\"):g.push(f.slice(h)),g.length>c?g.slice(0,c):g},XRegExp.addToken(/\\(\\?#[^)]*\\)/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"}),XRegExp.addToken(/\\((?!\\?)/,function(){return this.captureNames.push(null),\"(\"}),XRegExp.addToken(/\\(\\?<([$\\w]+)>/,function(a){return this.captureNames.push(a[1]),this.hasNamedCapture=!0,\"(\"}),XRegExp.addToken(/\\\\k<([\\w$]+)>/,function(a){var b=e(this.captureNames,a[1]);return b>-1?\"\\\\\"+(b+1)+(isNaN(a.input.charAt(a.index+a[0].length))?\"\":\"(?:)\"):a[0]}),XRegExp.addToken(/\\[\\^?]/,function(a){return\"[]\"===a[0]?\"\\\\b\\\\B\":\"[\\\\s\\\\S]\"}),XRegExp.addToken(/^\\(\\?([imsx]+)\\)/,function(a){return this.setFlag(a[1]),\"\"}),XRegExp.addToken(/(?:\\s+|#.*)+/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"x\")}),XRegExp.addToken(/\\./,function(){return\"[\\\\s\\\\S]\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"s\")})}(),\"undefined\"==typeof SyntaxHighlighter)var SyntaxHighlighter=function(){function a(a,b){return a.className.indexOf(b)!=-1}function b(b,c){a(b,c)||(b.className+=\" \"+c)}function c(a,b){a.className=a.className.replace(b,\"\")}function d(a){for(var b=[],c=0;c<a.length;c++)b.push(a[c]);return b}function e(a){return a.split(/\\r?\\n/)}function f(a){var b=\"highlighter_\";return 0==a.indexOf(b)?a:b+a}function g(a){return J.vars.highlighters[f(a)]}function h(a){return document.getElementById(f(a))}function i(a){J.vars.highlighters[f(a.id)]=a}function j(a,b,c){if(null==a)return null;var d,e,f=1!=c?a.childNodes:[a.parentNode],g={\"#\":\"id\",\".\":\"className\"}[b.substr(0,1)]||\"nodeName\";if(d=\"nodeName\"!=g?b.substr(1):b.toUpperCase(),(a[g]||\"\").indexOf(d)!=-1)return a;for(var h=0;f&&h<f.length&&null==e;h++)e=j(f[h],b,c);return e}function k(a,b){return j(a,b,!0)}function l(a,b,c){c=Math.max(c||0,0);for(var d=c;d<a.length;d++)if(a[d]==b)return d;return-1}function m(a){return(a||\"\")+Math.round(1e6*Math.random()).toString()}function n(a,b){var c,d={};for(c in a)d[c]=a[c];for(c in b)d[c]=b[c];return d}function o(a){var b={\"true\":!0,\"false\":!1}[a];return null==b?a:b}function p(a,b,c,d,e){var f=(screen.width-c)/2,g=(screen.height-d)/2;e+=\", left=\"+f+\", top=\"+g+\", width=\"+c+\", height=\"+d,e=e.replace(/^,/,\"\");var h=window.open(a,b,e);return h.focus(),h}function q(a,b,c,d){function e(a){a=a||window.event,a.target||(a.target=a.srcElement,a.preventDefault=function(){this.returnValue=!1}),c.call(d||window,a)}a.attachEvent?a.attachEvent(\"on\"+b,e):a.addEventListener(b,e,!1)}function r(a){window.alert(J.config.strings.alert+a)}function s(a,b){var c=J.vars.discoveredBrushes,d=null;if(null==c){c={};for(var e in J.brushes){var f=J.brushes[e],g=f.aliases;if(null!=g){f.brushName=e.toLowerCase();for(var h=0;h<g.length;h++)c[g[h]]=e}}J.vars.discoveredBrushes=c}return d=J.brushes[c[a]],null==d&&b&&r(J.config.strings.noBrush+a),d}function t(a,b){for(var c=e(a),d=0;d<c.length;d++)c[d]=b(c[d],d);return c.join(\"\\r\\n\")}function u(a){return a.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,\"\")}function v(a){for(var b,c={},d=new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),e=new XRegExp(\"(?<name>[\\\\w-]+)\\\\s*:\\\\s*(?<value>[\\\\w-%#]+|\\\\[.*?\\\\]|\\\".*?\\\"|'.*?')\\\\s*;?\",\"g\");null!=(b=e.exec(a));){var f=b.value.replace(/^['\"]|['\"]$/g,\"\");if(null!=f&&d.test(f)){var g=d.exec(f);f=g.values.length>0?g.values.split(/\\s*,\\s*/):[]}c[b.name]=f}return c}function w(a,b){return null==a||0==a.length||\"\\n\"==a?a:(a=a.replace(/</g,\"&lt;\"),a=a.replace(/ {2,}/g,function(a){for(var b=\"\",c=0;c<a.length-1;c++)b+=J.config.space;return b+\" \"}),null!=b&&(a=t(a,function(a){if(0==a.length)return\"\";var c=\"\";return a=a.replace(/^(&nbsp;| )+/,function(a){return c=a,\"\"}),0==a.length?c:c+'<code class=\"'+b+'\">'+a+\"</code>\"})),a)}function x(a,b){for(var c=a.toString();c.length<b;)c=\"0\"+c;return c}function y(a,b){for(var c=\"\",d=0;d<b;d++)c+=\" \";return a.replace(/\\t/g,c)}function z(a,b){function c(a,b,c){return a.substr(0,b)+f.substr(0,c)+a.substr(b+1,a.length)}for(var d=(e(a),\"\\t\"),f=\"\",g=0;g<50;g++)f+=\"                    \";return a=t(a,function(a){if(a.indexOf(d)==-1)return a;for(var e=0;(e=a.indexOf(d))!=-1;){var f=b-e%b;a=c(a,e,f)}return a})}function A(a){var b=/<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;return 1==J.config.bloggerMode&&(a=a.replace(b,\"\\n\")),1==J.config.stripBrs&&(a=a.replace(b,\"\")),a}function B(a){return a.replace(/^\\s+|\\s+$/g,\"\")}function C(a){for(var b=e(A(a)),c=(new Array,/^\\s*/),d=1e3,f=0;f<b.length&&d>0;f++){var g=b[f];if(0!=B(g).length){var h=c.exec(g);if(null==h)return a;d=Math.min(h[0].length,d)}}if(d>0)for(var f=0;f<b.length;f++)b[f]=b[f].substr(d);return b.join(\"\\n\")}function D(a,b){return a.index<b.index?-1:a.index>b.index?1:a.length<b.length?-1:a.length>b.length?1:0}function E(a,b){function c(a,b){return a[0]}for(var d=null,e=[],f=b.func?b.func:c;null!=(d=b.regex.exec(a));){var g=f(d,b);\"string\"==typeof g&&(g=[new J.Match(g,d.index,b.css)]),e=e.concat(g)}return e}function F(a){var b=/(.*)((&gt;|&lt;).*)/;return a.replace(J.regexLib.url,function(a){var c=\"\",d=null;return(d=b.exec(a))&&(a=d[1],c=d[2]),'<a href=\"'+a+'\">'+a+\"</a>\"+c})}function G(){for(var a=document.getElementsByTagName(\"script\"),b=[],c=0;c<a.length;c++)\"syntaxhighlighter\"==a[c].type&&b.push(a[c]);return b}function H(a){var b=\"<![CDATA[\",c=\"]]>\",d=B(a),e=!1,f=b.length,g=c.length;0==d.indexOf(b)&&(d=d.substring(f),e=!0);var h=d.length;return d.indexOf(c)==h-g&&(d=d.substring(0,h-g),e=!0),e?d:a}function I(a){var d,e=a.target,f=k(e,\".syntaxhighlighter\"),h=k(e,\".container\"),i=document.createElement(\"textarea\");if(h&&f&&!j(h,\"textarea\")){d=g(f.id),b(f,\"source\");for(var l=h.childNodes,m=[],n=0;n<l.length;n++)m.push(l[n].innerText||l[n].textContent);m=m.join(\"\\r\"),m=m.replace(/\\u00a0/g,\" \"),i.appendChild(document.createTextNode(m)),h.appendChild(i),i.focus(),i.select(),q(i,\"blur\",function(a){i.parentNode.removeChild(i),c(f,\"source\")})}}\"undefined\"!=typeof require&&\"undefined\"==typeof XRegExp&&(XRegExp=require(\"XRegExp\").XRegExp);var J={defaults:{\"class-name\":\"\",\"first-line\":1,\"pad-line-numbers\":!1,highlight:!1,title:null,\"smart-tabs\":!0,\"tab-size\":4,gutter:!0,toolbar:!0,\"quick-code\":!0,collapse:!1,\"auto-links\":!1,light:!1,unindent:!0,\"html-script\":!1},config:{space:\"&nbsp;\",useScriptTags:!0,bloggerMode:!1,stripBrs:!1,tagName:\"pre\",strings:{expandSource:\"expand source\",help:\"?\",alert:\"SyntaxHighlighter\\n\\n\",noBrush:\"Can't find brush for: \",brushNotHtmlScript:\"Brush wasn't configured for html-script option: \",aboutDialog:\"@ABOUT@\"}},vars:{discoveredBrushes:null,highlighters:{}},brushes:{},regexLib:{multiLineCComments:/\\/\\*[\\s\\S]*?\\*\\//gm,singleLineCComments:/\\/\\/.*$/gm,singleLinePerlComments:/#.*$/gm,doubleQuotedString:/\"([^\\\\\"\\n]|\\\\.)*\"/g,singleQuotedString:/'([^\\\\'\\n]|\\\\.)*'/g,multiLineDoubleQuotedString:new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"',\"gs\"),multiLineSingleQuotedString:new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\",\"gs\"),xmlComments:/(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,url:/\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,phpScriptTags:{left:/(&lt;|<)\\?(?:=|php)?/g,right:/\\?(&gt;|>)/g,eof:!0},aspScriptTags:{left:/(&lt;|<)%=?/g,right:/%(&gt;|>)/g},scriptScriptTags:{left:/(&lt;|<)\\s*script.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi}},toolbar:{getHtml:function(a){function b(a,b){return J.toolbar.getButtonHtml(a,b,J.config.strings[b])}for(var c='<div class=\"toolbar\">',d=J.toolbar.items,e=d.list,f=0;f<e.length;f++)c+=(d[e[f]].getHtml||b)(a,e[f]);return c+=\"</div>\"},getButtonHtml:function(a,b,c){return'<span><a href=\"#\" class=\"toolbar_item command_'+b+\" \"+b+'\">'+c+\"</a></span>\"},handler:function(a){function b(a){var b=new RegExp(a+\"_(\\\\w+)\"),c=b.exec(d);return c?c[1]:null}var c=a.target,d=c.className||\"\",e=g(k(c,\".syntaxhighlighter\").id),f=b(\"command\");e&&f&&J.toolbar.items[f].execute(e),a.preventDefault()},items:{list:[\"expandSource\",\"help\"],expandSource:{getHtml:function(a){if(1!=a.getParam(\"collapse\"))return\"\";var b=a.getParam(\"title\");return J.toolbar.getButtonHtml(a,\"expandSource\",b?b:J.config.strings.expandSource)},execute:function(a){var b=h(a.id);c(b,\"collapsed\")}},help:{execute:function(a){var b=p(\"\",\"_blank\",500,250,\"scrollbars=0\"),c=b.document;c.write(J.config.strings.aboutDialog),c.close(),b.focus()}}}},findElements:function(a,b){var c=b?[b]:d(document.getElementsByTagName(J.config.tagName)),e=J.config,f=[];if(e.useScriptTags&&(c=c.concat(G())),0===c.length)return f;for(var g=0;g<c.length;g++){var h={target:c[g],params:n(a,v(c[g].className))};null!=h.params.brush&&f.push(h)}return f},highlight:function(a,b){var c=this.findElements(a,b),d=\"innerHTML\",e=null,f=J.config;if(0!==c.length)for(var g=0;g<c.length;g++){var h,b=c[g],i=b.target,j=b.params,k=j.brush;if(null!=k){if(\"true\"==j[\"html-script\"]||1==J.defaults[\"html-script\"])e=new J.HtmlScript(k),k=\"htmlscript\";else{var l=s(k);if(!l)continue;e=new l}h=i[d],f.useScriptTags&&(h=H(h)),\"\"!=(i.title||\"\")&&(j.title=i.title),j.brush=k,e.init(j),b=e.getDiv(h),\"\"!=(i.id||\"\")&&(b.id=i.id);var m=b.firstChild.firstChild;m.className=b.firstChild.className,i.parentNode.replaceChild(m,i)}}},all:function(a){q(window,\"load\",function(){J.highlight(a)})}};return J.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c,this.brushName=null},J.Match.prototype.toString=function(){return this.value},J.HtmlScript=function(a){function b(a,b){for(var c=0;c<a.length;c++)a[c].index+=b}function c(a,c){for(var f,g=a.code,h=[],i=d.regexList,j=a.index+a.left.length,k=d.htmlScript,l=0;l<i.length;l++)f=E(g,i[l]),b(f,j),h=h.concat(f);null!=k.left&&null!=a.left&&(f=E(a.left,k.left),b(f,a.index),h=h.concat(f)),null!=k.right&&null!=a.right&&(f=E(a.right,k.right),b(f,a.index+a[0].lastIndexOf(a.right)),h=h.concat(f));for(var m=0;m<h.length;m++)h[m].brushName=e.brushName;return h}var d,e=s(a),f=new J.brushes.Xml,g=this,h=\"getDiv getHtml init\".split(\" \");if(null!=e){d=new e;for(var i=0;i<h.length;i++)(function(){var a=h[i];g[a]=function(){return f[a].apply(f,arguments)}})();return null==d.htmlScript?void r(J.config.strings.brushNotHtmlScript+a):void f.regexList.push({regex:d.htmlScript.code,func:c})}},J.Highlighter=function(){},J.Highlighter.prototype={getParam:function(a,b){var c=this.params[a];return o(null==c?b:c)},create:function(a){return document.createElement(a)},findMatches:function(a,b){var c=[];if(null!=a)for(var d=0;d<a.length;d++)\"object\"==typeof a[d]&&(c=c.concat(E(b,a[d])));return this.removeNestedMatches(c.sort(D))},removeNestedMatches:function(a){for(var b=0;b<a.length;b++)if(null!==a[b])for(var c=a[b],d=c.index+c.length,e=b+1;e<a.length&&null!==a[b];e++){var f=a[e];if(null!==f){if(f.index>d)break;f.index==c.index&&f.length>c.length?a[b]=null:f.index>=c.index&&f.index<d&&(a[e]=null)}}return a},figureOutLineNumbers:function(a){var b=[],c=parseInt(this.getParam(\"first-line\"));return t(a,function(a,d){b.push(d+c)}),b},isLineHighlighted:function(a){var b=this.getParam(\"highlight\",[]);return\"object\"!=typeof b&&null==b.push&&(b=[b]),l(b,a.toString())!=-1},getLineHtml:function(a,b,c){var d=[\"line\",\"number\"+b,\"index\"+a,\"alt\"+(b%2==0?1:2).toString()];return this.isLineHighlighted(b)&&d.push(\"highlighted\"),0==b&&d.push(\"break\"),'<div class=\"'+d.join(\" \")+'\">'+c+\"</div>\"},getLineNumbersHtml:function(a,b){var c=\"\",d=e(a).length,f=parseInt(this.getParam(\"first-line\")),g=this.getParam(\"pad-line-numbers\");1==g?g=(f+d-1).toString().length:1==isNaN(g)&&(g=0);for(var h=0;h<d;h++){var i=b?b[h]:f+h,a=0==i?J.config.space:x(i,g);c+=this.getLineHtml(h,i,a)}return c},getCodeLinesHtml:function(a,b){a=B(a);for(var c=e(a),d=(this.getParam(\"pad-line-numbers\"),parseInt(this.getParam(\"first-line\"))),a=\"\",f=this.getParam(\"brush\"),g=0;g<c.length;g++){var h=c[g],i=/^(&nbsp;|\\s)+/.exec(h),j=null,k=b?b[g]:d+g;null!=i&&(j=i[0].toString(),h=h.substr(j.length),j=j.replace(\" \",J.config.space)),h=B(h),0==h.length&&(h=J.config.space),a+=this.getLineHtml(g,k,(null!=j?'<code class=\"'+f+' spaces\">'+j+\"</code>\":\"\")+h)}return a},getTitleHtml:function(a){return a?\"<caption>\"+a+\"</caption>\":\"\"},getMatchesHtml:function(a,b){function c(a){var b=a?a.brushName||f:f;return b?b+\" \":\"\"}for(var d=0,e=\"\",f=this.getParam(\"brush\",\"\"),g=0;g<b.length;g++){var h,i=b[g];null!==i&&0!==i.length&&(h=c(i),e+=w(a.substr(d,i.index-d),h+\"plain\")+w(i.value,h+i.css),d=i.index+i.length+(i.offset||0))}return e+=w(a.substr(d),c()+\"plain\")},getHtml:function(a){var b,c,d,e=\"\",g=[\"syntaxhighlighter\"];return 1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1),className=\"syntaxhighlighter\",1==this.getParam(\"collapse\")&&g.push(\"collapsed\"),0==(gutter=this.getParam(\"gutter\"))&&g.push(\"nogutter\"),g.push(this.getParam(\"class-name\")),g.push(this.getParam(\"brush\")),a=u(a).replace(/\\r/g,\" \"),b=this.getParam(\"tab-size\"),a=1==this.getParam(\"smart-tabs\")?z(a,b):y(a,b),this.getParam(\"unindent\")&&(a=C(a)),gutter&&(d=this.figureOutLineNumbers(a)),c=this.findMatches(this.regexList,a),e=this.getMatchesHtml(a,c),e=this.getCodeLinesHtml(e,d),this.getParam(\"auto-links\")&&(e=F(e)),\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.match(/MSIE/)&&g.push(\"ie\"),e='<div id=\"'+f(this.id)+'\" class=\"'+g.join(\" \")+'\">'+(this.getParam(\"toolbar\")?J.toolbar.getHtml(this):\"\")+'<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'+this.getTitleHtml(this.getParam(\"title\"))+\"<tbody><tr>\"+(gutter?'<td class=\"gutter\">'+this.getLineNumbersHtml(a)+\"</td>\":\"\")+'<td class=\"code\"><div class=\"container\">'+e+\"</div></td></tr></tbody></table></div>\"},getDiv:function(a){null===a&&(a=\"\"),this.code=a;var b=this.create(\"div\");return b.innerHTML=this.getHtml(a),this.getParam(\"toolbar\")&&q(j(b,\".toolbar\"),\"click\",J.toolbar.handler),this.getParam(\"quick-code\")&&q(j(b,\".code\"),\"dblclick\",I),b},init:function(a){this.id=m(),i(this),this.params=n(J.defaults,a||{}),1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1)},getKeywords:function(a){return a=a.replace(/^\\s+|\\s+$/g,\"\").replace(/\\s+/g,\"|\"),\"\\\\b(?:\"+a+\")\\\\b\"},forHtmlScript:function(a){var b={end:a.right.source};a.eof&&(b.end=\"(?:(?:\"+b.end+\")|$)\"),this.htmlScript={left:{regex:a.left,css:\"script\"},right:{regex:a.right,css:\"script\"},code:new XRegExp(\"(?<left>\"+a.left.source+\")(?<code>.*?)(?<right>\"+b.end+\")\",\"sgi\")}}},J}();\"undefined\"!=typeof exports?exports.SyntaxHighlighter=SyntaxHighlighter:null,function(){function a(){var a=\"class interface function package\",b=\"-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape extends false final finally flash_proxy for get if implements import in include Infinity instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null Null Number Object object_proxy override parseFloat parseInt private protected public return set static String super switch this throw true try typeof uint undefined unescape use void while with\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:new RegExp(\"var\",\"gm\"),css:\"variable\"},{regex:new RegExp(\"trace\",\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"actionscript3\",\"as3\"],SyntaxHighlighter.brushes.AS3=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without\",b=\"first second third fourth fifth sixth seventh eighth ninth tenth last front back middle\",c=\"activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes\";this.regexList=[{regex:/(--|#).*$/gm,css:\"comments\"},{regex:/\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/\"[\\s\\S]*?\"/gm,css:\"string\"},{regex:/(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,css:\"color1\"},{regex:/(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g,css:\"color1\"},{regex:/(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,css:\"color2\"},{regex:/\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,css:\"keyword\"},{regex:/\\b\\d+(st|nd|rd|th)\\b/g,css:\"keyword\"},{regex:/\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,css:\"color3\"},{regex:/\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,css:\"color3\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"applescript\"],SyntaxHighlighter.brushes.AppleScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"if fi then elif else for do done until while break continue case esac function return in eq ne ge le\",b=\"alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chrootcksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig import install join kill less let ln local locate logname logout look lpc lpr lprint lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir vi watch wc whereis which who whoami Wget xargs yes\";this.regexList=[{regex:/^#!.*$/gm,css:\"preprocessor bold\"},{regex:/\\/[\\w-\\/]+/gm,css:\"plain\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"functions\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"bash\",\"shell\",\"sh\"],SyntaxHighlighter.brushes.Bash=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform XmlValidate Year YesNoFormat\",b=\"cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx cfwindow cfxml cfzip cfzipparam\",c=\"all and any between cross in join like not null or outer some\";\nthis.regexList=[{regex:new RegExp(\"--(.*)$\",\"gm\"),css:\"comments\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"coldfusion\",\"cf\"],SyntaxHighlighter.brushes.ColdFusion=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t __wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler sig_atomic_t size_t _stat __stat64 _stati64 terminate_function time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf va_list wchar_t wctrans_t wctype_t wint_t signed\",b=\"auto break case catch class const decltype __finally __exception __try const_cast continue private public protected __declspec default delete deprecated dllexport dllimport do dynamic_cast else enum explicit extern if for friend goto inline mutable naked namespace new noinline noreturn nothrow register reinterpret_cast return selectany sizeof static static_cast struct switch template this thread throw true false try typedef typeid typename union using uuid virtual void volatile whcar_t while\",c=\"assert isalnum isalpha iscntrl isdigit isgraph islower isprintispunct isspace isupper isxdigit tolower toupper errno localeconv setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell fwrite getc getchar gets perror printf putc putchar puts remove rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs mbtowc qsort rand realloc srand strtod strtol strtoul system wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr strcmp strcoll strcpy strcspn strerror strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime clock ctime difftime gmtime localtime mktime strftime time\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^ *#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color1 bold\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"functions bold\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword bold\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"cpp\",\"c\"],SyntaxHighlighter.brushes.Cpp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=0==a[0].indexOf(\"///\")?\"color1\":\"comments\";return[new SyntaxHighlighter.Match(a[0],a.index,c)]}var b=\"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit volatile extern false finally fixed float for foreach get goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed set short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void while var from group by into select let where orderby join on equals ascending descending\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,func:a},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:/@\"(?:[^\"]|\"\")*\"/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:/\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,css:\"keyword\"},{regex:/\\byield(?=\\s+(?:return|break)\\b)/g,css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"c#\",\"c-sharp\",\"csharp\"],SyntaxHighlighter.brushes.CSharp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\";this.regexList=[{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,css:\"value\"},{regex:/!important/g,css:\"color3\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}],this.forHtmlScript({left:/(&lt;|<)\\s*style.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"css\"],SyntaxHighlighter.brushes.CSS=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs addr and ansichar ansistring array as asm begin boolean byte cardinal case char class comp const constructor currency destructor div do double downto else end except exports extended false file finalization finally for function goto if implementation in inherited int64 initialization integer interface is label library longint longword mod nil not object of on or packed pansichar pansistring pchar pcurrency pdatetime pextended pint64 pointer private procedure program property pshortstring pstring pvariant pwidechar pwidestring protected public published raise real real48 record repeat set shl shortint shortstring shr single smallint string then threadvar to true try type unit until uses val var varirnt while widechar widestring with word write writeln xor\";this.regexList=[{regex:/\\(\\*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/{(?!\\$)[\\s\\S]*?}/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\{\\$[a-zA-Z]+ .+\\}/g,css:\"color1\"},{regex:/\\b[\\d\\.]+\\b/g,css:\"value\"},{regex:/\\$[a-zA-Z0-9]+\\b/g,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"delphi\",\"pascal\",\"pas\"],SyntaxHighlighter.brushes.Delphi=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){this.regexList=[{regex:/^\\+\\+\\+ .*$/gm,css:\"color2\"},{regex:/^\\-\\-\\- .*$/gm,css:\"color2\"},{regex:/^\\s.*$/gm,css:\"color1\"},{regex:/^@@.*@@.*$/gm,css:\"variable\"},{regex:/^\\+.*$/gm,css:\"string\"},{regex:/^\\-.*$/gm,css:\"color3\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"diff\",\"patch\"],SyntaxHighlighter.brushes.Diff=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor module export import define\";this.regexList=[{regex:new RegExp(\"[A-Z][A-Za-z0-9_]+\",\"g\"),css:\"constants\"},{regex:new RegExp(\"\\\\%.+\",\"gm\"),css:\"comments\"},{regex:new RegExp(\"\\\\?[A-Za-z0-9_]+\",\"g\"),css:\"preprocessor\"},{regex:new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\",\"g\"),css:\"functions\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"erl\",\"erlang\"],SyntaxHighlighter.brushes.Erland=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"as assert break case catch class continue def default do else extends finally if in implements import instanceof interface new package property return switch throw throws try while public protected private static\",b=\"void boolean byte char short int long float double\",c=\"null\",d=\"allProperties count get size collect each eachProperty eachPropertyName eachWithIndex find findAll findIndexOf grep inject max min reverseEach sort asImmutable asSynchronized flatten intersect join pop reverse subMap toList padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText splitEachLine withReader append encodeBase64 decodeBase64 filterLine transformChar transformLine withOutputStream withPrintWriter withStream withStreams withWriter withWriterAppend write writeLine dump inspect invokeMethod print println step times upto use waitForOrKill getText\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\"\"\".*\"\"\"/g,css:\"string\"},{regex:new RegExp(\"\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b\",\"gi\"),css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(d),\"gm\"),css:\"functions\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"groovy\"],SyntaxHighlighter.brushes.Groovy=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws true transient try void volatile while\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:/\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,css:\"comments\"},{regex:/\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,css:\"preprocessor\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:/(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,css:\"color1\"},{regex:/\\@interface\\b/g,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript({left:/(&lt;|<)%[@!=]?/g,right:/%(&gt;|>)/g})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"java\"],SyntaxHighlighter.brushes.Java=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Boolean Byte Character Double Duration Float Integer Long Number Short String Void\",b=\"abstract after and as assert at before bind bound break catch class continue def delete else exclusive extends false finally first for from function if import in indexof init insert instanceof into inverse last lazy mixin mod nativearray new not null on or override package postinit protected public public-init public-read replace return reverse sizeof step super then this throw true try tween typeof var where while with attribute let private readonly static trigger\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"variable\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"jfx\",\"javafx\"],SyntaxHighlighter.brushes.JavaFX=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"break case catch continue default delete do else false  for function if in instanceof new null return super switch this throw true try typeof var while with\",b=SyntaxHighlighter.regexLib;this.regexList=[{regex:b.multiLineDoubleQuotedString,css:\"string\"},{regex:b.multiLineSingleQuotedString,css:\"string\"},{regex:b.singleLineCComments,css:\"comments\"},{regex:b.multiLineCComments,css:\"comments\"},{regex:/\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(b.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"js\",\"jscript\",\"javascript\"],SyntaxHighlighter.brushes.JScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr chroot close closedir connect cos crypt defined delete each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd oct open opendir ord pack pipe pop pos print printf prototype push quotemeta rand read readdir readline readlink readpipe recv rename reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study substr symlink syscall sysopen sysread sysseek system syswrite tell telldir time times tr truncate uc ucfirst umask undef unlink unpack unshift utime values vec wait waitpid warn write say\",b=\"bless caller continue dbmclose dbmopen die do dump else elsif eval exit for foreach goto if import last local my next no our package redo ref require return sub tie tied unless untie until use wantarray while given when default try catch finally has extends with before after around override augment\";this.regexList=[{regex:/(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,css:\"string\"},{regex:/#.*$/gm,css:\"comments\"},{regex:/^#!.*\\n/g,css:\"preprocessor\"},{regex:/-?\\w+(?=\\s*=(>|&gt;))/g,css:\"string\"},{regex:/\\bq[qwxr]?\\([\\s\\S]*?\\)/g,css:\"string\"},{regex:/\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,css:\"string\"},{regex:/\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,css:\"string\"},{regex:/\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,css:\"string\"},{regex:/\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,css:\"variable\"},{regex:/\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,css:\"comments\"},{regex:/(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,css:\"comments\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"perl\",\"Perl\",\"pl\"],SyntaxHighlighter.brushes.Perl=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs acos acosh addcslashes addslashes array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill array_filter array_flip array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists closedir closelog copy cos cosh count count_chars date decbin dechex decoct deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime strtoupper strtr strval substr substr_compare\",b=\"abstract and array as break case catch cfunction class clone const continue declare default die do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements include include_once interface instanceof insteadof namespace new old_function or private protected public return require require_once static switch trait throw try use var while xor \",c=\"__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"php\"],SyntaxHighlighter.brushes.Php=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"text\",\"plain\"],SyntaxHighlighter.brushes.Plain=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"while validateset validaterange validatepattern validatelength validatecount until trap switch return ref process param parameter in if global: function foreach for finally filter end elseif else dynamicparam do default continue cmdletbinding break begin alias \\\\? % #script #private #local #global mandatory parametersetname position valuefrompipeline valuefrompipelinebypropertyname valuefromremainingarguments helpmessage \",b=\" and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle clike clt cmatch cne cnotcontains cnotlike cnotmatch contains creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt imatch ine inotcontains inotlike inotmatch ireplace is isnot le like lt match ne not notcontains notlike notmatch or regex replace wildcard\",c=\"write where wait use update unregister undo trace test tee take suspend stop start split sort skip show set send select scroll resume restore restart resolve resize reset rename remove register receive read push pop ping out new move measure limit join invoke import group get format foreach export expand exit enter enable disconnect disable debug cxnew copy convertto convertfrom convert connect complete compare clear checkpoint aggregate add\",d=\" component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis\";this.regexList=[{regex:new RegExp(\"^\\\\s*#[#\\\\s]*\\\\.(\"+this.getKeywords(d)+\").*$\",\"gim\"),css:\"preprocessor help bold\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,css:\"comments here\"},{regex:new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@',\"gm\"),css:\"script string here\"},{regex:new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\",\"gm\"),css:\"script string single here\"},{regex:new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"',\"g\"),css:\"string\"},{regex:new RegExp(\"'(?:[^']|'')*'\",\"g\"),css:\"string single\"},{regex:new RegExp(\"[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+\",\"gi\"),css:\"variable\"},{regex:new RegExp(\"(?:\\\\b\"+c.replace(/ /g,\"\\\\b|\\\\b\")+\")-[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"},{regex:new RegExp(\"-\"+this.getKeywords(b),\"gmi\"),css:\"operator value\"},{regex:new RegExp(\"\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]\",\"gi\"),css:\"constants\"},{regex:new RegExp(\"\\\\s+-(?!\"+this.getKeywords(b)+\")[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"powershell\",\"ps\",\"posh\"],SyntaxHighlighter.brushes.PowerShell=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try yield while\",b=\"__import__ abs all any apply basestring bin bool buffer callable chr classmethod cmp coerce compile complex delattr dict dir divmod enumerate eval execfile file filter float format frozenset getattr globals hasattr hash help hex id input int intern isinstance issubclass iter len list locals long map max min next object oct open ord pow print property range raw_input reduce reload repr reversed round set setattr slice sorted staticmethod str sum super tuple type type unichr unicode vars xrange zip\",c=\"None True False self cls class_\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/^\\s*@\\w+/gm,css:\"decorator\"},{regex:/(['\\\"]{3})([^\\1])*?\\1/gm,css:\"comments\"},{regex:/\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm,css:\"string\"},{regex:/'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm,css:\"string\"},{regex:/\\+|\\-|\\*|\\/|\\%|=|==/gm,css:\"keyword\"},{regex:/\\b\\d+\\.?\\w*/g,css:\"value\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"py\",\"python\"],SyntaxHighlighter.brushes.Python=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"alias and BEGIN begin break case class def define_method defined do each else elsif END end ensure false for if in module new next nil not or raise redo rescue retry return self super then throw true undef unless until when while yield\",b=\"Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ThreadGroup Thread Time TrueClass\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b[A-Z0-9_]+\\b/g,css:\"constants\"},{regex:/:[a-z][A-Za-z0-9_]*/g,css:\"color2\"},{regex:/(\\$|@@|@)\\w+/g,css:\"variable bold\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),\na.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"ruby\",\"rails\",\"ror\",\"rb\"],SyntaxHighlighter.brushes.Ruby=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\",f=\"!important !default\",g=\"@import @extend @debug @warn @if @for @while @mixin @include\",h=SyntaxHighlighter.regexLib;this.regexList=[{regex:h.multiLineCComments,css:\"comments\"},{regex:h.singleLineCComments,css:\"comments\"},{regex:h.doubleQuotedString,css:\"string\"},{regex:h.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,css:\"value\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(f),\"g\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(g),\"g\"),css:\"preprocessor\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sass\",\"scss\"],SyntaxHighlighter.brushes.Sass=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"val sealed case def true trait implicit forSome import match object null finally super override try lazy for var catch throw type extends class while with new final yield abstract else do if return protected private this package false\",b=\"[_:=><%#@]+\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(b,\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"scala\"],SyntaxHighlighter.brushes.Scala=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs avg case cast coalesce convert count current_timestamp current_user day isnull left lower month nullif replace right session_user space substring sum system_user upper user year\",b=\"absolute action add after alter as asc at authorization begin bigint binary bit by cascade char character check checkpoint close collate column commit committed connect connection constraint contains continue create cube current current_date current_time cursor database date deallocate dec decimal declare default delete desc distinct double drop dynamic else end end-exec escape except exec execute false fetch first float for force foreign forward free from full function global goto grant group grouping having hour ignore index inner insensitive insert instead int integer intersect into is isolation key last level load local max min minute modify move name national nchar next no numeric of off on only open option order out output partial password precision prepare primary prior privileges procedure public read real references relative repeatable restrict return returns revoke rollback rollup rows rule schema scroll second section select sequence serializable set size smallint static statistics table temp temporary then time timestamp to top transaction translation trigger true truncate uncommitted union unique update values varchar varying view when where with work\",c=\"all and any between cross in join like not null or outer some\";this.regexList=[{regex:/--(.*)$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"color2\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sql\"],SyntaxHighlighter.brushes.Sql=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date Decimal Declare Default Delegate Dim DirectCast Do Double Each Else ElseIf End Enum Erase Error Event Exit False Finally For Friend Function Get GetType GoSub GoTo Handles If Implements Imports In Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing NotInheritable NotOverridable Object On Option Optional Or OrElse Overloads Overridable Overrides ParamArray Preserve Private Property Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume Return Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until Variant When While With WithEvents WriteOnly Xor\";this.regexList=[{regex:/'.*$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/^\\s*#.*$/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"vb\",\"vbnet\"],SyntaxHighlighter.brushes.Vb=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=SyntaxHighlighter.Match,d=a[0],e=new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)\",\"xg\").exec(d),f=[];if(null!=a.attributes)for(var g,h=new XRegExp(\"(?<name> [\\\\w:\\\\-\\\\.]+)\\\\s*=\\\\s*(?<value> \\\".*?\\\"|'.*?'|\\\\w+)\",\"xg\");null!=(g=h.exec(d));)f.push(new c(g.name,a.index+g.index,\"color1\")),f.push(new c(g.value,a.index+g.index+g[0].indexOf(g.value),\"string\"));return null!=e&&f.push(new c(e.name,a.index+e[0].indexOf(e.name),\"keyword\")),f}this.regexList=[{regex:new XRegExp(\"(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)\",\"gm\"),css:\"color2\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)\",\"sg\"),func:a}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"xml\",\"xhtml\",\"xslt\",\"html\"],SyntaxHighlighter.brushes.Xml=a,\"undefined\"!=typeof exports?exports.Brush=a:null}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:400!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:700!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:0!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:#000!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:#000!important}.syntaxhighlighter caption{color:#000!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:0!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:0!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:700!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:700!important}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/clipboard/clipboard.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,b.Clipboard=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\"Cannot find module '\"+g+\"'\");throw j.code=\"MODULE_NOT_FOUND\",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a,b){for(;a&&a!==document;){if(a.matches(b))return a;a=a.parentNode}}if(Element&&!Element.prototype.matches){var e=Element.prototype;e.matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}b.exports=d},{}],2:[function(a,b,c){function d(a,b,c,d,f){var g=e.apply(this,arguments);return a.addEventListener(c,g,f),{destroy:function(){a.removeEventListener(c,g,f)}}}function e(a,b,c,d){return function(c){c.delegateTarget=f(c.target,b),c.delegateTarget&&d.call(a,c)}}var f=a(\"./closest\");b.exports=d},{\"./closest\":1}],3:[function(a,b,c){c.node=function(a){return void 0!==a&&a instanceof HTMLElement&&1===a.nodeType},c.nodeList=function(a){var b=Object.prototype.toString.call(a);return void 0!==a&&(\"[object NodeList]\"===b||\"[object HTMLCollection]\"===b)&&\"length\"in a&&(0===a.length||c.node(a[0]))},c.string=function(a){return\"string\"==typeof a||a instanceof String},c.fn=function(a){var b=Object.prototype.toString.call(a);return\"[object Function]\"===b}},{}],4:[function(a,b,c){function d(a,b,c){if(!a&&!b&&!c)throw new Error(\"Missing required arguments\");if(!h.string(b))throw new TypeError(\"Second argument must be a String\");if(!h.fn(c))throw new TypeError(\"Third argument must be a Function\");if(h.node(a))return e(a,b,c);if(h.nodeList(a))return f(a,b,c);if(h.string(a))return g(a,b,c);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}function e(a,b,c){return a.addEventListener(b,c),{destroy:function(){a.removeEventListener(b,c)}}}function f(a,b,c){return Array.prototype.forEach.call(a,function(a){a.addEventListener(b,c)}),{destroy:function(){Array.prototype.forEach.call(a,function(a){a.removeEventListener(b,c)})}}}function g(a,b,c){return i(document.body,a,b,c)}var h=a(\"./is\"),i=a(\"delegate\");b.exports=d},{\"./is\":3,delegate:2}],5:[function(a,b,c){function d(a){var b;if(\"SELECT\"===a.nodeName)a.focus(),b=a.value;else if(\"INPUT\"===a.nodeName||\"TEXTAREA\"===a.nodeName)a.focus(),a.setSelectionRange(0,a.value.length),b=a.value;else{a.hasAttribute(\"contenteditable\")&&a.focus();var c=window.getSelection(),d=document.createRange();d.selectNodeContents(a),c.removeAllRanges(),c.addRange(d),b=c.toString()}return b}b.exports=d},{}],6:[function(a,b,c){function d(){}d.prototype={on:function(a,b,c){var d=this.e||(this.e={});return(d[a]||(d[a]=[])).push({fn:b,ctx:c}),this},once:function(a,b,c){function d(){e.off(a,d),b.apply(c,arguments)}var e=this;return d._=b,this.on(a,d,c)},emit:function(a){var b=[].slice.call(arguments,1),c=((this.e||(this.e={}))[a]||[]).slice(),d=0,e=c.length;for(d;d<e;d++)c[d].fn.apply(c[d].ctx,b);return this},off:function(a,b){var c=this.e||(this.e={}),d=c[a],e=[];if(d&&b)for(var f=0,g=d.length;f<g;f++)d[f].fn!==b&&d[f].fn._!==b&&e.push(d[f]);return e.length?c[a]=e:delete c[a],this}},b.exports=d},{}],7:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"select\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"select\"));else{var g={exports:{}};f(g,e.select),e.clipboardAction=g.exports}}(this,function(a,b){\"use strict\";function c(a){return a&&a.__esModule?a:{\"default\":a}}function d(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}var e=c(b),f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},g=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),h=function(){function a(b){d(this,a),this.resolveOptions(b),this.initSelection()}return g(a,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=a.action,this.emitter=a.emitter,this.target=a.target,this.text=a.text,this.trigger=a.trigger,this.selectedText=\"\"}},{key:\"initSelection\",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:\"selectFake\",value:function(){var a=this,b=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return a.removeFake()},this.fakeHandler=document.body.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[b?\"right\":\"left\"]=\"-9999px\";var c=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener(\"focus\",window.scrollTo(0,c)),this.fakeElem.style.top=c+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,e[\"default\"])(this.fakeElem),this.copyText()}},{key:\"removeFake\",value:function(){this.fakeHandler&&(document.body.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:\"selectTarget\",value:function(){this.selectedText=(0,e[\"default\"])(this.target),this.copyText()}},{key:\"copyText\",value:function(){var a=void 0;try{a=document.execCommand(this.action)}catch(b){a=!1}this.handleResult(a)}},{key:\"handleResult\",value:function(a){this.emitter.emit(a?\"success\":\"error\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:\"clearSelection\",value:function(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:\"destroy\",value:function(){this.removeFake()}},{key:\"action\",set:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"copy\";if(this._action=a,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function(){return this._action}},{key:\"target\",set:function(a){if(void 0!==a){if(!a||\"object\"!==(\"undefined\"==typeof a?\"undefined\":f(a))||1!==a.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&a.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(a.hasAttribute(\"readonly\")||a.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=a}},get:function(){return this._target}}]),a}();a.exports=h})},{select:5}],8:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"./clipboard-action\",\"tiny-emitter\",\"good-listener\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"./clipboard-action\"),b(\"tiny-emitter\"),b(\"good-listener\"));else{var g={exports:{}};f(g,e.clipboardAction,e.tinyEmitter,e.goodListener),e.clipboard=g.exports}}(this,function(a,b,c,d){\"use strict\";function e(a){return a&&a.__esModule?a:{\"default\":a}}function f(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}function g(a,b){if(!a)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!b||\"object\"!=typeof b&&\"function\"!=typeof b?a:b}function h(a,b){if(\"function\"!=typeof b&&null!==b)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){var c=\"data-clipboard-\"+a;if(b.hasAttribute(c))return b.getAttribute(c)}var j=e(b),k=e(c),l=e(d),m=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),n=function(a){function b(a,c){f(this,b);var d=g(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return d.resolveOptions(c),d.listenClick(a),d}return h(b,a),m(b,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=\"function\"==typeof a.action?a.action:this.defaultAction,this.target=\"function\"==typeof a.target?a.target:this.defaultTarget,this.text=\"function\"==typeof a.text?a.text:this.defaultText}},{key:\"listenClick\",value:function(a){var b=this;this.listener=(0,l[\"default\"])(a,\"click\",function(a){return b.onClick(a)})}},{key:\"onClick\",value:function(a){var b=a.delegateTarget||a.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new j[\"default\"]({action:this.action(b),target:this.target(b),text:this.text(b),trigger:b,emitter:this})}},{key:\"defaultAction\",value:function(a){return i(\"action\",a)}},{key:\"defaultTarget\",value:function(a){var b=i(\"target\",a);if(b)return document.querySelector(b)}},{key:\"defaultText\",value:function(a){return i(\"text\",a)}},{key:\"destroy\",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),b}(k[\"default\"]);a.exports=n})},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)});"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/codemirror/codemirror.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.CodeMirror{line-height:1.5;font-family:monospace}.CodeMirror-scroll{overflow:auto;height:300px;position:relative}.CodeMirror-gutter{position:absolute;left:0;top:0;z-index:10;background-color:#f7f7f7;border-right:1px solid #eee;min-width:2em;height:100%}.CodeMirror-gutter-text{color:#aaa;text-align:right;padding:.4em .2em .4em .4em;white-space:pre!important}.CodeMirror-lines{padding:.4em}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;border-radius:0;border-width:0;margin:0;padding:0;background:transparent;font-family:inherit;font-size:inherit;padding:0;margin:0;white-space:pre;word-wrap:normal}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;line-height:1.4}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror textarea{outline:0!important}.CodeMirror pre.CodeMirror-cursor{z-index:10;position:absolute;visibility:hidden;border-left:1px solid #000;margin-top:-2px}.CodeMirror-focused pre.CodeMirror-cursor{visibility:visible}span.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused span.CodeMirror-selected{background:#d2dcf8}.CodeMirror-searching{background:#ffa}.cm-s-default span.cm-keyword{color:#708}.cm-s-default span.cm-atom{color:#219}.cm-s-default span.cm-number{color:#164}.cm-s-default span.cm-def{color:#00f}.cm-s-default span.cm-variable{color:#000}.cm-s-default span.cm-variable-2{color:#05a}.cm-s-default span.cm-variable-3{color:#085}.cm-s-default span.cm-property{color:#000}.cm-s-default span.cm-operator{color:#000}.cm-s-default span.cm-comment{color:#a50}.cm-s-default span.cm-string{color:#a11}.cm-s-default span.cm-string-2{color:#f50}.cm-s-default span.cm-meta{color:#555}.cm-s-default span.cm-error{color:red}.cm-s-default span.cm-qualifier{color:#555}.cm-s-default span.cm-builtin{color:#30a}.cm-s-default span.cm-bracket{color:#cc7}.cm-s-default span.cm-tag{color:#170}.cm-s-default span.cm-attribute{color:#00c}.cm-s-default span.cm-header{color:#a0a}.cm-s-default span.cm-quote{color:#090}.cm-s-default span.cm-hr{color:#999}.cm-s-default span.cm-link{color:#00c}span.cm-header,span.cm-strong{font-weight:700}span.cm-em{font-style:italic}span.cm-emstrong{font-style:italic;font-weight:700}span.cm-link{text-decoration:underline}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/codemirror/codemirror.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar CodeMirror=function(){function a(f,j){function r(a){return a>=0&&a<Yb.size}function u(a){return m(Yb,a)}function A(a,b){hc=!0;for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function B(a){var b={line:0,ch:0};ga(b,{line:Yb.size-1,ch:u(Yb.size-1).text.length},X(a),b,b),bc=!0}function M(a){var b=[];return Yb.iter(0,Yb.size,function(a){b.push(a.text)}),b.join(\"\\n\")}function N(a){function b(a){var c=pb(a,!0);if(c&&!E(c,g)){Vb||ea(),g=c,Fa(d,c),bc=!1;var e=ya();(c.line>=e.to||c.line<e.from)&&(f=setTimeout(Ab(function(){b(a)}),150))}}Ea(a.shiftKey);for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Jb&&c!=Kb)return;for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Mb)return Bb.onGutterClick&&Bb.onGutterClick(vc,J(Mb.childNodes,c)+oc,a),t(a);var d=pb(a);switch(x(a)){case 3:return void(S&&!L&&qb(a));case 2:return void(d&&Ia(d.line,d.ch,!0))}if(!d)return void(w(a)==Ib&&t(a));Vb||ea();var e=+new Date;if(_b&&_b.time>e-400&&E(_b.pos,d))return t(a),setTimeout(ua,20),Qa(d.line);if($b&&$b.time>e-400&&E($b.pos,d))return _b={time:e,pos:d},t(a),Pa(d);$b={time:e,pos:d};var f,g=d;if(R&&!E(lc.from,lc.to)&&!F(d,lc.from)&&!F(lc.to,d)){U&&(Nb.draggable=!0);var h=y(Eb,\"mouseup\",Ab(function(b){U&&(Nb.draggable=!1),ac=!1,h(),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(t(b),Ia(d.line,d.ch,!0),ua())}),!0);return void(ac=!0)}t(a),Ia(d.line,d.ch,!0);var i=y(Eb,\"mousemove\",Ab(function(a){clearTimeout(f),t(a),b(a)}),!0),h=y(Eb,\"mouseup\",Ab(function(a){clearTimeout(f);var b=pb(a);b&&Fa(d,b),t(a),ua(),bc=!0,i(),h()}),!0)}function V(a){for(var b=w(a);b!=Fb;b=b.parentNode)if(b.parentNode==Mb)return t(a);var c=pb(a);c&&(_b={time:+new Date,pos:c},t(a),Pa(c))}function $(a){function b(a,b){var d=new FileReader;d.onload=function(){f[b]=d.result,++g==e&&(c=Ka(c),Ab(function(){var a=la(f.join(\"\"),c,c);Fa(c,a)})())},d.readAsText(a)}a.preventDefault();var c=pb(a,!0),d=a.dataTransfer.files;if(c&&!Bb.readOnly)if(d&&d.length&&window.FileReader&&window.File)for(var e=d.length,f=Array(e),g=0,h=0;h<e;++h)b(d[h],h);else try{var f=a.dataTransfer.getData(\"Text\");if(f){var i=la(f,c,c),j=lc.from,k=lc.to;Fa(c,i),ac&&la(\"\",j,k),ua()}}catch(a){}}function _(a){var b=pa();H(b),a.dataTransfer.setDragImage(W,0,0),a.dataTransfer.setData(\"Text\",b)}function aa(a){var d,e,f=Z[a.keyCode],g=Q[Bb.keyMap].auto;if(null==f||a.altGraphKey)return g&&(Bb.keyMap=g),null;if(a.altKey&&(f=\"Alt-\"+f),a.ctrlKey&&(f=\"Ctrl-\"+f),a.metaKey&&(f=\"Cmd-\"+f),a.shiftKey&&(d=b(\"Shift-\"+f,Bb.extraKeys,Bb.keyMap))?e=!0:d=b(f,Bb.extraKeys,Bb.keyMap),\"string\"==typeof d&&(d=P.propertyIsEnumerable(d)?P[d]:null),!g||!d&&c(a)||(Bb.keyMap=g),!d)return!1;if(e){var h=Zb;Zb=null,d(vc),Zb=h}else d(vc);return t(a),!0}function ba(a){Vb||ea();var b=a.keyCode;if(T&&27==b&&(a.returnValue=!1),Ea(16==b||a.shiftKey),!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a))){var c=aa(a);window.opera&&(wc=c?a.keyCode:null,!c&&(L?a.metaKey:a.ctrlKey)&&88==a.keyCode&&ma(\"\"))}}function ca(a){if(window.opera&&a.keyCode==wc)return wc=null,void t(a);if((!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a)))&&(!window.opera||a.which||!aa(a))){if(Bb.electricChars&&Tb.electricChars){var b=String.fromCharCode(null==a.charCode?a.keyCode:a.charCode);Tb.electricChars.indexOf(b)>-1&&setTimeout(Ab(function(){Sa(lc.to.line,\"smart\")}),75)}ra()}}function da(a){Bb.onKeyEvent&&Bb.onKeyEvent(vc,s(a))||16==a.keyCode&&(Zb=null)}function ea(){Bb.readOnly||(Vb||(Bb.onFocus&&Bb.onFocus(vc),Vb=!0,Fb.className.search(/\\bCodeMirror-focused\\b/)==-1&&(Fb.className+=\" CodeMirror-focused\"),gc||ta(!0)),qa(),rb())}function fa(){Vb&&(Bb.onBlur&&Bb.onBlur(vc),Vb=!1,Fb.className=Fb.className.replace(\" CodeMirror-focused\",\"\")),clearInterval(Sb),setTimeout(function(){Vb||(Zb=null)},150)}function ga(a,b,c,d,e){if(tc){var f=[];for(Yb.iter(a.line,b.line+1,function(a){f.push(a.text)}),tc.addChange(a.line,c.length,f);tc.done.length>Bb.undoDepth;)tc.done.shift()}ka(a,b,c,d,e)}function ha(a,b){var c=a.pop();if(c){var d=[],e=c.start+c.added;Yb.iter(c.start,e,function(a){d.push(a.text)}),b.push({start:c.start,added:c.old.length,old:d});var f=Ka({line:c.start+c.old.length-1,ch:I(d[d.length-1],c.old[c.old.length-1])});ka({line:c.start,ch:0},{line:e-1,ch:u(e-1).text.length},c.old,f,f),bc=!0}}function ia(){ha(tc.done,tc.undone)}function ja(){ha(tc.undone,tc.done)}function ka(a,b,c,d,e){function f(a){return a<=Math.min(b.line,b.line+s)?a:a+s}var g=!1,h=rc.length;Bb.lineWrapping||Yb.iter(a.line,b.line,function(a){if(a.text.length==h)return g=!0,!0}),(a.line!=b.line||c.length>1)&&(hc=!0);var j=b.line-a.line,k=u(a.line),l=u(b.line);if(0==a.ch&&0==b.ch&&\"\"==c[c.length-1]){var m=[],n=null;a.line?(n=u(a.line-1),n.fixMarkEnds(l)):l.fixMarkStarts();for(var o=0,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],n));j&&Yb.remove(a.line,j,ic),m.length&&Yb.insert(a.line,m)}else if(k==l)if(1==c.length)k.replace(a.ch,b.ch,c[0]);else{l=k.split(b.ch,c[c.length-1]),k.replace(a.ch,null,c[0]),k.fixMarkEnds(l);for(var m=[],o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));m.push(l),Yb.insert(a.line+1,m)}else if(1==c.length)k.replace(a.ch,null,c[0]),l.replace(null,b.ch,\"\"),k.append(l),Yb.remove(a.line+1,j,ic);else{var m=[];k.replace(a.ch,null,c[0]),l.replace(null,b.ch,c[c.length-1]),k.fixMarkEnds(l);for(var o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));j>1&&Yb.remove(a.line+1,j-1,ic),Yb.insert(a.line+1,m)}if(Bb.lineWrapping){var q=Ib.clientWidth/mb()-3;Yb.iter(a.line,a.line+c.length,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/q)||1;b!=a.height&&A(a,b)}})}else Yb.iter(a.line,o+c.length,function(a){var b=a.text;b.length>h&&(rc=b,h=b.length,kc=null,g=!1)}),g&&(h=0,rc=\"\",kc=null,Yb.iter(0,Yb.size,function(a){var b=a.text;b.length>h&&(h=b.length,rc=b)}));for(var r=[],s=c.length-j-1,o=0,t=Ub.length;o<t;++o){var v=Ub[o];v<a.line?r.push(v):v>b.line&&r.push(v+s)}var w=a.line+Math.min(c.length,500);vb(a.line,w),r.push(w),Ub=r,xb(100),dc.push({from:a.line,to:b.line+1,diff:s});var x={from:a,to:b,text:c};if(ec){for(var y=ec;y.next;y=y.next);y.next=x}else ec=x;Ga(d,e,f(lc.from.line),f(lc.to.line)),Jb.style.height=Yb.height*lb()+2*nb()+\"px\"}function la(a,b,c){function d(d){if(F(d,b))return d;if(!F(c,d))return e;var f=d.line+a.length-(c.line-b.line)-1,g=d.ch;return d.line==c.line&&(g+=a[a.length-1].length-(c.ch-(c.line==b.line?b.ch:0))),{line:f,ch:g}}b=Ka(b),c=c?Ka(c):b,a=X(a);var e;return na(a,b,c,function(a){return e=a,{from:d(lc.from),to:d(lc.to)}}),e}function ma(a,b){na(X(a),lc.from,lc.to,function(a){return\"end\"==b?{from:a,to:a}:\"start\"==b?{from:lc.from,to:lc.from}:{from:lc.from,to:a}})}function na(a,b,c,d){var e=1==a.length?a[0].length+b.ch:a[a.length-1].length,f=d({line:b.line+a.length-1,ch:e});ga(b,c,a,f.from,f.to)}function oa(a,b){var c=a.line,d=b.line;if(c==d)return u(c).text.slice(a.ch,b.ch);var e=[u(c).text.slice(a.ch)];return Yb.iter(c+1,d,function(a){e.push(a.text)}),e.push(u(d).text.slice(0,b.ch)),e.join(\"\\n\")}function pa(){return oa(lc.from,lc.to)}function qa(){xc||Wb.set(Bb.pollInterval,function(){yb(),sa(),Vb&&qa(),zb()})}function ra(){function a(){yb();var c=sa();c||b?(xc=!1,qa()):(b=!0,Wb.set(60,a)),zb()}var b=!1;xc=!0,Wb.set(20,a)}function sa(){if(gc||!Vb||Y(Hb))return!1;var a=Hb.value;if(a==yc)return!1;Zb=null;for(var b=0,c=Math.min(yc.length,a.length);b<c&&yc[b]==a[b];)++b;return b<yc.length?lc.from={line:lc.from.line,ch:lc.from.ch-(yc.length-b)}:mc&&E(lc.from,lc.to)&&(lc.to={line:lc.to.line,ch:Math.min(u(lc.to.line).text.length,lc.to.ch+(a.length-b))}),ma(a.slice(b),\"end\"),yc=a,!0}function ta(a){E(lc.from,lc.to)?a&&(yc=Hb.value=\"\"):(yc=\"\",Hb.value=pa(),Hb.select())}function ua(){Bb.readOnly||Hb.focus()}function va(){if(Pb.getBoundingClientRect){var a=Pb.getBoundingClientRect();if(!T||a.top!=a.bottom){var b=window.innerHeight||Math.max(document.body.offsetHeight,document.documentElement.offsetHeight);(a.top<0||a.bottom>b)&&Pb.scrollIntoView()}}}function wa(){var a=ib(lc.inverted?lc.from:lc.to),b=Bb.lineWrapping?Math.min(a.x,Nb.offsetWidth):a.x;return xa(b,a.y,b,a.yBot)}function xa(a,b,c,d){var e=ob(),f=nb(),g=lb();b+=f,d+=f,a+=e,c+=e;var h=Ib.clientHeight,i=Ib.scrollTop,j=!1,k=!0;b<i?(Ib.scrollTop=Math.max(0,b-2*g),j=!0):d>i+h&&(Ib.scrollTop=d+g-h,j=!0);var l=Ib.clientWidth,m=Ib.scrollLeft,n=Bb.fixedGutter?Lb.clientWidth:0;return a<m+n?(a<50&&(a=0),Ib.scrollLeft=Math.max(0,a-10-n),j=!0):c>l+m-3&&(Ib.scrollLeft=c+10-l,j=!0,c>Jb.clientWidth&&(k=!1)),j&&Bb.onScroll&&Bb.onScroll(vc),k}function ya(){var a=lb(),b=Ib.scrollTop-nb(),c=Math.max(0,Math.floor(b/a)),d=Math.ceil((b+Ib.clientHeight)/a);return{from:o(Yb,c),to:o(Yb,d)}}function za(a,b){if(!Ib.clientWidth)return void(oc=pc=nc=0);var c=ya();if(!(a!==!0&&0==a.length&&c.from>=oc&&c.to<=pc)){var d=Math.max(c.from-100,0),e=Math.min(Yb.size,c.to+100);oc<d&&d-oc<20&&(d=oc),pc>e&&pc-e<20&&(e=Math.min(Yb.size,pc));for(var f=a===!0?[]:Aa([{from:oc,to:pc,domStart:0}],a),g=0,h=0;h<f.length;++h){var i=f[h];i.from<d&&(i.domStart+=d-i.from,i.from=d),i.to>e&&(i.to=e),i.from>=i.to?f.splice(h--,1):g+=i.to-i.from}if(g!=e-d){f.sort(function(a,b){return a.domStart-b.domStart});var j=lb(),k=Lb.style.display;Qb.style.display=Lb.style.display=\"none\",Ba(d,e,f),Qb.style.display=\"\";var l=d!=oc||e!=pc||qc!=Ib.clientHeight+j;if(l&&(qc=Ib.clientHeight+j),oc=d,pc=e,nc=p(Yb,d),Kb.style.top=nc*j+\"px\",Jb.style.height=Yb.height*j+2*nb()+\"px\",Qb.childNodes.length!=pc-oc)throw new Error(\"BAD PATCH! \"+JSON.stringify(f)+\" size=\"+(pc-oc)+\" nodes=\"+Qb.childNodes.length);if(Bb.lineWrapping){kc=Ib.clientWidth;var m=Qb.firstChild;Yb.iter(oc,pc,function(a){if(!a.hidden){var b=Math.round(m.offsetHeight/j)||1;a.height!=b&&(A(a,b),hc=!0)}m=m.nextSibling})}else null==kc&&(kc=gb(rc)),kc>Ib.clientWidth?(Nb.style.width=kc+\"px\",Jb.style.width=\"\",Jb.style.width=Ib.scrollWidth+\"px\"):Nb.style.width=Jb.style.width=\"\";return Lb.style.display=k,(l||hc)&&Ca(),Da(),!b&&Bb.onUpdate&&Bb.onUpdate(vc),!0}}}function Aa(a,b){for(var c=0,d=b.length||0;c<d;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;h<i;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g,domStart:j.domStart}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from,domStart:j.domStart}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g,domStart:j.domStart+(e.to-j.from)}))}a=f}return a}function Ba(a,b,c){function d(a){var b=a.nextSibling;return a.parentNode.removeChild(a),b}if(c.length){for(var e=0,f=Qb.firstChild,g=0;g<c.length;++g){for(var h=c[g];h.domStart>e;)f=d(f),e++;for(var i=0,j=h.to-h.from;i<j;++i)f=f.nextSibling,e++}for(;f;)f=d(f)}else Qb.innerHTML=\"\";var k=c.shift(),f=Qb.firstChild,i=a,l=lc.from.line,m=lc.to.line,n=l<a&&m>=a,o=Eb.createElement(\"div\");Yb.iter(a,b,function(a){var b=null,d=null;n?(b=0,m==i&&(n=!1,d=lc.to.ch)):l==i&&(m==i?(b=lc.from.ch,d=lc.to.ch):(n=!0,b=lc.from.ch)),k&&k.to==i&&(k=c.shift()),!k||k.from>i?(a.hidden?o.innerHTML=\"<pre></pre>\":o.innerHTML=a.getHTML(b,d,!0,sc),Qb.insertBefore(o.firstChild,f)):f=f.nextSibling,++i})}function Ca(){if(Bb.gutter||Bb.lineNumbers){var a=Kb.offsetHeight,b=Ib.clientHeight;Lb.style.height=(a-b<2?b:a)+\"px\";var c=[],d=oc;Yb.iter(oc,Math.max(pc,oc+1),function(a){if(a.hidden)c.push(\"<pre></pre>\");else{var b=a.gutterMarker,e=Bb.lineNumbers?d+Bb.firstLineNumber:null;b&&b.text?e=b.text.replace(\"%N%\",null!=e?e:\"\"):null==e&&(e=\" \"),c.push(b&&b.style?'<pre class=\"'+b.style+'\">':\"<pre>\",e);for(var f=1;f<a.height;++f)c.push(\"<br/>&#160;\");c.push(\"</pre>\")}++d}),Lb.style.display=\"none\",Mb.innerHTML=c.join(\"\");for(var e=String(Yb.size).length,f=Mb.firstChild,g=D(f),h=\"\";g.length+h.length<e;)h+=\" \";h&&f.insertBefore(Eb.createTextNode(h),f.firstChild),Lb.style.display=\"\",Nb.style.marginLeft=Lb.offsetWidth+\"px\",hc=!1}}function Da(){var a=lc.inverted?lc.from:lc.to,b=(lb(),ib(a,!0)),c=C(Fb),d=C(Qb);Gb.style.top=b.y+d.top-c.top+\"px\",Gb.style.left=b.x+d.left-c.left+\"px\",E(lc.from,lc.to)?(Pb.style.top=b.y+\"px\",Pb.style.left=(Bb.lineWrapping?Math.min(b.x,Nb.offsetWidth):b.x)+\"px\",Pb.style.display=\"\"):Pb.style.display=\"none\"}function Ea(a){Zb=a?Zb||(lc.inverted?lc.to:lc.from):null}function Fa(a,b){var c=Zb&&Ka(Zb);c&&(F(c,a)?a=c:F(b,c)&&(b=c)),Ga(a,b),cc=!0}function Ga(a,b,c,d){if(zc=null,null==c&&(c=lc.from.line,d=lc.to.line),!E(lc.from,a)||!E(lc.to,b)){if(F(b,a)){var e=b;b=a,a=e}a.line!=c&&(a=Ha(a,c,lc.from.ch)),b.line!=d&&(b=Ha(b,d,lc.to.ch)),E(a,b)?lc.inverted=!1:E(a,lc.to)?lc.inverted=!1:E(b,lc.from)&&(lc.inverted=!0),E(a,b)?E(lc.from,lc.to)||dc.push({from:c,to:d+1}):E(lc.from,lc.to)?dc.push({from:a.line,to:b.line+1}):(E(a,lc.from)||(a.line<c?dc.push({from:a.line,to:Math.min(b.line,c)+1}):dc.push({from:c,to:Math.min(d,a.line)+1})),E(b,lc.to)||(b.line<d?dc.push({from:Math.max(c,a.line),to:d+1}):dc.push({from:Math.max(a.line,d),to:b.line+1}))),lc.from=a,lc.to=b,fc=!0}}function Ha(a,b,c){function d(b){for(var d=a.line+b,e=1==b?Yb.size:-1;d!=e;){var f=u(d);if(!f.hidden){var g=a.ch;return(g>c||g>f.text.length)&&(g=f.text.length),{line:d,ch:g}}d+=b}}var e=u(a.line);return e.hidden?a.line>=b?d(1)||d(-1):d(-1)||d(1):a}function Ia(a,b,c){var d=Ka({line:a,ch:b||0});(c?Fa:Ga)(d,d)}function Ja(a){return Math.max(0,Math.min(a,Yb.size-1))}function Ka(a){if(a.line<0)return{line:0,ch:0};if(a.line>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var b=a.ch,c=u(a.line).text.length;return null==b||b>c?{line:a.line,ch:c}:b<0?{line:a.line,ch:0}:a}function La(a,b){function c(){for(var b=f+a,c=a<0?-1:Yb.size;b!=c;b+=a){var d=u(b);if(!d.hidden)return f=b,h=d,!0}}function d(b){if(g==(a<0?0:h.text.length)){if(b||!c())return!1;g=a<0?h.text.length:0}else g+=a;return!0}var e=lc.inverted?lc.from:lc.to,f=e.line,g=e.ch,h=u(f);if(\"char\"==b)d();else if(\"column\"==b)d(!0);else if(\"word\"==b)for(var i=!1;!(a<0)||d();){if(K(h.text.charAt(g)))i=!0;else if(i){a<0&&(a=1,d());break}if(a>0&&!d())break}return{line:f,ch:g}}function Ma(a,b){var c=a<0?lc.from:lc.to;(Zb||E(lc.from,lc.to))&&(c=La(a,b)),Ia(c.line,c.ch,!0)}function Na(a,b){E(lc.from,lc.to)?a<0?la(\"\",La(a,b),lc.to):la(\"\",lc.from,La(a,b)):la(\"\",lc.from,lc.to),cc=!0}function Oa(a,b){var c=0,d=ib(lc.inverted?lc.from:lc.to,!0);null!=zc&&(d.x=zc),\"page\"==b?c=Ib.clientHeight:\"line\"==b&&(c=lb());var e=jb(d.x,d.y+c*a+2);Ia(e.line,e.ch,!0),zc=d.x}function Pa(a){for(var b=u(a.line).text,c=a.ch,d=a.ch;c>0&&K(b.charAt(c-1));)--c;for(;d<b.length&&K(b.charAt(d));)++d;Fa({line:a.line,ch:c},{line:a.line,ch:d})}function Qa(a){Fa({line:a,ch:0},{line:a,ch:u(a).text.length})}function Ra(a){if(E(lc.from,lc.to))return Sa(lc.from.line,a);for(var b=lc.to.line-(lc.to.ch?0:1),c=lc.from.line;c<=b;++c)Sa(c,a)}function Sa(a,b){if(b||(b=\"add\"),\"smart\"==b)if(Tb.indent)var c=ub(a);else b=\"prev\";var d,e=u(a),f=e.indentation(Bb.tabSize),g=e.text.match(/^\\s*/)[0];\"prev\"==b?d=a?u(a-1).indentation(Bb.tabSize):0:\"smart\"==b?d=Tb.indent(c,e.text.slice(g.length),e.text):\"add\"==b?d=f+Bb.indentUnit:\"subtract\"==b&&(d=f-Bb.indentUnit),d=Math.max(0,d);var h=d-f;if(h){var i=\"\",j=0;if(Bb.indentWithTabs)for(var k=Math.floor(d/Bb.tabSize);k;--k)j+=Bb.tabSize,i+=\"\\t\";for(;j<d;)++j,i+=\" \"}else{if(lc.from.line!=a&&lc.to.line!=a)return;var i=g}la(i,{line:a,ch:0},{line:a,ch:g.length})}function Ta(){Tb=a.getMode(Bb,Bb.mode),Yb.iter(0,Yb.size,function(a){a.stateAfter=null}),Ub=[0],xb()}function Ua(){var a=Bb.gutter||Bb.lineNumbers;Lb.style.display=a?\"\":\"none\",a?hc=!0:Qb.parentNode.style.marginLeft=0}function Va(a,b){if(Bb.lineWrapping){Fb.className+=\" CodeMirror-wrap\";var c=Ib.clientWidth/mb()-3;Yb.iter(0,Yb.size,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/c)||1;1!=b&&A(a,b)}}),Nb.style.width=Jb.style.width=\"\"}else Fb.className=Fb.className.replace(\" CodeMirror-wrap\",\"\"),kc=null,rc=\"\",Yb.iter(0,Yb.size,function(a){1==a.height||a.hidden||A(a,1),a.text.length>rc.length&&(rc=a.text)});dc.push({from:0,to:Yb.size})}function Wa(){for(var a='<span class=\"cm-tab\">',b=0;b<Bb.tabSize;++b)a+=\" \";return a+\"</span>\"}function Xa(){sc=Wa(),za(!0)}function Ya(){Ib.className=Ib.className.replace(/\\s*cm-s-\\w+/g,\"\")+Bb.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\")}function Za(){this.set=[]}function $a(a,b,c){function d(a,b,c,d){u(a).addMark(new g(b,c,d,e.set))}a=Ka(a),b=Ka(b);var e=new Za;if(a.line==b.line)d(a.line,a.ch,b.ch,c);else{d(a.line,a.ch,null,c);for(var f=a.line+1,h=b.line;f<h;++f)d(f,null,null,c);d(b.line,null,b.ch,c)}return dc.push({from:a.line,to:b.line+1}),e}function _a(a){a=Ka(a);var b=new h(a.ch);return u(a.line).addMark(b),b}function ab(a,b,c){return\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker={text:b,style:c},hc=!0,a}function bb(a){\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker=null,hc=!0}function cb(a,b){var c=a,d=a;return\"number\"==typeof a?d=u(Ja(a)):c=n(a),null==c?null:b(d,c)?(dc.push({from:c,to:c+1}),d):null}function db(a,b){return cb(a,function(a){if(a.className!=b)return a.className=b,!0})}function eb(a,b){return cb(a,function(a,c){if(a.hidden!=b)return a.hidden=b,A(a,b?0:1),!b||lc.from.line!=c&&lc.to.line!=c||Ga(Ha(lc.from,lc.from.line,lc.from.ch),Ha(lc.to,lc.to.line,lc.to.ch)),hc=!0})}function fb(a){if(\"number\"==typeof a){if(!r(a))return null;var b=a;if(a=u(a),!a)return null}else{var b=n(a);if(null==b)return null}var c=a.gutterMarker;return{line:b,handle:a,text:a.text,markerText:c&&c.text,markerClass:c&&c.style,lineClass:a.className}}function gb(a){return Ob.innerHTML=\"<pre><span>x</span></pre>\",Ob.firstChild.firstChild.firstChild.nodeValue=a,Ob.firstChild.firstChild.offsetWidth||10}function hb(a,b){var c=\"\";if(Bb.lineWrapping){var d=a.text.indexOf(\" \",b+2);c=H(a.text.slice(b+1,d<0?a.text.length:d+(T?5:0)))}Ob.innerHTML=\"<pre>\"+a.getHTML(null,null,!1,sc,b)+'<span id=\"CodeMirror-temp-'+Ec+'\">'+H(a.text.charAt(b)||\" \")+\"</span>\"+c+\"</pre>\";var e=document.getElementById(\"CodeMirror-temp-\"+Ec),f=e.offsetTop,g=e.offsetLeft;if(T&&b&&0==f&&0==g){var h=document.createElement(\"span\");h.innerHTML=\"x\",e.parentNode.insertBefore(h,e.nextSibling),f=h.offsetTop}return{top:f,left:g}}function ib(a,b){var c,d=lb(),e=d*(p(Yb,a.line)-(b?nc:0));if(0==a.ch)c=0;else{var f=hb(u(a.line),a.ch);c=f.left,Bb.lineWrapping&&(e+=Math.max(0,f.top))}return{x:c,y:e,yBot:e+d}}function jb(a,b){function c(a){var b=hb(h,a);if(j){var c=Math.round(b.top/d);return Math.max(0,b.left+(c-k)*Ib.clientWidth)}return b.left}b<0&&(b=0);var d=lb(),e=mb(),f=nc+Math.floor(b/d),g=o(Yb,f);if(g>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var h=u(g),i=h.text,j=Bb.lineWrapping,k=j?f-p(Yb,g):0;if(a<=0&&0==k)return{line:g,ch:0};for(var l,m=0,n=0,q=i.length,r=Math.min(q,Math.ceil((a+k*Ib.clientWidth*.9)/e));;){var s=c(r);if(!(s<=a&&r<q)){l=s,q=r;break}r=Math.min(q,Math.ceil(1.2*r))}if(a>l)return{line:g,ch:q};for(r=Math.floor(.8*q),s=c(r),s<a&&(m=r,n=s);;){if(q-m<=1)return{line:g,ch:l-a>a-n?m:q};var t=Math.ceil((m+q)/2),v=c(t);v>a?(q=t,l=v):(m=t,n=v)}}function kb(a){var b=ib(a,!0),c=C(Nb);return{x:c.left+b.x,y:c.top+b.y,yBot:c.top+b.yBot}}function lb(){if(null==Cc){Cc=\"<pre>\";for(var a=0;a<49;++a)Cc+=\"x<br/>\";Cc+=\"x</pre>\"}var b=Qb.clientHeight;return b==Bc?Ac:(Bc=b,Ob.innerHTML=Cc,Ac=Ob.firstChild.offsetHeight/50||1,Ob.innerHTML=\"\",Ac)}function mb(){return Ib.clientWidth==Fc?Dc:(Fc=Ib.clientWidth,Dc=gb(\"x\"))}function nb(){return Nb.offsetTop}function ob(){return Nb.offsetLeft}function pb(a,b){var c,d,e=C(Ib,!0);try{c=a.clientX,d=a.clientY}catch(a){return null}if(!b&&(c-e.left>Ib.clientWidth||d-e.top>Ib.clientHeight))return null;var f=C(Nb,!0);return jb(c-f.left,d-f.top)}function qb(a){function b(){var a=X(Hb.value).join(\"\\n\");a!=e&&Ab(ma)(a,\"end\"),Gb.style.position=\"relative\",Hb.style.cssText=d,gc=!1,ta(!0),qa()}var c=pb(a);if(c&&!window.opera){(E(lc.from,lc.to)||F(c,lc.from)||!F(c,lc.to))&&Ab(Ia)(c.line,c.ch);var d=Hb.style.cssText;Gb.style.position=\"absolute\",Hb.style.cssText=\"position: fixed; width: 30px; height: 30px; top: \"+(a.clientY-5)+\"px; left: \"+(a.clientX-5)+\"px; z-index: 1000; background: white; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",gc=!0;var e=Hb.value=pa();if(ua(),Hb.select(),S){v(a);var f=y(window,\"mouseup\",function(){f(),setTimeout(b,20)},!0)}else setTimeout(b,50)}}function rb(){clearInterval(Sb);var a=!0;Pb.style.visibility=\"\",Sb=setInterval(function(){Pb.style.visibility=(a=!a)?\"\":\"hidden\"},650)}function sb(a){function b(a,b,c){if(a.text)for(var d,e=a.styles,f=g?0:a.text.length-1,i=g?0:e.length-2,j=g?e.length:-2;i!=j;i+=2*h){var k=e[i];if(null==e[i+1]||e[i+1]==m){for(var l=g?0:k.length-1,p=g?k.length:-1;l!=p;l+=h,f+=h)if(f>=b&&f<c&&o.test(d=k.charAt(l))){var q=Gc[d];if(\">\"==q.charAt(1)==g)n.push(d);else{if(n.pop()!=q.charAt(0))return{pos:f,match:!1};if(!n.length)return{pos:f,match:!0}}}}else f+=h*k.length}}var c=lc.inverted?lc.from:lc.to,d=u(c.line),e=c.ch-1,f=e>=0&&Gc[d.text.charAt(e)]||Gc[d.text.charAt(++e)];if(f){for(var g=(f.charAt(0),\">\"==f.charAt(1)),h=g?1:-1,i=d.styles,j=e+1,k=0,l=i.length;k<l;k+=2)if((j-=i[k].length)<=0){var m=i[k+1];break}for(var n=[d.text.charAt(e)],o=/[(){}[\\]]/,k=c.line,l=g?Math.min(k+100,Yb.size):Math.max(-1,k-100);k!=l;k+=h){var d=u(k),p=k==c.line,q=b(d,p&&g?e+1:0,p&&!g?e:d.text.length);if(q)break}q||(q={pos:null,match:!1});var m=q.match?\"CodeMirror-matchingbracket\":\"CodeMirror-nonmatchingbracket\",r=$a({line:c.line,ch:e},{line:c.line,ch:e+1},m),s=null!=q.pos&&$a({line:k,ch:q.pos},{line:k,ch:q.pos+1},m),t=Ab(function(){r.clear(),s&&s.clear()});a?setTimeout(t,800):jc=t}}function tb(a){for(var b,c,d=a,e=a-40;d>e;--d){if(0==d)return 0;var f=u(d-1);if(f.stateAfter)return d;var g=f.indentation(Bb.tabSize);(null==c||b>g)&&(c=d-1,b=g)}return c}function ub(a){var b=tb(a),c=b&&u(b-1).stateAfter;return c=c?d(Tb,c):e(Tb),Yb.iter(b,a,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)}),b<a&&dc.push({from:b,to:a}),a<Yb.size&&!u(a).stateAfter&&Ub.push(a),c}function vb(a,b){var c=ub(a);Yb.iter(a,b,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)})}function wb(){for(var a=+new Date+Bb.workTime,b=Ub.length;Ub.length;){if(u(oc).stateAfter)var c=Ub.pop();else var c=oc;if(!(c>=Yb.size)){var f=tb(c),g=f&&u(f-1).stateAfter;g=g?d(Tb,g):e(Tb);var h=0,i=Tb.compareStates,j=!1,k=f,l=!1;if(Yb.iter(k,Yb.size,function(b){var e=b.stateAfter;if(+new Date>a)return Ub.push(k),xb(Bb.workDelay),j&&dc.push({from:c,to:k+1}),l=!0;var f=b.highlight(Tb,g,Bb.tabSize);if(f&&(j=!0),b.stateAfter=d(Tb,g),i){if(e&&i(e,g))return!0}else if(f===!1&&e){if(++h>3&&(!Tb.indent||Tb.indent(e,\"\")==Tb.indent(g,\"\")))return!0}else h=0;++k}),l)return;j&&dc.push({from:c,to:k+1})}}b&&Bb.onHighlightComplete&&Bb.onHighlightComplete(vc)}function xb(a){Ub.length&&Xb.set(a,Ab(wb))}function yb(){bc=cc=ec=null,dc=[],fc=!1,ic=[]}function zb(){var a,b=!1;fc&&(b=!wa()),dc.length?a=za(dc,!0):(fc&&Da(),hc&&Ca()),b&&wa(),fc&&(va(),rb()),Vb&&!gc&&(bc===!0||bc!==!1&&fc)&&ta(cc),fc&&Bb.matchBrackets&&setTimeout(Ab(function(){jc&&(jc(),jc=null),E(lc.from,lc.to)&&sb(!1)}),20);var c=ec,d=ic;fc&&Bb.onCursorActivity&&Bb.onCursorActivity(vc),c&&Bb.onChange&&vc&&Bb.onChange(vc,c);for(var e=0;e<d.length;++e)d[e](vc);a&&Bb.onUpdate&&Bb.onUpdate(vc)}function Ab(a){return function(){Hc++||yb();try{var b=a.apply(this,arguments)}finally{--Hc||zb()}return b}}var Bb={},Cb=a.defaults;for(var Db in Cb)Cb.hasOwnProperty(Db)&&(Bb[Db]=(j&&j.hasOwnProperty(Db)?j:Cb)[Db]);var Eb=Bb.document,Fb=Eb.createElement(\"div\");Fb.className=\"CodeMirror\"+(Bb.lineWrapping?\" CodeMirror-wrap\":\"\"),Fb.innerHTML='<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\"><textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" autocorrect=\"off\" autocapitalize=\"off\"></textarea></div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div style=\"position: relative\"><div style=\"position: relative\"><div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div><div class=\"CodeMirror-lines\"><div style=\"position: relative\"><div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div><pre class=\"CodeMirror-cursor\">&#160;</pre><div></div></div></div></div></div></div>',f.appendChild?f.appendChild(Fb):f(Fb);var Gb=Fb.firstChild,Hb=Gb.firstChild,Ib=Fb.lastChild,Jb=Ib.firstChild,Kb=Jb.firstChild,Lb=Kb.firstChild,Mb=Lb.firstChild,Nb=Lb.nextSibling.firstChild,Ob=Nb.firstChild,Pb=Ob.nextSibling,Qb=Pb.nextSibling;Ya(),/AppleWebKit/.test(navigator.userAgent)&&/Mobile\\/\\w+/.test(navigator.userAgent)&&(Hb.style.width=\"0px\"),U||(Nb.draggable=!0),null!=Bb.tabindex&&(Hb.tabIndex=Bb.tabindex),Bb.gutter||Bb.lineNumbers||(Lb.style.display=\"none\");try{gb(\"x\")}catch(Rb){throw Rb.message.match(/runtime/i)&&(Rb=new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\")),Rb}var Sb,Tb,Ub,Vb,Wb=new z,Xb=new z,Yb=new l([new k([new i(\"\")])]);Ta();var Zb,$b,_b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc,kc,lc={from:{line:0,ch:0},to:{line:0,ch:0},inverted:!1},mc=!1,nc=0,oc=0,pc=0,qc=0,rc=\"\",sc=Wa();Ab(function(){B(Bb.value||\"\"),bc=!1})();var tc=new q;y(Ib,\"mousedown\",Ab(N)),y(Ib,\"dblclick\",Ab(V)),y(Nb,\"dragstart\",_),y(Nb,\"selectstart\",t),S||y(Ib,\"contextmenu\",qb),y(Ib,\"scroll\",function(){za([]),Bb.fixedGutter&&(Lb.style.left=Ib.scrollLeft+\"px\"),Bb.onScroll&&Bb.onScroll(vc)}),y(window,\"resize\",function(){za(!0)}),y(Hb,\"keyup\",Ab(da)),y(Hb,\"input\",ra),y(Hb,\"keydown\",Ab(ba)),y(Hb,\"keypress\",Ab(ca)),y(Hb,\"focus\",ea),y(Hb,\"blur\",fa),y(Ib,\"dragenter\",v),y(Ib,\"dragover\",v),y(Ib,\"drop\",Ab($)),y(Ib,\"paste\",function(){ua(),ra()}),y(Hb,\"paste\",ra),y(Hb,\"cut\",Ab(function(){ma(\"\")}));var uc;try{uc=Eb.activeElement==Hb}catch(Rb){}uc?setTimeout(ea,20):fa();var vc=Fb.CodeMirror={getValue:M,setValue:Ab(B),getSelection:pa,replaceSelection:Ab(ma),focus:function(){ua(),ea(),ra()},setOption:function(a,b){var c=Bb[a];Bb[a]=b,\"mode\"==a||\"indentUnit\"==a?Ta():\"readOnly\"==a&&b?(fa(),Hb.blur()):\"theme\"==a?Ya():\"lineWrapping\"==a&&c!=b?Ab(Va)():\"tabSize\"==a&&Ab(Xa)(),\"lineNumbers\"!=a&&\"gutter\"!=a&&\"firstLineNumber\"!=a&&\"theme\"!=a||Ab(Ua)()},getOption:function(a){return Bb[a]},undo:Ab(ia),redo:Ab(ja),indentLine:Ab(function(a,b){r(a)&&Sa(a,null==b?\"smart\":b?\"add\":\"subtract\")}),indentSelection:Ab(Ra),historySize:function(){return{undo:tc.done.length,redo:tc.undone.length}},clearHistory:function(){tc=new q},matchBrackets:Ab(function(){sb(!0)}),getTokenAt:Ab(function(a){return a=Ka(a),u(a.line).getTokenAt(Tb,ub(a.line),a.ch)}),getStateAfter:function(a){return a=Ja(null==a?Yb.size-1:a),ub(a+1)},cursorCoords:function(a){return null==a&&(a=lc.inverted),kb(a?lc.from:lc.to)},charCoords:function(a){return kb(Ka(a))},coordsChar:function(a){var b=C(Nb);return jb(a.x-b.left,a.y-b.top)},markText:Ab($a),setBookmark:_a,setMarker:Ab(ab),clearMarker:Ab(bb),setLineClass:Ab(db),hideLine:Ab(function(a){return eb(a,!0)}),showLine:Ab(function(a){return eb(a,!1)}),onDeleteLine:function(a,b){if(\"number\"==typeof a){if(!r(a))return null;a=u(a)}return(a.handlers||(a.handlers=[])).push(b),a},lineInfo:fb,addWidget:function(a,b,c,d,e){a=ib(Ka(a));var f=a.yBot,g=a.x;if(b.style.position=\"absolute\",Jb.appendChild(b),\"over\"==d)f=a.y;else if(\"near\"==d){var h=Math.max(Ib.offsetHeight,Yb.height*lb()),i=Math.max(Jb.clientWidth,Nb.clientWidth)-ob();a.yBot+b.offsetHeight>h&&a.y>b.offsetHeight&&(f=a.y-b.offsetHeight),g+b.offsetWidth>i&&(g=i-b.offsetWidth)}b.style.top=f+nb()+\"px\",b.style.left=b.style.right=\"\",\"right\"==e?(g=Jb.clientWidth-b.offsetWidth,b.style.right=\"0px\"):(\"left\"==e?g=0:\"middle\"==e&&(g=(Jb.clientWidth-b.offsetWidth)/2),b.style.left=g+ob()+\"px\"),c&&xa(g,f,g+b.offsetWidth,f+b.offsetHeight)},lineCount:function(){return Yb.size},clipPos:Ka,getCursor:function(a){return null==a&&(a=lc.inverted),G(a?lc.from:lc.to)},somethingSelected:function(){return!E(lc.from,lc.to)},setCursor:Ab(function(a,b,c){null==b&&\"number\"==typeof a.line?Ia(a.line,a.ch,c):Ia(a,b,c)}),setSelection:Ab(function(a,b,c){(c?Fa:Ga)(Ka(a),Ka(b||a))}),getLine:function(a){if(r(a))return u(a).text},getLineHandle:function(a){if(r(a))return u(a)},setLine:Ab(function(a,b){r(a)&&la(b,{line:a,ch:0},{line:a,ch:u(a).text.length})}),removeLine:Ab(function(a){r(a)&&la(\"\",{line:a,ch:0},Ka({line:a+1,ch:0}))}),replaceRange:Ab(la),getRange:function(a,b){return oa(Ka(a),Ka(b))},execCommand:function(a){return P[a](vc)},moveH:Ab(Ma),deleteH:Ab(Na),moveV:Ab(Oa),toggleOverwrite:function(){mc=!mc},posFromIndex:function(a){var b,c=0;return Yb.iter(0,Yb.size,function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,void++c)}),Ka({line:c,ch:b})},indexFromPos:function(a){if(a.line<0||a.ch<0)return 0;var b=a.ch;return Yb.iter(0,a.line,function(a){b+=a.text.length+1}),b},operation:function(a){return Ab(a)()},refresh:function(){za(!0)},getInputField:function(){return Hb},getWrapperElement:function(){return Fb},getScrollerElement:function(){return Ib},getGutterElement:function(){return Lb}},wc=null,xc=!1,yc=\"\",zc=null;Za.prototype.clear=Ab(function(){for(var a=1/0,b=-(1/0),c=0,d=this.set.length;c<d;++c){var e=this.set[c],f=e.marked;if(f&&e.parent){var g=n(e);a=Math.min(a,g),b=Math.max(b,g);for(var h=0;h<f.length;++h)f[h].set==this.set&&f.splice(h--,1)}}a!=1/0&&dc.push({from:a,to:b+1})}),Za.prototype.find=function(){for(var a,b,c=0,d=this.set.length;c<d;++c)for(var e=this.set[c],f=e.marked,g=0;g<f.length;++g){var h=f[g];if(h.set==this.set&&(null!=h.from||null!=h.to)){var i=n(e);null!=i&&(null!=h.from&&(a={line:i,ch:h.from}),null!=h.to&&(b={line:i,ch:h.to}))}}return{from:a,to:b}};var Ac,Bc,Cc,Dc,Ec=Math.floor(16777215*Math.random()).toString(16),Fc=0,Gc={\"(\":\")>\",\")\":\"(<\",\"[\":\"]>\",\"]\":\"[<\",\"{\":\"}>\",\"}\":\"{<\"},Hc=0;for(var Ic in O)O.propertyIsEnumerable(Ic)&&!vc.propertyIsEnumerable(Ic)&&(vc[Ic]=O[Ic]);return vc}function b(a,b,c){function d(a,b,c){var e=b[a];if(null!=e)return e;if(null==c&&(c=b.fallthrough),null==c)return b.catchall;if(\"string\"==typeof c)return d(a,Q[c]);for(var f=0,g=c.length;f<g;++f)if(e=d(a,Q[c[f]]),null!=e)return e;return null}return b?d(a,b,c):d(a,Q[c])}function c(a){var b=Z[a.keyCode];return\"Ctrl\"==b||\"Alt\"==b||\"Shift\"==b||\"Mod\"==b}function d(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function e(a,b,c){return!a.startState||a.startState(b,c)}function f(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8}function g(a,b,c,d){this.from=a,this.to=b,this.style=c,this.set=d}function h(a){this.from=a,this.to=a,this.line=null}function i(a,b){this.styles=b||[a,null],this.text=a,this.height=1,this.marked=this.gutterMarker=this.className=this.handlers=null,this.stateAfter=this.parent=this.hidden=null}function j(a,b,c,d){for(var e=0,f=0,g=0;f<b;e+=2){var h=c[e],i=f+h.length;0==g?(i>a&&d.push(h.slice(a-f,Math.min(h.length,b-f)),c[e+1]),i>=a&&(g=1)):1==g&&(i>b?d.push(h.slice(0,b-f),c[e+1]):d.push(h,c[e+1])),f=i}}function k(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;b<c;++b)a[b].parent=this,d+=a[b].height;this.height=d}function l(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;d<e;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function m(a,b){for(;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(b<e){a=d;break}b-=e}return a.lines[b]}function n(a){if(null==a.parent)return null;for(var b=a.parent,c=J(b.lines,a),d=b.parent;d;b=d,d=d.parent){var e=0;for(d.children.length;d.children[e]!=b;++e)c+=d.children[e].chunkSize()}return c}function o(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.height;if(b<g){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;d<e;++d){var h=a.lines[d],i=h.height;if(b<i)break;b-=i}return c+d}function p(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.chunkSize();if(b<g){a=f;continue a}b-=g,c+=f.height}return c}while(!a.lines);for(var d=0;d<b;++d)c+=a.lines[d].height;return c}function q(){this.time=0,this.done=[],this.undone=[]}function r(){v(this)}function s(a){return a.stop||(a.stop=r),a}function t(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function u(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function v(a){t(a),u(a)}function w(a){return a.target||a.srcElement}function x(a){return a.which?a.which:1&a.button?1:2&a.button?3:4&a.button?2:void 0}function y(a,b,c,d){\nif(\"function\"==typeof a.addEventListener){if(a.addEventListener(b,c,!1),d)return function(){a.removeEventListener(b,c,!1)}}else{var e=function(a){c(a||window.event)};if(a.attachEvent(\"on\"+b,e),d)return function(){a.detachEvent(\"on\"+b,e)}}}function z(){this.id=null}function A(a,b,c){null==b&&(b=a.search(/[^\\s\\u00a0]/),b==-1&&(b=a.length));for(var d=0,e=0;d<b;++d)\"\\t\"==a.charAt(d)?e+=c-e%c:++e;return e}function B(a){return a.currentStyle?a.currentStyle:window.getComputedStyle(a,null)}function C(a,b){for(var c=a.ownerDocument.body,d=0,e=0,f=!1,g=a;g;g=g.offsetParent){var h=g.offsetLeft,i=g.offsetTop;g==c?(d+=Math.abs(h),e+=Math.abs(i)):(d+=h,e+=i),b&&\"fixed\"==B(g).position&&(f=!0)}for(var j=b&&!f?null:c,g=a.parentNode;g!=j;g=g.parentNode)null!=g.scrollLeft&&(d-=g.scrollLeft,e-=g.scrollTop);return{left:d,top:e}}function D(a){return a.textContent||a.innerText||a.nodeValue||\"\"}function E(a,b){return a.line==b.line&&a.ch==b.ch}function F(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function G(a){return{line:a.line,ch:a.ch}}function H(a){return W.textContent=a,W.innerHTML}function I(a,b){if(!b)return a?a.length:0;if(!a)return b.length;for(var c=a.length,d=b.length;c>=0&&d>=0&&a.charAt(c)==b.charAt(d);--c,--d);return d+1}function J(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;++c)if(a[c]==b)return c;return-1}function K(a){return/\\w/.test(a)||a.toUpperCase()!=a.toLowerCase()}a.defaults={value:\"\",mode:null,theme:\"default\",indentUnit:2,indentWithTabs:!1,tabSize:4,keyMap:\"default\",extraKeys:null,electricChars:!0,onKeyEvent:null,lineWrapping:!1,lineNumbers:!1,gutter:!1,fixedGutter:!1,firstLineNumber:1,readOnly:!1,onChange:null,onCursorActivity:null,onGutterClick:null,onHighlightComplete:null,onUpdate:null,onFocus:null,onBlur:null,onScroll:null,matchBrackets:!1,workTime:100,workDelay:200,pollInterval:100,undoDepth:40,tabindex:null,document:window.document};var L=/Mac/.test(navigator.platform),M=(/Win/.test(navigator.platform),{}),N={};a.defineMode=function(b,c){a.defaults.mode||\"null\"==b||(a.defaults.mode=b),M[b]=c},a.defineMIME=function(a,b){N[a]=b},a.getMode=function(b,c){if(\"string\"==typeof c&&N.hasOwnProperty(c)&&(c=N[c]),\"string\"==typeof c)var d=c,e={};else if(null!=c)var d=c.name,e=c;var f=M[d];return f?f(b,e||{}):(window.console&&console.warn(\"No mode \"+d+\" found, falling back to plain text.\"),a.getMode(b,\"text/plain\"))},a.listModes=function(){var a=[];for(var b in M)M.propertyIsEnumerable(b)&&a.push(b);return a},a.listMIMEs=function(){var a=[];for(var b in N)N.propertyIsEnumerable(b)&&a.push({mime:b,mode:N[b]});return a};var O=a.extensions={};a.defineExtension=function(a,b){O[a]=b};var P=a.commands={selectAll:function(a){a.setSelection({line:0,ch:0},{line:a.lineCount()-1})},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!E(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange(\"\",b,d?c:{line:b.line}):a.replaceRange(\"\",b,{line:b.line+1,ch:0})},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange(\"\",{line:b,ch:0},{line:b})},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.setCursor(0,0,!0)},goDocEnd:function(a){a.setSelection({line:a.lineCount()-1},null,!0)},goLineStart:function(a){a.setCursor(a.getCursor().line,0,!0)},goLineStartSmart:function(a){var b=a.getCursor(),c=a.getLine(b.line),d=Math.max(0,c.search(/\\S/));a.setCursor(b.line,b.ch<=d&&b.ch?0:d,!0)},goLineEnd:function(a){a.setSelection({line:a.getCursor().line},null,!0)},goLineUp:function(a){a.moveV(-1,\"line\")},goLineDown:function(a){a.moveV(1,\"line\")},goPageUp:function(a){a.moveV(-1,\"page\")},goPageDown:function(a){a.moveV(1,\"page\")},goCharLeft:function(a){a.moveH(-1,\"char\")},goCharRight:function(a){a.moveH(1,\"char\")},goColumnLeft:function(a){a.moveH(-1,\"column\")},goColumnRight:function(a){a.moveH(1,\"column\")},goWordLeft:function(a){a.moveH(-1,\"word\")},goWordRight:function(a){a.moveH(1,\"word\")},delCharLeft:function(a){a.deleteH(-1,\"char\")},delCharRight:function(a){a.deleteH(1,\"char\")},delWordLeft:function(a){a.deleteH(-1,\"word\")},delWordRight:function(a){a.deleteH(1,\"word\")},indentAuto:function(a){a.indentSelection(\"smart\")},indentMore:function(a){a.indentSelection(\"add\")},indentLess:function(a){a.indentSelection(\"subtract\")},insertTab:function(a){a.replaceSelection(\"\\t\",\"end\")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),{line:b.line,ch:b.ch-1},{line:b.line,ch:b.ch+1})},newlineAndIndent:function(a){a.replaceSelection(\"\\n\",\"end\"),a.indentLine(a.getCursor().line)},toggleOverwrite:function(a){a.toggleOverwrite()}},Q=a.keyMap={};Q.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharRight\",Backspace:\"delCharLeft\",Tab:\"indentMore\",\"Shift-Tab\":\"indentLess\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\"},Q.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Alt-Up\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Down\":\"goDocEnd\",\"Ctrl-Left\":\"goWordLeft\",\"Ctrl-Right\":\"goWordRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delWordLeft\",\"Ctrl-Delete\":\"delWordRight\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",fallthrough:\"basic\"},Q.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goWordLeft\",\"Alt-Right\":\"goWordRight\",\"Cmd-Left\":\"goLineStart\",\"Cmd-Right\":\"goLineEnd\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-Alt-Backspace\":\"delWordRight\",\"Alt-Delete\":\"delWordRight\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",fallthrough:[\"basic\",\"emacsy\"]},Q[\"default\"]=L?Q.macDefault:Q.pcDefault,Q.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageUp\",\"Shift-Ctrl-V\":\"goPageDown\",\"Ctrl-D\":\"delCharRight\",\"Ctrl-H\":\"delCharLeft\",\"Alt-D\":\"delWordRight\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\"},a.fromTextArea=function(b,c){function d(){b.value=h.getValue()}function e(){d(),b.form.submit=g,b.form.submit(),b.form.submit=e}if(c||(c={}),c.value=b.value,!c.tabindex&&b.tabindex&&(c.tabindex=b.tabindex),b.form){var f=y(b.form,\"submit\",d,!0);if(\"function\"==typeof b.form.submit){var g=b.form.submit;b.form.submit=e}}b.style.display=\"none\";var h=a(function(a){b.parentNode.insertBefore(a,b.nextSibling)},c);return h.save=d,h.getTextArea=function(){return b},h.toTextArea=function(){d(),b.parentNode.removeChild(h.getWrapperElement()),b.style.display=\"\",b.form&&(f(),\"function\"==typeof b.form.submit&&(b.form.submit=g))},h},a.copyState=d,a.startState=e,f.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if(\"string\"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));if(c)return++this.pos,b},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return A(this.string,this.start,this.tabSize)},indentation:function(){return A(this.string,null,this.tabSize)},match:function(a,b,c){function d(a){return c?a.toLowerCase():a}if(\"string\"!=typeof a){var e=this.string.slice(this.pos).match(a);return e&&b!==!1&&(this.pos+=e[0].length),e}if(d(this.string).indexOf(d(a),this.pos)==this.pos)return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},a.StringStream=f,g.prototype={attach:function(a){this.set.push(a)},detach:function(a){var b=J(this.set,a);b>-1&&this.set.splice(b,1)},split:function(a,b){if(this.to<=a&&null!=this.to)return null;var c=this.from<a||null==this.from?null:this.from-a+b,d=null==this.to?null:this.to-a+b;return new g(c,d,this.style,this.set)},dup:function(){return new g(null,null,this.style,this.set)},clipTo:function(a,b,c,d,e){null!=this.from&&this.from>=b&&(this.from=Math.max(d,this.from)+e),null!=this.to&&this.to>b&&(this.to=d<this.to?this.to+e:b),a&&d>this.from&&(d<this.to||null==this.to)&&(this.from=null),c&&(b<this.to||null==this.to)&&(b>this.from||null==this.from)&&(this.to=null)},isDead:function(){return null!=this.from&&null!=this.to&&this.from>=this.to},sameSet:function(a){return this.set==a.set}},h.prototype={attach:function(a){this.line=a},detach:function(a){this.line==a&&(this.line=null)},split:function(a,b){if(a<this.from)return this.from=this.to=this.from-a+b,this},isDead:function(){return this.from>this.to},clipTo:function(a,b,c,d,e){(a||b<this.from)&&(c||d>this.to)?(this.from=0,this.to=-1):this.from>b&&(this.from=this.to=Math.max(d,this.from)+e)},sameSet:function(a){return!1},find:function(){return this.line&&this.line.parent?{line:n(this.line),ch:this.from}:null},clear:function(){if(this.line){var a=J(this.line.marked,this);a!=-1&&this.line.marked.splice(a,1),this.line=null}}},i.inheritMarks=function(a,b){var c=new i(a),d=b&&b.marked;if(d)for(var e=0;e<d.length;++e)if(null==d[e].to&&d[e].style){var f=c.marked||(c.marked=[]),g=d[e],h=g.dup();f.push(h),h.attach(c)}return c},i.prototype={replace:function(a,b,c){var d=[],e=this.marked,f=null==b?this.text.length:b;if(j(0,a,this.styles,d),c&&d.push(c,null),j(f,this.text.length,this.styles,d),this.styles=d,this.text=this.text.slice(0,a)+c+this.text.slice(f),this.stateAfter=null,e)for(var g=c.length-(f-a),h=0,i=e[h];h<e.length;++h)i.clipTo(null==a,a||0,null==b,f,g),i.isDead()&&(i.detach(this),e.splice(h--,1))},split:function(a,b){var c=[b,null],d=this.marked;j(a,this.text.length,this.styles,c);var e=new i(b+this.text.slice(a),c);if(d)for(var f=0;f<d.length;++f){var g=d[f],h=g.split(a,b.length);h&&(e.marked||(e.marked=[]),e.marked.push(h),h.attach(e))}return e},append:function(a){var b=this.text.length,c=a.marked,d=this.marked;if(this.text+=a.text,j(0,a.text.length,a.styles,this.styles),d)for(var e=0;e<d.length;++e)null==d[e].to&&(d[e].to=b);if(c&&c.length){d||(this.marked=d=[]);a:for(var e=0;e<c.length;++e){var f=c[e];if(!f.from)for(var g=0;g<d.length;++g){var h=d[g];if(h.to==b&&h.sameSet(f)){h.to=null==f.to?null:f.to+b,h.isDead()&&(h.detach(this),c.splice(e--,1));continue a}}d.push(f),f.attach(this),f.from+=b,null!=f.to&&(f.to+=b)}}},fixMarkEnds:function(a){var b=this.marked,c=a.marked;if(b)for(var d=0;d<b.length;++d){var e=b[d],f=null==e.to;if(f&&c)for(var g=0;g<c.length;++g)if(c[g].sameSet(e)){f=!1;break}f&&(e.to=this.text.length)}},fixMarkStarts:function(){var a=this.marked;if(a)for(var b=0;b<a.length;++b)null==a[b].from&&(a[b].from=0)},addMark:function(a){a.attach(this),null==this.marked&&(this.marked=[]),this.marked.push(a),this.marked.sort(function(a,b){return(a.from||0)-(b.from||0)})},highlight:function(a,b,c){var d,e=new f(this.text,c),g=this.styles,h=0,i=!1,j=g[0];for(\"\"==this.text&&a.blankLine&&a.blankLine(b);!e.eol();){var k=a.token(e,b),l=this.text.slice(e.start,e.pos);if(e.start=e.pos,h&&g[h-1]==k?g[h-2]+=l:l&&(!i&&(g[h+1]!=k||h&&g[h-2]!=d)&&(i=!0),g[h++]=l,g[h++]=k,d=j,j=g[h]),e.pos>5e3){g[h++]=this.text.slice(e.pos),g[h++]=null;break}}return g.length!=h&&(g.length=h,i=!0),h&&g[h-2]!=d&&(i=!0),i||g.length<5&&this.text.length<10&&null},getTokenAt:function(a,b,c){for(var d=this.text,e=new f(d);e.pos<c&&!e.eol();){e.start=e.pos;var g=a.token(e,b)}return{start:e.start,end:e.pos,string:e.current(),className:g||null,state:b}},indentation:function(a){return A(this.text,null,a)},getHTML:function(a,b,c,d,e){function f(a,b){a&&(i&&T&&\" \"==a.charAt(0)&&(a=\" \"+a.slice(1)),i=!1,b?h.push('<span class=\"',b,'\">',H(a).replace(/\\t/g,d),\"</span>\"):h.push(H(a).replace(/\\t/g,d)))}function g(){l&&(r+=1,s=r<l.length?l[r]:null)}var h=[],i=!0;c&&h.push(this.className?'<pre class=\"'+this.className+'\">':\"<pre>\");var j=this.styles,k=this.text,l=this.marked;a==b&&(a=null);var m=k.length;if(null!=e&&(m=Math.min(e,m)),k||null!=e)if(l||null!=a){var n,o=0,p=0,q=\"\",r=-1,s=null;for(g();o<m;){var t=m,u=\"\";for(null!=a&&(a>o?t=a:(null==b||b>o)&&(u=\" CodeMirror-selected\",null!=b&&(t=Math.min(t,b))));s&&null!=s.to&&s.to<=o;)g();for(s&&(s.from>o?t=Math.min(t,s.from):(u+=\" \"+s.style,null!=s.to&&(t=Math.min(t,s.to))));;){var v=o+q.length,w=n;if(u&&(w=n?n+u:u),f(v>t?q.slice(0,t-o):q,w),v>=t){q=q.slice(t-o),o=t;break}o=v,q=j[p++],n=\"cm-\"+j[p++]}}null!=a&&null==b&&f(\" \",\"CodeMirror-selected\")}else for(var p=0,x=0;x<m;p+=2){var y=j[p],n=j[p+1],z=y.length;x+z>m&&(y=y.slice(0,m-x)),x+=z,f(y,n&&\"cm-\"+n)}else f(\" \",null!=a&&null==b?\"CodeMirror-selected\":null);return c&&h.push(\"</pre>\"),h.join(\"\")},cleanUp:function(){if(this.parent=null,this.marked)for(var a=0,b=this.marked.length;a<b;++a)this.marked[a].detach(this)}},k.prototype={chunkSize:function(){return this.lines.length},remove:function(a,b,c){for(var d=a,e=a+b;d<e;++d){var f=this.lines[d];if(this.height-=f.height,f.cleanUp(),f.handlers)for(var g=0;g<f.handlers.length;++g)c.push(f.handlers[g])}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertHeight:function(a,b,c){this.height+=c,this.lines.splice.apply(this.lines,[a,0].concat(b));for(var d=0,e=b.length;d<e;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;a<d;++a)if(c(this.lines[a]))return!0}},l.prototype={chunkSize:function(){return this.size},remove:function(a,b,c){this.size-=b;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<f){var g=Math.min(b,f-a),h=e.height;if(e.remove(a,g,c),this.height-=h-e.height,f==g&&(this.children.splice(d--,1),e.parent=null),0==(b-=g))break;a=0}else a-=f}if(this.size-b<25){var i=[];this.collapse(i),this.children=[new k(i)]}},collapse:function(a){for(var b=0,c=this.children.length;b<c;++b)this.children[b].collapse(a)},insert:function(a,b){for(var c=0,d=0,e=b.length;d<e;++d)c+=b[d].height;this.insertHeight(a,b,c)},insertHeight:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<=g){if(f.insertHeight(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new k(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new l(b);if(a.parent){a.size-=c.size,a.height-=c.height;var d=J(a.parent.children,a);a.parent.children.splice(d+1,0,c)}else{var e=new l(a.children);e.parent=a,a.children=[e,c],a=e}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iter:function(a,b,c){this.iterN(a,b-a,c)},iterN:function(a,b,c){for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<g){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}},q.prototype={addChange:function(a,b,c){this.undone.length=0;var d=+new Date,e=this.done[this.done.length-1];if(d-this.time>400||!e||e.start>a+b||e.start+e.added<a-e.added+e.old.length)this.done.push({start:a,added:b,old:c});else{var f=0;if(a<e.start){for(var g=e.start-a-1;g>=0;--g)e.old.unshift(c[g]);e.added+=e.start-a,e.start=a}else e.start<a&&(f=a-e.start,b+=f);for(var g=e.added-f,h=c.length;g<h;++g)e.old.push(c[g]);e.added<b&&(e.added=b)}this.time=d}},a.e_stop=v,a.e_preventDefault=t,a.e_stopPropagation=u,a.connect=y,z.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}};var R=function(){if(/MSIE [1-8]\\b/.test(navigator.userAgent))return!1;var a=document.createElement(\"div\");return\"draggable\"in a}(),S=/gecko\\/\\d{7}/i.test(navigator.userAgent),T=/MSIE \\d/.test(navigator.userAgent),U=/WebKit\\//.test(navigator.userAgent),V=\"\\n\";!function(){var a=document.createElement(\"textarea\");a.value=\"foo\\nbar\",a.value.indexOf(\"\\r\")>-1&&(V=\"\\r\\n\")}(),null!=document.documentElement.getBoundingClientRect&&(C=function(a,b){try{var c=a.getBoundingClientRect();c={top:c.top,left:c.left}}catch(d){c={top:0,left:0}}if(!b)if(null==window.pageYOffset){var e=document.documentElement||document.body.parentNode;null==e.scrollTop&&(e=document.body),c.top+=e.scrollTop,c.left+=e.scrollLeft}else c.top+=window.pageYOffset,c.left+=window.pageXOffset;return c});var W=document.createElement(\"pre\");\"\\na\"==H(\"a\")?H=function(a){return W.textContent=a,W.innerHTML.slice(1)}:\"\\t\"!=H(\"\\t\")&&(H=function(a){return W.innerHTML=\"\",W.appendChild(document.createTextNode(a)),W.innerHTML}),a.htmlEscape=H;var X=3!=\"\\n\\nb\".split(/\\n/).length?function(a){for(var b,c=0,d=[];(b=a.indexOf(\"\\n\",c))>-1;)d.push(a.slice(c,\"\\r\"==a.charAt(b-1)?b-1:b)),c=b+1;return d.push(a.slice(c)),d}:function(a){return a.split(/\\r?\\n/)};a.splitLines=X;var Y=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return!(!b||b.parentElement()!=a)&&0!=b.compareEndPoints(\"StartToEnd\",b)};a.defineMode(\"null\",function(){return{token:function(a){a.skipToEnd()}}}),a.defineMIME(\"text/plain\",\"null\");var Z={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",91:\"Mod\",92:\"Mod\",93:\"Mod\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63276:\"PageUp\",63277:\"PageDown\",63275:\"End\",63273:\"Home\",63234:\"Left\",63232:\"Up\",63235:\"Right\",63233:\"Down\",63302:\"Insert\",63272:\"Delete\"};return a.keyNames=Z,function(){for(var a=0;a<10;a++)Z[a+48]=String(a);for(var a=65;a<=90;a++)Z[a]=String.fromCharCode(a);for(var a=1;a<=12;a++)Z[a+111]=Z[a+63235]=\"F\"+a}(),a}();CodeMirror.defineMode(\"xml\",function(a,b){function c(a,b){function c(c){return b.tokenize=c,c(a,b)}var e=a.next();if(\"<\"==e){if(a.eat(\"!\"))return a.eat(\"[\")?a.match(\"CDATA[\")?c(f(\"atom\",\"]]>\")):null:a.match(\"--\")?c(f(\"comment\",\"-->\")):a.match(\"DOCTYPE\",!0,!0)?(a.eatWhile(/[\\w\\._\\-]/),c(g(1))):null;if(a.eat(\"?\"))return a.eatWhile(/[\\w\\._\\-]/),b.tokenize=f(\"meta\",\"?>\"),\"meta\";s=a.eat(\"/\")?\"closeTag\":\"openTag\",a.eatSpace(),r=\"\";for(var h;h=a.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);)r+=h;return b.tokenize=d,\"tag\"}return\"&\"==e?(a.eatWhile(/[^;]/),a.eat(\";\"),\"atom\"):(a.eatWhile(/[^&<]/),null)}function d(a,b){var d=a.next();return\">\"==d||\"/\"==d&&a.eat(\">\")?(b.tokenize=c,s=\">\"==d?\"endTag\":\"selfcloseTag\",\"tag\"):\"=\"==d?(s=\"equals\",null):/[\\'\\\"]/.test(d)?(b.tokenize=e(d),b.tokenize(a,b)):(a.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/),\"word\")}function e(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=d;break}return\"string\"}}function f(a,b){return function(d,e){for(;!d.eol();){if(d.match(b)){e.tokenize=c;break}d.next()}return a}}function g(a){return function(b,d){for(var e;null!=(e=b.next());){if(\"<\"==e)return d.tokenize=g(a+1),d.tokenize(b,d);if(\">\"==e){if(1==a){d.tokenize=c;break}return d.tokenize=g(a-1),d.tokenize(b,d)}}return\"meta\"}}function h(){for(var a=arguments.length-1;a>=0;a--)t.cc.push(arguments[a])}function i(){return h.apply(null,arguments),!0}function j(a,b){var c=w.doNotIndent.hasOwnProperty(a)||t.context&&t.context.noIndent;t.context={prev:t.context,tagName:a,indent:t.indented,startOfLine:b,noIndent:c}}function k(){t.context&&(t.context=t.context.prev)}function l(a){if(\"openTag\"==a)return t.tagName=r,i(o,m(t.startOfLine));if(\"closeTag\"==a){var b=!1;return b=!t.context||t.context.tagName!=r,b&&(u=\"error\"),i(n(b))}return i()}function m(a){return function(b){return\"selfcloseTag\"==b||\"endTag\"==b&&w.autoSelfClosers.hasOwnProperty(t.tagName.toLowerCase())?i():\"endTag\"==b?(j(t.tagName,a),i()):i()}}function n(a){return function(b){return a&&(u=\"error\"),\"endTag\"==b?(k(),i()):(u=\"error\",i(arguments.callee))}}function o(a){return\"word\"==a?(u=\"attribute\",i(o)):\"equals\"==a?i(p,o):\"string\"==a?(u=\"error\",i(o)):h()}function p(a){return\"word\"==a&&w.allowUnquoted?(u=\"string\",i()):\"string\"==a?i(q):h()}function q(a){return\"string\"==a?i(q):h()}var r,s,t,u,v=a.indentUnit,w=b.htmlMode?{autoSelfClosers:{br:!0,img:!0,hr:!0,link:!0,input:!0,meta:!0,col:!0,frame:!0,base:!0,area:!0},doNotIndent:{pre:!0},allowUnquoted:!0}:{autoSelfClosers:{},doNotIndent:{},allowUnquoted:!1},x=b.alignCDATA;return{startState:function(){return{tokenize:c,cc:[],indented:0,startOfLine:!0,tagName:null,context:null}},token:function(a,b){if(a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;u=s=r=null;var c=b.tokenize(a,b);if(b.type=s,(c||s)&&\"comment\"!=c)for(t=b;;){var d=b.cc.pop()||l;if(d(s||c))break}return b.startOfLine=!1,u||c},indent:function(a,b,e){var f=a.context;if(a.tokenize!=d&&a.tokenize!=c||f&&f.noIndent)return e?e.match(/^(\\s*)/)[0].length:0;if(x&&/<!\\[CDATA\\[/.test(b))return 0;for(f&&/^<\\//.test(b)&&(f=f.prev);f&&!f.startOfLine;)f=f.prev;return f?f.indent+v:0},compareStates:function(a,b){if(a.indented!=b.indented||a.tokenize!=b.tokenize)return!1;for(var c=a.context,d=b.context;;c=c.prev,d=d.prev){if(!c||!d)return c==d;if(c.tagName!=d.tagName)return!1}},electricChars:\"/\"}}),CodeMirror.defineMIME(\"application/xml\",\"xml\"),CodeMirror.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0}),CodeMirror.defineMode(\"javascript\",function(a,b){function c(a,b,c){return b.tokenize=c,c(a,b)}function d(a,b){for(var c,d=!1;null!=(c=a.next());){if(c==b&&!d)return!1;d=!d&&\"\\\\\"==c}return d}function e(a,b,c){return K=a,L=c,b}function f(a,b){var f=a.next();if('\"'==f||\"'\"==f)return c(a,b,g(f));if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(f))return e(f);if(\"0\"==f&&a.eat(/x/i))return a.eatWhile(/[\\da-f]/i),e(\"number\",\"number\");if(/\\d/.test(f))return a.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),e(\"number\",\"number\");if(\"/\"==f)return a.eat(\"*\")?c(a,b,h):a.eat(\"/\")?(a.skipToEnd(),e(\"comment\",\"comment\")):b.reAllowed?(d(a,\"/\"),a.eatWhile(/[gimy]/),e(\"regexp\",\"string\")):(a.eatWhile(P),e(\"operator\",null,a.current()));if(\"#\"==f)return a.skipToEnd(),e(\"error\",\"error\");if(P.test(f))return a.eatWhile(P),e(\"operator\",null,a.current());a.eatWhile(/[\\w\\$_]/);var i=a.current(),j=O.propertyIsEnumerable(i)&&O[i];return j&&b.kwAllowed?e(j.type,j.style,i):e(\"variable\",\"variable\",i)}function g(a){return function(b,c){return d(b,a)||(c.tokenize=f),e(\"string\",\"string\")}}function h(a,b){for(var c,d=!1;c=a.next();){if(\"/\"==c&&d){b.tokenize=f;break}d=\"*\"==c}return e(\"comment\",\"comment\")}function i(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function j(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function k(a,b,c,d,e){var f=a.cc;for(R.state=a,R.stream=e,R.marked=null,R.cc=f,a.lexical.hasOwnProperty(\"align\")||(a.lexical.align=!0);;){var g=f.length?f.pop():N?u:t;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return R.marked?R.marked:\"variable\"==c&&j(a,d)?\"variable-2\":b}}}function l(){for(var a=arguments.length-1;a>=0;a--)R.cc.push(arguments[a])}function m(){return l.apply(null,arguments),!0}function n(a){var b=R.state;if(b.context){R.marked=\"def\";for(var c=b.localVars;c;c=c.next)if(c.name==a)return;b.localVars={name:a,next:b.localVars}}}function o(){R.state.context||(R.state.localVars=S),R.state.context={prev:R.state.context,vars:R.state.localVars}}function p(){R.state.localVars=R.state.context.vars,R.state.context=R.state.context.prev}function q(a,b){var c=function(){var c=R.state;c.lexical=new i(c.indented,R.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function r(){var a=R.state;a.lexical.prev&&(\")\"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function s(a){return function(b){return b==a?m():\";\"==a?l():m(arguments.callee)}}function t(a){return\"var\"==a?m(q(\"vardef\"),C,s(\";\"),r):\"keyword a\"==a?m(q(\"form\"),u,t,r):\"keyword b\"==a?m(q(\"form\"),t,r):\"{\"==a?m(q(\"}\"),B,r):\";\"==a?m():\"function\"==a?m(I):\"for\"==a?m(q(\"form\"),s(\"(\"),q(\")\"),E,s(\")\"),r,t,r):\"variable\"==a?m(q(\"stat\"),x):\"switch\"==a?m(q(\"form\"),u,q(\"}\",\"switch\"),s(\"{\"),B,r,r):\"case\"==a?m(u,s(\":\")):\"default\"==a?m(s(\":\")):\"catch\"==a?m(q(\"form\"),o,s(\"(\"),J,s(\")\"),t,r,p):l(q(\"stat\"),u,s(\";\"),r)}function u(a){return Q.hasOwnProperty(a)?m(w):\"function\"==a?m(I):\"keyword c\"==a?m(v):\"(\"==a?m(q(\")\"),u,s(\")\"),r,w):\"operator\"==a?m(u):\"[\"==a?m(q(\"]\"),A(u,\"]\"),r,w):\"{\"==a?m(q(\"}\"),A(z,\"}\"),r,w):m()}function v(a){return a.match(/[;\\}\\)\\],]/)?l():l(u)}function w(a,b){if(\"operator\"==a&&/\\+\\+|--/.test(b))return m(w);if(\"operator\"==a)return m(u);if(\";\"!=a)return\"(\"==a?m(q(\")\"),A(u,\")\"),r,w):\".\"==a?m(y,w):\"[\"==a?m(q(\"]\"),u,s(\"]\"),r,w):void 0}function x(a){return\":\"==a?m(r,t):l(w,s(\";\"),r)}function y(a){if(\"variable\"==a)return R.marked=\"property\",m()}function z(a){if(\"variable\"==a&&(R.marked=\"property\"),Q.hasOwnProperty(a))return m(s(\":\"),u)}function A(a,b){function c(d){return\",\"==d?m(a,c):d==b?m():m(s(b))}return function(d){return d==b?m():l(a,c)}}function B(a){return\"}\"==a?m():l(t,B)}function C(a,b){return\"variable\"==a?(n(b),m(D)):m()}function D(a,b){return\"=\"==b?m(u,D):\",\"==a?m(C):void 0}function E(a){return\"var\"==a?m(C,G):\";\"==a?l(G):\"variable\"==a?m(F):l(G)}function F(a,b){return\"in\"==b?m(u):m(w,G)}function G(a,b){return\";\"==a?m(H):\"in\"==b?m(u):m(u,s(\";\"),H)}function H(a){\")\"!=a&&m(u)}function I(a,b){return\"variable\"==a?(n(b),m(I)):\"(\"==a?m(q(\")\"),o,A(J,\")\"),r,t,p):void 0}function J(a,b){if(\"variable\"==a)return n(b),m()}var K,L,M=a.indentUnit,N=b.json,O=function(){function a(a){return{type:a,style:\"keyword\"}}var b=a(\"keyword a\"),c=a(\"keyword b\"),d=a(\"keyword c\"),e=a(\"operator\"),f={type:\"atom\",style:\"atom\"};return{\"if\":b,\"while\":b,\"with\":b,\"else\":c,\"do\":c,\"try\":c,\"finally\":c,\"return\":d,\"break\":d,\"continue\":d,\"new\":d,\"delete\":d,\"throw\":d,\"var\":a(\"var\"),\"const\":a(\"var\"),\"let\":a(\"var\"),\"function\":a(\"function\"),\"catch\":a(\"catch\"),\"for\":a(\"for\"),\"switch\":a(\"switch\"),\"case\":a(\"case\"),\"default\":a(\"default\"),\"in\":e,\"typeof\":e,\"instanceof\":e,\"true\":f,\"false\":f,\"null\":f,undefined:f,NaN:f,Infinity:f}}(),P=/[+\\-*&%=<>!?|]/,Q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0},R={state:null,column:null,marked:null,cc:null},S={name:\"this\",next:{name:\"arguments\"}};return r.lex=!0,{startState:function(a){return{tokenize:f,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new i((a||0)-M,0,\"block\",(!1)),localVars:null,context:null,indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty(\"align\")||(b.lexical.align=!1),b.indented=a.indentation()),a.eatSpace())return null;var c=b.tokenize(a,b);return\"comment\"==K?c:(b.reAllowed=\"operator\"==K||\"keyword c\"==K||K.match(/^[\\[{}\\(,;:]$/),b.kwAllowed=\".\"!=K,k(b,c,K,L,a))},indent:function(a,b){if(a.tokenize!=f)return 0;var c=b&&b.charAt(0),d=a.lexical,e=d.type,g=c==e;return\"vardef\"==e?d.indented+4:\"form\"==e&&\"{\"==c?d.indented:\"stat\"==e||\"form\"==e?d.indented+M:\"switch\"!=d.info||g?d.align?d.column+(g?0:1):d.indented+(g?0:M):d.indented+(/^(?:case|default)\\b/.test(b)?M:2*M)},electricChars:\":{}\"}}),CodeMirror.defineMIME(\"text/javascript\",\"javascript\"),CodeMirror.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),CodeMirror.defineMode(\"css\",function(a){function b(a,b){return g=b,a}function c(a,c){var g=a.next();return\"@\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"meta\",a.current())):\"/\"==g&&a.eat(\"*\")?(c.tokenize=d,d(a,c)):\"<\"==g&&a.eat(\"!\")?(c.tokenize=e,e(a,c)):\"=\"!=g?\"~\"!=g&&\"|\"!=g||!a.eat(\"=\")?'\"'==g||\"'\"==g?(c.tokenize=f(g),c.tokenize(a,c)):\"#\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"atom\",\"hash\")):\"!\"==g?(a.match(/^\\s*\\w*/),b(\"keyword\",\"important\")):/\\d/.test(g)?(a.eatWhile(/[\\w.%]/),b(\"number\",\"unit\")):/[,.+>*\\/]/.test(g)?b(null,\"select-op\"):/[;{}:\\[\\]]/.test(g)?b(null,g):(a.eatWhile(/[\\w\\\\\\-]/),b(\"variable\",\"variable\")):b(null,\"compare\"):void b(null,\"compare\")}function d(a,d){for(var e,f=!1;null!=(e=a.next());){if(f&&\"/\"==e){d.tokenize=c;break}f=\"*\"==e}return b(\"comment\",\"comment\")}function e(a,d){for(var e,f=0;null!=(e=a.next());){if(f>=2&&\">\"==e){d.tokenize=c;break}f=\"-\"==e?f+1:0}return b(\"comment\",\"comment\")}function f(a){return function(d,e){for(var f,g=!1;null!=(f=d.next())&&(f!=a||g);)g=!g&&\"\\\\\"==f;return g||(e.tokenize=c),b(\"string\",\"string\")}}var g,h=a.indentUnit;return{startState:function(a){return{tokenize:c,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b),d=b.stack[b.stack.length-1];return\"hash\"==g&&\"rule\"==d?c=\"atom\":\"variable\"==c&&(\"rule\"==d?c=\"number\":d&&\"@media{\"!=d||(c=\"tag\")),\"rule\"==d&&/^[\\{\\};]$/.test(g)&&b.stack.pop(),\"{\"==g?\"@media\"==d?b.stack[b.stack.length-1]=\"@media{\":b.stack.push(\"{\"):\"}\"==g?b.stack.pop():\"@media\"==g?b.stack.push(\"@media\"):\"{\"==d&&\"comment\"!=g&&b.stack.push(\"rule\"),c},indent:function(a,b){var c=a.stack.length;return/^\\}/.test(b)&&(c-=\"rule\"==a.stack[a.stack.length-1]?2:1),a.baseIndent+c*h},electricChars:\"}\"}}),CodeMirror.defineMIME(\"text/css\",\"css\"),CodeMirror.defineMode(\"htmlmixed\",function(a,b){function c(a,b){var c=g.token(a,b.htmlState);return\"tag\"==c&&\">\"==a.current()&&b.htmlState.context&&(/^script$/i.test(b.htmlState.context.tagName)?(b.token=e,b.localState=h.startState(g.indent(b.htmlState,\"\")),b.mode=\"javascript\"):/^style$/i.test(b.htmlState.context.tagName)&&(b.token=f,b.localState=i.startState(g.indent(b.htmlState,\"\")),b.mode=\"css\")),c}function d(a,b,c){var d=a.current(),e=d.search(b);return e>-1&&a.backUp(d.length-e),c}function e(a,b){return a.match(/^<\\/\\s*script\\s*>/i,!1)?(b.token=c,b.curState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*script\\s*>/,h.token(a,b.localState))}function f(a,b){return a.match(/^<\\/\\s*style\\s*>/i,!1)?(b.token=c,b.localState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*style\\s*>/,i.token(a,b.localState))}var g=CodeMirror.getMode(a,{name:\"xml\",htmlMode:!0}),h=CodeMirror.getMode(a,\"javascript\"),i=CodeMirror.getMode(a,\"css\");return{startState:function(){var a=g.startState();return{token:c,localState:null,mode:\"html\",htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.token==f?i:h,a.localState);return{token:a.token,localState:b,mode:a.mode,htmlState:CodeMirror.copyState(g,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==c||/^\\s*<\\//.test(b)?g.indent(a.htmlState,b):a.token==e?h.indent(a.localState,b):i.indent(a.localState,b)},compareStates:function(a,b){return g.compareStates(a.htmlState,b.htmlState)},electricChars:\"/{}:\"}}),CodeMirror.defineMIME(\"text/html\",\"htmlmixed\");"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/jquery-1.10.2.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){function c(a){var b=a.length,c=ka.type(a);return!ka.isWindow(a)&&(!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)))}function d(a){var b=za[a]={};return ka.each(a.match(ma)||[],function(a,c){b[c]=!0}),b}function e(a,c,d,e){if(ka.acceptData(a)){var f,g,h=ka.expando,i=a.nodeType,j=i?ka.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||d!==b||\"string\"!=typeof c)return k||(k=i?a[h]=ba.pop()||ka.guid++:h),j[k]||(j[k]=i?{}:{toJSON:ka.noop}),(\"object\"==typeof c||\"function\"==typeof c)&&(e?j[k]=ka.extend(j[k],c):j[k].data=ka.extend(j[k].data,c)),g=j[k],e||(g.data||(g.data={}),g=g.data),d!==b&&(g[ka.camelCase(c)]=d),\"string\"==typeof c?(f=g[c],null==f&&(f=g[ka.camelCase(c)])):f=g,f}}function f(a,b,c){if(ka.acceptData(a)){var d,e,f=a.nodeType,g=f?ka.cache:a,i=f?a[ka.expando]:ka.expando;if(g[i]){if(b&&(d=c?g[i]:g[i].data)){ka.isArray(b)?b=b.concat(ka.map(b,ka.camelCase)):b in d?b=[b]:(b=ka.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;for(;e--;)delete d[b[e]];if(c?!h(d):!ka.isEmptyObject(d))return}(c||(delete g[i].data,h(g[i])))&&(f?ka.cleanData([a],!0):ka.support.deleteExpando||g!=g.window?delete g[i]:g[i]=null)}}}function g(a,c,d){if(d===b&&1===a.nodeType){var e=\"data-\"+c.replace(Ba,\"-$1\").toLowerCase();if(d=a.getAttribute(e),\"string\"==typeof d){try{d=\"true\"===d||\"false\"!==d&&(\"null\"===d?null:+d+\"\"===d?+d:Aa.test(d)?ka.parseJSON(d):d)}catch(f){}ka.data(a,c,d)}else d=b}return d}function h(a){var b;for(b in a)if((\"data\"!==b||!ka.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;return!0}function i(){return!0}function j(){return!1}function k(){try{return Y.activeElement}catch(a){}}function l(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function m(a,b,c){if(ka.isFunction(b))return ka.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return ka.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(Qa.test(b))return ka.filter(b,a,c);b=ka.filter(b,a)}return ka.grep(a,function(a){return ka.inArray(a,b)>=0!==c})}function n(a){var b=Ua.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function o(a,b){return ka.nodeName(a,\"table\")&&ka.nodeName(1===b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function p(a){return a.type=(null!==ka.find.attr(a,\"type\"))+\"/\"+a.type,a}function q(a){var b=eb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function r(a,b){for(var c,d=0;null!=(c=a[d]);d++)ka._data(c,\"globalEval\",!b||ka._data(b[d],\"globalEval\"))}function s(a,b){if(1===b.nodeType&&ka.hasData(a)){var c,d,e,f=ka._data(a),g=ka._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)ka.event.add(b,c,h[c][d])}g.data&&(g.data=ka.extend({},g.data))}}function t(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!ka.support.noCloneEvent&&b[ka.expando]){e=ka._data(b);for(d in e.events)ka.removeEvent(b,d,e.handle);b.removeAttribute(ka.expando)}\"script\"===c&&b.text!==a.text?(p(b).text=a.text,q(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),ka.support.html5Clone&&a.innerHTML&&!ka.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&bb.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}}function u(a,c){var d,e,f=0,g=typeof a.getElementsByTagName!==W?a.getElementsByTagName(c||\"*\"):typeof a.querySelectorAll!==W?a.querySelectorAll(c||\"*\"):b;if(!g)for(g=[],d=a.childNodes||a;null!=(e=d[f]);f++)!c||ka.nodeName(e,c)?g.push(e):ka.merge(g,u(e,c));return c===b||c&&ka.nodeName(a,c)?ka.merge([a],g):g}function v(a){bb.test(a.type)&&(a.defaultChecked=a.checked)}function w(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=yb.length;e--;)if(b=yb[e]+c,b in a)return b;return d}function x(a,b){return a=b||a,\"none\"===ka.css(a,\"display\")||!ka.contains(a.ownerDocument,a)}function y(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ka._data(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&x(d)&&(f[g]=ka._data(d,\"olddisplay\",C(d.nodeName)))):f[g]||(e=x(d),(c&&\"none\"!==c||!e)&&ka._data(d,\"olddisplay\",e?c:ka.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}function z(a,b,c){var d=rb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function A(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=ka.css(a,c+xb[f],!0,e)),d?(\"content\"===c&&(g-=ka.css(a,\"padding\"+xb[f],!0,e)),\"margin\"!==c&&(g-=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e))):(g+=ka.css(a,\"padding\"+xb[f],!0,e),\"padding\"!==c&&(g+=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e)));return g}function B(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=kb(a),g=ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=lb(a,b,f),(0>e||null==e)&&(e=a.style[b]),sb.test(e))return e;d=g&&(ka.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+A(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}function C(a){var b=Y,c=ub[a];return c||(c=D(a,b),\"none\"!==c&&c||(jb=(jb||ka(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(b.documentElement),b=(jb[0].contentWindow||jb[0].contentDocument).document,b.write(\"<!doctype html><html><body>\"),b.close(),c=D(a,b),jb.detach()),ub[a]=c),c}function D(a,b){var c=ka(b.createElement(a)).appendTo(b.body),d=ka.css(c[0],\"display\");return c.remove(),d}function E(a,b,c,d){var e;if(ka.isArray(b))ka.each(b,function(b,e){c||Ab.test(a)?d(a,e):E(a+\"[\"+(\"object\"==typeof e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==ka.type(b))d(a,b);else for(e in b)E(a+\"[\"+e+\"]\",b[e],c,d)}function F(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(ma)||[];if(ka.isFunction(c))for(;d=f[e++];)\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function G(a,c,d,e){function f(i){var j;return g[i]=!0,ka.each(a[i]||[],function(a,i){var k=i(c,d,e);return\"string\"!=typeof k||h||g[k]?h?!(j=k):b:(c.dataTypes.unshift(k),f(k),!1)}),j}var g={},h=a===Rb;return f(c.dataTypes[0])||!g[\"*\"]&&f(\"*\")}function H(a,c){var d,e,f=ka.ajaxSettings.flatOptions||{};for(e in c)c[e]!==b&&((f[e]?a:d||(d={}))[e]=c[e]);return d&&ka.extend(!0,a,d),a}function I(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;\"*\"===j[0];)j.shift(),f===b&&(f=a.mimeType||c.getResponseHeader(\"Content-Type\"));if(f)for(h in i)if(i[h]&&i[h].test(f)){j.unshift(h);break}if(j[0]in d)g=j[0];else{for(h in d){if(!j[0]||a.converters[h+\" \"+j[0]]){g=h;break}e||(e=h)}g=g||e}return g?(g!==j[0]&&j.unshift(g),d[g]):b}function J(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}function K(){try{return new a.XMLHttpRequest}catch(b){}}function L(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function M(){return setTimeout(function(){$b=b}),$b=ka.now()}function N(a,b,c){for(var d,e=(ec[b]||[]).concat(ec[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function O(a,b,c){var d,e,f=0,g=dc.length,h=ka.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||M(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:ka.extend({},b),opts:ka.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||M(),duration:c.duration,tweens:[],createTween:function(b,c){var d=ka.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(P(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return ka.map(k,N,j),ka.isFunction(j.opts.start)&&j.opts.start.call(a,j),ka.fx.timer(ka.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function P(a,b){var c,d,e,f,g;for(c in a)if(d=ka.camelCase(c),e=b[d],f=a[c],ka.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=ka.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Q(a,b,c){var d,e,f,g,h,i,j=this,k={},l=a.style,m=a.nodeType&&x(a),n=ka._data(a,\"fxshow\");c.queue||(h=ka._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,j.always(function(){j.always(function(){h.unqueued--,ka.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[l.overflow,l.overflowX,l.overflowY],\"inline\"===ka.css(a,\"display\")&&\"none\"===ka.css(a,\"float\")&&(ka.support.inlineBlockNeedsLayout&&\"inline\"!==C(a.nodeName)?l.zoom=1:l.display=\"inline-block\")),c.overflow&&(l.overflow=\"hidden\",ka.support.shrinkWrapBlocks||j.always(function(){l.overflow=c.overflow[0],l.overflowX=c.overflow[1],l.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(m?\"hide\":\"show\"))continue;k[d]=n&&n[d]||ka.style(a,d)}if(!ka.isEmptyObject(k)){n?\"hidden\"in n&&(m=n.hidden):n=ka._data(a,\"fxshow\",{}),f&&(n.hidden=!m),m?ka(a).show():j.done(function(){ka(a).hide()}),j.done(function(){var b;ka._removeData(a,\"fxshow\");for(b in k)ka.style(a,b,k[b])});for(d in k)g=N(m?n[d]:0,d,j),d in n||(n[d]=g.start,m&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function R(a,b,c,d,e){return new R.prototype.init(a,b,c,d,e)}function S(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=xb[e],d[\"margin\"+c]=d[\"padding\"+c]=a;return b&&(d.opacity=d.width=a),d}function T(a){return ka.isWindow(a)?a:9===a.nodeType&&(a.defaultView||a.parentWindow)}var U,V,W=typeof b,X=a.location,Y=a.document,Z=Y.documentElement,$=a.jQuery,_=a.$,aa={},ba=[],ca=\"1.10.2\",da=ba.concat,ea=ba.push,fa=ba.slice,ga=ba.indexOf,ha=aa.toString,ia=aa.hasOwnProperty,ja=ca.trim,ka=function(a,b){return new ka.fn.init(a,b,V)},la=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ma=/\\S+/g,na=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,oa=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,pa=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,qa=/^[\\],:{}\\s]*$/,ra=/(?:^|:|,)(?:\\s*\\[)+/g,sa=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,ta=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,ua=/^-ms-/,va=/-([\\da-z])/gi,wa=function(a,b){return b.toUpperCase()},xa=function(a){(Y.addEventListener||\"load\"===a.type||\"complete\"===Y.readyState)&&(ya(),ka.ready())},ya=function(){Y.addEventListener?(Y.removeEventListener(\"DOMContentLoaded\",xa,!1),a.removeEventListener(\"load\",xa,!1)):(Y.detachEvent(\"onreadystatechange\",xa),a.detachEvent(\"onload\",xa))};ka.fn=ka.prototype={jquery:ca,constructor:ka,init:function(a,c,d){var e,f;if(!a)return this;if(\"string\"==typeof a){if(e=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:oa.exec(a),!e||!e[1]&&c)return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a);if(e[1]){if(c=c instanceof ka?c[0]:c,ka.merge(this,ka.parseHTML(e[1],c&&c.nodeType?c.ownerDocument||c:Y,!0)),pa.test(e[1])&&ka.isPlainObject(c))for(e in c)ka.isFunction(this[e])?this[e](c[e]):this.attr(e,c[e]);return this}if(f=Y.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return d.find(a);this.length=1,this[0]=f}return this.context=Y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):ka.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),ka.makeArray(a,this))},selector:\"\",length:0,toArray:function(){return fa.call(this)},get:function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},pushStack:function(a){var b=ka.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return ka.each(this,a,b)},ready:function(a){return ka.ready.promise().done(a),this},slice:function(){return this.pushStack(fa.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},map:function(a){return this.pushStack(ka.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:ea,sort:[].sort,splice:[].splice},ka.fn.init.prototype=ka.fn,ka.extend=ka.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for(\"boolean\"==typeof h&&(k=h,h=arguments[1]||{},i=2),\"object\"==typeof h||ka.isFunction(h)||(h={}),j===i&&(h=this,--i);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(ka.isPlainObject(d)||(c=ka.isArray(d)))?(c?(c=!1,g=a&&ka.isArray(a)?a:[]):g=a&&ka.isPlainObject(a)?a:{},h[e]=ka.extend(k,g,d)):d!==b&&(h[e]=d));return h},ka.extend({expando:\"jQuery\"+(ca+Math.random()).replace(/\\D/g,\"\"),noConflict:function(b){return a.$===ka&&(a.$=_),b&&a.jQuery===ka&&(a.jQuery=$),ka},isReady:!1,readyWait:1,holdReady:function(a){a?ka.readyWait++:ka.ready(!0)},ready:function(a){if(a===!0?!--ka.readyWait:!ka.isReady){if(!Y.body)return setTimeout(ka.ready);ka.isReady=!0,a!==!0&&--ka.readyWait>0||(U.resolveWith(Y,[ka]),ka.fn.trigger&&ka(Y).trigger(\"ready\").off(\"ready\"))}},isFunction:function(a){return\"function\"===ka.type(a)},isArray:Array.isArray||function(a){return\"array\"===ka.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?aa[ha.call(a)]||\"object\":typeof a},isPlainObject:function(a){var c;if(!a||\"object\"!==ka.type(a)||a.nodeType||ka.isWindow(a))return!1;try{if(a.constructor&&!ia.call(a,\"constructor\")&&!ia.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(d){return!1}if(ka.support.ownLast)for(c in a)return ia.call(a,c);for(c in a);return c===b||ia.call(a,c)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw Error(a)},parseHTML:function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||Y;var d=pa.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=ka.buildFragment([a],b,e),e&&ka(e).remove(),ka.merge([],d.childNodes))},parseJSON:function(c){return a.JSON&&a.JSON.parse?a.JSON.parse(c):null===c?c:\"string\"==typeof c&&(c=ka.trim(c),c&&qa.test(c.replace(sa,\"@\").replace(ta,\"]\").replace(ra,\"\")))?Function(\"return \"+c)():(ka.error(\"Invalid JSON: \"+c),b)},parseXML:function(c){var d,e;if(!c||\"string\"!=typeof c)return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(f){d=b}return d&&d.documentElement&&!d.getElementsByTagName(\"parsererror\").length||ka.error(\"Invalid XML: \"+c),d},noop:function(){},globalEval:function(b){b&&ka.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(ua,\"ms-\").replace(va,wa)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:ja&&!ja.call(\"\\ufeff \")?function(a){return null==a?\"\":ja.call(a)}:function(a){return null==a?\"\":(a+\"\").replace(na,\"\")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?ka.merge(d,\"string\"==typeof a?[a]:a):ea.call(d,a)),d},inArray:function(a,b,c){var d;if(b){if(ga)return ga.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(\"number\"==typeof d)for(;d>f;f++)a[e++]=c[f];else for(;c[f]!==b;)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;for(c=!!c;g>f;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&(i[i.length]=e);else for(f in a)e=b(a[f],f,d),null!=e&&(i[i.length]=e);return da.apply([],i)},guid:1,proxy:function(a,c){var d,e,f;return\"string\"==typeof c&&(f=a[c],c=a,a=f),ka.isFunction(a)?(d=fa.call(arguments,2),e=function(){return a.apply(c||this,d.concat(fa.call(arguments)))},e.guid=a.guid=a.guid||ka.guid++,e):b},access:function(a,c,d,e,f,g,h){var i=0,j=a.length,k=null==d;if(\"object\"===ka.type(d)){f=!0;for(i in d)ka.access(a,c,i,d[i],!0,g,h)}else if(e!==b&&(f=!0,ka.isFunction(e)||(h=!0),k&&(h?(c.call(a,e),c=null):(k=c,c=function(a,b,c){return k.call(ka(a),c)})),c))for(;j>i;i++)c(a[i],d,h?e:e.call(a[i],i,c(a[i],d)));return f?a:k?c.call(a):j?c(a[0],d):g},now:function(){return(new Date).getTime()},swap:function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e}}),ka.ready.promise=function(b){if(!U)if(U=ka.Deferred(),\"complete\"===Y.readyState)setTimeout(ka.ready);else if(Y.addEventListener)Y.addEventListener(\"DOMContentLoaded\",xa,!1),a.addEventListener(\"load\",xa,!1);else{Y.attachEvent(\"onreadystatechange\",xa),a.attachEvent(\"onload\",xa);var c=!1;try{c=null==a.frameElement&&Y.documentElement}catch(d){}c&&c.doScroll&&function e(){if(!ka.isReady){try{c.doScroll(\"left\")}catch(a){return setTimeout(e,50)}ya(),ka.ready()}}()}return U.promise(b)},ka.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){aa[\"[object \"+b+\"]\"]=b.toLowerCase()}),V=ka(Y),function(a,b){function c(a,b,c,d){var e,f,g,h,i,j,k,l,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],!a||\"string\"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(I&&!d){if(e=ta.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return aa.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&x.getElementsByClassName&&b.getElementsByClassName)return aa.apply(c,b.getElementsByClassName(g)),c}if(x.qsa&&(!J||!J.test(a))){if(l=k=N,o=b,p=9===h&&a,1===h&&\"object\"!==b.nodeName.toLowerCase()){for(j=m(a),(k=b.getAttribute(\"id\"))?l=k.replace(wa,\"\\\\$&\"):b.setAttribute(\"id\",l),l=\"[id='\"+l+\"'] \",i=j.length;i--;)j[i]=l+n(j[i]);o=na.test(a)&&b.parentNode||b,p=j.join(\",\")}if(p)try{return aa.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{k||b.removeAttribute(\"id\")}}}return v(a.replace(ja,\"$1\"),b,c,d)}function d(){function a(c,d){return b.push(c+=\" \")>z.cacheLength&&delete a[b.shift()],a[c]=d}var b=[];return a}function e(a){return a[N]=!0,a}function f(a){var b=G.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function g(a,b){for(var c=a.split(\"|\"),d=a.length;d--;)z.attrHandle[c[d]]=b}function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||X)-(~a.sourceIndex||X);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(){}function m(a,b){var d,e,f,g,h,i,j,k=S[a+\" \"];if(k)return b?0:k.slice(0);for(h=a,i=[],j=z.preFilter;h;){(!d||(e=la.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ma.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ja,\" \")}),h=h.slice(d.length));for(g in z.filter)!(e=ra[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return b?h.length:h?c.error(a):S(a,i).slice(0)}function n(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function o(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=P+\" \"+f;if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e)if(j=b[N]||(b[N]={}),(i=j[d])&&i[0]===k){if((h=i[1])===!0||h===y)return h===!0}else if(i=j[d]=[k],i[1]=a(b,c,g)||y,i[1]===!0)return!0}}function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,d,f,g){return d&&!d[N]&&(d=r(d)),f&&!f[N]&&(f=r(f,g)),e(function(e,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=e||u(b||\"*\",h.nodeType?[h]:h,[]),r=!a||!e&&b?p:q(p,m,a,h,i),s=c?f||(e?a:o||d)?[]:g:r;if(c&&c(r,s,h,i),d)for(j=q(s,n),d(j,[],h,i),k=j.length;k--;)(l=j[k])&&(s[n[k]]=!(r[n[k]]=l));if(e){if(f||a){if(f){for(j=[],k=s.length;k--;)(l=s[k])&&j.push(r[k]=l);f(null,s=[],j,i)}for(k=s.length;k--;)(l=s[k])&&(j=f?ca.call(e,l):m[k])>-1&&(e[j]=!(g[j]=l))}}else s=q(s===g?s.splice(o,s.length):s),f?f(null,g,s,i):aa.apply(g,s)})}function s(a){for(var b,c,d,e=a.length,f=z.relative[a[0].type],g=f||z.relative[\" \"],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ca.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];e>h;h++)if(c=z.relative[a[h].type])k=[o(p(k),c)];else{if(c=z.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!z.relative[a[d].type];d++);return r(h>1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:\" \"===a[h-2].type?\"*\":\"\"})).replace(ja,\"$1\"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&n(a))}k.push(c)}return p(k)}function t(a,b){var d=0,f=b.length>0,g=a.length>0,h=function(e,h,i,j,k){var l,m,n,o=[],p=0,r=\"0\",s=e&&[],t=null!=k,u=D,v=e||g&&z.find.TAG(\"*\",k&&h.parentNode||h),w=P+=null==u?1:Math.random()||.1;for(t&&(D=h!==G&&h,y=d);null!=(l=v[r]);r++){if(g&&l){for(m=0;n=a[m++];)if(n(l,h,i)){j.push(l);break}t&&(P=w,y=++d)}f&&((l=!n&&l)&&p--,e&&s.push(l))}if(p+=r,f&&r!==p){for(m=0;n=b[m++];)n(s,o,h,i);if(e){if(p>0)for(;r--;)s[r]||o[r]||(o[r]=$.call(j));o=q(o)}aa.apply(j,o),t&&!e&&o.length>0&&p+b.length>1&&c.uniqueSort(j)}return t&&(P=w,D=u),s};return f?e(h):h}function u(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}function v(a,b,c,d){var e,f,g,h,i,j=m(a);if(!d&&1===j.length){if(f=j[0]=j[0].slice(0),f.length>2&&\"ID\"===(g=f[0]).type&&x.getById&&9===b.nodeType&&I&&z.relative[f[1].type]){if(b=(z.find.ID(g.matches[0].replace(xa,ya),b)||[])[0],!b)return c;a=a.slice(f.shift().value.length)}for(e=ra.needsContext.test(a)?0:f.length;e--&&(g=f[e],!z.relative[h=g.type]);)if((i=z.find[h])&&(d=i(g.matches[0].replace(xa,ya),na.test(f[0].type)&&b.parentNode||b))){if(f.splice(e,1),a=d.length&&n(f),!a)return aa.apply(c,d),c;break}}return C(a,j)(d,b,!I,c,na.test(a)),c}var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=\"sizzle\"+-new Date,O=a.document,P=0,Q=0,R=d(),S=d(),T=d(),U=!1,V=function(a,b){return a===b?(U=!0,0):0},W=typeof b,X=1<<31,Y={}.hasOwnProperty,Z=[],$=Z.pop,_=Z.push,aa=Z.push,ba=Z.slice,ca=Z.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},da=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ea=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",fa=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ga=fa.replace(\"w\",\"w#\"),ha=\"\\\\[\"+ea+\"*(\"+fa+\")\"+ea+\"*(?:([*^$|!~]?=)\"+ea+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+ga+\")|)|)\"+ea+\"*\\\\]\",ia=\":(\"+fa+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ha.replace(3,8)+\")*)|.*)\\\\)|)\",ja=RegExp(\"^\"+ea+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ea+\"+$\",\"g\"),la=RegExp(\"^\"+ea+\"*,\"+ea+\"*\"),ma=RegExp(\"^\"+ea+\"*([>+~]|\"+ea+\")\"+ea+\"*\"),na=RegExp(ea+\"*[+~]\"),oa=RegExp(\"=\"+ea+\"*([^\\\\]'\\\"]*)\"+ea+\"*\\\\]\",\"g\"),pa=RegExp(ia),qa=RegExp(\"^\"+ga+\"$\"),ra={ID:RegExp(\"^#(\"+fa+\")\"),CLASS:RegExp(\"^\\\\.(\"+fa+\")\"),TAG:RegExp(\"^(\"+fa.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+ha),PSEUDO:RegExp(\"^\"+ia),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ea+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ea+\"*(?:([+-]|)\"+ea+\"*(\\\\d+)|))\"+ea+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+da+\")$\",\"i\"),needsContext:RegExp(\"^\"+ea+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ea+\"*((?:-\\\\d)?\\\\d*)\"+ea+\"*\\\\)|)(?=[^-]|$)\",\"i\")},sa=/^[^{]+\\{\\s*\\[native \\w/,ta=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ua=/^(?:input|select|textarea|button)$/i,va=/^h\\d$/i,wa=/'|\\\\/g,xa=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ea+\"?|(\"+ea+\")|.)\",\"ig\"),ya=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(55296|d>>10,56320|1023&d)};try{aa.apply(Z=ba.call(O.childNodes),O.childNodes),Z[O.childNodes.length].nodeType}catch(za){aa={apply:Z.length?function(a,b){_.apply(a,ba.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}B=c.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},x=c.support={},F=c.setDocument=function(a){var c=a?a.ownerDocument||a:O,d=c.defaultView;return c!==G&&9===c.nodeType&&c.documentElement?(G=c,H=c.documentElement,I=!B(c),d&&d.attachEvent&&d!==d.top&&d.attachEvent(\"onbeforeunload\",function(){F()}),x.attributes=f(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),x.getElementsByTagName=f(function(a){return a.appendChild(c.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),x.getElementsByClassName=f(function(a){return a.innerHTML=\"<div class='a'></div><div class='a i'></div>\",a.firstChild.className=\"i\",2===a.getElementsByClassName(\"i\").length}),x.getById=f(function(a){return H.appendChild(a).id=N,!c.getElementsByName||!c.getElementsByName(N).length}),x.getById?(z.find.ID=function(a,b){if(typeof b.getElementById!==W&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){return a.getAttribute(\"id\")===b}}):(delete z.find.ID,z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){var c=typeof a.getAttributeNode!==W&&a.getAttributeNode(\"id\");return c&&c.value===b}}),z.find.TAG=x.getElementsByTagName?function(a,c){return typeof c.getElementsByTagName!==W?c.getElementsByTagName(a):b}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},z.find.CLASS=x.getElementsByClassName&&function(a,c){return typeof c.getElementsByClassName!==W&&I?c.getElementsByClassName(a):b},K=[],J=[],(x.qsa=sa.test(c.querySelectorAll))&&(f(function(a){a.innerHTML=\"<select><option selected=''></option></select>\",a.querySelectorAll(\"[selected]\").length||J.push(\"\\\\[\"+ea+\"*(?:value|\"+da+\")\"),a.querySelectorAll(\":checked\").length||J.push(\":checked\")}),f(function(a){var b=c.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"t\",\"\"),a.querySelectorAll(\"[t^='']\").length&&J.push(\"[*^$]=\"+ea+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\":enabled\").length||J.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),J.push(\",.*:\")})),(x.matchesSelector=sa.test(L=H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&f(function(a){x.disconnectedMatch=L.call(a,\"div\"),L.call(a,\"[s!='']:x\"),K.push(\"!=\",ia)}),J=J.length&&RegExp(J.join(\"|\")),K=K.length&&RegExp(K.join(\"|\")),M=sa.test(H.contains)||H.compareDocumentPosition?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},V=H.compareDocumentPosition?function(a,b){if(a===b)return U=!0,0;var d=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b);return d?1&d||!x.sortDetached&&b.compareDocumentPosition(a)===d?a===c||M(O,a)?-1:b===c||M(O,b)?1:E?ca.call(E,a)-ca.call(E,b):0:4&d?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var d,e=0,f=a.parentNode,g=b.parentNode,i=[a],j=[b];if(a===b)return U=!0,0;if(!f||!g)return a===c?-1:b===c?1:f?-1:g?1:E?ca.call(E,a)-ca.call(E,b):0;if(f===g)return h(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?h(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},c):G},c.matches=function(a,b){return c(a,null,null,b)},c.matchesSelector=function(a,b){if((a.ownerDocument||a)!==G&&F(a),b=b.replace(oa,\"='$1']\"),!(!x.matchesSelector||!I||K&&K.test(b)||J&&J.test(b)))try{var d=L.call(a,b);if(d||x.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return c(b,G,null,[a]).length>0},c.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},c.attr=function(a,c){(a.ownerDocument||a)!==G&&F(a);var d=z.attrHandle[c.toLowerCase()],e=d&&Y.call(z.attrHandle,c.toLowerCase())?d(a,c,!I):b;return e===b?x.attributes||!I?a.getAttribute(c):(e=a.getAttributeNode(c))&&e.specified?e.value:null:e},c.error=function(a){throw Error(\"Syntax error, unrecognized expression: \"+a)},c.uniqueSort=function(a){var b,c=[],d=0,e=0;if(U=!x.detectDuplicates,E=!x.sortStable&&a.slice(0),a.sort(V),U){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return a},A=c.getText=function(a){var b,c=\"\",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=A(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d];d++)c+=A(b);return c},z=c.selectors={cacheLength:50,createPseudo:e,match:ra,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(xa,ya),a[3]=(a[4]||a[5]||\"\").replace(xa,ya),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||c.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&c.error(a[0]),a},PSEUDO:function(a){var c,d=!a[5]&&a[2];return ra.CHILD.test(a[0])?null:(a[3]&&a[4]!==b?a[2]=a[4]:d&&pa.test(d)&&(c=m(d,!0))&&(c=d.indexOf(\")\",d.length-c)-d.length)&&(a[0]=a[0].slice(0,c),a[2]=d.slice(0,c)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(xa,ya).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+\" \"];return b||(b=RegExp(\"(^|\"+ea+\")\"+a+\"(\"+ea+\"|$)\"))&&R(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||typeof a.getAttribute!==W&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,d){return function(e){var f=c.attr(e,a);return null==f?\"!=\"===b:!b||(f+=\"\",\"=\"===b?f===d:\"!=\"===b?f!==d:\"^=\"===b?d&&0===f.indexOf(d):\"*=\"===b?d&&f.indexOf(d)>-1:\"$=\"===b?d&&f.slice(-d.length)===d:\"~=\"===b?(\" \"+f+\" \").indexOf(d)>-1:\"|=\"===b&&(f===d||f.slice(0,d.length+1)===d+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;\nif(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||0===m%d&&m/d>=0}}},PSEUDO:function(a,b){var d,f=z.pseudos[a]||z.setFilters[a.toLowerCase()]||c.error(\"unsupported pseudo: \"+a);return f[N]?f(b):f.length>1?(d=[a,a,\"\",b],z.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,c){for(var d,e=f(a,b),g=e.length;g--;)d=ca.call(a,e[g]),a[d]=!(c[d]=e[g])}):function(a){return f(a,0,d)}):f}},pseudos:{not:e(function(a){var b=[],c=[],d=C(a.replace(ja,\"$1\"));return d[N]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:e(function(a){return function(b){return c(a,b).length>0}}),contains:e(function(a){return function(b){return(b.textContent||b.innerText||A(b)).indexOf(a)>-1}}),lang:e(function(a){return qa.test(a||\"\")||c.error(\"unsupported lang: \"+a),a=a.replace(xa,ya).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeName>\"@\"||3===a.nodeType||4===a.nodeType)return!1;return!0},parent:function(a){return!z.pseudos.empty(a)},header:function(a){return va.test(a.nodeName)},input:function(a){return ua.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||b.toLowerCase()===a.type)},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[0>c?c+b:c]}),even:k(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:k(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:k(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=0>c?c+b:c;b>++d;)a.push(d);return a})}},z.pseudos.nth=z.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})z.pseudos[w]=i(w);for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+\" \"];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split(\"\").sort(V).join(\"\")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement(\"div\"))}),f(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||g(\"type|href|height|width\",function(a,c,d){return d?b:a.getAttribute(c,\"type\"===c.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||g(\"value\",function(a,c,d){return d||\"input\"!==a.nodeName.toLowerCase()?b:a.defaultValue}),f(function(a){return null==a.getAttribute(\"disabled\")})||g(da,function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&e.specified?e.value:a[c]===!0?c.toLowerCase():null}),ka.find=c,ka.expr=c.selectors,ka.expr[\":\"]=ka.expr.pseudos,ka.unique=c.uniqueSort,ka.text=c.getText,ka.isXMLDoc=c.isXML,ka.contains=c.contains}(a);var za={};ka.Callbacks=function(a){a=\"string\"==typeof a?za[a]||d(a):ka.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(e=a.memory&&b,f=!0,h=i||0,i=0,g=j.length,c=!0;j&&g>h;h++)if(j[h].apply(b[0],b[1])===!1&&a.stopOnFalse){e=!1;break}c=!1,j&&(k?k.length&&l(k.shift()):e?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){ka.each(b,function(b,c){var e=ka.type(c);\"function\"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&\"string\"!==e&&d(c)})}(arguments),c?g=j.length:e&&(i=b,l(e))}return this},remove:function(){return j&&ka.each(arguments,function(a,b){for(var d;(d=ka.inArray(b,j,d))>-1;)j.splice(d,1),c&&(g>=d&&g--,h>=d&&h--)}),this},has:function(a){return a?ka.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],g=0,this},disable:function(){return j=k=e=b,this},disabled:function(){return!j},lock:function(){return k=b,e||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||f&&!k||(b=b||[],b=[a,b.slice?b.slice():b],c?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!f}};return m},ka.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",ka.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ka.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ka.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return ka.Deferred(function(c){ka.each(b,function(b,f){var g=f[0],h=ka.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&ka.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+\"With\"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?ka.extend(a,d):d}},e={};return d.pipe=d.then,ka.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=fa.call(arguments),g=f.length,h=1!==g||a&&ka.isFunction(a.promise)?g:0,i=1===h?a:ka.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?fa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=Array(g),c=Array(g),d=Array(g);g>e;e++)f[e]&&ka.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),ka.support=function(b){var c,d,e,f,g,h,i,j,k,l=Y.createElement(\"div\");if(l.setAttribute(\"className\",\"t\"),l.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",c=l.getElementsByTagName(\"*\")||[],d=l.getElementsByTagName(\"a\")[0],!d||!d.style||!c.length)return b;f=Y.createElement(\"select\"),h=f.appendChild(Y.createElement(\"option\")),e=l.getElementsByTagName(\"input\")[0],d.style.cssText=\"top:1px;float:left;opacity:.5\",b.getSetAttribute=\"t\"!==l.className,b.leadingWhitespace=3===l.firstChild.nodeType,b.tbody=!l.getElementsByTagName(\"tbody\").length,b.htmlSerialize=!!l.getElementsByTagName(\"link\").length,b.style=/top/.test(d.getAttribute(\"style\")),b.hrefNormalized=\"/a\"===d.getAttribute(\"href\"),b.opacity=/^0.5/.test(d.style.opacity),b.cssFloat=!!d.style.cssFloat,b.checkOn=!!e.value,b.optSelected=h.selected,b.enctype=!!Y.createElement(\"form\").enctype,b.html5Clone=\"<:nav></:nav>\"!==Y.createElement(\"nav\").cloneNode(!0).outerHTML,b.inlineBlockNeedsLayout=!1,b.shrinkWrapBlocks=!1,b.pixelPosition=!1,b.deleteExpando=!0,b.noCloneEvent=!0,b.reliableMarginRight=!0,b.boxSizingReliable=!0,e.checked=!0,b.noCloneChecked=e.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!h.disabled;try{delete l.test}catch(m){b.deleteExpando=!1}e=Y.createElement(\"input\"),e.setAttribute(\"value\",\"\"),b.input=\"\"===e.getAttribute(\"value\"),e.value=\"t\",e.setAttribute(\"type\",\"radio\"),b.radioValue=\"t\"===e.value,e.setAttribute(\"checked\",\"t\"),e.setAttribute(\"name\",\"t\"),g=Y.createDocumentFragment(),g.appendChild(e),b.appendChecked=e.checked,b.checkClone=g.cloneNode(!0).cloneNode(!0).lastChild.checked,l.attachEvent&&(l.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),l.cloneNode(!0).click());for(k in{submit:!0,change:!0,focusin:!0})l.setAttribute(i=\"on\"+k,\"t\"),b[k+\"Bubbles\"]=i in a||l.attributes[i].expando===!1;l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",b.clearCloneStyle=\"content-box\"===l.style.backgroundClip;for(k in ka(b))break;return b.ownLast=\"0\"!==k,ka(function(){var c,d,e,f=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",g=Y.getElementsByTagName(\"body\")[0];g&&(c=Y.createElement(\"div\"),c.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",g.appendChild(c).appendChild(l),l.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",e=l.getElementsByTagName(\"td\"),e[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",j=0===e[0].offsetHeight,e[0].style.display=\"\",e[1].style.display=\"none\",b.reliableHiddenOffsets=j&&0===e[0].offsetHeight,l.innerHTML=\"\",l.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",ka.swap(g,null!=g.style.zoom?{zoom:1}:{},function(){b.boxSizing=4===l.offsetWidth}),a.getComputedStyle&&(b.pixelPosition=\"1%\"!==(a.getComputedStyle(l,null)||{}).top,b.boxSizingReliable=\"4px\"===(a.getComputedStyle(l,null)||{width:\"4px\"}).width,d=l.appendChild(Y.createElement(\"div\")),d.style.cssText=l.style.cssText=f,d.style.marginRight=d.style.width=\"0\",l.style.width=\"1px\",b.reliableMarginRight=!parseFloat((a.getComputedStyle(d,null)||{}).marginRight)),typeof l.style.zoom!==W&&(l.innerHTML=\"\",l.style.cssText=f+\"width:1px;padding:1px;display:inline;zoom:1\",b.inlineBlockNeedsLayout=3===l.offsetWidth,l.style.display=\"block\",l.innerHTML=\"<div></div>\",l.firstChild.style.width=\"5px\",b.shrinkWrapBlocks=3!==l.offsetWidth,b.inlineBlockNeedsLayout&&(g.style.zoom=1)),g.removeChild(c),c=l=e=d=null)}),c=f=g=h=d=e=null,b}({});var Aa=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,Ba=/([A-Z])/g;ka.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?ka.cache[a[ka.expando]]:a[ka.expando],!!a&&!h(a)},data:function(a,b,c){return e(a,b,c)},removeData:function(a,b){return f(a,b)},_data:function(a,b,c){return e(a,b,c,!0)},_removeData:function(a,b){return f(a,b,!0)},acceptData:function(a){if(a.nodeType&&1!==a.nodeType&&9!==a.nodeType)return!1;var b=a.nodeName&&ka.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute(\"classid\")===b}}),ka.fn.extend({data:function(a,c){var d,e,f=null,h=0,i=this[0];if(a===b){if(this.length&&(f=ka.data(i),1===i.nodeType&&!ka._data(i,\"parsedAttrs\"))){for(d=i.attributes;d.length>h;h++)e=d[h].name,0===e.indexOf(\"data-\")&&(e=ka.camelCase(e.slice(5)),g(i,e,f[e]));ka._data(i,\"parsedAttrs\",!0)}return f}return\"object\"==typeof a?this.each(function(){ka.data(this,a)}):arguments.length>1?this.each(function(){ka.data(this,a,c)}):i?g(i,a,ka.data(i,a)):null},removeData:function(a){return this.each(function(){ka.removeData(this,a)})}}),ka.extend({queue:function(a,c,d){var e;return a?(c=(c||\"fx\")+\"queue\",e=ka._data(a,c),d&&(!e||ka.isArray(d)?e=ka._data(a,c,ka.makeArray(d)):e.push(d)),e||[]):b},dequeue:function(a,b){b=b||\"fx\";var c=ka.queue(a,b),d=c.length,e=c.shift(),f=ka._queueHooks(a,b),g=function(){ka.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return ka._data(a,c)||ka._data(a,c,{empty:ka.Callbacks(\"once memory\").add(function(){ka._removeData(a,b+\"queue\"),ka._removeData(a,c)})})}}),ka.fn.extend({queue:function(a,c){var d=2;return\"string\"!=typeof a&&(c=a,a=\"fx\",d--),d>arguments.length?ka.queue(this[0],a):c===b?this:this.each(function(){var b=ka.queue(this,a,c);ka._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==b[0]&&ka.dequeue(this,a)})},dequeue:function(a){return this.each(function(){ka.dequeue(this,a)})},delay:function(a,b){return a=ka.fx?ka.fx.speeds[a]||a:a,b=b||\"fx\",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){var d,e=1,f=ka.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};for(\"string\"!=typeof a&&(c=a,a=b),a=a||\"fx\";h--;)d=ka._data(g[h],a+\"queueHooks\"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var Ca,Da,Ea=/[\\t\\r\\n\\f]/g,Fa=/\\r/g,Ga=/^(?:input|select|textarea|button|object)$/i,Ha=/^(?:a|area)$/i,Ia=/^(?:checked|selected)$/i,Ja=ka.support.getSetAttribute,Ka=ka.support.input;ka.fn.extend({attr:function(a,b){return ka.access(this,ka.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){ka.removeAttr(this,a)})},prop:function(a,b){return ka.access(this,ka.prop,a,b,arguments.length>1)},removeProp:function(a){return a=ka.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).addClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\" \")){for(f=0;e=b[f++];)0>d.indexOf(\" \"+e+\" \")&&(d+=e+\" \");c.className=ka.trim(d)}return this},removeClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=0===arguments.length||\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).removeClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\"\")){for(f=0;e=b[f++];)for(;d.indexOf(\" \"+e+\" \")>=0;)d=d.replace(\" \"+e+\" \",\" \");c.className=a?ka.trim(d):\"\"}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):ka.isFunction(a)?this.each(function(c){ka(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(\"string\"===c)for(var b,d=0,e=ka(this),f=a.match(ma)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===W||\"boolean\"===c)&&(this.className&&ka._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":ka._data(this,\"__className__\")||\"\")})},hasClass:function(a){for(var b=\" \"+a+\" \",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(\" \"+this[c].className+\" \").replace(Ea,\" \").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];return arguments.length?(e=ka.isFunction(a),this.each(function(c){var f;1===this.nodeType&&(f=e?a.call(this,c,ka(this).val()):a,null==f?f=\"\":\"number\"==typeof f?f+=\"\":ka.isArray(f)&&(f=ka.map(f,function(a){return null==a?\"\":a+\"\"})),d=ka.valHooks[this.type]||ka.valHooks[this.nodeName.toLowerCase()],d&&\"set\"in d&&d.set(this,f,\"value\")!==b||(this.value=f))})):f?(d=ka.valHooks[f.type]||ka.valHooks[f.nodeName.toLowerCase()],d&&\"get\"in d&&(c=d.get(f,\"value\"))!==b?c:(c=f.value,\"string\"==typeof c?c.replace(Fa,\"\"):null==c?\"\":c)):void 0}}),ka.extend({valHooks:{option:{get:function(a){var b=ka.find.attr(a,\"value\");return null!=b?b:a.text}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(ka.support.optDisabled?c.disabled:null!==c.getAttribute(\"disabled\"))||c.parentNode.disabled&&ka.nodeName(c.parentNode,\"optgroup\"))){if(b=ka(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=ka.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=ka.inArray(ka(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}},attr:function(a,c,d){var e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return typeof a.getAttribute===W?ka.prop(a,c,d):(1===g&&ka.isXMLDoc(a)||(c=c.toLowerCase(),e=ka.attrHooks[c]||(ka.expr.match.bool.test(c)?Da:Ca)),d===b?e&&\"get\"in e&&null!==(f=e.get(a,c))?f:(f=ka.find.attr(a,c),null==f?b:f):null!==d?e&&\"set\"in e&&(f=e.set(a,d,c))!==b?f:(a.setAttribute(c,d+\"\"),d):(ka.removeAttr(a,c),b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(ma);if(f&&1===a.nodeType)for(;c=f[e++];)d=ka.propFix[c]||c,ka.expr.match.bool.test(c)?Ka&&Ja||!Ia.test(c)?a[d]=!1:a[ka.camelCase(\"default-\"+c)]=a[d]=!1:ka.attr(a,c,\"\"),a.removeAttribute(Ja?c:d)},attrHooks:{type:{set:function(a,b){if(!ka.support.radioValue&&\"radio\"===b&&ka.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(a&&3!==h&&8!==h&&2!==h)return g=1!==h||!ka.isXMLDoc(a),g&&(c=ka.propFix[c]||c,f=ka.propHooks[c]),d!==b?f&&\"set\"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&\"get\"in f&&null!==(e=f.get(a,c))?e:a[c]},propHooks:{tabIndex:{get:function(a){var b=ka.find.attr(a,\"tabindex\");return b?parseInt(b,10):Ga.test(a.nodeName)||Ha.test(a.nodeName)&&a.href?0:-1}}}}),Da={set:function(a,b,c){return b===!1?ka.removeAttr(a,c):Ka&&Ja||!Ia.test(c)?a.setAttribute(!Ja&&ka.propFix[c]||c,c):a[ka.camelCase(\"default-\"+c)]=a[c]=!0,c}},ka.each(ka.expr.match.bool.source.match(/\\w+/g),function(a,c){var d=ka.expr.attrHandle[c]||ka.find.attr;ka.expr.attrHandle[c]=Ka&&Ja||!Ia.test(c)?function(a,c,e){var f=ka.expr.attrHandle[c],g=e?b:(ka.expr.attrHandle[c]=b)!=d(a,c,e)?c.toLowerCase():null;return ka.expr.attrHandle[c]=f,g}:function(a,c,d){return d?b:a[ka.camelCase(\"default-\"+c)]?c.toLowerCase():null}}),Ka&&Ja||(ka.attrHooks.value={set:function(a,c,d){return ka.nodeName(a,\"input\")?(a.defaultValue=c,b):Ca&&Ca.set(a,c,d)}}),Ja||(Ca={set:function(a,c,d){var e=a.getAttributeNode(d);return e||a.setAttributeNode(e=a.ownerDocument.createAttribute(d)),e.value=c+=\"\",\"value\"===d||c===a.getAttribute(d)?c:b}},ka.expr.attrHandle.id=ka.expr.attrHandle.name=ka.expr.attrHandle.coords=function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&\"\"!==e.value?e.value:null},ka.valHooks.button={get:function(a,c){var d=a.getAttributeNode(c);return d&&d.specified?d.value:b},set:Ca.set},ka.attrHooks.contenteditable={set:function(a,b,c){Ca.set(a,\"\"!==b&&b,c)}},ka.each([\"width\",\"height\"],function(a,c){ka.attrHooks[c]={set:function(a,d){return\"\"===d?(a.setAttribute(c,\"auto\"),d):b}}})),ka.support.hrefNormalized||ka.each([\"href\",\"src\"],function(a,b){ka.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),ka.support.style||(ka.attrHooks.style={get:function(a){return a.style.cssText||b},set:function(a,b){return a.style.cssText=b+\"\"}}),ka.support.optSelected||(ka.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),ka.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ka.propFix[this.toLowerCase()]=this}),ka.support.enctype||(ka.propFix.enctype=\"encoding\"),ka.each([\"radio\",\"checkbox\"],function(){ka.valHooks[this]={set:function(a,c){return ka.isArray(c)?a.checked=ka.inArray(ka(a).val(),c)>=0:b}},ka.support.checkOn||(ka.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var La=/^(?:input|select|textarea)$/i,Ma=/^key/,Na=/^(?:mouse|contextmenu)|click/,Oa=/^(?:focusinfocus|focusoutblur)$/,Pa=/^([^.]*)(?:\\.(.+)|)$/;ka.event={global:{},add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r=ka._data(a);if(r){for(d.handler&&(j=d,d=j.handler,f=j.selector),d.guid||(d.guid=ka.guid++),(h=r.events)||(h=r.events={}),(l=r.handle)||(l=r.handle=function(a){return typeof ka===W||a&&ka.event.triggered===a.type?b:ka.event.dispatch.apply(l.elem,arguments)},l.elem=a),c=(c||\"\").match(ma)||[\"\"],i=c.length;i--;)g=Pa.exec(c[i])||[],o=q=g[1],p=(g[2]||\"\").split(\".\").sort(),o&&(k=ka.event.special[o]||{},o=(f?k.delegateType:k.bindType)||o,k=ka.event.special[o]||{},m=ka.extend({type:o,origType:q,data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&ka.expr.match.needsContext.test(f),namespace:p.join(\".\")},j),(n=h[o])||(n=h[o]=[],n.delegateCount=0,k.setup&&k.setup.call(a,e,p,l)!==!1||(a.addEventListener?a.addEventListener(o,l,!1):a.attachEvent&&a.attachEvent(\"on\"+o,l))),k.add&&(k.add.call(a,m),m.handler.guid||(m.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,m):n.push(m),ka.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ka.hasData(a)&&ka._data(a);if(q&&(k=q.events)){for(b=(b||\"\").match(ma)||[\"\"],j=b.length;j--;)if(h=Pa.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){for(l=ka.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=k[n]||[],h=h[2]&&RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=m.length;f--;)g=m[f],!e&&p!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||ka.removeEvent(a,n,q.handle),delete k[n])}else for(n in k)ka.event.remove(a,n+b[j],c,d,!0);ka.isEmptyObject(k)&&(delete q.handle,ka._removeData(a,\"events\"))}},trigger:function(c,d,e,f){var g,h,i,j,k,l,m,n=[e||Y],o=ia.call(c,\"type\")?c.type:c,p=ia.call(c,\"namespace\")?c.namespace.split(\".\"):[];if(i=l=e=e||Y,3!==e.nodeType&&8!==e.nodeType&&!Oa.test(o+ka.event.triggered)&&(o.indexOf(\".\")>=0&&(p=o.split(\".\"),o=p.shift(),p.sort()),h=0>o.indexOf(\":\")&&\"on\"+o,c=c[ka.expando]?c:new ka.Event(o,\"object\"==typeof c&&c),c.isTrigger=f?2:3,c.namespace=p.join(\".\"),c.namespace_re=c.namespace?RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,c.result=b,c.target||(c.target=e),d=null==d?[c]:ka.makeArray(d,[c]),k=ka.event.special[o]||{},f||!k.trigger||k.trigger.apply(e,d)!==!1)){if(!f&&!k.noBubble&&!ka.isWindow(e)){for(j=k.delegateType||o,Oa.test(j+o)||(i=i.parentNode);i;i=i.parentNode)n.push(i),l=i;l===(e.ownerDocument||Y)&&n.push(l.defaultView||l.parentWindow||a)}for(m=0;(i=n[m++])&&!c.isPropagationStopped();)c.type=m>1?j:k.bindType||o,g=(ka._data(i,\"events\")||{})[c.type]&&ka._data(i,\"handle\"),g&&g.apply(i,d),g=h&&i[h],g&&ka.acceptData(i)&&g.apply&&g.apply(i,d)===!1&&c.preventDefault();if(c.type=o,!f&&!c.isDefaultPrevented()&&(!k._default||k._default.apply(n.pop(),d)===!1)&&ka.acceptData(e)&&h&&e[o]&&!ka.isWindow(e)){l=e[h],l&&(e[h]=null),ka.event.triggered=o;try{e[o]()}catch(q){}ka.event.triggered=b,l&&(e[h]=l)}return c.result}},dispatch:function(a){a=ka.event.fix(a);var c,d,e,f,g,h=[],i=fa.call(arguments),j=(ka._data(this,\"events\")||{})[a.type]||[],k=ka.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){for(h=ka.event.handlers.call(this,a,j),c=0;(f=h[c++])&&!a.isPropagationStopped();)for(a.currentTarget=f.elem,g=0;(e=f.handlers[g++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,d=((ka.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),d!==b&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,c){var d,e,f,g,h=[],i=c.delegateCount,j=a.target;if(i&&j.nodeType&&(!a.button||\"click\"!==a.type))for(;j!=this;j=j.parentNode||this)if(1===j.nodeType&&(j.disabled!==!0||\"click\"!==a.type)){for(f=[],g=0;i>g;g++)e=c[g],d=e.selector+\" \",f[d]===b&&(f[d]=e.needsContext?ka(d,this).index(j)>=0:ka.find(d,this,null,[j]).length),f[d]&&f.push(e);f.length&&h.push({elem:j,handlers:f})}return c.length>i&&h.push({elem:this,handlers:c.slice(i)}),h},fix:function(a){if(a[ka.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Na.test(e)?this.mouseHooks:Ma.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new ka.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||Y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,c){var d,e,f,g=c.button,h=c.fromElement;return null==a.pageX&&null!=c.clientX&&(e=a.target.ownerDocument||Y,f=e.documentElement,d=e.body,a.pageX=c.clientX+(f&&f.scrollLeft||d&&d.scrollLeft||0)-(f&&f.clientLeft||d&&d.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||d&&d.scrollTop||0)-(f&&f.clientTop||d&&d.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?c.toElement:h),a.which||g===b||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===k()&&this.blur?(this.blur(),!1):b},delegateType:\"focusout\"},click:{trigger:function(){return ka.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):b},_default:function(a){return ka.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){a.result!==b&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=ka.extend(new ka.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?ka.event.trigger(e,null,b):ka.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},ka.removeEvent=Y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d=\"on\"+b;a.detachEvent&&(typeof a[d]===W&&(a[d]=null),a.detachEvent(d,c))},ka.Event=function(a,c){return this instanceof ka.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?i:j):this.type=a,c&&ka.extend(this,c),this.timeStamp=a&&a.timeStamp||ka.now(),this[ka.expando]=!0,b):new ka.Event(a,c)},ka.Event.prototype={isDefaultPrevented:j,isPropagationStopped:j,isImmediatePropagationStopped:j,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=i,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=i,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i,this.stopPropagation()}},ka.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){ka.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!ka.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),ka.support.submitBubbles||(ka.event.special.submit={setup:function(){return!ka.nodeName(this,\"form\")&&(ka.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=ka.nodeName(c,\"input\")||ka.nodeName(c,\"button\")?c.form:b;d&&!ka._data(d,\"submitBubbles\")&&(ka.event.add(d,\"submit._submit\",function(a){a._submit_bubble=!0}),ka._data(d,\"submitBubbles\",!0))}),b)},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&ka.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){return!ka.nodeName(this,\"form\")&&(ka.event.remove(this,\"._submit\"),b)}}),ka.support.changeBubbles||(ka.event.special.change={setup:function(){return La.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(ka.event.add(this,\"propertychange._change\",function(a){\"checked\"===a.originalEvent.propertyName&&(this._just_changed=!0)}),ka.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),ka.event.simulate(\"change\",this,a,!0)})),!1):(ka.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;La.test(b.nodeName)&&!ka._data(b,\"changeBubbles\")&&(ka.event.add(b,\"change._change\",function(a){!this.parentNode||a.isSimulated||a.isTrigger||ka.event.simulate(\"change\",this.parentNode,a,!0)}),ka._data(b,\"changeBubbles\",!0))}),b)},handle:function(a){var c=a.target;return this!==c||a.isSimulated||a.isTrigger||\"radio\"!==c.type&&\"checkbox\"!==c.type?a.handleObj.handler.apply(this,arguments):b},teardown:function(){return ka.event.remove(this,\"._change\"),!La.test(this.nodeName)}}),ka.support.focusinBubbles||ka.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=0,d=function(a){ka.event.simulate(b,a.target,ka.event.fix(a),!0)};ka.event.special[b]={setup:function(){0===c++&&Y.addEventListener(a,d,!0)},teardown:function(){0===--c&&Y.removeEventListener(a,d,!0)}}}),ka.fn.extend({on:function(a,c,d,e,f){var g,h;if(\"object\"==typeof a){\"string\"!=typeof c&&(d=d||c,c=b);for(g in a)this.on(g,c,d,a[g],f);return this}if(null==d&&null==e?(e=c,d=c=b):null==e&&(\"string\"==typeof c?(e=d,d=b):(e=d,d=c,c=b)),e===!1)e=j;else if(!e)return this;return 1===f&&(h=e,e=function(a){return ka().off(a),h.apply(this,arguments)},e.guid=h.guid||(h.guid=ka.guid++)),this.each(function(){ka.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,ka(a.delegateTarget).off(e.namespace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler),this;if(\"object\"==typeof a){for(f in a)this.off(f,c,a[f]);return this}return(c===!1||\"function\"==typeof c)&&(d=c,c=b),d===!1&&(d=j),this.each(function(){ka.event.remove(this,a,d,c)})},trigger:function(a,b){return this.each(function(){ka.event.trigger(a,b,this)})},triggerHandler:function(a,c){var d=this[0];return d?ka.event.trigger(a,c,d,!0):b}});var Qa=/^.[^:#\\[\\.,]*$/,Ra=/^(?:parents|prev(?:Until|All))/,Sa=ka.expr.match.needsContext,Ta={children:!0,contents:!0,next:!0,prev:!0};ka.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(ka(a).filter(function(){for(b=0;e>b;b++)if(ka.contains(d[b],this))return!0}));for(b=0;e>b;b++)ka.find(a,d[b],c);return c=this.pushStack(e>1?ka.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},has:function(a){var b,c=ka(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(ka.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(m(this,a||[],!0))},filter:function(a){return this.pushStack(m(this,a||[],!1))},is:function(a){return!!m(this,\"string\"==typeof a&&Sa.test(a)?ka(a):a||[],!1).length},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=Sa.test(a)||\"string\"!=typeof a?ka(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(11>c.nodeType&&(g?g.index(c)>-1:1===c.nodeType&&ka.find.matchesSelector(c,a))){c=f.push(c);break}return this.pushStack(f.length>1?ka.unique(f):f)},index:function(a){return a?\"string\"==typeof a?ka.inArray(this[0],ka(a)):ka.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){var c=\"string\"==typeof a?ka(a,b):ka.makeArray(a&&a.nodeType?[a]:a),d=ka.merge(this.get(),c);return this.pushStack(ka.unique(d))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),ka.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return ka.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return ka.dir(a,\"parentNode\",c)},next:function(a){return l(a,\"nextSibling\")},prev:function(a){return l(a,\"previousSibling\")},nextAll:function(a){return ka.dir(a,\"nextSibling\");\n},prevAll:function(a){return ka.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return ka.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return ka.dir(a,\"previousSibling\",c)},siblings:function(a){return ka.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return ka.sibling(a.firstChild)},contents:function(a){return ka.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:ka.merge([],a.childNodes)}},function(a,b){ka.fn[a]=function(c,d){var e=ka.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=ka.filter(d,e)),this.length>1&&(Ta[a]||(e=ka.unique(e)),Ra.test(a)&&(e=e.reverse())),this.pushStack(e)}}),ka.extend({filter:function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?ka.find.matchesSelector(d,a)?[d]:[]:ka.find.matches(a,ka.grep(b,function(a){return 1===a.nodeType}))},dir:function(a,c,d){for(var e=[],f=a[c];f&&9!==f.nodeType&&(d===b||1!==f.nodeType||!ka(f).is(d));)1===f.nodeType&&e.push(f),f=f[c];return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var Ua=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",Va=/ jQuery\\d+=\"(?:null|\\d+)\"/g,Wa=RegExp(\"<(?:\"+Ua+\")[\\\\s/>]\",\"i\"),Xa=/^\\s+/,Ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,Za=/<([\\w:]+)/,$a=/<tbody/i,_a=/<|&#?\\w+;/,ab=/<(?:script|style|link)/i,bb=/^(?:checkbox|radio)$/i,cb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,db=/^$|\\/(?:java|ecma)script/i,eb=/^true\\/(.*)/,fb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,gb={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:ka.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},hb=n(Y),ib=hb.appendChild(Y.createElement(\"div\"));gb.optgroup=gb.option,gb.tbody=gb.tfoot=gb.colgroup=gb.caption=gb.thead,gb.th=gb.td,ka.fn.extend({text:function(a){return ka.access(this,function(a){return a===b?ka.text(this):this.empty().append((this[0]&&this[0].ownerDocument||Y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?ka.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||ka.cleanData(u(c)),c.parentNode&&(b&&ka.contains(c.ownerDocument,c)&&r(u(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&ka.cleanData(u(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&ka.nodeName(a,\"select\")&&(a.options.length=0)}return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return ka.clone(this,a,b)})},html:function(a){return ka.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return 1===c.nodeType?c.innerHTML.replace(Va,\"\"):b;if(!(\"string\"!=typeof a||ab.test(a)||!ka.support.htmlSerialize&&Wa.test(a)||!ka.support.leadingWhitespace&&Xa.test(a)||gb[(Za.exec(a)||[\"\",\"\"])[1].toLowerCase()])){a=a.replace(Ya,\"<$1></$2>\");try{for(;e>d;d++)c=this[d]||{},1===c.nodeType&&(ka.cleanData(u(c,!1)),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=ka.map(this,function(a){return[a.nextSibling,a.parentNode]}),b=0;return this.domManip(arguments,function(c){var d=a[b++],e=a[b++];e&&(d&&d.parentNode!==e&&(d=this.nextSibling),ka(this).remove(),e.insertBefore(c,d))},!0),b?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b,c){a=da.apply([],a);var d,e,f,g,h,i,j=0,k=this.length,l=this,m=k-1,n=a[0],o=ka.isFunction(n);if(o||!(1>=k||\"string\"!=typeof n||ka.support.checkClone)&&cb.test(n))return this.each(function(d){var e=l.eq(d);o&&(a[0]=n.call(this,d,e.html())),e.domManip(a,b,c)});if(k&&(i=ka.buildFragment(a,this[0].ownerDocument,!1,!c&&this),d=i.firstChild,1===i.childNodes.length&&(i=d),d)){for(g=ka.map(u(i,\"script\"),p),f=g.length;k>j;j++)e=i,j!==m&&(e=ka.clone(e,!0,!0),f&&ka.merge(g,u(e,\"script\"))),b.call(this[j],e,j);if(f)for(h=g[g.length-1].ownerDocument,ka.map(g,q),j=0;f>j;j++)e=g[j],db.test(e.type||\"\")&&!ka._data(e,\"globalEval\")&&ka.contains(h,e)&&(e.src?ka._evalUrl(e.src):ka.globalEval((e.text||e.textContent||e.innerHTML||\"\").replace(fb,\"\")));i=d=null}return this}}),ka.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){ka.fn[a]=function(a){for(var c,d=0,e=[],f=ka(a),g=f.length-1;g>=d;d++)c=d===g?this:this.clone(!0),ka(f[d])[b](c),ea.apply(e,c.get());return this.pushStack(e)}}),ka.extend({clone:function(a,b,c){var d,e,f,g,h,i=ka.contains(a.ownerDocument,a);if(ka.support.html5Clone||ka.isXMLDoc(a)||!Wa.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(ib.innerHTML=a.outerHTML,ib.removeChild(f=ib.firstChild)),!(ka.support.noCloneEvent&&ka.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||ka.isXMLDoc(a)))for(d=u(f),h=u(a),g=0;null!=(e=h[g]);++g)d[g]&&t(e,d[g]);if(b)if(c)for(h=h||u(a),d=d||u(f),g=0;null!=(e=h[g]);g++)s(e,d[g]);else s(a,f);return d=u(f,\"script\"),d.length>0&&r(d,!i&&u(a,\"script\")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,l=a.length,m=n(b),o=[],p=0;l>p;p++)if(f=a[p],f||0===f)if(\"object\"===ka.type(f))ka.merge(o,f.nodeType?[f]:f);else if(_a.test(f)){for(h=h||m.appendChild(b.createElement(\"div\")),i=(Za.exec(f)||[\"\",\"\"])[1].toLowerCase(),k=gb[i]||gb._default,h.innerHTML=k[1]+f.replace(Ya,\"<$1></$2>\")+k[2],e=k[0];e--;)h=h.lastChild;if(!ka.support.leadingWhitespace&&Xa.test(f)&&o.push(b.createTextNode(Xa.exec(f)[0])),!ka.support.tbody)for(f=\"table\"!==i||$a.test(f)?\"<table>\"!==k[1]||$a.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;e--;)ka.nodeName(j=f.childNodes[e],\"tbody\")&&!j.childNodes.length&&f.removeChild(j);for(ka.merge(o,h.childNodes),h.textContent=\"\";h.firstChild;)h.removeChild(h.firstChild);h=m.lastChild}else o.push(b.createTextNode(f));for(h&&m.removeChild(h),ka.support.appendChecked||ka.grep(u(o,\"input\"),v),p=0;f=o[p++];)if((!d||-1===ka.inArray(f,d))&&(g=ka.contains(f.ownerDocument,f),h=u(m.appendChild(f),\"script\"),g&&r(h),c))for(e=0;f=h[e++];)db.test(f.type||\"\")&&c.push(f);return h=null,m},cleanData:function(a,b){for(var c,d,e,f,g=0,h=ka.expando,i=ka.cache,j=ka.support.deleteExpando,k=ka.event.special;null!=(c=a[g]);g++)if((b||ka.acceptData(c))&&(e=c[h],f=e&&i[e])){if(f.events)for(d in f.events)k[d]?ka.event.remove(c,d):ka.removeEvent(c,d,f.handle);i[e]&&(delete i[e],j?delete c[h]:typeof c.removeAttribute!==W?c.removeAttribute(h):c[h]=null,ba.push(e))}},_evalUrl:function(a){return ka.ajax({url:a,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),ka.fn.extend({wrapAll:function(a){if(ka.isFunction(a))return this.each(function(b){ka(this).wrapAll(a.call(this,b))});if(this[0]){var b=ka(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return ka.isFunction(a)?this.each(function(b){ka(this).wrapInner(a.call(this,b))}):this.each(function(){var b=ka(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=ka.isFunction(a);return this.each(function(c){ka(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){ka.nodeName(this,\"body\")||ka(this).replaceWith(this.childNodes)}).end()}});var jb,kb,lb,mb=/alpha\\([^)]*\\)/i,nb=/opacity\\s*=\\s*([^)]*)/,ob=/^(top|right|bottom|left)$/,pb=/^(none|table(?!-c[ea]).+)/,qb=/^margin/,rb=RegExp(\"^(\"+la+\")(.*)$\",\"i\"),sb=RegExp(\"^(\"+la+\")(?!px)[a-z%]+$\",\"i\"),tb=RegExp(\"^([+-])=(\"+la+\")\",\"i\"),ub={BODY:\"block\"},vb={position:\"absolute\",visibility:\"hidden\",display:\"block\"},wb={letterSpacing:0,fontWeight:400},xb=[\"Top\",\"Right\",\"Bottom\",\"Left\"],yb=[\"Webkit\",\"O\",\"Moz\",\"ms\"];ka.fn.extend({css:function(a,c){return ka.access(this,function(a,c,d){var e,f,g={},h=0;if(ka.isArray(c)){for(f=kb(a),e=c.length;e>h;h++)g[c[h]]=ka.css(a,c[h],!1,f);return g}return d!==b?ka.style(a,c,d):ka.css(a,c)},a,c,arguments.length>1)},show:function(){return y(this,!0)},hide:function(){return y(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){x(this)?ka(this).show():ka(this).hide()})}}),ka.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=lb(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":ka.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=ka.camelCase(c),j=a.style;if(c=ka.cssProps[i]||(ka.cssProps[i]=w(j,i)),h=ka.cssHooks[c]||ka.cssHooks[i],d===b)return h&&\"get\"in h&&(f=h.get(a,!1,e))!==b?f:j[c];if(g=typeof d,\"string\"===g&&(f=tb.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(ka.css(a,c)),g=\"number\"),!(null==d||\"number\"===g&&isNaN(d)||(\"number\"!==g||ka.cssNumber[i]||(d+=\"px\"),ka.support.clearCloneStyle||\"\"!==d||0!==c.indexOf(\"background\")||(j[c]=\"inherit\"),h&&\"set\"in h&&(d=h.set(a,d,e))===b)))try{j[c]=d}catch(k){}}},css:function(a,c,d,e){var f,g,h,i=ka.camelCase(c);return c=ka.cssProps[i]||(ka.cssProps[i]=w(a.style,i)),h=ka.cssHooks[c]||ka.cssHooks[i],h&&\"get\"in h&&(g=h.get(a,!0,d)),g===b&&(g=lb(a,c,e)),\"normal\"===g&&c in wb&&(g=wb[c]),\"\"===d||d?(f=parseFloat(g),d===!0||ka.isNumeric(f)?f||0:g):g}}),a.getComputedStyle?(kb=function(b){return a.getComputedStyle(b,null)},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(\"\"!==i||ka.contains(a.ownerDocument,a)||(i=ka.style(a,c)),sb.test(i)&&qb.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i}):Y.documentElement.currentStyle&&(kb=function(a){return a.currentStyle},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h[c]:b,j=a.style;return null==i&&j&&j[c]&&(i=j[c]),sb.test(i)&&!ob.test(c)&&(e=j.left,f=a.runtimeStyle,g=f&&f.left,g&&(f.left=a.currentStyle.left),j.left=\"fontSize\"===c?\"1em\":i,i=j.pixelLeft+\"px\",j.left=e,g&&(f.left=g)),\"\"===i?\"auto\":i}),ka.each([\"height\",\"width\"],function(a,c){ka.cssHooks[c]={get:function(a,d,e){return d?0===a.offsetWidth&&pb.test(ka.css(a,\"display\"))?ka.swap(a,vb,function(){return B(a,c,e)}):B(a,c,e):b},set:function(a,b,d){var e=d&&kb(a);return z(a,b,d?A(a,c,d,ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,e),e):0)}}}),ka.support.opacity||(ka.cssHooks.opacity={get:function(a,b){return nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=ka.isNumeric(b)?\"alpha(opacity=\"+100*b+\")\":\"\",f=d&&d.filter||c.filter||\"\";c.zoom=1,(b>=1||\"\"===b)&&\"\"===ka.trim(f.replace(mb,\"\"))&&c.removeAttribute&&(c.removeAttribute(\"filter\"),\"\"===b||d&&!d.filter)||(c.filter=mb.test(f)?f.replace(mb,e):f+\" \"+e)}}),ka(function(){ka.support.reliableMarginRight||(ka.cssHooks.marginRight={get:function(a,c){return c?ka.swap(a,{display:\"inline-block\"},lb,[a,\"marginRight\"]):b}}),!ka.support.pixelPosition&&ka.fn.position&&ka.each([\"top\",\"left\"],function(a,c){ka.cssHooks[c]={get:function(a,d){return d?(d=lb(a,c),sb.test(d)?ka(a).position()[c]+\"px\":d):b}}})}),ka.expr&&ka.expr.filters&&(ka.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!ka.support.reliableHiddenOffsets&&\"none\"===(a.style&&a.style.display||ka.css(a,\"display\"))},ka.expr.filters.visible=function(a){return!ka.expr.filters.hidden(a)}),ka.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){ka.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+xb[d]+b]=f[d]||f[d-2]||f[0];return e}},qb.test(a)||(ka.cssHooks[a+b].set=z)});var zb=/%20/g,Ab=/\\[\\]$/,Bb=/\\r?\\n/g,Cb=/^(?:submit|button|image|reset|file)$/i,Db=/^(?:input|select|textarea|keygen)/i;ka.fn.extend({serialize:function(){return ka.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=ka.prop(this,\"elements\");return a?ka.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!ka(this).is(\":disabled\")&&Db.test(this.nodeName)&&!Cb.test(a)&&(this.checked||!bb.test(a))}).map(function(a,b){var c=ka(this).val();return null==c?null:ka.isArray(c)?ka.map(c,function(a){return{name:b.name,value:a.replace(Bb,\"\\r\\n\")}}):{name:b.name,value:c.replace(Bb,\"\\r\\n\")}}).get()}}),ka.param=function(a,c){var d,e=[],f=function(a,b){b=ka.isFunction(b)?b():null==b?\"\":b,e[e.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(c===b&&(c=ka.ajaxSettings&&ka.ajaxSettings.traditional),ka.isArray(a)||a.jquery&&!ka.isPlainObject(a))ka.each(a,function(){f(this.name,this.value)});else for(d in a)E(d,a[d],c,f);return e.join(\"&\").replace(zb,\"+\")},ka.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){ka.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),ka.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}});var Eb,Fb,Gb=ka.now(),Hb=/\\?/,Ib=/#.*$/,Jb=/([?&])_=[^&]*/,Kb=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Lb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mb=/^(?:GET|HEAD)$/,Nb=/^\\/\\//,Ob=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Pb=ka.fn.load,Qb={},Rb={},Sb=\"*/\".concat(\"*\");try{Fb=X.href}catch(Tb){Fb=Y.createElement(\"a\"),Fb.href=\"\",Fb=Fb.href}Eb=Ob.exec(Fb.toLowerCase())||[],ka.fn.load=function(a,c,d){if(\"string\"!=typeof a&&Pb)return Pb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(\" \");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),ka.isFunction(c)?(d=c,c=b):c&&\"object\"==typeof c&&(g=\"POST\"),h.length>0&&ka.ajax({url:a,type:g,dataType:\"html\",data:c}).done(function(a){f=arguments,h.html(e?ka(\"<div>\").append(ka.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,f||[a.responseText,b,a])}),this},ka.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){ka.fn[b]=function(a){return this.on(b,a)}}),ka.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Fb,type:\"GET\",isLocal:Lb.test(Eb[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Sb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ka.parseJSON,\"text xml\":ka.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?H(H(a,ka.ajaxSettings),b):H(ka.ajaxSettings,a)},ajaxPrefilter:F(Qb),ajaxTransport:F(Rb),ajax:function(a,c){function d(a,c,d,e){var f,l,s,t,v,x=c;2!==u&&(u=2,i&&clearTimeout(i),k=b,h=e||\"\",w.readyState=a>0?4:0,f=a>=200&&300>a||304===a,d&&(t=I(m,w,d)),t=J(m,t,w,f),f?(m.ifModified&&(v=w.getResponseHeader(\"Last-Modified\"),v&&(ka.lastModified[g]=v),v=w.getResponseHeader(\"etag\"),v&&(ka.etag[g]=v)),204===a||\"HEAD\"===m.type?x=\"nocontent\":304===a?x=\"notmodified\":(x=t.state,l=t.data,s=t.error,f=!s)):(s=x,(a||!x)&&(x=\"error\",0>a&&(a=0))),w.status=a,w.statusText=(c||x)+\"\",f?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=b,j&&o.trigger(f?\"ajaxSuccess\":\"ajaxError\",[w,m,f?l:s]),q.fireWith(n,[w,x]),j&&(o.trigger(\"ajaxComplete\",[w,m]),--ka.active||ka.event.trigger(\"ajaxStop\")))}\"object\"==typeof a&&(c=a,a=b),c=c||{};var e,f,g,h,i,j,k,l,m=ka.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?ka(n):ka.event,p=ka.Deferred(),q=ka.Callbacks(\"once memory\"),r=m.statusCode||{},s={},t={},u=0,v=\"canceled\",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!l)for(l={};b=Kb.exec(h);)l[b[1].toLowerCase()]=b[2];b=l[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?h:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return k&&k.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((a||m.url||Fb)+\"\").replace(Ib,\"\").replace(Nb,Eb[1]+\"//\"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=ka.trim(m.dataType||\"*\").toLowerCase().match(ma)||[\"\"],null==m.crossDomain&&(e=Ob.exec(m.url.toLowerCase()),m.crossDomain=!(!e||e[1]===Eb[1]&&e[2]===Eb[2]&&(e[3]||(\"http:\"===e[1]?\"80\":\"443\"))===(Eb[3]||(\"http:\"===Eb[1]?\"80\":\"443\")))),m.data&&m.processData&&\"string\"!=typeof m.data&&(m.data=ka.param(m.data,m.traditional)),G(Qb,m,c,w),2===u)return w;j=m.global,j&&0===ka.active++&&ka.event.trigger(\"ajaxStart\"),m.type=m.type.toUpperCase(),m.hasContent=!Mb.test(m.type),g=m.url,m.hasContent||(m.data&&(g=m.url+=(Hb.test(g)?\"&\":\"?\")+m.data,delete m.data),m.cache===!1&&(m.url=Jb.test(g)?g.replace(Jb,\"$1_=\"+Gb++):g+(Hb.test(g)?\"&\":\"?\")+\"_=\"+Gb++)),m.ifModified&&(ka.lastModified[g]&&w.setRequestHeader(\"If-Modified-Since\",ka.lastModified[g]),ka.etag[g]&&w.setRequestHeader(\"If-None-Match\",ka.etag[g])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader(\"Content-Type\",m.contentType),w.setRequestHeader(\"Accept\",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+(\"*\"!==m.dataTypes[0]?\", \"+Sb+\"; q=0.01\":\"\"):m.accepts[\"*\"]);for(f in m.headers)w.setRequestHeader(f,m.headers[f]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v=\"abort\";for(f in{success:1,error:1,complete:1})w[f](m[f]);if(k=G(Rb,m,c,w)){w.readyState=1,j&&o.trigger(\"ajaxSend\",[w,m]),m.async&&m.timeout>0&&(i=setTimeout(function(){w.abort(\"timeout\")},m.timeout));try{u=1,k.send(s,d)}catch(x){if(!(2>u))throw x;d(-1,x)}}else d(-1,\"No Transport\");return w},getJSON:function(a,b,c){return ka.get(a,b,c,\"json\")},getScript:function(a,c){return ka.get(a,b,c,\"script\")}}),ka.each([\"get\",\"post\"],function(a,c){ka[c]=function(a,d,e,f){return ka.isFunction(d)&&(f=f||e,e=d,d=b),ka.ajax({url:a,type:c,dataType:f,data:d,success:e})}}),ka.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(a){return ka.globalEval(a),a}}}),ka.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),ka.ajaxTransport(\"script\",function(a){if(a.crossDomain){var c,d=Y.head||ka(\"head\")[0]||Y.documentElement;return{send:function(b,e){c=Y.createElement(\"script\"),c.async=!0,a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,b){(b||!c.readyState||/loaded|complete/.test(c.readyState))&&(c.onload=c.onreadystatechange=null,c.parentNode&&c.parentNode.removeChild(c),c=null,b||e(200,\"success\"))},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(b,!0)}}}});var Ub=[],Vb=/(=)\\?(?=&|$)|\\?\\?/;ka.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Ub.pop()||ka.expando+\"_\"+Gb++;return this[a]=!0,a}}),ka.ajaxPrefilter(\"json jsonp\",function(c,d,e){var f,g,h,i=c.jsonp!==!1&&(Vb.test(c.url)?\"url\":\"string\"==typeof c.data&&!(c.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Vb.test(c.data)&&\"data\");return i||\"jsonp\"===c.dataTypes[0]?(f=c.jsonpCallback=ka.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,i?c[i]=c[i].replace(Vb,\"$1\"+f):c.jsonp!==!1&&(c.url+=(Hb.test(c.url)?\"&\":\"?\")+c.jsonp+\"=\"+f),c.converters[\"script json\"]=function(){return h||ka.error(f+\" was not called\"),h[0]},c.dataTypes[0]=\"json\",g=a[f],a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,Ub.push(f)),h&&ka.isFunction(g)&&g(h[0]),h=g=b}),\"script\"):b});var Wb,Xb,Yb=0,Zb=a.ActiveXObject&&function(){var a;for(a in Wb)Wb[a](b,!0)};ka.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&K()||L()}:K,Xb=ka.ajaxSettings.xhr(),ka.support.cors=!!Xb&&\"withCredentials\"in Xb,Xb=ka.support.ajax=!!Xb,Xb&&ka.ajaxTransport(function(c){if(!c.crossDomain||ka.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();if(c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async),c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),c.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l;try{if(d&&(e||4===i.readyState))if(d=b,g&&(i.onreadystatechange=ka.noop,Zb&&delete Wb[g]),e)4!==i.readyState&&i.abort();else{l={},h=i.status,j=i.getAllResponseHeaders(),\"string\"==typeof i.responseText&&(l.text=i.responseText);try{k=i.statusText}catch(m){k=\"\"}h||!c.isLocal||c.crossDomain?1223===h&&(h=204):h=l.text?200:404}}catch(n){e||f(-1,n)}l&&f(h,k,l,j)},c.async?4===i.readyState?setTimeout(d):(g=++Yb,Zb&&(Wb||(Wb={},ka(a).unload(Zb)),Wb[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(b,!0)}}}});var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=RegExp(\"^(?:([+-])=|)(\"+la+\")([a-z%]*)$\",\"i\"),cc=/queueHooks$/,dc=[Q],ec={\"*\":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(ka.cssNumber[a]?\"\":\"px\"),g=(ka.cssNumber[a]||\"px\"!==f&&+d)&&bc.exec(ka.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||\".5\",g/=h,ka.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};ka.Animation=ka.extend(O,{tweener:function(a,b){ka.isFunction(a)?(b=a,a=[\"*\"]):a=a.split(\" \");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),ka.Tween=R,R.prototype={constructor:R,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||\"swing\",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(ka.cssNumber[c]?\"\":\"px\")},cur:function(){var a=R.propHooks[this.prop];return a&&a.get?a.get(this):R.propHooks._default.get(this)},run:function(a){var b,c=R.propHooks[this.prop];return this.pos=b=this.options.duration?ka.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=ka.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0):a.elem[a.prop]},set:function(a){ka.fx.step[a.prop]?ka.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[ka.cssProps[a.prop]]||ka.cssHooks[a.prop])?ka.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},ka.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=ka.fn[b];ka.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(S(b,!0),a,d,e)}}),ka.fn.extend({fadeTo:function(a,b,c,d){return this.filter(x).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=ka.isEmptyObject(a),f=ka.speed(b,c,d),g=function(){var b=O(this,ka.extend({},a),f);(e||ka._data(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return\"string\"!=typeof a&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,c=null!=a&&a+\"queueHooks\",f=ka.timers,g=ka._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cc.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem!==this||null!=a&&f[c].queue!==a||(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&ka.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=ka._data(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=ka.timers,g=d?d.length:0;for(c.finish=!0,ka.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),ka.each({slideDown:S(\"show\"),slideUp:S(\"hide\"),slideToggle:S(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){ka.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),ka.speed=function(a,b,c){var d=a&&\"object\"==typeof a?ka.extend({},a):{complete:c||!c&&b||ka.isFunction(a)&&a,duration:a,easing:c&&b||b&&!ka.isFunction(b)&&b};return d.duration=ka.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in ka.fx.speeds?ka.fx.speeds[d.duration]:ka.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){ka.isFunction(d.old)&&d.old.call(this),d.queue&&ka.dequeue(this,d.queue)},d},ka.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},ka.timers=[],ka.fx=R.prototype.init,ka.fx.tick=function(){var a,c=ka.timers,d=0;for($b=ka.now();c.length>d;d++)a=c[d],a()||c[d]!==a||c.splice(d--,1);c.length||ka.fx.stop(),$b=b},ka.fx.timer=function(a){a()&&ka.timers.push(a)&&ka.fx.start()},ka.fx.interval=13,ka.fx.start=function(){_b||(_b=setInterval(ka.fx.tick,ka.fx.interval))},ka.fx.stop=function(){clearInterval(_b),_b=null},ka.fx.speeds={slow:600,fast:200,_default:400},ka.fx.step={},ka.expr&&ka.expr.filters&&(ka.expr.filters.animated=function(a){return ka.grep(ka.timers,function(b){return a===b.elem}).length}),ka.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){ka.offset.setOffset(this,a,b)});var c,d,e={top:0,left:0},f=this[0],g=f&&f.ownerDocument;return g?(c=g.documentElement,ka.contains(c,f)?(typeof f.getBoundingClientRect!==W&&(e=f.getBoundingClientRect()),d=T(g),{top:e.top+(d.pageYOffset||c.scrollTop)-(c.clientTop||0),left:e.left+(d.pageXOffset||c.scrollLeft)-(c.clientLeft||0)}):e):void 0},ka.offset={setOffset:function(a,b,c){var d=ka.css(a,\"position\");\"static\"===d&&(a.style.position=\"relative\");var e,f,g=ka(a),h=g.offset(),i=ka.css(a,\"top\"),j=ka.css(a,\"left\"),k=(\"absolute\"===d||\"fixed\"===d)&&ka.inArray(\"auto\",[i,j])>-1,l={},m={};k?(m=g.position(),e=m.top,f=m.left):(e=parseFloat(i)||0,f=parseFloat(j)||0),ka.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(l.top=b.top-h.top+e),null!=b.left&&(l.left=b.left-h.left+f),\"using\"in b?b.using.call(a,l):g.css(l)}},ka.fn.extend({position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===ka.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),ka.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=ka.css(a[0],\"borderTopWidth\",!0),c.left+=ka.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-ka.css(d,\"marginTop\",!0),left:b.left-c.left-ka.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Z;a&&!ka.nodeName(a,\"html\")&&\"static\"===ka.css(a,\"position\");)a=a.offsetParent;return a||Z})}}),ka.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=/Y/.test(c);ka.fn[a]=function(e){return ka.access(this,function(a,e,f){var g=T(a);return f===b?g?c in g?g[c]:g.document.documentElement[e]:a[e]:(g?g.scrollTo(d?ka(g).scrollLeft():f,d?f:ka(g).scrollTop()):a[e]=f,b)},a,e,arguments.length,null)}}),ka.each({Height:\"height\",Width:\"width\"},function(a,c){ka.each({padding:\"inner\"+a,content:c,\"\":\"outer\"+a},function(d,e){ka.fn[e]=function(e,f){var g=arguments.length&&(d||\"boolean\"!=typeof e),h=d||(e===!0||f===!0?\"margin\":\"border\");return ka.access(this,function(c,d,e){var f;return ka.isWindow(c)?c.document.documentElement[\"client\"+a]:9===c.nodeType?(f=c.documentElement,Math.max(c.body[\"scroll\"+a],f[\"scroll\"+a],c.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):e===b?ka.css(c,d,h):ka.style(c,d,e,h)},c,g?e:b,g,null)}})}),ka.fn.size=function(){return this.length},ka.fn.andSelf=ka.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=ka:(a.jQuery=a.$=ka,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return ka}))}(window);"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/webuploader/webuploader.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--webuploader-color-primary:var(--color-primary,#00B7EE);--webuploader-color-content-bg:var(--color-content-bg,#FFF)}.webuploader-container{position:relative}.webuploader-element-invisible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.webuploader-pick{position:relative;display:block;cursor:pointer;padding:0;color:#666;text-align:center;border-radius:2px;overflow:hidden}.webuploader-pick-hover{}.webuploader-pick-disable{opacity:.6;pointer-events:none}.webuploader-list{display:block;margin:0;padding:0;position:static;border:1px solid #EEE;border-radius:.2rem;padding:.2rem;background-color:var(--webuploader-color-content-bg)}.webuploader-list:empty{display:none}.webuploader-list>li{list-style:none;display:block;border:1px solid #EEE;padding:0;margin-bottom:.1rem;background:var(--webuploader-color-content-bg);border-radius:.2rem}.webuploader-list>li .progress-box{background-color:#EEE;margin:2px;border-radius:4px}.webuploader-list>li .progress-box .progress-bar{height:3px;background-color:var(--webuploader-color-primary);border-radius:4px}.webuploader-list>li .progress-info{font-size:12px;line-height:20px;width:100%;word-wrap:normal;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#999}.webuploader-list>li .progress-info .status{display:inline;line-height:20px}"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/webuploader/webuploader.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.require,c=a.__dollar||a.jQuery||a.Zepto||b(\"jquery\")||b(\"zepto\");if(!c)throw new Error(\"jQuery or Zepto not found!\");return c}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"1.0.0\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={debug:!1},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numOfInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return!(b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1)},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a))}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||c.lastModified&&new Date(c.lastModified).toLocaleString()||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\",style:\"webuploader-pick\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button,h=e.style;h&&g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":h&&g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":h&&g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b[0]&&b[0].offsetWidth||b.outerWidth()||b.width(),d=b[0]&&b[0].offsetHeight||b.outerHeight()||b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.on(\"dialogopen\",function(){e.owner.trigger(\"dialogOpen\",j.button)}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"lib/browser-image-compression\",[\"base\",\"lib/blob\"],function(b,c){function d(a,b){return b.forEach(function(b){b&&\"string\"!=typeof b&&!Array.isArray(b)&&Object.keys(b).forEach(function(c){if(\"default\"!==c&&!(c in a)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d.get?d:{enumerable:!0,get:function(){return b[c]}})}})}),Object.freeze(a)}function e(a,b){return new Promise(function(d,e){var f;return z(a).then(function(a){try{return f=a,d(new c([b.slice(0,2),f,b.slice(2)],{type:\"image/jpeg\"}))}catch(a){return e(a)}},e)})}function f(a,b,d){return void 0===d&&(d=Date.now()),new Promise(function(e){for(var f=a.split(\",\"),g=f[0].match(/:(.*?);/)[1],h=globalThis.atob(f[1]),i=h.length,j=new Uint8Array(i);i--;)j[i]=h.charCodeAt(i);var k=new c([j],{type:g});k.name=b,k.lastModified=d,e(k)})}function g(a){return new Promise(function(b,c){var d=new L;d.onload=function(){return b(d.result)},d.onerror=function(a){return c(a)},d.readAsDataURL(a)})}function h(a){return new Promise(function(b,c){var d=new Image;d.onload=function(){return b(d)},d.onerror=function(a){return c(a)},d.src=a})}function i(){if(void 0!==i.cachedResult)return i.cachedResult;var a=F.ETC,b=navigator.userAgent;return/Chrom(e|ium)/i.test(b)?a=F.CHROME:/iP(ad|od|hone)/i.test(b)&&/WebKit/i.test(b)?a=F.IOS:/Safari/i.test(b)?a=F.DESKTOP_SAFARI:/Firefox/i.test(b)?a=F.FIREFOX:(/MSIE/i.test(b)||1==!!document.documentMode)&&(a=F.IE),i.cachedResult=a,i.cachedResult}function j(a,b){for(var c=i(),d=G[c],e=a,f=b,g=e*f,h=e>f?f/e:e/f;g>d*d;){var j=(d+e)/2,k=(d+f)/2;k>j?(f=k,e=k*h):(f=j*h,e=j),g=e*f}return{width:e,height:f}}function k(a,b){var c,d;try{if(c=new OffscreenCanvas(a,b),d=c.getContext(\"2d\"),null===d)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(a){c=document.createElement(\"canvas\"),d=c.getContext(\"2d\")}return c.width=a,c.height=b,[c,d]}function l(a,b){var c=j(a.width,a.height),d=c.width,e=c.height,f=k(d,e),g=f[0],h=f[1];return b&&/jpe?g/.test(b)&&(h.fillStyle=\"white\",h.fillRect(0,0,g.width,g.height)),h.drawImage(a,0,0,g.width,g.height),g}function m(){return void 0!==m.cachedResult||(m.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),m.cachedResult}function n(a,b){return void 0===b&&(b={}),new Promise(function(a,c){var d,e,f=function(){try{return e=l(d,b.fileType||f.type),a([d,e])}catch(f){return c(f)}},j=function(){try{var a=function(a){try{throw a}catch(a){return c(a)}};try{var b;return g(e).then(function(e){try{return b=e,h(b).then(function(b){try{return d=b,function(){try{return f()}catch(a){return c(a)}}()}catch(b){return a(b)}},a)}catch(e){return a(e)}},a)}catch(e){a(e)}}catch(e){return c(e)}};try{if(m()||[F.DESKTOP_SAFARI,F.MOBILE_SAFARI].includes(i()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(k).then(function(a){try{return d=a,f()}catch(a){return j()}},j)}catch(k){j()}})}function o(a,b,d,e,g){return void 0===g&&(g=1),new Promise(function(h,i){function j(){return k.call(this)}function k(){return l.call(this)}function l(){return h(m)}var m;if(\"image/png\"===b){var n=void 0,o=void 0,p=void 0;return n=a.getContext(\"2d\"),o=n.getImageData(0,0,a.width,a.height).data,p=C.encode([o.buffer],a.width,a.height,4096*g),m=new c([p],{type:b}),m.name=d,m.lastModified=e,l.call(this)}if(\"image/bmp\"===b)return new Promise(function(b){return E.toBlob(a,b)}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,k.call(this)}catch(a){return i(a)}}.bind(this),i);if(\"function\"==typeof OffscreenCanvas&&a instanceof OffscreenCanvas)return a.convertToBlob({type:b,quality:g}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,j.call(this)}catch(a){return i(a)}}.bind(this),i);var q=void 0;return q=a.toDataURL(b,g),f(q,d,e).then(function(a){try{return m=a,j.call(this)}catch(a){return i(a)}}.bind(this),i)})}function p(a){a.width=0,a.height=0}function q(){return new Promise(function(a,b){var c,d,e,g,h;return void 0!==q.cachedResult?a(q.cachedResult):(c=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",f(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(a){try{return d=a,n(d).then(function(a){try{return e=a[1],o(e,d.type,d.name,d.lastModified).then(function(a){try{return g=a,p(e),n(g).then(function(a){try{return h=a[0],q.cachedResult=1===h.width&&2===h.height,c(q.cachedResult)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b))})}function r(a){return new Promise(function(b,c){var d=new L;d.onload=function(a){var c=new DataView(a.target.result);if(65496!=c.getUint16(0,!1))return b(-2);for(var d=c.byteLength,e=2;d>e;){if(c.getUint16(e+2,!1)<=8)return b(-1);var f=c.getUint16(e,!1);if(e+=2,65505==f){if(1165519206!=c.getUint32(e+=2,!1))return b(-1);var g=18761==c.getUint16(e+=6,!1);e+=c.getUint32(e+4,g);var h=c.getUint16(e,g);e+=2;for(var i=0;h>i;i++)if(274==c.getUint16(e+12*i,g))return b(c.getUint16(e+12*i+8,g))}else{if(65280!=(65280&f))break;e+=c.getUint16(e,!1)}}return b(-1)},d.onerror=function(a){return c(a)},d.readAsArrayBuffer(a)})}function s(a,b){var c,d,e=a.width,f=a.height,g=b.maxWidthOrHeight,h=a;return isFinite(g)&&(e>g||f>g)&&(c=k(e,f),h=c[0],d=c[1],e>f?(h.width=g,h.height=f/e*g):(h.width=e/f*g,h.height=g),d.drawImage(a,0,0,h.width,h.height),p(a)),h}function t(a,b){var c=a.width,d=a.height,e=k(c,d),f=e[0],g=e[1];switch(b>4&&9>b?(f.width=d,f.height=c):(f.width=c,f.height=d),b){case 2:g.transform(-1,0,0,1,c,0);break;case 3:g.transform(-1,0,0,-1,c,d);break;case 4:g.transform(1,0,0,-1,0,d);break;case 5:g.transform(0,1,1,0,0,0);break;case 6:g.transform(0,1,-1,0,d,0);break;case 7:g.transform(0,-1,-1,0,d,c);break;case 8:g.transform(0,-1,1,0,0,c)}return g.drawImage(a,0,0,c,d),p(a),f}function u(a,b,c){return void 0===c&&(c=0),new Promise(function(d,e){function f(a){if(void 0===a&&(a=5),b.signal&&b.signal.aborted)throw b.signal.reason;h+=a,b.onProgress(Math.min(h,100))}function g(a){if(b.signal&&b.signal.aborted)throw b.signal.reason;h=Math.min(Math.max(a,h),100),b.onProgress(h)}var h,i,j,l,m,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I;return h=c,i=b.maxIteration||10,j=1048576*b.maxSizeMB,f(),n(a,b).then(function(a){try{return l=a[1],f(),m=s(l,b),f(),new Promise(function(a,d){function e(){return a(f)}var f;return(f=b.exifOrientation)?e.call(this):r(c).then(function(a){try{return f=a,e.call(this)}catch(a){return d(a)}}.bind(this),d)}).then(function(a){try{return u=a,f(),q().then(function(a){try{return v=a?m:t(m,u),f(),w=b.initialQuality||1,x=b.fileType||c.type,o(v,x,c.name,c.lastModified,w).then(function(a){function h(){var a;if(i--&&(D>j||D>B)){var b,d;return b=I?.95*H.width:H.width,d=I?.95*H.height:H.height,a=k(b,d),F=a[0],G=a[1],G.drawImage(H,0,0,b,d),w*=\"image/png\"===x?.85:.95,o(F,x,c.name,c.lastModified,w).then(function(a){try{return E=a,p(H),H=F,D=E.size,g(Math.min(99,Math.floor(100*((C-D)/(C-j))))),h}catch(a){return e(a)}},e)}return[1]}function n(){return p(H),p(F),p(m),p(v),p(l),g(100),d(E)}try{if(y=a,f(),z=y.size>j,A=y.size>c.size,!z&&!A)return g(100),d(y);var q;return B=c.size,C=y.size,D=C,H=v,I=!b.alwaysKeepResolution&&z,(q=function(a){for(;a;){if(a.then)return void a.then(q,e);try{if(a.pop){if(a.length)return a.pop()?n.call(this):a;a=h}else a=a.call(this)}catch(a){return e(a)}}}.bind(this))(h)}catch(r){return e(r)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)})}function v(a,b){return new Promise(function(d,e){D||(D=function(a){var b=[];return\"function\"==typeof a?b.push(\"(\".concat(a,\")()\")):b.push(a),URL.createObjectURL(new c(b))}(M));var f=new Worker(D);f.addEventListener(\"message\",function(a){if(b.signal&&b.signal.aborted)f.terminate();else if(void 0===a.data.progress){if(a.data.error)return e(new Error(a.data.error)),void f.terminate();d(a.data.file),f.terminate()}else b.onProgress(a.data.progress)}),f.addEventListener(\"error\",e),b.signal&&b.signal.addEventListener(\"abort\",function(){e(b.signal.reason),f.terminate()}),f.postMessage({file:a,imageCompressionLibUrl:b.libURL,options:y(y({},b),{onProgress:void 0,signal:void 0})})})}function w(a,b){return new Promise(function(a,d){function f(){try{h.name=b.name,h.lastModified=b.lastModified}catch(b){}try{g.preserveExif&&\"image/jpeg\"===b.type&&(!g.fileType||g.fileType&&g.fileType===b.type)&&(h=e(b,h))}catch(b){}return a(h)}var g,h,i,j,k,l;if(g=y({},b),i=0,j=g.onProgress,g.maxSizeMB=g.maxSizeMB||Number.POSITIVE_INFINITY,k=\"boolean\"!=typeof g.useWebWorker||g.useWebWorker,delete g.useWebWorker,g.onProgress=function(a){i=a,\"function\"==typeof j&&j(i)},!(o instanceof c||o instanceof K))return d(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(o.type))return d(new Error(\"The file given is not an image\"));if(l=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!k||\"function\"!=typeof Worker||l)return u(o,g).then(function(a){try{return h=a,f.call(this)}catch(a){return d(a)}}.bind(this),d);var m=function(){try{return f.call(this)}catch(a){return d(a)}}.bind(this),n=function(){try{return u(a,g).then(function(a){try{return h=a,m()}catch(a){return d(a)}},d)}catch(a){return d(a)}};try{return g.libURL=g.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",v(o,g).then(function(a){try{return h=a,m()}catch(a){return n()}},n)}catch(o){n()}})}var x,y=this&&this.__assign||function(){return y=Object.assign||function(a){for(var b,c=1,d=arguments.length;d>c;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a},y.apply(this,arguments)},z=function(a){return new Promise(function(b,d){var e=new FileReader;e.addEventListener(\"load\",function(a){var e=a.target.result,f=new DataView(e),g=0;if(65496!==f.getUint16(g))return d(\"not a valid JPEG\");for(g+=2;;){var h=f.getUint16(g);if(65498===h)break;var i=f.getUint16(g+2);if(65505===h&&1165519206===f.getUint32(g+4)){var j=g+10,k=void 0;switch(f.getUint16(j)){case 18761:k=!0;break;case 19789:k=!1;break;default:return d(\"TIFF header contains invalid endian\")}if(42!==f.getUint16(j+2,k))return d(\"TIFF header contains invalid version\");for(var l=f.getUint32(j+4,k),m=j+l+2+12*f.getUint16(j+l,k),n=j+l+2;m>n;n+=12)if(274==f.getUint16(n,k)){if(3!==f.getUint16(n+2,k))return d(\"Orientation data type is invalid\");if(1!==f.getUint32(n+4,k))return d(\"Orientation data count is invalid\");f.setUint16(n+8,1,k);break}return b(e.slice(g,g+2+i))}g+=2+i}return b(new c)}),e.readAsArrayBuffer(a)})},A={};!function(a){var b,c,d={};a.exports=d,d.parse=function(a,b){for(var c=d.bin.readUshort,e=d.bin.readUint,f=0,g={},h=new Uint8Array(a),i=h.length-4;101010256!=e(h,i);)i--;f=i,f+=4;var j=c(h,f+=4);c(h,f+=2);var k=e(h,f+=2),l=e(h,f+=4);f+=4,f=l;for(var m=0;j>m;m++){e(h,f),f+=4,f+=4,f+=4,e(h,f+=4),k=e(h,f+=4);var n=e(h,f+=4),o=c(h,f+=4),p=c(h,f+2),q=c(h,f+4);f+=6;var r=e(h,f+=8);f+=4,f+=o+p+q,d._readLocal(h,r,g,k,n,b)}return g},d._readLocal=function(a,b,c,e,f,g){var h=d.bin.readUshort,i=d.bin.readUint;i(a,b),h(a,b+=4),h(a,b+=2);var j=h(a,b+=2);i(a,b+=2),i(a,b+=4),b+=4;var k=h(a,b+=8),l=h(a,b+=2);b+=2;var m=d.bin.readUTF8(a,b,k);if(b+=k,b+=l,g)c[m]={size:f,csize:e};else{var n=new Uint8Array(a.buffer,b);if(0==j)c[m]=new Uint8Array(n.buffer.slice(b,b+e));else{if(8!=j)throw\"unknown compression method: \"+j;var o=new Uint8Array(f);d.inflateRaw(n,o),c[m]=o}}},d.inflateRaw=function(a,b){return d.F.inflate(a,b)},d.inflate=function(a,b){return a[0],a[1],d.inflateRaw(new Uint8Array(a.buffer,a.byteOffset+2,a.length-6),b)},d.deflate=function(a,b){null==b&&(b={level:6});var c=0,e=new Uint8Array(50+Math.floor(1.1*a.length));e[c]=120,e[c+1]=156,c+=2,c=d.F.deflateRaw(a,e,c,b.level);var f=d.adler(a,0,a.length);return e[c+0]=255&f>>>24,e[c+1]=255&f>>>16,e[c+2]=255&f>>>8,e[c+3]=255&f>>>0,new Uint8Array(e.buffer,0,c+4)},d.deflateRaw=function(a,b){null==b&&(b={level:6});var c=new Uint8Array(50+Math.floor(1.1*a.length)),e=d.F.deflateRaw(a,c,e,b.level);return new Uint8Array(c.buffer,0,e)},d.encode=function(a,b){null==b&&(b=!1);var c=0,e=d.bin.writeUint,f=d.bin.writeUshort,g={};for(var h in a){var i=!d._noNeed(h)&&!b,j=a[h],k=d.crc.crc(j,0,j.length);g[h]={cpr:i,usize:j.length,crc:k,file:i?d.deflateRaw(j):j}}for(var h in g)c+=g[h].file.length+30+46+2*d.bin.sizeUTF8(h);c+=22;var l=new Uint8Array(c),m=0,n=[];for(var h in g){var o=g[h];n.push(m),m=d._writeHeader(l,m,h,o,0)}var p=0,q=m;for(var h in g)o=g[h],n.push(m),m=d._writeHeader(l,m,h,o,1,n[p++]);var r=m-q;return e(l,m,101010256),m+=4,f(l,m+=4,p),f(l,m+=2,p),e(l,m+=2,r),e(l,m+=4,q),m+=4,m+=2,l.buffer},d._noNeed=function(a){var b=a.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(b)},d._writeHeader=function(a,b,c,e,f,g){var h=d.bin.writeUint,i=d.bin.writeUshort,j=e.file;return h(a,b,0==f?67324752:33639248),b+=4,1==f&&(b+=2),i(a,b,20),i(a,b+=2,0),i(a,b+=2,e.cpr?8:0),h(a,b+=2,0),h(a,b+=4,e.crc),h(a,b+=4,j.length),h(a,b+=4,e.usize),i(a,b+=4,d.bin.sizeUTF8(c)),i(a,b+=2,0),b+=2,1==f&&(b+=2,b+=2,h(a,b+=6,g),b+=4),b+=d.bin.writeUTF8(a,b,c),0==f&&(a.set(j,b),b+=j.length),b},d.crc={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,e){for(var f=0;e>f;f++)a=d.crc.table[255&(a^b[c+f])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^d.crc.update(4294967295,a,b,c)}},d.adler=function(a,b,c){for(var d=1,e=0,f=b,g=b+c;g>f;){for(var h=Math.min(f+5552,g);h>f;)e+=d+=a[f++];d%=65521,e%=65521}return e<<16|d},d.bin={readUshort:function(a,b){return a[b]|a[b+1]<<8},writeUshort:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8},readUint:function(a,b){return 16777216*a[b+3]+(a[b+2]<<16|a[b+1]<<8|a[b])},writeUint:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8,a[b+2]=255&c>>16,a[b+3]=255&c>>24},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},pad:function(a){return a.length<2?\"0\"+a:a},readUTF8:function(a,b,c){for(var e,f=\"\",g=0;c>g;g++)f+=\"%\"+d.bin.pad(a[b+g].toString(16));try{e=decodeURIComponent(f)}catch(e){return d.bin.readASCII(a,b,c)}return e},writeUTF8:function(a,b,c){for(var d=c.length,e=0,f=0;d>f;f++){var g=c.charCodeAt(f);if(0==(4294967168&g))a[b+e]=g,e++;else if(0==(4294965248&g))a[b+e]=192|g>>6,a[b+e+1]=128|63&g>>0,e+=2;else if(0==(4294901760&g))a[b+e]=224|g>>12,a[b+e+1]=128|63&g>>6,a[b+e+2]=128|63&g>>0,e+=3;else{if(0!=(4292870144&g))throw\"e\";a[b+e]=240|g>>18,a[b+e+1]=128|63&g>>12,a[b+e+2]=128|63&g>>6,\na[b+e+3]=128|63&g>>0,e+=4}}return e},sizeUTF8:function(a){for(var b=a.length,c=0,d=0;b>d;d++){var e=a.charCodeAt(d);if(0==(4294967168&e))c++;else if(0==(4294965248&e))c+=2;else if(0==(4294901760&e))c+=3;else{if(0!=(4292870144&e))throw\"e\";c+=4}}return c}},d.F={},d.F.deflateRaw=function(a,b,c,e){var f=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][e],g=d.F.U,h=d.F._goodIndex;d.F._hash;var i=d.F._putsE,j=0,k=c<<3,l=0,m=a.length;if(0==e){for(;m>j;)i(b,k,j+(y=Math.min(65535,m-j))==m?1:0),k=d.F._copyExact(a,j,y,b,k+8),j+=y;return k>>>3}var n=g.lits,o=g.strt,p=g.prev,q=0,r=0,s=0,t=0,u=0,v=0;for(m>2&&(o[v=d.F._hash(a,0)]=0),j=0;m>j;j++){if(u=v,m-2>j+1){v=d.F._hash(a,j+1);var w=32767&j+1;p[w]=o[v],o[v]=w}if(j>=l){(q>14e3||r>26697)&&m-j>100&&(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(j==m-1||l==m?1:0,n,q,t,a,s,j-s,b,k),q=r=t=0,s=j);var x=0;m-2>j&&(x=d.F._bestMatch(a,j,p,u,Math.min(f[2],m-j),f[3]));var y=x>>>16,z=65535&x;if(0!=x){z=65535&x;var A=h(y=x>>>16,g.of0);g.lhst[257+A]++;var B=h(z,g.df0);g.dhst[B]++,t+=g.exb[A]+g.dxb[B],n[q]=y<<23|j-l,n[q+1]=z<<16|A<<8|B,q+=2,l=j+y}else g.lhst[a[j]]++;r++}}for(s==j&&0!=a.length||(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(1,n,q,t,a,s,j-s,b,k),q=0,r=0,q=r=t=0,s=j);0!=(7&k);)k++;return k>>>3},d.F._bestMatch=function(a,b,c,e,f,g){var h=32767&b,i=c[h],j=32767&h-i+32768;if(i==h||e!=d.F._hash(a,b-j))return 0;for(var k=0,l=0,m=Math.min(32767,b);m>=j&&0!=--g&&i!=h;){if(0==k||a[b+k]==a[b+k-j]){var n=d.F._howLong(a,b,j);if(n>k){if(l=j,(k=n)>=f)break;n>j+2&&(n=j+2);for(var o=0,p=0;n-2>p;p++){var q=32767&b-j+p+32768,r=32767&q-c[q]+32768;r>o&&(o=r,i=q)}}}j+=32767&(h=i)-(i=c[h])+32768}return k<<16|l},d.F._howLong=function(a,b,c){if(a[b]!=a[b-c]||a[b+1]!=a[b+1-c]||a[b+2]!=a[b+2-c])return 0;var d=b,e=Math.min(a.length,b+258);for(b+=3;e>b&&a[b]==a[b-c];)b++;return b-d},d.F._hash=function(a,b){return 65535&(a[b]<<8|a[b+1])+(a[b+2]<<4)},d.saved=0,d.F._writeBlock=function(a,b,c,e,f,g,h,i,j){var k,l,m,n,o,p,q,r,s,t=d.F.U,u=d.F._putsF,v=d.F._putsE;t.lhst[256]++,l=(k=d.F.getTrees())[0],m=k[1],n=k[2],o=k[3],p=k[4],q=k[5],r=k[6],s=k[7];var w=32+(0==(7&j+3)?0:8-(7&j+3))+(h<<3),x=e+d.F.contSize(t.fltree,t.lhst)+d.F.contSize(t.fdtree,t.dhst),y=e+d.F.contSize(t.ltree,t.lhst)+d.F.contSize(t.dtree,t.dhst);y+=14+3*q+d.F.contSize(t.itree,t.ihst)+(2*t.ihst[16]+3*t.ihst[17]+7*t.ihst[18]);for(var z=0;286>z;z++)t.lhst[z]=0;for(z=0;30>z;z++)t.dhst[z]=0;for(z=0;19>z;z++)t.ihst[z]=0;var A=x>w&&y>w?0:y>x?1:2;if(u(i,j,a),u(i,j+1,A),j+=3,0==A){for(;0!=(7&j);)j++;j=d.F._copyExact(f,g,h,i,j)}else{var B,C;if(1==A&&(B=t.fltree,C=t.fdtree),2==A){d.F.makeCodes(t.ltree,l),d.F.revCodes(t.ltree,l),d.F.makeCodes(t.dtree,m),d.F.revCodes(t.dtree,m),d.F.makeCodes(t.itree,n),d.F.revCodes(t.itree,n),B=t.ltree,C=t.dtree,v(i,j,o-257),v(i,j+=5,p-1),v(i,j+=5,q-4),j+=4;for(var D=0;q>D;D++)v(i,j+3*D,t.itree[1+(t.ordr[D]<<1)]);j+=3*q,j=d.F._codeTiny(r,t.itree,i,j),j=d.F._codeTiny(s,t.itree,i,j)}for(var E=g,F=0;c>F;F+=2){for(var G=b[F],H=G>>>23,I=E+(8388607&G);I>E;)j=d.F._writeLit(f[E++],B,i,j);if(0!=H){var J=b[F+1],K=J>>16,L=255&J>>8,M=255&J;v(i,j=d.F._writeLit(257+L,B,i,j),H-t.of0[L]),j+=t.exb[L],u(i,j=d.F._writeLit(M,C,i,j),K-t.df0[M]),j+=t.dxb[M],E+=H}}j=d.F._writeLit(256,B,i,j)}return j},d.F._copyExact=function(a,b,c,d,e){var f=e>>>3;return d[f]=c,d[f+1]=c>>>8,d[f+2]=255-d[f],d[f+3]=255-d[f+1],f+=4,d.set(new Uint8Array(a.buffer,b,c),f),e+(c+4<<3)},d.F.getTrees=function(){for(var a=d.F.U,b=d.F._hufTree(a.lhst,a.ltree,15),c=d.F._hufTree(a.dhst,a.dtree,15),e=[],f=d.F._lenCodes(a.ltree,e),g=[],h=d.F._lenCodes(a.dtree,g),i=0;i<e.length;i+=2)a.ihst[e[i]]++;for(i=0;i<g.length;i+=2)a.ihst[g[i]]++;for(var j=d.F._hufTree(a.ihst,a.itree,7),k=19;k>4&&0==a.itree[1+(a.ordr[k-1]<<1)];)k--;return[b,c,j,f,h,k,e,g]},d.F.getSecond=function(a){for(var b=[],c=0;c<a.length;c+=2)b.push(a[c+1]);return b},d.F.nonZero=function(a){for(var b=\"\",c=0;c<a.length;c+=2)0!=a[c+1]&&(b+=(c>>1)+\",\");return b},d.F.contSize=function(a,b){for(var c=0,d=0;d<b.length;d++)c+=b[d]*a[1+(d<<1)];return c},d.F._codeTiny=function(a,b,c,e){for(var f=0;f<a.length;f+=2){var g=a[f],h=a[f+1];e=d.F._writeLit(g,b,c,e);var i=16==g?2:17==g?3:7;g>15&&(d.F._putsE(c,e,h,i),e+=i)}return e},d.F._lenCodes=function(a,b){for(var c=a.length;2!=c&&0==a[c-1];)c-=2;for(var d=0;c>d;d+=2){var e=a[d+1],f=c>d+3?a[d+3]:-1,g=c>d+5?a[d+5]:-1,h=0==d?-1:a[d-1];if(0==e&&f==e&&g==e){for(var i=d+5;c>i+2&&a[i+2]==e;)i+=2;(j=Math.min(i+1-d>>>1,138))<11?b.push(17,j-3):b.push(18,j-11),d+=2*j-2}else if(e==h&&f==e&&g==e){for(i=d+5;c>i+2&&a[i+2]==e;)i+=2;var j=Math.min(i+1-d>>>1,6);b.push(16,j-3),d+=2*j-2}else b.push(e,0)}return c>>>1},d.F._hufTree=function(a,b,c){var e=[],f=a.length,g=b.length,h=0;for(h=0;g>h;h+=2)b[h]=0,b[h+1]=0;for(h=0;f>h;h++)0!=a[h]&&e.push({lit:h,f:a[h]});var i=e.length,j=e.slice(0);if(0==i)return 0;if(1==i){var k=e[0].lit;return j=0==k?1:0,b[1+(k<<1)]=1,b[1+(j<<1)]=1,1}e.sort(function(a,b){return a.f-b.f});var l=e[0],m=e[1],n=0,o=1,p=2;for(e[0]={lit:-1,f:l.f+m.f,l:l,r:m,d:0};o!=i-1;)l=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],m=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],e[o++]={lit:-1,f:l.f+m.f,l:l,r:m};var q=d.F.setDepth(e[o-1],0);for(q>c&&(d.F.restrictDepth(j,c,q),q=c),h=0;i>h;h++)b[1+(j[h].lit<<1)]=j[h].d;return q},d.F.setDepth=function(a,b){return-1!=a.lit?(a.d=b,b):Math.max(d.F.setDepth(a.l,b+1),d.F.setDepth(a.r,b+1))},d.F.restrictDepth=function(a,b,c){var d=0,e=1<<c-b,f=0;for(a.sort(function(a,b){return b.d==a.d?a.f-b.f:b.d-a.d}),d=0;d<a.length&&a[d].d>b;d++){var g=a[d].d;a[d].d=b,f+=e-(1<<c-g)}for(f>>>=c-b;f>0;)(g=a[d].d)<b?(a[d].d++,f-=1<<b-g-1):d++;for(;d>=0;d--)a[d].d==b&&0>f&&(a[d].d--,f++);0!=f&&console.log(\"debt left\")},d.F._goodIndex=function(a,b){var c=0;return b[16|c]<=a&&(c|=16),b[8|c]<=a&&(c|=8),b[4|c]<=a&&(c|=4),b[2|c]<=a&&(c|=2),b[1|c]<=a&&(c|=1),c},d.F._writeLit=function(a,b,c,e){return d.F._putsF(c,e,b[a<<1]),e+b[1+(a<<1)]},d.F.inflate=function(a,b){var c=Uint8Array;if(3==a[0]&&0==a[1])return b||new c(0);var e=d.F,f=e._bitsF,g=e._bitsE,h=e._decodeTiny,i=e.makeCodes,j=e.codes2map,k=e._get17,l=e.U,m=null==b;m&&(b=new c(a.length>>>2<<3));for(var n,o,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;0==p;)if(p=f(a,x,1),q=f(a,x+1,2),x+=3,0!=q){if(m&&(b=d.F._check(b,w+(1<<17))),1==q&&(n=l.flmap,o=l.fdmap,u=511,v=31),2==q){r=g(a,x,5)+257,s=g(a,x+5,5)+1,t=g(a,x+10,4)+4,x+=14;for(var y=0;38>y;y+=2)l.itree[y]=0,l.itree[y+1]=0;var z=1;for(y=0;t>y;y++){var A=g(a,x+3*y,3);l.itree[1+(l.ordr[y]<<1)]=A,A>z&&(z=A)}x+=3*t,i(l.itree,z),j(l.itree,z,l.imap),n=l.lmap,o=l.dmap,x=h(l.imap,(1<<z)-1,r+s,a,x,l.ttree);var B=e._copyOut(l.ttree,0,r,l.ltree);u=(1<<B)-1;var C=e._copyOut(l.ttree,r,s,l.dtree);v=(1<<C)-1,i(l.ltree,B),j(l.ltree,B,n),i(l.dtree,C),j(l.dtree,C,o)}for(;;){var D=n[k(a,x)&u];x+=15&D;var E=D>>>4;if(0==E>>>8)b[w++]=E;else{if(256==E)break;var F=w+E-254;if(E>264){var G=l.ldef[E-257];F=w+(G>>>3)+g(a,x,7&G),x+=7&G}var H=o[k(a,x)&v];x+=15&H;var I=H>>>4,J=l.ddef[I],K=(J>>>4)+f(a,x,15&J);for(x+=15&J,m&&(b=d.F._check(b,w+(1<<17)));F>w;)b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K];w=F}}}else{0!=(7&x)&&(x+=8-(7&x));var L=4+(x>>>3),M=a[L-4]|a[L-3]<<8;m&&(b=d.F._check(b,w+M)),b.set(new c(a.buffer,a.byteOffset+L,M),w),x=L+M<<3,w+=M}return b.length==w?b:b.slice(0,w)},d.F._check=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(Math.max(c<<1,b));return d.set(a,0),d},d.F._decodeTiny=function(a,b,c,e,f,g){for(var h=d.F._bitsE,i=d.F._get17,j=0;c>j;){var k=a[i(e,f)&b];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},d.F._copyOut=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},d.F.makeCodes=function(a,b){for(var c,e,f,g,h=d.F.U,i=a.length,j=h.bl_count,k=0;b>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[a[k]]++;var l=h.next_code;for(c=0,j[0]=0,e=1;b>=e;e++)c=c+j[e-1]<<1,l[e]=c;for(f=0;i>f;f+=2)0!=(g=a[f+1])&&(a[f]=l[g],l[g]++)},d.F.codes2map=function(a,b,c){for(var e=a.length,f=d.F.U.rev15,g=0;e>g;g+=2)if(0!=a[g+1])for(var h=g>>1,i=a[g+1],j=h<<4|i,k=b-i,l=a[g]<<k,m=l+(1<<k);l!=m;)c[f[l]>>>15-b]=j,l++},d.F.revCodes=function(a,b){for(var c=d.F.U.rev15,e=15-b,f=0;f<a.length;f+=2){var g=a[f]<<b-a[f+1];a[f]=c[g]>>>e}},d.F._putsE=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},d.F._putsF=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},d.F._bitsE=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},d.F._bitsF=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},d.F._get17=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},d.F._get25=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},d.F.U=(b=Uint16Array,c=Uint32Array,{next_code:new b(16),bl_count:new b(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new b(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new c(32),flmap:new b(512),fltree:[],fdmap:new b(32),fdtree:[],lmap:new b(32768),ltree:[],ttree:[],dmap:new b(32768),dtree:[],imap:new b(512),itree:[],rev15:new b(32768),lhst:new c(286),dhst:new c(30),ihst:new c(19),lits:new c(15e3),strt:new b(65536),prev:new b(32768)}),function(){function a(a,b,c){for(;0!=b--;)a.push(0,c)}for(var b=d.F.U,c=0;32768>c;c++){var e=c;e=(4278255360&(e=(4042322160&(e=(3435973836&(e=(2863311530&e)>>>1|(1431655765&e)<<1))>>>2|(858993459&e)<<2))>>>4|(252645135&e)<<4))>>>8|(16711935&e)<<8,b.rev15[c]=(e>>>16|e<<16)>>>17}for(c=0;32>c;c++)b.ldef[c]=b.of0[c]<<3|b.exb[c],b.ddef[c]=b.df0[c]<<4|b.dxb[c];a(b.fltree,144,8),a(b.fltree,112,9),a(b.fltree,24,7),a(b.fltree,8,8),d.F.makeCodes(b.fltree,9),d.F.codes2map(b.fltree,9,b.flmap),d.F.revCodes(b.fltree,9),a(b.fdtree,32,5),d.F.makeCodes(b.fdtree,5),d.F.codes2map(b.fdtree,5,b.fdmap),d.F.revCodes(b.fdtree,5),a(b.itree,19,0),a(b.ltree,286,0),a(b.dtree,30,0),a(b.ttree,320,0)}()}({get exports(){return A},set exports(a){A=a}});var B=d({__proto__:null,\"default\":A},[A]),C=function(){function a(a,b,c,e){var f=b*c,g=d(e),h=Math.ceil(b*g/8),j=new Uint8Array(4*f),k=new Uint32Array(j.buffer),l=e.ctype,m=e.depth,n=i.readUshort;if(6==l){var o=f<<2;if(8==m)for(var p=0;o>p;p+=4)j[p]=a[p],j[p+1]=a[p+1],j[p+2]=a[p+2],j[p+3]=a[p+3];if(16==m)for(p=0;o>p;p++)j[p]=a[p<<1]}else if(2==l){var q=e.tabs.tRNS;if(null==q){if(8==m)for(p=0;f>p;p++){var r=3*p;k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r]}if(16==m)for(p=0;f>p;p++)r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r]}else{var s=q[0],t=q[1],u=q[2];if(8==m)for(p=0;f>p;p++){var v=p<<2;r=3*p,k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r],a[r]==s&&a[r+1]==t&&a[r+2]==u&&(j[v+3]=0)}if(16==m)for(p=0;f>p;p++)v=p<<2,r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r],n(a,r)==s&&n(a,r+2)==t&&n(a,r+4)==u&&(j[v+3]=0)}}else if(3==l){var w=e.tabs.PLTE,x=e.tabs.tRNS,y=x?x.length:0;if(1==m)for(var z=0;c>z;z++){var A=z*h,B=z*b;for(p=0;b>p;p++){v=B+p<<2;var C=3*(D=1&a[A+(p>>3)]>>7-((7&p)<<0));j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}if(2==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=3&a[A+(p>>2)]>>6-((3&p)<<1)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(4==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=15&a[A+(p>>1)]>>4-((1&p)<<2)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(8==m)for(p=0;f>p;p++){var D;v=p<<2,C=3*(D=a[p]),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}else if(4==l){if(8==m)for(p=0;f>p;p++){v=p<<2;var E=a[F=p<<1];j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+1]}if(16==m)for(p=0;f>p;p++){var F;v=p<<2,E=a[F=p<<2],j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+2]}}else if(0==l)for(s=e.tabs.tRNS?e.tabs.tRNS:-1,z=0;c>z;z++){var G=z*h,H=z*b;if(1==m)for(var I=0;b>I;I++){var J=(E=255*(1&a[G+(I>>>3)]>>>7-(7&I)))==255*s?0:255;k[H+I]=J<<24|E<<16|E<<8|E}else if(2==m)for(I=0;b>I;I++)J=(E=85*(3&a[G+(I>>>2)]>>>6-((3&I)<<1)))==85*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(4==m)for(I=0;b>I;I++)J=(E=17*(15&a[G+(I>>>1)]>>>4-((1&I)<<2)))==17*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(8==m)for(I=0;b>I;I++)J=(E=a[G+I])==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(16==m)for(I=0;b>I;I++)E=a[G+(I<<1)],J=n(a,G+(I<<1))==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E}return j}function b(a,b,f,g){var h=d(a),i=Math.ceil(f*h/8),k=new Uint8Array((i+1+a.interlace)*g);return b=a.tabs.CgBI?j(b,k):c(b,k),0==a.interlace?b=e(b,a,0,f,g):1==a.interlace&&(b=function(a,b){for(var c=b.width,f=b.height,g=d(b),h=g>>3,i=Math.ceil(c*g/8),j=new Uint8Array(f*i),k=0,l=[0,0,4,0,2,0,1],m=[0,4,0,2,0,1,0],n=[8,8,8,4,4,2,2],o=[8,8,4,4,2,2,1],p=0;7>p;){for(var q=n[p],r=o[p],s=0,t=0,u=l[p];f>u;)u+=q,t++;for(var v=m[p];c>v;)v+=r,s++;var w=Math.ceil(s*g/8);e(a,b,k,s,t);for(var x=0,y=l[p];f>y;){for(var z=m[p],A=k+x*w<<3;c>z;){var B;if(1==g&&(B=1&(B=a[A>>3])>>7-(7&A),j[y*i+(z>>3)]|=B<<7-((7&z)<<0)),2==g&&(B=3&(B=a[A>>3])>>6-(7&A),j[y*i+(z>>2)]|=B<<6-((3&z)<<1)),4==g&&(B=15&(B=a[A>>3])>>4-(7&A),j[y*i+(z>>1)]|=B<<4-((1&z)<<2)),g>=8)for(var C=y*i+z*h,D=0;h>D;D++)j[C+D]=a[(A>>3)+D];A+=g,z+=r}x++,y+=q}0!=s*t&&(k+=t*(1+w)),p+=1}return j}(b,a)),b}function c(a,b){return j(new Uint8Array(a.buffer,2,a.length-6),b)}function d(a){return[1,null,3,1,2,null,4][a.ctype]*a.depth}function e(a,b,c,e,g){var h,i,j=d(b),k=Math.ceil(e*j/8);j=Math.ceil(j/8);var l=a[c],m=0;if(l>1&&(a[c]=[0,0,1][l-2]),3==l)for(m=j;k>m;m++)a[m+1]=255&a[m+1]+(a[m+1-j]>>>1);for(var n=0;g>n;n++)if(h=c+n*k,i=h+n+1,l=a[i-1],m=0,0==l)for(;k>m;m++)a[h+m]=a[i+m];else if(1==l){for(;j>m;m++)a[h+m]=a[i+m];for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-j]}else if(2==l)for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-k];else if(3==l){for(;j>m;m++)a[h+m]=a[i+m]+(a[h+m-k]>>>1);for(;k>m;m++)a[h+m]=a[i+m]+(a[h+m-k]+a[h+m-j]>>>1)}else{for(;j>m;m++)a[h+m]=a[i+m]+f(0,a[h+m-k],0);for(;k>m;m++)a[h+m]=a[i+m]+f(a[h+m-j],a[h+m-k],a[h+m-j-k])}return a}function f(a,b,c){var d=a+b-c,e=d-a,f=d-b,g=d-c;return f*f>=e*e&&g*g>=e*e?a:g*g>=f*f?b:c}function g(a,b,c){c.width=i.readUint(a,b),b+=4,c.height=i.readUint(a,b),b+=4,c.depth=a[b],b++,c.ctype=a[b],b++,c.compress=a[b],b++,c.filter=a[b],b++,c.interlace=a[b],b++}function h(a,b,c,d,e,f,g,h,i){for(var j=Math.min(b,e),k=Math.min(c,f),l=0,m=0,n=0;k>n;n++)for(var o=0;j>o;o++)if(g>=0&&h>=0?(l=n*b+o<<2,m=(h+n)*e+g+o<<2):(l=(-h+n)*b-g+o<<2,m=n*e+o<<2),0==i)d[m]=a[l],d[m+1]=a[l+1],d[m+2]=a[l+2],d[m+3]=a[l+3];else if(1==i){var p=a[l+3]*(1/255),q=a[l]*p,r=a[l+1]*p,s=a[l+2]*p,t=d[m+3]*(1/255),u=d[m]*t,v=d[m+1]*t,w=d[m+2]*t,x=1-p,y=p+t*x,z=0==y?0:1/y;d[m+3]=255*y,d[m+0]=(q+u*x)*z,d[m+1]=(r+v*x)*z,d[m+2]=(s+w*x)*z}else if(2==i)p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w?(d[m]=0,d[m+1]=0,d[m+2]=0,d[m+3]=0):(d[m]=q,d[m+1]=r,d[m+2]=s,d[m+3]=p);else if(3==i){if(p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w)continue;if(220>p&&t>20)return!1}return!0}var i={nextZero:function(a,b){for(;0!=a[b];)b++;return b},readUshort:function(a,b){return a[b]<<8|a[b+1]},writeUshort:function(a,b,c){a[b]=255&c>>8,a[b+1]=255&c},readUint:function(a,b){return 16777216*a[b]+(a[b+1]<<16|a[b+2]<<8|a[b+3])},writeUint:function(a,b,c){a[b]=255&c>>24,a[b+1]=255&c>>16,a[b+2]=255&c>>8,a[b+3]=255&c},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},readBytes:function(a,b,c){for(var d=[],e=0;c>e;e++)d.push(a[b+e]);return d},pad:function(a){return a.length<2?\"0\".concat(a):a},readUTF8:function(a,b,c){for(var d,e=\"\",f=0;c>f;f++)e+=\"%\".concat(i.pad(a[b+f].toString(16)));try{d=decodeURIComponent(e)}catch(d){return i.readASCII(a,b,c)}return d}},j=function(){var a={H:{}};return a.H.N=function(b,c){var d,e,f=Uint8Array,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(3==b[0]&&0==b[1])return c||new f(0);var p=a.H,q=p.b,r=p.e,s=p.R,t=p.n,u=p.A,v=p.Z,w=p.m,x=null==c;for(x&&(c=new f(b.length>>>2<<5));0==g;)if(g=q(b,o,1),h=q(b,o+1,2),o+=3,0!=h){if(x&&(c=a.H.W(c,n+(1<<17))),1==h&&(d=w.J,e=w.h,l=511,m=31),2==h){i=r(b,o,5)+257,j=r(b,o+5,5)+1,k=r(b,o+10,4)+4,o+=14;for(var y=1,z=0;38>z;z+=2)w.Q[z]=0,w.Q[z+1]=0;for(z=0;k>z;z++){var A=r(b,o+3*z,3);w.Q[1+(w.X[z]<<1)]=A,A>y&&(y=A)}o+=3*k,t(w.Q,y),u(w.Q,y,w.u),d=w.w,e=w.d,o=s(w.u,(1<<y)-1,i+j,b,o,w.v);var B=p.V(w.v,0,i,w.C);l=(1<<B)-1;var C=p.V(w.v,i,j,w.D);m=(1<<C)-1,t(w.C,B),u(w.C,B,d),t(w.D,C),u(w.D,C,e)}for(;;){var D=d[v(b,o)&l];o+=15&D;var E=D>>>4;if(0==E>>>8)c[n++]=E;else{if(256==E)break;var F=n+E-254;if(E>264){var G=w.q[E-257];F=n+(G>>>3)+r(b,o,7&G),o+=7&G}var H=e[v(b,o)&m];o+=15&H;var I=H>>>4,J=w.c[I],K=(J>>>4)+q(b,o,15&J);for(o+=15&J;F>n;)c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K];n=F}}}else{0!=(7&o)&&(o+=8-(7&o));var L=4+(o>>>3),M=b[L-4]|b[L-3]<<8;x&&(c=a.H.W(c,n+M)),c.set(new f(b.buffer,b.byteOffset+L,M),n),o=L+M<<3,n+=M}return c.length==n?c:c.slice(0,n)},a.H.W=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(c<<1);return d.set(a,0),d},a.H.R=function(b,c,d,e,f,g){for(var h=a.H.e,i=a.H.Z,j=0;d>j;){var k=b[i(e,f)&c];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},a.H.V=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},a.H.n=function(b,c){for(var d,e,f,g,h=a.H.m,i=b.length,j=h.j,k=0;c>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[b[k]]++;var l=h.K;for(d=0,j[0]=0,e=1;c>=e;e++)d=d+j[e-1]<<1,l[e]=d;for(f=0;i>f;f+=2)g=b[f+1],0!=g&&(b[f]=l[g],l[g]++)},a.H.A=function(b,c,d){for(var e=b.length,f=a.H.m.r,g=0;e>g;g+=2)if(0!=b[g+1])for(var h=g>>1,i=b[g+1],j=h<<4|i,k=c-i,l=b[g]<<k,m=l+(1<<k);l!=m;)d[f[l]>>>15-c]=j,l++},a.H.l=function(b,c){for(var d=a.H.m.r,e=15-c,f=0;f<b.length;f+=2){var g=b[f]<<c-b[f+1];b[f]=d[g]>>>e}},a.H.M=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},a.H.I=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},a.H.e=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},a.H.b=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},a.H.Z=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},a.H.i=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},a.H.m=function(){var a=Uint16Array,b=Uint32Array;return{K:new a(16),j:new a(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new a(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new b(32),J:new a(512),_:[],h:new a(32),$:[],w:new a(32768),C:[],v:[],d:new a(32768),D:[],u:new a(512),Q:[],r:new a(32768),s:new b(286),Y:new b(30),a:new b(19),t:new b(15e3),k:new a(65536),g:new a(32768)}}(),function(){function b(a,b,c){for(;0!=b--;)a.push(0,c)}for(var c=a.H.m,d=0;32768>d;d++){var e=d;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,c.r[d]=(e>>>16|e<<16)>>>17}for(d=0;32>d;d++)c.q[d]=c.S[d]<<3|c.T[d],c.c[d]=c.p[d]<<4|c.z[d];b(c._,144,8),b(c._,112,9),b(c._,24,7),b(c._,8,8),a.H.n(c._,9),a.H.A(c._,9,c.J),a.H.l(c._,9),b(c.$,32,5),a.H.n(c.$,5),a.H.A(c.$,5,c.h),a.H.l(c.$,5),b(c.Q,19,0),b(c.C,286,0),b(c.D,30,0),b(c.v,320,0)}(),a.H.N}();return{decode:function(a){for(var d,e=new Uint8Array(a),f=8,h=w,i=h.readUshort,k=h.readUint,l={tabs:{},frames:[]},m=new Uint8Array(e.length),n=0,o=0,p=[137,80,78,71,13,10,26,10],q=0;8>q;q++)if(e[q]!=p[q])throw\"The input is not a PNG file!\";for(;f<e.length;){var r=h.readUint(e,f);f+=4;var s=h.readASCII(e,f,4);if(f+=4,\"IHDR\"==s)g(e,f,l);else if(\"iCCP\"==s){for(var t=f;0!=e[t];)t++;h.readASCII(e,f,t-f),e[t+1];var u=e.slice(t+2,f+r),v=null;try{v=c(u)}catch(w){v=j(u)}l.tabs[s]=v}else if(\"CgBI\"==s)l.tabs[s]=e.slice(f,f+4);else if(\"IDAT\"==s){for(q=0;r>q;q++)m[n+q]=e[f+q];n+=r}else if(\"acTL\"==s)l.tabs[s]={num_frames:k(e,f),num_plays:k(e,f+4)},d=new Uint8Array(e.length);else if(\"fcTL\"==s){0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height),o=0);var x={x:k(e,f+12),y:k(e,f+16),width:k(e,f+4),height:k(e,f+8)},y=i(e,f+22);y=i(e,f+20)/(0==y?100:y);var z={rect:x,delay:Math.round(1e3*y),dispose:e[f+24],blend:e[f+25]};l.frames.push(z)}else if(\"fdAT\"==s){for(q=0;r-4>q;q++)d[o+q]=e[f+q+4];o+=r-4}else if(\"pHYs\"==s)l.tabs[s]=[h.readUint(e,f),h.readUint(e,f+4),e[f+8]];else if(\"cHRM\"==s)for(l.tabs[s]=[],q=0;8>q;q++)l.tabs[s].push(h.readUint(e,f+4*q));else if(\"tEXt\"==s||\"zTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={});var A=h.nextZero(e,f),B=h.readASCII(e,f,A-f),C=f+r-A-1;if(\"tEXt\"==s)E=h.readASCII(e,A+1,C);else{var D=c(e.slice(A+2,A+2+C));E=h.readUTF8(D,0,D.length)}l.tabs[s][B]=E}else if(\"iTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={}),A=0,t=f,A=h.nextZero(e,t),B=h.readASCII(e,t,A-t);var E,F=e[t=A+1];e[t+1],t+=2,A=h.nextZero(e,t),h.readASCII(e,t,A-t),t=A+1,A=h.nextZero(e,t),h.readUTF8(e,t,A-t),C=r-((t=A+1)-f),0==F?E=h.readUTF8(e,t,C):(D=c(e.slice(t,t+C)),E=h.readUTF8(D,0,D.length)),l.tabs[s][B]=E}else if(\"PLTE\"==s)l.tabs[s]=h.readBytes(e,f,r);else if(\"hIST\"==s){var G=l.tabs.PLTE.length/3;for(l.tabs[s]=[],q=0;G>q;q++)l.tabs[s].push(i(e,f+2*q))}else if(\"tRNS\"==s)3==l.ctype?l.tabs[s]=h.readBytes(e,f,r):0==l.ctype?l.tabs[s]=i(e,f):2==l.ctype&&(l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]);else if(\"gAMA\"==s)l.tabs[s]=h.readUint(e,f)/1e5;else if(\"sRGB\"==s)l.tabs[s]=e[f];else if(\"bKGD\"==s)0==l.ctype||4==l.ctype?l.tabs[s]=[i(e,f)]:2==l.ctype||6==l.ctype?l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]:3==l.ctype&&(l.tabs[s]=e[f]);else if(\"IEND\"==s)break;f+=r,h.readUint(e,f),f+=4}var H;return 0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height)),l.data=b(l,m,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function(b){var c=b.width,d=b.height;if(null==b.tabs.acTL)return[a(b.data,c,d,b).buffer];var e=[];null==b.frames[0].data&&(b.frames[0].data=b.data);for(var f=4*c*d,g=new Uint8Array(f),i=new Uint8Array(f),j=new Uint8Array(f),k=0;k<b.frames.length;k++){var l=b.frames[k],m=l.rect.x,n=l.rect.y,o=l.rect.width,p=l.rect.height,q=a(l.data,o,p,b);if(0!=k)for(var r=0;f>r;r++)j[r]=g[r];if(0==l.blend?h(q,o,p,g,c,d,m,n,0):1==l.blend&&h(q,o,p,g,c,d,m,n,1),e.push(g.buffer.slice(0)),0==l.dispose);else if(1==l.dispose)h(i,o,p,g,c,d,m,n,0);else if(2==l.dispose)for(r=0;f>r;r++)g[r]=j[r]}return e},_paeth:f,_copyTile:h,_bin:i}}();!function(){function a(a,b,c,d){b[c]+=a[0]*d>>4,b[c+1]+=a[1]*d>>4,b[c+2]+=a[2]*d>>4,b[c+3]+=a[3]*d>>4}function b(a){return Math.max(0,Math.min(255,a))}function c(a,b){var c=a[0]-b[0],d=a[1]-b[1],e=a[2]-b[2],f=a[3]-b[3];return c*c+d*d+e*e+f*f}function d(d,e,f,g,h,i,j){null==j&&(j=1);for(var k=g.length,l=[],m=0;k>m;m++){var n=g[m];l.push([255&n>>>0,255&n>>>8,255&n>>>16,255&n>>>24])}for(m=0;k>m;m++)for(var o=4294967295,p=0,q=0;k>q;q++){var r=c(l[m],l[q]);q!=m&&o>r&&(o=r,p=q)}var s=new Uint32Array(h.buffer),t=new Int16Array(4*e*f),u=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(m=0;m<u.length;m++)u[m]=255*((u[m]+.5)/16-.5);for(var v=0;f>v;v++)for(var w=0;e>w;w++){var x;m=4*(v*e+w),2!=j?x=[b(d[m]+t[m]),b(d[m+1]+t[m+1]),b(d[m+2]+t[m+2]),b(d[m+3]+t[m+3])]:(r=u[4*(3&v)+(3&w)],x=[b(d[m]+r),b(d[m+1]+r),b(d[m+2]+r),b(d[m+3]+r)]),p=0;var y=16777215;for(q=0;k>q;q++){var z=c(x,l[q]);y>z&&(y=z,p=q)}var A=l[p],B=[x[0]-A[0],x[1]-A[1],x[2]-A[2],x[3]-A[3]];1==j&&(w!=e-1&&a(B,t,m+4,7),v!=f-1&&(0!=w&&a(B,t,m+4*e-4,3),a(B,t,m+4*e,5),w!=e-1&&a(B,t,m+4*e+4,1))),i[m>>2]=p,s[m>>2]=g[p]}}function e(a,b,c,d,e){null==e&&(e={});var f,g=w.crc,h=u.writeUint,i=u.writeUshort,j=u.writeASCII,k=8,l=a.frames.length>1,m=!1,n=33+(l?20:0);if(null!=e.sRGB&&(n+=13),null!=e.pHYs&&(n+=21),null!=e.iCCP&&(f=pako.deflate(e.iCCP),n+=21+f.length+4),3==a.ctype){for(var o=a.plte.length,p=0;o>p;p++)255!=a.plte[p]>>>24&&(m=!0);n+=8+3*o+4+(m?8+1*o+4:0)}for(var q=0;q<a.frames.length;q++)l&&(n+=38),n+=(C=a.frames[q]).cimg.length+12,0!=q&&(n+=4);n+=12;var r=new Uint8Array(n),s=[137,80,78,71,13,10,26,10];for(p=0;8>p;p++)r[p]=s[p];if(h(r,k,13),k+=4,j(r,k,\"IHDR\"),k+=4,h(r,k,b),k+=4,h(r,k,c),k+=4,r[k]=a.depth,k++,r[k]=a.ctype,k++,r[k]=0,k++,r[k]=0,k++,r[k]=0,k++,h(r,k,g(r,k-17,17)),k+=4,null!=e.sRGB&&(h(r,k,1),k+=4,j(r,k,\"sRGB\"),k+=4,r[k]=e.sRGB,k++,h(r,k,g(r,k-5,5)),k+=4),null!=e.iCCP){var t=13+f.length;h(r,k,t),k+=4,j(r,k,\"iCCP\"),k+=4,j(r,k,\"ICC profile\"),k+=11,k+=2,r.set(f,k),k+=f.length,h(r,k,g(r,k-(t+4),t+4)),k+=4}if(null!=e.pHYs&&(h(r,k,9),k+=4,j(r,k,\"pHYs\"),k+=4,h(r,k,e.pHYs[0]),k+=4,h(r,k,e.pHYs[1]),k+=4,r[k]=e.pHYs[2],k++,h(r,k,g(r,k-13,13)),k+=4),l&&(h(r,k,8),k+=4,j(r,k,\"acTL\"),k+=4,h(r,k,a.frames.length),k+=4,h(r,k,null!=e.loop?e.loop:0),k+=4,h(r,k,g(r,k-12,12)),k+=4),3==a.ctype){for(h(r,k,3*(o=a.plte.length)),k+=4,j(r,k,\"PLTE\"),k+=4,p=0;o>p;p++){var v=3*p,x=a.plte[p],y=255&x,z=255&x>>>8,A=255&x>>>16;r[k+v+0]=y,r[k+v+1]=z,r[k+v+2]=A}if(k+=3*o,h(r,k,g(r,k-3*o-4,3*o+4)),k+=4,m){for(h(r,k,o),k+=4,j(r,k,\"tRNS\"),k+=4,p=0;o>p;p++)r[k+p]=255&a.plte[p]>>>24;k+=o,h(r,k,g(r,k-o-4,o+4)),k+=4}}var B=0;for(q=0;q<a.frames.length;q++){var C=a.frames[q];l&&(h(r,k,26),k+=4,j(r,k,\"fcTL\"),k+=4,h(r,k,B++),k+=4,h(r,k,C.rect.width),k+=4,h(r,k,C.rect.height),k+=4,h(r,k,C.rect.x),k+=4,h(r,k,C.rect.y),k+=4,i(r,k,d[q]),k+=2,i(r,k,1e3),k+=2,r[k]=C.dispose,k++,r[k]=C.blend,k++,h(r,k,g(r,k-30,30)),k+=4);var D=C.cimg;h(r,k,(o=D.length)+(0==q?0:4)),k+=4;var E=k;j(r,k,0==q?\"IDAT\":\"fdAT\"),k+=4,0!=q&&(h(r,k,B++),k+=4),r.set(D,k),k+=o,h(r,k,g(r,E,k-E)),k+=4}return h(r,k,0),k+=4,j(r,k,\"IEND\"),k+=4,h(r,k,g(r,k-4,4)),k+=4,r.buffer}function f(a,b,c){for(var d=0;d<a.frames.length;d++){var e=a.frames[d];e.rect.width;var f=e.rect.height,g=new Uint8Array(f*e.bpl+f);e.cimg=j(e.img,f,e.bpp,e.bpl,g,b,c)}}function g(a,b,c,e,f){for(var g=f[0],j=f[1],k=f[2],m=f[3],n=f[4],o=f[5],p=6,q=8,r=255,s=0;s<a.length;s++)for(var u=new Uint8Array(a[s]),v=u.length,w=0;v>w;w+=4)r&=u[w+3];var x=255!=r,y=function(a,b,c,d,e,f){for(var g=[],j=0;j<a.length;j++){var k,l=new Uint8Array(a[j]),m=new Uint32Array(l.buffer),n=0,o=0,p=b,q=c,r=d?1:0;if(0!=j){for(var s=f||d||1==j||0!=g[j-2].dispose?1:2,u=0,v=1e9,w=0;s>w;w++){for(var x=new Uint8Array(a[j-1-w]),y=new Uint32Array(a[j-1-w]),z=b,A=c,B=-1,C=-1,D=0;c>D;D++)for(var E=0;b>E;E++)m[M=D*b+E]!=y[M]&&(z>E&&(z=E),E>B&&(B=E),A>D&&(A=D),D>C&&(C=D));-1==B&&(z=A=B=C=0),e&&(1==(1&z)&&z--,1==(1&A)&&A--);var F=(B-z+1)*(C-A+1);v>F&&(v=F,u=w,n=z,o=A,p=B-z+1,q=C-A+1)}x=new Uint8Array(a[j-1-u]),1==u&&(g[j-1].dispose=2),k=new Uint8Array(4*p*q),t(x,b,c,k,p,q,-n,-o,0),r=t(l,b,c,k,p,q,-n,-o,3)?1:0,1==r?i(l,b,c,k,{x:n,y:o,width:p,height:q}):t(l,b,c,k,p,q,-n,-o,0)}else k=l.slice(0);g.push({rect:{x:n,y:o,width:p,height:q},img:k,blend:r,dispose:0})}if(d)for(j=0;j<g.length;j++)if(1!=(N=g[j]).blend){var G=N.rect,H=g[j-1].rect,I=Math.min(G.x,H.x),J=Math.min(G.y,H.y),K={x:I,y:J,width:Math.max(G.x+G.width,H.x+H.width)-I,height:Math.max(G.y+G.height,H.y+H.height)-J};g[j-1].dispose=1,0!=j-1&&h(a,b,c,g,j-1,K,e),h(a,b,c,g,j,K,e)}var L=0;if(1!=a.length)for(var M=0;M<g.length;M++){var N;L+=(N=g[M]).rect.width*N.rect.height}return g}(a,b,c,g,j,k),z={},A=[],B=[];if(0!=e){var C=[];for(w=0;w<y.length;w++)C.push(y[w].img.buffer);var D=function(a){for(var b=0,c=0;c<a.length;c++)b+=a[c].byteLength;var d=new Uint8Array(b),e=0;for(c=0;c<a.length;c++){for(var f=new Uint8Array(a[c]),g=f.length,h=0;g>h;h+=4){var i=f[h],j=f[h+1],k=f[h+2],l=f[h+3];0==l&&(i=j=k=0),d[e+h]=i,d[e+h+1]=j,d[e+h+2]=k,d[e+h+3]=l}e+=g}return d.buffer}(C),E=l(D,e);for(w=0;w<E.plte.length;w++)A.push(E.plte[w].est.rgba);var F=0;for(w=0;w<y.length;w++){var G=(J=y[w]).img.length,H=new Uint8Array(E.inds.buffer,F>>2,G>>2);B.push(H);var I=new Uint8Array(E.abuf,F,G);o&&d(J.img,J.rect.width,J.rect.height,A,I,H),J.img.set(I),F+=G}}else for(s=0;s<y.length;s++){var J=y[s],K=new Uint32Array(J.img.buffer),L=J.rect.width;for(v=K.length,H=new Uint8Array(v),B.push(H),w=0;v>w;w++){var M=K[w];if(0!=w&&M==K[w-1])H[w]=H[w-1];else if(w>L&&M==K[w-L])H[w]=H[w-L];else{var N=z[M];if(null==N&&(z[M]=N=A.length,A.push(M),A.length>=300))break;H[w]=N}}}var O=A.length;for(256>=O&&0==n&&(q=2>=O?1:4>=O?2:16>=O?4:8,q=Math.max(q,m)),s=0;s<y.length;s++){(J=y[s]).rect.x,J.rect.y,L=J.rect.width;var P=J.rect.height,Q=J.img;new Uint32Array(Q.buffer);var R=4*L,S=4;if(256>=O&&0==n){R=Math.ceil(q*L/8);for(var T=new Uint8Array(R*P),U=B[s],V=0;P>V;V++){w=V*R;var W=V*L;if(8==q)for(var X=0;L>X;X++)T[w+X]=U[W+X];else if(4==q)for(X=0;L>X;X++)T[w+(X>>1)]|=U[W+X]<<4-4*(1&X);else if(2==q)for(X=0;L>X;X++)T[w+(X>>2)]|=U[W+X]<<6-2*(3&X);else if(1==q)for(X=0;L>X;X++)T[w+(X>>3)]|=U[W+X]<<7-1*(7&X)}Q=T,p=3,S=1}else if(0==x&&1==y.length){T=new Uint8Array(3*L*P);var Y=L*P;for(w=0;Y>w;w++){var Z=3*w,$=4*w;T[Z]=Q[$],T[Z+1]=Q[$+1],T[Z+2]=Q[$+2]}Q=T,p=2,S=3,R=3*L}J.img=Q,J.bpl=R,J.bpp=S}return{ctype:p,depth:q,plte:A,frames:y}}function h(a,b,c,d,e,f,g){for(var h=Uint8Array,j=Uint32Array,k=new h(a[e-1]),l=new j(a[e-1]),m=e+1<a.length?new h(a[e+1]):null,n=new h(a[e]),o=new j(n.buffer),p=b,q=c,r=-1,s=-1,u=0;u<f.height;u++)for(var v=0;v<f.width;v++){var w=f.x+v,x=f.y+u,y=x*b+w,z=o[y];0==z||0==d[e-1].dispose&&l[y]==z&&(null==m||0!=m[4*y+3])||(p>w&&(p=w),w>r&&(r=w),q>x&&(q=x),x>s&&(s=x))}-1==r&&(p=q=r=s=0),g&&(1==(1&p)&&p--,1==(1&q)&&q--),f={x:p,y:q,width:r-p+1,height:s-q+1};var A=d[e];A.rect=f,A.blend=1,A.img=new Uint8Array(4*f.width*f.height),0==d[e-1].dispose?(t(k,b,c,A.img,f.width,f.height,-f.x,-f.y,0),i(n,b,c,A.img,f)):t(n,b,c,A.img,f.width,f.height,-f.x,-f.y,0)}function i(a,b,c,d,e){t(a,b,c,d,e.width,e.height,-e.x,-e.y,2)}function j(a,b,c,d,e,f,g){var h,i=[],j=[0,1,2,3,4];-1!=f?j=[f]:(b*d>5e5||1==c)&&(j=[0]),g&&(h={level:0});for(var l=B,m=0;m<j.length;m++){for(var n=0;b>n;n++)k(e,a,n,d,c,j[m]);i.push(l.deflate(e,h))}var o,p=1e9;for(m=0;m<i.length;m++)i[m].length<p&&(o=m,p=i[m].length);return i[o]}function k(a,b,c,d,e,f){var g=c*d,h=g+c;if(a[h]=f,h++,0==f)if(500>d)for(var i=0;d>i;i++)a[h+i]=b[g+i];else a.set(new Uint8Array(b.buffer,g,d),h);else if(1==f){for(i=0;e>i;i++)a[h+i]=b[g+i];for(i=e;d>i;i++)a[h+i]=255&b[g+i]-b[g+i-e]+256}else if(0==c){for(i=0;e>i;i++)a[h+i]=b[g+i];if(2==f)for(i=e;d>i;i++)a[h+i]=b[g+i];if(3==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-(b[g+i-e]>>1)+256;if(4==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-v(b[g+i-e],0,0)+256}else{if(2==f)for(i=0;d>i;i++)a[h+i]=255&b[g+i]+256-b[g+i-d];if(3==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]>>1);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]+b[g+i-e]>>1)}if(4==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-v(0,b[g+i-d],0);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-v(b[g+i-e],b[g+i-d],b[g+i-e-d])}}}function l(a,b){var c,d=new Uint8Array(a),e=d.slice(0),f=new Uint32Array(e.buffer),g=m(e,b),h=g[0],i=g[1],j=d.length,k=new Uint8Array(j>>2);if(d.length<2e7)for(var l=0;j>l;l+=4)c=n(h,p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255)),k[l>>2]=c.ind,f[l>>2]=c.est.rgba;else for(l=0;j>l;l+=4){var p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255);for(c=h;c.left;)c=o(c.est,p,q,r,s)<=0?c.left:c.right;k[l>>2]=c.ind,f[l>>2]=c.est.rgba}return{abuf:e.buffer,inds:k,plte:i}}function m(a,b,c){null==c&&(c=1e-4);var d=new Uint32Array(a.buffer),e={i0:0,i1:a.length,bst:null,est:null,tdst:0,left:null,right:null};e.bst=r(a,e.i0,e.i1),e.est=s(e.bst);for(var f=[e];f.length<b;){for(var g=0,h=0,i=0;i<f.length;i++)f[i].est.L>g&&(g=f[i].est.L,h=i);if(c>g)break;\nvar j=f[h],k=p(a,d,j.i0,j.i1,j.est.e,j.est.eMq255);if(j.i0>=k||j.i1<=k)j.est.L=0;else{var l={i0:j.i0,i1:k,bst:null,est:null,tdst:0,left:null,right:null};l.bst=r(a,l.i0,l.i1),l.est=s(l.bst);var m={i0:k,i1:j.i1,bst:null,est:null,tdst:0,left:null,right:null};for(m.bst={R:[],m:[],N:j.bst.N-l.bst.N},i=0;16>i;i++)m.bst.R[i]=j.bst.R[i]-l.bst.R[i];for(i=0;4>i;i++)m.bst.m[i]=j.bst.m[i]-l.bst.m[i];m.est=s(m.bst),j.left=l,j.right=m,f[h]=l,f.push(m)}}for(f.sort(function(a,b){return b.bst.N-a.bst.N}),i=0;i<f.length;i++)f[i].ind=i;return[e,f]}function n(a,b,c,d,e){if(null==a.left)return a.tdst=function(a,b,c,d,e){var f=b-a[0],g=c-a[1],h=d-a[2],i=e-a[3];return f*f+g*g+h*h+i*i}(a.est.q,b,c,d,e),a;var f=o(a.est,b,c,d,e),g=a.left,h=a.right;f>0&&(g=a.right,h=a.left);var i=n(g,b,c,d,e);if(i.tdst<=f*f)return i;var j=n(h,b,c,d,e);return j.tdst<i.tdst?j:i}function o(a,b,c,d,e){var f=a.e;return f[0]*b+f[1]*c+f[2]*d+f[3]*e-a.eMq}function p(a,b,c,d,e,f){for(d-=4;d>c;){for(;q(a,c,e)<=f;)c+=4;for(;q(a,d,e)>f;)d-=4;if(c>=d)break;var g=b[c>>2];b[c>>2]=b[d>>2],b[d>>2]=g,c+=4,d-=4}for(;q(a,c,e)>f;)c-=4;return c+4}function q(a,b,c){return a[b]*c[0]+a[b+1]*c[1]+a[b+2]*c[2]+a[b+3]*c[3]}function r(a,b,c){for(var d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e=[0,0,0,0],f=c-b>>2,g=b;c>g;g+=4){var h=a[g]*(1/255),i=a[g+1]*(1/255),j=a[g+2]*(1/255),k=a[g+3]*(1/255);e[0]+=h,e[1]+=i,e[2]+=j,e[3]+=k,d[0]+=h*h,d[1]+=h*i,d[2]+=h*j,d[3]+=h*k,d[5]+=i*i,d[6]+=i*j,d[7]+=i*k,d[10]+=j*j,d[11]+=j*k,d[15]+=k*k}return d[4]=d[1],d[8]=d[2],d[9]=d[6],d[12]=d[3],d[13]=d[7],d[14]=d[11],{R:d,m:e,N:f}}function s(a){var b=a.R,c=a.m,d=a.N,e=c[0],f=c[1],g=c[2],h=c[3],i=0==d?0:1/d,j=[b[0]-e*e*i,b[1]-e*f*i,b[2]-e*g*i,b[3]-e*h*i,b[4]-f*e*i,b[5]-f*f*i,b[6]-f*g*i,b[7]-f*h*i,b[8]-g*e*i,b[9]-g*f*i,b[10]-g*g*i,b[11]-g*h*i,b[12]-h*e*i,b[13]-h*f*i,b[14]-h*g*i,b[15]-h*h*i],k=j,l=x,m=[Math.random(),Math.random(),Math.random(),Math.random()],n=0,o=0;if(0!=d)for(var p=0;16>p&&(m=l.multVec(k,m),o=Math.sqrt(l.dot(m,m)),m=l.sml(1/o,m),!(0!=p&&Math.abs(o-n)<1e-9));p++)n=o;var q=[e*i,f*i,g*i,h*i];return{Cov:j,q:q,e:m,L:n,eMq255:l.dot(l.sml(255,q),m),eMq:l.dot(m,q),rgba:(Math.round(255*q[3])<<24|Math.round(255*q[2])<<16|Math.round(255*q[1])<<8|Math.round(255*q[0])<<0)>>>0}}var t=C._copyTile,u=C._bin,v=C._paeth,w={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,d){for(var e=0;d>e;e++)a=w.table[255&(a^b[c+e])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^w.update(4294967295,a,b,c)}},x={multVec:function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],a[4]*b[0]+a[5]*b[1]+a[6]*b[2]+a[7]*b[3],a[8]*b[0]+a[9]*b[1]+a[10]*b[2]+a[11]*b[3],a[12]*b[0]+a[13]*b[1]+a[14]*b[2]+a[15]*b[3]]},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]},sml:function(a,b){return[a*b[0],a*b[1],a*b[2],a*b[3]]}};C.encode=function(a,b,c,d,h,i,j){null==d&&(d=0),null==j&&(j=!1);var k=g(a,b,c,d,[!1,!1,!1,0,j,!1]);return f(k,-1),e(k,b,c,h,i)},C.encodeLL=function(a,b,c,d,g,h,i,j){for(var k={ctype:0+(1==d?0:2)+(0==g?0:4),depth:h,frames:[]},l=(d+g)*h,m=l*b,n=0;n<a.length;n++)k.frames.push({rect:{x:0,y:0,width:b,height:c},img:new Uint8Array(a[n]),blend:0,dispose:1,bpp:Math.ceil(l/8),bpl:Math.ceil(m/8)});return f(k,0,!0),e(k,b,c,i,j)},C.encode.compress=g,C.encode.dither=d,C.quantize=l,C.quantize.getKDtree=m,C.quantize.getNearest=n}();var D,E={toArrayBuffer:function(a,b){function c(a){s.setUint16(w,a,!0),w+=2}function d(a){s.setUint32(w,a,!0),w+=4}function e(a){w+=a}var f,g,h,i,j=a.width,k=a.height,l=j<<2,m=a.getContext(\"2d\").getImageData(0,0,j,k),n=new Uint32Array(m.data.buffer),o=(32*j+31)/32<<2,p=o*k,q=122+p,r=new ArrayBuffer(q),s=new DataView(r),t=1<<20,u=t,v=0,w=0,x=0;c(19778),d(q),e(4),d(122),d(108),d(j),d(-k>>>0),c(1),c(32),d(3),d(p),d(2835),d(2835),e(8),d(16711680),d(65280),d(255),d(4278190080),d(1466527264),function y(){for(;k>v&&u>0;){for(i=122+v*o,f=0;l>f;)u--,g=n[x++],h=g>>>24,s.setUint32(i+f,g<<8|h),f+=4;v++}x<n.length?(u=t,setTimeout(y,E._dly)):b(r)}()},toBlob:function(a,b){this.toArrayBuffer(a,function(a){b(new c([a],{type:\"image/bmp\"}))})},_dly:9},F={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},G=(x={},x[F.CHROME]=16384,x[F.FIREFOX]=11180,x[F.DESKTOP_SAFARI]=16384,x[F.IE]=8192,x[F.IOS]=4096,x[F.ETC]=8192,x),H=\"undefined\"!=typeof a,I=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,J=H&&a.cordova&&a.cordova.require&&a.cordova.require(\"cordova/modulemapper\"),K=(H||I)&&(J&&J.getOriginalSymbol(a,\"File\")||\"undefined\"!=typeof File&&File),L=(H||I)&&(J&&J.getOriginalSymbol(a,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader),M=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";return w.getDataUrlFromFile=g,w.getFilefromDataUrl=f,w.loadImage=h,w.drawImageInCanvas=l,w.drawFileInCanvas=n,w.canvasToFile=o,w.getExifOrientation=r,w.handleMaxWidthOrHeight=s,w.followExifOrientation=t,w.cleanupCanvasMemory=p,w.isAutoOrientationInBrowser=q,w.approximateBelowMaximumCanvasSizeOfBrowser=j,w.copyExifWithoutOrientation=e,w.getBrowserName=i,w.version=\"2.0.2\",w}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"lib/browser-image-compression\",\"widgets/widget\"],function(a,b,c,d){var e,f=a.$;return e=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),f.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{enable:!1,maxWidthOrHeight:4e3,maxSize:10485760}}),b.register({name:\"image\",makeThumb:function(a,b,d,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=f.extend({},this.options.thumb),f.isPlainObject(d)&&(h=f.extend(h,d),d=null),d=d||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=d&&d>0&&(d=a._info.width*d),1>=g&&g>0&&(g=a._info.height*g),i.resize(d,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void e(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var c,e=this.options.compress;if(b=this.request(\"get-file\",b),!b._widgetImageData){var g={processed:!1,success:!1,originalSize:b.size};return e&&e.enable&&~\"image/jpeg,image/jpg,image/png\".indexOf(b.type)?(e=f.extend({},e),c=a.Deferred(),d(b.source.source,{maxSizeMB:e.maxSize/1024/1024,maxWidthOrHeight:e.maxWidthOrHeight}).then(function(a){e.debug&&console.log(\"webuploader.compress\",(100*(a.size/b.size)).toFixed(2)+\"%\");var d=b.size;b.source.source=a,b.source.size=a.size,b.size=a.size,b.trigger(\"resize\",a.size,d),g.processed=!0,g.success=!0,b._widgetImageData=g,c.resolve()})[\"catch\"](function(a){console.error(\"webuploader.compress.error\",a),g.processed=!0,b._widgetImageData=g,c.resolve()}),c.promise()):void(b._widgetImageData=g)}}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numOfDeleted:0,numOfInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],this._delFile(a),a.destroy(),this.stats.numOfDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)})),a.setStatus(f.QUEUED)},_delFile:function(a){for(var b=this._queue.length-1;b>=0;b--)if(this._queue[b]==a){this._queue.splice(b,1);break}},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numOfInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numOfInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),a.length&&(b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20))},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponseHeaders:function(){return this.exec(\"getResponseHeaders\")},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,chunkRetryDelay:1e3,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b?(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT?(b.setStatus(h.QUEUED),f.each(c.pool,function(a,c){c.file===b&&(c.transport&&c.transport.send(),b.setStatus(h.PROGRESS))})):b.getStatus()!==h.PROGRESS&&b.setStatus(h.QUEUED)):f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)}),c.runing)return c.owner.trigger(\"startUpload\",b),a.nextTick(c.__tick);c.runing=!0;var d=[];b||f.each(c.pool,function(a,b){var e=b.file;if(e.getStatus()===h.INTERRUPT){if(c._trigged=!1,d.push(e),b.waiting)return;b.transport?b.transport.send():c._doSend(b)}}),f.each(d,function(){this.setStatus(h.PROGRESS)}),b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,e){e.file===b&&(e.transport&&e.transport.abort(),c&&(d._putback(e),d._popBlock(e)))}),d.owner.trigger(\"stopUpload\",b),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numOfInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||(this.remaning++,a.file.remaning++,this.stack.unshift(a.cuted))},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),b.waiting=c=d.request(\"before-send\",b,function(){delete b.waiting,e.getStatus()===h.PROGRESS?d._doSend(b):b.file.getStatus()!==h.INTERRUPT&&d._popBlock(b),a.nextTick(d.__tick)}),void c.fail(function(){delete b.waiting,1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=f.extend({},g.options,b.options),k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),e._headers=l.getResponseHeaders(),b.response=e,c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){var e,f,m=a.split(\"|\");a=m[0],e=parseFloat(m[1]),f=m[2],b.retried=b.retried||0,b.chunks>1&&~\"http,abort,server\".indexOf(a.replace(/-.*/,\"\"))&&b.retried<j.chunkRetry?(b.retried++,g.retryTimer=setTimeout(function(){l.send()},j.chunkRetryDelay||1e3)):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a,e,f),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))},destroy:function(){clearTimeout(this.retryTimer)}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return!!this.trigger(\"beforeFileQueuedCheckfileNumLimit\",a,c)&&(c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!(c>=d))}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!b}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"lib/md5\",[\"runtime/client\",\"mediator\"],function(a,b){function c(){a.call(this,\"Md5\")}return b.installTo(c.prototype),c.prototype.loadFromBlob=function(a){var b=this;b.getRuid()&&b.disconnectRuntime(),b.connectRuntime(a.ruid,function(){b.exec(\"init\"),b.exec(\"loadFromBlob\",a)})},c.prototype.getResult=function(){return this.exec(\"getResult\")},c}),b(\"widgets/md5\",[\"base\",\"uploader\",\"lib/md5\",\"lib/blob\",\"widgets/widget\"],function(a,b,c,d){return b.register({name:\"md5\",md5File:function(b,e,f){var g=new c,h=a.Deferred(),i=b instanceof d?b:this.request(\"get-file\",b).source;return g.on(\"progress load\",function(a){a=a||{},h.notify(a.total?a.loaded/a.total:1)}),g.on(\"complete\",function(){h.resolve(g.getResult())}),g.on(\"error\",function(a){h.reject(a)}),arguments.length>1&&(e=e||0,f=f||0,0>e&&(e=i.size+e),0>f&&(f=i.size+f),f=Math.min(f,i.size),i=i.slice(e,f)),g.loadFromBlob(i),h.promise()}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return!(b&&!d.contains(b,a.currentTarget))&&(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return g.dndOver=!1,g.elem.removeClass(e+\"over\"),b&&!f?(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),!1):void 0},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f,g=this.getRuntime().getContainer(),h=this,i=h.owner,j=h.options,k=this.label=c(document.createElement(\"label\")),l=this.input=c(document.createElement(\"input\"));if(l.attr(\"type\",\"file\"),l.attr(\"capture\",\"camera\"),l.attr(\"name\",j.name),l.addClass(\"webuploader-element-invisible\"),k.on(\"click\",function(a){l.trigger(\"click\"),a.stopPropagation(),i.trigger(\"dialogopen\")}),k.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),j.multiple&&l.attr(\"multiple\",\"multiple\"),j.accept&&j.accept.length>0){for(a=[],b=0,d=j.accept.length;d>b;b++)a.push(j.accept[b].mimeTypes);l.attr(\"accept\",a.join(\",\"))}g.append(l),g.append(k),e=function(a){i.trigger(a.type)},f=function(a){var b;return 0!==a.target.files.length&&(h.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),l.off(),l=c(b).on(\"change\",f).on(\"mouseenter mouseleave\",e),void i.trigger(\"change\"))},l.on(\"change\",f),k.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a;\n}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\0\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(8*z[P[i]]*h[j]*h[k]),C[i]=1/(8*A[P[i]]*h[j]*h[k]),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(255&a>>8),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?0|_+.5:0|_-.5;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=50>a?Math.floor(5e3/a):Math.floor(200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}Math.round;var t,u,v,w,x,y=Math.floor,z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._metas=a,this):this._metas},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576&&(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3])}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=g.attachInfoToQuery!==!1?(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData):\"\",c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getResponseHeaders:function(){return this._headers},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_parseHeader:function(a){var b={};return a&&a.replace(/^([^\\:]+):(.*)$/gm,function(a,c,d){b[c.trim()]=d.trim()}),b},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){if(4===b.readyState){b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status;var d=\"|\",e=d+b.status+d+b.statusText;return b.status>=200&&b.status<300?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"error\",\"server\"+e)):a.trigger(\"error\",a._status?\"http\"+e:\"abort\")}},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/html5/md5\",[\"runtime/html5/runtime\"],function(a){var b=function(a,b){return 4294967295&a+b},c=function(a,c,d,e,f,g){return c=b(b(c,a),b(e,g)),b(c<<f|c>>>32-f,d)},d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)},e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)},f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)},g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)},h=function(a,c){var h=a[0],i=a[1],j=a[2],k=a[3];h=d(h,i,j,k,c[0],7,-680876936),k=d(k,h,i,j,c[1],12,-389564586),j=d(j,k,h,i,c[2],17,606105819),i=d(i,j,k,h,c[3],22,-1044525330),h=d(h,i,j,k,c[4],7,-176418897),k=d(k,h,i,j,c[5],12,1200080426),j=d(j,k,h,i,c[6],17,-1473231341),i=d(i,j,k,h,c[7],22,-45705983),h=d(h,i,j,k,c[8],7,1770035416),k=d(k,h,i,j,c[9],12,-1958414417),j=d(j,k,h,i,c[10],17,-42063),i=d(i,j,k,h,c[11],22,-1990404162),h=d(h,i,j,k,c[12],7,1804603682),k=d(k,h,i,j,c[13],12,-40341101),j=d(j,k,h,i,c[14],17,-1502002290),i=d(i,j,k,h,c[15],22,1236535329),h=e(h,i,j,k,c[1],5,-165796510),k=e(k,h,i,j,c[6],9,-1069501632),j=e(j,k,h,i,c[11],14,643717713),i=e(i,j,k,h,c[0],20,-373897302),h=e(h,i,j,k,c[5],5,-701558691),k=e(k,h,i,j,c[10],9,38016083),j=e(j,k,h,i,c[15],14,-660478335),i=e(i,j,k,h,c[4],20,-405537848),h=e(h,i,j,k,c[9],5,568446438),k=e(k,h,i,j,c[14],9,-1019803690),j=e(j,k,h,i,c[3],14,-187363961),i=e(i,j,k,h,c[8],20,1163531501),h=e(h,i,j,k,c[13],5,-1444681467),k=e(k,h,i,j,c[2],9,-51403784),j=e(j,k,h,i,c[7],14,1735328473),i=e(i,j,k,h,c[12],20,-1926607734),h=f(h,i,j,k,c[5],4,-378558),k=f(k,h,i,j,c[8],11,-2022574463),j=f(j,k,h,i,c[11],16,1839030562),i=f(i,j,k,h,c[14],23,-35309556),h=f(h,i,j,k,c[1],4,-1530992060),k=f(k,h,i,j,c[4],11,1272893353),j=f(j,k,h,i,c[7],16,-155497632),i=f(i,j,k,h,c[10],23,-1094730640),h=f(h,i,j,k,c[13],4,681279174),k=f(k,h,i,j,c[0],11,-358537222),j=f(j,k,h,i,c[3],16,-722521979),i=f(i,j,k,h,c[6],23,76029189),h=f(h,i,j,k,c[9],4,-640364487),k=f(k,h,i,j,c[12],11,-421815835),j=f(j,k,h,i,c[15],16,530742520),i=f(i,j,k,h,c[2],23,-995338651),h=g(h,i,j,k,c[0],6,-198630844),k=g(k,h,i,j,c[7],10,1126891415),j=g(j,k,h,i,c[14],15,-1416354905),i=g(i,j,k,h,c[5],21,-57434055),h=g(h,i,j,k,c[12],6,1700485571),k=g(k,h,i,j,c[3],10,-1894986606),j=g(j,k,h,i,c[10],15,-1051523),i=g(i,j,k,h,c[1],21,-2054922799),h=g(h,i,j,k,c[8],6,1873313359),k=g(k,h,i,j,c[15],10,-30611744),j=g(j,k,h,i,c[6],15,-1560198380),i=g(i,j,k,h,c[13],21,1309151649),h=g(h,i,j,k,c[4],6,-145523070),k=g(k,h,i,j,c[11],10,-1120210379),j=g(j,k,h,i,c[2],15,718787259),i=g(i,j,k,h,c[9],21,-343485551),a[0]=b(h,a[0]),a[1]=b(i,a[1]),a[2]=b(j,a[2]),a[3]=b(k,a[3])},i=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c},j=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},k=function(a){var b,c,d,e,f,g,j=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;j>=b;b+=64)h(k,i(a.substring(b-64,b)));for(a=a.substring(b-64),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*j,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},l=function(a){var b,c,d,e,f,g,i=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;i>=b;b+=64)h(k,j(a.subarray(b-64,b)));for(a=i>b-64?a.subarray(b-64):new Uint8Array(0),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a[b]<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*i,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},m=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],n=function(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=m[15&a>>8*b+4]+m[15&a>>8*b];return c},o=function(a){var b;for(b=0;b<a.length;b+=1)a[b]=n(a[b]);return a.join(\"\")},p=function(a){return o(k(a))},q=function(){this.reset()};return\"5d41402abc4b2a76b9719d911017c592\"!==p(\"hello\")&&(b=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}),q.prototype.append=function(a){return/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),this.appendBinary(a),this},q.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var b,c=this._buff.length;for(b=64;c>=b;b+=64)h(this._state,i(this._buff.substring(b-64,b)));return this._buff=this._buff.substr(b-64),this},q.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.prototype._finish=function(a,b){var c,d,e,f=b;if(a[f>>2]|=128<<(f%4<<3),f>55)for(h(this._state,a),f=0;16>f;f+=1)a[f]=0;c=8*this._length,c=c.toString(16).match(/(.*?)(.{0,8})$/),d=parseInt(c[2],16),e=parseInt(c[1],16)||0,a[14]=d,a[15]=e,h(this._state,a)},q.prototype.reset=function(){return this._buff=\"\",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},q.hash=function(a,b){/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a)));var c=k(a);return b?c:o(c)},q.hashBinary=function(a,b){var c=k(a);return b?c:o(c)},q.ArrayBuffer=function(){this.reset()},q.ArrayBuffer.prototype.append=function(a){var b,c=this._concatArrayBuffer(this._buff,a),d=c.length;for(this._length+=a.byteLength,b=64;d>=b;b+=64)h(this._state,j(c.subarray(b-64,b)));return this._buff=d>b-64?c.subarray(b-64):new Uint8Array(0),this},q.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.ArrayBuffer.prototype._finish=q.prototype._finish,q.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.ArrayBuffer.prototype.destroy=q.prototype.destroy,q.ArrayBuffer.prototype._concatArrayBuffer=function(a,b){var c=a.length,d=new Uint8Array(c+b.byteLength);return d.set(a),d.set(new Uint8Array(b),c),d},q.ArrayBuffer.hash=function(a,b){var c=l(new Uint8Array(a));return b?c:o(c)},a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){var b,c,d=a.getSource(),e=2097152,f=Math.ceil(d.size/e),g=0,h=this.owner,i=new q.ArrayBuffer,j=this,k=d.mozSlice||d.webkitSlice||d.slice;c=new FileReader,(b=function(){var l,m;l=g*e,m=Math.min(l+e,d.size),c.onload=function(b){i.append(b.target.result),h.trigger(\"progress\",{total:a.size,loaded:m})},c.onloadend=function(){c.onloadend=c.onload=null,++g<f?setTimeout(b,1):setTimeout(function(){h.trigger(\"load\"),j.result=i.end(),b=a=d=i=null,h.trigger(\"complete\")},50)},c.readAsArrayBuffer(k.call(d,l,m))})()},getResult:function(){return this.result}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"widgets/md5\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/html5/md5\"],function(a){return a}),b(\"widgets/log\",[\"base\",\"uploader\",\"widgets/widget\"],function(a,b){function c(a){var b=e.extend({},d,a),c=f.replace(/^(.*)\\?/,\"$1\"+e.param(b)),g=new Image;g.src=c}var d,e=a.$,f=\" http://static.tieba.baidu.com/tb/pms/img/st.gif??\",g=(location.hostname||location.host||\"protected\").toLowerCase(),h=g&&/baidu/i.exec(g);if(h)return d={dv:3,master:\"webuploader\",online:/test/.exec(g)?0:1,module:\"\",product:g,type:0},b.register({name:\"log\",init:function(){var a=this.owner,b=0,d=0;a.on(\"error\",function(a){c({type:2,c_error_code:a})}).on(\"uploadError\",function(a,b){c({type:2,c_error_code:\"UPLOAD_ERROR\",c_reason:\"\"+b})}).on(\"uploadComplete\",function(a){b++,d+=a.size}).on(\"uploadFinished\",function(){c({c_count:b,c_size:d}),b=d=0}),c({c_usage:1})}})}),b(\"webuploader\",[\"preset/all\",\"widgets/log\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/ueditor.all.js",
    "content": "(function(){UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu;window.UE=baidu.editor={plugins:{},commands:{},instants:{},I18N:{},_customizeUI:{},version:\"3.9.0-beta\",constants:{STATEFUL:{DISABLED:-1,OFF:0,ON:1}}};var dom=UE.dom={};var browser=UE.browser=function(){var agent=navigator.userAgent.toLowerCase(),opera=window.opera,browser={ie:/(msie\\s|trident.*rv:)([\\w.]+)/i.test(agent),opera:!!opera&&opera.version,webkit:agent.indexOf(\" applewebkit/\")>-1,mac:agent.indexOf(\"macintosh\")>-1,quirks:document.compatMode==\"BackCompat\"};browser.gecko=navigator.product==\"Gecko\"&&!browser.webkit&&!browser.opera&&!browser.ie;var version=0;if(browser.ie){var v1=agent.match(/(?:msie\\s([\\w.]+))/);var v2=agent.match(/(?:trident.*rv:([\\w.]+))/);if(v1&&v2&&v1[1]&&v2[1]){version=Math.max(v1[1]*1,v2[1]*1)}else if(v1&&v1[1]){version=v1[1]*1}else if(v2&&v2[1]){version=v2[1]*1}else{version=0}browser.ie11Compat=document.documentMode==11;browser.ie9Compat=document.documentMode==9;browser.ie8=!!document.documentMode;browser.ie8Compat=document.documentMode==8;browser.ie7Compat=version==7&&!document.documentMode||document.documentMode==7;browser.ie6Compat=version<7||browser.quirks;browser.ie9above=version>8;browser.ie9below=version<9;browser.ie11above=version>10;browser.ie11below=version<11}if(browser.gecko){var geckoRelease=agent.match(/rv:([\\d\\.]+)/);if(geckoRelease){geckoRelease=geckoRelease[1].split(\".\");version=geckoRelease[0]*1e4+(geckoRelease[1]||0)*100+(geckoRelease[2]||0)*1}}if(/chrome\\/(\\d+\\.\\d)/i.test(agent)){browser.chrome=+RegExp[\"$1\"]}if(/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(agent)&&!/chrome/i.test(agent)){browser.safari=+(RegExp[\"$1\"]||RegExp[\"$2\"])}if(browser.opera)version=parseFloat(opera.version());if(browser.webkit)version=parseFloat(agent.match(/ applewebkit\\/(\\d+)/)[1]);browser.version=version;browser.isCompatible=!browser.mobile&&(browser.ie&&version>=6||browser.gecko&&version>=10801||browser.opera&&version>=9.5||browser.air&&version>=1||browser.webkit&&version>=522||false);return browser}();var ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera;var utils=UE.utils={each:function(obj,iterator,context){if(obj==null)return;if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===false)return false}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)===false)return false}}}},makeInstance:function(obj){var noop=new Function;noop.prototype=obj;obj=new noop;noop.prototype=null;return obj},isObject:function(item){return item&&typeof item===\"object\"&&!Array.isArray(item)},merge:function(target,source){var output=Object.assign({},target);if(this.isObject(target)&&this.isObject(source)){Object.keys(source).forEach(key=>{if(this.isObject(source[key])){if(!(key in target)){Object.assign(output,{[key]:source[key]})}else{output[key]=this.merge(target[key],source[key])}}else{Object.assign(output,{[key]:source[key]})}})}return output},extend:function(t,s,b){if(s){for(var k in s){if(!b||!t.hasOwnProperty(k)){t[k]=s[k]}}}return t},extend2:function(t){var a=arguments;for(var i=1;i<a.length;i++){var x=a[i];for(var k in x){if(!t.hasOwnProperty(k)){t[k]=x[k]}}}return t},inherits:function(subClass,superClass){var oldP=subClass.prototype,newP=utils.makeInstance(superClass.prototype);utils.extend(newP,oldP,true);subClass.prototype=newP;return newP.constructor=subClass},bind:function(fn,context){return function(){return fn.apply(context,arguments)}},defer:function(fn,delay,exclusion){var timerID;return function(){if(exclusion){clearTimeout(timerID)}timerID=setTimeout(fn,delay)}},indexOf:function(array,item,start){var index=-1;start=this.isNumber(start)?start:0;this.each(array,function(v,i){if(i>=start&&v===item){index=i;return false}});return index},removeItem:function(array,item){for(var i=0,l=array.length;i<l;i++){if(array[i]===item){array.splice(i,1);i--}}},trim:function(str){return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},listToMap:function(list){if(!list)return{};list=utils.isArray(list)?list:list.split(\",\");for(var i=0,ci,obj={};ci=list[i++];){obj[ci.toUpperCase()]=obj[ci]=1}return obj},unhtml:function(str,reg){return str?str.replace(reg||/[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,function(a,b){if(b){return a}else{return{\"<\":\"&lt;\",\"&\":\"&amp;\",'\"':\"&quot;\",\"“\":\"&ldquo;\",\"”\":\"&rdquo;\",\">\":\"&gt;\",\"'\":\"&#39;\"}[a]}}):\"\"},html:function(str){return str?str.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g,function(m){return{\"&lt;\":\"<\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&ldquo;\":\"“\",\"&rdquo;\":\"”\",\"&gt;\":\">\",\"&#39;\":\"'\",\"&nbsp;\":\" \"}[m]}):\"\"},cssStyleToDomStyle:function(){var test=document.createElement(\"div\").style,cache={float:test.cssFloat!==undefined?\"cssFloat\":test.styleFloat!==undefined?\"styleFloat\":\"float\"};return function(cssName){return cache[cssName]||(cache[cssName]=cssName.toLowerCase().replace(/-./g,function(match){return match.charAt(1).toUpperCase()}))}}(),loadFile:function(){var tmpList=[];function getItem(doc,obj){try{for(var i=0,ci;ci=tmpList[i++];){if(ci.doc===doc&&ci.url==(obj.src||obj.href)){return ci}}}catch(e){return null}}return function(doc,obj,fn){var item=getItem(doc,obj);if(item){if(item.ready){fn&&fn()}else{item.funs.push(fn)}return}tmpList.push({doc:doc,url:obj.src||obj.href,funs:[fn]});if(!doc.body){var html=[];for(var p in obj){if(p==\"tag\")continue;html.push(p+'=\"'+obj[p]+'\"')}doc.write(\"<\"+obj.tag+\" \"+html.join(\" \")+\" ></\"+obj.tag+\">\");return}if(obj.id&&doc.getElementById(obj.id)){return}var element=doc.createElement(obj.tag);delete obj.tag;for(var p in obj){element.setAttribute(p,obj[p])}element.onload=element.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){item=getItem(doc,obj);if(item.funs.length>0){item.ready=1;for(var fi;fi=item.funs.pop();){fi()}}element.onload=element.onreadystatechange=null}};element.onerror=function(){throw Error(\"The load \"+(obj.href||obj.src)+\" fails,check the url settings of file ueditor.config.js \")};doc.getElementsByTagName(\"head\")[0].appendChild(element)}}(),isEmptyObject:function(obj){if(obj==null)return true;if(this.isArray(obj)||this.isString(obj))return obj.length===0;for(var key in obj)if(obj.hasOwnProperty(key))return false;return true},fixColor:function(name,value){if(/color/i.test(name)&&/rgba?/.test(value)){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}value=value.toUpperCase()}return value},optCss:function(val){var padding,margin,border;val=val.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi,function(str,key,name,val){if(val.split(\" \").length==1){switch(key){case\"padding\":!padding&&(padding={});padding[name]=val;return\"\";case\"margin\":!margin&&(margin={});margin[name]=val;return\"\";case\"border\":return val==\"initial\"?\"\":str}}return str});function opt(obj,name){if(!obj){return\"\"}var t=obj.top,b=obj.bottom,l=obj.left,r=obj.right,val=\"\";if(!t||!l||!b||!r){for(var p in obj){val+=\";\"+name+\"-\"+p+\":\"+obj[p]+\";\"}}else{val+=\";\"+name+\":\"+(t==b&&b==l&&l==r?t:t==b&&l==r?t+\" \"+l:l==r?t+\" \"+l+\" \"+b:t+\" \"+r+\" \"+b+\" \"+l)+\";\"}return val}val+=opt(padding,\"padding\")+opt(margin,\"margin\");return val.replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/,\"\").replace(/;([ \\n\\r\\t]+)|\\1;/g,\";\").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+\";;\":\";\"})},clone:function(source,target){var tmp;target=target||{};for(var i in source){if(source.hasOwnProperty(i)){tmp=source[i];if(typeof tmp==\"object\"){target[i]=utils.isArray(tmp)?[]:{};utils.clone(source[i],target[i])}else{target[i]=tmp}}}return target},transUnitToPx:function(val){if(!/(pt|cm)/.test(val)){return val}var unit;val.replace(/([\\d.]+)(\\w+)/,function(str,v,u){val=v;unit=u});switch(unit){case\"cm\":val=parseFloat(val)*25;break;case\"pt\":val=Math.round(parseFloat(val)*96/72)}return val+(val?\"px\":\"\")},domReady:function(){var fnArr=[];function doReady(doc){doc.isReady=true;for(var ci;ci=fnArr.pop();ci()){}}return function(onready,win){win=win||window;var doc=win.document;onready&&fnArr.push(onready);if(doc.readyState===\"complete\"){doReady(doc)}else{doc.isReady&&doReady(doc);if(browser.ie&&browser.version!=11){(function(){if(doc.isReady)return;try{doc.documentElement.doScroll(\"left\")}catch(error){setTimeout(arguments.callee,0);return}doReady(doc)})();win.attachEvent(\"onload\",function(){doReady(doc)})}else{doc.addEventListener(\"DOMContentLoaded\",function(){doc.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);doReady(doc)},false);win.addEventListener(\"load\",function(){doReady(doc)},false)}}}}(),cssRule:browser.ie&&browser.version!=11?function(key,style,doc){var indexList,index;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(index!==undefined){return doc.styleSheets[index].cssText}return undefined}doc=doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(style===\"\"){if(index!==undefined){doc.styleSheets[index].cssText=\"\";delete indexList[key];return true}return false}if(index!==undefined){sheetStyle=doc.styleSheets[index]}else{sheetStyle=doc.createStyleSheet(\"\",index=doc.styleSheets.length);indexList[key]=index}sheetStyle.cssText=style}:function(key,style,doc){var head,node;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;node=doc.getElementById(key);return node?node.innerHTML:undefined}doc=doc||document;node=doc.getElementById(key);if(style===\"\"){if(node){node.parentNode.removeChild(node);return true}return false}if(node){node.innerHTML=style}else{node=doc.createElement(\"style\");node.id=key;node.innerHTML=style;doc.getElementsByTagName(\"head\")[0].appendChild(node)}},sort:function(array,compareFn){compareFn=compareFn||function(item1,item2){return item1.localeCompare(item2)};for(var i=0,len=array.length;i<len;i++){for(var j=i,length=array.length;j<length;j++){if(compareFn(array[i],array[j])>0){var t=array[i];array[i]=array[j];array[j]=t}}}return array},serializeParam:function(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\")continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")},formatUrl:function(url){var u=url.replace(/&&/g,\"&\");u=u.replace(/\\?&/g,\"?\");u=u.replace(/&$/g,\"\");u=u.replace(/&#/g,\"#\");u=u.replace(/&+/g,\"&\");return u},addStyleContent:function(cssContent){var style=document.createElement(\"style\");style.innerHTML=cssContent;document.head.appendChild(style)},isCrossDomainUrl:function(url){var a=document.createElement(\"a\");a.href=url;if(browser.ie){a.href=a.href}return!(a.protocol==location.protocol&&a.hostname==location.hostname&&(a.port==location.port||a.port==\"80\"&&location.port==\"\"||a.port==\"\"&&location.port==\"80\"))},clearEmptyAttrs:function(obj){for(var p in obj){if(obj[p]===\"\"){delete obj[p]}}return obj},str2json:function(s){if(!utils.isString(s))return null;if(window.JSON){return JSON.parse(s)}else{return new Function(\"return \"+utils.trim(s||\"\"))()}},json2str:function(){if(window.JSON){return JSON.stringify}else{var escapeMap={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};function encodeString(source){if(/[\"\\\\\\x00-\\x1f]/.test(source)){source=source.replace(/[\"\\\\\\x00-\\x1f]/g,function(match){var c=escapeMap[match];if(c){return c}c=match.charCodeAt();return\"\\\\u00\"+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'\"'+source+'\"'}function encodeArray(source){var result=[\"[\"],l=source.length,preComma,i,item;for(i=0;i<l;i++){item=source[i];switch(typeof item){case\"undefined\":case\"function\":case\"unknown\":break;default:if(preComma){result.push(\",\")}result.push(utils.json2str(item));preComma=1}}result.push(\"]\");return result.join(\"\")}function pad(source){return source<10?\"0\"+source:source}function encodeDate(source){return'\"'+source.getFullYear()+\"-\"+pad(source.getMonth()+1)+\"-\"+pad(source.getDate())+\"T\"+pad(source.getHours())+\":\"+pad(source.getMinutes())+\":\"+pad(source.getSeconds())+'\"'}return function(value){switch(typeof value){case\"undefined\":return\"undefined\";case\"number\":return isFinite(value)?String(value):\"null\";case\"string\":return encodeString(value);case\"boolean\":return String(value);default:if(value===null){return\"null\"}else if(utils.isArray(value)){return encodeArray(value)}else if(utils.isDate(value)){return encodeDate(value)}else{var result=[\"{\"],encode=utils.json2str,preComma,item;for(var key in value){if(Object.prototype.hasOwnProperty.call(value,key)){item=value[key];switch(typeof item){case\"undefined\":case\"unknown\":case\"function\":break;default:if(preComma){result.push(\",\")}preComma=1;result.push(encode(key)+\":\"+encode(item))}}}result.push(\"}\");return result.join(\"\")}}}}}()};utils.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Date\"],function(v){UE.utils[\"is\"+v]=function(obj){return Object.prototype.toString.apply(obj)==\"[object \"+v+\"]\"}});var EventBase=UE.EventBase=function(){};EventBase.prototype={addListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){getListener(this,ti,true).push(listener)}},on:function(types,listener){return this.addListener(types,listener)},off:function(types,listener){return this.removeListener(types,listener)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){utils.removeItem(getListener(this,ti)||[],listener)}},fireEvent:function(){var types=arguments[0];types=utils.trim(types).split(\" \");for(var i=0,ti;ti=types[i++];){var listeners=getListener(this,ti),r,t,k;if(listeners){k=listeners.length;while(k--){if(!listeners[k])continue;t=listeners[k].apply(this,arguments);if(t===true){return t}if(t!==undefined){r=t}}}if(t=this[\"on\"+ti.toLowerCase()]){r=t.apply(this,arguments)}}return r}};function getListener(obj,type,force){var allListeners;type=type.toLowerCase();return(allListeners=obj.__allListeners||force&&(obj.__allListeners={}))&&(allListeners[type]||force&&(allListeners[type]=[]))}var dtd=dom.dtd=function(){function _(s){for(var k in s){s[k.toUpperCase()]=s[k]}return s}var X=utils.extend2;var A=_({isindex:1,fieldset:1}),B=_({input:1,button:1,select:1,textarea:1,label:1}),C=X(_({a:1}),B),D=X({iframe:1},C),E=_({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),F=_({ins:1,del:1,script:1,style:1}),G=X(_({mark:1,b:1,acronym:1,bdo:1,var:1,\"#\":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),F),H=X(_({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),G),I=X(_({p:1}),H),J=X(_({iframe:1}),H,B),K=_({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,\"#\":1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,var:1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),L=X(_({a:0}),J),M=_({tr:1}),N=_({\"#\":1}),O=X(_({param:1}),K),P=X(_({form:1}),A,D,E,I),Q=_({li:1,ol:1,ul:1}),R=_({style:1,script:1}),S=_({base:1,link:1,meta:1,title:1}),T=X(S,R),U=_({head:1,body:1}),V=_({html:1});var block=_({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),empty=_({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return _({$nonBodyContent:X(V,U,S),$block:block,$inline:L,$inlineWithA:X(_({a:1}),L),$body:X(_({script:1,style:1}),block),$cdata:_({script:1,style:1}),$empty:empty,$nonChild:_({iframe:1,textarea:1}),$listItem:_({dd:1,dt:1,li:1}),$list:_({ul:1,ol:1,dl:1}),$isNotEmpty:_({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,textarea:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:_({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,var:1}),$removeEmptyBlock:_({p:1,div:1}),$tableContent:_({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),$notTransContent:_({pre:1,script:1,style:1,textarea:1}),html:U,head:T,style:N,script:N,body:P,base:{},link:{},meta:{},title:N,col:{},tr:_({td:1,th:1}),img:{},embed:{},colgroup:_({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:_({optgroup:1,option:1}),font:L,ins:L,menu:Q,abbr:L,label:L,table:_({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),code:L,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:L,textarea:N,noframes:P,big:L,small:L,span:_({\"#\":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:L,dt:L,sub:L,optgroup:_({option:1}),param:{},bdo:L,var:L,div:P,object:O,sup:L,dd:P,strike:L,area:{},dir:Q,map:X(_({area:1,form:1,p:1}),A,F,E),applet:O,dl:_({dt:1,dd:1}),del:L,isindex:{},fieldset:X(_({legend:1}),K),thead:M,ul:Q,acronym:L,b:L,a:X(_({a:1}),J),blockquote:X(_({td:1,tr:1,tbody:1,li:1}),P),caption:L,i:L,u:L,tbody:M,s:L,address:X(D,I),tt:L,legend:L,q:L,pre:X(G,C),p:X(_({a:1}),L),em:L,dfn:L,mark:L})}();function getDomNode(node,start,ltr,startFromChild,fn,guard){var tmpNode=startFromChild&&node[start],parent;!tmpNode&&(tmpNode=node[ltr]);while(!tmpNode&&(parent=(parent||node).parentNode)){if(parent.tagName==\"BODY\"||guard&&!guard(parent)){return null}tmpNode=parent[ltr]}if(tmpNode&&fn&&!fn(tmpNode)){return getDomNode(tmpNode,start,ltr,false,fn)}return tmpNode}var attrFix=ie&&browser.version<9?{tabindex:\"tabIndex\",readonly:\"readOnly\",for:\"htmlFor\",class:\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\"}:{tabindex:\"tabIndex\",readonly:\"readOnly\"},styleBlock=utils.listToMap([\"-webkit-box\",\"-moz-box\",\"block\",\"list-item\",\"table\",\"table-row-group\",\"table-header-group\",\"table-footer-group\",\"table-row\",\"table-column-group\",\"table-column\",\"table-cell\",\"table-caption\"]);var domUtils=dom.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:ie&&browser.version===\"6\"?\"\\ufeff\":\"​\",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(nodeA,nodeB){if(nodeA===nodeB){return 0}var node,parentsA=[nodeA],parentsB=[nodeB];node=nodeA;while(node=node.parentNode){if(node===nodeB){return 10}parentsA.push(node)}node=nodeB;while(node=node.parentNode){if(node===nodeA){return 20}parentsB.push(node)}parentsA.reverse();parentsB.reverse();if(parentsA[0]!==parentsB[0]){return 1}var i=-1;while(i++,parentsA[i]===parentsB[i]){}nodeA=parentsA[i];nodeB=parentsB[i];while(nodeA=nodeA.nextSibling){if(nodeA===nodeB){return 4}}return 2},getNodeIndex:function(node,ignoreTextNode){var preNode=node,i=0;while(preNode=preNode.previousSibling){if(ignoreTextNode&&preNode.nodeType==3){if(preNode.nodeType!=preNode.nextSibling.nodeType){i++}continue}i++}return i},inDoc:function(node,doc){return domUtils.getPosition(node,doc)===10},findParent:function(node,filterFn,includeSelf){if(node&&!domUtils.isBody(node)){node=includeSelf?node:node.parentNode;while(node){if(!filterFn||filterFn(node)||domUtils.isBody(node)){return filterFn&&!filterFn(node)&&domUtils.isBody(node)?null:node}node=node.parentNode}}return null},findParentByTagName:function(node,tagNames,includeSelf,excludeFn){tagNames=utils.listToMap(utils.isArray(tagNames)?tagNames:[tagNames]);return domUtils.findParent(node,function(node){return tagNames[node.tagName]&&!(excludeFn&&excludeFn(node))},includeSelf)},findParents:function(node,includeSelf,filterFn,closerFirst){var parents=includeSelf&&(filterFn&&filterFn(node)||!filterFn)?[node]:[];while(node=domUtils.findParent(node,filterFn)){parents.push(node)}return closerFirst?parents:parents.reverse()},insertAfter:function(node,newNode){return node.nextSibling?node.parentNode.insertBefore(newNode,node.nextSibling):node.parentNode.appendChild(newNode)},remove:function(node,keepChildren){var parent=node.parentNode,child;if(parent){if(keepChildren&&node.hasChildNodes()){while(child=node.firstChild){parent.insertBefore(child,node)}}parent.removeChild(node)}return node},getNextDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"firstChild\",\"nextSibling\",startFromChild,filterFn,guard)},getPreDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"lastChild\",\"previousSibling\",startFromChild,filterFn,guard)},isBookmarkNode:function(node){return node.nodeType==1&&node.id&&/^_baidu_bookmark_/i.test(node.id)},getWindow:function(node){var doc=node.ownerDocument||node;return doc.defaultView||doc.parentWindow},getCommonAncestor:function(nodeA,nodeB){if(nodeA===nodeB)return nodeA;var parentsA=[nodeA],parentsB=[nodeB],parent=nodeA,i=-1;while(parent=parent.parentNode){if(parent===nodeB){return parent}parentsA.push(parent)}parent=nodeB;while(parent=parent.parentNode){if(parent===nodeA)return parent;parentsB.push(parent)}parentsA.reverse();parentsB.reverse();while(i++,parentsA[i]===parentsB[i]){}return i==0?null:parentsA[i-1]},clearEmptySibling:function(node,ignoreNext,ignorePre){function clear(next,dir){var tmpNode;while(next&&!domUtils.isBookmarkNode(next)&&(domUtils.isEmptyInlineElement(next)||!new RegExp(\"[^\\t\\n\\r\"+domUtils.fillChar+\"]\").test(next.nodeValue))){tmpNode=next[dir];domUtils.remove(next);next=tmpNode}}!ignoreNext&&clear(node.nextSibling,\"nextSibling\");!ignorePre&&clear(node.previousSibling,\"previousSibling\")},split:function(node,offset){var doc=node.ownerDocument;if(browser.ie&&offset==node.nodeValue.length){var next=doc.createTextNode(\"\");return domUtils.insertAfter(node,next)}var retval=node.splitText(offset);if(browser.ie8){var tmpNode=doc.createTextNode(\"\");domUtils.insertAfter(retval,tmpNode);domUtils.remove(tmpNode)}return retval},isWhitespace:function(node){return!new RegExp(\"[^ \\t\\n\\r\"+domUtils.fillChar+\"]\").test(node.nodeValue)},getXY:function(element){var x=0,y=0;while(element.offsetParent){y+=element.offsetTop;x+=element.offsetLeft;element=element.offsetParent}return{x:x,y:y}},on:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.addEventListener){element.addEventListener(type,handler,false)}else{if(!handler._d){handler._d={els:[]}}var key=type+handler.toString(),index=utils.indexOf(handler._d.els,element);if(!handler._d[key]||index==-1){if(index==-1){handler._d.els.push(element)}if(!handler._d[key]){handler._d[key]=function(evt){return handler.call(evt.srcElement,evt||window.event)}}element.attachEvent(\"on\"+type,handler._d[key])}}}element=null},un:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.removeEventListener){element.removeEventListener(type,handler,false)}else{var key=type+handler.toString();try{element.detachEvent(\"on\"+type,handler._d?handler._d[key]:handler)}catch(e){}if(handler._d&&handler._d[key]){var index=utils.indexOf(handler._d.els,element);if(index!=-1){handler._d.els.splice(index,1)}handler._d.els.length==0&&delete handler._d[key]}}}},isSameElement:function(nodeA,nodeB){if(nodeA.tagName!=nodeB.tagName){return false}var thisAttrs=nodeA.attributes,otherAttrs=nodeB.attributes;if(!ie&&thisAttrs.length!=otherAttrs.length){return false}var attrA,attrB,al=0,bl=0;for(var i=0;attrA=thisAttrs[i++];){if(attrA.nodeName==\"style\"){if(attrA.specified){al++}if(domUtils.isSameStyle(nodeA,nodeB)){continue}else{return false}}if(ie){if(attrA.specified){al++;attrB=otherAttrs.getNamedItem(attrA.nodeName)}else{continue}}else{attrB=nodeB.attributes[attrA.nodeName]}if(!attrB.specified||attrA.nodeValue!=attrB.nodeValue){return false}}if(ie){for(i=0;attrB=otherAttrs[i++];){if(attrB.specified){bl++}}if(al!=bl){return false}}return true},isSameStyle:function(nodeA,nodeB){var styleA=nodeA.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\"),styleB=nodeB.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\");if(browser.opera){styleA=nodeA.style;styleB=nodeB.style;if(styleA.length!=styleB.length)return false;for(var p in styleA){if(/^(\\d+|csstext)$/i.test(p)){continue}if(styleA[p]!=styleB[p]){return false}}return true}if(!styleA||!styleB){return styleA==styleB}styleA=styleA.split(\";\");styleB=styleB.split(\";\");if(styleA.length!=styleB.length){return false}for(var i=0,ci;ci=styleA[i++];){if(utils.indexOf(styleB,ci)==-1){return false}}return true},isBlockElm:function(node){return node.nodeType==1&&(dtd.$block[node.tagName]||styleBlock[domUtils.getComputedStyle(node,\"display\")])&&!dtd.$nonChild[node.tagName]},isBody:function(node){return node&&node.nodeType==1&&node.tagName.toLowerCase()==\"body\"},breakParent:function(node,parent){var tmpNode,parentClone=node,clone=node,leftNodes,rightNodes;do{parentClone=parentClone.parentNode;if(leftNodes){tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(leftNodes);leftNodes=tmpNode;tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(rightNodes);rightNodes=tmpNode}else{leftNodes=parentClone.cloneNode(false);rightNodes=leftNodes.cloneNode(false)}while(tmpNode=clone.previousSibling){leftNodes.insertBefore(tmpNode,leftNodes.firstChild)}while(tmpNode=clone.nextSibling){rightNodes.appendChild(tmpNode)}clone=parentClone}while(parent!==parentClone);tmpNode=parent.parentNode;tmpNode.insertBefore(leftNodes,parent);tmpNode.insertBefore(rightNodes,parent);tmpNode.insertBefore(node,rightNodes);domUtils.remove(parent);return node},isEmptyInlineElement:function(node){if(node.nodeType!=1||!dtd.$removeEmpty[node.tagName]){return 0}node=node.firstChild;while(node){if(domUtils.isBookmarkNode(node)){return 0}if(node.nodeType==1&&!domUtils.isEmptyInlineElement(node)||node.nodeType==3&&!domUtils.isWhitespace(node)){return 0}node=node.nextSibling}return 1},trimWhiteTextNode:function(node){function remove(dir){var child;while((child=node[dir])&&child.nodeType==3&&domUtils.isWhitespace(child)){node.removeChild(child)}}remove(\"firstChild\");remove(\"lastChild\")},mergeChild:function(node,tagName,attrs){var list=domUtils.getElementsByTagName(node,node.tagName.toLowerCase());for(var i=0,ci;ci=list[i++];){if(!ci.parentNode||domUtils.isBookmarkNode(ci)){continue}if(ci.tagName.toLowerCase()==\"span\"){if(node===ci.parentNode){domUtils.trimWhiteTextNode(node);if(node.childNodes.length==1){node.style.cssText=ci.style.cssText+\";\"+node.style.cssText;domUtils.remove(ci,true);continue}}ci.style.cssText=node.style.cssText+\";\"+ci.style.cssText;if(attrs){var style=attrs.style;if(style){style=style.split(\";\");for(var j=0,s;s=style[j++];){ci.style[utils.cssStyleToDomStyle(s.split(\":\")[0])]=s.split(\":\")[1]}}}if(domUtils.isSameStyle(ci,node)){domUtils.remove(ci,true)}continue}if(domUtils.isSameElement(node,ci)){domUtils.remove(ci,true)}}},getElementsByTagName:function(node,tagName,filter){if(filter&&utils.isString(filter)){var className=filter;filter=function(node){return domUtils.hasClass(node,className)}}tagName=utils.trim(tagName).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[];for(var n=0,ni;ni=tagName[n++];){var list=node.getElementsByTagName(ni);for(var i=0,ci;ci=list[i++];){if(!filter||filter(ci))arr.push(ci)}}return arr},mergeToParent:function(node){var parent=node.parentNode;while(parent&&dtd.$removeEmpty[parent.tagName]){if(parent.tagName==node.tagName||parent.tagName==\"A\"){domUtils.trimWhiteTextNode(parent);if(parent.tagName==\"SPAN\"&&!domUtils.isSameStyle(parent,node)||parent.tagName==\"A\"&&node.tagName==\"SPAN\"){if(parent.childNodes.length>1||parent!==node.parentNode){node.style.cssText=parent.style.cssText+\";\"+node.style.cssText;parent=parent.parentNode;continue}else{parent.style.cssText+=\";\"+node.style.cssText;if(parent.tagName==\"A\"){parent.style.textDecoration=\"underline\"}}}if(parent.tagName!=\"A\"){parent===node.parentNode&&domUtils.remove(node,true);break}}parent=parent.parentNode}},mergeSibling:function(node,ignorePre,ignoreNext){function merge(rtl,start,node){var next;if((next=node[rtl])&&!domUtils.isBookmarkNode(next)&&next.nodeType==1&&domUtils.isSameElement(node,next)){while(next.firstChild){if(start==\"firstChild\"){node.insertBefore(next.lastChild,node.firstChild)}else{node.appendChild(next.firstChild)}}domUtils.remove(next)}}!ignorePre&&merge(\"previousSibling\",\"firstChild\",node);!ignoreNext&&merge(\"nextSibling\",\"lastChild\",node)},unSelectable:ie&&browser.ie9below||browser.opera?function(node){node.onselectstart=function(){return false};node.onclick=node.onkeyup=node.onkeydown=function(){return false};node.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\");for(var i=0,ci;ci=node.all[i++];){switch(ci.tagName.toLowerCase()){case\"iframe\":case\"textarea\":case\"input\":case\"select\":break;default:ci.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\")}}}:function(node){node.style.MozUserSelect=node.style.webkitUserSelect=node.style.msUserSelect=node.style.KhtmlUserSelect=\"none\"},removeAttributes:function(node,attrNames){attrNames=utils.isArray(attrNames)?attrNames:utils.trim(attrNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci;ci=attrNames[i++];){ci=attrFix[ci]||ci;switch(ci){case\"className\":node[ci]=\"\";break;case\"style\":node.style.cssText=\"\";var val=node.getAttributeNode(\"style\");!browser.ie&&val&&node.removeAttributeNode(val)}node.removeAttribute(ci)}},createElement:function(doc,tag,attrs){return domUtils.setAttributes(doc.createElement(tag),attrs)},setAttributes:function(node,attrs){for(var attr in attrs){if(\"_propertyDelete\"===attr){for(var j=0;j<attrs[attr].length;j++){if(node.hasAttribute(attrs[attr][j])){node.removeAttribute(attrs[attr][j])}}continue}if(attrs.hasOwnProperty(attr)){var value=attrs[attr];switch(attr){case\"class\":node.className=value;break;case\"style\":node.style.cssText=node.style.cssText+\";\"+value;break;case\"innerHTML\":node[attr]=value;break;case\"value\":node.value=value;break;default:node.setAttribute(attrFix[attr]||attr,value)}}}return node},getComputedStyle:function(element,styleName){var pros=\"width height top left\";if(pros.indexOf(styleName)>-1){return element[\"offset\"+styleName.replace(/^\\w/,function(s){return s.toUpperCase()})]+\"px\"}if(element.nodeType===3){element=element.parentNode}if(browser.ie&&browser.version<9&&styleName===\"font-size\"&&!element.style.fontSize&&!dtd.$empty[element.tagName]&&!dtd.$nonChild[element.tagName]){var span=element.ownerDocument.createElement(\"span\");span.style.cssText=\"padding:0;border:0;font-family:simsun;\";span.innerHTML=\".\";element.appendChild(span);var result=span.offsetHeight;element.removeChild(span);span=null;return result+\"px\"}try{var value=domUtils.getStyle(element,styleName)||(window.getComputedStyle?domUtils.getWindow(element).getComputedStyle(element,\"\").getPropertyValue(styleName):(element.currentStyle||element.style)[utils.cssStyleToDomStyle(styleName)])}catch(e){return\"\"}return utils.transUnitToPx(utils.fixColor(styleName,value))},removeClasses:function(elm,classNames){classNames=utils.isArray(classNames)?classNames:utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){cls=cls.replace(new RegExp(\"\\\\b\"+ci+\"\\\\b\"),\"\")}cls=utils.trim(cls).replace(/[ ]{2,}/g,\" \");if(cls){elm.className=cls}else{domUtils.removeAttributes(elm,[\"class\"])}},addClass:function(elm,classNames){if(!elm)return;classNames=utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\").test(cls)){cls+=\" \"+ci}}elm.className=utils.trim(cls)},hasClass:function(element,className){if(utils.isRegExp(className)){return className.test(element.className)}className=utils.trim(className).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=element.className;ci=className[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\",\"i\").test(cls)){return false}}return i-1==className.length},preventDefault:function(evt){evt.preventDefault?evt.preventDefault():evt.returnValue=false},removeStyle:function(element,name){if(browser.ie){if(name==\"color\"){name=\"(^|;)\"+name}element.style.cssText=element.style.cssText.replace(new RegExp(name+\"[^:]*:[^;]+;?\",\"ig\"),\"\")}else{if(element.style.removeProperty){element.style.removeProperty(name)}else{element.style.removeAttribute(utils.cssStyleToDomStyle(name))}}if(!element.style.cssText){domUtils.removeAttributes(element,[\"style\"])}},getStyle:function(element,name){var value=element.style[utils.cssStyleToDomStyle(name)];return utils.fixColor(name,value)},setStyle:function(element,name,value){element.style[utils.cssStyleToDomStyle(name)]=value;if(!utils.trim(element.style.cssText)){this.removeAttributes(element,\"style\")}},setStyles:function(element,styles){for(var name in styles){if(styles.hasOwnProperty(name)){domUtils.setStyle(element,name,styles[name])}}},removeDirtyAttr:function(node){for(var i=0,ci,nodes=node.getElementsByTagName(\"*\");ci=nodes[i++];){ci.removeAttribute(\"_moz_dirty\")}node.removeAttribute(\"_moz_dirty\")},getChildCount:function(node,fn){var count=0,first=node.firstChild;fn=fn||function(){return 1};while(first){if(fn(first)){count++}first=first.nextSibling}return count},isEmptyNode:function(node){return!node.firstChild||domUtils.getChildCount(node,function(node){return!domUtils.isBr(node)&&!domUtils.isBookmarkNode(node)&&!domUtils.isWhitespace(node)})==0},clearSelectedArr:function(nodes){var node;while(node=nodes.pop()){domUtils.removeAttributes(node,[\"class\"])}},scrollToView:function(node,win,offsetTop){offsetTop=offsetTop||0;var getViewPaneSize=function(){var doc=win.document,mode=doc.compatMode==\"CSS1Compat\";return{width:(mode?doc.documentElement.clientWidth:doc.body.clientWidth)||0,height:(mode?doc.documentElement.clientHeight:doc.body.clientHeight)||0}},getScrollPosition=function(win){if(\"pageXOffset\"in win){return{x:win.pageXOffset||0,y:win.pageYOffset||0}}else{var doc=win.document;return{x:doc.documentElement.scrollLeft||doc.body.scrollLeft||0,y:doc.documentElement.scrollTop||doc.body.scrollTop||0}}};var winHeight=getViewPaneSize().height,offset=winHeight*-1+offsetTop;offset+=node.offsetHeight||0;var elementPosition=domUtils.getXY(node);offset+=elementPosition.y;var currentScroll=getScrollPosition(win).y;if(offset>currentScroll||offset<currentScroll-winHeight){win.scrollTo({top:offset+(offset<0?-20:20),behavior:\"smooth\"})}},isBr:function(node){return node.nodeType==1&&node.tagName==\"BR\"},isFillChar:function(node,isInStart){if(node.nodeType!=3)return false;var text=node.nodeValue;if(isInStart){return new RegExp(\"^\"+domUtils.fillChar).test(text)}return!text.replace(new RegExp(domUtils.fillChar,\"g\"),\"\").length},isStartInblock:function(range){var tmpRange=range.cloneRange(),flag=0,start=tmpRange.startContainer,tmp;if(start.nodeType==1&&start.childNodes[tmpRange.startOffset]){start=start.childNodes[tmpRange.startOffset];var pre=start.previousSibling;while(pre&&domUtils.isFillChar(pre)){start=pre;pre=pre.previousSibling}}if(this.isFillChar(start,true)&&tmpRange.startOffset==1){tmpRange.setStartBefore(start);start=tmpRange.startContainer}while(start&&domUtils.isFillChar(start)){tmp=start;start=start.previousSibling}if(tmp){tmpRange.setStartBefore(tmp);start=tmpRange.startContainer}if(start.nodeType==1&&domUtils.isEmptyNode(start)&&tmpRange.startOffset==1){tmpRange.setStart(start,0).collapse(true)}while(!tmpRange.startOffset){start=tmpRange.startContainer;if(domUtils.isBlockElm(start)||domUtils.isBody(start)){flag=1;break}var pre=tmpRange.startContainer.previousSibling,tmpNode;if(!pre){tmpRange.setStartBefore(tmpRange.startContainer)}else{while(pre&&domUtils.isFillChar(pre)){tmpNode=pre;pre=pre.previousSibling}if(tmpNode){tmpRange.setStartBefore(tmpNode)}else{tmpRange.setStartBefore(tmpRange.startContainer)}}}return flag&&!domUtils.isBody(tmpRange.startContainer)?1:0},isEmptyBlock:function(node,reg){if(node.nodeType!=1)return 0;reg=reg||new RegExp(\"[  \\t\\r\\n\"+domUtils.fillChar+\"]\",\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1},setViewportOffset:function(element,offset){var left=parseInt(element.style.left)|0;var top=parseInt(element.style.top)|0;var rect=element.getBoundingClientRect();var offsetLeft=offset.left-rect.left;var offsetTop=offset.top-rect.top;if(offsetLeft){element.style.left=left+offsetLeft+\"px\"}if(offsetTop){element.style.top=top+offsetTop+\"px\"}},fillNode:function(doc,node){var tmpNode=browser.ie?doc.createTextNode(domUtils.fillChar):doc.createElement(\"br\");node.innerHTML=\"\";node.appendChild(tmpNode)},moveChild:function(src,tag,dir){while(src.firstChild){if(dir&&tag.firstChild){tag.insertBefore(src.lastChild,tag.firstChild)}else{tag.appendChild(src.firstChild)}}},hasNoAttributes:function(node){return browser.ie?/^<\\w+\\s*?>/.test(node.outerHTML):node.attributes.length==0},isCustomeNode:function(node){return node.nodeType==1&&node.getAttribute(\"_ue_custom_node_\")},isTagNode:function(node,tagNames){return node.nodeType==1&&new RegExp(\"\\\\b\"+node.tagName+\"\\\\b\",\"i\").test(tagNames)},filterNodeList:function(nodelist,filter,forAll){var results=[];if(!utils.isFunction(filter)){var str=filter;filter=function(n){return utils.indexOf(utils.isArray(str)?str:str.split(\" \"),n.tagName.toLowerCase())!=-1}}utils.each(nodelist,function(n){filter(n)&&results.push(n)});return results.length==0?null:results.length==1||!forAll?results[0]:results},isInNodeEndBoundary:function(rng,node){var start=rng.startContainer;if(start.nodeType==3&&rng.startOffset!=start.nodeValue.length){return 0}if(start.nodeType==1&&rng.startOffset!=start.childNodes.length){return 0}while(start!==node){if(start.nextSibling){return 0}start=start.parentNode}return 1},isBoundaryNode:function(node,dir){var tmp;while(!domUtils.isBody(node)){tmp=node;node=node.parentNode;if(tmp!==node[dir]){return false}}return true},fillHtml:browser.ie11below?\"&nbsp;\":\"<br/>\",loadScript:function(url,cb){var script;script=document.createElement(\"script\");script.src=url;script.onload=function(){cb&&cb({isNew:true})};document.getElementsByTagName(\"head\")[0].appendChild(script)}};var fillCharReg=new RegExp(domUtils.fillChar,\"g\");(function(){var guid=0,fillChar=domUtils.fillChar,fillData;function updateCollapse(range){range.collapsed=range.startContainer&&range.endContainer&&range.startContainer===range.endContainer&&range.startOffset===range.endOffset}function selectOneNode(rng){return!rng.collapsed&&rng.startContainer.nodeType===1&&rng.startContainer===rng.endContainer&&rng.endOffset-rng.startOffset===1}function setEndPoint(toStart,node,offset,range){if(node.nodeType===1&&(dtd.$empty[node.tagName]||dtd.$nonChild[node.tagName])){offset=domUtils.getNodeIndex(node)+(toStart?0:1);node=node.parentNode}if(toStart){range.startContainer=node;range.startOffset=offset;if(!range.endContainer){range.collapse(true)}}else{range.endContainer=node;range.endOffset=offset;if(!range.startContainer){range.collapse(false)}}updateCollapse(range);return range}function execContentsAction(range,action){var start=range.startContainer,end=range.endContainer,startOffset=range.startOffset,endOffset=range.endOffset,doc=range.document,frag=doc.createDocumentFragment(),tmpStart,tmpEnd;if(start.nodeType==1){start=start.childNodes[startOffset]||(tmpStart=start.appendChild(doc.createTextNode(\"\")))}if(end.nodeType==1){end=end.childNodes[endOffset]||(tmpEnd=end.appendChild(doc.createTextNode(\"\")))}if(start===end&&start.nodeType==3){frag.appendChild(doc.createTextNode(start.substringData(startOffset,endOffset-startOffset)));if(action){start.deleteData(startOffset,endOffset-startOffset);range.collapse(true)}return frag}var current,currentLevel,clone=frag,startParents=domUtils.findParents(start,true),endParents=domUtils.findParents(end,true);for(var i=0;startParents[i]==endParents[i];){i++}for(var j=i,si;si=startParents[j];j++){current=si.nextSibling;if(si==start){if(!tmpStart){if(range.startContainer.nodeType==3){clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset)));if(action){start.deleteData(startOffset,start.nodeValue.length-startOffset)}}else{clone.appendChild(!action?start.cloneNode(true):start)}}}else{currentLevel=si.cloneNode(false);clone.appendChild(currentLevel)}while(current){if(current===end||current===endParents[j]){break}si=current.nextSibling;clone.appendChild(!action?current.cloneNode(true):current);current=si}clone=currentLevel}clone=frag;if(!startParents[i]){clone.appendChild(startParents[i-1].cloneNode(false));clone=clone.firstChild}for(var j=i,ei;ei=endParents[j];j++){current=ei.previousSibling;if(ei==end){if(!tmpEnd&&range.endContainer.nodeType==3){clone.appendChild(doc.createTextNode(end.substringData(0,endOffset)));if(action){end.deleteData(0,endOffset)}}}else{currentLevel=ei.cloneNode(false);clone.appendChild(currentLevel)}if(j!=i||!startParents[i]){while(current){if(current===start){break}ei=current.previousSibling;clone.insertBefore(!action?current.cloneNode(true):current,clone.firstChild);current=ei}}clone=currentLevel}if(action){range.setStartBefore(!endParents[i]?endParents[i-1]:!startParents[i]?startParents[i-1]:endParents[i]).collapse(true)}tmpStart&&domUtils.remove(tmpStart);tmpEnd&&domUtils.remove(tmpEnd);return frag}var Range=dom.Range=function(document){var me=this;me.startContainer=me.startOffset=me.endContainer=me.endOffset=null;me.document=document;me.collapsed=true};function removeFillData(doc,excludeNode){try{if(fillData&&domUtils.inDoc(fillData,doc)){if(!fillData.nodeValue.replace(fillCharReg,\"\").length){var tmpNode=fillData.parentNode;domUtils.remove(fillData);while(tmpNode&&domUtils.isEmptyInlineElement(tmpNode)&&(browser.safari?!(domUtils.getPosition(tmpNode,excludeNode)&domUtils.POSITION_CONTAINS):!tmpNode.contains(excludeNode))){fillData=tmpNode.parentNode;domUtils.remove(tmpNode);tmpNode=fillData}}else{fillData.nodeValue=fillData.nodeValue.replace(fillCharReg,\"\")}}}catch(e){}}function mergeSibling(node,dir){var tmpNode;node=node[dir];while(node&&domUtils.isFillChar(node)){tmpNode=node[dir];domUtils.remove(node);node=tmpNode}}Range.prototype={cloneContents:function(){return this.collapsed?null:execContentsAction(this,0)},deleteContents:function(){var txt;if(!this.collapsed){execContentsAction(this,1)}if(browser.webkit){txt=this.startContainer;if(txt.nodeType==3&&!txt.nodeValue.length){this.setStartBefore(txt).collapse(true);domUtils.remove(txt)}}return this},extractContents:function(){return this.collapsed?null:execContentsAction(this,2)},setStart:function(node,offset){return setEndPoint(true,node,offset,this)},setEnd:function(node,offset){return setEndPoint(false,node,offset,this)},setStartAfter:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node)+1)},setStartBefore:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node))},setEndAfter:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node)+1)},setEndBefore:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node))},setStartAtFirst:function(node){return this.setStart(node,0)},setStartAtLast:function(node){return this.setStart(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},setEndAtFirst:function(node){return this.setEnd(node,0)},setEndAtLast:function(node){return this.setEnd(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},selectNode:function(node){return this.setStartBefore(node).setEndAfter(node)},selectNodeContents:function(node){return this.setStart(node,0).setEndAtLast(node)},cloneRange:function(){var me=this;return new Range(me.document).setStart(me.startContainer,me.startOffset).setEnd(me.endContainer,me.endOffset)},collapse:function(toStart){var me=this;if(toStart){me.endContainer=me.startContainer;me.endOffset=me.startOffset}else{me.startContainer=me.endContainer;me.startOffset=me.endOffset}me.collapsed=true;return me},shrinkBoundary:function(ignoreEnd){var me=this,child,collapsed=me.collapsed;function check(node){return node.nodeType==1&&!domUtils.isBookmarkNode(node)&&!dtd.$empty[node.tagName]&&!dtd.$nonChild[node.tagName]}while(me.startContainer.nodeType==1&&(child=me.startContainer.childNodes[me.startOffset])&&check(child)){me.setStart(child,0)}if(collapsed){return me.collapse(true)}if(!ignoreEnd){while(me.endContainer.nodeType==1&&me.endOffset>0&&(child=me.endContainer.childNodes[me.endOffset-1])&&check(child)){me.setEnd(child,child.childNodes.length)}}return me},getCommonAncestor:function(includeSelf,ignoreTextNode){var me=this,start=me.startContainer,end=me.endContainer;if(start===end){if(includeSelf&&selectOneNode(this)){start=start.childNodes[me.startOffset];if(start.nodeType==1)return start}return ignoreTextNode&&start.nodeType==3?start.parentNode:start}return domUtils.getCommonAncestor(start,end)},trimBoundary:function(ignoreEnd){this.txtToElmBoundary();var start=this.startContainer,offset=this.startOffset,collapsed=this.collapsed,end=this.endContainer;if(start.nodeType==3){if(offset==0){this.setStartBefore(start)}else{if(offset>=start.nodeValue.length){this.setStartAfter(start)}else{var textNode=domUtils.split(start,offset);if(start===end){this.setEnd(textNode,this.endOffset-offset)}else if(start.parentNode===end){this.endOffset+=1}this.setStartBefore(textNode)}}if(collapsed){return this.collapse(true)}}if(!ignoreEnd){offset=this.endOffset;end=this.endContainer;if(end.nodeType==3){if(offset==0){this.setEndBefore(end)}else{offset<end.nodeValue.length&&domUtils.split(end,offset);this.setEndAfter(end)}}}return this},txtToElmBoundary:function(ignoreCollapsed){function adjust(r,c){var container=r[c+\"Container\"],offset=r[c+\"Offset\"];if(container.nodeType==3){if(!offset){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"Before\"](container)}else if(offset>=container.nodeValue.length){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"After\"](container)}}}if(ignoreCollapsed||!this.collapsed){adjust(this,\"start\");adjust(this,\"end\")}return this},insertNode:function(node){var first=node,length=1;if(node.nodeType==11){first=node.firstChild;length=node.childNodes.length}this.trimBoundary(true);var start=this.startContainer,offset=this.startOffset;var nextNode=start.childNodes[offset];if(nextNode){start.insertBefore(node,nextNode)}else{start.appendChild(node)}if(first.parentNode===this.endContainer){this.endOffset=this.endOffset+length}return this.setStartBefore(first)},setCursor:function(toEnd,noFillData){return this.collapse(!toEnd).select(noFillData)},createBookmark:function(serialize,same){var endNode,startNode=this.document.createElement(\"span\");startNode.style.cssText=\"display:none;line-height:0px;\";startNode.appendChild(this.document.createTextNode(\"‍\"));startNode.id=\"_baidu_bookmark_start_\"+(same?\"\":guid++);if(!this.collapsed){endNode=startNode.cloneNode(true);endNode.id=\"_baidu_bookmark_end_\"+(same?\"\":guid++)}this.insertNode(startNode);if(endNode){this.collapse().insertNode(endNode).setEndBefore(endNode)}this.setStartAfter(startNode);return{start:serialize?startNode.id:startNode,end:endNode?serialize?endNode.id:endNode:null,id:serialize}},moveToBookmark:function(bookmark){var start=bookmark.id?this.document.getElementById(bookmark.start):bookmark.start,end=bookmark.end&&bookmark.id?this.document.getElementById(bookmark.end):bookmark.end;this.setStartBefore(start);domUtils.remove(start);if(end){this.setEndBefore(end);domUtils.remove(end)}else{this.collapse(true)}return this},enlarge:function(toBlock,stopFn){var isBody=domUtils.isBody,pre,node,tmp=this.document.createTextNode(\"\");if(toBlock){node=this.startContainer;if(node.nodeType==1){if(node.childNodes[this.startOffset]){pre=node=node.childNodes[this.startOffset]}else{node.appendChild(tmp);pre=node=tmp}}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.previousSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setStartBefore(node);break}pre=node;node=node.parentNode}node=this.endContainer;if(node.nodeType==1){if(pre=node.childNodes[this.endOffset]){node.insertBefore(tmp,pre)}else{node.appendChild(tmp)}pre=node=tmp}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.nextSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setEndAfter(node);break}pre=node;node=node.parentNode}if(tmp.parentNode===this.endContainer){this.endOffset--}domUtils.remove(tmp)}if(!this.collapsed){while(this.startOffset==0){if(stopFn&&stopFn(this.startContainer)){break}if(isBody(this.startContainer)){break}this.setStartBefore(this.startContainer)}while(this.endOffset==(this.endContainer.nodeType==1?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)){if(stopFn&&stopFn(this.endContainer)){break}if(isBody(this.endContainer)){break}this.setEndAfter(this.endContainer)}}return this},enlargeToBlockElm:function(ignoreEnd){while(!domUtils.isBlockElm(this.startContainer)){this.setStartBefore(this.startContainer)}if(!ignoreEnd){while(!domUtils.isBlockElm(this.endContainer)){this.setEndAfter(this.endContainer)}}return this},adjustmentBoundary:function(){if(!this.collapsed){while(!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length&&this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setStartAfter(this.startContainer)}while(!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[this.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setEndBefore(this.endContainer)}}return this},applyInlineStyle:function(tagName,attrs,list){if(this.collapsed)return this;this.trimBoundary().enlarge(false,function(node){return node.nodeType==1&&domUtils.isBlockElm(node)}).adjustmentBoundary();var bookmark=this.createBookmark(),end=bookmark.end,filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},current=domUtils.getNextDomNode(bookmark.start,false,filterFn),node,pre,range=this.cloneRange();while(current&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd[tagName][current.tagName]){range.setStartBefore(current);node=current;while(node&&(node.nodeType==3||dtd[tagName][node.tagName])&&node!==end){pre=node;node=domUtils.getNextDomNode(node,node.nodeType==1,null,function(parent){return dtd[tagName][parent.tagName]})}var frag=range.setEndAfter(pre).extractContents(),elm;if(list&&list.length>0){var level,top;top=level=list[0].cloneNode(false);for(var i=1,ci;ci=list[i++];){level.appendChild(ci.cloneNode(false));level=level.firstChild}elm=level}else{elm=range.document.createElement(tagName)}if(attrs){domUtils.setAttributes(elm,attrs)}elm.appendChild(frag);if(elm.tagName==\"SPAN\"&&attrs&&attrs.style){utils.each(elm.getElementsByTagName(\"span\"),function(s){s.style.cssText=s.style.cssText+\";\"+attrs.style})}range.insertNode(list?top:elm);var aNode;if(tagName==\"span\"&&attrs.style&&/text\\-decoration/.test(attrs.style)&&(aNode=domUtils.findParentByTagName(elm,\"a\",true))){domUtils.setAttributes(aNode,attrs);domUtils.remove(elm,true);elm=aNode}else{domUtils.mergeSibling(elm);domUtils.clearEmptySibling(elm)}domUtils.mergeChild(elm,attrs);current=domUtils.getNextDomNode(elm,false,filterFn);domUtils.mergeToParent(elm);if(node===end){break}}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return this.moveToBookmark(bookmark)},removeInlineStyle:function(tagNames){if(this.collapsed)return this;tagNames=utils.isArray(tagNames)?tagNames:[tagNames];this.shrinkBoundary().adjustmentBoundary();var start=this.startContainer,end=this.endContainer;while(1){if(start.nodeType==1){if(utils.indexOf(tagNames,start.tagName.toLowerCase())>-1){break}if(start.tagName.toLowerCase()==\"body\"){start=null;break}}start=start.parentNode}while(1){if(end.nodeType==1){if(utils.indexOf(tagNames,end.tagName.toLowerCase())>-1){break}if(end.tagName.toLowerCase()==\"body\"){end=null;break}}end=end.parentNode}var bookmark=this.createBookmark(),frag,tmpRange;if(start){tmpRange=this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(start,true);start.parentNode.insertBefore(bookmark.start,start)}if(end){tmpRange=this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(end,false,true);end.parentNode.insertBefore(bookmark.end,end.nextSibling)}var current=domUtils.getNextDomNode(bookmark.start,false,function(node){return node.nodeType==1}),next;while(current&&current!==bookmark.end){next=domUtils.getNextDomNode(current,true,function(node){return node.nodeType==1});if(utils.indexOf(tagNames,current.tagName.toLowerCase())>-1){domUtils.remove(current,true)}current=next}return this.moveToBookmark(bookmark)},getClosedNode:function(){var node;if(!this.collapsed){var range=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(selectOneNode(range)){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&(dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName])){node=child}}}return node},select:browser.ie?function(noFillData,textRange){var nativeRange;if(!this.collapsed)this.shrinkBoundary();var node=this.getClosedNode();if(node&&!textRange){try{nativeRange=this.document.body.createControlRange();nativeRange.addElement(node);nativeRange.select()}catch(e){}return this}var bookmark=this.createBookmark(),start=bookmark.start,end;nativeRange=this.document.body.createTextRange();nativeRange.moveToElementText(start);nativeRange.moveStart(\"character\",1);if(!this.collapsed){var nativeRangeEnd=this.document.body.createTextRange();end=bookmark.end;nativeRangeEnd.moveToElementText(end);nativeRange.setEndPoint(\"EndToEnd\",nativeRangeEnd)}else{if(!noFillData&&this.startContainer.nodeType!=3){var tmpText=this.document.createTextNode(fillChar),tmp=this.document.createElement(\"span\");tmp.appendChild(this.document.createTextNode(fillChar));start.parentNode.insertBefore(tmp,start);start.parentNode.insertBefore(tmpText,start);removeFillData(this.document,tmpText);fillData=tmpText;mergeSibling(tmp,\"previousSibling\");mergeSibling(start,\"nextSibling\");nativeRange.moveStart(\"character\",-1);nativeRange.collapse(true)}}this.moveToBookmark(bookmark);tmp&&domUtils.remove(tmp);try{nativeRange.select()}catch(e){}return this}:function(notInsertFillData){function checkOffset(rng){function check(node,offset,dir){if(node.nodeType==3&&node.nodeValue.length<offset){rng[dir+\"Offset\"]=node.nodeValue.length}}check(rng.startContainer,rng.startOffset,\"start\");check(rng.endContainer,rng.endOffset,\"end\")}var win=domUtils.getWindow(this.document),sel=win.getSelection(),txtNode;browser.gecko?this.document.body.focus():win.focus();if(sel){sel.removeAllRanges();if(this.collapsed&&!notInsertFillData){var start=this.startContainer,child=start;if(start.nodeType==1){child=start.childNodes[this.startOffset]}if(!(start.nodeType==3&&this.startOffset)&&(child?!child.previousSibling||child.previousSibling.nodeType!=3:!start.lastChild||start.lastChild.nodeType!=3)){txtNode=this.document.createTextNode(fillChar);this.insertNode(txtNode);removeFillData(this.document,txtNode);mergeSibling(txtNode,\"previousSibling\");mergeSibling(txtNode,\"nextSibling\");fillData=txtNode;this.setStart(txtNode,browser.webkit?1:0).collapse(true)}}var nativeRange=this.document.createRange();if(this.collapsed&&browser.opera&&this.startContainer.nodeType==1){var child=this.startContainer.childNodes[this.startOffset];if(!child){child=this.startContainer.lastChild;if(child&&domUtils.isBr(child)){this.setStartBefore(child).collapse(true)}}else{while(child&&domUtils.isBlockElm(child)){if(child.nodeType==1&&child.childNodes[0]){child=child.childNodes[0]}else{break}}child&&this.setStartBefore(child).collapse(true)}}checkOffset(this);nativeRange.setStart(this.startContainer,this.startOffset);nativeRange.setEnd(this.endContainer,this.endOffset);sel.addRange(nativeRange)}return this},scrollToView:function(win,offset){win=win?window:domUtils.getWindow(this.document);offset=offset||win.innerHeight-100;var me=this,span=me.document.createElement(\"span\");span.innerHTML=\"&nbsp;\";me.cloneRange().insertNode(span);domUtils.scrollToView(span,win,offset);domUtils.remove(span);return me},inFillChar:function(){var start=this.startContainer;if(this.collapsed&&start.nodeType==3&&start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\").length+1==start.nodeValue.length){return true}return false},createAddress:function(ignoreEnd,ignoreTxt){var addr={},me=this;function getAddress(isStart){var node=isStart?me.startContainer:me.endContainer;var parents=domUtils.findParents(node,true,function(node){return!domUtils.isBody(node)}),addrs=[];for(var i=0,ci;ci=parents[i++];){addrs.push(domUtils.getNodeIndex(ci,ignoreTxt))}var firstIndex=0;if(ignoreTxt){if(node.nodeType==3){var tmpNode=node.previousSibling;while(tmpNode&&tmpNode.nodeType==3){firstIndex+=tmpNode.nodeValue.replace(fillCharReg,\"\").length;tmpNode=tmpNode.previousSibling}firstIndex+=isStart?me.startOffset:me.endOffset}else{node=node.childNodes[isStart?me.startOffset:me.endOffset];if(node){firstIndex=domUtils.getNodeIndex(node,ignoreTxt)}else{node=isStart?me.startContainer:me.endContainer;var first=node.firstChild;while(first){if(domUtils.isFillChar(first)){first=first.nextSibling;continue}firstIndex++;if(first.nodeType==3){while(first&&first.nodeType==3){first=first.nextSibling}}else{first=first.nextSibling}}}}}else{firstIndex=isStart?domUtils.isFillChar(node)?0:me.startOffset:me.endOffset}if(firstIndex<0){firstIndex=0}addrs.push(firstIndex);return addrs}addr.startAddress=getAddress(true);if(!ignoreEnd){addr.endAddress=me.collapsed?[].concat(addr.startAddress):getAddress()}return addr},moveToAddress:function(addr,ignoreEnd){var me=this;function getNode(address,isStart){var tmpNode=me.document.body,parentNode,offset;for(var i=0,ci,l=address.length;i<l;i++){ci=address[i];parentNode=tmpNode;tmpNode=tmpNode.childNodes[ci];if(!tmpNode){offset=ci;break}}if(isStart){if(tmpNode){me.setStartBefore(tmpNode)}else{me.setStart(parentNode,offset)}}else{if(tmpNode){me.setEndBefore(tmpNode)}else{me.setEnd(parentNode,offset)}}}getNode(addr.startAddress,true);!ignoreEnd&&addr.endAddress&&getNode(addr.endAddress);return me},equals:function(rng){for(var p in this){if(this.hasOwnProperty(p)){if(this[p]!==rng[p])return false}}return true},traversal:function(doFn,filterFn){if(this.collapsed)return this;var bookmark=this.createBookmark(),end=bookmark.end,current=domUtils.getNextDomNode(bookmark.start,false,filterFn);while(current&&current!==end&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){var tmpNode=domUtils.getNextDomNode(current,false,filterFn);doFn(current);current=tmpNode}return this.moveToBookmark(bookmark)}}})();(function(){function getBoundaryInformation(range,start){var getIndex=domUtils.getNodeIndex;range=range.duplicate();range.collapse(start);var parent=range.parentElement();if(!parent.hasChildNodes()){return{container:parent,offset:0}}var siblings=parent.children,child,testRange=range.duplicate(),startIndex=0,endIndex=siblings.length-1,index=-1,distance;while(startIndex<=endIndex){index=Math.floor((startIndex+endIndex)/2);child=siblings[index];testRange.moveToElementText(child);var position=testRange.compareEndPoints(\"StartToStart\",range);if(position>0){endIndex=index-1}else if(position<0){startIndex=index+1}else{return{container:parent,offset:getIndex(child)}}}if(index==-1){testRange.moveToElementText(parent);testRange.setEndPoint(\"StartToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;siblings=parent.childNodes;if(!distance){child=siblings[siblings.length-1];return{container:child,offset:child.nodeValue.length}}var i=siblings.length;while(distance>0){distance-=siblings[--i].nodeValue.length}return{container:siblings[i],offset:-distance}}testRange.collapse(position>0);testRange.setEndPoint(position>0?\"StartToStart\":\"EndToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;if(!distance){return dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName]?{container:parent,offset:getIndex(child)+(position>0?0:1)}:{container:child,offset:position>0?0:child.childNodes.length}}while(distance>0){try{var pre=child;child=child[position>0?\"previousSibling\":\"nextSibling\"];distance-=child.nodeValue.length}catch(e){return{container:parent,offset:getIndex(pre)}}}return{container:child,offset:position>0?-distance:child.nodeValue.length+distance}}function transformIERangeToRange(ieRange,range){if(ieRange.item){range.selectNode(ieRange.item(0))}else{var bi=getBoundaryInformation(ieRange,true);range.setStart(bi.container,bi.offset);if(ieRange.compareEndPoints(\"StartToEnd\",ieRange)!=0){bi=getBoundaryInformation(ieRange,false);range.setEnd(bi.container,bi.offset)}}return range}function _getIERange(sel){var ieRange;try{ieRange=sel.getNative().createRange()}catch(e){return null}var el=ieRange.item?ieRange.item(0):ieRange.parentElement();if((el.ownerDocument||el)===sel.document){return ieRange}return null}var Selection=dom.Selection=function(doc){var me=this,iframe;me.document=doc;if(browser.ie9below){iframe=domUtils.getWindow(doc).frameElement;domUtils.on(iframe,\"beforedeactivate\",function(){me._bakIERange=me.getIERange()});domUtils.on(iframe,\"activate\",function(){try{if(!_getIERange(me)&&me._bakIERange){me._bakIERange.select()}}catch(ex){}me._bakIERange=null})}iframe=doc=null};Selection.prototype={rangeInBody:function(rng,txtRange){var node=browser.ie9below||txtRange?rng.item?rng.item():rng.parentElement():rng.startContainer;return node===this.document.body||domUtils.inDoc(node,this.document)},getNative:function(){var doc=this.document;try{return!doc?null:browser.ie9below?doc.selection:domUtils.getWindow(doc).getSelection()}catch(e){return null}},getIERange:function(){var ieRange=_getIERange(this);if(!ieRange){if(this._bakIERange){return this._bakIERange}}return ieRange},cache:function(){this.clear();this._cachedRange=this.getRange();this._cachedStartElement=this.getStart();this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath){return this._cachedStartElementPath}var start=this.getStart();if(start){return domUtils.findParents(start,true,null,true)}return[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var nativeRange=_getIERange(this);return!!(nativeRange&&this.rangeInBody(nativeRange))}else{return!!this.getNative().rangeCount}}catch(e){return false}},getRange:function(){var me=this;function optimze(range){var child=me.document.body.firstChild,collapsed=range.collapsed;while(child&&child.firstChild){range.setStart(child,0);child=child.firstChild}if(!range.startContainer){range.setStart(me.document.body,0)}if(collapsed){range.collapse(true)}}if(me._cachedRange!=null){return this._cachedRange}var range=new baidu.editor.dom.Range(me.document);if(browser.ie9below){var nativeRange=me.getIERange();if(nativeRange){try{transformIERangeToRange(nativeRange,range)}catch(e){optimze(range)}}else{optimze(range)}}else{var sel=me.getNative();if(sel&&sel.rangeCount){var firstRange=sel.getRangeAt(0);var lastRange=sel.getRangeAt(sel.rangeCount-1);range.setStart(firstRange.startContainer,firstRange.startOffset).setEnd(lastRange.endContainer,lastRange.endOffset);if(range.collapsed&&domUtils.isBody(range.startContainer)&&!range.startOffset){optimze(range)}}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document)){return this._bakRange}optimze(range)}}return this._bakRange=range},getStart:function(){if(this._cachedStartElement){return this._cachedStartElement}var range=browser.ie9below?this.getIERange():this.getRange(),tmpRange,start,tmp,parent;if(browser.ie9below){if(!range){return this.document.body.firstChild}if(range.item){return range.item(0)}tmpRange=range.duplicate();tmpRange.text.length>0&&tmpRange.moveStart(\"character\",1);tmpRange.collapse(1);start=tmpRange.parentElement();parent=tmp=range.parentElement();while(tmp=tmp.parentNode){if(tmp==start){start=parent;break}}}else{range.shrinkBoundary();start=range.startContainer;if(start.nodeType==1&&start.hasChildNodes()){start=start.childNodes[Math.min(start.childNodes.length-1,range.startOffset)]}if(start.nodeType==3){return start.parentNode}}return start},getText:function(){var nativeSel,nativeRange;if(this.isFocus()&&(nativeSel=this.getNative())){nativeRange=browser.ie9below?nativeSel.createRange():nativeSel.getRangeAt(0);return browser.ie9below?nativeRange.text:nativeRange.toString()}return\"\"},clearRange:function(){this.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]()}}})();(function(){var uid=0,_selectionChangeTimer;function setValue(form,editor){if(!editor.options.textarea){return}var textarea;textarea=editor.textarea;if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.id===\"ueditor_textarea_\"+editor.options.textarea})[0]}if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.name===editor.options.textarea})[0]}if(!textarea){form.appendChild(textarea=domUtils.createElement(document,\"textarea\",{name:editor.options.textarea,id:\"ueditor_textarea_\"+editor.options.textarea,style:\"display:none\"}))}if(textarea&&!editor.textarea){editor.textarea=textarea}!textarea.getAttribute(\"name\")&&textarea.setAttribute(\"name\",editor.options.textarea);textarea.value=editor.hasContents()?editor.options.allHtmlEnabled?editor.getAllHtml():editor.getContent(null,null,true):\"\"}function loadPlugins(me){for(var pi in UE.plugins){UE.plugins[pi].call(me)}}function checkCurLang(I18N){for(var lang in I18N){return lang}}function langReadied(me){me.langIsReady=true;me.fireEvent(\"langReady\")}var Editor=UE.Editor=function(options){var me=this;me.uid=uid++;EventBase.call(me);me.commands={};me.options=utils.extend(utils.clone(options||{}),UEDITOR_CONFIG,true);me.shortcutkeys={};me.inputRules=[];me.outputRules=[];me.setOpt(Editor.defaultOptions(me));me.loadServerConfig();if(!utils.isEmptyObject(UE.I18N)){me.options.lang=checkCurLang(UE.I18N);UE.plugin.load(me);langReadied(me)}else{utils.loadFile(document,{src:me.options.langPath+me.options.lang+\"/\"+me.options.lang+\".js?7a537435\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){UE.plugin.load(me);langReadied(me)})}UE.instants[\"ueditorInstant\"+me.uid]=me};Editor.prototype={registerCommand:function(name,obj){this.commands[name]=obj},ready:function(fn){var me=this;if(fn){me.isReady?fn.apply(me):me.addListener(\"ready\",fn)}},setOpt:function(key,val){var obj={};if(utils.isString(key)){obj[key]=val}else{obj=key}utils.extend(this.options,obj,true)},getOpt:function(key){return this.options[key]},destroy:function(){var me=this;me.fireEvent(\"destroy\");var container=me.container.parentNode;var textarea=me.textarea;if(!textarea){textarea=document.createElement(\"textarea\");container.parentNode.insertBefore(textarea,container)}else{textarea.style.display=\"\"}textarea.style.width=me.iframe.offsetWidth+\"px\";textarea.style.height=me.iframe.offsetHeight+\"px\";textarea.value=me.getContent();textarea.id=me.key;container.innerHTML=\"\";domUtils.remove(container);var key=me.key;for(var p in me){if(me.hasOwnProperty(p)){delete this[p]}}UE.delEditor(key)},render:function(container){var me=this,options=me.options,getStyleValue=function(attr){return parseInt(domUtils.getComputedStyle(container,attr))};if(utils.isString(container)){container=document.getElementById(container)}if(container){if(options.initialFrameWidth){options.minFrameWidth=options.initialFrameWidth}else{options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(options.initialFrameHeight){options.minFrameHeight=options.initialFrameHeight}else{options.initialFrameHeight=options.minFrameHeight=container.offsetHeight}container.style.width=/%$/.test(options.initialFrameWidth)?\"100%\":options.initialFrameWidth-getStyleValue(\"padding-left\")-getStyleValue(\"padding-right\")+\"px\";container.style.height=/%$/.test(options.initialFrameHeight)?\"100%\":options.initialFrameHeight-getStyleValue(\"padding-top\")-getStyleValue(\"padding-bottom\")+\"px\";container.style.zIndex=options.zIndex;var additionCssHtml=[];for(var i in options.iframeCssUrlsAddition){additionCssHtml.push(\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrlsAddition[i])+\"'/>\")}var html=(ie&&browser.version<9?\"\":\"<!DOCTYPE html>\")+\"<html xmlns='http://www.w3.org/1999/xhtml' class='view' >\"+\"<head>\"+\"<style type='text/css'>\"+\".view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\n\"+\"body{margin:8px;font-family:sans-serif;font-size:16px;}\"+\"p{margin:5px 0;}</style>\"+(options.iframeCssUrl?\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrl)+\"'/>\":\"\")+(options.initialStyle?\"<style>\"+options.initialStyle+\"</style>\":\"\")+additionCssHtml.join(\"\")+\"</head>\"+\"<body class='view' ></body>\"+\"<script type='text/javascript' \"+(ie?\"defer='defer'\":\"\")+\" id='_initialScript'>\"+\"setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\"+me.uid+\"'];editor._setup(document);},0);\"+\"var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);\"+\"<\\/script>\"+(options.iframeJsUrl?\"<script type='text/javascript' src='\"+utils.unhtml(options.iframeJsUrl)+\"'><\\/script>\":\"\")+\"</html>\";container.appendChild(domUtils.createElement(document,\"iframe\",{id:\"ueditor_\"+me.uid,width:\"100%\",height:\"100%\",frameborder:\"0\",src:\"javascript:void(function(){document.open();\"+(options.customDomain&&document.domain!=location.hostname?'document.domain=\"'+document.domain+'\";':\"\")+'document.write(\"'+html+'\");document.close();}())'}));container.style.overflow=\"hidden\";setTimeout(function(){if(/%$/.test(options.initialFrameWidth)){options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(/%$/.test(options.initialFrameHeight)){options.minFrameHeight=options.initialFrameHeight=container.offsetHeight;container.style.height=options.initialFrameHeight+\"px\"}})}},_setup:function(doc){var me=this,options=me.options;if(ie){doc.body.disabled=true;doc.body.contentEditable=true;doc.body.disabled=false}else{doc.body.contentEditable=true}doc.body.spellcheck=false;me.document=doc;me.window=doc.defaultView||doc.parentWindow;me.iframe=me.window.frameElement;me.body=doc.body;me.selection=new dom.Selection(doc);var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}this._initEvents();for(var form=this.iframe.parentNode;!domUtils.isBody(form);form=form.parentNode){if(form.tagName===\"FORM\"){me.form=form;if(me.options.autoSyncData){domUtils.on(me.window,\"blur\",function(){setValue(form,me)});domUtils.on(form,\"submit\",function(){me.fireEvent(\"beforesubmit\")})}else{domUtils.on(form,\"submit\",function(){setValue(this,me);me.fireEvent(\"beforesubmit\")})}break}}if(options.initialContent){if(options.autoClearinitialContent){var oldExecCommand=me.execCommand;me.execCommand=function(){me.fireEvent(\"firstBeforeExecCommand\");return oldExecCommand.apply(me,arguments)};this._setDefaultContent(options.initialContent)}else this.setContent(options.initialContent,false,true)}if(domUtils.isEmptyNode(me.body)){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"}if(options.focus){setTimeout(function(){me.focus(me.options.focusInEnd);!me.options.autoClearinitialContent&&me._selectionChange()},0)}if(!me.container){me.container=this.iframe.parentNode}if(options.fullscreen&&me.ui){me.ui.setFullScreen(true)}try{me.document.execCommand(\"2D-position\",false,false)}catch(e){}try{me.document.execCommand(\"enableInlineTableEditing\",false,false)}catch(e){}try{me.document.execCommand(\"enableObjectResizing\",false,false)}catch(e){}me._bindshortcutKeys();me.isReady=1;me.fireEvent(\"ready\");options.onready&&options.onready.call(me);if(!browser.ie9below){domUtils.on(me.window,[\"blur\",\"focus\"],function(e){if(e.type==\"blur\"){me._bakRange=me.selection.getRange();try{me._bakNativeRange=me.selection.getNative().getRangeAt(0);me.selection.getNative().removeAllRanges()}catch(e){me._bakNativeRange=null}}else{try{me._bakRange&&me._bakRange.select()}catch(e){}}})}if(browser.gecko&&browser.version<=10902){me.body.contentEditable=false;setTimeout(function(){me.body.contentEditable=true},100);setInterval(function(){me.body.style.height=me.iframe.offsetHeight-20+\"px\"},100)}!options.isShow&&me.setHide();options.readonly&&me.setDisabled()},sync:function(formId){var me=this,form=formId?document.getElementById(formId):domUtils.findParent(me.iframe.parentNode,function(node){return node.tagName===\"FORM\"},true);form&&setValue(form,me)},syncCommandState:function(){this.fireEvent(\"selectionchange\")},setWidth:function(width){if(width!==parseInt(this.iframe.parentNode.parentNode.style.width)){this.iframe.parentNode.parentNode.style.width=width+\"px\"}},setHeight:function(height,notSetHeight){if(height!==parseInt(this.iframe.parentNode.style.height)){this.iframe.parentNode.style.height=height+\"px\"}!notSetHeight&&(this.options.minFrameHeight=this.options.initialFrameHeight=height);this.body.style.height=height+\"px\";!notSetHeight&&this.trigger(\"setHeight\")},addshortcutkey:function(cmd,keys){var obj={};if(keys){obj[cmd]=keys}else{obj=cmd}utils.extend(this.shortcutkeys,obj)},_bindshortcutKeys:function(){var me=this,shortcutkeys=this.shortcutkeys;me.addListener(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;for(var i in shortcutkeys){var tmp=shortcutkeys[i].split(\",\");for(var t=0,ti;ti=tmp[t++];){ti=ti.split(\":\");var key=ti[0],param=ti[1];if(/^(ctrl)(\\+shift)?\\+(\\d+)$/.test(key.toLowerCase())||/^(\\d+)$/.test(key)){if((RegExp.$1==\"ctrl\"?e.ctrlKey||e.metaKey:0)&&(RegExp.$2!=\"\"?e[RegExp.$2.slice(1)+\"Key\"]:1)&&keyCode==RegExp.$3||keyCode==RegExp.$1){if(me.queryCommandState(i,param)!=-1)me.execCommand(i,param);domUtils.preventDefault(e)}}}}})},getContent:function(cmd,fn,notSetCursor,ignoreBlank,formatter){var me=this;if(cmd&&utils.isFunction(cmd)){fn=cmd;cmd=\"\"}if(fn?!fn():!this.hasContents()){return\"\"}me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML,ignoreBlank);me.filterOutputRule(root);me.fireEvent(\"aftergetcontent\",cmd,root);return root.toHtml(formatter)},getAllHtml:function(){var me=this,headHtml=[],html=\"\";me.fireEvent(\"getAllHtml\",headHtml);if(browser.ie&&browser.version>8){var headHtmlForIE9=\"\";utils.each(me.document.styleSheets,function(si){headHtmlForIE9+=si.href?'<link rel=\"stylesheet\" type=\"text/css\" href=\"'+si.href+'\" />':\"<style>\"+si.cssText+\"</style>\"});utils.each(me.document.getElementsByTagName(\"script\"),function(si){headHtmlForIE9+=si.outerHTML})}return\"<html><head>\"+(me.options.charset?'<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+me.options.charset+'\"/>':\"\")+(headHtmlForIE9||me.document.getElementsByTagName(\"head\")[0].innerHTML)+headHtml.join(\"\\n\")+\"</head>\"+\"<body \"+(ie&&browser.version<9?'class=\"view\"':\"\")+\">\"+me.getContent(null,null,true)+\"</body></html>\"},getPlainTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\"),html=this.body.innerHTML.replace(/[\\n\\r]/g,\"\");html=html.replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi,\"\\n\").replace(/<br\\/?>/gi,\"\\n\").replace(/<[^>/]+>/g,\"\").replace(/(\\n)?<\\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?\"\\n\":b?b:\"\"});return html.replace(reg,\"\").replace(/\\u00a0/g,\" \").replace(/&nbsp;/g,\" \")},getContentTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\");return this.body[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").replace(/\\u00a0/g,\" \")},setContent:function(html,isAppendTo,notFireSelectionchange){var me=this;me.fireEvent(\"beforesetcontent\",html);var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();me.body.innerHTML=(isAppendTo?me.body.innerHTML:\"\")+html;function isCdataDiv(node){return node.tagName==\"DIV\"&&node.getAttribute(\"cdata_tag\")}if(me.options.enterTag==\"p\"){var child=this.body.firstChild,tmpNode;if(!child||child.nodeType==1&&(dtd.$cdata[child.tagName]||isCdataDiv(child)||domUtils.isCustomeNode(child))&&child===this.body.lastChild){this.body.innerHTML=\"<p>\"+(browser.ie?\"&nbsp;\":\"<br/>\")+\"</p>\"+this.body.innerHTML}else{var p=me.document.createElement(\"p\");while(child){while(child&&(child.nodeType==3||child.nodeType==1&&dtd.p[child.tagName]&&!dtd.$cdata[child.tagName])){tmpNode=child.nextSibling;p.appendChild(child);child=tmpNode}if(p.firstChild){if(!child){me.body.appendChild(p);break}else{child.parentNode.insertBefore(p,child);p=me.document.createElement(\"p\")}}child=child.nextSibling}}}me.fireEvent(\"aftersetcontent\");me.fireEvent(\"contentchange\");!notFireSelectionchange&&me._selectionChange();me._bakRange=me._bakIERange=me._bakNativeRange=null;var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}if(me.options.autoSyncData){me.form&&setValue(me.form,me)}},focus:function(toEnd){try{var me=this,rng=me.selection.getRange();if(toEnd){var node=me.body.lastChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){if(domUtils.isEmptyBlock(node)){rng.setStartAtFirst(node)}else{rng.setStartAtLast(node)}rng.collapse(true)}rng.setCursor(true)}else{if(!rng.collapsed&&domUtils.isBody(rng.startContainer)&&rng.startOffset==0){var node=me.body.firstChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){rng.setStartAtFirst(node).collapse(true)}}rng.select(true)}this.fireEvent(\"focus selectionchange\")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var sel=this.selection.getNative();if(sel.empty&&browser.ie){var nativeRng=document.body.createTextRange();nativeRng.moveToElementText(document.body);nativeRng.collapse(true);nativeRng.select();sel.empty()}else{sel.removeAllRanges()}},_initEvents:function(){var me=this,doc=me.document,win=me.window;me._proxyDomEvent=utils.bind(me._proxyDomEvent,me);domUtils.on(doc,[\"click\",\"contextmenu\",\"mousedown\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mouseover\",\"mouseout\",\"selectstart\"],me._proxyDomEvent);domUtils.on(win,[\"focus\",\"blur\"],me._proxyDomEvent);domUtils.on(me.body,\"drop\",function(e){if(browser.gecko&&e.stopPropagation){e.stopPropagation()}me.fireEvent(\"contentchange\")});domUtils.on(me.body,\"dblclick\",function(e){try{var node=me.body.lastChild;if(!node){return}var rect=node.getBoundingClientRect();if(e.clientY>rect.top+rect.height){var p=document.createElement(\"p\");p.innerHTML=\"<br />\";me.body.appendChild(p);setTimeout(function(){me.focus(true)},100)}}catch(e){console.error(\"auto insert p at end\",e)}});domUtils.on(doc,[\"mouseup\",\"keydown\"],function(evt){if(evt.type===\"keydown\"&&(evt.ctrlKey||evt.metaKey||evt.shiftKey||evt.altKey)){return}if(evt.button===2)return;me._selectionChange(250,evt)})},_proxyDomEvent:function(evt){if(this.fireEvent(\"before\"+evt.type.replace(/^on/,\"\").toLowerCase())===false){return false}if(this.fireEvent(evt.type.replace(/^on/,\"\"),evt)===false){return false}return this.fireEvent(\"after\"+evt.type.replace(/^on/,\"\").toLowerCase())},_selectionChange:function(delay,evt){var me=this;var hackForMouseUp=false;var mouseX,mouseY;if(browser.ie&&browser.version<9&&evt&&evt.type==\"mouseup\"){var range=this.selection.getRange();if(!range.collapsed){hackForMouseUp=true;mouseX=evt.clientX;mouseY=evt.clientY}}clearTimeout(_selectionChangeTimer);_selectionChangeTimer=setTimeout(function(){if(!me.selection||!me.selection.getNative()){return}var ieRange;if(hackForMouseUp&&me.selection.getNative().type==\"None\"){ieRange=me.document.body.createTextRange();try{ieRange.moveToPoint(mouseX,mouseY)}catch(ex){ieRange=null}}var bakGetIERange;if(ieRange){bakGetIERange=me.selection.getIERange;me.selection.getIERange=function(){return ieRange}}me.selection.cache();if(bakGetIERange){me.selection.getIERange=bakGetIERange}if(me.selection._cachedRange&&me.selection._cachedStartElement){me.fireEvent(\"beforeselectionchange\");me.fireEvent(\"selectionchange\",!!evt);me.fireEvent(\"afterselectionchange\");me.selection.clear()}},delay||50)},_callCmdFn:function(fnName,args){var cmdName=args[0].toLowerCase(),cmd,cmdFn;cmd=this.commands[cmdName]||UE.commands[cmdName];cmdFn=cmd&&cmd[fnName];if((!cmd||!cmdFn)&&fnName==\"queryCommandState\"){return 0}else if(cmdFn){return cmdFn.apply(this,args)}},execCommand:function(cmdName){cmdName=cmdName.toLowerCase();var me=this,result,cmd=me.commands[cmdName]||UE.commands[cmdName];if(!cmd||!cmd.execCommand){return null}if(!cmd.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;if(me.queryCommandState.apply(me,arguments)!=-1){me.fireEvent(\"saveScene\");me.fireEvent.apply(me,[\"beforeexeccommand\",cmdName].concat(arguments));result=this._callCmdFn(\"execCommand\",arguments);me.fireEvent.apply(me,[\"afterexeccommand\",cmdName].concat(arguments));me.fireEvent(\"saveScene\")}me.__hasEnterExecCommand=false}else{result=this._callCmdFn(\"execCommand\",arguments);!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me.fireEvent(\"contentchange\")}!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me._selectionChange();return result},queryCommandState:function(cmdName){return this._callCmdFn(\"queryCommandState\",arguments)},queryCommandValue:function(cmdName){return this._callCmdFn(\"queryCommandValue\",arguments)},hasContents:function(tags){if(tags){for(var i=0,ci;ci=tags[i++];){if(this.document.getElementsByTagName(ci).length>0){return true}}}if(!domUtils.isEmptyBlock(this.body)){return true}tags=[\"div\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){if(domUtils.isCustomeNode(cn)){return true}}}tags=[\"video\",\"iframe\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){return true}}return false},reset:function(){this.clear();this.fireEvent(\"reset\")},clear:function(){this.setContent(\"\")},setEnabled:function(){var me=this,range;if(me.body.contentEditable===\"false\"){me.body.contentEditable=true;range=me.selection.getRange();try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}range.select(true);if(me.bkqueryCommandState){me.queryCommandState=me.bkqueryCommandState;delete me.bkqueryCommandState}if(me.bkqueryCommandValue){me.queryCommandValue=me.bkqueryCommandValue;delete me.bkqueryCommandValue}me.fireEvent(\"selectionchange\")}},enable:function(){return this.setEnabled()},setDisabled:function(except){var me=this;except=except?utils.isArray(except)?except:[except]:[];if(me.body.contentEditable==\"true\"){if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.body.contentEditable=false;me.bkqueryCommandState=me.queryCommandState;me.bkqueryCommandValue=me.queryCommandValue;me.queryCommandState=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandState.apply(me,arguments)}return-1};me.queryCommandValue=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandValue.apply(me,arguments)}return null};me.fireEvent(\"selectionchange\")}},disable:function(except){return this.setDisabled(except)},_setDefaultContent:function(){function clear(){var me=this;if(me.document.getElementById(\"initContent\")){me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";me.removeListener(\"firstBeforeExecCommand focus\",clear);setTimeout(function(){me.focus();me._selectionChange()},0)}}return function(cont){var me=this;me.body.innerHTML='<p id=\"initContent\">'+cont+\"</p>\";me.addListener(\"firstBeforeExecCommand focus\",clear)}}(),setShow:function(){var me=this,range=me.selection.getRange();if(me.container.style.display==\"none\"){try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}setTimeout(function(){range.select(true)},100);me.container.style.display=\"\"}},show:function(){return this.setShow()},setHide:function(){var me=this;if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.container.style.display=\"none\"},hide:function(){return this.setHide()},getLang:function(path){var lang=UE.I18N[this.options.lang];if(!lang){throw Error(\"not import language file\")}path=(path||\"\").split(\".\");for(var i=0,ci;ci=path[i++];){lang=lang[ci];if(!lang)break}return lang},getContentLength:function(ingoneHtml,tagNames){var count=this.getContent(false,false,true).length;if(ingoneHtml){tagNames=(tagNames||[]).concat([\"hr\",\"img\",\"iframe\"]);count=this.getContentTxt().replace(/[\\t\\r\\n]+/g,\"\").length;for(var i=0,ci;ci=tagNames[i++];){count+=this.document.getElementsByTagName(ci).length}}return count},getScrollTop:function(){return Math.max(this.document.documentElement.scrollTop,this.document.body.scrollTop)},getScrollLeft:function(){return Math.max(this.document.documentElement.scrollLeft,this.document.body.scrollLeft)},addInputRule:function(rule){this.inputRules.push(rule)},filterInputRule:function(root){for(var i=0,ci;ci=this.inputRules[i++];){ci.call(this,root)}},addOutputRule:function(rule){this.outputRules.push(rule)},filterOutputRule:function(root){for(var i=0,ci;ci=this.outputRules[i++];){ci.call(this,root)}},getActionUrl:function(action){var serverUrl=this.getOpt(\"serverUrl\");if(!action){return serverUrl}var actionName=this.getOpt(action)||action,imageUrl=this.getOpt(\"imageUrl\");if(!serverUrl&&imageUrl){serverUrl=imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\")}if(serverUrl){serverUrl=serverUrl+(serverUrl.indexOf(\"?\")===-1?\"?\":\"&\")+\"action=\"+(actionName||\"\");return utils.formatUrl(serverUrl)}else{return\"\"}}};utils.inherits(Editor,EventBase)})();UE.Editor.defaultOptions=function(editor){var _url=editor.options.UEDITOR_HOME_URL;return{isShow:true,initialContent:\"\",initialStyle:\"\",autoClearinitialContent:false,iframeCssUrl:_url+\"themes/iframe.css?c20ec247\",iframeCssUrlsAddition:[],textarea:\"\",focus:false,focusInEnd:true,autoClearEmptyNode:true,fullscreen:false,readonly:false,zIndex:999,imagePopup:true,enterTag:\"p\",customDomain:false,lang:\"zh-cn\",langPath:_url+\"lang/\",theme:\"default\",themePath:_url+\"themes/\",allHtmlEnabled:false,scaleEnabled:false,tableNativeEditInFF:false,autoSyncData:true,fileNameFormat:\"{time}{rand:6}\"}};(function(){UE.Editor.prototype.loadServerConfig=function(){var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt(\"serverUrl\",me.options.imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\"));var configUrl=me.getActionUrl(\"config\"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=false;configUrl&&UE.ajax.request(configUrl,{method:\"GET\",dataType:isJsonp?\"jsonp\":\"\",headers:me.options.serverHeaders||{},onsuccess:function(r){try{var config=isJsonp?r:eval(\"(\"+r.responseText+\")\");me.options=utils.merge(me.options,config);me.fireEvent(\"serverConfigLoaded\");me._serverConfigLoaded=true}catch(e){showErrorMsg(me.getLang(\"loadconfigFormatError\"))}},onerror:function(){showErrorMsg(me.getLang(\"loadconfigHttpError\"))}})}catch(e){showErrorMsg(me.getLang(\"loadconfigError\"))}});function showErrorMsg(msg){console&&console.error(msg)}};UE.Editor.prototype.isServerConfigLoaded=function(){var me=this;return me._serverConfigLoaded||false};UE.Editor.prototype.afterConfigReady=function(handler){if(!handler||!utils.isFunction(handler))return;var me=this;var readyHandler=function(){handler.apply(me,arguments);me.removeListener(\"serverConfigLoaded\",readyHandler)};if(me.isServerConfigLoaded()){handler.call(me,\"serverConfigLoaded\")}else{me.addListener(\"serverConfigLoaded\",readyHandler)}}})();UE.ajax=function(){var fnStr=\"XMLHttpRequest()\";try{new ActiveXObject(\"Msxml2.XMLHTTP\");fnStr=\"ActiveXObject('Msxml2.XMLHTTP')\"}catch(e){try{new ActiveXObject(\"Microsoft.XMLHTTP\");fnStr=\"ActiveXObject('Microsoft.XMLHTTP')\"}catch(e){}}var creatAjaxRequest=new Function(\"return new \"+fnStr);function json2str(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\"||i==\"dataType\"||i==\"callback\")continue;if(json[i]==undefined||json[i]==null)continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")}function doAjax(url,ajaxOptions){var xhr=creatAjaxRequest(),timeIsOut=false,defaultAjaxOptions={method:\"POST\",timeout:5e3,async:true,headers:{},data:{},onsuccess:function(){},onerror:function(){}};if(typeof url===\"object\"){ajaxOptions=url;url=ajaxOptions.url}if(!xhr||!url)return;var ajaxOpts=ajaxOptions?utils.extend(defaultAjaxOptions,ajaxOptions):defaultAjaxOptions;var submitStr=json2str(ajaxOpts);if(!utils.isEmptyObject(ajaxOpts.data)){submitStr+=(submitStr?\"&\":\"\")+json2str(ajaxOpts.data)}var timerID=setTimeout(function(){if(xhr.readyState!==4){timeIsOut=true;xhr.abort();clearTimeout(timerID)}},ajaxOpts.timeout);var method=ajaxOpts.method.toUpperCase();var str=url+(url.indexOf(\"?\")===-1?\"?\":\"&\")+(method===\"POST\"?\"\":submitStr+\"&noCache=\"+ +new Date);xhr.open(method,str,ajaxOpts.async);xhr.onreadystatechange=function(){if(xhr.readyState===4){if(!timeIsOut&&xhr.status===200){ajaxOpts.onsuccess(xhr)}else{ajaxOpts.onerror(xhr)}}};if(ajaxOpts.headers){for(var key in ajaxOpts.headers){xhr.setRequestHeader(key,ajaxOpts.headers[key])}}if(method===\"POST\"){xhr.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");xhr.send(submitStr)}else{xhr.send(null)}}function doJsonp(url,opts){var successhandler=opts.onsuccess||function(){},scr=document.createElement(\"SCRIPT\"),options=opts||{},charset=options[\"charset\"],callbackField=options[\"jsonp\"]||\"callback\",callbackFnName,timeOut=options[\"timeOut\"]||0,timer,reg=new RegExp(\"(\\\\?|&)\"+callbackField+\"=([^&]*)\"),matches;if(utils.isFunction(successhandler)){callbackFnName=\"bd__editor__\"+Math.floor(Math.random()*2147483648).toString(36);window[callbackFnName]=getCallBack(0)}else if(utils.isString(successhandler)){callbackFnName=successhandler}else{if(matches=reg.exec(url)){callbackFnName=matches[2]}}url=url.replace(reg,\"$1\"+callbackField+\"=\"+callbackFnName);if(url.search(reg)<0){url+=(url.indexOf(\"?\")<0?\"?\":\"&\")+callbackField+\"=\"+callbackFnName}var queryStr=json2str(opts);if(!utils.isEmptyObject(opts.data)){queryStr+=(queryStr?\"&\":\"\")+json2str(opts.data)}if(queryStr){url=url.replace(/\\?/,\"?\"+queryStr+\"&\")}scr.onerror=getCallBack(1);if(timeOut){timer=setTimeout(getCallBack(1),timeOut)}createScriptTag(scr,url,charset);function createScriptTag(scr,url,charset){scr.setAttribute(\"type\",\"text/javascript\");scr.setAttribute(\"defer\",\"defer\");charset&&scr.setAttribute(\"charset\",charset);scr.setAttribute(\"src\",url);document.getElementsByTagName(\"head\")[0].appendChild(scr)}function getCallBack(onTimeOut){return function(){try{if(onTimeOut){options.onerror&&options.onerror()}else{try{clearTimeout(timer);successhandler.apply(window,arguments)}catch(e){}}}catch(exception){options.onerror&&options.onerror.call(window,exception)}finally{options.oncomplete&&options.oncomplete.apply(window,arguments);scr.parentNode&&scr.parentNode.removeChild(scr);window[callbackFnName]=null;try{delete window[callbackFnName]}catch(e){}}}}}return{request:function(url,opts){if(opts&&opts.dataType===\"jsonp\"){doJsonp(url,opts)}else{doAjax(url,opts)}},getJSONP:function(url,data,fn){var opts={data:data,oncomplete:fn};doJsonp(url,opts)}}}();UE.api=function(){var axios=null;!function(e,t){axios=t()}(this,function(){\"use strict\";function e(t){return e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null==n)return;var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){return function(){return e.apply(t,arguments)}}var s,u=Object.prototype.toString,c=Object.getPrototypeOf,f=(s=Object.create(null),function(e){var t=u.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())}),l=function(e){return e=e.toLowerCase(),function(t){return f(t)===e}},d=function(t){return function(n){return e(n)===t}},p=Array.isArray,h=d(\"undefined\");var m=l(\"ArrayBuffer\");var y=d(\"string\"),v=d(\"function\"),b=d(\"number\"),g=function(t){return null!==t&&\"object\"===e(t)},w=function(e){if(\"object\"!==f(e))return!1;var t=c(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},E=l(\"Date\"),O=l(\"File\"),S=l(\"Blob\"),R=l(\"FileList\"),A=l(\"URLSearchParams\");function T(t,n){var r,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=i.allOwnKeys,s=void 0!==a&&a;if(null!=t)if(\"object\"!==e(t)&&(t=[t]),p(t))for(r=0,o=t.length;r<o;r++)n.call(null,t[r],r,t);else{var u,c=s?Object.getOwnPropertyNames(t):Object.keys(t),f=c.length;for(r=0;r<f;r++)u=c[r],n.call(null,t[u],u,t)}}function j(e,t){t=t.toLowerCase();for(var n,r=Object.keys(e),o=r.length;o-- >0;)if(t===(n=r[o]).toLowerCase())return n;return null}var N=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:global,C=function(e){return!h(e)&&e!==N};var x,P=(x=\"undefined\"!=typeof Uint8Array&&c(Uint8Array),function(e){return x&&e instanceof x}),k=l(\"HTMLFormElement\"),U=function(e){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),_=l(\"RegExp\"),F=function(e,t){var n=Object.getOwnPropertyDescriptors(e),r={};T(n,function(n,o){!1!==t(n,o,e)&&(r[o]=n)}),Object.defineProperties(e,r)},B=\"abcdefghijklmnopqrstuvwxyz\",L=\"0123456789\",D={DIGIT:L,ALPHA:B,ALPHA_DIGIT:B+B.toUpperCase()+L};var I=l(\"AsyncFunction\"),q={isArray:p,isArrayBuffer:m,isBuffer:function(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&v(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t;return e&&(\"function\"==typeof FormData&&e instanceof FormData||v(e.append)&&(\"formdata\"===(t=f(e))||\"object\"===t&&v(e.toString)&&\"[object FormData]\"===e.toString()))},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer)},isString:y,isNumber:b,isBoolean:function(e){return!0===e||!1===e},isObject:g,isPlainObject:w,isUndefined:h,isDate:E,isFile:O,isBlob:S,isRegExp:_,isFunction:v,isStream:function(e){return g(e)&&v(e.pipe)},isURLSearchParams:A,isTypedArray:P,isFileList:R,forEach:T,merge:function e(){for(var t=C(this)&&this||{},n=t.caseless,r={},o=function(t,o){var i=n&&j(r,o)||o;w(r[i])&&w(t)?r[i]=e(r[i],t):w(t)?r[i]=e({},t):p(t)?r[i]=t.slice():r[i]=t},i=0,a=arguments.length;i<a;i++)arguments[i]&&T(arguments[i],o);return r},extend:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.allOwnKeys;return T(t,function(t,r){n&&v(t)?e[r]=a(t,n):e[r]=t},{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,\"super\",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var o,i,a,s={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],r&&!r(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==n&&c(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:f,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(p(e))return e;var t=e.length;if(!b(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var o=n.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:k,hasOwnProperty:U,hasOwnProp:U,reduceDescriptors:F,freezeMethods:function(e){F(e,function(t,n){if(v(e)&&-1!==[\"arguments\",\"caller\",\"callee\"].indexOf(n))return!1;var r=e[n];v(r)&&(t.enumerable=!1,\"writable\"in t?t.writable=!1:t.set||(t.set=function(){throw Error(\"Can not rewrite read-only method '\"+n+\"'\")}))})},toObjectSet:function(e,t){var n={},r=function(e){e.forEach(function(e){n[e]=!0})};return p(e)?r(e):r(String(e).split(t)),n},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})},noop:function(){},toFiniteNumber:function(e,t){return e=+e,Number.isFinite(e)?e:t},findKey:j,global:N,isContextDefined:C,ALPHABET:D,generateString:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D.ALPHA_DIGIT,n=\"\",r=t.length;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&v(e.append)&&\"FormData\"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:function(e){var t=new Array(10);return function e(n,r){if(g(n)){if(t.indexOf(n)>=0)return;if(!(\"toJSON\"in n)){t[r]=n;var o=p(n)?[]:{};return T(n,function(t,n){var i=e(t,r+1);!h(i)&&(o[n]=i)}),t[r]=void 0,o}}return n}(e,0)},isAsyncFn:I,isThenable:function(e){return e&&(g(e)||v(e))&&v(e.then)&&v(e.catch)}};function M(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name=\"AxiosError\",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}q.inherits(M,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:q.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var z=M.prototype,H={};[\"ERR_BAD_OPTION_VALUE\",\"ERR_BAD_OPTION\",\"ECONNABORTED\",\"ETIMEDOUT\",\"ERR_NETWORK\",\"ERR_FR_TOO_MANY_REDIRECTS\",\"ERR_DEPRECATED\",\"ERR_BAD_RESPONSE\",\"ERR_BAD_REQUEST\",\"ERR_CANCELED\",\"ERR_NOT_SUPPORT\",\"ERR_INVALID_URL\"].forEach(function(e){H[e]={value:e}}),Object.defineProperties(M,H),Object.defineProperty(z,\"isAxiosError\",{value:!0}),M.from=function(e,t,n,r,o,i){var a=Object.create(z);return q.toFlatObject(e,a,function(e){return e!==Error.prototype},function(e){return\"isAxiosError\"!==e}),M.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function J(e){return q.isPlainObject(e)||q.isArray(e)}function W(e){return q.endsWith(e,\"[]\")?e.slice(0,-2):e}function K(e,t,n){return e?e.concat(t).map(function(e,t){return e=W(e),!n&&t?\"[\"+e+\"]\":e}).join(n?\".\":\"\"):t}var V=q.toFlatObject(q,{},null,function(e){return/^is[A-Z]/.test(e)});function G(t,n,r){if(!q.isObject(t))throw new TypeError(\"target must be an object\");n=n||new FormData;var o=(r=q.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!q.isUndefined(t[e])})).metaTokens,i=r.visitor||f,a=r.dots,s=r.indexes,u=(r.Blob||\"undefined\"!=typeof Blob&&Blob)&&q.isSpecCompliantForm(n);if(!q.isFunction(i))throw new TypeError(\"visitor must be a function\");function c(e){if(null===e)return\"\";if(q.isDate(e))return e.toISOString();if(!u&&q.isBlob(e))throw new M(\"Blob is not supported. Use a Buffer instead.\");return q.isArrayBuffer(e)||q.isTypedArray(e)?u&&\"function\"==typeof Blob?new Blob([e]):Buffer.from(e):e}function f(t,r,i){var u=t;if(t&&!i&&\"object\"===e(t))if(q.endsWith(r,\"{}\"))r=o?r:r.slice(0,-2),t=JSON.stringify(t);else if(q.isArray(t)&&function(e){return q.isArray(e)&&!e.some(J)}(t)||(q.isFileList(t)||q.endsWith(r,\"[]\"))&&(u=q.toArray(t)))return r=W(r),u.forEach(function(e,t){!q.isUndefined(e)&&null!==e&&n.append(!0===s?K([r],t,a):null===s?r:r+\"[]\",c(e))}),!1;return!!J(t)||(n.append(K(i,r,a),c(t)),!1)}var l=[],d=Object.assign(V,{defaultVisitor:f,convertValue:c,isVisitable:J});if(!q.isObject(t))throw new TypeError(\"data must be an object\");return function e(t,r){if(!q.isUndefined(t)){if(-1!==l.indexOf(t))throw Error(\"Circular reference detected in \"+r.join(\".\"));l.push(t),q.forEach(t,function(t,o){!0===(!(q.isUndefined(t)||null===t)&&i.call(n,t,q.isString(o)?o.trim():o,r,d))&&e(t,r?r.concat(o):[o])}),l.pop()}}(t),n}function $(e){var t={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\",\"%00\":\"\\0\"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function X(e,t){this._pairs=[],e&&G(e,this,t)}var Q=X.prototype;function Z(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}function Y(e,t,n){if(!t)return e;var r,o=n&&n.encode||Z,i=n&&n.serialize;if(r=i?i(t,n):q.isURLSearchParams(t)?t.toString():new X(t,n).toString(o)){var a=e.indexOf(\"#\");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+r}return e}Q.append=function(e,t){this._pairs.push([e,t])},Q.toString=function(e){var t=e?function(t){return e.call(this,t,$)}:$;return this._pairs.map(function(e){return t(e[0])+\"=\"+t(e[1])},\"\").join(\"&\")};var ee,te=function(){function e(){t(this,e),this.handlers=[]}return r(e,[{key:\"use\",value:function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:\"eject\",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:\"clear\",value:function(){this.handlers&&(this.handlers=[])}},{key:\"forEach\",value:function(e){q.forEach(this.handlers,function(t){null!==t&&e(t)})}}]),e}(),ne={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},re={isBrowser:!0,classes:{URLSearchParams:\"undefined\"!=typeof URLSearchParams?URLSearchParams:X,FormData:\"undefined\"!=typeof FormData?FormData:null,Blob:\"undefined\"!=typeof Blob?Blob:null},isStandardBrowserEnv:(\"undefined\"==typeof navigator||\"ReactNative\"!==(ee=navigator.product)&&\"NativeScript\"!==ee&&\"NS\"!==ee)&&\"undefined\"!=typeof window&&\"undefined\"!=typeof document,isStandardBrowserWebWorkerEnv:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&\"function\"==typeof self.importScripts,protocols:[\"http\",\"https\",\"file\",\"blob\",\"url\",\"data\"]};function oe(e){function t(e,n,r,o){var i=e[o++],a=Number.isFinite(+i),s=o>=e.length;return i=!i&&q.isArray(r)?r.length:i,s?(q.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&q.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&q.isArray(r[i])&&(r[i]=function(e){var t,n,r={},o=Object.keys(e),i=o.length;for(t=0;t<i;t++)r[n=o[t]]=e[n];return r}(r[i])),!a)}if(q.isFormData(e)&&q.isFunction(e.entries)){var n={};return q.forEachEntry(e,function(e,r){t(function(e){return q.matchAll(/\\w+|\\[(\\w*)]/g,e).map(function(e){return\"[]\"===e[0]?\"\":e[1]||e[0]})}(e),r,n,0)}),n}return null}var ie={\"Content-Type\":void 0};var ae={transitional:ne,adapter:[\"xhr\",\"http\"],transformRequest:[function(e,t){var n,r=t.getContentType()||\"\",o=r.indexOf(\"application/json\")>-1,i=q.isObject(e);if(i&&q.isHTMLForm(e)&&(e=new FormData(e)),q.isFormData(e))return o&&o?JSON.stringify(oe(e)):e;if(q.isArrayBuffer(e)||q.isBuffer(e)||q.isStream(e)||q.isFile(e)||q.isBlob(e))return e;if(q.isArrayBufferView(e))return e.buffer;if(q.isURLSearchParams(e))return t.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\",!1),e.toString();if(i){if(r.indexOf(\"application/x-www-form-urlencoded\")>-1)return function(e,t){return G(e,new re.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return re.isNode&&q.isBuffer(e)?(this.append(t,e.toString(\"base64\")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((n=q.isFileList(e))||r.indexOf(\"multipart/form-data\")>-1){var a=this.env&&this.env.FormData;return G(n?{\"files[]\":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType(\"application/json\",!1),function(e,t,n){if(q.isString(e))try{return(t||JSON.parse)(e),q.trim(e)}catch(e){if(\"SyntaxError\"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||ae.transitional,n=t&&t.forcedJSONParsing,r=\"json\"===this.responseType;if(e&&q.isString(e)&&(n&&!this.responseType||r)){var o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(o){if(\"SyntaxError\"===e.name)throw M.from(e,M.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,env:{FormData:re.classes.FormData,Blob:re.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};q.forEach([\"delete\",\"get\",\"head\"],function(e){ae.headers[e]={}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){ae.headers[e]=q.merge(ie)});var se=ae,ue=q.toObjectSet([\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"]),ce=Symbol(\"internals\");function fe(e){return e&&String(e).trim().toLowerCase()}function le(e){return!1===e||null==e?e:q.isArray(e)?e.map(le):String(e)}function de(e,t,n,r,o){return q.isFunction(r)?r.call(this,t,n):(o&&(t=n),q.isString(t)?q.isString(r)?-1!==t.indexOf(r):q.isRegExp(r)?r.test(t):void 0:void 0)}var pe=function(e,n){function i(e){t(this,i),e&&this.set(e)}return r(i,[{key:\"set\",value:function(e,t,n){var r=this;function o(e,t,n){var o=fe(t);if(!o)throw new Error(\"header name must be a non-empty string\");var i=q.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=le(e))}var i,a,s,u,c,f=function(e,t){return q.forEach(e,function(e,n){return o(e,n,t)})};return q.isPlainObject(e)||e instanceof this.constructor?f(e,t):q.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?f((c={},(i=e)&&i.split(\"\\n\").forEach(function(e){u=e.indexOf(\":\"),a=e.substring(0,u).trim().toLowerCase(),s=e.substring(u+1).trim(),!a||c[a]&&ue[a]||(\"set-cookie\"===a?c[a]?c[a].push(s):c[a]=[s]:c[a]=c[a]?c[a]+\", \"+s:s)}),c),t):null!=e&&o(t,e,n),this}},{key:\"get\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);if(n){var r=this[n];if(!t)return r;if(!0===t)return function(e){for(var t,n=Object.create(null),r=/([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;t=r.exec(e);)n[t[1]]=t[2];return n}(r);if(q.isFunction(t))return t.call(this,r,n);if(q.isRegExp(t))return t.exec(r);throw new TypeError(\"parser must be boolean|regexp|function\")}}}},{key:\"has\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);return!(!n||void 0===this[n]||t&&!de(0,this[n],n,t))}return!1}},{key:\"delete\",value:function(e,t){var n=this,r=!1;function o(e){if(e=fe(e)){var o=q.findKey(n,e);!o||t&&!de(0,n[o],o,t)||(delete n[o],r=!0)}}return q.isArray(e)?e.forEach(o):o(e),r}},{key:\"clear\",value:function(e){for(var t=Object.keys(this),n=t.length,r=!1;n--;){var o=t[n];e&&!de(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}},{key:\"normalize\",value:function(e){var t=this,n={};return q.forEach(this,function(r,o){var i=q.findKey(n,o);if(i)return t[i]=le(r),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})}(o):String(o).trim();a!==o&&delete t[o],t[a]=le(r),n[a]=!0}),this}},{key:\"concat\",value:function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=this.constructor).concat.apply(e,[this].concat(n))}},{key:\"toJSON\",value:function(e){var t=Object.create(null);return q.forEach(this,function(n,r){null!=n&&!1!==n&&(t[r]=e&&q.isArray(n)?n.join(\", \"):n)}),t}},{key:Symbol.iterator,value:function(){return Object.entries(this.toJSON())[Symbol.iterator]()}},{key:\"toString\",value:function(){return Object.entries(this.toJSON()).map(function(e){var t=o(e,2);return t[0]+\": \"+t[1]}).join(\"\\n\")}},{key:Symbol.toStringTag,get:function(){return\"AxiosHeaders\"}}],[{key:\"from\",value:function(e){return e instanceof this?e:new this(e)}},{key:\"concat\",value:function(e){for(var t=new this(e),n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach(function(e){return t.set(e)}),t}},{key:\"accessor\",value:function(e){var t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function r(e){var r=fe(e);t[r]||(!function(e,t){var n=q.toCamelCase(\" \"+t);[\"get\",\"set\",\"has\"].forEach(function(r){Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return q.isArray(e)?e.forEach(r):r(e),this}}]),i}();pe.accessor([\"Content-Type\",\"Content-Length\",\"Accept\",\"Accept-Encoding\",\"User-Agent\",\"Authorization\"]),q.freezeMethods(pe.prototype),q.freezeMethods(pe);var he=pe;function me(e,t){var n=this||se,r=t||n,o=he.from(r.headers),i=r.data;return q.forEach(e,function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function ye(e){return!(!e||!e.__CANCEL__)}function ve(e,t,n){M.call(this,null==e?\"canceled\":e,M.ERR_CANCELED,t,n),this.name=\"CanceledError\"}q.inherits(ve,M,{__CANCEL__:!0});var be=re.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){var a=[];a.push(e+\"=\"+encodeURIComponent(t)),q.isNumber(n)&&a.push(\"expires=\"+new Date(n).toGMTString()),q.isString(r)&&a.push(\"path=\"+r),q.isString(o)&&a.push(\"domain=\"+o),!0===i&&a.push(\"secure\"),document.cookie=a.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function ge(e,t){return e&&!/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(t)?function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}(e,t):t}var we=re.isStandardBrowserEnv?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function r(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=r(window.location.href),function(t){var n=q.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0};function Ee(e,t){var n=0,r=function(e,t){e=e||10;var n,r=new Array(e),o=new Array(e),i=0,a=0;return t=void 0!==t?t:1e3,function(s){var u=Date.now(),c=o[a];n||(n=u),r[i]=s,o[i]=u;for(var f=a,l=0;f!==i;)l+=r[f++],f%=e;if((i=(i+1)%e)===a&&(a=(a+1)%e),!(u-n<t)){var d=c&&u-c;return d?Math.round(1e3*l/d):void 0}}}(50,250);return function(o){var i=o.loaded,a=o.lengthComputable?o.total:void 0,s=i-n,u=r(s);n=i;var c={loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:o};c[t?\"download\":\"upload\"]=!0,e(c)}}var Oe={http:null,xhr:\"undefined\"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){var r,o=e.data,i=he.from(e.headers).normalize(),a=e.responseType;function s(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener(\"abort\",r)}q.isFormData(o)&&(re.isStandardBrowserEnv||re.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.setContentType(\"multipart/form-data;\",!1));var u=new XMLHttpRequest;if(e.auth){var c=e.auth.username||\"\",f=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";i.set(\"Authorization\",\"Basic \"+btoa(c+\":\"+f))}var l=ge(e.baseURL,e.url);function d(){if(u){var r=he.from(\"getAllResponseHeaders\"in u&&u.getAllResponseHeaders());!function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new M(\"Request failed with status code \"+n.status,[M.ERR_BAD_REQUEST,M.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}(function(e){t(e),s()},function(e){n(e),s()},{data:a&&\"text\"!==a&&\"json\"!==a?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:e,request:u}),u=null}}if(u.open(e.method.toUpperCase(),Y(l,e.params,e.paramsSerializer),!0),u.timeout=e.timeout,\"onloadend\"in u?u.onloadend=d:u.onreadystatechange=function(){u&&4===u.readyState&&(0!==u.status||u.responseURL&&0===u.responseURL.indexOf(\"file:\"))&&setTimeout(d)},u.onabort=function(){u&&(n(new M(\"Request aborted\",M.ECONNABORTED,e,u)),u=null)},u.onerror=function(){n(new M(\"Network Error\",M.ERR_NETWORK,e,u)),u=null},u.ontimeout=function(){var t=e.timeout?\"timeout of \"+e.timeout+\"ms exceeded\":\"timeout exceeded\",r=e.transitional||ne;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new M(t,r.clarifyTimeoutError?M.ETIMEDOUT:M.ECONNABORTED,e,u)),u=null},re.isStandardBrowserEnv){var p=(e.withCredentials||we(l))&&e.xsrfCookieName&&be.read(e.xsrfCookieName);p&&i.set(e.xsrfHeaderName,p)}void 0===o&&i.setContentType(null),\"setRequestHeader\"in u&&q.forEach(i.toJSON(),function(e,t){u.setRequestHeader(t,e)}),q.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),a&&\"json\"!==a&&(u.responseType=e.responseType),\"function\"==typeof e.onDownloadProgress&&u.addEventListener(\"progress\",Ee(e.onDownloadProgress,!0)),\"function\"==typeof e.onUploadProgress&&u.upload&&u.upload.addEventListener(\"progress\",Ee(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=function(t){u&&(n(!t||t.type?new ve(null,e,u):t),u.abort(),u=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener(\"abort\",r)));var h,m=(h=/^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(l))&&h[1]||\"\";m&&-1===re.protocols.indexOf(m)?n(new M(\"Unsupported protocol \"+m+\":\",M.ERR_BAD_REQUEST,e)):u.send(o||null)})}};q.forEach(Oe,function(e,t){if(e){try{Object.defineProperty(e,\"name\",{value:t})}catch(e){}Object.defineProperty(e,\"adapterName\",{value:t})}});var Se=function(e){for(var t,n,r=(e=q.isArray(e)?e:[e]).length,o=0;o<r&&(t=e[o],!(n=q.isString(t)?Oe[t.toLowerCase()]:t));o++);if(!n){if(!1===n)throw new M(\"Adapter \".concat(t,\" is not supported by the environment\"),\"ERR_NOT_SUPPORT\");throw new Error(q.hasOwnProp(Oe,t)?\"Adapter '\".concat(t,\"' is not available in the build\"):\"Unknown adapter '\".concat(t,\"'\"))}if(!q.isFunction(n))throw new TypeError(\"adapter is not a function\");return n};function Re(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ve(null,e)}function Ae(e){return Re(e),e.headers=he.from(e.headers),e.data=me.call(e,e.transformRequest),-1!==[\"post\",\"put\",\"patch\"].indexOf(e.method)&&e.headers.setContentType(\"application/x-www-form-urlencoded\",!1),Se(e.adapter||se.adapter)(e).then(function(t){return Re(e),t.data=me.call(e,e.transformResponse,t),t.headers=he.from(t.headers),t},function(t){return ye(t)||(Re(e),t&&t.response&&(t.response.data=me.call(e,e.transformResponse,t.response),t.response.headers=he.from(t.response.headers))),Promise.reject(t)})}var Te=function(e){return e instanceof he?e.toJSON():e};function je(e,t){t=t||{};var n={};function r(e,t,n){return q.isPlainObject(e)&&q.isPlainObject(t)?q.merge.call({caseless:n},e,t):q.isPlainObject(t)?q.merge({},t):q.isArray(t)?t.slice():t}function o(e,t,n){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!q.isUndefined(t))return r(void 0,t)}function a(e,t){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}var u={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:function(e,t){return o(Te(e),Te(t),!0)}};return q.forEach(Object.keys(Object.assign({},e,t)),function(r){var i=u[r]||o,a=i(e[r],t[r],r);q.isUndefined(a)&&i!==s||(n[r]=a)}),n}var Ne=\"1.4.0\",Ce={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach(function(t,n){Ce[t]=function(r){return e(r)===t||\"a\"+(n<1?\"n \":\" \")+t}});var xe={};Ce.transitional=function(e,t,n){function r(e,t){return\"[Axios v1.4.0] Transitional option '\"+e+\"'\"+t+(n?\". \"+n:\"\")}return function(n,o,i){if(!1===e)throw new M(r(o,\" has been removed\"+(t?\" in \"+t:\"\")),M.ERR_DEPRECATED);return t&&!xe[o]&&(xe[o]=!0,console.warn(r(o,\" has been deprecated since v\"+t+\" and will be removed in the near future\"))),!e||e(n,o,i)}};var Pe={assertOptions:function(t,n,r){if(\"object\"!==e(t))throw new M(\"options must be an object\",M.ERR_BAD_OPTION_VALUE);for(var o=Object.keys(t),i=o.length;i-- >0;){var a=o[i],s=n[a];if(s){var u=t[a],c=void 0===u||s(u,a,t);if(!0!==c)throw new M(\"option \"+a+\" must be \"+c,M.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new M(\"Unknown option \"+a,M.ERR_BAD_OPTION)}},validators:Ce},ke=Pe.validators,Ue=function(){function e(n){t(this,e),this.defaults=n,this.interceptors={request:new te,response:new te}}return r(e,[{key:\"request\",value:function(e,t){\"string\"==typeof e?(t=t||{}).url=e:t=e||{};var n,r=t=je(this.defaults,t),o=r.transitional,i=r.paramsSerializer,a=r.headers;void 0!==o&&Pe.assertOptions(o,{silentJSONParsing:ke.transitional(ke.boolean),forcedJSONParsing:ke.transitional(ke.boolean),clarifyTimeoutError:ke.transitional(ke.boolean)},!1),null!=i&&(q.isFunction(i)?t.paramsSerializer={serialize:i}:Pe.assertOptions(i,{encode:ke.function,serialize:ke.function},!0)),t.method=(t.method||this.defaults.method||\"get\").toLowerCase(),(n=a&&q.merge(a.common,a[t.method]))&&q.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete a[e]}),t.headers=he.concat(n,a);var s=[],u=!0;this.interceptors.request.forEach(function(e){\"function\"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,s.unshift(e.fulfilled,e.rejected))});var c,f=[];this.interceptors.response.forEach(function(e){f.push(e.fulfilled,e.rejected)});var l,d=0;if(!u){var p=[Ae.bind(this),void 0];for(p.unshift.apply(p,s),p.push.apply(p,f),l=p.length,c=Promise.resolve(t);d<l;)c=c.then(p[d++],p[d++]);return c}l=s.length;var h=t;for(d=0;d<l;){var m=s[d++],y=s[d++];try{h=m(h)}catch(e){y.call(this,e);break}}try{c=Ae.call(this,h)}catch(e){return Promise.reject(e)}for(d=0,l=f.length;d<l;)c=c.then(f[d++],f[d++]);return c}},{key:\"getUri\",value:function(e){return Y(ge((e=je(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}]),e}();q.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){Ue.prototype[e]=function(t,n){return this.request(je(n||{},{method:e,url:t,data:(n||{}).data}))}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){function t(t){return function(n,r,o){return this.request(je(o||{},{method:e,headers:t?{\"Content-Type\":\"multipart/form-data\"}:{},url:n,data:r}))}}Ue.prototype[e]=t(),Ue.prototype[e+\"Form\"]=t(!0)});var _e=Ue,Fe=function(){function e(n){if(t(this,e),\"function\"!=typeof n)throw new TypeError(\"executor must be a function.\");var r;this.promise=new Promise(function(e){r=e});var o=this;this.promise.then(function(e){if(o._listeners){for(var t=o._listeners.length;t-- >0;)o._listeners[t](e);o._listeners=null}}),this.promise.then=function(e){var t,n=new Promise(function(e){o.subscribe(e),t=e}).then(e);return n.cancel=function(){o.unsubscribe(t)},n},n(function(e,t,n){o.reason||(o.reason=new ve(e,t,n),r(o.reason))})}return r(e,[{key:\"throwIfRequested\",value:function(){if(this.reason)throw this.reason}},{key:\"subscribe\",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:\"unsubscribe\",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}}],[{key:\"source\",value:function(){var t;return{token:new e(function(e){t=e}),cancel:t}}}]),e}();var Be={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Be).forEach(function(e){var t=o(e,2),n=t[0],r=t[1];Be[r]=n});var Le=Be;var De=function e(t){var n=new _e(t),r=a(_e.prototype.request,n);return q.extend(r,_e.prototype,n,{allOwnKeys:!0}),q.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(je(t,n))},r}(se);return De.Axios=_e,De.CanceledError=ve,De.CancelToken=Fe,De.isCancel=ye,De.VERSION=Ne,De.toFormData=G,De.AxiosError=M,De.Cancel=De.CanceledError,De.all=function(e){return Promise.all(e)},De.spread=function(e){return function(t){return e.apply(null,t)}},De.isAxiosError=function(e){return q.isObject(e)&&!0===e.isAxiosError},De.mergeConfig=je,De.AxiosHeaders=he,De.formToJSON=function(e){return oe(q.isHTMLForm(e)?new FormData(e):e)},De.HttpStatusCode=Le,De.default=De,De});return{requestAction:function(me,action,config){config.url=me.getActionUrl();config.method=\"post\";config.params=config.params||{};config.params=Object.assign(config.params,me.getOpt(\"serverparam\"));config.params.action=action;return this.request(me,config)},request:function(me,config){config.headers=config.headers||{};var customHeaders=me.getOpt(\"serverHeaders\");if(customHeaders){for(var key in customHeaders){config.headers[key]=customHeaders[key]}}return axios(config)}}}();UE.image=function(){var imageCompression=null;!function(e,t){imageCompression=t()}(this,function(){\"use strict\";function _mergeNamespaces(e,t){return t.forEach(function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach(function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}})}),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise(function(r,i){let o;return getApp1Segment(e).then(function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}},i)})}const getApp1Segment=e=>new Promise((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e<c;e+=12){if(274==i.getUint16(e,f)){if(3!==i.getUint16(e+2,f))return r(\"Orientation data type is invalid\");if(1!==i.getUint32(e+4,f))return r(\"Orientation data count is invalid\");i.setUint16(e+8,1,f);break}}return t(e.slice(o,o+2+s))}o+=2+s}return t(new Blob)}),i.readAsArrayBuffer(e)});var e={};!function(e){var t,r,UZIP={};e.exports=UZIP,UZIP.parse=function(e,t){for(var r=UZIP.bin.readUshort,i=UZIP.bin.readUint,o=0,a={},s=new Uint8Array(e),f=s.length-4;101010256!=i(s,f);)f--;o=f;o+=4;var l=r(s,o+=4);r(s,o+=2);var c=i(s,o+=2),u=i(s,o+=4);o+=4,o=u;for(var h=0;h<l;h++){i(s,o),o+=4,o+=4,o+=4,i(s,o+=4);c=i(s,o+=4);var d=i(s,o+=4),A=r(s,o+=4),g=r(s,o+2),p=r(s,o+4);o+=6;var m=i(s,o+=8);o+=4,o+=A+g+p,UZIP._readLocal(s,m,a,c,d,t)}return a},UZIP._readLocal=function(e,t,r,i,o,a){var s=UZIP.bin.readUshort,f=UZIP.bin.readUint;f(e,t),s(e,t+=4),s(e,t+=2);var l=s(e,t+=2);f(e,t+=2),f(e,t+=4),t+=4;var c=s(e,t+=8),u=s(e,t+=2);t+=2;var h=UZIP.bin.readUTF8(e,t,c);if(t+=c,t+=u,a)r[h]={size:o,csize:i};else{var d=new Uint8Array(e.buffer,t);if(0==l)r[h]=new Uint8Array(d.buffer.slice(t,t+i));else{if(8!=l)throw\"unknown compression method: \"+l;var A=new Uint8Array(o);UZIP.inflateRaw(d,A),r[h]=A}}},UZIP.inflateRaw=function(e,t){return UZIP.F.inflate(e,t)},UZIP.inflate=function(e,t){return e[0],e[1],UZIP.inflateRaw(new Uint8Array(e.buffer,e.byteOffset+2,e.length-6),t)},UZIP.deflate=function(e,t){null==t&&(t={level:6});var r=0,i=new Uint8Array(50+Math.floor(1.1*e.length));i[r]=120,i[r+1]=156,r+=2,r=UZIP.F.deflateRaw(e,i,r,t.level);var o=UZIP.adler(e,0,e.length);return i[r+0]=o>>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o<i;o++)e=UZIP.crc.table[255&(e^t[r+o])]^e>>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a<s;){for(var f=Math.min(a+5552,s);a<f;)o+=i+=e[a++];i%=65521,o%=65521}return o<<16|i},UZIP.bin={readUshort:function(e,t){return e[t]|e[t+1]<<8},writeUshort:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII:function(e,t,r){for(var i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,t,r){for(var i,o=\"\",a=0;a<r;a++)o+=\"%\"+UZIP.bin.pad(e[t+a].toString(16));try{i=decodeURIComponent(o)}catch(i){return UZIP.bin.readASCII(e,t,r)}return i},writeUTF8:function(e,t,r){for(var i=r.length,o=0,a=0;a<i;a++){var s=r.charCodeAt(a);if(0==(4294967168&s))e[t+o]=s,o++;else if(0==(4294965248&s))e[t+o]=192|s>>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i<t;i++){var o=e.charCodeAt(i);if(0==(4294967168&o))r++;else if(0==(4294965248&o))r+=2;else if(0==(4294901760&o))r+=3;else{if(0!=(4292870144&o))throw\"e\";r+=4}}return r}},UZIP.F={},UZIP.F.deflateRaw=function(e,t,r,i){var o=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][i],a=UZIP.F.U,s=UZIP.F._goodIndex;UZIP.F._hash;var f=UZIP.F._putsE,l=0,c=r<<3,u=0,h=e.length;if(0==i){for(;l<h;){f(t,c,l+(_=Math.min(65535,h-l))==h?1:0),c=UZIP.F._copyExact(e,l,_,t,c+8),l+=_}return c>>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l<h;l++){if(b=y,l+1<h-2){y=UZIP.F._hash(e,l+1);var E=l+1&32767;g[E]=A[y],A[y]=E}if(u<=l){(p>14e3||m>26697)&&h-l>100&&(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(l==h-1||u==h?1:0,d,p,v,e,w,l-w,t,c),p=m=v=0,w=l);var F=0;l<h-2&&(F=UZIP.F._bestMatch(e,l,g,b,Math.min(o[2],h-l),o[3]));var _=F>>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(1,d,p,v,e,w,l-w,t,c),p=0,m=0,p=m=v=0,w=l);0!=(7&c);)c++;return c>>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2<d&&(d=l+2);for(var A=0,g=0;g<d-2;g++){var p=t-l+g+32768&32767,m=p-r[p]+32768&32767;m>A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t<o&&e[t]==e[t-r];)t++;return t-i},UZIP.F._hash=function(e,t){return(e[t]<<8|e[t+1])+(e[t+2]<<4)&65535},UZIP.saved=0,UZIP.F._writeBlock=function(e,t,r,i,o,a,s,f,l){var c,u,h,d,A,g,p,m,w,v=UZIP.F.U,b=UZIP.F._putsF,y=UZIP.F._putsE;v.lhst[256]++,u=(c=UZIP.F.getTrees())[0],h=c[1],d=c[2],A=c[3],g=c[4],p=c[5],m=c[6],w=c[7];var E=32+(0==(l+3&7)?0:8-(l+3&7))+(s<<3),F=i+UZIP.F.contSize(v.fltree,v.lhst)+UZIP.F.contSize(v.fdtree,v.dhst),_=i+UZIP.F.contSize(v.ltree,v.lhst)+UZIP.F.contSize(v.dtree,v.dhst);_+=14+3*p+UZIP.F.contSize(v.itree,v.ihst)+(2*v.ihst[16]+3*v.ihst[17]+7*v.ihst[18]);for(var B=0;B<286;B++)v.lhst[B]=0;for(B=0;B<30;B++)v.dhst[B]=0;for(B=0;B<19;B++)v.ihst[B]=0;var U=E<F&&E<_?0:F<_?1:2;if(b(f,l,e),b(f,l+1,U),l+=3,0==U){for(;0!=(7&l);)l++;l=UZIP.F._copyExact(o,a,s,f,l)}else{var C,I;if(1==U&&(C=v.fltree,I=v.fdtree),2==U){UZIP.F.makeCodes(v.ltree,u),UZIP.F.revCodes(v.ltree,u),UZIP.F.makeCodes(v.dtree,h),UZIP.F.revCodes(v.dtree,h),UZIP.F.makeCodes(v.itree,d),UZIP.F.revCodes(v.itree,d),C=v.ltree,I=v.dtree,y(f,l,A-257),y(f,l+=5,g-1),y(f,l+=5,p-4),l+=4;for(var Q=0;Q<p;Q++)y(f,l+3*Q,v.itree[1+(v.ordr[Q]<<1)]);l+=3*p,l=UZIP.F._codeTiny(m,v.itree,f,l),l=UZIP.F._codeTiny(w,v.itree,f,l)}for(var M=a,x=0;x<r;x+=2){for(var T=t[x],S=T>>>23,R=M+(8388607&T);M<R;)l=UZIP.F._writeLit(o[M++],C,f,l);if(0!=S){var O=t[x+1],P=O>>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),S-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=S}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f<i.length;f+=2)e.ihst[i[f]]++;for(f=0;f<a.length;f+=2)e.ihst[a[f]]++;for(var l=UZIP.F._hufTree(e.ihst,e.itree,7),c=19;c>4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(e[r+1]);return t},UZIP.F.nonZero=function(e){for(var t=\"\",r=0;r<e.length;r+=2)0!=e[r+1]&&(t+=(r>>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i<t.length;i++)r+=t[i]*e[1+(i<<1)];return r},UZIP.F._codeTiny=function(e,t,r,i){for(var o=0;o<e.length;o+=2){var a=e[o],s=e[o+1];i=UZIP.F._writeLit(a,t,r,i);var f=16==a?2:17==a?3:7;a>15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i<r;i+=2){var o=e[i+1],a=i+3<r?e[i+3]:-1,s=i+5<r?e[i+5]:-1,f=0==i?-1:e[i-1];if(0==o&&a==o&&s==o){for(var l=i+5;l+2<r&&e[l+2]==o;)l+=2;(c=Math.min(l+1-i>>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2<r&&e[l+2]==o;)l+=2;var c=Math.min(l+1-i>>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;s<a;s+=2)t[s]=0,t[s+1]=0;for(s=0;s<o;s++)0!=e[s]&&i.push({lit:s,f:e[s]});var f=i.length,l=i.slice(0);if(0==f)return 0;if(1==f){var c=i[0].lit;l=0==c?1:0;return t[1+(c<<1)]=1,t[1+(l<<1)]=1,1}i.sort(function(e,t){return e.f-t.f});var u=i[0],h=i[1],d=0,A=1,g=2;for(i[0]={lit:-1,f:u.f+h.f,l:u,r:h,d:0};A!=f-1;)u=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],h=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],i[A++]={lit:-1,f:u.f+h.f,l:u,r:h};var p=UZIP.F.setDepth(i[A-1],0);for(p>r&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;s<f;s++)t[1+(l[s].lit<<1)]=l[s].d;return p},UZIP.F.setDepth=function(e,t){return-1!=e.lit?(e.d=t,t):Math.max(UZIP.F.setDepth(e.l,t+1),UZIP.F.setDepth(e.r,t+1))},UZIP.F.restrictDepth=function(e,t,r){var i=0,o=1<<r-t,a=0;for(e.sort(function(e,t){return t.d==e.d?e.f-t.f:t.d-e.d}),i=0;i<e.length&&e[i].d>t;i++){var s=e[i].d;e[i].d=t,a+=o-(1<<r-s)}for(a>>>=r-t;a>0;){(s=e[i].d)<t?(e[i].d++,a-=1<<t-s-1):i++}for(;i>=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_<v;_++){var U=a(e,F+3*_,3);u.itree[1+(u.ordr[_]<<1)]=U,U>B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<<B)-1,m+w,e,F,u.ttree);var C=i._copyOut(u.ttree,0,m,u.ltree);b=(1<<C)-1;var I=i._copyOut(u.ttree,m,w,u.dtree);y=(1<<I)-1,f(u.ltree,C),l(u.ltree,C,d),f(u.dtree,I),l(u.dtree,I,A)}for(;;){var Q=d[c(e,F)&b];F+=15&Q;var M=Q>>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var T=u.ldef[M-257];x=E+(T>>>3)+a(e,F,7&T),F+=7&T}var S=A[c(e,F)&y];F+=15&S;var R=S>>>4,O=u.ddef[R],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E<x;)t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P];E=x}}}else{0!=(7&F)&&(F+=8-(7&F));var H=4+(F>>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l<r;){var c=e[f(i,o)&t];o+=15&c;var u=c>>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l<A;)a[l]=h,l++}}return o},UZIP.F._copyOut=function(e,t,r,i){for(var o=0,a=0,s=i.length>>>1;a<r;){var f=e[a+t];i[a<<1]=0,i[1+(a<<1)]=f,f>o&&(o=f),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},UZIP.F.makeCodes=function(e,t){for(var r,i,o,a,s=UZIP.F.U,f=e.length,l=s.bl_count,c=0;c<=t;c++)l[c]=0;for(c=1;c<f;c+=2)l[e[c]]++;var u=s.next_code;for(r=0,l[0]=0,i=1;i<=t;i++)r=r+l[i-1]<<1,u[i]=r;for(o=0;o<f;o+=2)0!=(a=e[o+1])&&(e[o]=u[a],u[a]++)},UZIP.F.codes2map=function(e,t,r){for(var i=e.length,o=UZIP.F.U.rev15,a=0;a<i;a+=2)if(0!=e[a+1])for(var s=a>>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<<c,h=u+(1<<c);u!=h;){r[o[u]>>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o<e.length;o+=2){var a=e[o]<<t-e[o+1];e[o]=r[a]>>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},UZIP.F._bitsF=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},UZIP.F._get17=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}({get exports(){return e},set exports(t){e=t}});var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII(e,t,r){for(let i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},readBytes(e,t,r){const i=[];for(let o=0;o<r;o++)i.push(e[t+o]);return i},pad:e=>e.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o<i;o++)a+=`%${e.pad(t[r+o].toString(16))}`;try{o=decodeURIComponent(a)}catch(o){return e.readASCII(t,r,i)}return o}};function decodeImage(t,r,i,o){const a=r*i,s=_getBPP(o),f=Math.ceil(r*s/8),l=new Uint8Array(4*a),c=new Uint32Array(l.buffer),{ctype:u}=o,{depth:h}=o,d=e.readUshort;if(6==u){const e=a<<2;if(8==h)for(var A=0;A<e;A+=4)l[A]=t[A],l[A+1]=t[A+1],l[A+2]=t[A+2],l[A+3]=t[A+3];if(16==h)for(A=0;A<e;A++)l[A]=t[A<<1]}else if(2==u){const e=o.tabs.tRNS;if(null==e){if(8==h)for(A=0;A<a;A++){var g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g]}if(16==h)for(A=0;A<a;A++){g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g]}}else{var p=e[0];const r=e[1],i=e[2];if(8==h)for(A=0;A<a;A++){var m=A<<2;g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g],t[g]==p&&t[g+1]==r&&t[g+2]==i&&(l[m+3]=0)}if(16==h)for(A=0;A<a;A++){m=A<<2,g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g],d(t,g)==p&&d(t,g+2)==r&&d(t,g+4)==i&&(l[m+3]=0)}}}else if(3==u){const e=o.tabs.PLTE,s=o.tabs.tRNS,c=s?s.length:0;if(1==h)for(var w=0;w<i;w++){var v=w*f,b=w*r;for(A=0;A<r;A++){m=b+A<<2;var y=3*(E=t[v+(A>>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}if(2==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(4==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(8==h)for(A=0;A<a;A++){var E;m=A<<2,y=3*(E=t[A]);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}else if(4==u){if(8==h)for(A=0;A<a;A++){m=A<<2;var F=t[_=A<<1];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+1]}if(16==h)for(A=0;A<a;A++){var _;m=A<<2,F=t[_=A<<2];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+2]}}else if(0==u)for(p=o.tabs.tRNS?o.tabs.tRNS:-1,w=0;w<i;w++){const e=w*f,i=w*r;if(1==h)for(var B=0;B<r;B++){var U=(F=255*(t[e+(B>>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B<r;B++){U=(F=85*(t[e+(B>>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B<r;B++){U=(F=17*(t[e+(B>>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B<r;B++){U=(F=t[e+B])==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(16==h)for(B=0;B<r;B++){F=t[e+(B<<1)],U=d(t,e+(B<<1))==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}}return l}function _decompress(e,r,i,o){const a=_getBPP(e),s=Math.ceil(i*a/8),f=new Uint8Array((s+1+e.interlace)*o);return r=e.tabs.CgBI?t(r,f):_inflate(r,f),0==e.interlace?r=_filterZero(r,e,0,i,o):1==e.interlace&&(r=function _readInterlace(e,t){const r=t.width,i=t.height,o=_getBPP(t),a=o>>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b<i;)b+=p,v++;let y=u[A];for(;y<r;)y+=m,w++;const E=Math.ceil(w*o/8);_filterZero(e,t,l,w,v);let F=0,_=c[A];for(;_<i;){let t=u[A],i=l+F*E<<3;for(;t<r;){var g;if(1==o)g=(g=e[i>>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t<a;t++)f[r+t]=e[(i>>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;B<u;B++){const r=w(t,g+3*B,3);F.Q[1+(F.X[B]<<1)]=r,r>e&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<<e)-1,l+c,t,g,F.v);const r=p.V(F.v,0,l,F.C);h=(1<<r)-1;const i=p.V(F.v,l,c,F.D);d=(1<<i)-1,b(F.C,r),y(F.C,r,o),b(F.D,i),y(F.D,i,a)}for(;;){const e=o[E(t,g)&h];g+=15&e;const i=e>>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A<e;)r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l];A=e}}}}else{0!=(7&g)&&(g+=8-(7&g));const o=4+(g>>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c<i;){const e=t[l(o,a)&r];a+=15&e;const i=e>>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c<r;)s[c]=e,c++}}return a},e.H.V=function(e,t,r,i){let o=0,a=0;const s=i.length>>>1;for(;a<r;){const r=e[a+t];i[a<<1]=0,i[1+(a<<1)]=r,r>o&&(o=r),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},e.H.n=function(t,r){const i=e.H.m,o=t.length;let a,s,f;let l;const c=i.j;for(var u=0;u<=r;u++)c[u]=0;for(u=1;u<o;u+=2)c[t[u]]++;const h=i.K;for(a=0,c[0]=0,s=1;s<=r;s++)a=a+c[s-1]<<1,h[s]=a;for(f=0;f<o;f+=2)l=t[f+1],0!=l&&(t[f]=h[l],h[l]++)},e.H.A=function(t,r,i){const o=t.length,a=e.H.m.r;for(let e=0;e<o;e+=2)if(0!=t[e+1]){const o=e>>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<<l;const u=c+(1<<l);for(;c!=u;){i[a[c]>>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e<t.length;e+=2){const a=t[e]<<r-t[e+1];t[e]=i[a]>>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},e.H.b=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},e.H.Z=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u<s;u++)e[u+1]=e[u+1]+(e[u+1-a]>>>1)&255;for(let t=0;t<o;t++)if(f=r+t*s,l=f+t+1,c=e[l-1],u=0,0==c)for(;u<s;u++)e[f+u]=e[l+u];else if(1==c){for(;u<a;u++)e[f+u]=e[l+u];for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-a]}else if(2==c)for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-s];else if(3==c){for(;u<a;u++)e[f+u]=e[l+u]+(e[f+u-s]>>>1);for(;u<s;u++)e[f+u]=e[l+u]+(e[f+u-s]+e[f+u-a]>>>1)}else{for(;u<a;u++)e[f+u]=e[l+u]+_paeth(0,e[f+u-s],0);for(;u<s;u++)e[f+u]=e[l+u]+_paeth(e[f+u-a],e[f+u-s],e[f+u-a-s])}return e}function _paeth(e,t,r){const i=e+t-r,o=i-e,a=i-t,s=i-r;return o*o<=a*a&&o*o<=s*s?e:a*a<=s*s?t:r}function _IHDR(t,r,i){i.width=e.readUint(t,r),r+=4,i.height=e.readUint(t,r),r+=4,i.depth=t[r],r++,i.ctype=t[r],r++,i.compress=t[r],r++,i.filter=t[r],r++,i.interlace=t[r],r++}function _copyTile(e,t,r,i,o,a,s,f,l){const c=Math.min(t,o),u=Math.min(r,a);let h=0,d=0;for(let r=0;r<u;r++)for(let a=0;a<c;a++)if(s>=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o<i.length;){const e=a.readUint(i,o);o+=4;const r=a.readASCII(i,o,4);if(o+=4,\"IHDR\"==r)_IHDR(i,o,l);else if(\"iCCP\"==r){for(var p=o;0!=i[p];)p++;a.readASCII(i,o,p-o),i[p+1];const s=i.slice(p+2,o+e);let f=null;try{f=_inflate(s)}catch(e){f=t(s)}l.tabs[r]=f}else if(\"CgBI\"==r)l.tabs[r]=i.slice(o,o+4);else if(\"IDAT\"==r){for(g=0;g<e;g++)c[h+g]=i[o+g];h+=e}else if(\"acTL\"==r)l.tabs[r]={num_frames:f(i,o),num_plays:f(i,o+4)},u=new Uint8Array(i.length);else if(\"fcTL\"==r){if(0!=d)(E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height),d=0;const e={x:f(i,o+12),y:f(i,o+16),width:f(i,o+4),height:f(i,o+8)};let t=s(i,o+22);t=s(i,o+20)/(0==t?100:t);const r={rect:e,delay:Math.round(1e3*t),dispose:i[o+24],blend:i[o+25]};l.frames.push(r)}else if(\"fdAT\"==r){for(g=0;g<e-4;g++)u[d+g]=i[o+g+4];d+=e-4}else if(\"pHYs\"==r)l.tabs[r]=[a.readUint(i,o),a.readUint(i,o+4),i[o+8]];else if(\"cHRM\"==r){l.tabs[r]=[];for(g=0;g<8;g++)l.tabs[r].push(a.readUint(i,o+4*g))}else if(\"tEXt\"==r||\"zTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});var m=a.nextZero(i,o),w=a.readASCII(i,o,m-o),v=o+e-m-1;if(\"tEXt\"==r)y=a.readASCII(i,m+1,v);else{var b=_inflate(i.slice(m+2,m+2+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"iTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});m=0,p=o;m=a.nextZero(i,p);w=a.readASCII(i,p,m-p);const t=i[p=m+1];var y;i[p+1],p+=2,m=a.nextZero(i,p),a.readASCII(i,p,m-p),p=m+1,m=a.nextZero(i,p),a.readUTF8(i,p,m-p);v=e-((p=m+1)-o);if(0==t)y=a.readUTF8(i,p,v);else{b=_inflate(i.slice(p,p+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"PLTE\"==r)l.tabs[r]=a.readBytes(i,o,e);else if(\"hIST\"==r){const e=l.tabs.PLTE.length/3;l.tabs[r]=[];for(g=0;g<e;g++)l.tabs[r].push(s(i,o+2*g))}else if(\"tRNS\"==r)3==l.ctype?l.tabs[r]=a.readBytes(i,o,e):0==l.ctype?l.tabs[r]=s(i,o):2==l.ctype&&(l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]);else if(\"gAMA\"==r)l.tabs[r]=a.readUint(i,o)/1e5;else if(\"sRGB\"==r)l.tabs[r]=i[o];else if(\"bKGD\"==r)0==l.ctype||4==l.ctype?l.tabs[r]=[s(i,o)]:2==l.ctype||6==l.ctype?l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]:3==l.ctype&&(l.tabs[r]=i[o]);else if(\"IEND\"==r)break;o+=e,a.readUint(i,o),o+=4}var E;return 0!=d&&((E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height)),l.data=_decompress(l,c,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function toRGBA8(e){const t=e.width,r=e.height;if(null==e.tabs.acTL)return[decodeImage(e.data,t,r,e).buffer];const i=[];null==e.frames[0].data&&(e.frames[0].data=e.data);const o=t*r*4,a=new Uint8Array(o),s=new Uint8Array(o),f=new Uint8Array(o);for(let c=0;c<e.frames.length;c++){const u=e.frames[c],h=u.rect.x,d=u.rect.y,A=u.rect.width,g=u.rect.height,p=decodeImage(u.data,A,g,e);if(0!=c)for(var l=0;l<o;l++)f[l]=a[l];if(0==u.blend?_copyTile(p,A,g,a,t,r,h,d,0):1==u.blend&&_copyTile(p,A,g,a,t,r,h,d,1),i.push(a.buffer.slice(0)),0==u.dispose);else if(1==u.dispose)_copyTile(s,A,g,a,t,r,h,d,0);else if(2==u.dispose)for(l=0;l<o;l++)a[l]=f[l]}return i},_paeth:_paeth,_copyTile:_copyTile,_bin:e}}();!function(){const{_copyTile:e}=UPNG,{_bin:t}=UPNG,r=UPNG._paeth;var i={table:function(){const e=new Uint32Array(256);for(let t=0;t<256;t++){let r=t;for(let e=0;e<8;e++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a<o;a++)e=i.table[255&(e^t[r+a])]^e>>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c<f;c++){const e=i[c];l.push([e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c<f;c++){let e=4294967295;for(var u=0,h=0;h<f;h++){var d=D(l[c],l[h]);h!=c&&d<e&&(e=d,u=h)}}const A=new Uint32Array(o.buffer),g=new Int16Array(t*r*4),p=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(c=0;c<p.length;c++)p[c]=255*((p[c]+.5)/16-.5);for(let o=0;o<r;o++)for(let w=0;w<t;w++){var m;c=4*(o*t+w);if(2!=s)m=[N(e[c]+g[c]),N(e[c+1]+g[c+1]),N(e[c+2]+g[c+2]),N(e[c+3]+g[c+3])];else{d=p[4*(3&o)+(3&w)];m=[N(e[c]+d),N(e[c+1]+d),N(e[c+2]+d),N(e[c+3]+d)]}u=0;let v=16777215;for(h=0;h<f;h++){const e=D(m,l[h]);e<v&&(v=e,u=h)}const b=l[u],y=[m[0]-b[0],m[1]-b[1],m[2]-b[2],m[3]-b[3]];1==s&&(w!=t-1&&addErr(y,g,c+4,7),o!=r-1&&(0!=w&&addErr(y,g,c+4*t-4,3),addErr(y,g,c+4*t,5),w!=t-1&&addErr(y,g,c+4*t+4,1))),a[c>>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w<m;w++)e.plte[w]>>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v<e.frames.length;v++){d&&(p+=38),p+=(F=e.frames[v]).cimg.length+12,0!=v&&(p+=4)}p+=12;const b=new Uint8Array(p),y=[137,80,78,71,13,10,26,10];for(w=0;w<8;w++)b[w]=y[w];if(l(b,h,13),h+=4,u(b,h,\"IHDR\"),h+=4,l(b,h,r),h+=4,l(b,h,o),h+=4,b[h]=e.depth,h++,b[h]=e.ctype,h++,b[h]=0,h++,b[h]=0,h++,b[h]=0,h++,l(b,h,f(b,h-17,17)),h+=4,null!=s.sRGB&&(l(b,h,1),h+=4,u(b,h,\"sRGB\"),h+=4,b[h]=s.sRGB,h++,l(b,h,f(b,h-5,5)),h+=4),null!=s.iCCP){const e=13+A.length;l(b,h,e),h+=4,u(b,h,\"iCCP\"),h+=4,u(b,h,\"ICC profile\"),h+=11,h+=2,b.set(A,h),h+=A.length,l(b,h,f(b,h-(e+4),e+4)),h+=4}if(null!=s.pHYs&&(l(b,h,9),h+=4,u(b,h,\"pHYs\"),h+=4,l(b,h,s.pHYs[0]),h+=4,l(b,h,s.pHYs[1]),h+=4,b[h]=s.pHYs[2],h++,l(b,h,f(b,h-13,13)),h+=4),d&&(l(b,h,8),h+=4,u(b,h,\"acTL\"),h+=4,l(b,h,e.frames.length),h+=4,l(b,h,null!=s.loop?s.loop:0),h+=4,l(b,h,f(b,h-12,12)),h+=4),3==e.ctype){l(b,h,3*(m=e.plte.length)),h+=4,u(b,h,\"PLTE\"),h+=4;for(w=0;w<m;w++){const t=3*w,r=e.plte[w],i=255&r,o=r>>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w<m;w++)b[h+w]=e.plte[w]>>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;v<e.frames.length;v++){var F=e.frames[v];d&&(l(b,h,26),h+=4,u(b,h,\"fcTL\"),h+=4,l(b,h,E++),h+=4,l(b,h,F.rect.width),h+=4,l(b,h,F.rect.height),h+=4,l(b,h,F.rect.x),h+=4,l(b,h,F.rect.y),h+=4,c(b,h,a[v]),h+=2,c(b,h,1e3),h+=2,b[h]=F.dispose,h++,b[h]=F.blend,h++,l(b,h,f(b,h-30,30)),h+=4);const t=F.cimg;l(b,h,(m=t.length)+(0==v?0:4)),h+=4;const r=h;u(b,h,0==v?\"IDAT\":\"fdAT\"),h+=4,0!=v&&(l(b,h,E++),h+=4),b.set(t,h),h+=m,l(b,h,f(b,r,h-r)),h+=4}return l(b,h,0),h+=4,u(b,h,\"IEND\"),h+=4,l(b,h,f(b,h-4,4)),h+=4,b.buffer}function compressPNG(e,t,r){for(let i=0;i<e.frames.length;i++){const o=e.frames[i];o.rect.width;const a=o.rect.height,s=new Uint8Array(a*o.bpl+a);o.cimg=_filterZero(o.img,a,o.bpp,o.bpl,s,t,r)}}function compress(t,r,i,o,a){const s=a[0],f=a[1],l=a[2],c=a[3],u=a[4],h=a[5];let d=6,A=8,g=255;for(var p=0;p<t.length;p++){const e=new Uint8Array(t[p]);for(var m=e.length,w=0;w<m;w+=4)g&=e[w+3]}const v=255!=g,b=function framize(t,r,i,o,a,s){const f=[];for(var l=0;l<t.length;l++){const h=new Uint8Array(t[l]),A=new Uint32Array(h.buffer);var c;let g=0,p=0,m=r,w=i,v=o?1:0;if(0!=l){const b=s||o||1==l||0!=f[l-2].dispose?1:2;let y=0,E=1e9;for(let e=0;e<b;e++){var u=new Uint8Array(t[l-1-e]);const o=new Uint32Array(t[l-1-e]);let s=r,f=i,c=-1,h=-1;for(let e=0;e<i;e++)for(let t=0;t<r;t++){A[d=e*r+t]!=o[d]&&(t<s&&(s=t),t>c&&(c=t),e<f&&(f=e),e>h&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v<E&&(E=v,y=e,g=s,p=f,m=c-s+1,w=h-f+1)}u=new Uint8Array(t[l-1-y]);1==y&&(f[l-1].dispose=2),c=new Uint8Array(m*w*4),e(u,r,i,c,m,w,-g,-p,0),v=e(h,r,i,c,m,w,-g,-p,3)?1:0,1==v?_prepareDiff(h,r,i,c,{x:g,y:p,width:m,height:w}):e(h,r,i,c,m,w,-g,-p,0)}else c=h.slice(0);f.push({rect:{x:g,y:p,width:m,height:w},img:c,blend:v,dispose:0})}if(o)for(l=0;l<f.length;l++){if(1==(A=f[l]).blend)continue;const e=A.rect,o=f[l-1].rect,s=Math.min(e.x,o.x),c=Math.min(e.y,o.y),u={x:s,y:c,width:Math.max(e.x+e.width,o.x+o.width)-s,height:Math.max(e.y+e.height,o.y+o.height)-c};f[l-1].dispose=1,l-1!=0&&_updateFrame(t,r,i,f,l-1,u,a),_updateFrame(t,r,i,f,l,u,a)}let h=0;if(1!=t.length)for(var d=0;d<f.length;d++){var A;h+=(A=f[d]).rect.width*A.rect.height}return f}(t,r,i,s,f,l),y={},E=[],F=[];if(0!=o){const e=[];for(w=0;w<b.length;w++)e.push(b[w].img.buffer);const t=function concatRGBA(e){let t=0;for(var r=0;r<e.length;r++)t+=e[r].byteLength;const i=new Uint8Array(t);let o=0;for(r=0;r<e.length;r++){const t=new Uint8Array(e[r]),a=t.length;for(let e=0;e<a;e+=4){let r=t[e],a=t[e+1],s=t[e+2];const f=t[e+3];0==f&&(r=a=s=0),i[o+e]=r,i[o+e+1]=a,i[o+e+2]=s,i[o+e+3]=f}o+=a}return i.buffer}(e),r=quantize(t,o);for(w=0;w<r.plte.length;w++)E.push(r.plte[w].est.rgba);let i=0;for(w=0;w<b.length;w++){const e=(B=b[w]).img.length;var _=new Uint8Array(r.inds.buffer,i>>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;p<b.length;p++){var B=b[p];const e=new Uint32Array(B.img.buffer);var U=B.rect.width;m=e.length,_=new Uint8Array(m);F.push(_);for(w=0;w<m;w++){const t=e[w];if(0!=w&&t==e[w-1])_[w]=_[w-1];else if(w>U&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p<b.length;p++){(B=b[p]).rect.x,B.rect.y;U=B.rect.width;const e=B.rect.height;let t=B.img;new Uint32Array(t.buffer);let r=4*U,i=4;if(C<=256&&0==u){r=Math.ceil(A*U/8);var I=new Uint8Array(r*e);const o=F[p];for(let t=0;t<e;t++){w=t*r;const e=t*U;if(8==A)for(var Q=0;Q<U;Q++)I[w+Q]=o[e+Q];else if(4==A)for(Q=0;Q<U;Q++)I[w+(Q>>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q<U;Q++)I[w+(Q>>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q<U;Q++)I[w+(Q>>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;w<o;w++){const e=3*w,r=4*w;I[e]=t[r],I[e+1]=t[r+1],I[e+2]=t[r+2]}t=I,d=2,i=3,r=3*U}B.img=t,B.bpl=r,B.bpp=i}return{ctype:d,depth:A,plte:E,frames:b}}function _updateFrame(t,r,i,o,a,s,f){const l=Uint8Array,c=Uint32Array,u=new l(t[a-1]),h=new c(t[a-1]),d=a+1<t.length?new l(t[a+1]):null,A=new l(t[a]),g=new c(A.buffer);let p=r,m=i,w=-1,v=-1;for(let e=0;e<s.height;e++)for(let t=0;t<s.width;t++){const i=s.x+t,f=s.y+e,l=f*r+i,c=g[l];0==c||0==o[a-1].dispose&&h[l]==c&&(null==d||0!=d[4*l+3])||(i<p&&(p=i),i>w&&(w=i),f<m&&(m=f),f>v&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h<c.length;h++){for(let a=0;a<t;a++)_filterLine(o,e,a,i,r,c[h]);f.push(u.deflate(o,l))}let d,A=1e9;for(h=0;h<f.length;h++)f[h].length<A&&(d=h,A=f[h].length);return f[d]}function _filterLine(e,t,i,o,a,s){const f=i*o;let l=f+i;if(e[l]=s,l++,0==s)if(o<500)for(var c=0;c<o;c++)e[l+c]=t[f+c];else e.set(new Uint8Array(t.buffer,f,o),l);else if(1==s){for(c=0;c<a;c++)e[l+c]=t[f+c];for(c=a;c<o;c++)e[l+c]=t[f+c]-t[f+c-a]+256&255}else if(0==i){for(c=0;c<a;c++)e[l+c]=t[f+c];if(2==s)for(c=a;c<o;c++)e[l+c]=t[f+c];if(3==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-(t[f+c-a]>>1)+256&255;if(4==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-r(t[f+c-a],0,0)+256&255}else{if(2==s)for(c=0;c<o;c++)e[l+c]=t[f+c]+256-t[f+c-o]&255;if(3==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-(t[f+c-o]>>1)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-(t[f+c-o]+t[f+c-a]>>1)&255}if(4==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-r(0,t[f+c-o],0)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-r(t[f+c-a],t[f+c-o],t[f+c-a-o])&255}}}function quantize(e,t){const r=new Uint8Array(e),i=r.slice(0),o=new Uint32Array(i.buffer),a=getKDtree(i,t),s=a[0],f=a[1],l=r.length,c=new Uint8Array(l>>2);let u;if(r.length<2e7)for(var h=0;h<l;h+=4){u=getNearest(s,d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255)),c[h>>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h<l;h+=4){var d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255);for(u=s;u.left;)u=planeDst(u.est,d,A,g,p)<=0?u.left:u.right;c[h>>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.length<t;){let t=0,o=0;for(var s=0;s<a.length;s++)a[s].est.L>t&&(t=a[s].est.L,o=s);if(t<r)break;const f=a[o],l=splitPixels(e,i,f.i0,f.i1,f.est.e,f.est.eMq255);if(f.i0>=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort((e,t)=>t.bst.N-e.bst.N);for(s=0;s<a.length;s++)a[s].ind=s;return[o,a]}function getNearest(e,t,r,i,o){if(null==e.left)return e.tdst=function dist(e,t,r,i,o){const a=t-e[0],s=r-e[1],f=i-e[2],l=o-e[3];return a*a+s*s+f*f+l*l}(e.est.q,t,r,i,o),e;const a=planeDst(e.est,t,r,i,o);let s=e.left,f=e.right;a>0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdst<l.tdst?c:l}function planeDst(e,t,r,i,o){const{e:a}=e;return a[0]*t+a[1]*r+a[2]*i+a[3]*o-e.eMq}function splitPixels(e,t,r,i,o,a){for(i-=4;r<i;){for(;vecDot(e,r,o)<=a;)r+=4;for(;vecDot(e,i,o)>a;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a<r;a+=4){const t=e[a]*(1/255),r=e[a+1]*(1/255),s=e[a+2]*(1/255),f=e[a+3]*(1/255);o[0]+=t,o[1]+=r,o[2]+=s,o[3]+=f,i[0]+=t*t,i[1]+=t*r,i[2]+=t*s,i[3]+=t*f,i[5]+=r*r,i[6]+=r*s,i[7]+=r*f,i[10]+=s*s,i[11]+=s*f,i[15]+=f*f}return i[4]=i[1],i[8]=i[2],i[9]=i[6],i[12]=i[3],i[13]=i[7],i[14]=i[11],{R:i,m:o,N:a}}function estats(e){const{R:t}=e,{m:r}=e,{N:i}=e,a=r[0],s=r[1],f=r[2],l=r[3],c=0==i?0:1/i,u=[t[0]-a*a*c,t[1]-a*s*c,t[2]-a*f*c,t[3]-a*l*c,t[4]-s*a*c,t[5]-s*s*c,t[6]-s*f*c,t[7]-s*l*c,t[8]-f*a*c,t[9]-f*s*c,t[10]-f*f*c,t[11]-f*l*c,t[12]-l*a*c,t[13]-l*s*c,t[14]-l*f*c,t[15]-l*l*c],h=u,d=o;let A=[Math.random(),Math.random(),Math.random(),Math.random()],g=0,p=0;if(0!=i)for(let e=0;e<16&&(A=d.multVec(h,A),p=Math.sqrt(d.dot(A,A)),A=d.sml(1/p,A),!(0!=e&&Math.abs(p-g)<1e-9));e++)g=p;const m=[a*c,s*c,f*c,l*c];return{Cov:u,q:m,e:A,L:g,eMq255:d.dot(d.sml(255,m),A),eMq:d.dot(A,m),rgba:(Math.round(255*m[3])<<24|Math.round(255*m[2])<<16|Math.round(255*m[1])<<8|Math.round(255*m[0])<<0)>>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i<e.length;i++)l.frames.push({rect:{x:0,y:0,width:t,height:r},img:new Uint8Array(e[i]),blend:0,dispose:1,bpp:Math.ceil(c/8),bpl:Math.ceil(u/8)});return compressPNG(l,0,!0),_main(l,t,r,s,f)},UPNG.encode.compress=compress,UPNG.encode.dither=dither,UPNG.quantize=quantize,UPNG.quantize.getKDtree=getKDtree,UPNG.quantize.getNearest=getNearest}();const t={toArrayBuffer(e,r){const i=e.width,o=e.height,a=i<<2,s=e.getContext(\"2d\").getImageData(0,0,i,o),f=new Uint32Array(s.data.buffer),l=(32*i+31)/32<<2,c=l*o,u=122+c,h=new ArrayBuffer(u),d=new DataView(h),A=1<<20;let g,p,m,w,v=A,b=0,y=0,E=0;function set16(e){d.setUint16(y,e,!0),y+=2}function set32(e){d.setUint32(y,e,!0),y+=4}function seek(e){y+=e}set16(19778),set32(u),seek(4),set32(122),set32(108),set32(i),set32(-o>>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b<o&&v>0;){for(w=122+b*l,g=0;g<a;)v--,p=f[E++],m=p>>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E<f.length?(v=A,setTimeout(convert,t._dly)):r(h)}()},toBlob(e,t){this.toArrayBuffer(e,e=>{t(new Blob([e],{type:\"image/bmp\"}))})},_dly:9};var r={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},i={[r.CHROME]:16384,[r.FIREFOX]:11180,[r.DESKTOP_SAFARI]:16384,[r.IE]:8192,[r.IOS]:4096,[r.ETC]:8192};const o=\"undefined\"!=typeof window,a=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,s=o&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(o||a)&&(s&&s.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(o||a)&&(s&&s.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise(i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)})}function getDataUrlFromFile(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)})}function loadImage(e){return new Promise((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e})}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=r.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=r.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=r.IOS:/Safari/i.test(t)?e=r.DESKTOP_SAFARI:/Firefox/i.test(t)?e=r.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=r.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),o=i[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>o*o;){const e=(o+a)/2,t=(o+s)/2;e<t?(s=t,a=t*l):(s=e*l,a=e),f=a*s}return{width:a,height:s}}function getNewCanvasAndCtx(e,t){let r,i;try{if(r=new OffscreenCanvas(e,t),i=r.getContext(\"2d\"),null===i)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(e){r=document.createElement(\"canvas\"),i=r.getContext(\"2d\")}return r.width=e,r.height=t,[r,i]}function drawImageInCanvas(e,t){const{width:r,height:i}=approximateBelowMaximumCanvasSizeOfBrowser(e.width,e.height),[o,a]=getNewCanvasAndCtx(r,i);return t&&/jpe?g/.test(t)&&(a.fillStyle=\"white\",a.fillRect(0,0,o.width,o.height)),a.drawImage(e,0,0,o.width,o.height),o}function isIOS(){return void 0!==isIOS.cachedResult||(isIOS.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),isIOS.cachedResult}function drawFileInCanvas(e,t={}){return new Promise(function(i,o){let a,s;var $Try_2_Post=function(){try{return s=drawImageInCanvas(a,t.fileType||e.type),i([a,s])}catch(e){return o(e)}},$Try_2_Catch=function(t){try{0;var $Try_3_Catch=function(e){try{throw e}catch(e){return o(e)}};try{let t;return getDataUrlFromFile(e).then(function(e){try{return t=e,loadImage(t).then(function(e){try{return a=e,function(){try{return $Try_2_Post()}catch(e){return o(e)}}()}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){$Try_3_Catch(e)}}catch(e){return o(e)}};try{if(isIOS()||[r.DESKTOP_SAFARI,r.MOBILE_SAFARI].includes(getBrowserName()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(e).then(function(e){try{return a=e,$Try_2_Post()}catch(e){return $Try_2_Catch()}},$Try_2_Catch)}catch(e){$Try_2_Catch()}})}function canvasToFile(e,r,i,o,a=1){return new Promise(function(s,f){let l;if(\"image/png\"===r){let c,u,h;return c=e.getContext(\"2d\"),{data:u}=c.getImageData(0,0,e.width,e.height),h=UPNG.encode([u.buffer],e.width,e.height,4096*a),l=new Blob([h],{type:r}),l.name=i,l.lastModified=o,$If_4.call(this)}{if(\"image/bmp\"===r)return new Promise(r=>t.toBlob(e,r)).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:r,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(r,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}})}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise(function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(r){try{return i=r,drawFileInCanvas(i).then(function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then(function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then(function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t))})}function getExifOrientation(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;o<i;){if(r.getUint16(o+2,!1)<=8)return t(-1);const e=r.getUint16(o,!1);if(o+=2,65505==e){if(1165519206!=r.getUint32(o+=2,!1))return t(-1);const e=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,e);const i=r.getUint16(o,e);o+=2;for(let a=0;a<i;a++)if(274==r.getUint16(o+12*a,e))return t(r.getUint16(o+12*a+8,e))}else{if(65280!=(65280&e))break;o+=r.getUint16(o,!1)}}return t(-1)},i.onerror=e=>r(e),i.readAsArrayBuffer(e)})}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise(function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise(function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)}).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then(function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}},o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)})}const f=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";let l;function compressOnWebWorker(e,t){return new Promise((r,i)=>{l||(l=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(f));const o=new Worker(l);o.addEventListener(\"message\",function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)}),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",()=>{i(t.signal.reason),o.terminate()}),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})})}function imageCompression(e,t){return new Promise(function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,{onProgress:f}=o,o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(1||e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then(function(e){try{return a=e,u()}catch(e){return i(e)}},i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.bootcdn.net/ajax/libs/browser-image-compression/2.0.2/browser-image-compression.js\",compressOnWebWorker(e,o).then(function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}},$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}})}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\",imageCompression});return{compress:function(file,option){return imageCompression(file,option)}}}();UE.dialog=function(){return{loadingPlaceholder:function(me){var loadingId=\"loading_\"+(+new Date).toString(36);me.focus();me.execCommand(\"inserthtml\",'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">');return loadingId},removeLoadingPlaceholder:function(me,loadingId){var loader=me.document.getElementById(loadingId);if(loader){domUtils.remove(loader,false)}},tipError:function(me,title){me.fireEvent(\"showmessage\",{content:title,type:\"error\",timeout:4e3})}}}();var filterWord=UE.filterWord=function(){function isWordDocument(str){return/(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(str)}function transUnit(v){v=v.replace(/[\\d.]+\\w+/g,function(m){return utils.transUnitToPx(m)});return v}function filterPasteWord(str){return str.replace(/[\\t\\r\\n]+/g,\" \").replace(/<!--[\\s\\S]*?-->/gi,\"\").replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi,function(str){if(browser.opera){return\"\"}try{if(/Bitmap/i.test(str)){return\"\"}var width=str.match(/width:([ \\d.]*p[tx])/i)[1],height=str.match(/height:([ \\d.]*p[tx])/i)[1],src=str.match(/src=\\s*\"([^\"]*)\"/i)[1];return'<img width=\"'+transUnit(width)+'\" height=\"'+transUnit(height)+'\" src=\"'+src+'\" />'}catch(e){return\"\"}}).replace(/<\\/?div[^>]*>/g,\"\").replace(/v:\\w+=([\"']?)[^'\"]+\\1/g,\"\").replace(/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\"\").replace(/<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\"<p><strong>$1</strong></p>\").replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi,function(str,name,marks,val){return name==\"class\"&&val==\"MsoListParagraph\"?str:\"\"}).replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi,function(a,b,c){return c.replace(/[\\t\\r\\n ]+/g,\" \")}).replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi,function(str,tag,tmp,style){var n=[],s=style.replace(/^\\s+|\\s+$/,\"\").replace(/&#39;/g,\"'\").replace(/&quot;/gi,\"'\").replace(/[\\d.]+(cm|pt)/g,function(str){return utils.transUnitToPx(str)}).split(/;\\s*/g);for(var i=0,v;v=s[i];i++){var name,value,parts=v.split(\":\");if(parts.length==2){name=parts[0].toLowerCase();value=parts[1].toLowerCase();if(/^(background)\\w*/.test(name)&&value.replace(/(initial|\\s)/g,\"\").length==0||/^(margin)\\w*/.test(name)&&/^0\\w+$/.test(value)){continue}switch(name){case\"mso-padding-alt\":case\"mso-padding-top-alt\":case\"mso-padding-right-alt\":case\"mso-padding-bottom-alt\":case\"mso-padding-left-alt\":case\"mso-margin-alt\":case\"mso-margin-top-alt\":case\"mso-margin-right-alt\":case\"mso-margin-bottom-alt\":case\"mso-margin-left-alt\":case\"mso-height\":case\"mso-width\":case\"mso-vertical-align-alt\":if(!/<table/.test(tag))n[i]=name.replace(/^mso-|-alt$/g,\"\")+\":\"+transUnit(value);continue;case\"horiz-align\":n[i]=\"text-align:\"+value;continue;case\"vert-align\":n[i]=\"vertical-align:\"+value;continue;case\"font-color\":case\"mso-foreground\":n[i]=\"color:\"+value;continue;case\"mso-background\":case\"mso-highlight\":n[i]=\"background:\"+value;continue;case\"mso-default-height\":n[i]=\"min-height:\"+transUnit(value);continue;case\"mso-default-width\":n[i]=\"min-width:\"+transUnit(value);continue;case\"mso-padding-between-alt\":n[i]=\"border-collapse:separate;border-spacing:\"+transUnit(value);continue;case\"text-line-through\":if(value==\"single\"||value==\"double\"){n[i]=\"text-decoration:line-through\"}continue;case\"mso-zero-height\":if(value==\"yes\"){n[i]=\"display:none\"}continue;case\"margin\":if(!/[1-9]/.test(value)){continue}}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(name)||/text\\-indent|padding|margin/.test(name)&&/\\-[\\d.]+/.test(value)){continue}n[i]=name+\":\"+parts[1]}}return tag+(n.length?' style=\"'+n.join(\";\").replace(/;{2,}/g,\";\")+'\"':\"\")})}return function(html){return isWordDocument(html)?filterPasteWord(html):html}}();(function(){var uNode=UE.uNode=function(obj){this.type=obj.type;this.data=obj.data;this.tagName=obj.tagName;this.parentNode=obj.parentNode;this.attrs=obj.attrs||{};this.children=obj.children};var notTransAttrs={href:1,src:1,_src:1,_href:1,cdata_data:1};var notTransTagName={style:1,script:1};var indentChar=\"    \",breakChar=\"\\n\";function insertLine(arr,current,begin){arr.push(breakChar);return current+(begin?1:-1)}function insertIndent(arr,current){for(var i=0;i<current;i++){arr.push(indentChar)}}uNode.createElement=function(html){if(/[<>]/.test(html)){return UE.htmlparser(html).children[0]}else{return new uNode({type:\"element\",children:[],tagName:html})}};uNode.createText=function(data,noTrans){return new UE.uNode({type:\"text\",data:noTrans?data:utils.unhtml(data||\"\")})};function nodeToHtml(node,arr,formatter,current){switch(node.type){case\"root\":for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current,true);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}break;case\"text\":isText(node,arr);break;case\"element\":isElement(node,arr,formatter,current);break;case\"comment\":isComment(node,arr,formatter)}return arr}function isText(node,arr){if(node.parentNode.tagName==\"pre\"){arr.push(node.data)}else{arr.push(notTransTagName[node.parentNode.tagName]?utils.html(node.data):node.data.replace(/[ ]{2}/g,\" &nbsp;\"))}}function isElement(node,arr,formatter,current){var attrhtml=\"\";if(node.attrs){attrhtml=[];var attrs=node.attrs;for(var a in attrs){attrhtml.push(a+(attrs[a]!==undefined?'=\"'+(notTransAttrs[a]?utils.html(attrs[a]).replace(/[\"]/g,function(a){return\"&quot;\"}):utils.unhtml(attrs[a]))+'\"':\"\"))}attrhtml=attrhtml.join(\" \")}arr.push(\"<\"+node.tagName+(attrhtml?\" \"+attrhtml:\"\")+(dtd.$empty[node.tagName]?\"/\":\"\")+\">\");if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current,true);insertIndent(arr,current)}}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}}if(!dtd.$empty[node.tagName]){if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current);insertIndent(arr,current)}}arr.push(\"</\"+node.tagName+\">\")}}function isComment(node,arr){arr.push(\"\\x3c!--\"+node.data+\"--\\x3e\")}function getNodeById(root,id){var node;if(root.type==\"element\"&&root.getAttr(\"id\")==id){return root}if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i++];){if(node=getNodeById(ci,id)){return node}}}}function getNodesByTagName(node,tagName,arr){if(node.type==\"element\"&&node.tagName==tagName){arr.push(node)}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){getNodesByTagName(ci,tagName,arr)}}}function nodeTraversal(root,fn){if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i];){nodeTraversal(ci,fn);if(ci.parentNode){if(ci.children&&ci.children.length){fn(ci)}if(ci.parentNode)i++}}}else{fn(root)}}uNode.prototype={toHtml:function(formatter){var arr=[];nodeToHtml(this,arr,formatter,0);return arr.join(\"\")},innerHTML:function(htmlstr){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(utils.isString(htmlstr)){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];var tmpRoot=UE.htmlparser(htmlstr);for(var i=0,ci;ci=tmpRoot.children[i++];){this.children.push(ci);ci.parentNode=this}return this}else{var tmpRoot=new UE.uNode({type:\"root\",children:this.children});return tmpRoot.toHtml()}},innerText:function(textStr,noTrans){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(textStr){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];this.appendChild(uNode.createText(textStr,noTrans));return this}else{return this.toHtml().replace(/<[^>]+>/g,\"\")}},getData:function(){if(this.type==\"element\")return\"\";return this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i==0?null:parent.children[i-1]}}},nextSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i++];){if(ci===this){return parent.children[i]}}},replaceChild:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,1,target);source.parentNode=null;target.parentNode=this;return target}}}},appendChild:function(node){if(this.type==\"root\"||this.type==\"element\"&&!dtd.$empty[this.tagName]){if(!this.children){this.children=[]}if(node.parentNode){node.parentNode.removeChild(node)}for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);break}}this.children.push(node);node.parentNode=this;return node}},insertBefore:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,0,target);target.parentNode=this;return target}}}},insertAfter:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i+1,0,target);target.parentNode=this;return target}}}},removeChild:function(node,keepChildren){if(this.children){for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);ci.parentNode=null;if(keepChildren&&ci.children&&ci.children.length){for(var j=0,cj;cj=ci.children[j];j++){this.children.splice(i+j,0,cj);cj.parentNode=this}}return ci}}}},getAttr:function(attrName){return this.attrs&&this.attrs[attrName.toLowerCase()]},setAttr:function(attrName,attrVal){if(!attrName){delete this.attrs;return}if(!this.attrs){this.attrs={}}if(utils.isObject(attrName)){for(var a in attrName){if(!attrName[a]){delete this.attrs[a]}else{this.attrs[a.toLowerCase()]=attrName[a]}}}else{if(!attrVal){delete this.attrs[attrName]}else{this.attrs[attrName.toLowerCase()]=attrVal}}},getIndex:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i}}return-1},getNodeById:function(id){var node;if(this.children&&this.children.length){for(var i=0,ci;ci=this.children[i++];){if(node=getNodeById(ci,id)){return node}}}},getNodesByTagName:function(tagNames){tagNames=utils.trim(tagNames).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[],me=this;utils.each(tagNames,function(tagName){if(me.children&&me.children.length){for(var i=0,ci;ci=me.children[i++];){getNodesByTagName(ci,tagName,arr)}}});return arr},getStyle:function(name){var cssStyle=this.getAttr(\"style\");if(!cssStyle){return\"\"}var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+)\",\"i\");var match=cssStyle.match(reg);if(match&&match[0]){return match[2]}return\"\"},setStyle:function(name,val){function exec(name,val){var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+;?)\",\"gi\");cssStyle=cssStyle.replace(reg,\"$1\");if(val){cssStyle=name+\":\"+utils.unhtml(val)+\";\"+cssStyle}}var cssStyle=this.getAttr(\"style\");if(!cssStyle){cssStyle=\"\"}if(utils.isObject(name)){for(var a in name){exec(a,name[a])}}else{exec(name,val)}this.setAttr(\"style\",utils.trim(cssStyle))},traversal:function(fn){if(this.children&&this.children.length){nodeTraversal(this,fn)}return this}}})();var htmlparser=UE.htmlparser=function(htmlstr,ignoreBlank){var re_tag=/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,re_attr=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g;var allowEmptyTags={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};htmlstr=htmlstr.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(!ignoreBlank){htmlstr=htmlstr.replace(new RegExp(\"[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*\",\"g\"),function(a,b){if(b&&allowEmptyTags[b.toLowerCase()]){return a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g,\"\")}return a.replace(new RegExp(\"^[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+\"),\"\").replace(new RegExp(\"[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+$\"),\"\")})}var notTransAttrs={href:1,src:1};var uNode=UE.uNode,needParentNode={td:\"tr\",tr:[\"tbody\",\"thead\",\"tfoot\"],tbody:\"table\",th:\"tr\",thead:\"table\",tfoot:\"table\",caption:\"table\",li:[\"ul\",\"ol\"],dt:\"dl\",dd:\"dl\",option:\"select\"},needChild={ol:\"li\",ul:\"li\"};function text(parent,data){if(needChild[parent.tagName]){var tmpNode=uNode.createElement(needChild[parent.tagName]);parent.appendChild(tmpNode);tmpNode.appendChild(uNode.createText(data));parent=tmpNode}else{parent.appendChild(uNode.createText(data))}}function element(parent,tagName,htmlattr){var needParentTag;if(needParentTag=needParentNode[tagName]){var tmpParent=parent,hasParent;while(tmpParent.type!=\"root\"){if(utils.isArray(needParentTag)?utils.indexOf(needParentTag,tmpParent.tagName)!=-1:needParentTag==tmpParent.tagName){parent=tmpParent;hasParent=true;break}tmpParent=tmpParent.parentNode}if(!hasParent){parent=element(parent,utils.isArray(needParentTag)?needParentTag[0]:needParentTag)}}var elm=new uNode({parentNode:parent,type:\"element\",tagName:tagName.toLowerCase(),children:dtd.$empty[tagName]?null:[]});if(htmlattr){var attrs={},match;while(match=re_attr.exec(htmlattr)){attrs[match[1].toLowerCase()]=notTransAttrs[match[1].toLowerCase()]?match[2]||match[3]||match[4]:utils.unhtml(match[2]||match[3]||match[4])}elm.attrs=attrs}parent.children.push(elm);return dtd.$empty[tagName]?parent:elm}function comment(parent,data){parent.children.push(new uNode({type:\"comment\",data:data,parentNode:parent}))}var match,currentIndex=0,nextIndex=0;var root=new uNode({type:\"root\",children:[]});var currentParent=root;while(match=re_tag.exec(htmlstr)){currentIndex=match.index;try{if(currentIndex>nextIndex){text(currentParent,htmlstr.slice(nextIndex,currentIndex))}if(match[3]){if(dtd.$cdata[currentParent.tagName]){text(currentParent,match[0])}else{currentParent=element(currentParent,match[3].toLowerCase(),match[4])}}else if(match[1]){if(currentParent.type!=\"root\"){if(dtd.$cdata[currentParent.tagName]&&!dtd.$cdata[match[1]]){text(currentParent,match[0])}else{var tmpParent=currentParent;while(currentParent.type==\"element\"&&currentParent.tagName!=match[1].toLowerCase()){currentParent=currentParent.parentNode;if(currentParent.type==\"root\"){currentParent=tmpParent;throw\"break\"}}currentParent=currentParent.parentNode}}}else if(match[2]){comment(currentParent,match[2])}}catch(e){}nextIndex=re_tag.lastIndex}if(nextIndex<htmlstr.length){text(currentParent,htmlstr.slice(nextIndex))}return root};var filterNode=UE.filterNode=function(){function filterNode(node,rules){switch(node.type){case\"text\":break;case\"element\":var val;if(val=rules[node.tagName]){if(val===\"-\"){node.parentNode.removeChild(node)}else if(utils.isFunction(val)){var parentNode=node.parentNode,index=node.getIndex();val(node);if(node.parentNode){if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{var attrs=val[\"$\"];if(attrs&&node.attrs){var tmpAttrs={},tmpVal;for(var a in attrs){tmpVal=node.getAttr(a);if(a==\"style\"&&utils.isArray(attrs[a])){var tmpCssStyle=[];utils.each(attrs[a],function(v){var tmp;if(tmp=node.getStyle(v)){tmpCssStyle.push(v+\":\"+tmp)}});tmpVal=tmpCssStyle.join(\";\")}if(tmpVal){tmpAttrs[a]=tmpVal}}node.attrs=tmpAttrs}if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}}else{if(dtd.$cdata[node.tagName]){node.parentNode.removeChild(node)}else{var parentNode=node.parentNode,index=node.getIndex();node.parentNode.removeChild(node,true);for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}break;case\"comment\":node.parentNode.removeChild(node)}}return function(root,rules){if(utils.isEmptyObject(rules)){return root}var val;if(val=rules[\"-\"]){utils.each(val.split(\" \"),function(k){rules[k]=\"-\"})}for(var i=0,ci;ci=root.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}return root}}();UE.plugin=function(){var _plugins={};return{register:function(pluginName,fn,oldOptionName,afterDisabled){if(oldOptionName&&utils.isFunction(oldOptionName)){afterDisabled=oldOptionName;oldOptionName=null}_plugins[pluginName]={optionName:oldOptionName||pluginName,execFn:fn,afterDisabled:afterDisabled}},load:function(editor){utils.each(_plugins,function(plugin){var _export=plugin.execFn.call(editor);if(editor.options[plugin.optionName]!==false){if(_export){utils.each(_export,function(v,k){switch(k.toLowerCase()){case\"shortcutkey\":editor.addshortcutkey(v);break;case\"bindevents\":utils.each(v,function(fn,eventName){editor.addListener(eventName,fn)});break;case\"bindmultievents\":utils.each(utils.isArray(v)?v:[v],function(event){var types=utils.trim(event.type).split(/\\s+/);utils.each(types,function(eventName){editor.addListener(eventName,event.handler)})});break;case\"commands\":utils.each(v,function(execFn,execName){editor.commands[execName]=execFn});break;case\"outputrule\":editor.addOutputRule(v);break;case\"inputrule\":editor.addInputRule(v);break;case\"defaultoptions\":editor.setOpt(v)}})}}else if(plugin.afterDisabled){plugin.afterDisabled.call(editor)}});utils.each(UE.plugins,function(plugin){plugin.call(editor)})},run:function(pluginName,editor){var plugin=_plugins[pluginName];if(plugin){plugin.exeFn.call(editor)}}}}();var keymap=UE.keymap={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,CapsLock:20,Esc:27,Spacebar:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Del:46,NumLock:144,Cmd:91,\"=\":187,\"-\":189,b:66,i:73,z:90,y:89,v:86,x:88,s:83,n:78};var LocalStorage=UE.LocalStorage=function(){var storage=window.localStorage;return{saveLocalData:function(key,data){if(!storage){return false}storage.setItem(key,data);return true},getLocalData:function(key){if(!storage){return null}return storage.getItem(key)||null},removeItem:function(key){storage&&storage.removeItem(key)}}}();(function(){var ROOT_KEY=\"UEditorPlusPref\";UE.Editor.prototype.setPreferences=function(key,value){var obj={};if(utils.isString(key)){obj[key]=value}else{obj=key}var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){utils.extend(data,obj)}else{data=obj}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))};UE.Editor.prototype.getPreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){return key?data[key]:data}return null};UE.Editor.prototype.removePreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){data[key]=undefined;delete data[key]}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))}})();UE.plugins[\"defaultfilter\"]=function(){var me=this;me.setOpt({allowDivTransToP:true,disabledTableInTable:true,rgb2Hex:true});me.addInputRule(function(root){var allowDivTransToP=this.options.allowDivTransToP;var val;function tdParent(node){while(node&&node.type==\"element\"){if(node.tagName==\"td\"){return true}node=node.parentNode}return false}root.traversal(function(node){if(node.type==\"element\"){if(!dtd.$cdata[node.tagName]&&me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"style\":case\"script\":node.setAttr({cdata_tag:node.tagName,cdata_data:node.innerHTML()||\"\",_ue_custom_node_:\"true\"});node.tagName=\"div\";node.innerHTML(\"\");break;case\"a\":if(val=node.getAttr(\"href\")){node.setAttr(\"_href\",val)}break;case\"img\":if(val=node.getAttr(\"src\")){if(/^data:/.test(val)){node.parentNode.removeChild(node);break}}node.setAttr(\"_src\",node.getAttr(\"src\"));break;case\"span\":if(browser.webkit&&(val=node.getStyle(\"white-space\"))){if(/nowrap|normal/.test(val)){node.setStyle(\"white-space\",\"\");if(me.options.autoClearEmptyNode&&utils.isEmptyObject(node.attrs)){node.parentNode.removeChild(node,true)}}}val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}break;case\"p\":if(val=node.getAttr(\"align\")){node.setAttr(\"align\");node.setStyle(\"text-align\",val)}utils.each(node.children,function(n){if(n.type==\"element\"&&n.tagName==\"p\"){var next=n.nextSibling();node.parentNode.insertAfter(n,node);var last=n;while(next){var tmp=next.nextSibling();node.parentNode.insertAfter(next,last);last=next;next=tmp}return false}});if(!node.firstChild()){node.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}break;case\"div\":if(node.getAttr(\"cdata_tag\")){break}val=node.getAttr(\"class\");if(val&&/^line number\\d+/.test(val)){break}if(!allowDivTransToP){break}var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node);break;case\"dl\":node.tagName=\"ul\";break;case\"dt\":case\"dd\":node.tagName=\"li\";break;case\"li\":var className=node.getAttr(\"class\");if(!className||!/list\\-/.test(className)){node.setAttr()}var tmpNodes=node.getNodesByTagName(\"ol ul\");UE.utils.each(tmpNodes,function(n){node.parentNode.insertAfter(n,node)});break;case\"td\":case\"th\":case\"caption\":if(!node.children||!node.children.length){node.appendChild(browser.ie11below?UE.uNode.createText(\" \"):UE.uNode.createElement(\"br\"))}break;case\"table\":if(me.options.disabledTableInTable&&tdParent(node)){node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node);node.parentNode.removeChild(node)}}}})});me.addOutputRule(function(root){var val;root.traversal(function(node){if(node.type==\"element\"){if(me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"div\":if(val=node.getAttr(\"cdata_tag\")){node.tagName=val;node.appendChild(UE.uNode.createText(node.getAttr(\"cdata_data\")));node.setAttr({cdata_tag:\"\",cdata_data:\"\",_ue_custom_node_:\"\"})}break;case\"a\":if(val=node.getAttr(\"_href\")){node.setAttr({href:utils.html(val),_href:\"\"})}break;break;case\"span\":val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}if(me.getOpt(\"rgb2Hex\")){var cssStyle=node.getAttr(\"style\");if(cssStyle){node.setAttr(\"style\",cssStyle.replace(/rgba?\\(([\\d,\\s]+)\\)/g,function(a,value){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}return value.toUpperCase()}))}}break;case\"img\":if(val=node.getAttr(\"_src\")){node.setAttr({src:node.getAttr(\"_src\"),_src:\"\"})}}}})})};UE.commands[\"inserthtml\"]={execCommand:function(command,html,notNeedFilter){var me=this,range,div;if(!html){return}if(me.fireEvent(\"beforeinserthtml\",html)===true){return}range=me.selection.getRange();div=range.document.createElement(\"div\");div.style.display=\"inline\";if(!notNeedFilter){var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);html=root.toHtml()}div.innerHTML=utils.trim(html);if(!range.collapsed){var tmpNode=range.startContainer;if(domUtils.isFillChar(tmpNode)){range.setStartBefore(tmpNode)}tmpNode=range.endContainer;if(domUtils.isFillChar(tmpNode)){range.setEndAfter(tmpNode)}range.txtToElmBoundary();if(range.endContainer&&range.endContainer.nodeType==1){tmpNode=range.endContainer.childNodes[range.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){range.setEndAfter(tmpNode)}}if(range.startOffset==0){tmpNode=range.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=range.endContainer;if(range.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).collapse(true)}}}!range.collapsed&&range.deleteContents();if(range.startContainer.nodeType==1){var child=range.startContainer.childNodes[range.startOffset],pre;if(child&&domUtils.isBlockElm(child)&&(pre=child.previousSibling)&&domUtils.isBlockElm(pre)){range.setEnd(pre,pre.childNodes.length).collapse();while(child.firstChild){pre.appendChild(child.firstChild)}domUtils.remove(child)}}}var child,parent,pre,tmp,hadBreak=0,nextNode;if(range.inFillChar()){child=range.startContainer;if(domUtils.isFillChar(child)){range.setStartBefore(child).collapse(true);domUtils.remove(child)}else if(domUtils.isFillChar(child,true)){child.nodeValue=child.nodeValue.replace(fillCharReg,\"\");range.startOffset--;range.collapsed&&range.collapse(true)}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var next,last;while(child=div.firstChild){while(child&&(child.nodeType==3||!domUtils.isBlockElm(child)||child.tagName==\"HR\")){next=child.nextSibling;range.insertNode(child).collapse();last=child;child=next}if(child){if(/^(ol|ul)$/i.test(child.tagName)){while(child.firstChild){last=child.firstChild;domUtils.insertAfter(li,child.firstChild);li=li.nextSibling}domUtils.remove(child)}else{var tmpLi;next=child.nextSibling;tmpLi=me.document.createElement(\"li\");domUtils.insertAfter(li,tmpLi);tmpLi.appendChild(child);last=child;child=next;li=tmpLi}}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(domUtils.isEmptyBlock(li)){domUtils.remove(li)}if(last){range.setStartAfter(last).collapse(true).select(true)}}else{while(child=div.firstChild){if(hadBreak){var p=me.document.createElement(\"p\");while(child&&(child.nodeType==3||!dtd.$block[child.tagName])){nextNode=child.nextSibling;p.appendChild(child);child=nextNode}if(p.firstChild){child=p}}range.insertNode(child);nextNode=child.nextSibling;if(!hadBreak&&child.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(child)){parent=domUtils.findParent(child,function(node){return domUtils.isBlockElm(node)});if(parent&&parent.tagName.toLowerCase()!=\"body\"&&!(dtd[parent.tagName][child.nodeName]&&child.parentNode===parent)){if(!dtd[parent.tagName][child.nodeName]){pre=parent}else{tmp=child.parentNode;while(tmp!==parent){pre=tmp;tmp=tmp.parentNode}}domUtils.breakParent(child,pre||tmp);var pre=child.previousSibling;domUtils.trimWhiteTextNode(pre);if(!pre.childNodes.length){domUtils.remove(pre)}if(!browser.ie&&(next=child.nextSibling)&&domUtils.isBlockElm(next)&&next.lastChild&&!domUtils.isBr(next.lastChild)){next.appendChild(me.document.createElement(\"br\"))}hadBreak=1}}var next=child.nextSibling;if(!div.firstChild&&next&&domUtils.isBlockElm(next)){range.setStart(next,0).collapse(true);break}range.setEndAfter(child).collapse()}child=range.startContainer;if(nextNode&&domUtils.isBr(nextNode)){domUtils.remove(nextNode)}if(domUtils.isBlockElm(child)&&domUtils.isEmptyNode(child)){if(nextNode=child.nextSibling){domUtils.remove(child);if(nextNode.nodeType==1&&dtd.$block[nextNode.tagName]){range.setStart(nextNode,0).collapse(true).shrinkBoundary()}}else{try{child.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\"}catch(e){range.setStartBefore(child);domUtils.remove(child)}}}try{range.select(true)}catch(e){}}setTimeout(function(){range=me.selection.getRange();range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled?domUtils.getXY(me.iframe).y:0);me.fireEvent(\"afterinserthtml\",html)},200)}};UE.plugins[\"autotypeset\"]=function(){this.setOpt({autotypeset:{mergeEmptyline:true,removeClass:true,removeEmptyline:false,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:false,clearFontSize:false,clearFontFamily:false,removeEmptyNode:false,removeTagNames:utils.extend({div:1},dtd.$removeEmpty),indent:false,indentValue:\"2em\",bdc2sb:false,tobdc:false}});var me=this,opt=me.options.autotypeset,remainClass={selectTdClass:1,pagebreak:1,anchorclass:1},remainTag={li:1},tags={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1},highlightCont;if(!opt){return}readLocalOpts();function isLine(node,notEmpty){if(!node||node.nodeType==3)return 0;if(domUtils.isBr(node))return 1;if(node&&node.parentNode&&tags[node.tagName.toLowerCase()]){if(highlightCont&&highlightCont.contains(node)||node.getAttribute(\"pagebreak\")){return 0}return notEmpty?!domUtils.isEmptyBlock(node):domUtils.isEmptyBlock(node,new RegExp(\"[\\\\s\"+domUtils.fillChar+\"]\",\"g\"))}}function removeNotAttributeSpan(node){if(!node.style.cssText){domUtils.removeAttributes(node,[\"style\"]);if(node.tagName.toLowerCase()==\"span\"&&domUtils.hasNoAttributes(node)){domUtils.remove(node,true)}}}function autotype(type,html){var me=this,cont;if(html){if(!opt.pasteFilter){return}cont=me.document.createElement(\"div\");cont.innerHTML=html.html}else{cont=me.document.body}var nodes=domUtils.getElementsByTagName(cont,\"*\");for(var i=0,ci;ci=nodes[i++];){if(me.fireEvent(\"excludeNodeinautotype\",ci)===true){continue}if(opt.clearFontSize&&ci.style.fontSize){domUtils.removeStyle(ci,\"font-size\");removeNotAttributeSpan(ci)}if(opt.clearFontFamily&&ci.style.fontFamily){domUtils.removeStyle(ci,\"font-family\");removeNotAttributeSpan(ci)}if(isLine(ci)){if(opt.mergeEmptyline){var next=ci.nextSibling,tmpNode,isBr=domUtils.isBr(ci);while(isLine(next)){tmpNode=next;next=tmpNode.nextSibling;if(isBr&&(!next||next&&!domUtils.isBr(next))){break}domUtils.remove(tmpNode)}}if(opt.removeEmptyline&&domUtils.inDoc(ci,cont)&&!remainTag[ci.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(ci)){next=ci.nextSibling;if(next&&!domUtils.isBr(next)){continue}}domUtils.remove(ci);continue}}if(isLine(ci,true)&&ci.tagName!=\"SPAN\"){if(opt.indent){ci.style.textIndent=opt.indentValue}if(opt.textAlign){ci.style.textAlign=opt.textAlign}}if(opt.removeClass&&ci.className&&!remainClass[ci.className.toLowerCase()]){if(highlightCont&&highlightCont.contains(ci)){continue}domUtils.removeAttributes(ci,[\"class\"])}if(opt.imageBlockLine&&ci.tagName.toLowerCase()==\"img\"&&!ci.getAttribute(\"emotion\")){if(html){var img=ci;switch(opt.imageBlockLine){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}}domUtils.setStyle(img,\"float\",opt.imageBlockLine);break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"none\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}var pNode=me.document.createElement(\"p\");domUtils.setAttributes(pNode,{style:\"text-align:center\"});tmpNode.parentNode.insertBefore(pNode,tmpNode);pNode.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\")}}}else{var range=me.selection.getRange();range.selectNode(ci).select();me.execCommand(\"imagefloat\",opt.imageBlockLine)}}if(opt.removeEmptyNode){if(opt.removeTagNames[ci.tagName.toLowerCase()]&&domUtils.hasNoAttributes(ci)&&domUtils.isEmptyBlock(ci)){domUtils.remove(ci)}}}if(opt.tobdc){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=ToDBC(node.data)}});cont.innerHTML=root.toHtml()}if(opt.bdc2sb){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=DBC2SB(node.data)}});cont.innerHTML=root.toHtml()}if(html){html.html=cont.innerHTML}}if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}function DBC2SB(str){var result=\"\";for(var i=0;i<str.length;i++){var code=str.charCodeAt(i);if(code>=65281&&code<=65373){result+=String.fromCharCode(str.charCodeAt(i)-65248)}else if(code==12288){result+=String.fromCharCode(str.charCodeAt(i)-12288+32)}else{result+=str.charAt(i)}}return result}function ToDBC(txtstring){txtstring=utils.html(txtstring);var tmp=\"\";var mark=\"\";for(var i=0;i<txtstring.length;i++){if(txtstring.charCodeAt(i)==32){tmp=tmp+String.fromCharCode(12288)}else if(txtstring.charCodeAt(i)<127){tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248)}else{tmp+=txtstring.charAt(i)}}return tmp}function readLocalOpts(){var cookieOpt=me.getPreferences(\"autotypeset\");utils.extend(me.options.autotypeset,cookieOpt)}me.commands[\"autotypeset\"]={execCommand:function(){me.removeListener(\"beforepaste\",autotype);if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}autotype.call(me)}}};UE.plugin.register(\"autosubmit\",function(){return{shortcutkey:{autosubmit:\"ctrl+13\"},commands:{autosubmit:{execCommand:function(){var me=this,form=domUtils.findParentByTagName(me.iframe,\"form\",false);if(form){if(me.fireEvent(\"beforesubmit\")===false){return}me.sync();form.submit()}}}}}});UE.plugin.register(\"background\",function(){var me=this,cssRuleId=\"editor_background\",isSetColored,reg=new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\",\"i\");function stringToObj(str){var obj={},styles=str.split(\";\");utils.each(styles,function(v){var index=v.indexOf(\":\"),key=utils.trim(v.substr(0,index)).toLowerCase();key&&(obj[key]=utils.trim(v.substr(index+1)||\"\"))});return obj}function setBackground(obj){if(obj){var styles=[];for(var name in obj){if(obj.hasOwnProperty(name)){styles.push(name+\":\"+obj[name]+\"; \")}}utils.cssRule(cssRuleId,styles.length?\"body{\"+styles.join(\"\")+\"}\":\"\",me.document)}else{utils.cssRule(cssRuleId,\"\",me.document)}}var orgFn=me.hasContents;me.hasContents=function(){if(me.queryCommandValue(\"background\")){return true}return orgFn.apply(me,arguments)};return{bindEvents:{getAllHtml:function(type,headHtml){var body=this.body,su=domUtils.getComputedStyle(body,\"background-image\"),url=\"\";if(su.indexOf(me.options.imagePath)>0){url=su.substring(su.indexOf(me.options.imagePath),su.length-1).replace(/\"|\\(|\\)/gi,\"\")}else{url=su!=\"none\"?su.replace(/url\\(\"?|\"?\\)/gi,\"\"):\"\"}var html='<style type=\"text/css\">body{';var bgObj={\"background-color\":domUtils.getComputedStyle(body,\"background-color\")||\"#ffffff\",\"background-image\":url?\"url(\"+url+\")\":\"\",\"background-repeat\":domUtils.getComputedStyle(body,\"background-repeat\")||\"\",\"background-position\":browser.ie?domUtils.getComputedStyle(body,\"background-position-x\")+\" \"+domUtils.getComputedStyle(body,\"background-position-y\"):domUtils.getComputedStyle(body,\"background-position\"),height:domUtils.getComputedStyle(body,\"height\")};for(var name in bgObj){if(bgObj.hasOwnProperty(name)){html+=name+\":\"+bgObj[name]+\"; \"}}html+=\"}</style> \";headHtml.push(html)},aftersetcontent:function(){if(isSetColored==false)setBackground()}},inputRule:function(root){isSetColored=false;utils.each(root.getNodesByTagName(\"p\"),function(p){var styles=p.getAttr(\"data-background\");if(styles){isSetColored=true;setBackground(stringToObj(styles));p.parentNode.removeChild(p)}})},outputRule:function(root){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);if(styles){root.appendChild(UE.uNode.createElement('<p style=\"display:none;\" data-background=\"'+utils.trim(styles[1].replace(/\"/g,\"\").replace(/[\\s]+/g,\" \"))+'\"><br/></p>'))}},commands:{background:{execCommand:function(cmd,obj){setBackground(obj)},queryCommandValue:function(){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);return styles?stringToObj(styles[1]):null},notNeedUndo:true}}}});UE.commands[\"imagefloat\"]={execCommand:function(cmd,align){var me=this,range=me.selection.getRange();if(!range.collapsed){var img=range.getClosedNode();if(img&&img.tagName===\"IMG\"){switch(align){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}range.selectNode(img).select()}domUtils.setStyle(img,\"float\",align==\"none\"?\"\":align);if(align==\"none\"){domUtils.removeAttributes(img,\"align\")}break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"\");domUtils.removeAttributes(img,\"align\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}range.setStartBefore(tmpNode).setCursor(false);pN=me.document.createElement(\"div\");pN.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\");me.execCommand(\"insertHtml\",'<p id=\"_img_parent_tmp\" style=\"text-align:center\">'+pN.innerHTML+\"</p>\");tmpNode=me.document.getElementById(\"_img_parent_tmp\");tmpNode.removeAttribute(\"id\");tmpNode=tmpNode.firstChild;range.selectNode(tmpNode).select();next=tmpNode.parentNode.nextSibling;if(next&&domUtils.isEmptyNode(next)){domUtils.remove(next)}}break}}}},queryCommandValue:function(){var range=this.selection.getRange(),startNode,floatStyle;if(range.collapsed){return\"none\"}startNode=range.getClosedNode();if(startNode&&startNode.nodeType==1&&startNode.tagName==\"IMG\"){floatStyle=domUtils.getComputedStyle(startNode,\"float\")||startNode.getAttribute(\"align\");if(floatStyle==\"none\"){floatStyle=domUtils.getComputedStyle(startNode.parentNode,\"text-align\")==\"center\"?\"center\":floatStyle}return{left:1,right:1,center:1}[floatStyle]?floatStyle:\"none\"}return\"none\"},queryCommandState:function(){var range=this.selection.getRange(),startNode;if(range.collapsed)return-1;startNode=range.getClosedNode();if(startNode&&startNode.nodeType===1&&startNode.tagName===\"IMG\"){return 0}return-1}};UE.commands[\"insertimage\"]={execCommand:function(cmd,opt){opt=utils.isArray(opt)?opt:[opt];if(!opt.length){return}var me=this,range=me.selection.getRange(),img=range.getClosedNode();if(me.fireEvent(\"beforeinsertimage\",opt)===true){return}if(img&&/img/i.test(img.tagName)&&(img.className!=\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1)&&!img.getAttribute(\"data-word-image\")){var first=opt.shift();var floatStyle=first[\"floatStyle\"];delete first[\"floatStyle\"];domUtils.setAttributes(img,first);me.execCommand(\"imagefloat\",floatStyle);if(opt.length>0){range.setStartAfter(img).setCursor(false,true);me.execCommand(\"insertimage\",opt)}}else{var html=[],str=\"\",ci;ci=opt[0];if(opt.length==1){str='<img src=\"'+ci.src+'\" '+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+(ci[\"floatStyle\"]==\"left\"||ci[\"floatStyle\"]==\"right\"?' style=\"float:'+ci[\"floatStyle\"]+';\"':\"\")+(ci.title&&ci.title!=\"\"?' title=\"'+ci.title+'\"':\"\")+(ci.border&&ci.border!=\"0\"?' border=\"'+ci.border+'\"':\"\")+(ci.alt&&ci.alt!=\"\"?' alt=\"'+ci.alt+'\"':\"\")+(ci.hspace&&ci.hspace!=\"0\"?' hspace = \"'+ci.hspace+'\"':\"\")+(ci.vspace&&ci.vspace!=\"0\"?' vspace = \"'+ci.vspace+'\"':\"\")+\"/>\";if(ci[\"floatStyle\"]==\"center\"){str='<p style=\"text-align: center\">'+str+\"</p>\"}html.push(str)}else{for(var i=0;ci=opt[i++];){str=\"<p \"+(ci[\"floatStyle\"]==\"center\"?'style=\"text-align: center\" ':\"\")+'><img src=\"'+ci.src+'\" '+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+' style=\"'+(ci[\"floatStyle\"]&&ci[\"floatStyle\"]!=\"center\"?\"float:\"+ci[\"floatStyle\"]+\";\":\"\")+(ci.border||\"\")+'\" '+(ci.title?' title=\"'+ci.title+'\"':\"\")+\" /></p>\";html.push(str)}}me.execCommand(\"insertHtml\",html.join(\"\"))}me.fireEvent(\"afterinsertimage\",opt)}};UE.plugins[\"justify\"]=function(){var me=this,block=domUtils.isBlockElm,defaultValue={left:1,right:1,center:1,justify:1},doJustify=function(range,style){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)};range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){domUtils.setStyles(common,utils.isString(style)?{\"text-align\":style}:style);current=common}else{var p=range.document.createElement(\"p\");domUtils.setStyles(p,utils.isString(style)?{\"text-align\":style}:style);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"justify\"]={execCommand:function(cmdName,align){var range=this.selection.getRange(),txt;if(range.collapsed){txt=this.document.createTextNode(\"p\");range.insertNode(txt)}doJustify(range,align);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var startNode=this.selection.getStart(),value=domUtils.getComputedStyle(startNode,\"text-align\");return defaultValue[value]?value:\"left\"},queryCommandState:function(){var start=this.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);return cell?-1:0}}};UE.plugins[\"font\"]=function(){var me=this,fonts={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\",underline:\"text-decoration\",strikethrough:\"text-decoration\",fontborder:\"border\"},lang=me.getLang(),needCmd={underline:1,strikethrough:1,fontborder:1},needSetChild={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\"};me.setOpt({fontfamily:[{name:\"default\",val:\"default\"},{name:\"songti\",val:\"宋体,SimSun\"},{name:\"yahei\",val:\"微软雅黑,Microsoft YaHei\"},{name:\"kaiti\",val:\"楷体,楷体_GB2312,SimKai\"},{name:\"heiti\",val:\"黑体,SimHei\"},{name:\"lishu\",val:\"隶书,SimLi\"},{name:\"arial\",val:\"arial,helvetica,sans-serif\"},{name:\"timesNewRoman\",val:\"times new roman\"}],fontsize:[10,11,12,14,16,18,20,24,36]});function mergeWithParent(node){var parent;while(parent=node.parentNode){if(parent.tagName==\"SPAN\"&&domUtils.getChildCount(parent,function(child){return!domUtils.isBookmarkNode(child)&&!domUtils.isBr(child)})==1){parent.style.cssText+=node.style.cssText;domUtils.remove(node,true);node=parent}else{break}}}function mergeChild(rng,cmdName,value){if(needSetChild[cmdName]){rng.adjustmentBoundary();if(!rng.collapsed&&rng.startContainer.nodeType==1){var start=rng.startContainer.childNodes[rng.startOffset];if(start&&domUtils.isTagNode(start,\"span\")){var bk=rng.createBookmark();utils.each(domUtils.getElementsByTagName(start,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(cmdName==\"backcolor\"&&domUtils.getComputedStyle(span,\"background-color\").toLowerCase()===value){return}domUtils.removeStyle(span,needSetChild[cmdName]);if(span.style.cssText.replace(/^\\s+$/,\"\").length==0){domUtils.remove(span,true)}});rng.moveToBookmark(bk)}}}}function mergesibling(rng,cmdName,value){var collapsed=rng.collapsed,bk=rng.createBookmark(),common;if(collapsed){common=bk.start.parentNode;while(dtd.$inline[common.tagName]){common=common.parentNode}}else{common=domUtils.getCommonAncestor(bk.start,bk.end)}utils.each(domUtils.getElementsByTagName(common,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(/\\s*border\\s*:\\s*none;?\\s*/i.test(span.style.cssText)){if(/^\\s*border\\s*:\\s*none;?\\s*$/.test(span.style.cssText)){domUtils.remove(span,true)}else{domUtils.removeStyle(span,\"border\")}return}if(/border/i.test(span.style.cssText)&&span.parentNode.tagName==\"SPAN\"&&/border/i.test(span.parentNode.style.cssText)){span.style.cssText=span.style.cssText.replace(/border[^:]*:[^;]+;?/gi,\"\")}if(!(cmdName==\"fontborder\"&&value==\"none\")){var next=span.nextSibling;while(next&&next.nodeType==1&&next.tagName==\"SPAN\"){if(domUtils.isBookmarkNode(next)&&cmdName==\"fontborder\"){span.appendChild(next);next=span.nextSibling;continue}if(next.style.cssText==span.style.cssText){domUtils.moveChild(next,span);domUtils.remove(next)}if(span.nextSibling===next)break;next=span.nextSibling}}mergeWithParent(span);if(browser.ie&&browser.version>8){var parent=domUtils.findParent(span,function(n){return n.tagName==\"SPAN\"&&/background-color/.test(n.style.cssText)});if(parent&&!/background-color/.test(span.style.cssText)){span.style.backgroundColor=parent.style.backgroundColor}}});rng.moveToBookmark(bk);mergeChild(rng,cmdName,value)}me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"u s del font strike\"),function(node){if(node.tagName==\"font\"){var cssStyle=[];for(var p in node.attrs){switch(p){case\"size\":cssStyle.push(\"font-size:\"+({1:\"10\",2:\"12\",3:\"16\",4:\"18\",5:\"24\",6:\"32\",7:\"48\"}[node.attrs[p]]||node.attrs[p])+\"px\");break;case\"color\":cssStyle.push(\"color:\"+node.attrs[p]);break;case\"face\":cssStyle.push(\"font-family:\"+node.attrs[p]);break;case\"style\":cssStyle.push(node.attrs[p])}}node.attrs={style:cssStyle.join(\";\")}}else{var val=node.tagName==\"u\"?\"underline\":\"line-through\";node.attrs={style:(node.getAttr(\"style\")||\"\")+\"text-decoration:\"+val+\";\"}}node.tagName=\"span\"})});for(var p in fonts){(function(cmd,style){UE.commands[cmd]={execCommand:function(cmdName,value){value=value||(this.queryCommandState(cmdName)?\"none\":cmdName===\"underline\"?\"underline\":cmdName===\"fontborder\"?\"1px solid #000\":\"line-through\");var me=this,range=this.selection.getRange(),text;if(value===\"default\"){if(range.collapsed){text=me.document.createTextNode(\"font\");range.insertNode(text).select()}me.execCommand(\"removeFormat\",\"span,a\",style);if(text){range.setStartBefore(text).collapse(true);domUtils.remove(text)}mergesibling(range,cmdName,value);range.select()}else{if(!range.collapsed){if(needCmd[cmd]&&me.queryCommandValue(cmd)){me.execCommand(\"removeFormat\",\"span,a\",style)}range=me.selection.getRange();range.applyInlineStyle(\"span\",{style:style+\":\"+value});mergesibling(range,cmdName,value);range.select()}else{var span=domUtils.findParentByTagName(range.startContainer,\"span\",true);text=me.document.createTextNode(\"font\");if(span&&!span.children.length&&!span[browser.ie?\"innerText\":\"textContent\"].replace(fillCharReg,\"\").length){range.insertNode(text);if(needCmd[cmd]){range.selectNode(text).select();me.execCommand(\"removeFormat\",\"span,a\",style,null);span=domUtils.findParentByTagName(text,\"span\",true);range.setStartBefore(text)}span&&(span.style.cssText+=\";\"+style+\":\"+value);range.collapse(true).select()}else{range.insertNode(text);range.selectNode(text).select();span=range.document.createElement(\"span\");if(needCmd[cmd]){if(domUtils.findParentByTagName(text,\"a\",true)){range.setStartBefore(text).setCursor();domUtils.remove(text);return}me.execCommand(\"removeFormat\",\"span,a\",style)}span.style.cssText=style+\":\"+value;text.parentNode.insertBefore(span,text);if(!browser.ie||browser.ie&&browser.version===9){var spanParent=span.parentNode;while(!domUtils.isBlockElm(spanParent)){if(spanParent.tagName===\"SPAN\"){span.style.cssText=spanParent.style.cssText+\";\"+span.style.cssText}spanParent=spanParent.parentNode}}if(opera){setTimeout(function(){range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()})}else{range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()}}domUtils.remove(text)}}return true},queryCommandValue:function(cmdName){var startNode=this.selection.getStart();var styleVal;if(cmdName===\"underline\"||cmdName===\"strikethrough\"){var tmpNode=startNode,value;while(tmpNode&&!domUtils.isBlockElm(tmpNode)&&!domUtils.isBody(tmpNode)){if(tmpNode.nodeType===1){value=domUtils.getComputedStyle(tmpNode,style);if(value!==\"none\"){return value}}tmpNode=tmpNode.parentNode}return\"none\"}else if(cmdName===\"fontborder\"){var tmp=startNode,val;while(tmp&&dtd.$inline[tmp.tagName]){if(val=domUtils.getComputedStyle(tmp,\"border\")){if(/1px/.test(val)&&/solid/.test(val)){return val}}tmp=tmp.parentNode}return\"\"}else if(cmdName===\"FontSize\"){styleVal=domUtils.getComputedStyle(startNode,style);tmp=/^([\\d\\.]+)(\\w+)$/.exec(styleVal);if(tmp){return Math.floor(tmp[1])+tmp[2]}return styleVal}else if(cmdName===\"FontFamily\"){styleVal=domUtils.getComputedStyle(startNode,style);styleVal=styleVal.replace(/['\"]/g,\"\");styleVal=styleVal.replace(/\\s*,\\s*/g,\",\");var fontFamily=lang.fontfamily.default;var fontList=me.options[\"fontfamily\"]||[];for(var i=0;i<fontList.length;i++){var v=fontList[i];if(v.val===styleVal){fontFamily=styleVal;break}}return fontFamily}value=domUtils.getComputedStyle(startNode,style);return value},queryCommandState:function(cmdName){if(!needCmd[cmdName])return 0;var val=this.queryCommandValue(cmdName);if(cmdName===\"fontborder\"){return/1px/.test(val)&&/solid/.test(val)}else{return cmdName===\"underline\"?/underline/.test(val):/line\\-through/.test(val)}}}})(p,fonts[p])}};UE.plugins[\"link\"]=function(){function optimize(range){var start=range.startContainer,end=range.endContainer;if(start=domUtils.findParentByTagName(start,\"a\",true)){range.setStartBefore(start)}if(end=domUtils.findParentByTagName(end,\"a\",true)){range.setEndAfter(end)}}UE.commands[\"unlink\"]={execCommand:function(){var range=this.selection.getRange(),bookmark;if(range.collapsed&&!domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}bookmark=range.createBookmark();optimize(range);range.removeInlineStyle(\"a\").moveToBookmark(bookmark).select()},queryCommandState:function(){return!this.highlight&&this.queryCommandValue(\"link\")?0:-1}};function doLink(range,opt,me){var rngClone=range.cloneRange(),link=me.queryCommandValue(\"link\");optimize(range=range.adjustmentBoundary());var start=range.startContainer;if(start.nodeType==1&&link){start=start.childNodes[range.startOffset];if(start&&start.nodeType==1&&start.tagName==\"A\"&&/^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(start[browser.ie?\"innerText\":\"textContent\"])){start[browser.ie?\"innerText\":\"textContent\"]=utils.html(opt.textValue||opt.href)}}if(!rngClone.collapsed||link){range.removeInlineStyle(\"a\");rngClone=range.cloneRange()}if(rngClone.collapsed){var a=range.document.createElement(\"a\"),text=\"\";if(opt.textValue){text=utils.html(opt.textValue);delete opt.textValue}else{text=utils.html(opt.href)}domUtils.setAttributes(a,opt);start=domUtils.findParentByTagName(rngClone.startContainer,\"a\",true);if(start&&domUtils.isInNodeEndBoundary(rngClone,start)){range.setStartAfter(start).collapse(true)}a[browser.ie?\"innerText\":\"textContent\"]=text;range.insertNode(a).selectNode(a)}else{range.applyInlineStyle(\"a\",opt)}}UE.commands[\"link\"]={execCommand:function(cmdName,opt){var range;opt._href&&(opt._href=utils.unhtml(opt._href,/[<\">]/g));opt.href&&(opt.href=utils.unhtml(opt.href,/[<\">]/g));opt.textValue&&(opt.textValue=utils.unhtml(opt.textValue,/[<\">]/g));doLink(range=this.selection.getRange(),opt,this);range.collapse().select(true)},queryCommandValue:function(){var range=this.selection.getRange(),node;if(range.collapsed){node=range.startContainer;node=node.nodeType==1?node:node.parentNode;if(node&&(node=domUtils.findParentByTagName(node,\"a\",true))&&!domUtils.isInNodeEndBoundary(range,node)){return node}}else{range.shrinkBoundary();var start=range.startContainer.nodeType==3||!range.startContainer.childNodes[range.startOffset]?range.startContainer:range.startContainer.childNodes[range.startOffset],end=range.endContainer.nodeType==3||range.endOffset==0?range.endContainer:range.endContainer.childNodes[range.endOffset-1],common=range.getCommonAncestor();node=domUtils.findParentByTagName(common,\"a\",true);if(!node&&common.nodeType==1){var as=common.getElementsByTagName(\"a\"),ps,pe;for(var i=0,ci;ci=as[i++];){ps=domUtils.getPosition(ci,start),pe=domUtils.getPosition(ci,end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS)){node=ci;break}}}return node}},queryCommandState:function(){var img=this.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1);return flag?-1:0}}};UE.plugins[\"insertframe\"]=function(){var me=this;function deleteIframe(){me._iframe&&delete me._iframe}me.addListener(\"selectionchange\",function(){deleteIframe()})};UE.commands[\"scrawl\"]={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}};UE.plugins[\"removeformat\"]=function(){var me=this;me.setOpt({removeFormatTags:\"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",removeFormatAttributes:\"class,style,lang,width,height,align,hspace,valign\"});me.commands[\"removeformat\"]={execCommand:function(cmdName,tags,style,attrs,notIncludeA){var tagReg=new RegExp(\"^(?:\"+(tags||this.options.removeFormatTags).replace(/,/g,\"|\")+\")$\",\"i\"),removeFormatAttributes=style?[]:(attrs||this.options.removeFormatAttributes).split(\",\"),range=new dom.Range(this.document),bookmark,node,parent,filter=function(node){return node.nodeType==1};function isRedundantSpan(node){if(node.nodeType==3||node.tagName.toLowerCase()!=\"span\"){return 0}if(browser.ie){var attrs=node.attributes;if(attrs.length){for(var i=0,l=attrs.length;i<l;i++){if(attrs[i].specified){return 0}}return 1}}return!node.attributes.length}function doRemove(range){var bookmark1=range.createBookmark();if(range.collapsed){range.enlarge(true)}if(!notIncludeA){var aNode=domUtils.findParentByTagName(range.startContainer,\"a\",true);if(aNode){range.setStartBefore(aNode)}aNode=domUtils.findParentByTagName(range.endContainer,\"a\",true);if(aNode){range.setEndAfter(aNode)}}bookmark=range.createBookmark();node=bookmark.start;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}if(bookmark.end){node=bookmark.end;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}var current=domUtils.getNextDomNode(bookmark.start,false,filter),next;while(current){if(current==bookmark.end){break}next=domUtils.getNextDomNode(current,true,filter);if(!dtd.$empty[current.tagName.toLowerCase()]&&!domUtils.isBookmarkNode(current)){if(tagReg.test(current.tagName)){if(style){domUtils.removeStyle(current,style);if(isRedundantSpan(current)&&style!=\"text-decoration\"){domUtils.remove(current,true)}}else{domUtils.remove(current,true)}}else{if(true){domUtils.removeAttributes(current,removeFormatAttributes);if(isRedundantSpan(current)){domUtils.remove(current,true)}}else{}}}current=next}}var pN=bookmark.start.parentNode;if(domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}pN=bookmark.end.parentNode;if(bookmark.end&&domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}range.moveToBookmark(bookmark).moveToBookmark(bookmark1);var node=range.startContainer,tmp,collapsed=range.collapsed;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setStartBefore(node);if(range.startContainer===range.endContainer){range.endOffset--}domUtils.remove(node);node=tmp}if(!collapsed){node=range.endContainer;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setEndBefore(node);domUtils.remove(node);node=tmp}}}range=this.selection.getRange();doRemove(range);range.select()}}};UE.plugins[\"blockquote\"]=function(){var me=this;function getObj(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),\"blockquote\")}me.commands[\"blockquote\"]={execCommand:function(cmdName,attrs){var range=this.selection.getRange(),obj=getObj(this),blockquote=dtd.blockquote,bookmark=range.createBookmark();if(obj){var start=range.startContainer,startBlock=domUtils.isBlockElm(start)?start:domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}),end=range.endContainer,endBlock=domUtils.isBlockElm(end)?end:domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)});startBlock=domUtils.findParentByTagName(startBlock,\"li\",true)||startBlock;endBlock=domUtils.findParentByTagName(endBlock,\"li\",true)||endBlock;if(startBlock.tagName==\"LI\"||startBlock.tagName==\"TD\"||startBlock===obj||domUtils.isBody(startBlock)){domUtils.remove(obj,true)}else{domUtils.breakParent(startBlock,obj)}if(startBlock!==endBlock){obj=domUtils.findParentByTagName(endBlock,\"blockquote\");if(obj){if(endBlock.tagName==\"LI\"||endBlock.tagName==\"TD\"||domUtils.isBody(endBlock)){obj.parentNode&&domUtils.remove(obj,true)}else{domUtils.breakParent(endBlock,obj)}}}var blockquotes=domUtils.getElementsByTagName(this.document,\"blockquote\");for(var i=0,bi;bi=blockquotes[i++];){if(!bi.childNodes.length){domUtils.remove(bi)}else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING&&domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){domUtils.remove(bi,true)}}}else{var tmpRange=range.cloneRange(),node=tmpRange.startContainer.nodeType==1?tmpRange.startContainer:tmpRange.startContainer.parentNode,preNode=node,doEnd=1;while(1){if(domUtils.isBody(node)){if(preNode!==node){if(range.collapsed){tmpRange.selectNode(preNode);doEnd=0}else{tmpRange.setStartBefore(preNode)}}else{tmpRange.setStart(node,0)}break}if(!blockquote[node.tagName]){if(range.collapsed){tmpRange.selectNode(preNode)}else{tmpRange.setStartBefore(preNode)}break}preNode=node;node=node.parentNode}if(doEnd){preNode=node=node=tmpRange.endContainer.nodeType==1?tmpRange.endContainer:tmpRange.endContainer.parentNode;while(1){if(domUtils.isBody(node)){if(preNode!==node){tmpRange.setEndAfter(preNode)}else{tmpRange.setEnd(node,node.childNodes.length)}break}if(!blockquote[node.tagName]){tmpRange.setEndAfter(preNode);break}preNode=node;node=node.parentNode}}node=range.document.createElement(\"blockquote\");domUtils.setAttributes(node,attrs);node.appendChild(tmpRange.extractContents());tmpRange.insertNode(node);var childs=domUtils.getElementsByTagName(node,\"blockquote\");for(var i=0,ci;ci=childs[i++];){if(ci.parentNode){domUtils.remove(ci,true)}}}range.moveToBookmark(bookmark).select()},queryCommandState:function(){return getObj(this)?1:0}}};UE.commands[\"touppercase\"]=UE.commands[\"tolowercase\"]={execCommand:function(cmd){var me=this;var rng=me.selection.getRange();if(rng.collapsed){return rng}var bk=rng.createBookmark(),bkEnd=bk.end,filterFn=function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)},curNode=domUtils.getNextDomNode(bk.start,false,filterFn);while(curNode&&domUtils.getPosition(curNode,bkEnd)&domUtils.POSITION_PRECEDING){if(curNode.nodeType==3){curNode.nodeValue=curNode.nodeValue[cmd==\"touppercase\"?\"toUpperCase\":\"toLowerCase\"]()}curNode=domUtils.getNextDomNode(curNode,true,filterFn);if(curNode===bkEnd){break}}rng.moveToBookmark(bk).select()}};UE.commands[\"indent\"]={execCommand:function(){var me=this,value=me.queryCommandState(\"indent\")?\"0em\":me.options.indentValue||\"2em\";me.execCommand(\"Paragraph\",\"p\",{style:\"text-indent:\"+value})},queryCommandState:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return pN&&pN.style.textIndent&&parseInt(pN.style.textIndent)?1:0}};UE.commands[\"print\"]={execCommand:function(){this.window.print()},notNeedUndo:1};UE.commands[\"preview\"]={execCommand:function(){var w=window.open(\"\",\"_blank\",\"\"),d=w.document;d.open();d.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"'+this.options.UEDITOR_HOME_URL+'ueditor.parse.js\"><\\/script><script>'+\"setTimeout(function(){uParse('div',{rootPath: '\"+this.options.UEDITOR_HOME_URL+\"'})},300)\"+\"<\\/script></head><body><div>\"+this.getContent(null,null,true)+\"</div></body></html>\");d.close()},notNeedUndo:1};UE.plugins[\"selectall\"]=function(){var me=this;me.commands[\"selectall\"]={execCommand:function(){var me=this,body=me.body,range=me.selection.getRange();range.selectNodeContents(body);if(domUtils.isEmptyBlock(body)){if(browser.opera&&body.firstChild&&body.firstChild.nodeType==1){range.setStartAtFirst(body.firstChild)}range.collapse(true)}range.select(true)},notNeedUndo:1};me.addshortcutkey({selectAll:\"ctrl+65\"})};UE.plugins[\"paragraph\"]=function(){var me=this,block=domUtils.isBlockElm,notExchange=[\"TD\",\"LI\",\"PRE\"],doParagraph=function(range,style,attrs,sourceCmdName){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},para;range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType===3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);para=range.document.createElement(style);if(attrs){domUtils.setAttributes(para,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){para.style.cssText=attrs.style}}para.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(para)){domUtils.fillChar(range.document,para)}tmpRange.insertNode(para);var parent=para.parentNode;if(block(parent)&&!domUtils.isBody(para.parentNode)&&utils.indexOf(notExchange,parent.tagName)===-1){if(!(sourceCmdName&&sourceCmdName===\"customstyle\")){parent.getAttribute(\"dir\")&&para.setAttribute(\"dir\",parent.getAttribute(\"dir\"));parent.style.cssText&&(para.style.cssText=parent.style.cssText+\";\"+para.style.cssText);parent.style.textAlign&&!para.style.textAlign&&(para.style.textAlign=parent.style.textAlign);parent.style.textIndent&&!para.style.textIndent&&(para.style.textIndent=parent.style.textIndent);parent.style.padding&&!para.style.padding&&(para.style.padding=parent.style.padding)}if(attrs&&/h\\d/i.test(parent.tagName)&&!/h\\d/i.test(para.tagName)){domUtils.setAttributes(parent,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){parent.style.cssText=attrs.style}domUtils.remove(para.parentNode,true);para=parent}else{domUtils.remove(para.parentNode,true)}}if(utils.indexOf(notExchange,parent.tagName)!==-1){current=parent}else{current=para}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};me.setOpt(\"paragraph\",{p:\"\",h1:\"\",h2:\"\",h3:\"\",h4:\"\",h5:\"\",h6:\"\"});me.commands[\"paragraph\"]={execCommand:function(cmdName,style,attrs,sourceCmdName){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"p\");range.insertNode(txt);if(browser.ie){var node=txt.previousSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}node=txt.nextSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}}}range=doParagraph(range,style,attrs,sourceCmdName);if(txt){range.setStartBefore(txt).collapse(true);pN=txt.parentNode;domUtils.remove(txt);if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){domUtils.fillNode(this.document,pN)}}if(browser.gecko&&range.collapsed&&range.startContainer.nodeType===1){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&child.tagName.toLowerCase()===style){range.setStart(child,0).collapse(true)}}range.select();return true},queryCommandValue:function(){var node=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return node?node.tagName.toLowerCase():\"\"}}};(function(){var block=domUtils.isBlockElm,getObj=function(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n&&n.nodeType==1&&n.getAttribute(\"dir\")})},doDirectionality=function(range,editor,forward){var bookmark,filterFn=function(node){return node.nodeType==1?!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},obj=getObj(editor);if(obj&&range.collapsed){obj.setAttribute(\"dir\",forward);return range}bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){common.setAttribute(\"dir\",forward);current=common}else{var p=range.document.createElement(\"p\");p.setAttribute(\"dir\",forward);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"directionality\"]={execCommand:function(cmdName,forward){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"d\");range.insertNode(txt)}doDirectionality(range,this,forward);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var node=getObj(this);return node?node.getAttribute(\"dir\"):\"ltr\"}}})();UE.plugins[\"horizontal\"]=function(){var me=this;me.commands[\"horizontal\"]={execCommand:function(cmdName){var me=this;if(me.queryCommandState(cmdName)!==-1){me.execCommand(\"insertHtml\",\"<hr>\");var range=me.selection.getRange(),start=range.startContainer;if(start.nodeType==1&&!start.childNodes[range.startOffset]){var tmp;if(tmp=start.childNodes[range.startOffset-1]){if(tmp.nodeType==1&&tmp.tagName==\"HR\"){if(me.options.enterTag==\"p\"){tmp=me.document.createElement(\"p\");range.insertNode(tmp);range.setStart(tmp,0).setCursor()}else{tmp=me.document.createElement(\"br\");range.insertNode(tmp);range.setStartBefore(tmp).setCursor()}}}}return true}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),\"table\")?-1:0}};me.addListener(\"delkeydown\",function(name,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);if(domUtils.isStartInblock(rng)){var tmpNode=rng.startContainer;var pre=tmpNode.previousSibling;if(pre&&domUtils.isTagNode(pre,\"hr\")){domUtils.remove(pre);rng.select();domUtils.preventDefault(evt);return true}}})};UE.commands[\"time\"]=UE.commands[\"date\"]={execCommand:function(cmd,format){var date=new Date;function formatTime(date,format){var hh=(\"0\"+date.getHours()).slice(-2),ii=(\"0\"+date.getMinutes()).slice(-2),ss=(\"0\"+date.getSeconds()).slice(-2);format=format||\"hh:ii:ss\";return format.replace(/hh/gi,hh).replace(/ii/gi,ii).replace(/ss/gi,ss)}function formatDate(date,format){var yyyy=(\"000\"+date.getFullYear()).slice(-4),yy=yyyy.slice(-2),mm=(\"0\"+(date.getMonth()+1)).slice(-2),dd=(\"0\"+date.getDate()).slice(-2);format=format||\"yyyy-mm-dd\";return format.replace(/yyyy/gi,yyyy).replace(/yy/gi,yy).replace(/mm/gi,mm).replace(/dd/gi,dd)}this.execCommand(\"insertHtml\",cmd==\"time\"?formatTime(date,format):formatDate(date,format))}};UE.plugins[\"rowspacing\"]=function(){var me=this;me.setOpt({rowspacingtop:[\"5\",\"10\",\"15\",\"20\",\"25\"],rowspacingbottom:[\"5\",\"10\",\"15\",\"20\",\"25\"]});me.commands[\"rowspacing\"]={execCommand:function(cmdName,value,dir){this.execCommand(\"paragraph\",\"p\",{style:\"margin-\"+dir+\":\"+value+\"px\"});return true},queryCommandValue:function(cmdName,dir){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)}),value;if(pN){value=domUtils.getComputedStyle(pN,\"margin-\"+dir).replace(/[^\\d]/g,\"\");return!value?0:value}return 0}}};UE.plugins[\"lineheight\"]=function(){var me=this;me.setOpt({lineheight:[\"1\",\"1.5\",\"1.75\",\"2\",\"3\",\"4\",\"5\"]});me.commands[\"lineheight\"]={execCommand:function(cmdName,value){this.execCommand(\"paragraph\",\"p\",{style:\"line-height:\"+(value==\"1\"?\"normal\":value+\"em\")});return true},queryCommandValue:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)});if(pN){var value=domUtils.getComputedStyle(pN,\"line-height\");return value==\"normal\"?1:value.replace(/[^\\d.]*/gi,\"\")}}}};UE.plugins[\"insertcode\"]=function(){var me=this;me.setOpt(\"insertcode\",{as3:\"ActionScript3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"Css\",\"c#\":\"C#\",delphi:\"Delphi\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"Html\",java:\"Java\",js:\"Javascript\",pl:\"Perl\",php:\"PHP\",plain:\"Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"VB\",xml:\"XML\",mind:\"Mind\"});me.commands[\"insertcode\"]={execCommand:function(cmd,lang){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){pre.className=\"brush:\"+lang+\";toolbar:false;\"}else{var code=\"\";if(rng.collapsed){code=browser.ie&&browser.ie11below?browser.version<=8?\"&nbsp;\":\"\":\"<br/>\"}else{var frag=rng.extractContents();var div=me.document.createElement(\"div\");div.appendChild(frag);utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\\r\\t]/g,\"\")),me.options.filterTxtRules).children,function(node){if(browser.ie&&browser.ie11below&&browser.version>8){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/\\n$/.test(code)){code+=\"\\n\"}}}else{code+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(code)){code=code.replace(/\\n$/,\"\")}}else{if(browser.ie&&browser.ie11below){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/br>$/.test(code)){code+=\"<br>\"}}}else{code+=node.data+\"<br>\"}if(!node.nextSibling()&&/<br>$/.test(code)){code=code.replace(/<br>$/,\"\")}}else{code+=node.type==\"element\"?dtd.$empty[node.tagName]?\"\":node.innerText():node.data;if(!/br\\/?\\s*>$/.test(code)){if(!node.nextSibling())return;code+=\"<br>\"}}}})}me.execCommand(\"inserthtml\",'<pre id=\"coder\"class=\"brush:'+lang+';toolbar:false\">'+code+\"</pre>\",true);pre=me.document.getElementById(\"coder\");domUtils.removeAttributes(pre,\"id\");var tmpNode=pre.previousSibling;if(tmpNode&&(tmpNode.nodeType==3&&tmpNode.nodeValue.length==1&&browser.ie&&browser.version==6||domUtils.isEmptyBlock(tmpNode))){domUtils.remove(tmpNode)}var rng=me.selection.getRange();if(domUtils.isEmptyBlock(pre)){rng.setStart(pre,0).setCursor(false,true)}else{rng.selectNodeContents(pre).select()}}},queryCommandValue:function(){var path=this.selection.getStartElementPath();var lang=\"\";utils.each(path,function(node){if(node.nodeName==\"PRE\"){var match=node.className.match(/brush:([^;]+)/);lang=match&&match[1]?match[1]:\"\";return false}});return lang}};me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var brs=pre.getNodesByTagName(\"br\");if(brs.length){browser.ie&&browser.ie11below&&browser.version>8&&utils.each(brs,function(br){var txt=UE.uNode.createText(\"\\n\");br.parentNode.insertBefore(txt,br);br.parentNode.removeChild(br)});return}if(browser.ie&&browser.ie11below&&browser.version>8)return;var code=pre.innerText().split(/\\n/);pre.innerHTML(\"\");utils.each(code,function(c){if(c.length){pre.appendChild(UE.uNode.createText(c))}pre.appendChild(UE.uNode.createElement(\"br\"))})})});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var code=\"\";utils.each(pre.children,function(n){if(n.type==\"text\"){code+=n.data.replace(/[ ]/g,\"&nbsp;\").replace(/\\n$/,\"\")}else{if(n.tagName==\"br\"){code+=\"\\n\"}else{code+=!dtd.$empty[n.tagName]?\"\":n.innerText()}}});pre.innerText(code.replace(/(&nbsp;|\\n)+$/,\"\"))})});me.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};var orgQuery=me.queryCommandState;me.queryCommandState=function(cmd){var me=this;if(!me.notNeedCodeQuery[cmd.toLowerCase()]&&me.selection&&me.queryCommandValue(\"insertcode\")){return-1}return UE.Editor.prototype.queryCommandState.apply(this,arguments)};me.addListener(\"beforeenterkeydown\",function(){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(!rng.collapsed){rng.deleteContents()}if(!browser.ie||browser.ie9above){var tmpNode=me.document.createElement(\"br\"),pre;rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true);var next=tmpNode.nextSibling;if(!next&&(!browser.ie||browser.version>10)){rng.insertNode(tmpNode.cloneNode(false))}else{rng.setStartAfter(tmpNode)}pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[\\\\s\"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([\\\\s\"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}if(str){str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}}rng.collapse(true).select(true)}else{if(browser.version>8){var txt=me.document.createTextNode(\"\\n\");var start=rng.startContainer;if(rng.startOffset==0){var preNode=start.previousSibling;if(preNode){rng.insertNode(txt);var fillchar=me.document.createTextNode(\" \");rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{rng.insertNode(txt).setStartAfter(txt);var fillchar=me.document.createTextNode(\" \");start=rng.startContainer.childNodes[rng.startOffset];if(start&&!/^\\n/.test(start.nodeValue)){rng.setStartBefore(txt)}rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{var tmpNode=me.document.createElement(\"br\");rng.insertNode(tmpNode);rng.insertNode(me.document.createTextNode(domUtils.fillChar));rng.setStartAfter(tmpNode);pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[ \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([ \"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}rng.collapse(true).select()}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"tabkeydown\",function(cmd,evt){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(evt.shiftKey){}else{if(!rng.collapsed){var bk=rng.createBookmark();var start=bk.start.previousSibling;while(start){if(pre.firstChild===start&&!domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start);break}if(domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling);break}start=start.previousSibling}var end=bk.end;start=bk.start.nextSibling;if(pre.firstChild===bk.start){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}while(start&&start!==end){if(domUtils.isBr(start)&&start.nextSibling){if(start.nextSibling===end){break}pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}start=start.nextSibling}rng.moveToBookmark(bk).select()}else{var tmpNode=me.document.createTextNode(\"    \");rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true)}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"beforeinserthtml\",function(evtName,html){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){if(!rng.collapsed){rng.deleteContents()}var htmlstr=\"\";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){htmlstr+=cn.innerText()}}else{htmlstr+=cn.data}});if(!/\\n$/.test(htmlstr)){htmlstr+=\"\\n\"}}}else{htmlstr+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(htmlstr)){htmlstr=htmlstr.replace(/\\n$/,\"\")}});var tmpNode=me.document.createTextNode(utils.html(htmlstr.replace(/&nbsp;/g,\" \")));rng.insertNode(tmpNode).selectNode(tmpNode).select()}else{var frag=me.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/&nbsp;/g,\" \"))))}}else{frag.appendChild(me.document.createTextNode(utils.html(cn.data.replace(/&nbsp;/g,\" \"))))}});if(frag.lastChild.nodeName!=\"BR\"){frag.appendChild(me.document.createElement(\"br\"))}}}else{frag.appendChild(me.document.createTextNode(utils.html(node.data.replace(/&nbsp;/g,\" \"))))}if(!node.nextSibling()&&frag.lastChild.nodeName==\"BR\"){frag.removeChild(frag.lastChild)}});rng.insertNode(frag).select()}return true}});me.addListener(\"keydown\",function(cmd,evt){var me=this,keyCode=evt.keyCode||evt.which;if(keyCode==40){var rng=me.selection.getRange(),pre,start=rng.startContainer;if(rng.collapsed&&(pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true))&&!pre.nextSibling){var last=pre.lastChild;while(last&&last.nodeName==\"BR\"){last=last.previousSibling}if(last===start||rng.startContainer===pre&&rng.startOffset==pre.childNodes.length){me.execCommand(\"insertparagraph\");domUtils.preventDefault(evt)}}}});me.addListener(\"delkeydown\",function(type,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);var start=rng.startContainer;if(domUtils.isTagNode(start,\"pre\")&&rng.collapsed&&domUtils.isStartInblock(rng)){var p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);start.parentNode.insertBefore(p,start);domUtils.remove(start);rng.setStart(p,0).setCursor(false,true);domUtils.preventDefault(evt);return true}})};UE.commands[\"cleardoc\"]={execCommand:function(cmdName){var me=this,enterTag=me.options.enterTag,range=me.selection.getRange();if(enterTag==\"br\"){me.body.innerHTML=\"<br/>\";range.setStart(me.body,0).setCursor()}else{me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).setCursor(false,true)}setTimeout(function(){me.fireEvent(\"clearDoc\")},0)}};UE.plugin.register(\"anchor\",function(){return{bindEvents:{ready:function(){utils.cssRule(\"anchor\",\".anchorclass{background: url('\"+this.options.themePath+this.options.theme+\"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",this.document)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(a){var val;if(val=a.getAttr(\"anchorname\")){a.tagName=\"a\";a.setAttr({anchorname:\"\",name:val,class:\"\"})}})},inputRule:function(root){utils.each(root.getNodesByTagName(\"a\"),function(a){var val;if((val=a.getAttr(\"name\"))&&!a.getAttr(\"href\")){if(/^\\_Toc\\d+$/.test(val)){a.parentNode.removeChild(a);return}a.tagName=\"img\";a.setAttr({anchorname:a.getAttr(\"name\"),class:\"anchorclass\"});a.setAttr(\"name\")}})},commands:{anchor:{execCommand:function(cmd,name){var range=this.selection.getRange(),img=range.getClosedNode();if(img&&img.getAttribute(\"anchorname\")){if(name){img.setAttribute(\"anchorname\",name)}else{range.setStartBefore(img).setCursor();domUtils.remove(img)}}else{if(name){var anchor=this.document.createElement(\"img\");range.collapse(true);domUtils.setAttributes(anchor,{anchorname:name,class:\"anchorclass\"});range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true)}}}}}}});UE.plugins[\"wordcount\"]=function(){var me=this;me.setOpt(\"wordCount\",true);me.addListener(\"contentchange\",function(){me.fireEvent(\"wordcount\")});var timer;me.addListener(\"ready\",function(){var me=this;domUtils.on(me.body,\"keyup\",function(evt){var code=evt.keyCode||evt.which,ignores={16:1,18:1,20:1,37:1,38:1,39:1,40:1};if(code in ignores)return;clearTimeout(timer);timer=setTimeout(function(){me.fireEvent(\"wordcount\")},200)})})};UE.plugins[\"pagebreak\"]=function(){var me=this,notBreakTags=[\"td\"];me.setOpt(\"pageBreakTag\",\"_ueditor_page_break_tag_\");function fillNode(node){if(domUtils.isEmptyBlock(node)){var firstChild=node.firstChild,tmpNode;while(firstChild&&firstChild.nodeType==1&&domUtils.isEmptyBlock(firstChild)){tmpNode=firstChild;firstChild=firstChild.firstChild}!tmpNode&&(tmpNode=node);domUtils.fillNode(me.document,tmpNode)}}me.ready(function(){utils.cssRule(\"pagebreak\",\".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",me.document)});function isHr(node){return node&&node.nodeType==1&&node.tagName==\"HR\"&&node.className==\"pagebreak\"}me.addInputRule(function(root){root.traversal(function(node){if(node.type==\"text\"&&node.data==me.options.pageBreakTag){var hr=UE.uNode.createElement('<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">');node.parentNode.insertBefore(hr,node);node.parentNode.removeChild(node)}})});me.addOutputRule(function(node){utils.each(node.getNodesByTagName(\"hr\"),function(n){if(n.getAttr(\"class\")==\"pagebreak\"){var txt=UE.uNode.createText(me.options.pageBreakTag);n.parentNode.insertBefore(txt,n);n.parentNode.removeChild(n)}})});me.commands[\"pagebreak\"]={execCommand:function(){var range=me.selection.getRange(),hr=me.document.createElement(\"hr\");domUtils.setAttributes(hr,{class:\"pagebreak\",noshade:\"noshade\",size:\"5\"});domUtils.unSelectable(hr);var node=domUtils.findParentByTagName(range.startContainer,notBreakTags,true),parents=[],pN;if(node){switch(node.tagName){case\"TD\":pN=node.parentNode;if(!pN.previousSibling){var table=domUtils.findParentByTagName(pN,\"table\");table.parentNode.insertBefore(hr,table);parents=domUtils.findParents(hr,true)}else{pN.parentNode.insertBefore(hr,pN);parents=domUtils.findParents(hr)}pN=parents[1];if(hr!==pN){domUtils.breakParent(hr,pN)}me.fireEvent(\"afteradjusttable\",me.document)}}else{if(!range.collapsed){range.deleteContents();var start=range.startContainer;while(!domUtils.isBody(start)&&domUtils.isBlockElm(start)&&domUtils.isEmptyNode(start)){range.setStartBefore(start).collapse(true);domUtils.remove(start);start=range.startContainer}}range.insertNode(hr);var pN=hr.parentNode,nextNode;while(!domUtils.isBody(pN)){domUtils.breakParent(hr,pN);nextNode=hr.nextSibling;if(nextNode&&domUtils.isEmptyBlock(nextNode)){domUtils.remove(nextNode)}pN=hr.parentNode}nextNode=hr.nextSibling;var pre=hr.previousSibling;if(isHr(pre)){domUtils.remove(pre)}else{pre&&fillNode(pre)}if(!nextNode){var p=me.document.createElement(\"p\");hr.parentNode.appendChild(p);domUtils.fillNode(me.document,p);range.setStart(p,0).collapse(true)}else{if(isHr(nextNode)){domUtils.remove(nextNode)}else{fillNode(nextNode)}range.setEndAfter(hr).collapse(false)}range.select(true)}}}};UE.plugin.register(\"wordimage\",function(){var me=this,images=[];this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement;if(\"IMG\"==el.tagName&&el.getAttribute(\"data-word-image\")){me.ui._dialogs.wordimageDialog&&me.ui._dialogs.wordimageDialog.open()}});return{commands:{wordimage:{execCommand:function(){var images=domUtils.getElementsByTagName(me.body,\"img\");var urlList=[];for(var i=0,ci;ci=images[i++];){var url=ci.getAttribute(\"data-word-image\");url&&urlList.push(url)}return urlList},queryCommandState:function(){images=domUtils.getElementsByTagName(me.body,\"img\");for(var i=0,ci;ci=images[i++];){if(ci.getAttribute(\"data-word-image\")){return 1}}return-1},notNeedUndo:true}},inputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(img){var attrs=img.attrs,flag=parseInt(attrs.width)<128||parseInt(attrs.height)<43,opt=me.options,src=opt.UEDITOR_HOME_URL+\"themes/default/images/spacer.gif\";if(attrs[\"src\"]&&/^(?:(file:\\/+))/.test(attrs[\"src\"])){img.setAttr({width:attrs.width,height:attrs.height,alt:attrs.alt,\"data-word-image\":attrs.src,src:src,style:\"background:url(\"+(flag?opt.themePath+opt.theme+\"/images/word.gif\":opt.langPath+opt.lang+\"/images/localimage.png\")+\") no-repeat center center;border:1px solid #ddd\"})}})}}});UE.plugin.register(\"autosave\",function(){var me=this,saveKey=null;function save(editor){var saveData;if(!editor.hasContents()){saveKey&&me.removePreferences(saveKey);return}editor._autoSaveTimer=null;saveData=me.body.innerHTML;if(editor.fireEvent(\"beforeautosave\",{content:saveData})===false){return}me.setPreferences(saveKey,saveData);editor.fireEvent(\"afterautosave\",{content:saveData})}return{defaultOptions:{autoSaveEnable:true,autoSaveRestore:false,autoSaveKey:null},bindEvents:{ready:function(){saveKey=me.getOpt(\"autoSaveKey\");if(!saveKey){var _suffix=\"_DraftsData\",key=null;if(me.key){key=me.key+_suffix}else{key=(me.container.parentNode.id||\"ue-common\")+_suffix}saveKey=(location.protocol+location.host+location.pathname).replace(/[.:\\/]/g,\"_\")+key}if(me.getOpt(\"autoSaveRestore\")){var data=me.getPreferences(saveKey);if(data){me.body.innerHTML=data;me.fireEvent(\"showmessage\",{type:\"info\",content:me.getLang(\"autosave\").autoRestoreTip})}}},beforesubmit:function(){if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}me.execCommand(\"clear_auto_save_content\")},contentchange:function(){if(!me.isReady){return}if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}if(me._autoSaveTimer){window.clearTimeout(me._autoSaveTimer)}me._autoSaveTimer=window.setTimeout(function(){save(me)},1e3)}},commands:{clear_auto_save_content:{execCommand:function(cmd,name){if(saveKey&&me.getPreferences(saveKey)){me.removePreferences(saveKey)}},notNeedUndo:true,ignoreContentChange:true},set_auto_save_content:{execCommand:function(cmd,name){save(me)},notNeedUndo:true,ignoreContentChange:true},get_auto_save_content:{execCommand:function(cmd,name){return me.getPreferences(saveKey)||\"\"},notNeedUndo:true,ignoreContentChange:true},auto_save_restore:{execCommand:function(cmd,name){if(saveKey){me.body.innerHTML=me.getPreferences(saveKey)||\"<p>\"+domUtils.fillHtml+\"</p>\";me.focus(true)}},queryCommandState:function(){return saveKey?me.getPreferences(saveKey)===null?-1:0:-1},notNeedUndo:true,ignoreContentChange:true}}}});UE.plugin.register(\"formula\",function(){var me=this,images=[];return{commands:{formula:{execCommand:function(cmdName,value){var range=me.selection.getRange(),img=range.getClosedNode();value=encodeURIComponent(value);var formulaConfig=me.getOpt(\"formulaConfig\");var src=formulaConfig.imageUrlTemplate.replace(/\\{\\}/,value);if(img){img.setAttribute(\"src\",src)}else{me.execCommand(\"insertHtml\",'<img src=\"'+src+'\" data-formula-image=\"'+value+'\" />')}}}}}});UE.plugins[\"dragdrop\"]=function(){var me=this;me.ready(function(){domUtils.on(this.body,\"dragend\",function(){var rng=me.selection.getRange();var node=rng.getClosedNode()||me.selection.getStart();if(node&&node.tagName==\"IMG\"){var pre=node.previousSibling,next;while(next=node.nextSibling){if(next.nodeType==1&&next.tagName==\"SPAN\"&&!next.firstChild){domUtils.remove(next)}else{break}}if((pre&&pre.nodeType==1&&!domUtils.isEmptyBlock(pre)||!pre)&&(!next||next&&!domUtils.isEmptyBlock(next))){if(pre&&pre.tagName==\"P\"&&!domUtils.isEmptyBlock(pre)){pre.appendChild(node);domUtils.moveChild(next,pre);domUtils.remove(next)}else if(next&&next.tagName==\"P\"&&!domUtils.isEmptyBlock(next)){next.insertBefore(node,next.firstChild)}if(pre&&pre.tagName==\"P\"&&domUtils.isEmptyBlock(pre)){domUtils.remove(pre)}if(next&&next.tagName==\"P\"&&domUtils.isEmptyBlock(next)){domUtils.remove(next)}rng.selectNode(node).select();me.fireEvent(\"saveScene\")}}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var rng=me.selection.getRange(),node;if(node=domUtils.findParentByTagName(rng.startContainer,\"p\",true)){if(domUtils.getComputedStyle(node,\"text-align\")==\"center\"){domUtils.removeStyle(node,\"text-align\")}}}})};UE.plugins[\"undo\"]=function(){var saveSceneTimer;var me=this,maxUndoCount=me.options.maxUndoCount||20,maxInputCount=me.options.maxInputCount||20,fillchar=new RegExp(domUtils.fillChar+\"|</hr>\",\"gi\");var noNeedFillCharTags={ol:1,ul:1,table:1,tbody:1,tr:1,body:1};var orgState=me.options.autoClearEmptyNode;function compareAddr(indexA,indexB){if(indexA.length!=indexB.length)return 0;for(var i=0,l=indexA.length;i<l;i++){if(indexA[i]!=indexB[i])return 0}return 1}function compareRangeAddress(rngAddrA,rngAddrB){if(rngAddrA.collapsed!=rngAddrB.collapsed){return 0}if(!compareAddr(rngAddrA.startAddress,rngAddrB.startAddress)||!compareAddr(rngAddrA.endAddress,rngAddrB.endAddress)){return 0}return 1}function UndoManager(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.undo=function(){if(this.hasUndo){if(!this.list[this.index-1]&&this.list.length==1){this.reset();return}while(this.list[this.index].content==this.list[this.index-1].content){this.index--;if(this.index==0){return this.restore(0)}}this.restore(--this.index)}};this.redo=function(){if(this.hasRedo){while(this.list[this.index].content==this.list[this.index+1].content){this.index++;if(this.index==this.list.length-1){return this.restore(this.index)}}this.restore(++this.index)}};this.restore=function(){var me=this.editor;var scene=this.list[this.index];var root=UE.htmlparser(scene.content.replace(fillchar,\"\"));me.options.autoClearEmptyNode=false;me.filterInputRule(root);me.options.autoClearEmptyNode=orgState;me.document.body.innerHTML=root.toHtml();me.fireEvent(\"afterscencerestore\");if(browser.ie){utils.each(domUtils.getElementsByTagName(me.document,\"td th caption p\"),function(node){if(domUtils.isEmptyNode(node)){domUtils.fillNode(me.document,node)}})}try{var rng=new dom.Range(me.document).moveToAddress(scene.address);rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()])}catch(e){}this.update();this.clearKey();me.fireEvent(\"reset\",true)};this.getScene=function(){var me=this.editor;var rng=me.selection.getRange(),rngAddress=rng.createAddress(false,true);me.fireEvent(\"beforegetscene\");var root=UE.htmlparser(me.body.innerHTML);me.options.autoClearEmptyNode=false;me.filterOutputRule(root);me.options.autoClearEmptyNode=orgState;var cont=root.toHtml();me.fireEvent(\"aftergetscene\");return{address:rngAddress,content:cont}};this.save=function(notCompareRange,notSetCursor){clearTimeout(saveSceneTimer);var currentScene=this.getScene(notSetCursor),lastScene=this.list[this.index];if(!lastScene||lastScene&&lastScene.content!=currentScene.content){setTimeout(function(){me.trigger(\"contentchange\")},0)}if(lastScene&&lastScene.content==currentScene.content&&(notCompareRange?1:compareRangeAddress(lastScene.address,currentScene.address))){return}this.list=this.list.slice(0,this.index+1);this.list.push(currentScene);if(this.list.length>maxUndoCount){this.list.shift()}this.index=this.list.length-1;this.clearKey();this.update()};this.update=function(){this.hasRedo=!!this.list[this.index+1];this.hasUndo=!!this.list[this.index-1]};this.reset=function(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.clearKey()};this.clearKey=function(){keycont=0;lastKeyCode=null}}me.undoManger=new UndoManager;me.undoManger.editor=me;function saveScene(){this.undoManger.save()}me.addListener(\"saveScene\",function(){var args=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,args)});me.addListener(\"reset\",function(type,exclude){if(!exclude){this.undoManger.reset()}});me.commands[\"redo\"]=me.commands[\"undo\"]={execCommand:function(cmdName){this.undoManger[cmdName]()},queryCommandState:function(cmdName){return this.undoManger[\"has\"+(cmdName.toLowerCase()==\"undo\"?\"Undo\":\"Redo\")]?0:-1},notNeedUndo:1};var keys={16:1,17:1,18:1,37:1,38:1,39:1,40:1},keycont=0,lastKeyCode;var inputType=false;me.addListener(\"ready\",function(){domUtils.on(this.body,\"compositionstart\",function(){inputType=true});domUtils.on(this.body,\"compositionend\",function(){inputType=false})});me.addshortcutkey({Undo:\"ctrl+90\",Redo:\"ctrl+89\"});var isCollapsed=true;me.addListener(\"keyup\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!me.selection.getRange().collapsed){me.undoManger.save(false,true);isCollapsed=false;return}if(me.undoManger.list.length===0){me.undoManger.save(true)}clearTimeout(saveSceneTimer);function save(cont){cont.undoManger.save(false,true);cont.fireEvent(\"selectionchange\")}saveSceneTimer=setTimeout(function(){if(inputType){var intervalTimer=setInterval(function(){if(!inputType){save(me);clearInterval(intervalTimer)}},300);return}save(me)},200);lastKeyCode=keyCode;keycont++;if(keycont>=maxInputCount){save(me)}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!isCollapsed){this.undoManger.save(false,true);isCollapsed=true}}});me.stopCmdUndo=function(){me.__hasEnterExecCommand=true};me.startCmdUndo=function(){me.__hasEnterExecCommand=false}};UE.plugin.register(\"copy\",function(){var me=this;function initZeroClipboard(){ZeroClipboard.config({debug:false,swfPath:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.swf\"});var client=me.zeroclipboard=new ZeroClipboard;client.on(\"copy\",function(e){var client=e.client,rng=me.selection.getRange(),div=document.createElement(\"div\");div.appendChild(rng.cloneContents());client.setText(div.innerText||div.textContent);client.setHtml(div.innerHTML);rng.select()});client.on(\"mouseover mouseout\",function(e){var target=e.target;if(target){if(e.type==\"mouseover\"){domUtils.addClass(target,\"edui-state-hover\")}else if(e.type==\"mouseout\"){domUtils.removeClasses(target,\"edui-state-hover\")}}});client.on(\"wrongflash noflash\",function(){ZeroClipboard.destroy()});me.fireEvent(\"zeroclipboardready\",client)}return{bindEvents:{ready:function(){if(!browser.ie){if(window.ZeroClipboard){initZeroClipboard()}else{utils.loadFile(document,{src:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){initZeroClipboard()})}}}},commands:{copy:{execCommand:function(cmd){if(!me.document.execCommand(\"copy\")){alert(me.getLang(\"copymsg\"))}}}}}});UE.plugins[\"paste\"]=function(){function getClipboardData(callback){var doc=this.document;if(doc.getElementById(\"baidu_pastebin\")){return}var range=this.selection.getRange(),bk=range.createBookmark(),pastebin=doc.createElement(\"div\");pastebin.id=\"baidu_pastebin\";browser.webkit&&pastebin.appendChild(doc.createTextNode(domUtils.fillChar+domUtils.fillChar));doc.body.appendChild(pastebin);bk.start.style.display=\"\";pastebin.style.cssText=\"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\"+domUtils.getXY(bk.start).y+\"px\";range.selectNodeContents(pastebin).select(true);setTimeout(function(){if(browser.webkit){for(var i=0,pastebins=doc.querySelectorAll(\"#baidu_pastebin\"),pi;pi=pastebins[i++];){if(domUtils.isEmptyNode(pi)){domUtils.remove(pi)}else{pastebin=pi;break}}}try{pastebin.parentNode.removeChild(pastebin)}catch(e){}range.moveToBookmark(bk).select(true);callback(pastebin)},0)}var me=this;me.setOpt({retainOnlyLabelPasted:false});var txtContent,htmlContent,address;function getPureHtml(html){return html.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi,function(a,b,tagName,attrs){tagName=tagName.toLowerCase();if({img:1}[tagName]){return a}attrs=attrs.replace(/([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,function(str,atr,val){if({src:1,href:1,name:1}[atr.toLowerCase()]){return atr+\"=\"+val+\" \"}return\"\"});if({span:1,div:1}[tagName]){return\"\"}else{return\"<\"+b+tagName+\" \"+utils.trim(attrs)+\">\"}})}function filter(div){var html;if(div.firstChild){var nodes=domUtils.getElementsByTagName(div,\"span\");for(var i=0,ni;ni=nodes[i++];){if(ni.id==\"_baidu_cut_start\"||ni.id==\"_baidu_cut_end\"){domUtils.remove(ni)}}if(browser.webkit){var brs=div.querySelectorAll(\"div br\");for(var i=0,bi;bi=brs[i++];){var pN=bi.parentNode;if(pN.tagName==\"DIV\"&&pN.childNodes.length==1){pN.innerHTML=\"<p><br/></p>\";domUtils.remove(pN)}}var divs=div.querySelectorAll(\"#baidu_pastebin\");for(var i=0,di;di=divs[i++];){var tmpP=me.document.createElement(\"p\");di.parentNode.insertBefore(tmpP,di);while(di.firstChild){tmpP.appendChild(di.firstChild)}domUtils.remove(di)}var metas=div.querySelectorAll(\"meta\");for(var i=0,ci;ci=metas[i++];){domUtils.remove(ci)}var brs=div.querySelectorAll(\"br\");for(i=0;ci=brs[i++];){if(/^apple-/i.test(ci.className)){domUtils.remove(ci)}}}if(browser.gecko){var dirtyNodes=div.querySelectorAll(\"[_moz_dirty]\");for(i=0;ci=dirtyNodes[i++];){ci.removeAttribute(\"_moz_dirty\")}}if(!browser.ie){var spans=div.querySelectorAll(\"span.Apple-style-span\");for(var i=0,ci;ci=spans[i++];){domUtils.remove(ci,true)}}html=div.innerHTML;html=UE.filterWord(html);var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);if(browser.webkit){var br=root.lastChild();if(br&&br.type==\"element\"&&br.tagName==\"br\"){root.removeChild(br)}utils.each(me.body.querySelectorAll(\"div\"),function(node){if(domUtils.isEmptyBlock(node)){domUtils.remove(node,true)}})}html={html:root.toHtml()};me.fireEvent(\"beforepaste\",html,root);if(!html.html){return}root=UE.htmlparser(html.html,true);if(me.queryCommandState(\"pasteplain\")===1){me.execCommand(\"insertHtml\",UE.filterNode(root,me.options.filterTxtRules).toHtml(),true)}else{UE.filterNode(root,me.options.filterTxtRules);txtContent=root.toHtml();htmlContent=html.html;address=me.selection.getRange().createAddress(true);me.execCommand(\"insertHtml\",me.getOpt(\"retainOnlyLabelPasted\")===true?getPureHtml(htmlContent):htmlContent,true)}me.fireEvent(\"afterpaste\",html)}}me.addListener(\"pasteTransfer\",function(cmd,plainType){if(address&&txtContent&&htmlContent&&txtContent!=htmlContent){var range=me.selection.getRange();range.moveToAddress(address,true);if(!range.collapsed){while(!domUtils.isBody(range.startContainer)){var start=range.startContainer;if(start.nodeType==1){start=start.childNodes[range.startOffset];if(!start){range.setStartBefore(range.startContainer);continue}var pre=start.previousSibling;if(pre&&pre.nodeType==3&&new RegExp(\"^[\\n\\r\\t \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){range.setStartBefore(pre)}}if(range.startOffset==0){range.setStartBefore(range.startContainer)}else{break}}while(!domUtils.isBody(range.endContainer)){var end=range.endContainer;if(end.nodeType==1){end=end.childNodes[range.endOffset];if(!end){range.setEndAfter(range.endContainer);continue}var next=end.nextSibling;if(next&&next.nodeType==3&&new RegExp(\"^[\\n\\r\\t\"+domUtils.fillChar+\"]*$\").test(next.nodeValue)){range.setEndAfter(next)}}if(range.endOffset==range.endContainer[range.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){range.setEndAfter(range.endContainer)}else{break}}}range.deleteContents();range.select(true);me.__hasEnterExecCommand=true;var html=htmlContent;if(plainType===2){html=getPureHtml(html)}else if(plainType){html=txtContent}me.execCommand(\"inserthtml\",html,true);me.__hasEnterExecCommand=false;var rng=me.selection.getRange();while(!domUtils.isBody(rng.startContainer)&&!rng.startOffset&&rng.startContainer[rng.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){rng.setStartBefore(rng.startContainer)}var tmpAddress=rng.createAddress(true);address.endAddress=tmpAddress.startAddress}});me.addListener(\"ready\",function(){domUtils.on(me.body,\"cut\",function(){var range=me.selection.getRange();if(!range.collapsed&&me.undoManger){me.undoManger.save()}});domUtils.on(me.body,browser.ie||browser.opera?\"keydown\":\"paste\",function(e){if((browser.ie||browser.opera)&&(!e.ctrlKey&&!e.metaKey||e.keyCode!=\"86\")){return}getClipboardData.call(me,function(div){filter(div)})})});me.commands[\"paste\"]={execCommand:function(cmd){if(browser.ie){getClipboardData.call(me,function(div){filter(div)});me.document.execCommand(\"paste\")}else{alert(me.getLang(\"pastemsg\"))}}}};UE.plugins[\"pasteplain\"]=function(){var me=this;me.setOpt({pasteplain:false,filterTxtRules:function(){function transP(node){node.tagName=\"p\";node.setStyle()}function removeNode(node){node.parentNode.removeChild(node,true)}return{\"-\":\"script style object iframe embed input select\",p:{$:{}},br:{$:{}},div:function(node){var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node)},ol:removeNode,ul:removeNode,dl:removeNode,dt:removeNode,dd:removeNode,li:removeNode,caption:transP,th:transP,tr:transP,h1:transP,h2:transP,h3:transP,h4:transP,h5:transP,h6:transP,td:function(node){var txt=!!node.innerText();if(txt){node.parentNode.insertAfter(UE.uNode.createText(\" &nbsp; &nbsp;\"),node)}node.parentNode.removeChild(node,node.innerText())}}}()});var pasteplain=me.options.pasteplain;me.commands[\"pasteplain\"]={queryCommandState:function(){return pasteplain?1:0},execCommand:function(){pasteplain=!pasteplain|0},notNeedUndo:1}};UE.plugins[\"list\"]=function(){var me=this,notExchange={TD:1,PRE:1,BLOCKQUOTE:1};me.setOpt({autoTransWordToList:false,insertorderedlist:{decimal:\"\",\"lower-alpha\":\"\",\"lower-roman\":\"\",\"upper-alpha\":\"\",\"upper-roman\":\"\"},insertunorderedlist:{circle:\"\",disc:\"\",square:\"\"},listDefaultPaddingLeft:\"30\",listiconpath:\"http://bs.baidu.com/listicon/\",maxListLevel:-1,disablePInList:false});function listToArray(list){var arr=[];for(var p in list){arr.push(p)}return arr}var listStyle={OL:listToArray(me.options.insertorderedlist),UL:listToArray(me.options.insertunorderedlist)};var liiconpath=me.options.listiconpath;me.ready(function(){var customCss=[];customCss.push(\".list-paddingleft-1{padding-left:0}\");customCss.push(\".list-paddingleft-2{padding-left:\"+me.options.listDefaultPaddingLeft+\"px}\");customCss.push(\".list-paddingleft-3{padding-left:\"+me.options.listDefaultPaddingLeft*2+\"px}\");utils.cssRule(\"list\",\"ol,ul{margin:0;pading:0;\"+(browser.ie?\"\":\"width:95%\")+\"}li{clear:both;}\"+customCss.join(\"\\n\"),me.document)});me.ready(function(){domUtils.on(me.body,\"cut\",function(){setTimeout(function(){var rng=me.selection.getRange(),li;if(!rng.collapsed){if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){if(!li.nextSibling&&domUtils.isEmptyBlock(li)){var pn=li.parentNode,node;if(node=pn.previousSibling){domUtils.remove(pn);rng.setStartAtLast(node).collapse(true);rng.select(true)}else if(node=pn.nextSibling){domUtils.remove(pn);rng.setStartAtFirst(node).collapse(true);rng.select(true)}else{var tmpNode=me.document.createElement(\"p\");domUtils.fillNode(me.document,tmpNode);pn.parentNode.insertBefore(tmpNode,pn);domUtils.remove(pn);rng.setStart(tmpNode,0).collapse(true);rng.select(true)}}}}})})});function getStyle(node){var cls=node.className;if(domUtils.hasClass(node,/custom_/)){return cls.match(/custom_(\\w+)/)[1]}return domUtils.getStyle(node,\"list-style-type\")}me.addListener(\"beforepaste\",function(type,html){var me=this,rng=me.selection.getRange(),li;var root=UE.htmlparser(html.html,true);if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){var list=li.parentNode,tagName=list.tagName===\"OL\"?\"ul\":\"ol\";utils.each(root.getNodesByTagName(tagName),function(n){n.tagName=list.tagName;n.setAttr();if(n.parentNode===root){type=getStyle(list)||(list.tagName==\"OL\"?\"decimal\":\"disc\")}else{var className=n.parentNode.getAttr(\"class\");if(className&&/custom_/.test(className)){type=className.match(/custom_(\\w+)/)[1]}else{type=n.parentNode.getStyle(\"list-style-type\")}if(!type){type=list.tagName===\"OL\"?\"decimal\":\"disc\"}}var index=utils.indexOf(listStyle[list.tagName],type);if(n.parentNode!==root)index=index+1===listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];n.setStyle(\"list-style-type\",currentStyle)})}html.html=root.toHtml()});me.getOpt(\"disablePInList\")===true&&me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var newChildrens=[],index=0;utils.each(li.children,function(n){if(n.tagName==\"p\"){var tmpNode;while(tmpNode=n.children.pop()){newChildrens.splice(index,0,tmpNode);tmpNode.parentNode=li;lastNode=tmpNode}tmpNode=newChildrens[newChildrens.length-1];if(!tmpNode||tmpNode.type!==\"element\"||tmpNode.tagName!==\"br\"){var br=UE.uNode.createElement(\"br\");br.parentNode=li;newChildrens.push(br)}index=newChildrens.length}});if(newChildrens.length){li.children=newChildrens}})});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var tmpP=UE.uNode.createElement(\"p\");for(var i=0,ci;ci=li.children[i];){if(ci.type===\"text\"||dtd.p[ci.tagName]){tmpP.appendChild(ci)}else{if(tmpP.firstChild()){li.insertBefore(tmpP,ci);tmpP=UE.uNode.createElement(\"p\");i=i+2}else{i++}}}if(tmpP.firstChild()&&!tmpP.parentNode||!li.firstChild()){li.appendChild(tmpP)}if(!tmpP.firstChild()){tmpP.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}var p=li.firstChild();var lastChild=p.lastChild();if(lastChild&&lastChild.type===\"text\"&&/^\\s*$/.test(lastChild.data)){p.removeChild(lastChild)}});if(me.options.autoTransWordToList){var orderlisttype={num1:/^\\d+\\)/,decimal:/^\\d+\\./,\"lower-alpha\":/^[a-z]+\\)/,\"upper-alpha\":/^[A-Z]+\\./,cn:/^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,cn2:/^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/},unorderlisttype={square:\"n\"};function checkListType(content,container){var span=container.firstChild();if(span&&span.type===\"element\"&&span.tagName===\"span\"&&/Wingdings|Symbol/.test(span.getStyle(\"font-family\"))){for(var p in unorderlisttype){if(unorderlisttype[p]==span.data){return p}}return\"disc\"}for(var p in orderlisttype){if(orderlisttype[p].test(content)){return p}}}utils.each(root.getNodesByTagName(\"p\"),function(node){if(node.getAttr(\"class\")!==\"MsoListParagraph\"){return}node.setStyle(\"margin\",\"\");node.setStyle(\"margin-left\",\"\");node.setAttr(\"class\",\"\");function appendLi(list,p,type){if(list.tagName===\"ol\"){if(browser.ie){var first=p.firstChild();if(first.type===\"element\"&&first.tagName===\"span\"&&orderlisttype[type].test(first.innerText())){p.removeChild(first)}}else{p.innerHTML(p.innerHTML().replace(orderlisttype[type],\"\"))}}else{p.removeChild(p.firstChild())}var li=UE.uNode.createElement(\"li\");li.appendChild(p);list.appendChild(li)}var tmp=node,type,cacheNode=node;if(node.parentNode.tagName!==\"li\"&&(type=checkListType(node.innerText(),node))){var list=UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type)?\"ol\":\"ul\");list.setStyle(\"list-style-type\",type);while(node&&node.parentNode.tagName!==\"li\"&&checkListType(node.innerText(),node)){tmp=node.nextSibling();if(!tmp){node.parentNode.insertBefore(list,node)}appendLi(list,node,type);node=tmp}if(!list.parentNode&&node&&node.parentNode){node.parentNode.insertBefore(list,node)}}var span=cacheNode.firstChild();if(span&&span.type==\"element\"&&span.tagName==\"span\"&&/^\\s*(&nbsp;)+\\s*$/.test(span.innerText())){span.parentNode.removeChild(span)}})}});me.addListener(\"contentchange\",function(){adjustListStyle(me.document)});function adjustListStyle(doc,ignore){utils.each(domUtils.getElementsByTagName(doc,\"ol ul\"),function(node){if(!domUtils.inDoc(node,doc))return;var parent=node.parentNode;if(parent.tagName===node.tagName){var nodeStyleType=getStyle(node)||(node.tagName===\"OL\"?\"decimal\":\"disc\"),parentStyleType=getStyle(parent)||(parent.tagName===\"OL\"?\"decimal\":\"disc\");if(nodeStyleType===parentStyleType){var styleIndex=utils.indexOf(listStyle[node.tagName],nodeStyleType);styleIndex=styleIndex+1===listStyle[node.tagName].length?0:styleIndex+1;setListStyle(node,listStyle[node.tagName][styleIndex])}}var index=0,type=2;if(domUtils.hasClass(node,/custom_/)){if(!(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/))){type=1}}else{if(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/)){type=3}}var style=domUtils.getStyle(node,\"list-style-type\");style&&(node.style.cssText=\"list-style-type:\"+style);node.className=utils.trim(node.className.replace(/list-paddingleft-\\w+/,\"\"))+\" list-paddingleft-\"+type;utils.each(domUtils.getElementsByTagName(node,\"li\"),function(li){li.style.cssText&&(li.style.cssText=\"\");if(!li.firstChild){domUtils.remove(li);return}if(li.parentNode!==node){return}index++;if(domUtils.hasClass(node,/custom_/)){var paddingLeft=1,currentStyle=getStyle(node);if(node.tagName===\"OL\"){if(currentStyle){switch(currentStyle){case\"cn\":case\"cn1\":case\"cn2\":if(index>10&&(index%10===0||index>10&&index<20)){paddingLeft=2}else if(index>20){paddingLeft=3}break;case\"num2\":if(index>9){paddingLeft=2}}}li.className=\"list-\"+currentStyle+\"-paddingleft-\"+paddingLeft}else{li.className=\"list-\"+currentStyle+\"-paddingleft\"}}else{li.className=li.className.replace(/list-[\\w\\-]+/gi,\"\")}var className=li.getAttribute(\"class\");if(className!==null&&!className.replace(/\\s/g,\"\")){domUtils.removeAttributes(li,\"class\")}});!ignore&&adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node,\"list-style-type\"),true)})}function adjustList(list,tag,style,ignoreEmpty){var nextList=list.nextSibling;if(nextList&&nextList.nodeType===1&&nextList.tagName.toLowerCase()===tag&&(getStyle(nextList)||domUtils.getStyle(nextList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))==style){domUtils.moveChild(nextList,list);if(nextList.childNodes.length===0){domUtils.remove(nextList)}}if(nextList&&domUtils.isFillChar(nextList)){domUtils.remove(nextList)}var preList=list.previousSibling;if(preList&&preList.nodeType===1&&preList.tagName.toLowerCase()==tag&&(getStyle(preList)||domUtils.getStyle(preList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))===style){domUtils.moveChild(list,preList)}if(preList&&domUtils.isFillChar(preList)){domUtils.remove(preList)}!ignoreEmpty&&domUtils.isEmptyBlock(list)&&domUtils.remove(list);if(getStyle(list)){adjustListStyle(list.ownerDocument,true)}}function setListStyle(list,style){try{domUtils.setStyle(list,\"list-style-type\",style)}catch(e){}}function clearEmptySibling(node){var tmpNode=node.previousSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}tmpNode=node.nextSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}}me.addListener(\"keydown\",function(type,evt){function preventAndSave(){evt.preventDefault?evt.preventDefault():evt.returnValue=false;me.fireEvent(\"contentchange\");me.undoManger&&me.undoManger.save()}function findList(node,filterFn){while(node&&!domUtils.isBody(node)){if(filterFn(node)){return null}if(node.nodeType===1&&/[ou]l/i.test(node.tagName)){return node}node=node.parentNode}return null}var keyCode=evt.keyCode||evt.which;if(keyCode===13&&!evt.shiftKey){var rng=me.selection.getRange(),parent=domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true),li=domUtils.findParentByTagName(rng.startContainer,\"li\",true);if(parent&&parent.tagName!==\"PRE\"&&!li){var html=parent.innerHTML.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(/^\\s*1\\s*\\.[^\\d]/.test(html)){parent.innerHTML=html.replace(/^\\s*1\\s*\\./,\"\");rng.setStartAtLast(parent).collapse(true).select();me.__hasEnterExecCommand=true;me.execCommand(\"insertorderedlist\");me.__hasEnterExecCommand=false}}var range=me.selection.getRange(),start=findList(range.startContainer,function(node){return node.tagName===\"TABLE\"}),end=range.collapsed?start:findList(range.endContainer,function(node){return node.tagName===\"TABLE\"});if(start&&end&&start===end){if(!range.collapsed){start=domUtils.findParentByTagName(range.startContainer,\"li\",true);end=domUtils.findParentByTagName(range.endContainer,\"li\",true);if(start&&end&&start===end){range.deleteContents();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isEmptyBlock(li)){pre=li.previousSibling;next=li.nextSibling;p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);parentList=li.parentNode;if(pre&&next){range.setStart(next,0).collapse(true).select(true);domUtils.remove(li)}else{if(!pre&&!next||!pre){parentList.parentNode.insertBefore(p,parentList)}else{li.parentNode.parentNode.insertBefore(p,parentList.nextSibling)}domUtils.remove(li);if(!parentList.firstChild){domUtils.remove(parentList)}range.setStart(p,0).setCursor()}preventAndSave();return}}else{var tmpRange=range.cloneRange(),bk=tmpRange.collapse(false).createBookmark();range.deleteContents();tmpRange.moveToBookmark(bk);var li=domUtils.findParentByTagName(tmpRange.startContainer,\"li\",true);clearEmptySibling(li);tmpRange.select();preventAndSave();return}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){if(domUtils.isEmptyBlock(li)){bk=range.createBookmark();var parentList=li.parentNode;if(li!==parentList.lastChild){domUtils.breakParent(li,parentList);clearEmptySibling(li)}else{parentList.parentNode.insertBefore(li,parentList.nextSibling);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}if(!dtd.$list[li.parentNode.tagName]){if(!domUtils.isBlockElm(li.firstChild)){p=me.document.createElement(\"p\");li.parentNode.insertBefore(p,li);while(li.firstChild){p.appendChild(li.firstChild)}domUtils.remove(li)}else{domUtils.remove(li,true)}}range.moveToBookmark(bk).select()}else{var first=li.firstChild;if(!first||!domUtils.isBlockElm(first)){var p=me.document.createElement(\"p\");!li.firstChild&&domUtils.fillNode(me.document,p);while(li.firstChild){p.appendChild(li.firstChild)}li.appendChild(p);first=p}var span=me.document.createElement(\"span\");range.insertNode(span);domUtils.breakParent(span,li);var nextLi=span.nextSibling;first=nextLi.firstChild;if(!first){p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);nextLi.appendChild(p);first=p}if(domUtils.isEmptyNode(first)){first.innerHTML=\"\";domUtils.fillNode(me.document,first)}range.setStart(first,0).collapse(true).shrinkBoundary().select();domUtils.remove(span);var pre=nextLi.previousSibling;if(pre&&domUtils.isEmptyBlock(pre)){pre.innerHTML=\"<p></p>\";domUtils.fillNode(me.document,pre.firstChild)}}preventAndSave()}}}if(keyCode===8){range=me.selection.getRange();if(range.collapsed&&domUtils.isStartInblock(range)){tmpRange=range.cloneRange().trimBoundary();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isStartInblock(tmpRange)){start=domUtils.findParentByTagName(range.startContainer,\"p\",true);if(start&&start!==li.firstChild){var parentList=domUtils.findParentByTagName(start,[\"ol\",\"ul\"]);domUtils.breakParent(start,parentList);clearEmptySibling(start);me.fireEvent(\"contentchange\");range.setStart(start,0).setCursor(false,true);me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&(pre=li.previousSibling)){if(keyCode===46&&li.childNodes.length){return}if(dtd.$list[pre.tagName]){pre=pre.lastChild}me.undoManger&&me.undoManger.save();first=li.firstChild;if(domUtils.isBlockElm(first)){if(domUtils.isEmptyNode(first)){pre.appendChild(first);range.setStart(first,0).setCursor(false,true);while(li.firstChild){pre.appendChild(li.firstChild)}}else{span=me.document.createElement(\"span\");range.insertNode(span);if(domUtils.isEmptyBlock(pre)){pre.innerHTML=\"\"}domUtils.moveChild(li,pre);range.setStartBefore(span).collapse(true).select(true);domUtils.remove(span)}}else{if(domUtils.isEmptyNode(li)){var p=me.document.createElement(\"p\");pre.appendChild(p);range.setStart(p,0).setCursor()}else{range.setEnd(pre,pre.childNodes.length).collapse().select(true);while(li.firstChild){pre.appendChild(li.firstChild)}}}domUtils.remove(li);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&!li.previousSibling){var parentList=li.parentNode;var bk=range.createBookmark();if(domUtils.isTagNode(parentList.parentNode,\"ol ul\")){parentList.parentNode.insertBefore(li,parentList);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}else{while(li.firstChild){parentList.parentNode.insertBefore(li.firstChild,parentList)}domUtils.remove(li);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}range.moveToBookmark(bk).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}}}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==8){var rng=me.selection.getRange(),list;if(list=domUtils.findParentByTagName(rng.startContainer,[\"ol\",\"ul\"],true)){adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,\"list-style-type\"),true)}}});me.addListener(\"tabkeydown\",function(){var range=me.selection.getRange();function checkLevel(li){if(me.options.maxListLevel!=-1){var level=li.parentNode,levelNum=0;while(/[ou]l/i.test(level.tagName)){levelNum++;level=level.parentNode}if(levelNum>=me.options.maxListLevel){return true}}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var bk;if(range.collapsed){if(checkLevel(li))return true;var parentLi=li.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));index=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];setListStyle(list,currentStyle);if(domUtils.isStartInblock(range)){me.fireEvent(\"saveScene\");bk=range.createBookmark();parentLi.insertBefore(list,li);list.appendChild(li);adjustList(list,list.tagName.toLowerCase(),currentStyle);me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select(true);return true}}else{me.fireEvent(\"saveScene\");bk=range.createBookmark();for(var i=0,closeList,parents=domUtils.findParents(li),ci;ci=parents[i++];){if(domUtils.isTagNode(ci,\"ol ul\")){closeList=ci;break}}var current=li;if(bk.end){while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){if(checkLevel(current)){current=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList});continue}var parentLi=current.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));var currentIndex=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][currentIndex];setListStyle(list,currentStyle);parentLi.insertBefore(list,current);while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){li=current.nextSibling;list.appendChild(current);if(!li||domUtils.isTagNode(li,\"ol ul\")){if(li){while(li=li.firstChild){if(li.tagName==\"LI\"){break}}}else{li=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList})}break}current=li}adjustList(list,list.tagName.toLowerCase(),currentStyle);current=li}}me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select();return true}}});function getLi(start){while(start&&!domUtils.isBody(start)){if(start.nodeName==\"TABLE\"){return null}if(start.nodeName==\"LI\"){return start}start=start.parentNode}}me.commands[\"insertorderedlist\"]=me.commands[\"insertunorderedlist\"]={execCommand:function(command,style){if(!style){style=command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\"}var me=this,range=this.selection.getRange(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\",frag=me.document.createDocumentFragment();range.adjustmentBoundary().shrinkBoundary();var bko=range.createBookmark(true),start=getLi(me.document.getElementById(bko.start)),modifyStart=0,end=getLi(me.document.getElementById(bko.end)),modifyEnd=0,startParent,endParent,list,tmp;if(start||end){start&&(startParent=start.parentNode);if(!bko.end){end=start}end&&(endParent=end.parentNode);if(startParent===endParent){while(start!==end){tmp=start;start=start.nextSibling;if(!domUtils.isBlockElm(tmp.firstChild)){var p=me.document.createElement(\"p\");while(tmp.firstChild){p.appendChild(tmp.firstChild)}tmp.appendChild(p)}frag.appendChild(tmp)}tmp=me.document.createElement(\"span\");startParent.insertBefore(tmp,end);if(!domUtils.isBlockElm(end.firstChild)){p=me.document.createElement(\"p\");while(end.firstChild){p.appendChild(end.firstChild)}end.appendChild(p)}frag.appendChild(end);domUtils.breakParent(tmp,startParent);if(domUtils.isEmptyNode(tmp.previousSibling)){domUtils.remove(tmp.previousSibling)}if(domUtils.isEmptyNode(tmp.nextSibling)){domUtils.remove(tmp.nextSibling)}var nodeStyle=getStyle(startParent)||domUtils.getComputedStyle(startParent,\"list-style-type\")||(command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\");if(startParent.tagName.toLowerCase()==tag&&nodeStyle==style){for(var i=0,ci,tmpFrag=me.document.createDocumentFragment();ci=frag.firstChild;){if(domUtils.isTagNode(ci,\"ol ul\")){tmpFrag.appendChild(ci)}else{while(ci.firstChild){tmpFrag.appendChild(ci.firstChild);domUtils.remove(ci)}}}tmp.parentNode.insertBefore(tmpFrag,tmp)}else{list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);tmp.parentNode.insertBefore(list,tmp)}domUtils.remove(tmp);list&&adjustList(list,tag,style);range.moveToBookmark(bko).select();return}if(start){while(start){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{var tmpfrag=me.document.createDocumentFragment(),hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){var tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}startParent.parentNode.insertBefore(frag,startParent.nextSibling);if(domUtils.isEmptyNode(startParent)){range.setStartBefore(startParent);domUtils.remove(startParent)}else{range.setStartAfter(startParent)}modifyStart=1}if(end&&domUtils.inDoc(endParent,me.document)){start=endParent.firstChild;while(start&&start!==end){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{tmpfrag=me.document.createDocumentFragment();hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}var tmpDiv=domUtils.createElement(me.document,\"div\",{tmpDiv:1});domUtils.moveChild(end,tmpDiv);frag.appendChild(tmpDiv);domUtils.remove(end);endParent.parentNode.insertBefore(frag,endParent);range.setEndBefore(endParent);if(domUtils.isEmptyNode(endParent)){domUtils.remove(endParent)}modifyEnd=1}}if(!modifyStart){range.setStartBefore(me.document.getElementById(bko.start))}if(bko.end&&!modifyEnd){range.setEndAfter(me.document.getElementById(bko.end))}range.enlarge(true,function(node){return notExchange[node.tagName]});frag=me.document.createDocumentFragment();var bk=range.createBookmark(),current=domUtils.getNextDomNode(bk.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode,block=domUtils.isBlockElm;while(current&&current!==bk.end&&domUtils.getPosition(current,bk.end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd.li[current.tagName]){if(current.nodeType==1&&dtd.$list[current.tagName]){while(current.firstChild){frag.appendChild(current.firstChild)}tmpNode=domUtils.getNextDomNode(current,false,filterFn);domUtils.remove(current);current=tmpNode;continue}tmpNode=current;tmpRange.setStartBefore(current);while(current&&current!==bk.end&&(!block(current)||domUtils.isBookmarkNode(current))){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!notExchange[node.tagName]})}if(current&&block(current)){tmp=domUtils.getNextDomNode(tmpNode,false,filterFn);if(tmp&&domUtils.isBookmarkNode(tmp)){current=domUtils.getNextDomNode(tmp,false,filterFn);tmpNode=tmp}}tmpRange.setEndAfter(tmpNode);current=domUtils.getNextDomNode(tmpNode,false,filterFn);var li=range.document.createElement(\"li\");li.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(li)){var tmpNode=range.document.createElement(\"p\");while(li.firstChild){tmpNode.appendChild(li.firstChild)}li.appendChild(tmpNode)}frag.appendChild(li)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}range.moveToBookmark(bk).collapse(true);list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);range.insertNode(list);adjustList(list,tag,style);for(var i=0,ci,tmpDivs=domUtils.getElementsByTagName(list,\"div\");ci=tmpDivs[i++];){if(ci.getAttribute(\"tmpDiv\")){domUtils.remove(ci,true)}}range.moveToBookmark(bko).select()},queryCommandState:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath();for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){return 0}if(tag==ci.nodeName.toLowerCase()){return 1}}return 0},queryCommandValue:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath(),node;for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){node=null;break}if(tag==ci.nodeName.toLowerCase()){node=ci;break}}return node?getStyle(node)||domUtils.getComputedStyle(node,\"list-style-type\"):null}}};(function(){var sourceEditors={textarea:function(editor,holder){var textarea=holder.ownerDocument.createElement(\"textarea\");textarea.style.cssText=\"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\";if(browser.ie&&browser.version<8){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\";holder.onresize=function(){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\"}}holder.appendChild(textarea);return{setContent:function(content){textarea.value=content},getContent:function(){return textarea.value},select:function(){var range;if(browser.ie){range=textarea.createTextRange();range.collapse(true);range.select()}else{textarea.setSelectionRange(0,0);textarea.focus()}},dispose:function(){holder.removeChild(textarea);holder.onresize=null;textarea=null;holder=null},focus:function(){textarea.focus()},blur:function(){textarea.blur()}}},codemirror:function(editor,holder){var codeEditor=window.CodeMirror(holder,{mode:\"text/html\",tabMode:\"indent\",lineNumbers:true,lineWrapping:true,onChange:function(v){editor.sync();editor.fireEvent(\"contentchange\")}});var dom=codeEditor.getWrapperElement();dom.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;';codeEditor.getScrollerElement().style.cssText=\"position:absolute;left:0;top:0;width:100%;height:100%;\";codeEditor.refresh();return{getCodeMirror:function(){return codeEditor},setContent:function(content){codeEditor.setValue(content)},getContent:function(){return codeEditor.getValue()},select:function(){codeEditor.focus()},dispose:function(){holder.removeChild(dom);dom=null;codeEditor=null},focus:function(){codeEditor.focus()},blur:function(){codeEditor.setOption(\"readOnly\",true);codeEditor.setOption(\"readOnly\",false)}}}};UE.plugins[\"source\"]=function(){var me=this;var opt=this.options;var sourceMode=false;var sourceEditor;var orgSetContent;var orgFocus;var orgBlur;opt.sourceEditor=browser.ie?\"textarea\":opt.sourceEditor||\"codemirror\";me.setOpt({sourceEditorFirst:false});function createSourceEditor(holder){return sourceEditors[opt.sourceEditor==\"codemirror\"&&window.CodeMirror?\"codemirror\":\"textarea\"](me,holder)}var bakCssText;var oldGetContent,bakAddress;me.commands[\"source\"]={execCommand:function(){sourceMode=!sourceMode;if(sourceMode){bakAddress=me.selection.getRange().createAddress(false,true);me.undoManger&&me.undoManger.save(true);if(browser.gecko){me.body.contentEditable=false}bakCssText=me.iframe.style.cssText;me.iframe.style.cssText+=\"position:absolute;left:-32768px;top:-32768px;\";me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML);me.filterOutputRule(root);root.traversal(function(node){if(node.type==\"element\"){switch(node.tagName){case\"td\":case\"th\":case\"caption\":if(node.children&&node.children.length==1){if(node.firstChild().tagName==\"br\"){node.removeChild(node.firstChild())}}break;case\"pre\":node.innerText(node.innerText().replace(/&nbsp;/g,\" \"))}}});me.fireEvent(\"aftergetcontent\");var content=root.toHtml(true);sourceEditor=createSourceEditor(me.iframe.parentNode);sourceEditor.setContent(content);orgSetContent=me.setContent;me.setContent=function(html){var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();sourceEditor.setContent(html)};setTimeout(function(){sourceEditor.select();me.addListener(\"fullscreenchanged\",function(){try{sourceEditor.getCodeMirror().refresh()}catch(e){}})});oldGetContent=me.getContent;me.getContent=function(){return sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"};orgFocus=me.focus;orgBlur=me.blur;me.focus=function(){sourceEditor.focus()};me.blur=function(){orgBlur.call(me);sourceEditor.blur()}}else{me.iframe.style.cssText=bakCssText;var cont=sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";cont=cont.replace(new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\",\"g\"),function(a,b){if(b&&!dtd.$inlineWithA[b.toLowerCase()]){return a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g,\"\")}return a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g,\"\")});me.setContent=orgSetContent;me.setContent(cont);sourceEditor.dispose();sourceEditor=null;me.getContent=oldGetContent;me.focus=orgFocus;me.blur=orgBlur;var first=me.body.firstChild;if(!first){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";first=me.body.firstChild}me.undoManger&&me.undoManger.save(true);if(browser.gecko){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;left:0;top:-32768px\";document.body.appendChild(input);me.body.contentEditable=false;setTimeout(function(){domUtils.setViewportOffset(input,{left:-32768,top:0});input.focus();setTimeout(function(){me.body.contentEditable=true;me.selection.getRange().moveToAddress(bakAddress).select(true);domUtils.remove(input)})})}else{try{me.selection.getRange().moveToAddress(bakAddress).select(true)}catch(e){}}}this.fireEvent(\"sourcemodechanged\",sourceMode)},queryCommandState:function(){return sourceMode|0},notNeedUndo:1};var oldQueryCommandState=me.queryCommandState;me.queryCommandState=function(cmdName){cmdName=cmdName.toLowerCase();if(sourceMode){return cmdName in{source:1,fullscreen:1}?1:-1}return oldQueryCommandState.apply(this,arguments)};if(opt.sourceEditor==\"codemirror\"){me.addListener(\"ready\",function(){utils.loadFile(document,{src:opt.codeMirrorJsUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){if(opt.sourceEditorFirst){setTimeout(function(){me.execCommand(\"source\")},0)}});utils.loadFile(document,{tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:opt.codeMirrorCssUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.css?221123\"})})}}})();UE.plugins[\"enterkey\"]=function(){var hTag,me=this,tag=me.options.enterTag;me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var range=me.selection.getRange(),start=range.startContainer,doSave;if(!browser.ie){if(/h\\d/i.test(hTag)){if(browser.gecko){var h=domUtils.findParentByTagName(start,[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\",\"table\"],true);if(!h){me.document.execCommand(\"formatBlock\",false,\"<p>\");doSave=1}}else{if(start.nodeType==1){var tmp=me.document.createTextNode(\"\"),div;range.insertNode(tmp);div=domUtils.findParentByTagName(tmp,\"div\",true);if(div){var p=me.document.createElement(\"p\");while(div.firstChild){p.appendChild(div.firstChild)}div.parentNode.insertBefore(p,div);domUtils.remove(div);range.setStartBefore(tmp).setCursor();doSave=1}domUtils.remove(tmp)}}if(me.undoManger&&doSave){me.undoManger.save()}}browser.opera&&range.select()}else{me.fireEvent(\"saveScene\",true,true)}}});me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){if(me.fireEvent(\"beforeenterkeydown\")){domUtils.preventDefault(evt);return}me.fireEvent(\"saveScene\",true,true);hTag=\"\";var range=me.selection.getRange();if(!range.collapsed){var start=range.startContainer,end=range.endContainer,startTd=domUtils.findParentByTagName(start,\"td\",true),endTd=domUtils.findParentByTagName(end,\"td\",true);if(startTd&&endTd&&startTd!==endTd||!startTd&&endTd||startTd&&!endTd){evt.preventDefault?evt.preventDefault():evt.returnValue=false;return}}if(tag==\"p\"){if(!browser.ie){start=domUtils.findParentByTagName(range.startContainer,[\"ol\",\"ul\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\"],true);if(!start&&!browser.opera){me.document.execCommand(\"formatBlock\",false,\"<p>\");if(browser.gecko){range=me.selection.getRange();start=domUtils.findParentByTagName(range.startContainer,\"p\",true);start&&domUtils.removeDirtyAttr(start)}}else{hTag=start.tagName;start.tagName.toLowerCase()==\"p\"&&browser.gecko&&domUtils.removeDirtyAttr(start)}}}else{evt.preventDefault?evt.preventDefault():evt.returnValue=false;if(!range.collapsed){range.deleteContents();start=range.startContainer;if(start.nodeType==1&&(start=start.childNodes[range.startOffset])){while(start.nodeType==1){if(dtd.$empty[start.tagName]){range.setStartBefore(start).setCursor();if(me.undoManger){me.undoManger.save()}return false}if(!start.firstChild){var br=range.document.createElement(\"br\");start.appendChild(br);range.setStart(start,0).setCursor();if(me.undoManger){me.undoManger.save()}return false}start=start.firstChild}if(start===range.startContainer.childNodes[range.startOffset]){br=range.document.createElement(\"br\");range.insertNode(br).setCursor()}else{range.setStart(start,0).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br).setStartAfter(br).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br);var parent=br.parentNode;if(parent.lastChild===br){br.parentNode.insertBefore(br.cloneNode(true),br);range.setStartBefore(br)}else{range.setStartAfter(br)}range.setCursor()}}}})};UE.plugins[\"keystrokes\"]=function(){var me=this;var collapsed=true;me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng=me.selection.getRange();if(!rng.collapsed&&!(evt.ctrlKey||evt.shiftKey||evt.altKey||evt.metaKey)&&(keyCode>=65&&keyCode<=90||keyCode>=48&&keyCode<=57||keyCode>=96&&keyCode<=111||{13:1,8:1,46:1}[keyCode])){var tmpNode=rng.startContainer;if(domUtils.isFillChar(tmpNode)){rng.setStartBefore(tmpNode)}tmpNode=rng.endContainer;if(domUtils.isFillChar(tmpNode)){rng.setEndAfter(tmpNode)}rng.txtToElmBoundary();if(rng.endContainer&&rng.endContainer.nodeType==1){tmpNode=rng.endContainer.childNodes[rng.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){rng.setEndAfter(tmpNode)}}if(rng.startOffset==0){tmpNode=rng.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=rng.endContainer;if(rng.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.fireEvent(\"saveScene\");me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";rng.setStart(me.body.firstChild,0).setCursor(false,true);me._selectionChange();return}}}}if(keyCode==keymap.Backspace){rng=me.selection.getRange();collapsed=rng.collapsed;if(me.fireEvent(\"delkeydown\",evt)){return}var start,end;if(rng.collapsed&&rng.inFillChar()){start=rng.startContainer;if(domUtils.isFillChar(start)){rng.setStartBefore(start).shrinkBoundary(true).collapse(true);domUtils.remove(start)}else{start.nodeValue=start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\");rng.startOffset--;rng.collapse(true).select(true)}}if(start=rng.getClosedNode()){me.fireEvent(\"saveScene\");rng.setStartBefore(start);domUtils.remove(start);rng.setCursor();me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(!browser.ie){start=domUtils.findParentByTagName(rng.startContainer,\"table\",true);end=domUtils.findParentByTagName(rng.endContainer,\"table\",true);if(start&&!end||!start&&end||start!==end){evt.preventDefault();return}}}if(keyCode==keymap.Tab){var excludeTagNameForTabKey={ol:1,ul:1,table:1};if(me.fireEvent(\"tabkeydown\",evt)){domUtils.preventDefault(evt);return}var range=me.selection.getRange();me.fireEvent(\"saveScene\");for(var i=0,txt=\"\",tabSize=me.options.tabSize||4,tabNode=me.options.tabNode||\"&nbsp;\";i<tabSize;i++){txt+=tabNode}var span=me.document.createElement(\"span\");span.innerHTML=txt+domUtils.fillChar;if(range.collapsed){range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var filterFn=function(node){return domUtils.isBlockElm(node)&&!excludeTagNameForTabKey[node.tagName.toLowerCase()]};start=domUtils.findParent(range.startContainer,filterFn,true);end=domUtils.findParent(range.endContainer,filterFn,true);if(start&&end&&start===end){range.deleteContents();range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn);while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){current.insertBefore(span.cloneNode(true).firstChild,current.firstChild);current=domUtils.getNextDomNode(current,false,filterFn)}range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select()}}domUtils.preventDefault(evt)}if(browser.gecko&&keyCode==46){range=me.selection.getRange();if(range.collapsed){start=range.startContainer;if(domUtils.isEmptyBlock(start)){var parent=start.parentNode;while(domUtils.getChildCount(parent)==1&&!domUtils.isBody(parent)){start=parent;parent=parent.parentNode}if(start===parent.lastChild)evt.preventDefault();return}}}browser.chrome&&me.on(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;if((e.metaKey&&e.altKey||e.ctrlKey&&e.shiftKey)&&keyCode==73){return true}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng,me=this;if(keyCode==keymap.Backspace){if(me.fireEvent(\"delkeyup\")){return}rng=me.selection.getRange();if(rng.collapsed){var tmpNode,autoClearTagName=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];if(tmpNode=domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){if(domUtils.isEmptyBlock(tmpNode)){var pre=tmpNode.previousSibling;if(pre&&pre.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtLast(pre).setCursor(false,true);return}else{var next=tmpNode.nextSibling;if(next&&next.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtFirst(next).setCursor(false,true);return}}}}if(domUtils.isBody(rng.startContainer)){var tmpNode=domUtils.createElement(me.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true)}}if(!collapsed&&(rng.startContainer.nodeType==3||rng.startContainer.nodeType==1&&domUtils.isEmptyBlock(rng.startContainer))){if(browser.ie){var span=rng.document.createElement(\"span\");rng.insertNode(span).setStartBefore(span).collapse(true);rng.select();domUtils.remove(span)}else{rng.select()}}}})};UE.plugins[\"fiximgclick\"]=function(){var elementUpdated=false;function Scale(){this.editor=null;this.resizer=null;this.cover=null;this.doc=document;this.prePos={x:0,y:0};this.startPos={x:0,y:0}}(function(){var rect=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];Scale.prototype={init:function(editor){var me=this;me.editor=editor;me.startPos=this.prePos={x:0,y:0};me.dragId=-1;var hands=[],cover=me.cover=document.createElement(\"div\"),resizer=me.resizer=document.createElement(\"div\");cover.id=me.editor.ui.id+\"_imagescale_cover\";cover.style.cssText=\"position:absolute;display:none;z-index:\"+me.editor.options.zIndex+\";filter:alpha(opacity=0); opacity:0;background:#CCC;\";domUtils.on(cover,\"mousedown\",function(e){me.hide()});for(var i=0;i<8;i++){hands.push('<span class=\"edui-editor-imagescale-hand'+i+'\"></span>')}resizer.id=me.editor.ui.id+\"_imagescale\";resizer.className=\"edui-editor-imagescale\";resizer.innerHTML=hands.join(\"\");resizer.style.cssText+=\";display:none;border:1px solid #3b77ff;z-index:\"+me.editor.options.zIndex+\";\";me.editor.ui.getDom().appendChild(cover);me.editor.ui.getDom().appendChild(resizer);me.initStyle();me.initEvents()},initStyle:function(){utils.cssRule(\"imagescale\",\".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}\"+\".edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\")},initEvents:function(){var me=this;me.startPos.x=me.startPos.y=0;me.isDraging=false},_eventHandler:function(e){var me=this;switch(e.type){case\"mousedown\":var hand=e.target||e.srcElement,hand;if(hand.className.indexOf(\"edui-editor-imagescale-hand\")!==-1&&me.dragId===-1){me.dragId=hand.className.slice(-1);me.startPos.x=me.prePos.x=e.clientX;me.startPos.y=me.prePos.y=e.clientY;domUtils.on(me.doc,\"mousemove\",me.proxy(me._eventHandler,me))}break;case\"mousemove\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.prePos.x=e.clientX;me.prePos.y=e.clientY;elementUpdated=true;me.updateTargetElement()}break;case\"mouseup\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.updateTargetElement();if(me.target.parentNode){me.attachTo(me.target)}me.dragId=-1}domUtils.un(me.doc,\"mousemove\",me.proxy(me._eventHandler,me));if(elementUpdated){elementUpdated=false;me.editor.fireEvent(\"contentchange\")}break;default:break}},updateTargetElement:function(){var me=this;domUtils.setStyles(me.target,{width:me.resizer.style.width,height:me.resizer.style.height});me.target.width=parseInt(me.resizer.style.width);me.target.height=parseInt(me.resizer.style.height);me.attachTo(me.target)},updateContainerStyle:function(dir,offset){var me=this,dom=me.resizer,tmp;if(rect[dir][0]!=0){tmp=parseInt(dom.style.left)+offset.x;dom.style.left=me._validScaledProp(\"left\",tmp)+\"px\"}if(rect[dir][1]!=0){tmp=parseInt(dom.style.top)+offset.y;dom.style.top=me._validScaledProp(\"top\",tmp)+\"px\"}if(rect[dir][2]!=0){tmp=dom.clientWidth+rect[dir][2]*offset.x;dom.style.width=me._validScaledProp(\"width\",tmp)+\"px\"}if(rect[dir][3]!=0){tmp=dom.clientHeight+rect[dir][3]*offset.y;dom.style.height=me._validScaledProp(\"height\",tmp)+\"px\"}},_validScaledProp:function(prop,value){var ele=this.resizer,wrap=document;value=isNaN(value)?0:value;switch(prop){case\"left\":return value<0?0:value+ele.clientWidth>wrap.clientWidth?wrap.clientWidth-ele.clientWidth:value;case\"top\":return value<0?0:value+ele.clientHeight>wrap.clientHeight?wrap.clientHeight-ele.clientHeight:value;case\"width\":return value<=0?1:value+ele.offsetLeft>wrap.clientWidth?wrap.clientWidth-ele.offsetLeft:value;case\"height\":return value<=0?1:value+ele.offsetTop>wrap.clientHeight?wrap.clientHeight-ele.offsetTop:value}},hideCover:function(){this.cover.style.display=\"none\"},showCover:function(){var me=this,editorPos=domUtils.getXY(me.editor.ui.getDom()),iframePos=domUtils.getXY(me.editor.iframe);domUtils.setStyles(me.cover,{width:me.editor.iframe.offsetWidth+\"px\",height:me.editor.iframe.offsetHeight+\"px\",top:iframePos.y-editorPos.y+\"px\",left:iframePos.x-editorPos.x+\"px\",position:\"absolute\",display:\"\"})},show:function(targetObj){var me=this;me.resizer.style.display=\"block\";if(targetObj){me.attachTo(targetObj)}domUtils.on(this.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.on(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.showCover();me.editor.fireEvent(\"afterscaleshow\",me);me.editor.fireEvent(\"saveScene\")},hide:function(){var me=this;me.hideCover();me.resizer.style.display=\"none\";domUtils.un(me.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.un(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.editor.fireEvent(\"afterscalehide\",me)},proxy:function(fn,context){return function(e){return fn.apply(context||this,arguments)}},attachTo:function(targetObj){var me=this,target=me.target=targetObj,resizer=this.resizer,imgPos=domUtils.getXY(target),iframePos=domUtils.getXY(me.editor.iframe),editorPos=domUtils.getXY(resizer.parentNode);domUtils.setStyles(resizer,{width:target.width+\"px\",height:target.height+\"px\",left:iframePos.x+imgPos.x-me.editor.getScrollLeft()-editorPos.x-parseInt(resizer.style.borderLeftWidth)+\"px\",top:iframePos.y+imgPos.y-me.editor.getScrollTop()-editorPos.y-parseInt(resizer.style.borderTopWidth)+\"px\"})}}})();return function(){var me=this,imageScale;me.setOpt(\"imageScaleEnabled\",true);if(!browser.ie&&me.options.imageScaleEnabled){me.addListener(\"click\",function(type,e){var range=me.selection.getRange(),img=range.getClosedNode();if(img&&img.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"&&img===e.target){if(img.getAttribute(\"anchorname\")||domUtils.hasClass(img,\"uep-loading\")||domUtils.hasClass(img,\"uep-loading-error\")){return}if(!imageScale){imageScale=new Scale;imageScale.init(me);me.ui.getDom().appendChild(imageScale.resizer);var _keyDownHandler=function(e){imageScale.hide();if(imageScale.target){me.selection.getRange().selectNode(imageScale.target).select()}},_mouseDownHandler=function(e){var ele=e.target||e.srcElement;if(ele&&(ele.className===undefined||ele.className.indexOf(\"edui-editor-imagescale\")===-1)){_keyDownHandler(e)}},timer;me.addListener(\"afterscaleshow\",function(e){me.addListener(\"beforekeydown\",_keyDownHandler);me.addListener(\"beforemousedown\",_mouseDownHandler);domUtils.on(document,\"keydown\",_keyDownHandler);domUtils.on(document,\"mousedown\",_mouseDownHandler);me.selection.getNative().removeAllRanges()});me.addListener(\"afterscalehide\",function(e){me.removeListener(\"beforekeydown\",_keyDownHandler);me.removeListener(\"beforemousedown\",_mouseDownHandler);domUtils.un(document,\"keydown\",_keyDownHandler);domUtils.un(document,\"mousedown\",_mouseDownHandler);var target=imageScale.target;if(target.parentNode){me.selection.getRange().selectNode(target).select()}});domUtils.on(imageScale.resizer,\"mousedown\",function(e){me.selection.getNative().removeAllRanges();var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){timer=setTimeout(function(){imageScale.hide();if(imageScale.target)me.selection.getRange().selectNode(ele).select()},200)}});domUtils.on(imageScale.resizer,\"mouseup\",function(e){var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){clearTimeout(timer)}})}imageScale.show(img)}else{if(imageScale&&imageScale.resizer.style.display!==\"none\"){imageScale.hide()}}})}if(browser.webkit){me.addListener(\"click\",function(type,e){if(e.target.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"){var range=new dom.Range(me.document);range.selectNode(e.target).select()}})}}}();UE.plugin.register(\"autolink\",function(){var cont=0;return!browser.ie?{bindEvents:{reset:function(){cont=0},keydown:function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var sel=me.selection.getNative(),range=sel.getRangeAt(0).cloneRange(),offset,charCode;var start=range.startContainer;while(start.nodeType==1&&range.startOffset>0){start=range.startContainer.childNodes[range.startOffset-1];if(!start){break}range.setStart(start,start.nodeType==1?start.childNodes.length:start.nodeValue.length);range.collapse(true);start=range.startContainer}do{if(range.startOffset==0){start=range.startContainer.previousSibling;while(start&&start.nodeType==1){start=start.lastChild}if(!start||domUtils.isFillChar(start)){break}offset=start.nodeValue.length}else{start=range.startContainer;offset=range.startOffset}range.setStart(start,offset-1);charCode=range.toString().charCodeAt(0)}while(charCode!=160&&charCode!=32);if(range.toString().replace(new RegExp(domUtils.fillChar,\"g\"),\"\").match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)){while(range.toString().length){if(/^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(range.toString())){break}try{range.setStart(range.startContainer,range.startOffset+1)}catch(e){var start=range.startContainer;while(!(next=start.nextSibling)){if(domUtils.isBody(start)){return}start=start.parentNode}range.setStart(next,0)}}if(domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}var a=me.document.createElement(\"a\"),text=me.document.createTextNode(\" \"),href;me.undoManger&&me.undoManger.save();a.appendChild(range.extractContents());a.href=a.innerHTML=a.innerHTML.replace(/<[^>]+>/g,\"\");href=a.getAttribute(\"href\").replace(new RegExp(domUtils.fillChar,\"g\"),\"\");href=/^(?:https?:\\/\\/)/gi.test(href)?href:\"http://\"+href;a.setAttribute(\"_src\",utils.html(href));a.href=utils.html(href);range.insertNode(a);a.parentNode.insertBefore(text,a.nextSibling);range.setStart(text,0);range.collapse(true);sel.removeAllRanges();sel.addRange(range);me.undoManger&&me.undoManger.save()}}}}}:{}},function(){var keyCodes={37:1,38:1,39:1,40:1,13:1,32:1};function checkIsCludeLink(node){if(node.nodeType==3){return null}if(node.nodeName==\"A\"){return node}var lastChild=node.lastChild;while(lastChild){if(lastChild.nodeName==\"A\"){return lastChild}if(lastChild.nodeType==3){if(domUtils.isWhitespace(lastChild)){lastChild=lastChild.previousSibling;continue}return null}lastChild=lastChild.lastChild}}browser.ie&&this.addListener(\"keyup\",function(cmd,evt){var me=this,keyCode=evt.keyCode;if(keyCodes[keyCode]){var rng=me.selection.getRange();var start=rng.startContainer;if(keyCode==13){while(start&&!domUtils.isBody(start)&&!domUtils.isBlockElm(start)){start=start.parentNode}if(start&&!domUtils.isBody(start)&&start.nodeName==\"P\"){var pre=start.previousSibling;if(pre&&pre.nodeType==1){var pre=checkIsCludeLink(pre);if(pre&&!pre.getAttribute(\"_href\")){domUtils.remove(pre,true)}}}}else if(keyCode==32){if(start.nodeType==3&&/^\\s$/.test(start.nodeValue)){start=start.previousSibling;if(start&&start.nodeName==\"A\"&&!start.getAttribute(\"_href\")){domUtils.remove(start,true)}}}else{start=domUtils.findParentByTagName(start,\"a\",true);if(start&&!start.getAttribute(\"_href\")){var bk=rng.createBookmark();domUtils.remove(start,true);rng.moveToBookmark(bk).select(true)}}}})});UE.plugins[\"autoheight\"]=function(){var me=this;me.autoHeightEnabled=me.options.autoHeightEnabled!==false;if(!me.autoHeightEnabled){return}var bakOverflow,lastHeight=0,options=me.options,currentHeight,timer;function adjustHeight(){var me=this;clearTimeout(timer);if(isFullscreen)return;if(!me.queryCommandState||me.queryCommandState&&me.queryCommandState(\"source\")!=1){timer=setTimeout(function(){var node=me.body.lastChild;while(node&&node.nodeType!=1){node=node.previousSibling}if(node&&node.nodeType==1){node.style.clear=\"both\";currentHeight=Math.max(domUtils.getXY(node).y+node.offsetHeight+25,Math.max(options.minFrameHeight,options.initialFrameHeight));if(currentHeight!==lastHeight){me.iframe.parentNode.style.transition=\"width 0.3s, height 0.3s, easy-in-out\";if(currentHeight!==parseInt(me.iframe.parentNode.style.height)){me.iframe.parentNode.style.height=currentHeight+\"px\"}me.body.style.height=currentHeight+\"px\";lastHeight=currentHeight}domUtils.removeStyle(node,\"clear\")}},50)}}var isFullscreen;me.addListener(\"fullscreenchanged\",function(cmd,f){isFullscreen=f});me.addListener(\"destroy\",function(){domUtils.un(me.window,\"scroll\",fixedScrollTop);me.removeListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight)});me.enableAutoHeight=function(){var me=this;if(!me.autoHeightEnabled){return}var doc=me.document;me.autoHeightEnabled=true;bakOverflow=doc.body.style.overflowY;doc.body.style.overflowY=\"hidden\";me.addListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight);setTimeout(function(){adjustHeight.call(me)},browser.gecko?100:0);me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.disableAutoHeight=function(){me.body.style.overflowY=bakOverflow||\"\";me.removeListener(\"contentchange\",adjustHeight);me.removeListener(\"keyup\",adjustHeight);me.removeListener(\"mouseup\",adjustHeight);me.autoHeightEnabled=false;me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.on(\"setHeight\",function(){me.disableAutoHeight()});me.addListener(\"ready\",function(){me.enableAutoHeight();var timer;domUtils.on(browser.ie?me.body:me.document,browser.webkit?\"dragover\":\"drop\",function(){clearTimeout(timer);timer=setTimeout(function(){adjustHeight.call(me)},100)});domUtils.on(me.window,\"scroll\",fixedScrollTop)});var lastScrollY;function fixedScrollTop(){if(!me.window)return;if(lastScrollY===null){lastScrollY=me.window.scrollY}else if(me.window.scrollY==0&&lastScrollY!=0){me.window.scrollTo(0,0);lastScrollY=null}}};UE.plugins[\"autofloat\"]=function(){var me=this,lang=me.getLang();me.setOpt({topOffset:0});var optsAutoFloatEnabled=me.options.autoFloatEnabled!==false,topOffset=me.options.topOffset;if(!optsAutoFloatEnabled){return}var uiUtils=UE.ui.uiUtils,LteIE6=browser.ie&&browser.version<=6,quirks=browser.quirks;function checkHasUI(){if(!UE.ui){alert(lang.autofloatMsg);return 0}return 1}function fixIE6FixedPos(){var docStyle=document.body.style;docStyle.backgroundImage='url(\"about:blank\")';docStyle.backgroundAttachment=\"fixed\"}var bakCssText,placeHolder=document.createElement(\"div\"),toolbarBox,orgTop,getPosition,flag=true;function setFloating(){var toobarBoxPos=domUtils.getXY(toolbarBox),origalFloat=domUtils.getComputedStyle(toolbarBox,\"position\"),origalLeft=domUtils.getComputedStyle(toolbarBox,\"left\");toolbarBox.style.width=toolbarBox.offsetWidth+\"px\";toolbarBox.style.zIndex=me.options.zIndex*1+1;toolbarBox.parentNode.insertBefore(placeHolder,toolbarBox);if(LteIE6||quirks&&browser.ie){if(toolbarBox.style.position!=\"absolute\"){toolbarBox.style.position=\"absolute\"}toolbarBox.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-orgTop+topOffset+\"px\"}else{if(browser.ie7Compat&&flag){flag=false;toolbarBox.style.left=domUtils.getXY(toolbarBox).x-document.documentElement.getBoundingClientRect().left+2+\"px\"}if(toolbarBox.style.position!=\"fixed\"){toolbarBox.style.position=\"fixed\";toolbarBox.style.top=topOffset+\"px\";(origalFloat==\"absolute\"||origalFloat==\"relative\")&&parseFloat(origalLeft)&&(toolbarBox.style.left=toobarBoxPos.x+\"px\")}}}function unsetFloating(){flag=true;if(placeHolder.parentNode){placeHolder.parentNode.removeChild(placeHolder)}toolbarBox.style.cssText=bakCssText}me.unsetFloating=unsetFloating;function updateFloating(){var rect3=getPosition(me.container);var offset=me.options.toolbarTopOffset||0;if(rect3.top<0&&rect3.bottom-toolbarBox.offsetHeight>offset){setFloating()}else{unsetFloating()}}var defer_updateFloating=utils.defer(function(){updateFloating()},browser.ie?200:100,true);me.addListener(\"destroy\",function(){domUtils.un(window,[\"scroll\",\"resize\"],updateFloating);me.removeListener(\"keydown\",defer_updateFloating)});me.addListener(\"ready\",function(){if(checkHasUI(me)){if(!me.ui){return}getPosition=uiUtils.getClientRect;toolbarBox=me.ui.getDom(\"toolbarbox\");orgTop=getPosition(toolbarBox).top;bakCssText=toolbarBox.style.cssText;placeHolder.style.height=toolbarBox.offsetHeight+\"px\";if(LteIE6){fixIE6FixedPos()}domUtils.on(window,[\"scroll\",\"resize\"],updateFloating);me.addListener(\"keydown\",defer_updateFloating);me.addListener(\"beforefullscreenchange\",function(t,enabled){if(enabled){unsetFloating()}});me.addListener(\"fullscreenchanged\",function(t,enabled){if(!enabled){updateFloating()}});me.addListener(\"sourcemodechanged\",function(t,enabled){setTimeout(function(){updateFloating()},0)});me.addListener(\"clearDoc\",function(){setTimeout(function(){updateFloating()},0)})}})};UE.plugins[\"video\"]=function(){var me=this;function creatInsertStr(url,width,height,id,align,classname,type){var str;switch(type){case\"iframe\":str='<iframe class=\"'+classname+'\" '+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+\" frameborder=0 allowfullscreen>\";break;case\"image\":str=\"<img \"+(id?'id=\"'+id+'\"':\"\")+' width=\"'+width+'\" height=\"'+height+'\" _url=\"'+url+'\" class=\"'+'\"'+' src=\"'+me.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" style=\"background:url('+me.options.UEDITOR_HOME_URL+\"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\"+(align?\"float:\"+align+\";\":\"\")+'\" />';break;case\"embed\":str='<embed type=\"application/x-shockwave-flash\" class=\"'+classname+'\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"'+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+(align?' style=\"float:'+align+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';break;case\"video\":var ext=url.substr(url.lastIndexOf(\".\")+1);if(ext==\"ogv\")ext=\"ogg\";str=\"<video\"+(id?' id=\"'+id+'\"':\"\")+' class=\"'+classname+'\" '+(align?' style=\"float:'+align+'\"':\"\")+' controls preload=\"none\" width=\"'+width+'\" height=\"'+height+'\" src=\"'+url+'\" data-setup=\"{}\">'+'<source src=\"'+url+'\" type=\"video/'+ext+'\" /></video>';break}return str}function switchImgAndVideo(root,img2video){utils.each(root.getNodesByTagName(img2video?\"img\":\"embed video\"),function(node){var className=node.getAttr(\"class\");if(className&&className.indexOf(\"edui-faked-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"embed\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}if(className&&className.indexOf(\"edui-upload-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"video\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}})}me.addOutputRule(function(root){switchImgAndVideo(root,true)});me.addInputRule(function(root){switchImgAndVideo(root)});me.commands[\"insertvideo\"]={execCommand:function(cmd,videoObjs,type){videoObjs=utils.isArray(videoObjs)?videoObjs:[videoObjs];if(me.fireEvent(\"beforeinsertvideo\",videoObjs)===true){return}var html=[],id=\"tmpVideo\",cl;for(var i=0,vi,len=videoObjs.length;i<len;i++){vi=videoObjs[i];var videoType=\"iframe\";if(vi.url.match(/.mp4$/)){videoType=\"video\"}cl=videoType==\"iframe\"?\"edui-video-iframe\":\"edui-video-video\";html.push(creatInsertStr(vi.url,vi.width||420,vi.height||280,id+i,null,cl,videoType))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertvideo\",videoObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-video-iframe\"||img.className.indexOf(\"edui-video-iframe\")!=-1||img.className==\"edui-video-video\"||img.className.indexOf(\"edui-video-video\")!=-1);return flag?1:0}}};UE.plugins[\"audio\"]=function(){var me=this;function createAudioHtml(url,param){param=param||{};var str=[\"<audio\",param.id?' id=\"'+param.id+'\"':\"\",param.cls?' class=\"'+param.cls+'\"':\"\",\" controls >\",'<source src=\"'+url+'\" type=\"audio/mpeg'+'\" />',\"</audio>\"];return str.join(\"\")}function switchImgAndAudio(root,img2audio){}me.addOutputRule(function(root){switchImgAndAudio(root,true)});me.addInputRule(function(root){switchImgAndAudio(root)});me.commands[\"insertaudio\"]={execCommand:function(cmd,audioObjs,type){audioObjs=utils.isArray(audioObjs)?audioObjs:[audioObjs];if(me.fireEvent(\"beforeinsertaudio\",audioObjs)===true){return}var html=[];for(var i=0,vi,len=audioObjs.length;i<len;i++){vi=audioObjs[i];html.push(createAudioHtml(vi.url,{cls:\"edui-audio-audio\"}))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertaudio\",audioObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-audio-audio\"||img.className.indexOf(\"edui-audio-audio\")!=-1);return flag?1:0}}};(function(){var UETable=UE.UETable=function(table){this.table=table;this.indexTable=[];this.selectedTds=[];this.cellsRange={};this.update(table)};UETable.removeSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.removeClasses(cell,\"selectTdClass\")})};UETable.addSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.addClass(cell,\"selectTdClass\")})};UETable.isEmptyBlock=function(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var i in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(i)){if(node.getElementsByTagName(i).length){return 0}}return 1};UETable.getWidth=function(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)};UETable.getTableCellAlignState=function(cells){!utils.isArray(cells)&&(cells=[cells]);var result={},status=[\"align\",\"valign\"],tempStatus=null,isSame=true;utils.each(cells,function(cellNode){utils.each(status,function(currentState){tempStatus=cellNode.getAttribute(currentState);if(!result[currentState]&&tempStatus){result[currentState]=tempStatus}else if(!result[currentState]||tempStatus!==result[currentState]){isSame=false;return false}});return isSame});return isSame?result:null};UETable.getTableItemsByRange=function(editor){var start=editor.selection.getStart();if(start&&start.id&&start.id.indexOf(\"_baidu_bookmark_start_\")===0&&start.nextSibling){start=start.nextSibling}var cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\"],true),tr=cell&&cell.parentNode,table=tr&&domUtils.findParentByTagName(tr,[\"table\"]),caption=table&&table.getElementsByTagName(\"caption\")[0];return{cell:cell,tr:tr,table:table,caption:caption}};UETable.getUETableBySelected=function(editor){var table=UETable.getTableItemsByRange(editor).table;if(table&&table.ueTable&&table.ueTable.selectedTds.length){return table.ueTable}return null};UETable.getDefaultValue=function(editor,table){var borderMap={thin:\"0px\",medium:\"1px\",thick:\"2px\"},tableBorder,tdPadding,tdBorder,tmpValue;if(!table){table=editor.document.createElement(\"table\");table.insertRow(0).insertCell(0).innerHTML=\"xxx\";editor.body.appendChild(table);var td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);domUtils.remove(table);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}else{td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}};UETable.getUETable=function(tdOrTable){var tag=tdOrTable.tagName.toLowerCase();tdOrTable=tag==\"td\"||tag==\"th\"||tag==\"caption\"?domUtils.findParentByTagName(tdOrTable,\"table\",true):tdOrTable;if(!tdOrTable.ueTable){tdOrTable.ueTable=new UETable(tdOrTable)}return tdOrTable.ueTable};UETable.cloneCell=function(cell,ignoreMerge,keepPro){if(!cell||utils.isString(cell)){return this.table.ownerDocument.createElement(cell||\"td\")}var flag=domUtils.hasClass(cell,\"selectTdClass\");flag&&domUtils.removeClasses(cell,\"selectTdClass\");var tmpCell=cell.cloneNode(true);if(ignoreMerge){tmpCell.rowSpan=tmpCell.colSpan=1}!keepPro&&domUtils.removeAttributes(tmpCell,\"width height\");!keepPro&&domUtils.removeAttributes(tmpCell,\"style\");tmpCell.style.borderLeftStyle=\"\";tmpCell.style.borderTopStyle=\"\";tmpCell.style.borderLeftColor=cell.style.borderRightColor;tmpCell.style.borderLeftWidth=cell.style.borderRightWidth;tmpCell.style.borderTopColor=cell.style.borderBottomColor;tmpCell.style.borderTopWidth=cell.style.borderBottomWidth;flag&&domUtils.addClass(cell,\"selectTdClass\");return tmpCell};UETable.prototype={getMaxRows:function(){var rows=this.table.rows,maxLen=1;for(var i=0,row;row=rows[i];i++){var currentMax=1;for(var j=0,cj;cj=row.cells[j++];){currentMax=Math.max(cj.rowSpan||1,currentMax)}maxLen=Math.max(currentMax+i,maxLen)}return maxLen},getMaxCols:function(){var rows=this.table.rows,maxLen=0,cellRows={};for(var i=0,row;row=rows[i];i++){var cellsNum=0;for(var j=0,cj;cj=row.cells[j++];){cellsNum+=cj.colSpan||1;if(cj.rowSpan&&cj.rowSpan>1){for(var k=1;k<cj.rowSpan;k++){if(!cellRows[\"row_\"+(i+k)]){cellRows[\"row_\"+(i+k)]=cj.colSpan||1}else{cellRows[\"row_\"+(i+k)]++}}}}cellsNum+=cellRows[\"row_\"+i]||0;maxLen=Math.max(cellsNum,maxLen)}return maxLen},getCellColIndex:function(cell){},getHSideCell:function(cell,right){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!right&&(!len?!cellInfo.colIndex:!range.beginColIndex)||right&&(!len?cellInfo.colIndex==this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!len?cellInfo.rowIndex:range.beginRowIndex;previewColIndex=!right?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex+1:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},getTabNextCell:function(cell,preRowIndex){var cellInfo=this.getCellInfo(cell),rowIndex=preRowIndex||cellInfo.rowIndex,colIndex=cellInfo.colIndex+1+(cellInfo.colSpan-1),nextCell;try{nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){try{rowIndex=rowIndex*1+1;colIndex=0;nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){}}return nextCell},getVSideCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getSameEndPosCells:function(cell,xOrY){try{var flag=xOrY.toLowerCase()===\"x\",end=domUtils.getXY(cell)[flag?\"x\":\"y\"]+cell[\"offset\"+(flag?\"Width\":\"Height\")],rows=this.table.rows,cells=null,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpEnd=domUtils.getXY(tmpCell)[flag?\"x\":\"y\"]+tmpCell[\"offset\"+(flag?\"Width\":\"Height\")];if(tmpEnd>end&&flag)break;if(cell==tmpCell||end==tmpEnd){if(tmpCell[flag?\"colSpan\":\"rowSpan\"]==1){returns.push(tmpCell)}if(flag)break}}}return returns}catch(e){showError(e)}},setCellContent:function(cell,content){cell.innerHTML=content||(browser.ie?domUtils.fillChar:\"<br />\")},cloneCell:UETable.cloneCell,getSameStartPosXCells:function(cell){try{var start=domUtils.getXY(cell).x+cell.offsetWidth,rows=this.table.rows,cells,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpStart=domUtils.getXY(tmpCell).x;if(tmpStart>start)break;if(tmpStart==start&&tmpCell.colSpan==1){returns.push(tmpCell);break}}}return returns}catch(e){showError(e)}},update:function(table){this.table=table||this.table;this.selectedTds=[];this.cellsRange={};this.indexTable=[];var rows=this.table.rows,rowsNum=this.getMaxRows(),dNum=rowsNum-rows.length,colsNum=this.getMaxCols();while(dNum--){this.table.insertRow(rows.length)}this.rowsNum=rowsNum;this.colsNum=colsNum;for(var i=0,len=rows.length;i<len;i++){this.indexTable[i]=new Array(colsNum)}for(var rowIndex=0,row;row=rows[rowIndex];rowIndex++){for(var cellIndex=0,cell,cells=row.cells;cell=cells[cellIndex];cellIndex++){if(cell.rowSpan>rowsNum){cell.rowSpan=rowsNum}var colIndex=cellIndex,rowSpan=cell.rowSpan||1,colSpan=cell.colSpan||1;while(this.indexTable[rowIndex][colIndex])colIndex++;for(var j=0;j<rowSpan;j++){for(var k=0;k<colSpan;k++){this.indexTable[rowIndex+j][colIndex+k]={rowIndex:rowIndex,cellIndex:cellIndex,colIndex:colIndex,rowSpan:rowSpan,colSpan:colSpan}}}}}for(j=0;j<rowsNum;j++){for(k=0;k<colsNum;k++){if(this.indexTable[j][k]===undefined){row=rows[j];cell=row.cells[row.cells.length-1];cell=cell?cell.cloneNode(true):this.table.ownerDocument.createElement(\"td\");this.setCellContent(cell);if(cell.colSpan!==1)cell.colSpan=1;if(cell.rowSpan!==1)cell.rowSpan=1;row.appendChild(cell);this.indexTable[j][k]={rowIndex:j,cellIndex:cell.cellIndex,colIndex:k,rowSpan:1,colSpan:1}}}}var tds=domUtils.getElementsByTagName(this.table,\"td\"),selectTds=[];utils.each(tds,function(td){if(domUtils.hasClass(td,\"selectTdClass\")){selectTds.push(td)}});if(selectTds.length){var start=selectTds[0],end=selectTds[selectTds.length-1],startInfo=this.getCellInfo(start),endInfo=this.getCellInfo(end);this.selectedTds=selectTds;this.cellsRange={beginRowIndex:startInfo.rowIndex,beginColIndex:startInfo.colIndex,endRowIndex:endInfo.rowIndex+endInfo.rowSpan-1,endColIndex:endInfo.colIndex+endInfo.colSpan-1}}if(!domUtils.hasClass(this.table.rows[0],\"firstRow\")){domUtils.addClass(this.table.rows[0],\"firstRow\");for(var i=1;i<this.table.rows.length;i++){domUtils.removeClasses(this.table.rows[i],\"firstRow\")}}},getCellInfo:function(cell){if(!cell)return;var cellIndex=cell.cellIndex,rowIndex=cell.parentNode.rowIndex,rowInfo=this.indexTable[rowIndex],numCols=this.colsNum;for(var colIndex=cellIndex;colIndex<numCols;colIndex++){var cellInfo=rowInfo[colIndex];if(cellInfo.rowIndex===rowIndex&&cellInfo.cellIndex===cellIndex){return cellInfo}}},getCell:function(rowIndex,cellIndex){return rowIndex<this.rowsNum&&this.table.rows[rowIndex].cells[cellIndex]||null},deleteCell:function(cell,rowIndex){rowIndex=typeof rowIndex==\"number\"?rowIndex:cell.parentNode.rowIndex;var row=this.table.rows[rowIndex];row.deleteCell(cell.cellIndex)},getCellsRange:function(cellA,cellB){function checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex){var tmpBeginRowIndex=beginRowIndex,tmpBeginColIndex=beginColIndex,tmpEndRowIndex=endRowIndex,tmpEndColIndex=endColIndex,cellInfo,colIndex,rowIndex;if(beginRowIndex>0){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[beginRowIndex][colIndex];rowIndex=cellInfo.rowIndex;if(rowIndex<beginRowIndex){tmpBeginRowIndex=Math.min(rowIndex,tmpBeginRowIndex)}}}if(endColIndex<me.colsNum){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][endColIndex];colIndex=cellInfo.colIndex+cellInfo.colSpan-1;if(colIndex>endColIndex){tmpEndColIndex=Math.max(colIndex,tmpEndColIndex)}}}if(endRowIndex<me.rowsNum){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[endRowIndex][colIndex];rowIndex=cellInfo.rowIndex+cellInfo.rowSpan-1;if(rowIndex>endRowIndex){tmpEndRowIndex=Math.max(rowIndex,tmpEndRowIndex)}}}if(beginColIndex>0){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][beginColIndex];colIndex=cellInfo.colIndex;if(colIndex<beginColIndex){tmpBeginColIndex=Math.min(cellInfo.colIndex,tmpBeginColIndex)}}}if(tmpBeginRowIndex!=beginRowIndex||tmpBeginColIndex!=beginColIndex||tmpEndRowIndex!=endRowIndex||tmpEndColIndex!=endColIndex){return checkRange(tmpBeginRowIndex,tmpBeginColIndex,tmpEndRowIndex,tmpEndColIndex)}else{return{beginRowIndex:beginRowIndex,beginColIndex:beginColIndex,endRowIndex:endRowIndex,endColIndex:endColIndex}}}try{var me=this,cellAInfo=me.getCellInfo(cellA);if(cellA===cellB){return{beginRowIndex:cellAInfo.rowIndex,beginColIndex:cellAInfo.colIndex,endRowIndex:cellAInfo.rowIndex+cellAInfo.rowSpan-1,endColIndex:cellAInfo.colIndex+cellAInfo.colSpan-1}}var cellBInfo=me.getCellInfo(cellB);var beginRowIndex=Math.min(cellAInfo.rowIndex,cellBInfo.rowIndex),beginColIndex=Math.min(cellAInfo.colIndex,cellBInfo.colIndex),endRowIndex=Math.max(cellAInfo.rowIndex+cellAInfo.rowSpan-1,cellBInfo.rowIndex+cellBInfo.rowSpan-1),endColIndex=Math.max(cellAInfo.colIndex+cellAInfo.colSpan-1,cellBInfo.colIndex+cellBInfo.colSpan-1);return checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex)}catch(e){}},getCells:function(range){this.clearSelected();var beginRowIndex=range.beginRowIndex,beginColIndex=range.beginColIndex,endRowIndex=range.endRowIndex,endColIndex=range.endColIndex,cellInfo,rowIndex,colIndex,tdHash={},returnTds=[];for(var i=beginRowIndex;i<=endRowIndex;i++){for(var j=beginColIndex;j<=endColIndex;j++){cellInfo=this.indexTable[i][j];rowIndex=cellInfo.rowIndex;colIndex=cellInfo.colIndex;var key=rowIndex+\"|\"+colIndex;if(tdHash[key])continue;tdHash[key]=1;if(rowIndex<i||colIndex<j||rowIndex+cellInfo.rowSpan-1>endRowIndex||colIndex+cellInfo.colSpan-1>endColIndex){return null}returnTds.push(this.getCell(rowIndex,cellInfo.cellIndex))}}return returnTds},clearSelected:function(){UETable.removeSelectedClass(this.selectedTds);this.selectedTds=[];this.cellsRange={}},setSelected:function(range){var cells=this.getCells(range);UETable.addSelectedClass(cells);this.selectedTds=cells;this.cellsRange=range},isFullRow:function(){var range=this.cellsRange;return range.endColIndex-range.beginColIndex+1==this.colsNum},isFullCol:function(){var range=this.cellsRange,table=this.table,ths=table.getElementsByTagName(\"th\"),rows=range.endRowIndex-range.beginRowIndex+1;return!ths.length?rows==this.rowsNum:rows==this.rowsNum||rows==this.rowsNum-1},getNextCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getPreviewCell:function(cell,top){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!top&&(!len?!cellInfo.colIndex:!range.beginColIndex)||top&&(!len?cellInfo.rowIndex>this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!top?!len?cellInfo.rowIndex:range.beginRowIndex:!len?cellInfo.rowIndex<1?0:cellInfo.rowIndex-1:range.beginRowIndex;previewColIndex=!top?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},moveContent:function(cellTo,cellFrom){if(UETable.isEmptyBlock(cellFrom))return;if(UETable.isEmptyBlock(cellTo)){cellTo.innerHTML=cellFrom.innerHTML;return}var child=cellTo.lastChild;if(child.nodeType==3||!dtd.$block[child.tagName]){cellTo.appendChild(cellTo.ownerDocument.createElement(\"br\"))}while(child=cellFrom.firstChild){cellTo.appendChild(child)}},mergeRight:function(cell){var cellInfo=this.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan,rightCellInfo=this.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=this.getCell(rightCellInfo.rowIndex,rightCellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+rightCellInfo.colSpan;cell.removeAttribute(\"width\");this.moveContent(cell,rightCell);this.deleteCell(rightCell,rightCellInfo.rowIndex);this.update()},mergeDown:function(cell){var cellInfo=this.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan,downCellInfo=this.indexTable[downRowIndex][cellInfo.colIndex],downCell=this.getCell(downCellInfo.rowIndex,downCellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+downCellInfo.rowSpan;cell.removeAttribute(\"height\");this.moveContent(cell,downCell);this.deleteCell(downCell,downCellInfo.rowIndex);this.update()},mergeRange:function(){var range=this.cellsRange,leftTopCell=this.getCell(range.beginRowIndex,this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex);var cells=this.getCells(range);for(var i=0,ci;ci=cells[i++];){if(ci!==leftTopCell){this.moveContent(leftTopCell,ci);this.deleteCell(ci)}}leftTopCell.rowSpan=range.endRowIndex-range.beginRowIndex+1;leftTopCell.rowSpan>1&&leftTopCell.removeAttribute(\"height\");leftTopCell.colSpan=range.endColIndex-range.beginColIndex+1;leftTopCell.colSpan>1&&leftTopCell.removeAttribute(\"width\");if(leftTopCell.rowSpan==this.rowsNum&&leftTopCell.colSpan!=1){leftTopCell.colSpan=1}if(leftTopCell.colSpan==this.colsNum&&leftTopCell.rowSpan!=1){var rowIndex=leftTopCell.parentNode.rowIndex;if(this.table.deleteRow){for(var i=rowIndex+1,curIndex=rowIndex+1,len=leftTopCell.rowSpan;i<len;i++){this.table.deleteRow(curIndex)}}else{for(var i=0,len=leftTopCell.rowSpan-1;i<len;i++){var row=this.table.rows[rowIndex+1];row.parentNode.removeChild(row)}}leftTopCell.rowSpan=1}this.update()},insertRow:function(rowIndex,sourceCell){var numCols=this.colsNum,table=this.table,row=table.insertRow(rowIndex),cell,thead=null,isInsertTitle=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(colIndex,cell,tableRow){if(colIndex==0){var tr=tableRow.nextSibling||tableRow.previousSibling,th=tr.cells[colIndex];if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}if(rowIndex==0||rowIndex==this.rowsNum){for(var colIndex=0;colIndex<numCols;colIndex++){cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));row.appendChild(cell);if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}if(isInsertTitle){thead=table.createTHead();thead.insertBefore(row,thead.firstChild)}}else{var infoRow=this.indexTable[rowIndex],cellIndex=0;for(colIndex=0;colIndex<numCols;colIndex++){var cellInfo=infoRow[colIndex];if(cellInfo.rowIndex<rowIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+1}else{cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);row.appendChild(cell)}if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}}this.update();return row},deleteRow:function(rowIndex){var row=this.table.rows[rowIndex],infoRow=this.indexTable[rowIndex],colsNum=this.colsNum,count=0;for(var colIndex=0;colIndex<colsNum;){var cellInfo=infoRow[colIndex],cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(cell.rowSpan>1){if(cellInfo.rowIndex==rowIndex){var clone=cell.cloneNode(true);clone.rowSpan=cell.rowSpan-1;clone.innerHTML=\"\";cell.rowSpan=1;var nextRowIndex=rowIndex+1,nextRow=this.table.rows[nextRowIndex],insertCellIndex,preMerged=this.getPreviewMergedCellsNum(nextRowIndex,colIndex)-count;if(preMerged<colIndex){insertCellIndex=colIndex-preMerged-1;domUtils.insertAfter(nextRow.cells[insertCellIndex],clone)}else{if(nextRow.cells.length)nextRow.insertBefore(clone,nextRow.cells[0])}count+=1}}colIndex+=cell.colSpan||1}var deleteTds=[],cacheMap={};for(colIndex=0;colIndex<colsNum;colIndex++){var tmpRowIndex=infoRow[colIndex].rowIndex,tmpCellIndex=infoRow[colIndex].cellIndex,key=tmpRowIndex+\"_\"+tmpCellIndex;if(cacheMap[key])continue;cacheMap[key]=1;cell=this.getCell(tmpRowIndex,tmpCellIndex);deleteTds.push(cell)}var mergeTds=[];utils.each(deleteTds,function(td){if(td.rowSpan==1){td.parentNode.removeChild(td)}else{mergeTds.push(td)}});utils.each(mergeTds,function(td){td.rowSpan--});row.parentNode.removeChild(row);this.update()},insertCol:function(colIndex,sourceCell,defaultValue){var rowsNum=this.rowsNum,rowIndex=0,tableRow,cell,backWidth=parseInt((this.table.offsetWidth-(this.colsNum+1)*20-(this.colsNum+1))/(this.colsNum+1),10),isInsertTitleCol=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(rowIndex,cell,tableRow){if(rowIndex==0){var th=cell.nextSibling||cell.previousSibling;if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}var preCell;if(colIndex==0||colIndex==this.colsNum){for(;rowIndex<rowsNum;rowIndex++){tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[colIndex==0?colIndex:tableRow.cells.length];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));if(!colIndex){tableRow.insertBefore(cell,tableRow.cells[0])}else{domUtils.insertAfter(tableRow.cells[tableRow.cells.length-1],cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}else{for(;rowIndex<rowsNum;rowIndex++){var cellInfo=this.indexTable[rowIndex][colIndex];if(cellInfo.colIndex<colIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+1}else{tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[cellInfo.cellIndex];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));preCell?tableRow.insertBefore(cell,preCell):tableRow.appendChild(cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}this.update();this.updateWidth(backWidth,defaultValue||{tdPadding:10,tdBorder:1})},updateWidth:function(width,defaultValue){var table=this.table,tmpWidth=UETable.getWidth(table)-defaultValue.tdPadding*2-defaultValue.tdBorder+width;if(tmpWidth<table.ownerDocument.body.offsetWidth){table.setAttribute(\"width\",tmpWidth);return}var tds=domUtils.getElementsByTagName(this.table,\"td th\");utils.each(tds,function(td){td.setAttribute(\"width\",width)})},deleteCol:function(colIndex){var indexTable=this.indexTable,tableRows=this.table.rows,backTableWidth=this.table.getAttribute(\"width\"),backTdWidth=0,rowsNum=this.rowsNum,cacheMap={};for(var rowIndex=0;rowIndex<rowsNum;){var infoRow=indexTable[rowIndex],cellInfo=infoRow[colIndex],key=cellInfo.rowIndex+\"_\"+cellInfo.colIndex;if(cacheMap[key])continue;cacheMap[key]=1;var cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(!backTdWidth)backTdWidth=cell&&parseInt(cell.offsetWidth/cell.colSpan,10).toFixed(0);if(cell.colSpan>1){cell.colSpan--}else{tableRows[rowIndex].deleteCell(cellInfo.cellIndex)}rowIndex+=cellInfo.rowSpan||1}this.table.setAttribute(\"width\",backTableWidth-backTdWidth);this.update()},splitToCells:function(cell){var me=this,cells=this.splitToRows(cell);utils.each(cells,function(cell){me.splitToCols(cell)})},splitToRows:function(cell){var cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.rowSpan=1;results.push(cell);for(var i=rowIndex,endRow=rowIndex+cellInfo.rowSpan;i<endRow;i++){if(i==rowIndex)continue;var tableRow=this.table.rows[i],tmpCell=tableRow.insertCell(colIndex-this.getPreviewMergedCellsNum(i,colIndex));tmpCell.colSpan=cellInfo.colSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}results.push(tmpCell)}this.update();return results},getPreviewMergedCellsNum:function(rowIndex,colIndex){var indexRow=this.indexTable[rowIndex],num=0;for(var i=0;i<colIndex;){var colSpan=indexRow[i].colSpan,tmpRowIndex=indexRow[i].rowIndex;num+=colSpan-(tmpRowIndex==rowIndex?1:0);i+=colSpan}return num},splitToCols:function(cell){var backWidth=(cell.offsetWidth/cell.colSpan-22).toFixed(0),cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.colSpan=1;cell.setAttribute(\"width\",backWidth);results.push(cell);for(var j=colIndex,endCol=colIndex+cellInfo.colSpan;j<endCol;j++){if(j==colIndex)continue;var tableRow=this.table.rows[rowIndex],tmpCell=tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex+1);tmpCell.rowSpan=cellInfo.rowSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));tmpCell.setAttribute(\"width\",backWidth);if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}if(cell.tagName==\"TH\"){var th=cell.ownerDocument.createElement(\"th\");th.appendChild(tmpCell.firstChild);th.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));th.rowSpan=tmpCell.rowSpan;tableRow.insertBefore(th,tmpCell);domUtils.remove(tmpCell)}results.push(tmpCell)}this.update();return results},isLastCell:function(cell,rowsNum,colsNum){rowsNum=rowsNum||this.rowsNum;colsNum=colsNum||this.colsNum;var cellInfo=this.getCellInfo(cell);return cellInfo.rowIndex+cellInfo.rowSpan==rowsNum&&cellInfo.colIndex+cellInfo.colSpan==colsNum},getLastCell:function(cells){cells=cells||this.table.getElementsByTagName(\"td\");var firstInfo=this.getCellInfo(cells[0]);var me=this,last=cells[0],tr=last.parentNode,cellsNum=0,cols=0,rows;utils.each(cells,function(cell){if(cell.parentNode==tr)cols+=cell.colSpan||1;cellsNum+=cell.rowSpan*cell.colSpan||1});rows=cellsNum/cols;utils.each(cells,function(cell){if(me.isLastCell(cell,rows,cols)){last=cell;return false}});return last},selectRow:function(rowIndex){var indexRow=this.indexTable[rowIndex],start=this.getCell(indexRow[0].rowIndex,indexRow[0].cellIndex),end=this.getCell(indexRow[this.colsNum-1].rowIndex,indexRow[this.colsNum-1].cellIndex),range=this.getCellsRange(start,end);this.setSelected(range)},selectTable:function(){var tds=this.table.getElementsByTagName(\"td\"),range=this.getCellsRange(tds[0],tds[tds.length-1]);this.setSelected(range)},setBackground:function(cells,value){if(typeof value===\"string\"){utils.each(cells,function(cell){cell.style.backgroundColor=value})}else if(typeof value===\"object\"){value=utils.extend({repeat:true,colorList:[\"#ddd\",\"#fff\"]},value);var rowIndex=this.getCellInfo(cells[0]).rowIndex,count=0,colors=value.colorList,getColor=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0,cell;cell=cells[i++];){var cellInfo=this.getCellInfo(cell);cell.style.backgroundColor=getColor(colors,rowIndex+count==cellInfo.rowIndex?count:++count,value.repeat)}}},removeBackground:function(cells){utils.each(cells,function(cell){cell.style.backgroundColor=\"\"})}};function showError(e){}})();(function(){var UT=UE.UETable,getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)};UE.commands[\"inserttable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?-1:0},execCommand:function(cmd,opt){function createTable(opt,tdWidth){var html=[],rowsNum=opt.numRows,colsNum=opt.numCols;for(var r=0;r<rowsNum;r++){html.push(\"<tr\"+(r==0?' class=\"firstRow\"':\"\")+\">\");for(var c=0;c<colsNum;c++){html.push('<td width=\"'+tdWidth+'\"  vAlign=\"'+opt.tdvalign+'\" >'+(browser.ie&&browser.version<11?domUtils.fillChar:\"<br/>\")+\"</td>\")}html.push(\"</tr>\")}return\"<table><tbody>\"+html.join(\"\")+\"</tbody></table>\"}if(!opt){opt=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign})}var me=this;var range=this.selection.getRange(),start=range.startContainer,firstParentBlock=domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)},true)||me.body;var defaultValue=getDefaultValue(me),tableWidth=firstParentBlock.offsetWidth,tdWidth=Math.floor(tableWidth/opt.numCols-defaultValue.tdPadding*2-defaultValue.tdBorder);!opt.tdvalign&&(opt.tdvalign=me.options.tdvalign);me.execCommand(\"inserthtml\",createTable(opt,tdWidth))}};UE.commands[\"insertparagraphbeforetable\"]={queryCommandState:function(){return getTableItemsByRange(this).cell?0:-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var p=this.document.createElement(\"p\");p.innerHTML=browser.ie?\"&nbsp;\":\"<br />\";table.parentNode.insertBefore(p,table);this.selection.getRange().setStart(p,0).setCursor()}}};UE.commands[\"deletetable\"]={queryCommandState:function(){var rng=this.selection.getRange();return domUtils.findParentByTagName(rng.startContainer,\"table\",true)?0:-1},execCommand:function(cmd,table){var rng=this.selection.getRange();table=table||domUtils.findParentByTagName(rng.startContainer,\"table\",true);if(table){var next=table.nextSibling;if(!next){next=domUtils.createElement(this.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});table.parentNode.insertBefore(next,table)}domUtils.remove(table);rng=this.selection.getRange();if(next.nodeType==3){rng.setStartBefore(next)}else{rng.setStart(next,0)}rng.setCursor(false,true);this.fireEvent(\"tablehasdeleted\")}}};UE.commands[\"cellalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,align){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"align\",align)}}}};UE.commands[\"cellvalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,valign){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"vAlign\",valign)}}}};UE.commands[\"insertcaption\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){return table.getElementsByTagName(\"caption\").length==0?1:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var caption=this.document.createElement(\"caption\");caption.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\";table.insertBefore(caption,table.firstChild);var range=this.selection.getRange();range.setStart(caption,0).setCursor()}}};UE.commands[\"deletecaption\"]={queryCommandState:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){return table.getElementsByTagName(\"caption\").length==0?-1:1}return-1},execCommand:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){domUtils.remove(table.getElementsByTagName(\"caption\")[0]);var range=this.selection.getRange();range.setStart(table.rows[0].cells[0],0).setCursor()}}};UE.commands[\"inserttitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()!=\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertRow(0,\"th\")}var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()==\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){domUtils.remove(table.rows[0])}var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"inserttitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?-1:0}return-1},execCommand:function(cmd){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertCol(0,\"th\")}resetTdWidth(table,this);var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){for(var i=0;i<table.rows.length;i++){domUtils.remove(table.rows[i].children[0])}}resetTdWidth(table,this);var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"mergeright\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan;if(rightColIndex>=ut.colsNum)return-1;var rightCellInfo=ut.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex];if(!rightCell||cell.tagName!=rightCell.tagName)return-1;return rightCellInfo.rowIndex==cellInfo.rowIndex&&rightCellInfo.rowSpan==cellInfo.rowSpan?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeRight(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergedown\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan;if(downRowIndex>=ut.rowsNum)return-1;var downCellInfo=ut.indexTable[downRowIndex][cellInfo.colIndex],downCell=table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex];if(!downCell||cell.tagName!=downCell.tagName)return-1;return downCellInfo.colIndex==cellInfo.colIndex&&downCellInfo.colSpan==cellInfo.colSpan?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeDown(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergecells\"]={queryCommandState:function(){return getUETableBySelected(this)?0:-1},execCommand:function(){var ut=getUETableBySelected(this);if(ut&&ut.selectedTds.length){var cell=ut.selectedTds[0];ut.mergeRange();var rng=this.selection.getRange();if(domUtils.isEmptyBlock(cell)){rng.setStart(cell,0).collapse(true)}else{rng.selectNodeContents(cell)}rng.select()}}};UE.commands[\"insertrow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&tableItems.tr!==tableItems.table.rows[0])&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.beginRowIndex,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertrownext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&cell.tagName==\"TD\"&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex+cellInfo.rowSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.endRowIndex+1,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"deleterow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellsRange=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getVSideCell(cell),nextCell=ut.getVSideCell(cell,true),rng=this.selection.getRange();if(utils.isEmptyObject(cellsRange)){ut.deleteRow(cellInfo.rowIndex)}else{for(var i=cellsRange.beginRowIndex;i<cellsRange.endRowIndex+1;i++){ut.deleteRow(cellsRange.beginRowIndex)}}var table=ut.table;if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(cellInfo.rowSpan==1||cellInfo.rowSpan==cellsRange.endRowIndex-cellsRange.beginRowIndex+1){if(nextCell||preCell)rng.selectNodeContents(nextCell||preCell).setCursor(false,true)}else{var newCell=ut.getCell(cellInfo.rowIndex,ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex);if(newCell)rng.selectNodeContents(newCell).setCursor(false,true)}}if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertcol\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&cell!==tableItems.tr.cells[0])&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);if(this.queryCommandState(cmd)==-1)return;var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.beginColIndex,cell)}}rng.moveToBookmark(bk).select(true)}};UE.commands[\"insertcolnext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex+cellInfo.colSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.endColIndex+1,cell)}}rng.moveToBookmark(bk).select()}};UE.commands[\"deletecol\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),range=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getHSideCell(cell),nextCell=ut.getHSideCell(cell,true);if(utils.isEmptyObject(range)){ut.deleteCol(cellInfo.colIndex)}else{for(var i=range.beginColIndex;i<range.endColIndex+1;i++){ut.deleteCol(range.beginColIndex)}}var table=ut.table,rng=this.selection.getRange();if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(domUtils.inDoc(cell,this.document)){rng.setStart(cell,0).setCursor(false,true)}else{if(nextCell&&domUtils.inDoc(nextCell,this.document)){rng.selectNodeContents(nextCell).setCursor(false,true)}else{if(preCell&&domUtils.inDoc(preCell,this.document)){rng.selectNodeContents(preCell).setCursor(true,true)}}}}}};UE.commands[\"splittocells\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&(cell.colSpan>1||cell.rowSpan>1)?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCells(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittorows\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.rowSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToRows(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittocols\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.colSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCols(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"adaptbytext\"]=UE.commands[\"adaptbywindow\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table;if(table){if(cmd==\"adaptbywindow\"){resetTdWidth(table,this)}else{var cells=domUtils.getElementsByTagName(table,\"td th\");utils.each(cells,function(cell){cell.removeAttribute(\"width\")});table.removeAttribute(\"width\")}}}};UE.commands[\"averagedistributecol\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageWidth(){var tb=ut.table,averageWidth,sumWidth=0,colsNum=0,tbAttr=getDefaultValue(me,tb);if(ut.isFullRow()){sumWidth=tb.offsetWidth;colsNum=ut.colsNum}else{var begin=ut.cellsRange.beginColIndex,end=ut.cellsRange.endColIndex,node;for(var i=begin;i<=end;){node=ut.selectedTds[i];sumWidth+=node.offsetWidth;i+=node.colSpan;colsNum+=1}}averageWidth=Math.ceil(sumWidth/colsNum)-tbAttr.tdBorder*2-tbAttr.tdPadding*2;return averageWidth}function setAverageWidth(averageWidth){utils.each(domUtils.getElementsByTagName(ut.table,\"th\"),function(node){node.setAttribute(\"width\",\"\")});var cells=ut.isFullRow()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.colSpan==1){node.setAttribute(\"width\",averageWidth)}})}if(ut&&ut.selectedTds.length){setAverageWidth(getAverageWidth())}}};UE.commands[\"averagedistributerow\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;if(ut.selectedTds&&/th/gi.test(ut.selectedTds[0].tagName))return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageHeight(){var averageHeight,rowNum,sumHeight=0,tb=ut.table,tbAttr=getDefaultValue(me,tb),tdpadding=parseInt(domUtils.getComputedStyle(tb.getElementsByTagName(\"td\")[0],\"padding-top\"));if(ut.isFullCol()){var captionArr=domUtils.getElementsByTagName(tb,\"caption\"),thArr=domUtils.getElementsByTagName(tb,\"th\"),captionHeight,thHeight;if(captionArr.length>0){captionHeight=captionArr[0].offsetHeight}if(thArr.length>0){thHeight=thArr[0].offsetHeight}sumHeight=tb.offsetHeight-(captionHeight||0)-(thHeight||0);rowNum=thArr.length==0?ut.rowsNum:ut.rowsNum-1}else{var begin=ut.cellsRange.beginRowIndex,end=ut.cellsRange.endRowIndex,count=0,trs=domUtils.getElementsByTagName(tb,\"tr\");for(var i=begin;i<=end;i++){sumHeight+=trs[i].offsetHeight;count+=1}rowNum=count}if(browser.ie&&browser.version<9){averageHeight=Math.ceil(sumHeight/rowNum)}else{averageHeight=Math.ceil(sumHeight/rowNum)-tbAttr.tdBorder*2-tdpadding*2}return averageHeight}function setAverageHeight(averageHeight){var cells=ut.isFullCol()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.rowSpan==1){node.setAttribute(\"height\",averageHeight)}})}if(ut&&ut.selectedTds.length){setAverageHeight(getAverageHeight())}}};UE.commands[\"cellalignment\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,data){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(!/caption/gi.test(cell.tagName)){domUtils.setAttributes(cell,data)}else{cell.style.textAlign=data.align;cell.style.verticalAlign=data.vAlign}me.selection.getRange().setCursor(true)}else{utils.each(ut.selectedTds,function(cell){domUtils.setAttributes(cell,data)})}},queryCommandValue:function(cmd){var activeMenuCell=getTableItemsByRange(this).cell;if(!activeMenuCell){activeMenuCell=getSelectedArr(this)[0]}if(!activeMenuCell){return null}else{var cells=UE.UETable.getUETable(activeMenuCell).selectedTds;!cells.length&&(cells=activeMenuCell);return UE.UETable.getTableCellAlignState(cells)}}};UE.commands[\"tablealignment\"]={queryCommandState:function(){if(browser.ie&&browser.version<8){return-1}return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,value){var me=this,start=me.selection.getStart(),table=start&&domUtils.findParentByTagName(start,[\"table\"],true);if(table){table.setAttribute(\"align\",value)}}};UE.commands[\"edittable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,color){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var arr=domUtils.getElementsByTagName(table,\"td\").concat(domUtils.getElementsByTagName(table,\"th\"),domUtils.getElementsByTagName(table,\"caption\"));utils.each(arr,function(node){node.style.borderColor=color})}}};UE.commands[\"edittd\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,bkColor){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(cell){cell.style.backgroundColor=bkColor}}else{utils.each(ut.selectedTds,function(cell){cell.style.backgroundColor=bkColor})}}};UE.commands[\"settablebackground\"]={queryCommandState:function(){return getSelectedArr(this).length>1?0:-1},execCommand:function(cmd,value){var cells,ut;cells=getSelectedArr(this);ut=getUETable(cells[0]);ut.setBackground(cells,value)}};UE.commands[\"cleartablebackground\"]={queryCommandState:function(){var cells=getSelectedArr(this);if(!cells.length)return-1;for(var i=0,cell;cell=cells[i++];){if(cell.style.backgroundColor!==\"\")return 0}return-1},execCommand:function(){var cells=getSelectedArr(this),ut=getUETable(cells[0]);ut.removeBackground(cells)}};UE.commands[\"interlacetable\"]=UE.commands[\"uninterlacetable\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;var interlaced=table.getAttribute(\"interlaced\");if(cmd==\"interlacetable\"){return interlaced===\"enabled\"?-1:0}else{return!interlaced||interlaced===\"disabled\"?-1:0}},execCommand:function(cmd,classList){var table=getTableItemsByRange(this).table;if(cmd==\"interlacetable\"){table.setAttribute(\"interlaced\",\"enabled\");this.fireEvent(\"interlacetable\",table,classList)}else{table.setAttribute(\"interlaced\",\"disabled\");this.fireEvent(\"uninterlacetable\",table)}}};UE.commands[\"setbordervisible\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;return 0},execCommand:function(){var table=getTableItemsByRange(this).table;utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){td.style.borderWidth=\"1px\";td.style.borderStyle=\"solid\"})}};function resetTdWidth(table,editor){var tds=domUtils.getElementsByTagName(table,\"td th\");utils.each(tds,function(td){td.removeAttribute(\"width\")});table.setAttribute(\"width\",getTableWidth(editor,true,getDefaultValue(editor,table)));var tdsWidths=[];setTimeout(function(){utils.each(tds,function(td){td.colSpan==1&&tdsWidths.push(td.offsetWidth)});utils.each(tds,function(td,i){td.colSpan==1&&td.setAttribute(\"width\",tdsWidths[i]+\"\")})},0)}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getSelectedArr(editor){var cell=getTableItemsByRange(editor).cell;if(cell){var ut=getUETable(cell);return ut.selectedTds.length?ut.selectedTds:[cell]}else{return[]}}})();UE.plugins[\"table\"]=function(){var me=this,tabTimer=null,tableDragTimer=null,tableResizeTimer=null,cellMinWidth=5,isInResizeBuffer=false,cellBorderWidth=5,offsetOfTableCell=10,singleClickState=0,userActionStatus=null,dblclickTime=200,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},removeSelectedClass=function(cells){return UT.removeSelectedClass(cells)};function showError(e){}me.ready(function(){var me=this;var orgGetText=me.selection.getText;me.selection.getText=function(){var table=getUETableBySelected(me);if(table){var str=\"\";utils.each(table.selectedTds,function(td){str+=td[browser.ie?\"innerText\":\"textContent\"]});return str}else{return orgGetText.call(me.selection)}}});var startTd=null,currentTd=null,onDrag=\"\",onBorder=false,dragButton=null,dragOver=false,dragLine=null,dragTd=null;var mousedown=false,needIEHack=true;me.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:\"top\",cursorpath:me.options.UEDITOR_HOME_URL+\"themes/default/images/cursor_\",tableDragable:false,classList:[\"ue-table-interlace-color-single\",\"ue-table-interlace-color-double\"]});me.getUETable=getUETable;var commands={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};me.ready(function(){utils.cssRule(\"table\",\".selectTdClass{background-color:#edf5fa !important}\"+\"table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}\"+\"table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+\"td,th{padding: 5px 10px;border: 1px solid #DDD;}\"+\"caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+\"th{border-top:1px solid #BBB;background-color:#F7F7F7;}\"+\"table tr.firstRow th{border-top-width:2px;}\"+\".ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }\"+\"td p{margin:0;padding:0;}\",me.document);var tableCopyList,isFullCol,isFullRow;me.addListener(\"keydown\",function(cmd,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8){var ut=getUETableBySelected(me);if(ut&&ut.selectedTds.length){if(ut.isFullCol()){me.execCommand(\"deletecol\")}else if(ut.isFullRow()){me.execCommand(\"deleterow\")}else{me.fireEvent(\"delcells\")}domUtils.preventDefault(evt)}var caption=domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true),range=me.selection.getRange();if(range.collapsed&&caption&&isEmptyBlock(caption)){me.fireEvent(\"saveScene\");var table=caption.parentNode;domUtils.remove(caption);if(table){range.setStart(table.rows[0].cells[0],0).setCursor(false,true)}me.fireEvent(\"saveScene\")}}if(keyCode==46){ut=getUETableBySelected(me);if(ut){me.fireEvent(\"saveScene\");for(var i=0,ci;ci=ut.selectedTds[i++];){domUtils.fillNode(me.document,ci)}me.fireEvent(\"saveScene\");domUtils.preventDefault(evt)}}if(keyCode==13){var rng=me.selection.getRange(),caption=domUtils.findParentByTagName(rng.startContainer,\"caption\",true);if(caption){var table=domUtils.findParentByTagName(caption,\"table\");if(!rng.collapsed){rng.deleteContents();me.fireEvent(\"saveScene\")}else{if(caption){rng.setStart(table.rows[0].cells[0],0).setCursor(false,true)}}domUtils.preventDefault(evt);return}if(rng.collapsed){var table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var cell=table.rows[0].cells[0],start=domUtils.findParentByTagName(me.selection.getStart(),[\"td\",\"th\"],true),preNode=table.previousSibling;if(cell===start&&(!preNode||preNode.nodeType==1&&preNode.tagName==\"TABLE\")&&domUtils.isStartInblock(rng)){var first=domUtils.findParent(me.selection.getStart(),function(n){return domUtils.isBlockElm(n)},true);if(first&&(/t(h|d)/i.test(first.tagName)||first===start.firstChild)){me.execCommand(\"insertparagraphbeforetable\");domUtils.preventDefault(evt)}}}}}if((evt.ctrlKey||evt.metaKey)&&evt.keyCode==\"67\"){tableCopyList=null;var ut=getUETableBySelected(me);if(ut){var tds=ut.selectedTds;isFullCol=ut.isFullCol();isFullRow=ut.isFullRow();tableCopyList=[[ut.cloneCell(tds[0],null,true)]];for(var i=1,ci;ci=tds[i];i++){if(ci.parentNode!==tds[i-1].parentNode){tableCopyList.push([ut.cloneCell(ci,null,true)])}else{tableCopyList[tableCopyList.length-1].push(ut.cloneCell(ci,null,true))}}}}});me.addListener(\"tablehasdeleted\",function(){toggleDraggableState(this,false,\"\",null);if(dragButton)domUtils.remove(dragButton)});me.addListener(\"beforepaste\",function(cmd,html){var me=this;var rng=me.selection.getRange();if(domUtils.findParentByTagName(rng.startContainer,\"caption\",true)){var div=me.document.createElement(\"div\");div.innerHTML=html.html;html.html=div[browser.ie9below?\"innerText\":\"textContent\"];return}var table=getUETableBySelected(me);if(tableCopyList){me.fireEvent(\"saveScene\");var rng=me.selection.getRange();var td=domUtils.findParentByTagName(rng.startContainer,[\"td\",\"th\"],true),tmpNode,preNode;if(td){var ut=getUETable(td);if(isFullRow){var rowIndex=ut.getCellInfo(td).rowIndex;if(td.tagName==\"TH\"){rowIndex++}for(var i=0,ci;ci=tableCopyList[i++];){var tr=ut.insertRow(rowIndex++,\"td\");for(var j=0,cj;cj=ci[j];j++){var cell=tr.cells[j];if(!cell){cell=tr.insertCell(j)}cell.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&cell.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&cell.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(cell.style.cssText=cj.style.cssText)}for(var j=0,cj;cj=tr.cells[j];j++){if(!ci[j])break;cj.innerHTML=ci[j].innerHTML;ci[j].getAttribute(\"width\")&&cj.setAttribute(\"width\",ci[j].getAttribute(\"width\"));ci[j].getAttribute(\"vAlign\")&&cj.setAttribute(\"vAlign\",ci[j].getAttribute(\"vAlign\"));ci[j].getAttribute(\"align\")&&cj.setAttribute(\"align\",ci[j].getAttribute(\"align\"));ci[j].style.cssText&&(cj.style.cssText=ci[j].style.cssText)}}}else{if(isFullCol){cellInfo=ut.getCellInfo(td);var maxColNum=0;for(var j=0,ci=tableCopyList[0],cj;cj=ci[j++];){maxColNum+=cj.colSpan||1}me.__hasEnterExecCommand=true;for(i=0;i<maxColNum;i++){me.execCommand(\"insertcol\")}me.__hasEnterExecCommand=false;td=ut.table.rows[0].cells[cellInfo.cellIndex];if(td.tagName==\"TH\"){td=ut.table.rows[1].cells[cellInfo.cellIndex]}}for(var i=0,ci;ci=tableCopyList[i++];){tmpNode=td;for(var j=0,cj;cj=ci[j++];){if(td){td.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&td.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&td.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&td.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(td.style.cssText=cj.style.cssText);preNode=td;td=td.nextSibling}else{var cloneTd=cj.cloneNode(true);domUtils.removeAttributes(cloneTd,[\"class\",\"rowSpan\",\"colSpan\"]);preNode.parentNode.appendChild(cloneTd)}}td=ut.getNextCell(tmpNode,true,true);if(!tableCopyList[i])break;if(!td){var cellInfo=ut.getCellInfo(tmpNode);ut.table.insertRow(ut.table.rows.length);ut.update();td=ut.getVSideCell(tmpNode,true)}}}ut.update()}else{table=me.document.createElement(\"table\");for(var i=0,ci;ci=tableCopyList[i++];){var tr=table.insertRow(table.rows.length);for(var j=0,cj;cj=ci[j++];){cloneTd=UT.cloneCell(cj,null,true);domUtils.removeAttributes(cloneTd,[\"class\"]);tr.appendChild(cloneTd)}if(j==2&&cloneTd.rowSpan>1){cloneTd.rowSpan=1}}var defaultValue=getDefaultValue(me),width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0);me.execCommand(\"insertHTML\",\"<table  \"+(isFullCol&&isFullRow?'width=\"'+width+'\"':\"\")+\">\"+table.innerHTML.replace(/>\\s*</g,\"><\").replace(/\\bth\\b/gi,\"td\")+\"</table>\")}me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");html.html=\"\";return true}else{var div=me.document.createElement(\"div\"),tables;div.innerHTML=html.html;tables=div.getElementsByTagName(\"table\");if(domUtils.findParentByTagName(me.selection.getStart(),\"table\")){utils.each(tables,function(t){domUtils.remove(t)});if(domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true)){div.innerHTML=div[browser.ie?\"innerText\":\"textContent\"]}}else{utils.each(tables,function(table){removeStyleSize(table,true);domUtils.removeAttributes(table,[\"style\",\"border\"]);utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){if(isEmptyBlock(td)){domUtils.fillNode(me.document,td)}removeStyleSize(td,true)})})}html.html=div.innerHTML}});me.addListener(\"afterpaste\",function(){utils.each(domUtils.getElementsByTagName(me.body,\"table\"),function(table){if(table.offsetWidth>me.body.offsetWidth){var defaultValue=getDefaultValue(me,table);table.style.width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0)+\"px\"}})});me.addListener(\"blur\",function(){tableCopyList=null});var timer;me.addListener(\"keydown\",function(){clearTimeout(timer);timer=setTimeout(function(){var rng=me.selection.getRange(),cell=domUtils.findParentByTagName(rng.startContainer,[\"th\",\"td\"],true);if(cell){var table=cell.parentNode.parentNode.parentNode;if(table.offsetWidth>table.getAttribute(\"width\")){cell.style.wordBreak=\"break-all\"}}},100)});me.addListener(\"selectionchange\",function(){toggleDraggableState(me,false,\"\",null)});me.addListener(\"contentchange\",function(){var me=this;hideDragLine(me);if(getUETableBySelected(me))return;var rng=me.selection.getRange();var start=rng.startContainer;start=domUtils.findParentByTagName(start,[\"td\",\"th\"],true);utils.each(domUtils.getElementsByTagName(me.document,\"table\"),function(table){if(me.fireEvent(\"excludetable\",table)===true)return;table.ueTable=new UT(table);table.onmouseover=function(){me.fireEvent(\"tablemouseover\",table)};table.onmousemove=function(){me.fireEvent(\"tablemousemove\",table);me.options.tableDragable&&toggleDragButton(true,this,me);utils.defer(function(){me.fireEvent(\"contentchange\",50)},true)};table.onmouseout=function(){me.fireEvent(\"tablemouseout\",table);toggleDraggableState(me,false,\"\",null);hideDragLine(me)};table.onclick=function(evt){evt=me.window.event||evt;var target=getParentTdOrTh(evt.target||evt.srcElement);if(!target)return;var ut=getUETable(target),table=ut.table,cellInfo=ut.getCellInfo(target),cellsRange,rng=me.selection.getRange();if(inTableSide(table,target,evt,true)){var endTdCol=ut.getCell(ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].rowIndex,ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdCol){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}else{if(target!==endTdCol){cellsRange=ut.getCellsRange(target,endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}return}if(inTableSide(table,target,evt)){var endTdRow=ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].rowIndex,ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdRow){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}else{if(target!==endTdRow){cellsRange=ut.getCellsRange(target,endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}}}});switchBorderColor(me,true)});domUtils.on(me.document,\"mousemove\",mouseMoveEvent);domUtils.on(me.document,\"mouseout\",function(evt){var target=evt.target||evt.srcElement;if(target.tagName==\"TABLE\"){toggleDraggableState(me,false,\"\",null)}});me.addListener(\"interlacetable\",function(type,table,classList){if(!table)return;var me=this,rows=table.rows,len=rows.length,getClass=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0;i<len;i++){rows[i].className=getClass(classList||me.options.classList,i,true)}});me.addListener(\"uninterlacetable\",function(type,table){if(!table)return;var me=this,rows=table.rows,classList=me.options.classList,len=rows.length;for(var i=0;i<len;i++){domUtils.removeClasses(rows[i],classList)}});me.addListener(\"mousedown\",mouseDownEvent);me.addListener(\"mouseup\",mouseUpEvent);domUtils.on(me.body,\"dragstart\",function(evt){mouseUpEvent.call(me,\"dragstart\",evt)});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"div\"),function(n){if(n.getAttr(\"id\")==\"ue_tableDragLine\"){n.parentNode.removeChild(n)}})});var currentRowIndex=0;me.addListener(\"mousedown\",function(){currentRowIndex=0});me.addListener(\"tabkeydown\",function(){var range=this.selection.getRange(),common=range.getCommonAncestor(true,true),table=domUtils.findParentByTagName(common,\"table\");if(table){if(domUtils.findParentByTagName(common,\"caption\",true)){var cell=domUtils.getElementsByTagName(table,\"th td\");if(cell&&cell.length){range.setStart(cell[0],0).setCursor(false,true)}}else{var cell=domUtils.findParentByTagName(common,[\"td\",\"th\"],true),ua=getUETable(cell);currentRowIndex=cell.rowSpan>1?currentRowIndex:ua.getCellInfo(cell).rowIndex;var nextCell=ua.getTabNextCell(cell,currentRowIndex);if(nextCell){if(isEmptyBlock(nextCell)){range.setStart(nextCell,0).setCursor(false,true)}else{range.selectNodeContents(nextCell).select()}}else{me.fireEvent(\"saveScene\");me.__hasEnterExecCommand=true;this.execCommand(\"insertrownext\");me.__hasEnterExecCommand=false;range=this.selection.getRange();range.setStart(table.rows[table.rows.length-1].cells[0],0).setCursor();me.fireEvent(\"saveScene\")}}return true}});browser.ie&&me.addListener(\"selectionchange\",function(){toggleDraggableState(this,false,\"\",null)});me.addListener(\"keydown\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8||keyCode==46){return}var notCtrlKey=!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey;notCtrlKey&&removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td\"));var ut=getUETableBySelected(me);if(!ut)return;notCtrlKey&&ut.clearSelected()});me.addListener(\"beforegetcontent\",function(){switchBorderColor(this,false);browser.ie&&utils.each(this.document.getElementsByTagName(\"caption\"),function(ci){if(domUtils.isEmptyNode(ci)){ci.innerHTML=\"&nbsp;\"}})});me.addListener(\"aftergetcontent\",function(){switchBorderColor(this,true)});me.addListener(\"getAllHtml\",function(){removeSelectedClass(me.document.getElementsByTagName(\"td\"))});me.addListener(\"fullscreenchanged\",function(type,fullscreen){if(!fullscreen){var ratio=this.body.offsetWidth/document.body.offsetWidth,tables=domUtils.getElementsByTagName(this.body,\"table\");utils.each(tables,function(table){if(table.offsetWidth<me.body.offsetWidth)return false;var tds=domUtils.getElementsByTagName(table,\"td\"),backWidths=[];utils.each(tds,function(td){backWidths.push(td.offsetWidth)});for(var i=0,td;td=tds[i];i++){td.setAttribute(\"width\",Math.floor(backWidths[i]*ratio))}table.setAttribute(\"width\",Math.floor(getTableWidth(me,needIEHack,getDefaultValue(me))))})}});var oldExecCommand=me.execCommand;me.execCommand=function(cmd,datatat){var me=this,args=arguments;cmd=cmd.toLowerCase();var ut=getUETableBySelected(me),tds,range=new dom.Range(me.document),cmdFun=me.commands[cmd]||UE.commands[cmd],result;if(!cmdFun)return;if(ut&&!commands[cmd]&&!cmdFun.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;me.fireEvent(\"beforeexeccommand\",cmd);tds=ut.selectedTds;var lastState=-2,lastValue=-2,value,state;for(var i=0,td;td=tds[i];i++){if(isEmptyBlock(td)){range.setStart(td,0).setCursor(false,true)}else{range.selectNode(td).select(true)}state=me.queryCommandState(cmd);value=me.queryCommandValue(cmd);if(state!=-1){if(lastState!==state||lastValue!==value){me._ignoreContentChange=true;result=oldExecCommand.apply(me,arguments);me._ignoreContentChange=false}lastState=me.queryCommandState(cmd);lastValue=me.queryCommandValue(cmd);if(domUtils.isEmptyBlock(td)){domUtils.fillNode(me.document,td)}}}range.setStart(tds[0],0).shrinkBoundary(true).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"afterexeccommand\",cmd);me.__hasEnterExecCommand=false;me._selectionChange()}else{result=oldExecCommand.apply(me,arguments)}return result}});function removeStyleSize(obj,replaceToProperty){removeStyle(obj,\"width\",true);removeStyle(obj,\"height\",true)}function removeStyle(obj,styleName,replaceToProperty){if(obj.style[styleName]){replaceToProperty&&obj.setAttribute(styleName,parseInt(obj.style[styleName],10));obj.style[styleName]=\"\"}}function getParentTdOrTh(ele){if(ele.tagName==\"TD\"||ele.tagName==\"TH\")return ele;var td;if(td=domUtils.findParentByTagName(ele,\"td\",true)||domUtils.findParentByTagName(ele,\"th\",true))return td;return null}function isEmptyBlock(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1}function mouseCoords(evt){if(evt.pageX||evt.pageY){return{x:evt.pageX,y:evt.pageY}}return{x:evt.clientX+me.document.body.scrollLeft-me.document.body.clientLeft,y:evt.clientY+me.document.body.scrollTop-me.document.body.clientTop}}function mouseMoveEvent(evt){if(isEditorDisabled()){return}try{var target=getParentTdOrTh(evt.target||evt.srcElement),pos;if(isInResizeBuffer){me.body.style.webkitUserSelect=\"none\";if(Math.abs(userActionStatus.x-evt.clientX)>offsetOfTableCell||Math.abs(userActionStatus.y-evt.clientY)>offsetOfTableCell){clearTableDragTimer();isInResizeBuffer=false;singleClickState=0;tableBorderDrag(evt)}}if(onDrag&&dragTd){singleClickState=0;me.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();pos=mouseCoords(evt);toggleDraggableState(me,true,onDrag,pos,target);if(onDrag==\"h\"){dragLine.style.left=getPermissionX(dragTd,evt)+\"px\"}else if(onDrag==\"v\"){dragLine.style.top=getPermissionY(dragTd,evt)+\"px\"}return}if(target){if(me.fireEvent(\"excludetable\",target)===true)return;pos=mouseCoords(evt);var state=getRelation(target,pos),table=domUtils.findParentByTagName(target,\"table\",true);if(inTableSide(table,target,evt,true)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"h.png),pointer\"}else if(inTableSide(table,target,evt)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"v.png),pointer\"}else{me.body.style.cursor=\"text\";var curCell=target;if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");target=getUETable(target).getPreviewCell(target,state==\"v\")}toggleDraggableState(me,target?!!state:false,target?state:\"\",pos,target)}}else{toggleDragButton(false,table,me)}}catch(e){showError(e)}}var dragButtonTimer;function toggleDragButton(show,table,editor){if(!show){if(dragOver)return;dragButtonTimer=setTimeout(function(){!dragOver&&dragButton&&dragButton.parentNode&&dragButton.parentNode.removeChild(dragButton)},2e3)}else{createDragButton(table,editor)}}function createDragButton(table,editor){var pos=domUtils.getXY(table),doc=table.ownerDocument;if(dragButton&&dragButton.parentNode)return dragButton;dragButton=doc.createElement(\"div\");dragButton.contentEditable=false;dragButton.innerHTML=\"\";dragButton.style.cssText=\"width:15px;height:15px;background-image:url(\"+editor.options.UEDITOR_HOME_URL+\"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\"+(pos.y-15)+\"px;left:\"+pos.x+\"px;\";domUtils.unSelectable(dragButton);dragButton.onmouseover=function(evt){dragOver=true};dragButton.onmouseout=function(evt){dragOver=false};domUtils.on(dragButton,\"click\",function(type,evt){doClick(evt,this)});domUtils.on(dragButton,\"dblclick\",function(type,evt){doDblClick(evt)});domUtils.on(dragButton,\"dragstart\",function(type,evt){domUtils.preventDefault(evt)});var timer;function doClick(evt,button){clearTimeout(timer);timer=setTimeout(function(){editor.fireEvent(\"tableClicked\",table,button)},300)}function doDblClick(evt){clearTimeout(timer);var ut=getUETable(table),start=table.rows[0].cells[0],end=ut.getLastCell(),range=ut.getCellsRange(start,end);editor.selection.getRange().setStart(start,0).setCursor(false,true);ut.setSelected(range)}doc.body.appendChild(dragButton)}function inTableSide(table,cell,evt,top){var pos=mouseCoords(evt),state=getRelation(cell,pos);if(top){var caption=table.getElementsByTagName(\"caption\")[0],capHeight=caption?caption.offsetHeight:0;return state==\"v1\"&&pos.y-domUtils.getXY(table).y-capHeight<8}else{return state==\"h1\"&&pos.x-domUtils.getXY(table).x<8}}function getPermissionX(dragTd,evt){var ut=getUETable(dragTd);if(ut){var preTd=ut.getSameEndPosCells(dragTd,\"x\")[0],nextTd=ut.getSameStartPosXCells(dragTd)[0],mouseX=mouseCoords(evt).x,left=(preTd?domUtils.getXY(preTd).x:domUtils.getXY(ut.table).x)+20,right=nextTd?domUtils.getXY(nextTd).x+nextTd.offsetWidth-20:me.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(me.body,\"width\"),10);left+=cellMinWidth;right-=cellMinWidth;return mouseX<left?left:mouseX>right?right:mouseX}}function getPermissionY(dragTd,evt){try{var top=domUtils.getXY(dragTd).y,mousePosY=mouseCoords(evt).y;return mousePosY<top?top:mousePosY}catch(e){showError(e)}}function toggleDraggableState(editor,draggable,dir,mousePos,cell){try{editor.body.style.cursor=dir==\"h\"?\"col-resize\":dir==\"v\"?\"row-resize\":\"text\";if(browser.ie){if(dir&&!mousedown&&!getUETableBySelected(editor)){getDragLine(editor,editor.document);showDragLineAt(dir,cell)}else{hideDragLine(editor)}}onBorder=draggable}catch(e){showError(e)}}function getResizeLineByUETable(){var lineId=\"_UETableResizeLine\",line=this.document.getElementById(lineId);if(!line){line=this.document.createElement(\"div\");line.id=lineId;line.contnetEditable=false;line.setAttribute(\"unselectable\",\"on\");var styles={width:2*cellBorderWidth+1+\"px\",position:\"absolute\",\"z-index\":1e5,cursor:\"col-resize\",background:\"red\",display:\"none\"};line.onmouseout=function(){this.style.display=\"none\"};utils.extend(line.style,styles);this.document.body.appendChild(line)}return line}function updateResizeLine(cell,uetable){var line=getResizeLineByUETable.call(this),table=uetable.table,styles={top:domUtils.getXY(table).y+\"px\",left:domUtils.getXY(cell).x+cell.offsetWidth-cellBorderWidth+\"px\",display:\"block\",height:table.offsetHeight+\"px\"};utils.extend(line.style,styles)}function showResizeLine(cell){var uetable=getUETable(cell);updateResizeLine.call(this,cell,uetable)}function getRelation(ele,mousePos){var elePos=domUtils.getXY(ele);if(!elePos){return\"\"}if(elePos.x+ele.offsetWidth-mousePos.x<cellBorderWidth){return\"h\"}if(mousePos.x-elePos.x<cellBorderWidth){return\"h1\"}if(elePos.y+ele.offsetHeight-mousePos.y<cellBorderWidth){return\"v\"}if(mousePos.y-elePos.y<cellBorderWidth){return\"v1\"}return\"\"}function mouseDownEvent(type,evt){if(isEditorDisabled()){return}userActionStatus={x:evt.clientX,y:evt.clientY};if(evt.button==2){var ut=getUETableBySelected(me),flag=false;if(ut){var td=getTargetTd(me,evt);utils.each(ut.selectedTds,function(ti){if(ti===td){flag=true}});if(!flag){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"th td\"));ut.clearSelected()}else{td=ut.selectedTds[0];setTimeout(function(){me.selection.getRange().setStart(td,0).setCursor(false,true)},0)}}}else{tableClickHander(evt)}}function clearTableTimer(){tabTimer&&clearTimeout(tabTimer);tabTimer=null}function tableDbclickHandler(evt){singleClickState=0;evt=evt||me.window.event;var target=getParentTdOrTh(evt.target||evt.srcElement);if(target){var h;if(h=getRelation(target,mouseCoords(evt))){hideDragLine(me);if(h==\"h1\"){h=\"h\";if(inTableSide(domUtils.findParentByTagName(target,\"table\"),target,evt)){me.execCommand(\"adaptbywindow\")}else{target=getUETable(target).getPreviewCell(target);if(target){var rng=me.selection.getRange();rng.selectNodeContents(target).setCursor(true,true)}}}if(h==\"h\"){var ut=getUETable(target),table=ut.table,cells=getCellsByMoveBorder(target,table,true);cells=extractArray(cells,\"left\");ut.width=ut.offsetWidth;var oldWidth=[],newWidth=[];utils.each(cells,function(cell){oldWidth.push(cell.offsetWidth)});utils.each(cells,function(cell){cell.removeAttribute(\"width\")});window.setTimeout(function(){var changeable=true;utils.each(cells,function(cell,index){var width=cell.offsetWidth;if(width>oldWidth[index]){changeable=false;return false}newWidth.push(width)});var change=changeable?newWidth:oldWidth;utils.each(cells,function(cell,index){cell.width=change[index]-getTabcellSpace()})},0)}}}}function tableClickHander(evt){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td th\"));utils.each(me.document.getElementsByTagName(\"table\"),function(t){t.ueTable=null});startTd=getTargetTd(me,evt);if(!startTd)return;var table=domUtils.findParentByTagName(startTd,\"table\",true);ut=getUETable(table);ut&&ut.clearSelected();if(!onBorder){me.document.body.style.webkitUserSelect=\"\";mousedown=true;me.addListener(\"mouseover\",mouseOverEvent)}else{borderActionHandler(evt)}}function borderActionHandler(evt){if(browser.ie){evt=reconstruct(evt)}clearTableDragTimer();isInResizeBuffer=true;tableDragTimer=setTimeout(function(){tableBorderDrag(evt)},dblclickTime)}function extractArray(originArr,key){var result=[],tmp=null;for(var i=0,len=originArr.length;i<len;i++){tmp=originArr[i][key];if(tmp){result.push(tmp)}}return result}function clearTableDragTimer(){tableDragTimer&&clearTimeout(tableDragTimer);tableDragTimer=null}function reconstruct(obj){var attrs=[\"pageX\",\"pageY\",\"clientX\",\"clientY\",\"srcElement\",\"target\"],newObj={};if(obj){for(var i=0,key,val;key=attrs[i];i++){val=obj[key];val&&(newObj[key]=val)}}return newObj}function tableBorderDrag(evt){isInResizeBuffer=false;startTd=evt.target||evt.srcElement;if(!startTd)return;var state=getRelation(startTd,mouseCoords(evt));if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");startTd=getUETable(startTd).getPreviewCell(startTd,state==\"v\")}hideDragLine(me);getDragLine(me,me.document);me.fireEvent(\"saveScene\");showDragLineAt(state,startTd);mousedown=true;onDrag=state;dragTd=startTd}function mouseUpEvent(type,evt){if(isEditorDisabled()){return}clearTableDragTimer();isInResizeBuffer=false;if(onBorder){singleClickState=++singleClickState%3;userActionStatus={x:evt.clientX,y:evt.clientY};tableResizeTimer=setTimeout(function(){singleClickState>0&&singleClickState--},dblclickTime);if(singleClickState===2){singleClickState=0;tableDbclickHandler(evt);return}}if(evt.button==2)return;var me=this;var range=me.selection.getRange(),start=domUtils.findParentByTagName(range.startContainer,\"table\",true),end=domUtils.findParentByTagName(range.endContainer,\"table\",true);if(start||end){if(start===end){start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\",\"caption\"],true);end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\",\"caption\"],true);if(start!==end){me.selection.clearRange()}}else{me.selection.clearRange()}}mousedown=false;me.document.body.style.webkitUserSelect=\"\";if(onDrag&&dragTd){me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();singleClickState=0;dragLine=me.document.getElementById(\"ue_tableDragLine\");if(dragLine){var dragTdPos=domUtils.getXY(dragTd),dragLinePos=domUtils.getXY(dragLine);switch(onDrag){case\"h\":changeColWidth(dragTd,dragLinePos.x-dragTdPos.x);break;case\"v\":changeRowHeight(dragTd,dragLinePos.y-dragTdPos.y-dragTd.offsetHeight);break;default:}onDrag=\"\";dragTd=null;hideDragLine(me);me.fireEvent(\"saveScene\");return}}if(!startTd){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"td\",true);if(!target)target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"th\",true);if(target&&(target.tagName==\"TD\"||target.tagName==\"TH\")){if(me.fireEvent(\"excludetable\",target)===true)return;range=new dom.Range(me.document);range.setStart(target,0).setCursor(false,true)}}else{var ut=getUETable(startTd),cell=ut?ut.selectedTds[0]:null;if(cell){range=new dom.Range(me.document);if(domUtils.isEmptyBlock(cell)){range.setStart(cell,0).setCursor(false,true)}else{range.selectNodeContents(cell).shrinkBoundary().setCursor(false,true)}}else{range=me.selection.getRange().shrinkBoundary();if(!range.collapsed){var start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\"],true),end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\"],true);if(start&&!end||!start&&end||start&&end&&start!==end){range.setCursor(false,true)}}}startTd=null;me.removeListener(\"mouseover\",mouseOverEvent)}me._selectionChange(250,evt)}function mouseOverEvent(type,evt){if(isEditorDisabled()){return}var me=this,tar=evt.target||evt.srcElement;currentTd=domUtils.findParentByTagName(tar,\"td\",true)||domUtils.findParentByTagName(tar,\"th\",true);if(startTd&&currentTd&&(startTd.tagName==\"TD\"&&currentTd.tagName==\"TD\"||startTd.tagName==\"TH\"&&currentTd.tagName==\"TH\")&&domUtils.findParentByTagName(startTd,\"table\")==domUtils.findParentByTagName(currentTd,\"table\")){var ut=getUETable(currentTd);if(startTd!=currentTd){me.document.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();var range=ut.getCellsRange(startTd,currentTd);ut.setSelected(range)}else{me.document.body.style.webkitUserSelect=\"\";ut.clearSelected()}}evt.preventDefault?evt.preventDefault():evt.returnValue=false}function setCellHeight(cell,height,backHeight){var lineHight=parseInt(domUtils.getComputedStyle(cell,\"line-height\"),10),tmpHeight=backHeight+height;height=tmpHeight<lineHight?lineHight:tmpHeight;if(cell.style.height)cell.style.height=\"\";cell.rowSpan==1?cell.setAttribute(\"height\",height):cell.removeAttribute&&cell.removeAttribute(\"height\")}function getWidth(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)}function changeColWidth(cell,changeValue){var ut=getUETable(cell);if(ut){var table=ut.table,cells=getCellsByMoveBorder(cell,table);table.style.width=\"\";table.removeAttribute(\"width\");changeValue=correctChangeValue(changeValue,cell,cells);if(cell.nextSibling){var i=0;utils.each(cells,function(cellGroup){cellGroup.left.width=+cellGroup.left.width+changeValue;cellGroup.right&&(cellGroup.right.width=+cellGroup.right.width-changeValue)})}else{utils.each(cells,function(cellGroup){cellGroup.left.width-=-changeValue})}}}function isEditorDisabled(){return me.body.contentEditable===\"false\"}function changeRowHeight(td,changeValue){if(Math.abs(changeValue)<10)return;var ut=getUETable(td);if(ut){var cells=ut.getSameEndPosCells(td,\"y\"),backHeight=cells[0]?cells[0].offsetHeight:0;for(var i=0,cell;cell=cells[i++];){setCellHeight(cell,changeValue,backHeight)}}}function getCellsByMoveBorder(cell,table,isContainMergeCell){if(!table){table=domUtils.findParentByTagName(cell,\"table\")}if(!table){return null}var index=domUtils.getNodeIndex(cell),temp=cell,rows=table.rows,colIndex=0;while(temp){if(temp.nodeType===1){colIndex+=temp.colSpan||1}temp=temp.previousSibling}temp=null;var borderCells=[];utils.each(rows,function(tabRow){var cells=tabRow.cells,currIndex=0;utils.each(cells,function(tabCell){currIndex+=tabCell.colSpan||1;if(currIndex===colIndex){borderCells.push({left:tabCell,right:tabCell.nextSibling||null});return false}else if(currIndex>colIndex){if(isContainMergeCell){borderCells.push({left:tabCell})}return false}})});return borderCells}function getMinWidthByTableCells(cells){var minWidth=Number.MAX_VALUE;for(var i=0,curCell;curCell=cells[i];i++){minWidth=Math.min(minWidth,curCell.width||getTableCellWidth(curCell))}return minWidth}function correctChangeValue(changeValue,relatedCell,cells){changeValue-=getTabcellSpace();if(changeValue<0){return 0}changeValue-=getTableCellWidth(relatedCell);var direction=changeValue<0?\"left\":\"right\";changeValue=Math.abs(changeValue);utils.each(cells,function(cellGroup){var curCell=cellGroup[direction];if(curCell){changeValue=Math.min(changeValue,getTableCellWidth(curCell)-cellMinWidth)}});changeValue=changeValue<0?0:changeValue;return direction===\"left\"?-changeValue:changeValue}function getTableCellWidth(cell){var width=0,offset=0,width=cell.offsetWidth-getTabcellSpace();if(!cell.nextSibling){width-=getTableCellOffset(cell)}width=width<0?0:width;try{cell.width=width}catch(e){}return width}function getTableCellOffset(cell){tab=domUtils.findParentByTagName(cell,\"table\",false);if(tab.offsetVal===undefined){var prev=cell.previousSibling;if(prev){tab.offsetVal=cell.offsetWidth-prev.offsetWidth===UT.borderWidth?UT.borderWidth:0}else{tab.offsetVal=0}}return tab.offsetVal}function getTabcellSpace(){if(UT.tabcellSpace===undefined){var cell=null,tab=me.document.createElement(\"table\"),tbody=me.document.createElement(\"tbody\"),trow=me.document.createElement(\"tr\"),tabcell=me.document.createElement(\"td\"),mirror=null;tabcell.style.cssText=\"border: 0;\";tabcell.width=1;trow.appendChild(tabcell);trow.appendChild(mirror=tabcell.cloneNode(false));tbody.appendChild(trow);tab.appendChild(tbody);tab.style.cssText=\"visibility: hidden;\";me.body.appendChild(tab);UT.paddingSpace=tabcell.offsetWidth-1;var tmpTabWidth=tab.offsetWidth;tabcell.style.cssText=\"\";mirror.style.cssText=\"\";UT.borderWidth=(tab.offsetWidth-tmpTabWidth)/3;UT.tabcellSpace=UT.paddingSpace+UT.borderWidth;me.body.removeChild(tab)}getTabcellSpace=function(){return UT.tabcellSpace};return UT.tabcellSpace}function getDragLine(editor,doc){if(mousedown)return;dragLine=editor.document.createElement(\"div\");domUtils.setAttributes(dragLine,{id:\"ue_tableDragLine\",unselectable:\"on\",contenteditable:false,onresizestart:\"return false\",ondragstart:\"return false\",onselectstart:\"return false\",style:\"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"});editor.body.appendChild(dragLine)}function hideDragLine(editor){if(mousedown)return;var line;while(line=editor.document.getElementById(\"ue_tableDragLine\")){domUtils.remove(line)}}function showDragLineAt(state,cell){if(!cell)return;var table=domUtils.findParentByTagName(cell,\"table\"),caption=table.getElementsByTagName(\"caption\"),width=table.offsetWidth,height=table.offsetHeight-(caption.length>0?caption[0].offsetHeight:0),tablePos=domUtils.getXY(table),cellPos=domUtils.getXY(cell),css;switch(state){case\"h\":css=\"height:\"+height+\"px;top:\"+(tablePos.y+(caption.length>0?caption[0].offsetHeight:0))+\"px;left:\"+(cellPos.x+cell.offsetWidth);dragLine.style.cssText=css+\"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";break;case\"v\":css=\"width:\"+width+\"px;left:\"+tablePos.x+\"px;top:\"+(cellPos.y+cell.offsetHeight);dragLine.style.cssText=css+\"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\";break;default:}}function switchBorderColor(editor,flag){var tableArr=domUtils.getElementsByTagName(editor.body,\"table\"),color;for(var i=0,node;node=tableArr[i++];){var td=domUtils.getElementsByTagName(node,\"td\");if(td[0]){if(flag){color=td[0].style.borderColor.replace(/\\s/g,\"\");if(/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(color))domUtils.addClass(node,\"noBorderTable\")}else{domUtils.removeClasses(node,\"noBorderTable\")}}}}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getTargetTd(editor,evt){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,[\"td\",\"th\"],true),dir=null;if(!target){return null}dir=getRelation(target,mouseCoords(evt));if(!target){return null}if(dir===\"h1\"&&target.previousSibling){var position=domUtils.getXY(target),cellWidth=target.offsetWidth;if(Math.abs(position.x+cellWidth-evt.clientX)>cellWidth/3){target=target.previousSibling}}else if(dir===\"v1\"&&target.parentNode.previousSibling){var position=domUtils.getXY(target),cellHeight=target.offsetHeight;if(Math.abs(position.y+cellHeight-evt.clientY)>cellHeight/3){target=target.parentNode.previousSibling.firstChild}}return target&&!(editor.fireEvent(\"excludetable\",target)===true)?target:null}};UE.UETable.prototype.sortTable=function(sortByCellIndex,compareFn){var table=this.table,rows=table.rows,trArray=[],flag=rows[0].cells[0].tagName===\"TH\",lastRowIndex=0;if(this.selectedTds.length){var range=this.cellsRange,len=range.endRowIndex+1;for(var i=range.beginRowIndex;i<len;i++){trArray[i]=rows[i]}trArray.splice(0,range.beginRowIndex);lastRowIndex=range.endRowIndex+1===this.rowsNum?0:range.endRowIndex+1}else{for(var i=0,len=rows.length;i<len;i++){trArray[i]=rows[i]}}var Fn={reversecurrent:function(td1,td2){return 1},orderbyasc:function(td1,td2){var value1=td1.innerText||td1.textContent,value2=td2.innerText||td2.textContent;return value1.localeCompare(value2)},reversebyasc:function(td1,td2){var value1=td1.innerHTML,value2=td2.innerHTML;return value2.localeCompare(value1)},orderbynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value1||0)-(value2||0)},reversebynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value2||0)-(value1||0)}};table.setAttribute(\"data-sort-type\",compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]?compareFn:\"\");flag&&trArray.splice(0,1);trArray=utils.sort(trArray,function(tr1,tr2){var result;if(compareFn&&typeof compareFn===\"function\"){result=compareFn.call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else if(compareFn&&typeof compareFn===\"number\"){result=1}else if(compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]){result=Fn[compareFn].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else{result=Fn[\"orderbyasc\"].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}return result});var fragment=table.ownerDocument.createDocumentFragment();for(var j=0,len=trArray.length;j<len;j++){fragment.appendChild(trArray[j])}var tbody=table.getElementsByTagName(\"tbody\")[0];if(!lastRowIndex){tbody.appendChild(fragment)}else{tbody.insertBefore(fragment,rows[lastRowIndex-range.endRowIndex+range.beginRowIndex-1])}};UE.plugins[\"tablesort\"]=function(){var me=this,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)};me.ready(function(){utils.cssRule(\"tablesort\",\"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;\"+\"   background-image:url(\"+me.options.themePath+me.options.theme+\"/images/sortable.png);}\",me.document);me.addListener(\"afterexeccommand\",function(type,cmd){if(cmd==\"mergeright\"||cmd==\"mergedown\"||cmd==\"mergecells\"){this.execCommand(\"disablesort\")}})});UE.commands[\"sorttable\"]={queryCommandState:function(){var me=this,tableItems=getTableItemsByRange(me);if(!tableItems.cell)return-1;var table=tableItems.table,cells=table.getElementsByTagName(\"td\");for(var i=0,cell;cell=cells[i++];){if(cell.rowSpan!=1||cell.colSpan!=1)return-1}return 0},execCommand:function(cmd,fn){var me=this,range=me.selection.getRange(),bk=range.createBookmark(true),tableItems=getTableItemsByRange(me),cell=tableItems.cell,ut=getUETable(tableItems.table),cellInfo=ut.getCellInfo(cell);ut.sortTable(cellInfo.cellIndex,fn);range.moveToBookmark(bk);try{range.select()}catch(e){}}};UE.commands[\"enablesort\"]=UE.commands[\"disablesort\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(table&&cmd==\"enablesort\"){var cells=domUtils.getElementsByTagName(table,\"th td\");for(var i=0;i<cells.length;i++){if(cells[i].getAttribute(\"colspan\")>1||cells[i].getAttribute(\"rowspan\")>1)return-1}}return!table?-1:cmd==\"enablesort\"^table.getAttribute(\"data-sort\")!=\"sortEnabled\"?-1:0},execCommand:function(cmd){var table=getTableItemsByRange(this).table;table.setAttribute(\"data-sort\",cmd==\"enablesort\"?\"sortEnabled\":\"sortDisabled\");cmd==\"enablesort\"?domUtils.addClass(table,\"sortEnabled\"):domUtils.removeClasses(table,\"sortEnabled\")}}};UE.plugins[\"contextmenu\"]=function(){var me=this;me.setOpt(\"enableContextMenu\",me.getOpt(\"enableContextMenu\")||true);if(me.getOpt(\"enableContextMenu\")===false){return}var lang=me.getLang(\"contextMenu\"),menu,items=me.options.contextMenu||[{label:lang[\"selectall\"],cmdName:\"selectall\"},{label:lang.cleardoc,cmdName:\"cleardoc\",exec:function(){if(confirm(lang.confirmclear)){this.execCommand(\"cleardoc\")}}},\"-\",{label:lang.unlink,cmdName:\"unlink\"},\"-\",{group:lang.paragraph,icon:\"justifyjustify\",subMenu:[{label:lang.justifyleft,cmdName:\"justify\",value:\"left\"},{label:lang.justifyright,cmdName:\"justify\",value:\"right\"},{label:lang.justifycenter,cmdName:\"justify\",value:\"center\"},{label:lang.justifyjustify,cmdName:\"justify\",value:\"justify\"}]},\"-\",{group:lang.table,icon:\"table\",subMenu:[{label:lang.inserttable,cmdName:\"inserttable\"},{label:lang.deletetable,cmdName:\"deletetable\"},\"-\",{label:lang.deleterow,cmdName:\"deleterow\"},{label:lang.deletecol,cmdName:\"deletecol\"},{label:lang.insertcol,cmdName:\"insertcol\"},{label:lang.insertcolnext,cmdName:\"insertcolnext\"},{label:lang.insertrow,cmdName:\"insertrow\"},{label:lang.insertrownext,cmdName:\"insertrownext\"},\"-\",{label:lang.insertcaption,cmdName:\"insertcaption\"},{label:lang.deletecaption,cmdName:\"deletecaption\"},{label:lang.inserttitle,cmdName:\"inserttitle\"},{label:lang.deletetitle,cmdName:\"deletetitle\"},{label:lang.inserttitlecol,cmdName:\"inserttitlecol\"},{label:lang.deletetitlecol,cmdName:\"deletetitlecol\"},\"-\",{label:lang.mergecells,cmdName:\"mergecells\"},{label:lang.mergeright,cmdName:\"mergeright\"},{label:lang.mergedown,cmdName:\"mergedown\"},\"-\",{label:lang.splittorows,cmdName:\"splittorows\"},{label:lang.splittocols,cmdName:\"splittocols\"},{label:lang.splittocells,cmdName:\"splittocells\"},\"-\",{label:lang.averageDiseRow,cmdName:\"averagedistributerow\"},{label:lang.averageDisCol,cmdName:\"averagedistributecol\"},\"-\",{label:lang.edittd,cmdName:\"edittd\",exec:function(){if(UE.ui[\"edittd\"]){new UE.ui[\"edittd\"](this)}this.getDialog(\"edittd\").open()}},{label:lang.edittable,cmdName:\"edittable\",exec:function(){if(UE.ui[\"edittable\"]){new UE.ui[\"edittable\"](this)}this.getDialog(\"edittable\").open()}},{label:lang.setbordervisible,cmdName:\"setbordervisible\"}]},{group:lang.tablesort,icon:\"tablesort\",subMenu:[{label:lang.enablesort,cmdName:\"enablesort\"},{label:lang.disablesort,cmdName:\"disablesort\"},\"-\",{label:lang.reversecurrent,cmdName:\"sorttable\",value:\"reversecurrent\"},{label:lang.orderbyasc,cmdName:\"sorttable\",value:\"orderbyasc\"},{label:lang.reversebyasc,cmdName:\"sorttable\",value:\"reversebyasc\"},{label:lang.orderbynum,cmdName:\"sorttable\",value:\"orderbynum\"},{label:lang.reversebynum,cmdName:\"sorttable\",value:\"reversebynum\"}]},{group:lang.borderbk,icon:\"borderBack\",subMenu:[{label:lang.setcolor,cmdName:\"interlacetable\",exec:function(){this.execCommand(\"interlacetable\")}},{label:lang.unsetcolor,cmdName:\"uninterlacetable\",exec:function(){this.execCommand(\"uninterlacetable\")}},{label:lang.setbackground,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#bbb\",\"#ccc\"]})}},{label:lang.unsetbackground,cmdName:\"cleartablebackground\",exec:function(){this.execCommand(\"cleartablebackground\")}},{label:lang.redandblue,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"red\",\"blue\"]})}},{label:lang.threecolorgradient,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#aaa\",\"#bbb\",\"#ccc\"]})}}]},{group:lang.aligntd,icon:\"aligntd\",subMenu:[{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"bottom\"}}]},{group:lang.aligntable,icon:\"aligntable\",subMenu:[{cmdName:\"tablealignment\",className:\"left\",label:lang.tableleft,value:\"left\"},{cmdName:\"tablealignment\",className:\"center\",label:lang.tablecenter,value:\"center\"},{cmdName:\"tablealignment\",className:\"right\",label:lang.tableright,value:\"right\"}]},\"-\",{label:lang.insertparagraphbefore,cmdName:\"insertparagraph\",value:true},{label:lang.insertparagraphafter,cmdName:\"insertparagraph\"},{label:lang[\"copy\"],cmdName:\"copy\"},{label:lang[\"paste\"],cmdName:\"paste\"}];if(!items.length){return}var uiUtils=UE.ui.uiUtils;me.addListener(\"contextmenu\",function(type,evt){var offset=uiUtils.getViewportOffsetByEvent(evt);me.fireEvent(\"beforeselectionchange\");if(menu){menu.destroy()}for(var i=0,ti,contextItems=[];ti=items[i];i++){var last;(function(item){if(item==\"-\"){if((last=contextItems[contextItems.length-1])&&last!==\"-\"){contextItems.push(\"-\")}}else if(item.hasOwnProperty(\"group\")){for(var j=0,cj,subMenu=[];cj=item.subMenu[j];j++){(function(subItem){if(subItem==\"-\"){if((last=subMenu[subMenu.length-1])&&last!==\"-\"){subMenu.push(\"-\")}else{subMenu.splice(subMenu.length-1)}}else{if((me.commands[subItem.cmdName]||UE.commands[subItem.cmdName]||subItem.query)&&(subItem.query?subItem.query():me.queryCommandState(subItem.cmdName))>-1){subMenu.push({label:subItem.label||me.getLang(\"contextMenu.\"+subItem.cmdName+(subItem.value||\"\"))||\"\",className:\"edui-for-\"+subItem.cmdName+(subItem.className?\" edui-for-\"+subItem.cmdName+\"-\"+subItem.className:\"\"),onclick:subItem.exec?function(){subItem.exec.call(me)}:function(){me.execCommand(subItem.cmdName,subItem.value)}})}}})(cj)}if(subMenu.length){function getLabel(){switch(item.icon){case\"table\":return me.getLang(\"contextMenu.table\");case\"justifyjustify\":return me.getLang(\"contextMenu.paragraph\");case\"aligntd\":return me.getLang(\"contextMenu.aligntd\");case\"aligntable\":return me.getLang(\"contextMenu.aligntable\");case\"tablesort\":return lang.tablesort;case\"borderBack\":return lang.borderbk;default:return\"\"}}contextItems.push({label:getLabel(),className:\"edui-for-\"+item.icon,subMenu:{items:subMenu,editor:me}})}}else{if((me.commands[item.cmdName]||UE.commands[item.cmdName]||item.query)&&(item.query?item.query.call(me):me.queryCommandState(item.cmdName))>-1){contextItems.push({label:item.label||me.getLang(\"contextMenu.\"+item.cmdName),className:\"edui-for-\"+(item.icon?item.icon:item.cmdName+(item.value||\"\")),onclick:item.exec?function(){item.exec.call(me)}:function(){me.execCommand(item.cmdName,item.value)}})}}})(ti)}if(contextItems[contextItems.length-1]==\"-\"){contextItems.pop()}menu=new UE.ui.Menu({items:contextItems,className:\"edui-contextmenu\",editor:me});menu.render();menu.showAt(offset);me.fireEvent(\"aftershowcontextmenu\",menu);domUtils.preventDefault(evt);if(browser.ie){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}});me.addListener(\"aftershowcontextmenu\",function(type,menu){if(me.zeroclipboard){var items=menu.items;for(var key in items){if(items[key].className==\"edui-for-copy\"){me.zeroclipboard.clip(items[key].getDom())}}}})};UE.plugins[\"shortcutmenu\"]=function(){var me=this,menu,items=me.options.shortcutMenu||[];if(!items.length){return}me.addListener(\"mouseup\",function(type,e){var me=this,customEvt={type:type,target:e.target||e.srcElement,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY};setTimeout(function(){if(!menu){menu=new baidu.editor.ui.ShortCutMenu({editor:me,items:items.concat([]),theme:me.options.theme,className:\"edui-shortcutmenu\"});menu.render();me.fireEvent(\"afterrendershortcutmenu\",menu)}menu.show(customEvt,!!UE.plugins[\"contextmenu\"])});if(type===\"contextmenu\"){domUtils.preventDefault(e);if(browser.ie9below){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}}});me.addListener(\"keydown\",function(type){if(type===\"keydown\"){menu&&!menu.isHidden&&menu.hide()}})};UE.plugins[\"basestyle\"]=function(){var basestyles={bold:[\"strong\",\"b\"],italic:[\"em\",\"i\"],subscript:[\"sub\"],superscript:[\"sup\"]},getObj=function(editor,tagNames){return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames)},me=this;me.addshortcutkey({Bold:\"ctrl+66\",Italic:\"ctrl+73\",Underline:\"ctrl+85\"});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"b i\"),function(node){switch(node.tagName){case\"b\":node.tagName=\"strong\";break;case\"i\":node.tagName=\"em\"}})});for(var style in basestyles){(function(cmd,tagNames){me.commands[cmd]={execCommand:function(cmdName){var range=me.selection.getRange(),obj=getObj(this,tagNames);if(range.collapsed){if(obj){var tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle(tagNames);range.setStartBefore(tmpText);domUtils.remove(tmpText)}else{var tmpNode=range.document.createElement(tagNames[0]);if(cmdName==\"superscript\"||cmdName==\"subscript\"){tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle([\"sub\",\"sup\"]).setStartBefore(tmpText).collapse(true)}range.insertNode(tmpNode).setStart(tmpNode,0)}range.collapse(true)}else{if(cmdName==\"superscript\"||cmdName==\"subscript\"){if(!obj||obj.tagName.toLowerCase()!=cmdName){range.removeInlineStyle([\"sub\",\"sup\"])}}obj?range.removeInlineStyle(tagNames):range.applyInlineStyle(tagNames[0])}range.select()},queryCommandState:function(){return getObj(this,tagNames)?1:0}}})(style,basestyles[style])}};UE.plugins[\"elementpath\"]=function(){var currentLevel,tagNames,me=this;me.setOpt(\"elementPathEnabled\",true);if(!me.options.elementPathEnabled){return}me.commands[\"elementpath\"]={execCommand:function(cmdName,level){var start=tagNames[level],range=me.selection.getRange();currentLevel=level*1;range.selectNode(start).select()},queryCommandValue:function(){var parents=[].concat(this.selection.getStartElementPath()).reverse(),names=[];tagNames=parents;for(var i=0,ci;ci=parents[i];i++){if(ci.nodeType==3){continue}var name=ci.tagName.toLowerCase();if(name==\"img\"&&ci.getAttribute(\"anchorname\")){name=\"anchor\"}names[i]=name;if(currentLevel==i){currentLevel=-1;break}}return names}}};UE.plugins[\"formatmatch\"]=function(){var me=this,list=[],img,flag=0;me.addListener(\"reset\",function(){list=[];flag=0});function addList(type,evt){if(browser.webkit){var target=evt.target.tagName==\"IMG\"?evt.target:null}function addFormat(range){if(text){range.selectNode(text)}return range.applyInlineStyle(list[list.length-1].tagName,null,list)}me.undoManger&&me.undoManger.save();var range=me.selection.getRange(),imgT=target||range.getClosedNode();if(img&&imgT&&imgT.tagName==\"IMG\"){imgT.style.cssText+=\";float:\"+(img.style.cssFloat||img.style.styleFloat||\"none\")+\";display:\"+(img.style.display||\"inline\");img=null}else{if(!img){var collapsed=range.collapsed;if(collapsed){var text=me.document.createTextNode(\"match\");range.insertNode(text).select()}me.__hasEnterExecCommand=true;var removeFormatAttributes=me.options.removeFormatAttributes;me.options.removeFormatAttributes=\"\";me.execCommand(\"removeformat\");me.options.removeFormatAttributes=removeFormatAttributes;me.__hasEnterExecCommand=false;range=me.selection.getRange();if(list.length){addFormat(range)}if(text){range.setStartBefore(text).collapse(true)}range.select();text&&domUtils.remove(text)}}me.undoManger&&me.undoManger.save();me.removeListener(\"mouseup\",addList);flag=0}me.commands[\"formatmatch\"]={execCommand:function(cmdName){if(flag){flag=0;list=[];me.removeListener(\"mouseup\",addList);return}var range=me.selection.getRange();img=range.getClosedNode();if(!img||img.tagName!=\"IMG\"){range.collapse(true).shrinkBoundary();var start=range.startContainer;list=domUtils.findParents(start,true,function(node){return!domUtils.isBlockElm(node)&&node.nodeType==1});for(var i=0,ci;ci=list[i];i++){if(ci.tagName==\"A\"){list.splice(i,1);break}}}me.addListener(\"mouseup\",addList);flag=1},queryCommandState:function(){return flag},notNeedUndo:1}};UE.plugin.register(\"searchreplace\",function(){var me=this;var _blockElm={table:1,tbody:1,tr:1,ol:1,ul:1};var lastRng=null;function getText(node){var text=node.nodeType==3?node.nodeValue:node[browser.ie?\"innerText\":\"textContent\"];return text.replace(domUtils.fillChar,\"\")}function findTextInString(textContent,opt,currentIndex){var str=opt.searchStr;var reg=new RegExp(str,\"g\"+(opt.casesensitive?\"\":\"i\")),match;if(opt.dir==-1){textContent=textContent.substr(0,currentIndex);textContent=textContent.split(\"\").reverse().join(\"\");str=str.split(\"\").reverse().join(\"\");match=reg.exec(textContent);if(match){return currentIndex-match.index-str.length}}else{textContent=textContent.substr(currentIndex);match=reg.exec(textContent);if(match){return match.index+currentIndex}}return-1}function findTextBlockElm(node,currentIndex,opt){var textContent,index,methodName=opt.all||opt.dir==1?\"getNextDomNode\":\"getPreDomNode\";if(domUtils.isBody(node)){node=node.firstChild}var first=1;while(node){textContent=getText(node);index=findTextInString(textContent,opt,currentIndex);first=0;if(index!=-1){return{node:node,index:index}}node=domUtils[methodName](node);while(node&&_blockElm[node.nodeName.toLowerCase()]){node=domUtils[methodName](node,true)}if(node){currentIndex=opt.dir==-1?getText(node).length:0}}}function findNTextInBlockElm(node,index,str){var currentIndex=0,currentNode=node.firstChild,currentNodeLength=0,result;while(currentNode){if(currentNode.nodeType==3){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){return{node:currentNode,index:currentNodeLength-(currentIndex-index)}}}else if(!dtd.$empty[currentNode.tagName]){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){result=findNTextInBlockElm(currentNode,currentNodeLength-(currentIndex-index),str);if(result){return result}}}currentNode=domUtils.getNextDomNode(currentNode)}}function searchReplace(me,opt){var rng=lastRng||me.selection.getRange(),startBlockNode,searchStr=opt.searchStr,span=me.document.createElement(\"span\");span.innerHTML=\"$$ueditor_searchreplace_key$$\";rng.shrinkBoundary(true);if(!rng.collapsed){rng.select();var rngText=me.selection.getText();if(new RegExp(\"^\"+opt.searchStr+\"$\",opt.casesensitive?\"\":\"i\").test(rngText)){if(opt.replaceStr!=undefined){replaceText(rng,opt.replaceStr);rng.select();return true}else{rng.collapse(opt.dir==-1)}}}rng.insertNode(span);rng.enlargeToBlockElm(true);startBlockNode=rng.startContainer;var currentIndex=getText(startBlockNode).indexOf(\"$$ueditor_searchreplace_key$$\");rng.setStartBefore(span);domUtils.remove(span);var result=findTextBlockElm(startBlockNode,currentIndex,opt);if(result){var rngStart=findNTextInBlockElm(result.node,result.index,searchStr);var rngEnd=findNTextInBlockElm(result.node,result.index+searchStr.length,searchStr);rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index);if(opt.replaceStr!==undefined){replaceText(rng,opt.replaceStr)}rng.select();return true}else{rng.setCursor()}}function replaceText(rng,str){str=me.document.createTextNode(str);rng.deleteContents().insertNode(str)}return{commands:{searchreplace:{execCommand:function(cmdName,opt){utils.extend(opt,{all:false,casesensitive:false,dir:1},true);var num=0;if(opt.all){lastRng=null;var rng=me.selection.getRange(),first=me.body.firstChild;if(first&&first.nodeType==1){rng.setStart(first,0);rng.shrinkBoundary(true)}else if(first.nodeType==3){rng.setStartBefore(first)}rng.collapse(true).select(true);if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}while(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}else{if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}if(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}return num},notNeedUndo:1}},bindEvents:{clearlastSearchResult:function(){lastRng=null}}}});UE.plugins[\"customstyle\"]=function(){var me=this;me.setOpt({customstyle:[{tag:\"h1\",name:\"tc\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;\"},{tag:\"h1\",name:\"tl\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;\"},{tag:\"span\",name:\"im\",style:\"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"},{tag:\"span\",name:\"hi\",style:\"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"}]});me.commands[\"customstyle\"]={execCommand:function(cmdName,obj){var me=this,tagName=obj.tag,node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true),range,bk,tmpObj={};for(var p in obj){if(obj[p]!==undefined)tmpObj[p]=obj[p]}delete tmpObj.tag;if(node&&node.getAttribute(\"label\")==obj.label){range=this.selection.getRange();bk=range.createBookmark();if(range.collapsed){if(dtd.$block[node.tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(node,fillNode);node.parentNode.insertBefore(fillNode,node);domUtils.remove(node)}else{domUtils.remove(node,true)}}else{var common=domUtils.getCommonAncestor(bk.start,bk.end),nodes=domUtils.getElementsByTagName(common,tagName);if(new RegExp(tagName,\"i\").test(common.tagName)){nodes.push(common)}for(var i=0,ni;ni=nodes[i++];){if(ni.getAttribute(\"label\")==obj.label){var ps=domUtils.getPosition(ni,bk.start),pe=domUtils.getPosition(ni,bk.end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS))if(dtd.$block[tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(ni,fillNode);ni.parentNode.insertBefore(fillNode,ni)}domUtils.remove(ni,true)}}node=domUtils.findParent(common,function(node){return node.getAttribute(\"label\")==obj.label},true);if(node){domUtils.remove(node,true)}}range.moveToBookmark(bk).select()}else{if(dtd.$block[tagName]){this.execCommand(\"paragraph\",tagName,tmpObj,\"customstyle\");range=me.selection.getRange();if(!range.collapsed){range.collapse();node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")==obj.label},true);var pNode=me.document.createElement(\"p\");domUtils.insertAfter(node,pNode);domUtils.fillNode(me.document,pNode);range.setStart(pNode,0).setCursor()}}else{range=me.selection.getRange();if(range.collapsed){node=me.document.createElement(tagName);domUtils.setAttributes(node,tmpObj);range.insertNode(node).setStart(node,0).setCursor();return}bk=range.createBookmark();range.applyInlineStyle(tagName,tmpObj).moveToBookmark(bk).select()}}},queryCommandValue:function(){var parent=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return node.getAttribute(\"label\")});return parent?parent.getAttribute(\"label\"):\"\"}};me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var range=me.selection.getRange();if(range.collapsed){var node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true);if(node&&dtd.$block[node.tagName]&&domUtils.isEmptyNode(node)){var p=me.document.createElement(\"p\");domUtils.insertAfter(node,p);domUtils.fillNode(me.document,p);domUtils.remove(node);range.setStart(p,0).setCursor()}}}})};UE.plugins[\"catchremoteimage\"]=function(){var me=this,ajax=UE.ajax;if(me.options.catchRemoteImageEnable===false){return}me.setOpt({catchRemoteImageEnable:false});var catcherLocalDomain=me.getOpt(\"catcherLocalDomain\"),catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\")),catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\"),catcherFieldName=me.getOpt(\"catcherFieldName\");me.addListener(\"serverConfigLoaded\",function(){catcherLocalDomain=me.getOpt(\"catcherLocalDomain\");catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\"));catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\");catcherFieldName=me.getOpt(\"catcherFieldName\")});me.addListener(\"afterpaste\",function(){me.fireEvent(\"catchremoteimage\")});var catchRemoteImageCatching=false;function sendApi(imgs,callbacks){var params=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf(\"?\")===-1?\"?\":\"&\")+params),isJsonp=utils.isCrossDomainUrl(url),opt={method:\"POST\",dataType:isJsonp?\"jsonp\":\"\",timeout:6e4,headers:me.options.serverHeaders||{},onsuccess:callbacks[\"success\"],onerror:callbacks[\"error\"]};opt[catcherFieldName]=imgs;ajax.request(url,opt)}function catchElement(type,ele,imageUrl){sendApi([imageUrl],{success:function(r){try{var info=r.state!==undefined?r:eval(\"(\"+r.responseText+\")\")}catch(e){return}var oldSrc,newSrc,oldBgIMG,newBgIMG,list=info.list;var catchFailList=[];var catchSuccessList=[];var failIMG=me.options.themePath+me.options.theme+\"/images/img-cracked.png\";var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\";var cj=list[0];switch(type){case\"image\":oldSrc=ele.getAttribute(\"_src\")||ele.src||\"\";if(cj.state===\"SUCCESS\"){newSrc=catcherUrlPrefix+cj.url;domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:newSrc,_src:newSrc,\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:failIMG,_src:failIMG,\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break;case\"background\":oldBgIMG=ele.getAttribute(\"data-background\")||\"\";if(cj.state===\"SUCCESS\"){newBgIMG=catcherUrlPrefix+cj.url;ele.style.cssText=ele.style.cssText.replace(loadingIMG,newBgIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{ele.style.cssText=ele.style.cssText.replace(loadingIMG,failIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break}me.fireEvent(\"catchremotesuccess\",catchSuccessList,catchFailList);catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)},error:function(){me.fireEvent(\"catchremoteerror\");catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)}})}function catchRemoteImage(){if(catchRemoteImageCatching){return}catchRemoteImageCatching=true;var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\",imgs=me.document.querySelectorAll('[style*=\"url\"],img'),test=function(src,urls){if(src.indexOf(location.host)!==-1||/(^\\.)|(^\\/)/.test(src)){return true}if(urls){for(var j=0,url;url=urls[j++];){if(src.indexOf(url)!==-1){return true}}}return false};for(var i=0,ci;ci=imgs[i++];){if(ci.getAttribute(\"data-word-image\")||ci.getAttribute(\"data-catch-result\")){continue}if(ci.nodeName===\"IMG\"){var src=ci.getAttribute(\"_src\")||ci.src||\"\";if(/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)){catchElement(\"image\",ci,src);domUtils.setAttributes(ci,{class:\"loadingclass\",_src:src,src:loadingIMG});return}}else{var backgroundImageurl=ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/,\"\").replace(/[\\'\\\"]?\\).*/,\"\");if(/^(https?|ftp):/i.test(backgroundImageurl)&&!test(backgroundImageurl,catcherLocalDomain)){catchElement(\"background\",ci,backgroundImageurl);ci.style.cssText=ci.style.cssText.replace(backgroundImageurl,loadingIMG);domUtils.setAttributes(ci,{\"data-background\":backgroundImageurl});return}}}}me.addListener(\"catchremoteimage\",function(){catchRemoteImage()})};UE.commands[\"insertparagraph\"]={execCommand:function(cmdName,front){var me=this,range=me.selection.getRange(),start=range.startContainer,tmpNode;while(start){if(domUtils.isBody(start)){break}tmpNode=start;start=start.parentNode}if(tmpNode){var p=me.document.createElement(\"p\");if(front){tmpNode.parentNode.insertBefore(p,tmpNode)}else{tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling)}domUtils.fillNode(me.document,p);range.setStart(p,0).setCursor(false,true)}}};UE.plugins[\"template\"]=function(){UE.commands[\"template\"]={execCommand:function(cmd,obj){obj.html&&this.execCommand(\"inserthtml\",obj.html)}};this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement,range=this.selection.getRange();var tnode=domUtils.findParent(el,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);tnode&&range.selectNode(tnode).shrinkBoundary().select()});this.addListener(\"keydown\",function(type,evt){var range=this.selection.getRange();if(!range.collapsed){if(!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){var tnode=domUtils.findParent(range.startContainer,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);if(tnode){domUtils.removeClasses(tnode,[\"ue_t\"])}}}})};UE.plugin.register(\"autoupload\",function(){function sendAndInsertFile(file,editor){var me=editor;var fieldName,urlPrefix,maxSize,allowFiles,actionUrl,loadingHtml,errorHandler,successHandler,filetype=/image\\/\\w+/i.test(file.type)?\"image\":\"file\",loadingId=\"loading_\"+(+new Date).toString(36);fieldName=me.getOpt(filetype+\"FieldName\");urlPrefix=me.getOpt(filetype+\"UrlPrefix\");maxSize=me.getOpt(filetype+\"MaxSize\");allowFiles=me.getOpt(filetype+\"AllowFiles\");actionUrl=me.getActionUrl(me.getOpt(filetype+\"ActionName\"));errorHandler=function(title){var loader=me.document.getElementById(loadingId);loader&&domUtils.remove(loader);me.fireEvent(\"showmessage\",{id:loadingId,content:title,type:\"error\",timeout:4e3})};if(filetype===\"image\"){loadingHtml='<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">';successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);if(loader){domUtils.removeClasses(loader,\"uep-loading\");loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",data.original||\"\");loader.removeAttribute(\"id\");me.trigger(\"contentchange\",loader)}}}else{loadingHtml=\"<p>\"+'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">'+\"</p>\";successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);var rng=me.selection.getRange(),bk=rng.createBookmark();rng.selectNode(loader).select();me.execCommand(\"insertfile\",{url:link});rng.moveToBookmark(bk).select()}}me.execCommand(\"inserthtml\",loadingHtml);if(!me.getOpt(filetype+\"ActionName\")){errorHandler(me.getLang(\"autoupload.errorLoadConfig\"));return}if(file.size>maxSize){errorHandler(me.getLang(\"autoupload.exceedSizeError\"));return}var fileext=file.name?file.name.substr(file.name.lastIndexOf(\".\")):\"\";if(fileext&&filetype!=\"image\"||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")==-1){errorHandler(me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(fieldName,file,file.name);UE.api.requestAction(me,me.getOpt(filetype+\"ActionName\"),{data:formData}).then(function(res){successHandler(res.data)}).catch(function(err){errorHandler(me.getLang(\"autoupload.loadError\"))})};var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(\"image\"===filetype&&imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"AutoUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"AutoUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}}function getPasteImage(e){return e.clipboardData&&e.clipboardData.items&&e.clipboardData.items.length==1&&/^image\\//.test(e.clipboardData.items[0].type)?e.clipboardData.items:null}function getDropImage(e){return e.dataTransfer&&e.dataTransfer.files?e.dataTransfer.files:null}return{outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}});utils.each(root.getNodesByTagName(\"p\"),function(n){if(/\\bloadpara\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},bindEvents:{defaultOptions:{enableDragUpload:true,enablePasteUpload:true},ready:function(e){var me=this;if(window.FormData&&window.FileReader){var handler=function(e){var hasImg=false,items;items=e.type==\"paste\"?getPasteImage(e):getDropImage(e);if(items){var len=items.length,file;while(len--){file=items[len];if(file.getAsFile)file=file.getAsFile();if(file&&file.size>0){sendAndInsertFile(file,me);hasImg=true}}hasImg&&e.preventDefault()}};if(me.getOpt(\"enablePasteUpload\")!==false){domUtils.on(me.body,\"paste \",handler)}if(me.getOpt(\"enableDragUpload\")!==false){domUtils.on(me.body,\"drop\",handler);domUtils.on(me.body,\"dragover\",function(e){if(e.dataTransfer.types[0]==\"Files\"){e.preventDefault()}})}else{if(browser.gecko){domUtils.on(me.body,\"drop\",function(e){if(getDropImage(e)){e.preventDefault()}})}}utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-left:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)}}}}});UE.plugin.register(\"section\",function(){function Section(option){this.tag=\"\";this.level=-1,this.dom=null;this.nextSection=null;this.previousSection=null;this.parentSection=null;this.startAddress=[];this.endAddress=[];this.children=[]}function getSection(option){var section=new Section;return utils.extend(section,option)}function getNodeFromAddress(startAddress,root){var current=root;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var me=this;return{bindMultiEvents:{type:\"aftersetcontent afterscencerestore\",handler:function(){me.fireEvent(\"updateSections\")}},bindEvents:{ready:function(){me.fireEvent(\"updateSections\");domUtils.on(me.body,\"drop paste\",function(){me.fireEvent(\"updateSections\")})},afterexeccommand:function(type,cmd){if(cmd==\"paragraph\"){me.fireEvent(\"updateSections\")}},keyup:function(type,e){var me=this,range=me.selection.getRange();if(range.collapsed!=true){me.fireEvent(\"updateSections\")}else{var keyCode=e.keyCode||e.which;if(keyCode==13||keyCode==8||keyCode==46){me.fireEvent(\"updateSections\")}}}},commands:{getsections:{execCommand:function(cmd,levels){var levelFn=levels||[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];for(var i=0;i<levelFn.length;i++){if(typeof levelFn[i]==\"string\"){levelFn[i]=function(fn){return function(node){return node.tagName==fn.toUpperCase()}}(levelFn[i])}else if(typeof levelFn[i]!=\"function\"){levelFn[i]=function(node){return null}}}function getSectionLevel(node){for(var i=0;i<levelFn.length;i++){if(levelFn[i](node))return i}return-1}var me=this,Directory=getSection({level:-1,title:\"root\"}),previous=Directory;function traversal(node,Directory){var level,tmpSection=null,parent,child,children=node.childNodes;for(var i=0,len=children.length;i<len;i++){child=children[i];level=getSectionLevel(child);if(level>=0){var address=me.selection.getRange().selectNode(child).createAddress(true).startAddress,current=getSection({tag:child.tagName,title:child.innerText||child.textContent||\"\",level:level,dom:child,startAddress:utils.clone(address,[]),endAddress:utils.clone(address,[]),children:[]});previous.nextSection=current;current.previousSection=previous;parent=previous;while(level<=parent.level){parent=parent.parentSection}current.parentSection=parent;parent.children.push(current);tmpSection=previous=current}else{child.nodeType===1&&traversal(child,Directory);tmpSection&&tmpSection.endAddress[tmpSection.endAddress.length-1]++}}}traversal(me.body,Directory);return Directory},notNeedUndo:true},movesection:{execCommand:function(cmd,sourceSection,targetSection,isAfter){var me=this,targetAddress,target;if(!sourceSection||!targetSection||targetSection.level==-1)return;targetAddress=isAfter?targetSection.endAddress:targetSection.startAddress;target=getNodeFromAddress(targetAddress,me.body);if(!targetAddress||!target||isContainsAddress(sourceSection.startAddress,sourceSection.endAddress,targetAddress))return;var startNode=getNodeFromAddress(sourceSection.startAddress,me.body),endNode=getNodeFromAddress(sourceSection.endAddress,me.body),current,nextNode;if(isAfter){current=endNode;while(current&&!(domUtils.getPosition(startNode,current)&domUtils.POSITION_FOLLOWING)){nextNode=current.previousSibling;domUtils.insertAfter(target,current);if(current==startNode)break;current=nextNode}}else{current=startNode;while(current&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;target.parentNode.insertBefore(current,target);if(current==endNode)break;current=nextNode}}me.fireEvent(\"updateSections\");function isContainsAddress(startAddress,endAddress,addressTarget){var isAfterStartAddress=false,isBeforeEndAddress=false;for(var i=0;i<startAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]>startAddress[i]){isAfterStartAddress=true;break}else if(addressTarget[i]<startAddress[i]){break}}for(var i=0;i<endAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]<startAddress[i]){isBeforeEndAddress=true;break}else if(addressTarget[i]>startAddress[i]){break}}return isAfterStartAddress&&isBeforeEndAddress}}},deletesection:{execCommand:function(cmd,section,keepChildren){var me=this;if(!section)return;function getNodeFromAddress(startAddress){var current=me.body;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var startNode=getNodeFromAddress(section.startAddress),endNode=getNodeFromAddress(section.endAddress),current=startNode,nextNode;if(!keepChildren){while(current&&domUtils.inDoc(endNode,me.document)&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;domUtils.remove(current);current=nextNode}}else{domUtils.remove(current)}me.fireEvent(\"updateSections\")}},selectsection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:utils.clone(section.startAddress,[]),endAddress:utils.clone(section.endAddress,[])};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).select().scrollToView();return true},notNeedUndo:true},scrolltosection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:section.startAddress,endAddress:section.endAddress};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).scrollToView();return true},notNeedUndo:true}}}});UE.plugin.register(\"simpleupload\",function(){var me=this,isLoaded=false,containerBtn;function initUploadBtn(){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer;font-size:0;opacity:0;\";input.type=\"file\";containerBtn.appendChild(input);domUtils.on(input,\"click\",function(e){var toolbarCallback=me.getOpt(\"toolbarCallback\");if(toolbarCallback){if(true===toolbarCallback(\"simpleupload\",me)){e.stopPropagation();e.preventDefault()}}});domUtils.on(input,\"change\",function(e){var state=me.queryCommandState(\"simpleupload\");if(state===-1){return}if(!input.value){return}var loadingId=UE.dialog.loadingPlaceholder(me);if(!me.getOpt(\"imageActionName\")){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.errorLoadConfig\"));return}var allowFiles=me.getOpt(\"imageAllowFiles\");var filename=input.value,fileext=filename?filename.substr(filename.lastIndexOf(\".\")):\"\";if(!fileext||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")===-1){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(me.getOpt(\"imageFieldName\"),file,file.name);UE.api.requestAction(me,me.getOpt(\"imageActionName\"),{data:formData}).then(function(res){if(\"SUCCESS\"===res.data.state&&res.data.url){const loader=me.document.getElementById(loadingId);domUtils.removeClasses(loader,\"uep-loading\");const link=me.options.imageUrlPrefix+res.data.url;loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",res.data.original||\"\");loader.removeAttribute(\"id\");me.fireEvent(\"contentchange\");me.fireEvent(\"uploadsuccess\",{res:res.data,type:\"image\"})}else{UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,res.data.state)}}).catch(function(err){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,err)})};var file=input.files[0];var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"SimpleUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"SimpleUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}});var stateTimer;me.addListener(\"selectionchange\",function(){clearTimeout(stateTimer);stateTimer=setTimeout(function(){var state=me.queryCommandState(\"simpleupload\");if(state===-1){input.disabled=\"disabled\"}else{input.disabled=false}},400)});isLoaded=true}return{bindEvents:{ready:function(){utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)},simpleuploadbtnready:function(type,container){containerBtn=container;me.afterConfigReady(initUploadBtn)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},commands:{simpleupload:{queryCommandState:function(){return isLoaded?0:-1}}}}});UE.plugin.register(\"serverparam\",function(){var me=this,serverParam={};return{commands:{serverparam:{execCommand:function(cmd,key,value){if(key===undefined||key===null){serverParam={}}else if(utils.isString(key)){if(value===undefined||value===null){delete serverParam[key]}else{serverParam[key]=value}}else if(utils.isObject(key)){utils.extend(serverParam,key,false)}else if(utils.isFunction(key)){utils.extend(serverParam,key(),false)}},queryCommandValue:function(){return serverParam||{}}}}}});UE.plugin.register(\"insertfile\",function(){var me=this;function getFileIcon(url){var ext=url.substr(url.lastIndexOf(\".\")+1).toLowerCase(),maps={ai:\"ai.svg\",apk:\"apk.svg\",chm:\"chm.svg\",css:\"css.svg\",doc:\"doc.svg\",docx:\"docx.svg\",dwg:\"dwg.svg\",gif:\"gif.svg\",html:\"html.svg\",jpeg:\"jpeg.svg\",jpg:\"jpg.svg\",log:\"log.svg\",mp3:\"mp3.svg\",mp4:\"mp4.svg\",pdf:\"pdf.svg\",png:\"png.svg\",ppt:\"ppt.svg\",pptx:\"pptx.svg\",psd:\"psd.svg\",rar:\"rar.svg\",svg:\"svg.svg\",torrent:\"torrent.svg\",txt:\"txt.svg\",unknown:\"unknown.svg\",xls:\"xls.svg\",xlsx:\"xlsx.svg\",zip:\"zip.svg\"};return maps[ext]?maps[ext]:maps[\"unknown\"]}return{commands:{insertfile:{execCommand:function(command,filelist){filelist=utils.isArray(filelist)?filelist:[filelist];if(me.fireEvent(\"beforeinsertfile\",filelist)===true){return}var i,item,icon,title,html=\"\",URL=me.getOpt(\"UEDITOR_HOME_URL\"),iconDir=me.options.themePath+me.options.theme+\"/exts/\";for(i=0;i<filelist.length;i++){item=filelist[i];icon=iconDir+getFileIcon(item.url);title=item.title||item.url.substr(item.url.lastIndexOf(\"/\")+1);html+=\"<p>\"+'<a style=\"background:#EEE;padding:10px;border-radius:5px;line-height:1.5em;display:inline-flex;align-items:center;\" href=\"'+item.url+'\" title=\"'+title+'\" target=\"_blank\">'+'<img style=\"vertical-align:middle;margin-right:0.5em;height:1.5em;\" src=\"'+icon+'\" _src=\"'+icon+'\" />'+'<span style=\"color:#111111;line-height:1.5em;flex-grow:1;\">'+title+\"</span>\"+\"</a>\"+\"</p>\"}me.execCommand(\"insertHtml\",html);me.fireEvent(\"afterinsertfile\",filelist)}}}}});UE.plugins[\"markdown-shortcut\"]=function(){if(!UE.browser.chrome){return}const me=this;const getCleanHtml=function(node){let html=node.innerHTML;html=html.replace(/[\\u200b]*/g,\"\");return html};let shortCuts=[];for(let i=1;i<=6;i++){const regExp=new RegExp(\"^\\\\t?\"+Array(i+1).join(\"#\")+\"(\\\\s|&nbsp;)\");(function(command){shortCuts.push({name:\"Head\"+i,tagName:[\"P\"],key:[\" \"],offset:[i+1,i+2],match:[regExp],callback:function(param){me.__hasEnterExecCommand=true;me.execCommand(\"paragraph\",command);let range=me.selection.getRange();let node=range.startContainer;let html=getCleanHtml(node);html=html.replace(regExp,\"\");if(!html){html=domUtils.fillChar}node.innerHTML=html;me.__hasEnterExecCommand=false}})})(\"h\"+i)}me.on(\"ready\",function(){domUtils.on(me.body,\"keyup\",function(e){let range=me.selection.getRange();if(range.endOffset!==range.startOffset){return}let key=e.key;let offset=range.startOffset;const node=range.startContainer.parentNode;let html=getCleanHtml(node);let tagName=node.tagName;for(let s of shortCuts){if(!s.tagName.includes(tagName)){continue}if(!s.key.includes(key)){continue}if(!s.offset.includes(offset)){continue}for(let m of s.match){let match=html.match(m);if(match){s.callback({node:node});break}}}})})};UE.plugins[\"quick-operate\"]=function(){if(!UE.browser.chrome){return}return;let me=this;const uiUtils=UE.ui.uiUtils;me.on(\"ready\",function(){let quickOperate=new UE.ui.QuickOperate({className:\"edui-quick-operate\",editor:me});quickOperate.render();let quickOperateNode={root:null,target:null};domUtils.on(quickOperate.el,\"mouseenter\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.add(\"edui-quick-operate-active\")});domUtils.on(quickOperate.el,\"mouseleave\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.remove(\"edui-quick-operate-active\")});domUtils.on(me.body,\"mouseout\",function(evt){});domUtils.on(me.body,\"mouseover\",function(evt){const node=evt.target;let rootNode=node;for(;rootNode.parentNode&&rootNode.parentNode.tagName!==\"BODY\";){rootNode=rootNode.parentNode}quickOperateNode.root=rootNode;quickOperateNode.target=node;const rect=node.getBoundingClientRect();const offset=uiUtils.getClientRect(node);offset.left=offset.left-55;quickOperate.showAt(offset)})})};var baidu=baidu||{};baidu.editor=baidu.editor||{};UE.ui=baidu.editor.ui={};(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils;var magic=\"$EDITORUI\";var root=window[magic]={};var uidMagic=\"ID\"+magic;var uidCount=0;var uiUtils=baidu.editor.ui.uiUtils={uid:function(obj){return obj?obj[uidMagic]||(obj[uidMagic]=++uidCount):++uidCount},hook:function(fn,callback){var dg;if(fn&&fn._callbacks){dg=fn}else{dg=function(){var q;if(fn){q=fn.apply(this,arguments)}var callbacks=dg._callbacks;var k=callbacks.length;while(k--){var r=callbacks[k].apply(this,arguments);if(q===undefined){q=r}}return q};dg._callbacks=[]}dg._callbacks.push(callback);return dg},createElementByHtml:function(html){var el=document.createElement(\"div\");el.innerHTML=html;el=el.firstChild;el.parentNode.removeChild(el);return el},getViewportElement:function(){return browser.ie&&browser.quirks?document.body:document.documentElement},getClientRect:function(element){var bcr;try{bcr=element.getBoundingClientRect()}catch(e){bcr={left:0,top:0,height:0,width:0}}var rect={left:Math.round(bcr.left),top:Math.round(bcr.top),height:Math.round(bcr.bottom-bcr.top),width:Math.round(bcr.right-bcr.left)};var doc;while((doc=element.ownerDocument)!==document&&(element=domUtils.getWindow(doc).frameElement)){bcr=element.getBoundingClientRect();rect.left+=bcr.left;rect.top+=bcr.top}rect.bottom=rect.top+rect.height;rect.right=rect.left+rect.width;return rect},getViewportRect:function(){var viewportEl=uiUtils.getViewportElement();var width=(window.innerWidth||viewportEl.clientWidth)|0;var height=(window.innerHeight||viewportEl.clientHeight)|0;return{left:0,top:0,height:height,width:width,bottom:height,right:width}},setViewportOffset:function(element,offset){var rect;var fixedLayer=uiUtils.getFixedLayer();if(element.parentNode===fixedLayer){element.style.left=offset.left+\"px\";element.style.top=offset.top+\"px\"}else{domUtils.setViewportOffset(element,offset)}},getEventOffset:function(evt){var el=evt.target||evt.srcElement;var rect=uiUtils.getClientRect(el);var offset=uiUtils.getViewportOffsetByEvent(evt);return{left:offset.left-rect.left,top:offset.top-rect.top}},getViewportOffsetByEvent:function(evt){var el=evt.target||evt.srcElement;var frameEl=domUtils.getWindow(el).frameElement;var offset={left:evt.clientX,top:evt.clientY};if(frameEl&&el.ownerDocument!==document){var rect=uiUtils.getClientRect(frameEl);offset.left+=rect.left;offset.top+=rect.top}return offset},setGlobal:function(id,obj){root[id]=obj;return magic+'[\"'+id+'\"]'},unsetGlobal:function(id){delete root[id]},copyAttributes:function(tgt,src){var attributes=src.attributes;var k=attributes.length;while(k--){var attrNode=attributes[k];if(attrNode.nodeName!=\"style\"&&attrNode.nodeName!=\"class\"&&(!browser.ie||attrNode.specified)){tgt.setAttribute(attrNode.nodeName,attrNode.nodeValue)}}if(src.className){domUtils.addClass(tgt,src.className)}if(src.style.cssText){tgt.style.cssText+=\";\"+src.style.cssText}},removeStyle:function(el,styleName){if(el.style.removeProperty){el.style.removeProperty(styleName)}else if(el.style.removeAttribute){el.style.removeAttribute(styleName)}else throw\"\"},contains:function(elA,elB){return elA&&elB&&(elA===elB?false:elA.contains?elA.contains(elB):elA.compareDocumentPosition(elB)&16)},startDrag:function(evt,callbacks,doc){var doc=doc||document;var startX=evt.clientX;var startY=evt.clientY;function handleMouseMove(evt){var x=evt.clientX-startX;var y=evt.clientY-startY;callbacks.ondragmove(x,y,evt);if(evt.stopPropagation){evt.stopPropagation()}else{evt.cancelBubble=true}}if(doc.addEventListener){function handleMouseUp(evt){doc.removeEventListener(\"mousemove\",handleMouseMove,true);doc.removeEventListener(\"mouseup\",handleMouseUp,true);window.removeEventListener(\"mouseup\",handleMouseUp,true);callbacks.ondragstop()}doc.addEventListener(\"mousemove\",handleMouseMove,true);doc.addEventListener(\"mouseup\",handleMouseUp,true);window.addEventListener(\"mouseup\",handleMouseUp,true);evt.preventDefault()}else{var elm=evt.srcElement;elm.setCapture();function releaseCaptrue(){elm.releaseCapture();elm.detachEvent(\"onmousemove\",handleMouseMove);elm.detachEvent(\"onmouseup\",releaseCaptrue);elm.detachEvent(\"onlosecaptrue\",releaseCaptrue);callbacks.ondragstop()}elm.attachEvent(\"onmousemove\",handleMouseMove);elm.attachEvent(\"onmouseup\",releaseCaptrue);elm.attachEvent(\"onlosecaptrue\",releaseCaptrue);evt.returnValue=false}callbacks.ondragstart()},getFixedLayer:function(){var layer=document.getElementById(\"edui_fixedlayer\");if(layer==null){layer=document.createElement(\"div\");layer.id=\"edui_fixedlayer\";document.body.appendChild(layer);if(browser.ie&&browser.version<=8){layer.style.position=\"absolute\";bindFixedLayer();setTimeout(updateFixedOffset)}else{layer.style.position=\"fixed\"}layer.style.left=\"0\";layer.style.top=\"0\";layer.style.width=\"0\";layer.style.height=\"0\";layer.style.margin=\"0\"}return layer},makeUnselectable:function(element){if(browser.opera||browser.ie&&browser.version<9){element.unselectable=\"on\";if(element.hasChildNodes()){for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeType===1){uiUtils.makeUnselectable(element.childNodes[i])}}}}else{if(element.style.MozUserSelect!==undefined){element.style.MozUserSelect=\"none\"}else if(element.style.WebkitUserSelect!==undefined){element.style.WebkitUserSelect=\"none\"}else if(element.style.KhtmlUserSelect!==undefined){element.style.KhtmlUserSelect=\"none\"}}}};function updateFixedOffset(){var layer=document.getElementById(\"edui_fixedlayer\");uiUtils.setViewportOffset(layer,{left:0,top:0})}function bindFixedLayer(adjOffset){domUtils.on(window,\"scroll\",updateFixedOffset);domUtils.on(window,\"resize\",baidu.editor.utils.defer(updateFixedOffset,0,true))}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,EventBase=baidu.editor.EventBase,UIBase=baidu.editor.ui.UIBase=function(){};UIBase.prototype={el:null,className:\"\",uiName:\"\",initOptions:function(options){var me=this;for(var k in options){me[k]=options[k]}this.id=this.id||\"edui\"+uiUtils.uid()},initUIBase:function(){this._globalKey=utils.unhtml(uiUtils.setGlobal(this.id,this))},render:function(holder){var html=this.renderHtml();var el=uiUtils.createElementByHtml(html);var list=domUtils.getElementsByTagName(el,\"*\");var theme=\"edui-\"+(this.theme||this.editor.options.theme);var layer=document.getElementById(\"edui_fixedlayer\");for(var i=0,node;node=list[i++];){domUtils.addClass(node,theme)}domUtils.addClass(el,theme);if(layer){layer.className=\"\";domUtils.addClass(layer,theme)}var seatEl=this.getDom();if(seatEl!=null){seatEl.parentNode.replaceChild(el,seatEl);uiUtils.copyAttributes(el,seatEl)}else{if(typeof holder==\"string\"){holder=document.getElementById(holder)}holder=holder||uiUtils.getFixedLayer();domUtils.addClass(holder,theme);holder.appendChild(el)}this.el=el;this.postRender()},getDom:function(name){if(!name){return document.getElementById(this.id)}else{return document.getElementById(this.id+\"_\"+name)}},postRender:function(){this.fireEvent(\"postrender\")},getHtmlTpl:function(){return\"\"},formatHtml:function(tpl){var prefix=\"edui-\"+this.uiName;return tpl.replace(/##/g,this.id).replace(/%%-/g,this.uiName?prefix+\"-\":\"\").replace(/%%/g,(this.uiName?prefix:\"\")+\" \"+this.className).replace(/\\$\\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var box=this.getDom();if(box)baidu.editor.dom.domUtils.remove(box);uiUtils.unsetGlobal(this.id)},uiIsShow:true,uiShowStyleBackupValue:null,uiShow:function(enable){if(enable){if(this.uiIsShow){return}this.getDom().style.display=this.uiShowStyleBackupValue;this.uiIsShow=true}else{if(!this.uiIsShow){return}this.uiShowStyleBackupValue=this.getDom().style.display;this.getDom().style.display=\"none\";this.uiIsShow=false}}};utils.inherits(UIBase,EventBase)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Separator=baidu.editor.ui.Separator=function(options){this.initOptions(options);this.initSeparator()};Separator.prototype={uiName:\"separator\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"></div>'}};utils.inherits(Separator,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,uiUtils=baidu.editor.ui.uiUtils;var Mask=baidu.editor.ui.Mask=function(options){this.initOptions(options);this.initUIBase()};Mask.prototype={getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>'},postRender:function(){var me=this;domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me._fill()}})})},show:function(zIndex){this._fill();this.getDom().style.display=\"\";this.getDom().style.zIndex=zIndex},hide:function(){this.getDom().style.display=\"none\";this.getDom().style.zIndex=\"\"},isHidden:function(){return this.getDom().style.display==\"none\"},_onMouseDown:function(){return false},_onClick:function(e,target){this.fireEvent(\"click\",e,target)},_fill:function(){var el=this.getDom();var vpRect=uiUtils.getViewportRect();el.style.width=vpRect.width+\"px\";el.style.height=vpRect.height+\"px\"}};utils.inherits(Mask,UIBase)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup=function(options){this.initOptions(options);this.initPopup()};var allPopups=[];function closeAllPopup(evt,el){for(var i=0;i<allPopups.length;i++){var pop=allPopups[i];if(!pop.isHidden()){if(pop.queryAutoHide(el)!==false){if(evt&&/scroll/gi.test(evt.type)&&pop.className===\"edui-wordpastepop\")return;pop.hide()}}}if(allPopups.length)pop.editor.fireEvent(\"afterhidepop\")}Popup.postHide=closeAllPopup;var ANCHOR_CLASSES=[\"edui-anchor-topleft\",\"edui-anchor-topright\",\"edui-anchor-bottomleft\",\"edui-anchor-bottomright\"];Popup.prototype={SHADOW_RADIUS:5,content:null,_hidden:false,autoRender:true,canSideLeft:true,canSideUp:true,initPopup:function(){this.initUIBase();allPopups.push(this)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\">'+' <div id=\"##_body\" class=\"edui-popup-body\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-popup-content\">'+this.getContentHtmlTpl()+\"  </div>\"+\" </div>\"+\"</div>\"},getContentHtmlTpl:function(){if(this.content){if(typeof this.content==\"string\"){return this.content}return this.content.renderHtml()}else{return\"\"}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){if(this.content instanceof UIBase){this.content.postRender()}if(this.captureWheel&&!this.captured){this.captured=true;var winHeight=(document.documentElement.clientHeight||document.body.clientHeight)-80,_height=this.getDom().offsetHeight,_top=uiUtils.getClientRect(this.combox.getDom()).top,content=this.getDom(\"content\"),ifr=this.getDom(\"body\").getElementsByTagName(\"iframe\"),me=this;ifr.length&&(ifr=ifr[0]);while(_top+_height>winHeight){_height-=30}content.style.height=_height+\"px\";ifr&&(ifr.style.height=_height+\"px\");domUtils.on(content,\"onmousewheel\"in document.body?\"mousewheel\":\"DOMMouseScroll\",function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}if(e.wheelDelta){content.scrollTop-=e.wheelDelta/120*60}else{content.scrollTop-=e.detail/-3*60}})}this.fireEvent(\"postRenderAfter\");this.hide(true);this._UIBase_postRender()},_doAutoRender:function(){if(!this.getDom()&&this.autoRender){this.render()}},mesureSize:function(){var box=this.getDom(\"content\");return uiUtils.getClientRect(box)},fitSize:function(){if(this.captureWheel&&this.sized){return this.__size}this.sized=true;var popBodyEl=this.getDom(\"body\");popBodyEl.style.width=\"\";popBodyEl.style.height=\"\";var size=this.mesureSize();if(this.captureWheel){popBodyEl.style.width=-(-20-size.width)+\"px\";var height=parseInt(this.getDom(\"content\").style.height,10);!window.isNaN(height)&&(size.height=height)}else{popBodyEl.style.width=size.width+\"px\"}popBodyEl.style.height=size.height+\"px\";this.__size=size;this.captureWheel&&(this.getDom(\"content\").style.overflow=\"auto\");return size},showAnchor:function(element,hoz){this.showAnchorRect(uiUtils.getClientRect(element),hoz)},showAnchorRect:function(rect,hoz,adj){this._doAutoRender();var vpRect=uiUtils.getViewportRect();this.getDom().style.visibility=\"hidden\";this._show();var popSize=this.fitSize();var sideLeft,sideUp,left,top;if(hoz){sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.left-popSize.width:rect.right;top=sideUp?rect.bottom-popSize.height:rect.top}else{sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.right-popSize.width:rect.left;top=sideUp?rect.top-popSize.height:rect.bottom}if(!sideUp){if(top+popSize.height>vpRect.bottom){top=vpRect.bottom-popSize.height}}var popEl=this.getDom();uiUtils.setViewportOffset(popEl,{left:left,top:top});domUtils.removeClasses(popEl,ANCHOR_CLASSES);popEl.className+=\" \"+ANCHOR_CLASSES[(sideUp?1:0)*2+(sideLeft?1:0)];if(this.editor){popEl.style.zIndex=this.editor.container.style.zIndex*1+10;baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=popEl.style.zIndex-1}this.getDom().style.visibility=\"visible\"},showAt:function(offset){var left=offset.left;var top=offset.top;var rect={left:left,top:top,right:left,bottom:top,height:0,width:0};this.showAnchorRect(rect,false,true)},_show:function(){if(this._hidden){var box=this.getDom();box.style.display=\"\";this._hidden=false;this.fireEvent(\"show\")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender();this._show()},hide:function(notNofity){if(!this._hidden&&this.getDom()){this.getDom().style.display=\"none\";this._hidden=true;if(!notNofity){this.fireEvent(\"hide\")}}},queryAutoHide:function(el){return!el||!uiUtils.contains(this.getDom(),el)}};utils.inherits(Popup,UIBase);domUtils.on(document,\"mousedown\",function(evt){var el=evt.target||evt.srcElement;closeAllPopup(evt,el)});domUtils.on(window,\"scroll\",function(evt,el){closeAllPopup(evt,el)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,ColorPicker=baidu.editor.ui.ColorPicker=function(options){this.initOptions(options);this.noColorText=this.noColorText||this.editor.getLang(\"clearColor\");this.initUIBase()};ColorPicker.prototype={getHtmlTpl:function(){return genColorPicker(this.noColorText,this.editor)},_onTableClick:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.fireEvent(\"pickcolor\",color)}},_onTableOver:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.getDom(\"preview\").style.backgroundColor=color}},_onTableOut:function(){this.getDom(\"preview\").style.backgroundColor=\"\"},_onPickNoColor:function(){this.fireEvent(\"picknocolor\")},_onColorSelect:function(evt){var input=evt.target||evt.srcElement;var color=input.value;if(color){this.fireEvent(\"pickcolor\",color)}}};utils.inherits(ColorPicker,UIBase);var COLORS=(\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,\"+\"f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,\"+\"d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,\"+\"bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,\"+\"a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,\"+\"7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,\"+\"c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\").split(\",\");function genColorPicker(noColorText,editor){var html='<div id=\"##\" class=\"edui-colorpicker %%\">'+'<div class=\"edui-colorpicker-topbar edui-clearfix\">'+'<div id=\"##_preview\" class=\"edui-colorpicker-preview\"><input type=\"color\" id=\"##_input\" onchange=\"$$._onColorSelect(event,this);\" /></div>'+'<div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">'+noColorText+\"</div>\"+\"</div>\"+'<table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\">'+'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">'+editor.getLang(\"themeColor\")+\"</td> </tr>\"+'<tr class=\"edui-colorpicker-tablefirstrow\" >';for(var i=0;i<COLORS.length;i++){if(i&&i%10===0){html+=\"</tr>\"+(i==60?'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">'+editor.getLang(\"standardColor\")+\"</td></tr>\":\"\")+\"<tr\"+(i==60?' class=\"edui-colorpicker-tablefirstrow\"':\"\")+\">\"}html+=i<70?'<td style=\"padding:2px 2px;\"><a hidefocus title=\"'+COLORS[i]+'\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\"'+' data-color=\"#'+COLORS[i]+'\"'+' style=\"background-color:#'+COLORS[i]+\";border:solid #ccc 1px;\"+'\"'+\"></a></td>\":\"\"}html+=\"</tr>\";html+=\"</table></div>\";return html}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var TablePicker=baidu.editor.ui.TablePicker=function(options){this.initOptions(options);this.initTablePicker()};TablePicker.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this;return'<div id=\"##\" class=\"edui-tablepicker %%\">'+'<div class=\"edui-tablepicker-body\">'+'<div class=\"edui-infoarea\">'+'<span id=\"##_label\" class=\"edui-label\"></span>'+\"</div>\"+'<div class=\"edui-pickarea\"'+' onmousemove=\"$$._onMouseMove(event, this);\"'+' onmouseover=\"$$._onMouseOver(event, this);\"'+' onmouseout=\"$$._onMouseOut(event, this);\"'+' onclick=\"$$._onClick(event, this);\"'+\">\"+'<div id=\"##_overlay\" class=\"edui-overlay\"></div>'+\"</div>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render,render:function(holder){this._UIBase_render(holder);this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_row\")+\" x 0\"+this.editor.getLang(\"t_col\")},_track:function(numCols,numRows){var style=this.getDom(\"overlay\").style;var sideLen=this.lengthOfCellSide;style.width=numCols*sideLen+\"px\";style.height=numRows*sideLen+\"px\";var label=this.getDom(\"label\");label.innerHTML=numCols+this.editor.getLang(\"t_col\")+\" x \"+numRows+this.editor.getLang(\"t_row\");this.numCols=numCols;this.numRows=numRows},_onMouseOver:function(evt,el){var rel=evt.relatedTarget||evt.fromElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"\"}},_onMouseOut:function(evt,el){var rel=evt.relatedTarget||evt.toElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"hidden\"}},_onMouseMove:function(evt,el){var style=this.getDom(\"overlay\").style;var offset=uiUtils.getEventOffset(evt);var sideLen=this.lengthOfCellSide;var numCols=Math.ceil(offset.left/sideLen);var numRows=Math.ceil(offset.top/sideLen);this._track(numCols,numRows)},_onClick:function(){this.fireEvent(\"picktable\",this.numCols,this.numRows)}};utils.inherits(TablePicker,UIBase)})();(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils;var TPL_STATEFUL='onmousedown=\"$$.Stateful_onMouseDown(event, this);\"'+' onmouseup=\"$$.Stateful_onMouseUp(event, this);\"'+(browser.ie?' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\"'+' onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"':' onmouseover=\"$$.Stateful_onMouseOver(event, this);\"'+' onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');baidu.editor.ui.Stateful={alwalysHoverable:false,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl;this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var tpl=this._Stateful_dGetHtmlTpl();return tpl.replace(/stateful/g,function(){return TPL_STATEFUL})},Stateful_onMouseEnter:function(evt,el){this.target=el;if(!this.isDisabled()||this.alwalysHoverable){this.addState(\"hover\");this.fireEvent(\"over\")}},Stateful_onMouseLeave:function(evt,el){if(!this.isDisabled()||this.alwalysHoverable){this.removeState(\"hover\");this.removeState(\"active\");this.fireEvent(\"out\")}},Stateful_onMouseOver:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseEnter(evt,el)}},Stateful_onMouseOut:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseLeave(evt,el)}},Stateful_onMouseDown:function(evt,el){if(!this.isDisabled()){this.addState(\"active\")}},Stateful_onMouseUp:function(evt,el){if(!this.isDisabled()){this.removeState(\"active\")}},Stateful_postRender:function(){if(this.disabled&&!this.hasState(\"disabled\")){this.addState(\"disabled\")}},hasState:function(state){return domUtils.hasClass(this.getStateDom(),\"edui-state-\"+state)},addState:function(state){if(!this.hasState(state)){this.getStateDom().className+=\" edui-state-\"+state}},removeState:function(state){if(this.hasState(state)){domUtils.removeClasses(this.getStateDom(),[\"edui-state-\"+state])}},getStateDom:function(){return this.getDom(\"state\")},isChecked:function(){return this.hasState(\"checked\")},setChecked:function(checked){if(!this.isDisabled()&&checked){this.addState(\"checked\")}else{this.removeState(\"checked\")}},isDisabled:function(){return this.hasState(\"disabled\")},setDisabled:function(disabled){if(disabled){this.removeState(\"hover\");this.removeState(\"checked\");this.removeState(\"active\");this.addState(\"disabled\")}else{this.removeState(\"disabled\")}}}})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,Button=baidu.editor.ui.Button=function(options){if(options.name){var btnName=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+btnName}options.cssRules=\".edui-\"+(options.theme||\"default\")+\" .edui-toolbar .edui-button.edui-for-\"+btnName+\" .edui-icon {\"+cssRules+\"}\"}this.initOptions(options);this.initButton()};Button.prototype={uiName:\"button\",label:\"\",title:\"\",showIcon:true,showText:true,cssRules:\"\",initButton:function(){this.initUIBase();this.Stateful_init();if(this.cssRules){utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+'<div id=\"##_state\" stateful>'+'<div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" '+(this.title?'title=\"'+this.title+'\"':\"\")+' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">'+(this.showIcon?'<div class=\"edui-box edui-icon\"></div>':\"\")+(this.showText?'<div class=\"edui-box edui-label\">'+this.label+\"</div>\":\"\")+\"</div>\"+\"</div>\"+\"</div></div>\"},postRender:function(){this.Stateful_postRender();this.setDisabled(this.disabled)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}},_onClick:function(){if(!this.isDisabled()){this.fireEvent(\"click\")}},setTitle:function(text){var label=this.getDom(\"label\");label.innerHTML=text}};utils.inherits(Button,UIBase);utils.extend(Button.prototype,Stateful)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,SplitButton=baidu.editor.ui.SplitButton=function(options){this.initOptions(options);this.initSplitButton()};SplitButton.prototype={popup:null,uiName:\"splitbutton\",title:\"\",initSplitButton:function(){this.initUIBase();this.Stateful_init();var me=this;if(this.popup!=null){var popup=this.popup;this.popup=null;this.setPopup(popup)}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){this.Stateful_postRender();this._UIBase_postRender()},setPopup:function(popup){if(this.popup===popup)return;if(this.popup!=null){this.popup.dispose()}popup.addListener(\"show\",utils.bind(this._onPopupShow,this));popup.addListener(\"hide\",utils.bind(this._onPopupHide,this));popup.addListener(\"postrender\",utils.bind(function(){popup.getDom(\"body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.popup.id+'_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:'+(uiUtils.getClientRect(this.getDom()).width+20)+'px\"></div>'));popup.getDom().className+=\" \"+this.className},this));this.popup=popup},_onPopupShow:function(){this.addState(\"opened\")},_onPopupHide:function(){this.removeState(\"opened\")},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+\"<div \"+(this.title?'title=\"'+this.title+'\"':\"\")+' id=\"##_state\" stateful><div class=\"%%-body\">'+'<div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\">'+'<div class=\"edui-box edui-icon\"></div>'+\"</div>\"+'<div class=\"edui-box edui-splitborder\"></div>'+'<div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div>'+\"</div></div></div>\"},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top-=this.popup.SHADOW_RADIUS;rect.height+=this.popup.SHADOW_RADIUS;this.popup.showAnchorRect(rect)},_onArrowClick:function(event,el){if(!this.isDisabled()){this.showPopup()}},_onButtonClick:function(){if(!this.isDisabled()){this.fireEvent(\"buttonclick\")}}};utils.inherits(SplitButton,UIBase);utils.extend(SplitButton.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,ColorPicker=baidu.editor.ui.ColorPicker,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,ColorButton=baidu.editor.ui.ColorButton=function(options){this.initOptions(options);this.initColorButton()};ColorButton.prototype={initColorButton:function(){var me=this;this.popup=new Popup({content:new ColorPicker({noColorText:me.editor.getLang(\"clearColor\"),editor:me.editor,onpickcolor:function(t,color){me._onPickColor(color)},onpicknocolor:function(t,color){me._onPickNoColor(color)}}),editor:me.editor});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.getDom(\"button_body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.id+'_colorlump\" class=\"edui-colorlump\"></div>'));this.getDom().className+=\" edui-colorbutton\"},setColor:function(color){this.getDom(\"colorlump\").style.backgroundColor=color;this.color=color},_onPickColor:function(color){if(this.fireEvent(\"pickcolor\",color)!==false){this.setColor(color);this.popup.hide()}},_onPickNoColor:function(color){if(this.fireEvent(\"picknocolor\")!==false){this.popup.hide()}}};utils.inherits(ColorButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,TablePicker=baidu.editor.ui.TablePicker,SplitButton=baidu.editor.ui.SplitButton,TableButton=baidu.editor.ui.TableButton=function(options){this.initOptions(options);this.initTableButton()};TableButton.prototype={initTableButton:function(){var me=this;this.popup=new Popup({content:new TablePicker({editor:me.editor,onpicktable:function(t,numCols,numRows){me._onPickTable(numCols,numRows)}}),editor:me.editor});this.initSplitButton()},_onPickTable:function(numCols,numRows){if(this.fireEvent(\"picktable\",numCols,numRows)!==false){this.popup.hide()}}};utils.inherits(TableButton,SplitButton)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase;var AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker=function(options){this.initOptions(options);this.initAutoTypeSetPicker()};AutoTypeSetPicker.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this.editor,opt=me.options.autotypeset,lang=me.getLang(\"autoTypeSet\");var textAlignInputName=\"textAlignValue\"+me.uid,imageBlockInputName=\"imageBlockLineValue\"+me.uid,symbolConverInputName=\"symbolConverValue\"+me.uid;return'<div id=\"##\" class=\"edui-autotypesetpicker %%\">'+'<div class=\"edui-autotypesetpicker-body\">'+\"<table >\"+'<tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" '+(opt[\"mergeEmptyline\"]?\"checked\":\"\")+\">\"+lang.mergeLine+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" '+(opt[\"removeEmptyline\"]?\"checked\":\"\")+\">\"+lang.delLine+\"</td></tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" '+(opt[\"removeClass\"]?\"checked\":\"\")+\">\"+lang.removeFormat+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" '+(opt[\"indent\"]?\"checked\":\"\")+\">\"+lang.indent+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"textAlign\" '+(opt[\"textAlign\"]?\"checked\":\"\")+\">\"+lang.alignment+\"</td>\"+'<td colspan=\"2\" id=\"'+textAlignInputName+'\">'+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"left\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"center\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"right\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" '+(opt[\"imageBlockLine\"]?\"checked\":\"\")+\">\"+lang.imageFloat+\"</td>\"+'<td nowrap id=\"'+imageBlockInputName+'\">'+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"none\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"none\"?\"checked\":\"\")+\">\"+me.getLang(\"default\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"left\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"center\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"right\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" '+(opt[\"clearFontSize\"]?\"checked\":\"\")+\">\"+lang.removeFontsize+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" '+(opt[\"clearFontFamily\"]?\"checked\":\"\")+\">\"+lang.removeFontFamily+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" '+(opt[\"removeEmptyNode\"]?\"checked\":\"\")+\">\"+lang.removeHtml+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" '+(opt[\"pasteFilter\"]?\"checked\":\"\")+\">\"+lang.pasteFilter+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"symbolConver\" '+(opt[\"bdc2sb\"]||opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.symbol+\"</td>\"+'<td id=\"'+symbolConverInputName+'\">'+'<input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" '+(opt[\"bdc2sb\"]?\"checked\":\"\")+\">\"+lang.bdc2sb+'<input type=\"radio\" name=\"bdc\" value=\"tobdc\" '+(opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.tobdc+\"\"+\"</td>\"+'<td nowrap align=\"right\"><button >'+lang.run+\"</button></td>\"+\"</tr>\"+\"</table>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render};utils.inherits(AutoTypeSetPicker,UIBase)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker,SplitButton=baidu.editor.ui.SplitButton,AutoTypeSetButton=baidu.editor.ui.AutoTypeSetButton=function(options){this.initOptions(options);this.initAutoTypeSetButton()};function getPara(me){var opt={},cont=me.getDom(),editorId=me.editor.uid,inputType=null,attrName=null,ipts=domUtils.getElementsByTagName(cont,\"input\");for(var i=ipts.length-1,ipt;ipt=ipts[i--];){inputType=ipt.getAttribute(\"type\");if(inputType==\"checkbox\"){attrName=ipt.getAttribute(\"name\");opt[attrName]&&delete opt[attrName];if(ipt.checked){var attrValue=document.getElementById(attrName+\"Value\"+editorId);if(attrValue){if(/input/gi.test(attrValue.tagName)){opt[attrName]=attrValue.value}else{var iptChilds=attrValue.getElementsByTagName(\"input\");for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){if(iptchild.checked){opt[attrName]=iptchild.value;break}}}}else{opt[attrName]=true}}else{opt[attrName]=false}}else{opt[ipt.getAttribute(\"value\")]=ipt.checked}}var selects=domUtils.getElementsByTagName(cont,\"select\");for(var i=0,si;si=selects[i++];){var attr=si.getAttribute(\"name\");opt[attr]=opt[attr]?si.value:\"\"}utils.extend(me.editor.options.autotypeset,opt);me.editor.setPreferences(\"autotypeset\",opt)}AutoTypeSetButton.prototype={initAutoTypeSetButton:function(){var me=this;this.popup=new Popup({content:new AutoTypeSetPicker({editor:me.editor}),editor:me.editor,hide:function(){if(!this._hidden&&this.getDom()){getPara(this);this.getDom().style.display=\"none\";this._hidden=true;this.fireEvent(\"hide\")}}});var flag=0;this.popup.addListener(\"postRenderAfter\",function(){var popupUI=this;if(flag)return;var cont=this.getDom(),btn=cont.getElementsByTagName(\"button\")[0];btn.onclick=function(){getPara(popupUI);me.editor.execCommand(\"autotypeset\");popupUI.hide()};domUtils.on(cont,\"click\",function(e){var target=e.target||e.srcElement,editorId=me.editor.uid;if(target&&target.tagName==\"INPUT\"){if(target.name==\"imageBlockLine\"||target.name==\"textAlign\"||target.name==\"symbolConver\"){var checked=target.checked,radioTd=document.getElementById(target.name+\"Value\"+editorId),radios=radioTd.getElementsByTagName(\"input\"),defalutSelect={imageBlockLine:\"none\",textAlign:\"left\",symbolConver:\"tobdc\"};for(var i=0;i<radios.length;i++){if(checked){if(radios[i].value==defalutSelect[target.name]){radios[i].checked=\"checked\"}}else{radios[i].checked=false}}}if(target.name==\"imageBlockLineValue\"+editorId||target.name==\"textAlignValue\"+editorId||target.name==\"bdc\"){var checkboxs=target.parentNode.previousSibling.getElementsByTagName(\"input\");checkboxs&&(checkboxs[0].checked=true)}getPara(popupUI)}});flag=1});this.initSplitButton()}};utils.inherits(AutoTypeSetButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,UIBase=baidu.editor.ui.UIBase;var CellAlignPicker=baidu.editor.ui.CellAlignPicker=function(options){this.initOptions(options);this.initSelected();this.initCellAlignPicker()};CellAlignPicker.prototype={initSelected:function(){var status={valign:{top:0,middle:1,bottom:2},align:{left:0,center:1,right:2},count:3},result=-1;if(this.selected){this.selectedIndex=status.valign[this.selected.valign]*status.count+status.align[this.selected.align]}},initCellAlignPicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){var alignType=[\"left\",\"center\",\"right\"],COUNT=9,tempClassName=null,tempIndex=-1,tmpl=[];for(var i=0;i<COUNT;i++){tempClassName=this.selectedIndex===i?' class=\"edui-cellalign-selected\" ':\"\";tempIndex=i%3;tempIndex===0&&tmpl.push(\"<tr>\");tmpl.push('<td index=\"'+i+'\" '+tempClassName+' stateful><div class=\"edui-icon edui-'+alignType[tempIndex]+'\"></div></td>');tempIndex===2&&tmpl.push(\"</tr>\")}return'<div id=\"##\" class=\"edui-cellalignpicker %%\">'+'<div class=\"edui-cellalignpicker-body\">'+'<table onclick=\"$$._onClick(event);\">'+tmpl.join(\"\")+\"</table>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},_onClick:function(evt){var target=evt.target||evt.srcElement;if(/icon/.test(target.className)){this.items[target.parentNode.getAttribute(\"index\")].onclick();Popup.postHide(evt)}},_UIBase_render:UIBase.prototype.render};utils.inherits(CellAlignPicker,UIBase);utils.extend(CellAlignPicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,Stateful=baidu.editor.ui.Stateful,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var PastePicker=baidu.editor.ui.PastePicker=function(options){this.initOptions(options);this.initPastePicker()};PastePicker.prototype={initPastePicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div>'+'<div class=\"edui-pastecontainer\">'+'<div class=\"edui-title\">'+this.editor.getLang(\"pasteOpt\")+\"</div>\"+'<div class=\"edui-button\">'+'<div title=\"'+this.editor.getLang(\"pasteSourceFormat\")+'\" onclick=\"$$.format(false)\" stateful>'+'<div class=\"edui-richtxticon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"tagFormat\")+'\" onclick=\"$$.format(2)\" stateful>'+'<div class=\"edui-tagicon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"pasteTextFormat\")+'\" onclick=\"$$.format(true)\" stateful>'+'<div class=\"edui-plaintxticon\"></div></div>'+\"</div>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},format:function(param){this.editor.ui._isTransfer=true;this.editor.fireEvent(\"pasteTransfer\",param)},_onClick:function(cur){var node=domUtils.getNextDomNode(cur),screenHt=uiUtils.getViewportRect().height,subPop=uiUtils.getClientRect(node);if(subPop.top+subPop.height>screenHt)node.style.top=-subPop.height-cur.offsetHeight+\"px\";else node.style.top=\"\";if(/hidden/gi.test(domUtils.getComputedStyle(node,\"visibility\"))){node.style.visibility=\"visible\";domUtils.addClass(cur,\"edui-state-opened\")}else{node.style.visibility=\"hidden\";domUtils.removeClasses(cur,\"edui-state-opened\")}},_UIBase_render:UIBase.prototype.render};utils.inherits(PastePicker,UIBase);utils.extend(PastePicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Toolbar=baidu.editor.ui.Toolbar=function(options){this.initOptions(options);this.initToolbar()};Toolbar.prototype={items:null,initToolbar:function(){this.items=this.items||[];this.initUIBase()},add:function(item,index){if(index===undefined){this.items.push(item)}else{this.items.splice(index,0,item)}},getHtmlTpl:function(){var buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}return'<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">'+buff.join(\"\")+\"</div>\"},postRender:function(){var box=this.getDom();for(var i=0;i<this.items.length;i++){this.items[i].postRender()}uiUtils.makeUnselectable(box)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}}};utils.inherits(Toolbar,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,QuickOperate=baidu.editor.ui.QuickOperate=function(options){this.initOptions(options)};QuickOperate.prototype={uiName:\"quick-operate\",_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){return['<div class=\"edui-quick-operate\">',' <div class=\"edui-quick-operate-status\">','   <div class=\"edui-quick-operate-icon\"><i class=\"icon icon-image\"></i></div>','   <div class=\"edui-quick-operate-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" data-icon=\"DragOutlined\"><path d=\"M8.25 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm0 7.25a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm1.75 5.5a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0ZM14.753 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5ZM16.5 12a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0Zm-1.747 9a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Z\" fill=\"currentColor\"></path></svg></div>',\" </div>\",' <div class=\"edui-quick-operate-menu\">','   <div class=\"item\"><i class=\"icon icon-image\"></i> 删除</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 左对齐</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 右对齐</div>',\" </div>\",\"</div>\"].join(\"\")},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}},dispose:function(){this.destroy()}};utils.inherits(QuickOperate,Popup)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,Menu=baidu.editor.ui.Menu=function(options){this.initOptions(options);this.initMenu()};var menuSeparator={renderHtml:function(){return'<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>'},postRender:function(){},queryAutoHide:function(){return true}};Menu.prototype={items:null,uiName:\"menu\",initMenu:function(){this.items=this.items||[];this.initPopup();this.initItems()},initItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item==\"-\"){this.items[i]=this.getSeparator()}else if(!(item instanceof MenuItem)){item.editor=this.editor;item.theme=this.editor.options.theme;this.items[i]=this.createItem(item)}}},getSeparator:function(){return menuSeparator},createItem:function(item){item.menu=this;return new MenuItem(item)},_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(this.items.length==0){return this._Popup_getContentHtmlTpl()}var buff=[];for(var i=0;i<this.items.length;i++){var item=this.items[i];buff[i]=item.renderHtml()}return'<div class=\"%%-body\">'+buff.join(\"\")+\"</div>\"},_Popup_postRender:Popup.prototype.postRender,postRender:function(){var me=this;for(var i=0;i<this.items.length;i++){var item=this.items[i];item.ownerMenu=this;item.postRender()}domUtils.on(this.getDom(),\"mouseover\",function(evt){evt=evt||event;var rel=evt.relatedTarget||evt.fromElement;var el=me.getDom();if(!uiUtils.contains(el,rel)&&el!==rel){me.fireEvent(\"over\")}});this._Popup_postRender()},queryAutoHide:function(el){if(el){if(uiUtils.contains(this.getDom(),el)){return false}for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item.queryAutoHide(el)===false){return false}}}},clearItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];clearTimeout(item._showingTimer);clearTimeout(item._closingTimer);if(item.subMenu){item.subMenu.destroy()}}this.items=[]},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}this.clearItems()},dispose:function(){this.destroy()}};utils.inherits(Menu,Popup);var MenuItem=baidu.editor.ui.MenuItem=function(options){this.initOptions(options);this.initUIBase();this.Stateful_init();if(this.subMenu&&!(this.subMenu instanceof Menu)){if(options.className&&options.className.indexOf(\"aligntd\")!=-1){var me=this;this.subMenu.selected=this.editor.queryCommandValue(\"cellalignment\");this.subMenu=new Popup({content:new CellAlignPicker(this.subMenu),parentMenu:me,editor:me.editor,destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}}});this.subMenu.addListener(\"postRenderAfter\",function(){domUtils.on(this.getDom(),\"mouseover\",function(){me.addState(\"opened\")})})}else{this.subMenu=new Menu(this.subMenu)}}};MenuItem.prototype={label:\"\",subMenu:null,ownerMenu:null,uiName:\"menuitem\",alwalysHoverable:true,getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\">'+'<div class=\"%%-body\">'+this.renderLabelHtml()+\"</div>\"+\"</div>\"},postRender:function(){var me=this;this.addListener(\"over\",function(){me.ownerMenu.fireEvent(\"submenuover\",me);if(me.subMenu){me.delayShowSubMenu()}});if(this.subMenu){this.getDom().className+=\" edui-hassubmenu\";this.subMenu.render();this.addListener(\"out\",function(){me.delayHideSubMenu()});this.subMenu.addListener(\"over\",function(){clearTimeout(me._closingTimer);me._closingTimer=null;me.addState(\"opened\")});this.ownerMenu.addListener(\"hide\",function(){me.hideSubMenu()});this.ownerMenu.addListener(\"submenuover\",function(t,subMenu){if(subMenu!==me){me.delayHideSubMenu()}});this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide;this.subMenu.queryAutoHide=function(el){if(el&&uiUtils.contains(me.getDom(),el)){return false}return this._bakQueryAutoHide(el)}}this.getDom().style.tabIndex=\"-1\";uiUtils.makeUnselectable(this.getDom());this.Stateful_postRender()},delayShowSubMenu:function(){var me=this;if(!me.isDisabled()){me.addState(\"opened\");clearTimeout(me._showingTimer);clearTimeout(me._closingTimer);me._closingTimer=null;me._showingTimer=setTimeout(function(){me.showSubMenu()},250)}},delayHideSubMenu:function(){var me=this;if(!me.isDisabled()){me.removeState(\"opened\");clearTimeout(me._showingTimer);if(!me._closingTimer){me._closingTimer=setTimeout(function(){if(!me.hasState(\"opened\")){me.hideSubMenu()}me._closingTimer=null},400)}}},renderLabelHtml:function(){return'<div class=\"edui-arrow\"></div>'+'<div class=\"edui-box edui-icon\"></div>'+'<div class=\"edui-box edui-label %%-label\">'+(this.label||\"\")+\"</div>\"},getStateDom:function(){return this.getDom()},queryAutoHide:function(el){if(this.subMenu&&this.hasState(\"opened\")){return this.subMenu.queryAutoHide(el)}},_onClick:function(event,this_){if(this.hasState(\"disabled\"))return;if(this.fireEvent(\"click\",event,this_)!==false){if(this.subMenu){this.showSubMenu()}else{Popup.postHide(event)}}},showSubMenu:function(){var rect=uiUtils.getClientRect(this.getDom());rect.right-=5;rect.left+=2;rect.width-=7;rect.top-=4;rect.bottom+=4;rect.height+=8;this.subMenu.showAnchorRect(rect,true,true)},hideSubMenu:function(){this.subMenu.hide()}};utils.inherits(MenuItem,UIBase);utils.extend(MenuItem.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,Combox=baidu.editor.ui.Combox=function(options){this.initOptions(options);this.initCombox()};Combox.prototype={uiName:\"combox\",onbuttonclick:function(){this.showPopup()},initCombox:function(){var me=this;this.items=this.items||[];for(var i=0;i<this.items.length;i++){var item=this.items[i];item.uiName=\"listitem\";item.index=i;item.onclick=function(){me.selectByIndex(this.index)}}this.popup=new Menu({items:this.items,uiName:\"list\",editor:this.editor,captureWheel:true,combox:this});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.setLabel(this.label||\"\");this.setValue(this.initValue||\"\")},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top+=1;rect.bottom-=1;rect.height-=2;this.popup.showAnchorRect(rect)},getValue:function(){return this.value},setValue:function(value){var index=this.indexByValue(value);if(index!=-1){this.selectedIndex=index;this.setLabel(this.items[index].label);this.value=this.items[index].value}else{this.selectedIndex=-1;this.setLabel(this.getLabelForUnknowValue(value));this.value=value}},setLabel:function(label){this.getDom(\"button_body\").innerHTML=label;this.label=label},getLabelForUnknowValue:function(value){return value},indexByValue:function(value){for(var i=0;i<this.items.length;i++){if(value==this.items[i].value){return i}}return-1},getItem:function(index){return this.items[index]},selectByIndex:function(index){if(index<this.items.length&&this.fireEvent(\"select\",index)!==false){this.selectedIndex=index;this.value=this.items[index].value;this.setLabel(this.items[index].label)}}};utils.inherits(Combox,SplitButton)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,Mask=baidu.editor.ui.Mask,UIBase=baidu.editor.ui.UIBase,Button=baidu.editor.ui.Button,Dialog=baidu.editor.ui.Dialog=function(options){if(options.name){var name=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+name}if(cssRules){options.cssRules=\".edui-for-\"+name+\" .edui-dialog-content  {\"+cssRules+\"}\"}}this.initOptions(utils.extend({autoReset:true,draggable:true,onok:function(){},oncancel:function(){},onclose:function(t,ok){return ok?this.onok():this.oncancel()},holdScroll:false},options));this.initDialog()};var modalMask;var dragMask;var activeDialog;Dialog.prototype={draggable:false,uiName:\"dialog\",initDialog:function(){var me=this,theme=this.editor.options.theme;if(this.cssRules){this.cssRules=\".edui-\"+theme+\" \"+this.cssRules;utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}this.initUIBase();this.modalMask=modalMask||(modalMask=new Mask({className:\"edui-dialog-modalmask\",theme:theme,onclick:function(){activeDialog&&activeDialog.close(false)}}));this.dragMask=dragMask||(dragMask=new Mask({className:\"edui-dialog-dragmask\",theme:theme}));this.closeButton=new Button({className:\"edui-dialog-closebutton\",title:me.closeDialog,theme:theme,onclick:function(){me.close(false)}});this.fullscreen&&this.initResizeEvent();if(this.buttons){for(var i=0;i<this.buttons.length;i++){if(!(this.buttons[i]instanceof Button)){this.buttons[i]=new Button(utils.extend(this.buttons[i],{editor:this.editor},true))}}}},initResizeEvent:function(){var me=this;domUtils.on(window,\"resize\",function(){if(me._hidden||me._hidden===undefined){return}if(me.__resizeTimer){window.clearTimeout(me.__resizeTimer)}me.__resizeTimer=window.setTimeout(function(){me.__resizeTimer=null;var dialogWrapNode=me.getDom(),contentNode=me.getDom(\"content\"),wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode),vpRect=uiUtils.getViewportRect();contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";me.fireEvent(\"resize\")},100)})},fitSize:function(){var popBodyEl=this.getDom(\"body\");var $foot=popBodyEl.querySelector(\".edui-dialog-foot\");var heightWithoutBody=70;if(!$foot){heightWithoutBody=30}var size=this.mesureSize();var winSize=uiUtils.getViewportRect();var width=size.width;var height=size.height-heightWithoutBody;var maxWidth=winSize.width-2;var maxHeight=winSize.height-heightWithoutBody-2;if(width>maxWidth){height=height*maxWidth/width;width=maxWidth}if(height>maxHeight){width=width*maxHeight/height;height=maxHeight}var scale=width/size.width;var $content=popBodyEl.querySelector(\".edui-dialog-content\");if(!$content.dataset.dialogScaled){$content.dataset.dialogScaled=true;$content.style.width=width+\"px\";$content.style.height=height+\"px\";var $iframe=popBodyEl.querySelector(\".edui-dialog-content iframe\");$iframe.style.width=size.width+\"px\";$iframe.style.height=size.height-heightWithoutBody+\"px\";$iframe.style.transformOrigin=\"0 0\";$iframe.style.transform=\"scale(\"+scale+\")\";size.width=width;size.height=height+heightWithoutBody}popBodyEl.style.width=size.width+\"px\";popBodyEl.style.height=size.height+\"px\";return size},safeSetOffset:function(offset){var me=this;var el=me.getDom();var vpRect=uiUtils.getViewportRect();var rect=uiUtils.getClientRect(el);var left=offset.left;if(left+rect.width>vpRect.right){left=vpRect.right-rect.width}var top=offset.top;if(top+rect.height>vpRect.bottom){top=vpRect.bottom-rect.height}el.style.left=Math.max(left,0)+\"px\";el.style.top=Math.max(top,0)+\"px\"},showAtCenter:function(){var vpRect=uiUtils.getViewportRect();if(!this.fullscreen){this.getDom().style.display=\"\";var popSize=this.fitSize();var titleHeight=this.getDom(\"titlebar\").offsetHeight|0;var left=vpRect.width/2-popSize.width/2;var top=vpRect.height/2-(popSize.height-titleHeight)/2-titleHeight;var popEl=this.getDom();this.safeSetOffset({left:Math.max(left|0,0),top:Math.max(top|0,0)});if(!domUtils.hasClass(popEl,\"edui-state-centered\")){popEl.className+=\" edui-state-centered\"}}else{var dialogWrapNode=this.getDom(),contentNode=this.getDom(\"content\");dialogWrapNode.style.display=\"block\";var wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode);dialogWrapNode.style.left=\"-100000px\";contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";dialogWrapNode.style.left=0;this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}};document.documentElement.style.overflowX=\"hidden\";document.documentElement.style.overflowY=\"hidden\";document.body.style.overflowX=\"hidden\";document.body.style.overflowY=\"hidden\"}this._show()},getContentHtml:function(){var contentHtml=\"\";if(typeof this.content==\"string\"){contentHtml=this.content}else if(this.iframeUrl){contentHtml='<span id=\"'+this.id+'_contmask\" class=\"dialogcontmask\"></span><iframe id=\"'+this.id+'_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"'+this.iframeUrl+'\"></iframe>'}return contentHtml},getHtmlTpl:function(){var footHtml=\"\";if(this.buttons){var buff=[];for(var i=0;i<this.buttons.length;i++){buff[i]=this.buttons[i].renderHtml()}footHtml='<div class=\"%%-foot\">'+'<div id=\"##_buttons\" class=\"%%-buttons\">'+buff.join(\"\")+\"</div>\"+\"</div>\"}return'<div id=\"##\" class=\"%%\"><div '+(!this.fullscreen?'class=\"%%\"':'class=\"%%-wrap edui-dialog-fullscreen-flag\"')+'><div id=\"##_body\" class=\"%%-body\">'+'<div class=\"%%-shadow\"></div>'+'<div id=\"##_titlebar\" class=\"%%-titlebar\">'+'<div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\">'+'<span class=\"%%-caption\">'+(this.title||\"\")+\"</span>\"+\"</div>\"+this.closeButton.renderHtml()+\"</div>\"+'<div id=\"##_content\" class=\"%%-content\">'+(this.autoReset?\"\":this.getContentHtml())+\"</div>\"+footHtml+\"</div></div></div>\"},postRender:function(){if(!this.modalMask.getDom()){this.modalMask.render();this.modalMask.hide()}if(!this.dragMask.getDom()){this.dragMask.render();this.dragMask.hide()}var me=this;this.addListener(\"show\",function(){me.modalMask.show(this.getDom().style.zIndex-2)});this.addListener(\"hide\",function(){me.modalMask.hide()});if(this.buttons){for(var i=0;i<this.buttons.length;i++){this.buttons[i].postRender()}}domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me.safeSetOffset(uiUtils.getClientRect(me.getDom()))}})});this._hide()},mesureSize:function(){var body=this.getDom(\"body\");var width=uiUtils.getClientRect(this.getDom(\"content\")).width;var dialogBodyStyle=body.style;dialogBodyStyle.width=width;return uiUtils.getClientRect(body)},_onTitlebarMouseDown:function(evt,el){if(this.draggable){var rect;var vpRect=uiUtils.getViewportRect();var me=this;uiUtils.startDrag(evt,{ondragstart:function(){rect=uiUtils.getClientRect(me.getDom());me.getDom(\"contmask\").style.visibility=\"visible\";me.dragMask.show(me.getDom().style.zIndex-1)},ondragmove:function(x,y){var left=rect.left+x;var top=rect.top+y;me.safeSetOffset({left:left,top:top})},ondragstop:function(){me.getDom(\"contmask\").style.visibility=\"hidden\";domUtils.removeClasses(me.getDom(),[\"edui-state-centered\"]);me.dragMask.hide()}})}},reset:function(){this.getDom(\"content\").innerHTML=this.getContentHtml();this.fireEvent(\"dialogafterreset\")},_show:function(){if(this._hidden){this.getDom().style.display=\"\";this.editor.container.style.zIndex&&(this.getDom().style.zIndex=this.editor.container.style.zIndex*1+10);this._hidden=false;this.fireEvent(\"show\");baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4}},isHidden:function(){return this._hidden},_hide:function(){if(!this._hidden){var wrapNode=this.getDom();wrapNode.style.display=\"none\";wrapNode.style.zIndex=\"\";wrapNode.style.width=\"\";wrapNode.style.height=\"\";this._hidden=true;this.fireEvent(\"hide\")}},open:function(){if(this.autoReset){try{this.reset()}catch(e){this.render();this.open()}}this.showAtCenter();if(this.iframeUrl){try{this.getDom(\"iframe\").focus()}catch(ex){}}activeDialog=this},_onCloseButtonClick:function(evt,el){this.close(false)},close:function(ok){if(this.fireEvent(\"close\",ok)!==false){if(this.fullscreen){document.documentElement.style.overflowX=this._originalContext.html.overflowX;document.documentElement.style.overflowY=this._originalContext.html.overflowY;document.body.style.overflowX=this._originalContext.body.overflowX;document.body.style.overflowY=this._originalContext.body.overflowY;delete this._originalContext}this._hide();var content=this.getDom(\"content\");var iframe=this.getDom(\"iframe\");if(content&&iframe){var doc=iframe.contentDocument||iframe.contentWindow.document;doc&&(doc.body.innerHTML=\"\");domUtils.remove(content)}}}};utils.inherits(Dialog,UIBase)})();(function(){var utils=baidu.editor.utils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,MenuButton=baidu.editor.ui.MenuButton=function(options){this.initOptions(options);this.initMenuButton()};MenuButton.prototype={initMenuButton:function(){var me=this;this.uiName=\"menubutton\";this.popup=new Menu({items:me.items,className:me.className,editor:me.editor});this.popup.addListener(\"show\",function(){var list=this;for(var i=0;i<list.items.length;i++){list.items[i].removeState(\"checked\");if(list.items[i].value==me._value){list.items[i].addState(\"checked\");this.value=me._value}}});this.initSplitButton()},setValue:function(value){this._value=value}};utils.inherits(MenuButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,MultiMenuPop=baidu.editor.ui.MultiMenuPop=function(options){this.initOptions(options);this.initMultiMenu()};MultiMenuPop.prototype={initMultiMenu:function(){var me=this;this.popup=new Popup({content:\"\",editor:me.editor,iframe_rendered:false,onshow:function(){if(!this.iframe_rendered){this.iframe_rendered=true;this.getDom(\"content\").innerHTML='<iframe id=\"'+me.id+'_iframe\" src=\"'+me.iframeUrl+'\" frameborder=\"0\"></iframe>';me.editor.container.style.zIndex&&(this.getDom().style.zIndex=me.editor.container.style.zIndex*1+1)}}});this.onbuttonclick=function(){this.showPopup()};this.initSplitButton()}};utils.inherits(MultiMenuPop,SplitButton)})();(function(){var UI=baidu.editor.ui,UIBase=UI.UIBase,uiUtils=UI.uiUtils,utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils;var allMenus=[],timeID,isSubMenuShow=false;var ShortCutMenu=UI.ShortCutMenu=function(options){this.initOptions(options);this.initShortCutMenu()};ShortCutMenu.postHide=hideAllMenu;ShortCutMenu.prototype={isHidden:true,SPACE:5,initShortCutMenu:function(){this.items=this.items||[];this.initUIBase();this.initItems();this.initEvent();allMenus.push(this)},initEvent:function(){var me=this,doc=me.editor.document;me.editor.addListener(\"afterhidepop\",function(){if(!me.isHidden){isSubMenuShow=true}})},initItems:function(){if(utils.isArray(this.items)){for(var i=0,len=this.items.length;i<len;i++){if(\"string\"!==typeof this.items[i]){continue}var item=this.items[i].toLowerCase();if(UI[item]){this.items[i]=new UI[item](this.editor);this.items[i].className+=\" edui-short-cut-sub-menu \"}}}},setOpacity:function(el,value){if(browser.ie&&browser.version<9){el.style.filter=\"alpha(opacity = \"+parseFloat(value)*100+\");\"}else{el.style.opacity=value}},getSubMenuMark:function(){isSubMenuShow=false;var layerEle=uiUtils.getFixedLayer();var list=domUtils.getElementsByTagName(layerEle,\"div\",function(node){return domUtils.hasClass(node,\"edui-short-cut-sub-menu edui-popup\")});for(var i=0,node;node=list[i++];){if(node.style.display!==\"none\"){isSubMenuShow=true}}return isSubMenuShow},show:function(e,hasContextmenu){var me=this,offset={},el=this.getDom(),fixedlayer=uiUtils.getFixedLayer();for(let item of this.items){if(\"shouldUiShow\"in item){item.uiShow(item.shouldUiShow())}}function setPos(offset){if(offset.left<0){offset.left=0}if(offset.top<0){offset.top=0}el.style.cssText=\"position:absolute;left:\"+offset.left+\"px;top:\"+offset.top+\"px;\"}function setPosByCxtMenu(menu){if(!menu.tagName){menu=menu.getDom()}offset.left=parseInt(menu.style.left);offset.top=parseInt(menu.style.top);offset.top-=el.offsetHeight+15;setPos(offset)}me.eventType=e.type;el.style.cssText=\"display:block;left:-9999px\";offset=uiUtils.getViewportOffsetByEvent(e);offset.top-=el.offsetHeight+me.SPACE;offset.left+=me.SPACE+20;setPos(offset);me.setOpacity(el,1);me.isHidden=false;me.left=e.screenX+el.offsetWidth/2-me.SPACE;me.top=e.screenY-el.offsetHeight/2-me.SPACE;if(me.editor){el.style.zIndex=me.editor.container.style.zIndex*1+10;fixedlayer.style.zIndex=el.style.zIndex-1}},hide:function(){if(this.getDom()){this.getDom().style.display=\"none\"}this.isHidden=true},postRender:function(){if(utils.isArray(this.items)){for(var i=0,item;item=this.items[i++];){item.postRender()}}},getHtmlTpl:function(){var buff;if(utils.isArray(this.items)){buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}buff=buff.join(\"\")}else{buff=this.items}return'<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >'+buff+\"</div>\"}};utils.inherits(ShortCutMenu,UIBase);function hideAllMenu(e){var tgt=e.target||e.srcElement,cur=domUtils.findParent(tgt,function(node){return domUtils.hasClass(node,\"edui-shortcutmenu\")||domUtils.hasClass(node,\"edui-popup\")},true);if(!cur){for(var i=0,menu;menu=allMenus[i++];){menu.hide()}}}domUtils.on(document,\"mousedown\",function(e){hideAllMenu(e)});domUtils.on(window,\"scroll\",function(e){hideAllMenu(e)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Breakline=baidu.editor.ui.Breakline=function(options){this.initOptions(options);this.initSeparator()};Breakline.prototype={uiName:\"Breakline\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return\"<br/>\"}};utils.inherits(Breakline,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Message=baidu.editor.ui.Message=function(options){this.initOptions(options);this.initMessage()};Message.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-message %%\">'+' <div id=\"##_closer\" class=\"edui-message-closer\">×</div>'+' <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-message-content\">'+\"  </div>\"+\" </div>\"+\"</div>\"},reset:function(opt){var me=this;if(!opt.keepshow){clearTimeout(this.timer);me.timer=setTimeout(function(){me.hide()},opt.timeout||4e3)}opt.content!==undefined&&me.setContent(opt.content);opt.type!==undefined&&me.setType(opt.type);me.show()},postRender:function(){var me=this,closer=this.getDom(\"closer\");closer&&domUtils.on(closer,\"click\",function(){me.hide()})},setContent:function(content){this.getDom(\"content\").innerHTML=content},setType:function(type){type=type||\"info\";var body=this.getDom(\"body\");body.className=body.className.replace(/edui-message-type-[\\w-]+/,\"edui-message-type-\"+type)},getContent:function(){return this.getDom(\"content\").innerHTML},getType:function(){var arr=this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);return arr?arr[1]:\"\"},show:function(){this.getDom().style.display=\"block\"},hide:function(){var dom=this.getDom();if(dom){dom.style.display=\"none\";dom.parentNode&&dom.parentNode.removeChild(dom)}}};utils.inherits(Message,UIBase)})();(function(){var utils=baidu.editor.utils;var editorui=baidu.editor.ui;var _Dialog=editorui.Dialog;editorui.buttons={};editorui.Dialog=function(options){var dialog=new _Dialog(options);dialog.addListener(\"hide\",function(){if(dialog.editor){var editor=dialog.editor;try{if(browser.gecko){var y=editor.window.scrollY,x=editor.window.scrollX;editor.body.focus();editor.window.scrollTo(x,y)}else{editor.focus()}}catch(ex){}}});return dialog};var btnCmds=[\"undo\",\"redo\",\"formatmatch\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"touppercase\",\"tolowercase\",\"strikethrough\",\"subscript\",\"superscript\",\"source\",\"indent\",\"outdent\",\"blockquote\",\"pasteplain\",\"pagebreak\",\"selectall\",\"print\",\"horizontal\",\"removeformat\",\"time\",\"date\",\"unlink\",\"insertparagraphbeforetable\",\"insertrow\",\"insertcol\",\"mergeright\",\"mergedown\",\"deleterow\",\"deletecol\",\"splittorows\",\"splittocols\",\"splittocells\",\"mergecells\",\"deletetable\"];for(var i=0,ci;ci=btnCmds[i++];){ci=ci.toLowerCase();editorui[ci]=function(cmd){return function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",onclick:function(){editor.execCommand(cmd)},theme:editor.options.theme,showText:false});switch(cmd){case\"bold\":case\"italic\":case\"underline\":case\"strikethrough\":case\"fontborder\":ui.shouldUiShow=function(cmdInternal){return function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmdInternal)!==UE.constants.STATEFUL.DISABLED}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(cmd);if(state===-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}}(ci)}editorui.cleardoc=function(editor){var ui=new editorui.Button({className:\"edui-for-cleardoc\",title:editor.options.labelMap.cleardoc||editor.getLang(\"labelMap.cleardoc\")||\"\",theme:editor.options.theme,onclick:function(){if(confirm(editor.getLang(\"confirmClear\"))){editor.execCommand(\"cleardoc\")}}});editorui.buttons[\"cleardoc\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"cleardoc\")==-1)});return ui};var imageTypeSet=[\"none\",\"left\",\"center\",\"right\"];for(let value of imageTypeSet){(function(value){editorui[\"image\"+value]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+\"image\"+value,title:editor.options.labelMap[\"image\"+value]||editor.getLang(\"labelMap.\"+\"image\"+value)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(\"imagefloat\",value)},shouldUiShow:function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){return false}return editor.queryCommandState(\"imagefloat\")!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[\"image\"+value]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(\"imagefloat\")===UE.constants.STATEFUL.DISABLED);ui.setChecked(editor.queryCommandValue(\"imagefloat\")===value&&!uiReady)});return ui}})(value)}var typeset={justify:[\"left\",\"right\",\"center\",\"justify\"],directionality:[\"ltr\",\"rtl\"]};for(var p in typeset){(function(cmd,val){for(var i=0,ci;ci=val[i++];){(function(cmd2){editorui[cmd.replace(\"float\",\"\")+cmd2]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd.replace(\"float\",\"\")+cmd2,title:editor.options.labelMap[cmd.replace(\"float\",\"\")+cmd2]||editor.getLang(\"labelMap.\"+cmd.replace(\"float\",\"\")+cmd2)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(cmd,cmd2)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(cmd)==-1);ui.setChecked(editor.queryCommandValue(cmd)==cmd2&&!uiReady)});return ui}})(ci)}})(p,typeset[p])}for(var i=0,ci;ci=[\"backcolor\",\"forecolor\"][i++];){editorui[ci]=function(cmd){return function(editor){var ui=new editorui.ColorButton({className:\"edui-for-\"+cmd,color:\"default\",title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",editor:editor,onpickcolor:function(t,color){editor.execCommand(cmd,color)},onpicknocolor:function(){editor.execCommand(cmd,\"default\");this.setColor(\"transparent\");this.color=\"default\"},onbuttonclick:function(){editor.execCommand(cmd,this.color)},shouldUiShow:function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmd)!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui}}(ci)}var dialogIframeUrlMap={anchor:\"~/dialogs/anchor/anchor.html?2f10d082\",insertimage:\"~/dialogs/image/image.html?33811fba\",link:\"~/dialogs/link/link.html?ccbfcf18\",spechars:\"~/dialogs/spechars/spechars.html?3bbeb696\",searchreplace:\"~/dialogs/searchreplace/searchreplace.html?2cb782d2\",insertvideo:\"~/dialogs/video/video.html?918640f8\",insertaudio:\"~/dialogs/audio/audio.html?d1beccf5\",help:\"~/dialogs/help/help.html?05c0c8bf\",preview:\"~/dialogs/preview/preview.html?5d9a0847\",emotion:\"~/dialogs/emotion/emotion.html?a7bc0989\",wordimage:\"~/dialogs/wordimage/wordimage.html?c29fcf85\",formula:\"~/dialogs/formula/formula.html?9a5a1511\",attachment:\"~/dialogs/attachment/attachment.html?abf97d51\",insertframe:\"~/dialogs/insertframe/insertframe.html?807119a5\",edittip:\"~/dialogs/table/edittip.html?fa0ea189\",edittable:\"~/dialogs/table/edittable.html?134e2f06\",edittd:\"~/dialogs/table/edittd.html?9fe1a06e\",scrawl:\"~/dialogs/scrawl/scrawl.html?81bccab9\",template:\"~/dialogs/template/template.html?3c8090b7\",background:\"~/dialogs/background/background.html?c2bb8b05\",contentimport:\"~/dialogs/contentimport/contentimport.html?e298f77b\"};var dialogBtns={noOk:[\"searchreplace\",\"help\",\"spechars\",\"preview\"],ok:[\"attachment\",\"anchor\",\"link\",\"insertimage\",\"insertframe\",\"wordimage\",\"insertvideo\",\"insertaudio\",\"edittip\",\"edittable\",\"edittd\",\"scrawl\",\"template\",\"formula\",\"background\",\"contentimport\"]};for(var p in dialogBtns){(function(type,vals){for(var i=0,ci;ci=vals[i++];){if(browser.opera&&ci===\"searchreplace\"){continue}(function(cmd){editorui[cmd]=function(editor,iframeUrl,title){iframeUrl=iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd];title=editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\";var dialog;if(iframeUrl){dialog=new editorui.Dialog(utils.extend({iframeUrl:editor.ui.mapUrl(iframeUrl),editor:editor,className:\"edui-for-\"+cmd,title:title,holdScroll:cmd===\"insertimage\",fullscreen:/preview/.test(cmd),closeDialog:editor.getLang(\"closeDialog\")},type===\"ok\"?{buttons:[{className:\"edui-okbutton\",label:editor.getLang(\"ok\"),editor:editor,onclick:function(){dialog.close(true)}},{className:\"edui-cancelbutton\",label:editor.getLang(\"cancel\"),editor:editor,onclick:function(){dialog.close(false)}}]}:{}));editor.ui._dialogs[cmd+\"Dialog\"]=dialog}var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:title,onclick:function(){if(editor.options.toolbarCallback){if(true===editor.options.toolbarCallback(cmd,editor)){return}}if(dialog){switch(cmd){case\"wordimage\":var images=editor.execCommand(\"wordimage\");if(images&&images.length){dialog.render();dialog.open()}break;case\"scrawl\":if(editor.queryCommandState(\"scrawl\")!==-1){dialog.render();dialog.open()}break;default:dialog.render();dialog.open()}}},theme:editor.options.theme,disabled:cmd===\"scrawl\"&&editor.queryCommandState(\"scrawl\")===-1});switch(cmd){case\"insertimage\":case\"formula\":ui.shouldUiShow=function(cmd){return function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(\"formula\"===cmd&&closedNode.getAttribute(\"data-formula-image\")!==null){return true}if(\"insertimage\"===cmd){return true}return false}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var unNeedCheckState={edittable:1};if(cmd in unNeedCheckState)return;var state=editor.queryCommandState(cmd);if(ui.getDom()){ui.setDisabled(state===-1);ui.setChecked(state)}});return ui}})(ci.toLowerCase())}})(p,dialogBtns[p])}editorui.insertcode=function(editor,list,title){list=editor.options[\"insertcode\"]||[];title=editor.options.labelMap[\"insertcode\"]||editor.getLang(\"labelMap.insertcode\")||\"\";var items=[];utils.each(list,function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" >'+(this.label||\"\")+\"</div>\"}})});var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"insertcode\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-insertcode\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"insertcode\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"insertcode\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"insertcode\");if(!value){ui.setValue(title);return}value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontfamily=function(editor,list,title){list=editor.options[\"fontfamily\"]||[];title=editor.options.labelMap[\"fontfamily\"]||editor.getLang(\"labelMap.fontfamily\")||\"\";if(!list.length)return;for(var i=0,ci,items=[];ci=list[i];i++){var langLabel=editor.getLang(\"fontfamily\")[ci.name]||\"\";(function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"font-family:'+utils.unhtml(this.value)+'\">'+(this.label||\"\")+\"</div>\"}})})(ci.label||langLabel,ci.val)}var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"FontFamily\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-fontfamily\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"fontfamily\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontFamily\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"FontFamily\");value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontsize=function(editor,list,title){title=editor.options.labelMap[\"fontsize\"]||editor.getLang(\"labelMap.fontsize\")||\"\";list=list||editor.options[\"fontsize\"]||[];if(!list.length)return;var items=[];for(var i=0;i<list.length;i++){var size=list[i]+\"px\";items.push({label:size,value:size,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:'+this.value+'\">'+(this.label||\"\")+\"</div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,onselect:function(t,index){editor.execCommand(\"FontSize\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},className:\"edui-for-fontsize\"});editorui.buttons[\"fontsize\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontSize\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);ui.setValue(editor.queryCommandValue(\"FontSize\"))}}});return ui};editorui.paragraph=function(editor,list,title){title=editor.options.labelMap[\"paragraph\"]||editor.getLang(\"labelMap.paragraph\")||\"\";list=editor.options[\"paragraph\"]||[];if(utils.isEmptyObject(list))return;var items=[];for(var i in list){items.push({value:i,label:list[i]||editor.getLang(\"paragraph\")[i],theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><span class=\"edui-for-'+this.value+'\">'+(this.label||\"\")+\"</span></div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-paragraph\",onselect:function(t,index){editor.execCommand(\"Paragraph\",this.items[index].value)},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"paragraph\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"Paragraph\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"Paragraph\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.customstyle=function(editor){var list=editor.options[\"customstyle\"]||[],title=editor.options.labelMap[\"customstyle\"]||editor.getLang(\"labelMap.customstyle\")||\"\";if(!list.length)return;var langCs=editor.getLang(\"customstyle\");for(var i=0,items=[],t;t=list[i++];){(function(t){var ck={};ck.label=t.label?t.label:langCs[t.name];ck.style=t.style;ck.className=t.className;ck.tag=t.tag;items.push({label:ck.label,value:ck,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\">'+\"<\"+ck.tag+\" \"+(ck.className?' class=\"'+ck.className+'\"':\"\")+(ck.style?' style=\"'+ck.style+'\"':\"\")+\">\"+ck.label+\"</\"+ck.tag+\">\"+\"</div>\"}})})(t)}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-customstyle\",onselect:function(t,index){editor.execCommand(\"customstyle\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(value){for(var i=0,ti;ti=this.items[i++];){if(ti.label==value){return i-1}}return-1}});editorui.buttons[\"customstyle\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"customstyle\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"customstyle\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.inserttable=function(editor,iframeUrl,title){title=editor.options.labelMap[\"inserttable\"]||editor.getLang(\"labelMap.inserttable\")||\"\";var ui=new editorui.TableButton({editor:editor,title:title,className:\"edui-for-inserttable\",onpicktable:function(t,numCols,numRows){editor.execCommand(\"InsertTable\",{numRows:numRows,numCols:numCols,border:1})},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"inserttable\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"inserttable\")==-1)});return ui};editorui.lineheight=function(editor){var val=editor.options.lineheight||[];if(!val.length)return;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"lineheight\",this.value)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-lineheight\",title:editor.options.labelMap[\"lineheight\"]||editor.getLang(\"labelMap.lineheight\")||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"LineHeight\")||this.value;editor.execCommand(\"LineHeight\",value)}});editorui.buttons[\"lineheight\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"LineHeight\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"LineHeight\");value&&ui.setValue((value+\"\").replace(/cm/,\"\"));ui.setChecked(state)}});return ui};var rowspacings=[\"top\",\"bottom\"];for(var r=0,ri;ri=rowspacings[r++];){(function(cmd){editorui[\"rowspacing\"+cmd]=function(editor){var val=editor.options[\"rowspacing\"+cmd]||[];if(!val.length)return null;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"rowspacing\",this.value,cmd)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-rowspacing\"+cmd,title:editor.options.labelMap[\"rowspacing\"+cmd]||editor.getLang(\"labelMap.rowspacing\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"rowspacing\",cmd)||this.value;editor.execCommand(\"rowspacing\",value,cmd)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"rowspacing\",cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"rowspacing\",cmd);value&&ui.setValue((value+\"\").replace(/%/,\"\"));ui.setChecked(state)}});return ui}})(ri)}var lists=[\"insertorderedlist\",\"insertunorderedlist\"];for(var l=0,cl;cl=lists[l++];){(function(cmd){editorui[cmd]=function(editor){var vals=editor.options[cmd],_onMenuClick=function(){editor.execCommand(cmd,this.value)},items=[];for(var i in vals){items.push({label:vals[i]||editor.getLang()[cmd][i]||\"\",value:i,theme:editor.options.theme,onclick:_onMenuClick})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-\"+cmd,title:editor.getLang(\"labelMap.\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(cmd)||this.value;editor.execCommand(cmd,value)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(cmd);ui.setValue(value);ui.setChecked(state)}});return ui}})(cl)}editorui.fullscreen=function(editor,title){title=editor.options.labelMap[\"fullscreen\"]||editor.getLang(\"labelMap.fullscreen\")||\"\";var ui=new editorui.Button({className:\"edui-for-fullscreen\",title:title,theme:editor.options.theme,onclick:function(){if(editor.ui){editor.ui.setFullScreen(!editor.ui.isFullScreen())}this.setChecked(editor.ui.isFullScreen())}});editorui.buttons[\"fullscreen\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"fullscreen\");ui.setDisabled(state==-1);ui.setChecked(editor.ui.isFullScreen())});return ui};editorui[\"emotion\"]=function(editor,iframeUrl){var cmd=\"emotion\";var ui=new editorui.MultiMenuPop({title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd+\"\")||\"\",editor:editor,className:\"edui-for-\"+cmd,iframeUrl:editor.ui.mapUrl(iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd])});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui};editorui[\"autotypeset\"]=function(editor){var ui=new editorui.AutoTypeSetButton({editor:editor,title:editor.options.labelMap[\"autotypeset\"]||editor.getLang(\"labelMap.autotypeset\")||\"\",className:\"edui-for-autotypeset\",onbuttonclick:function(){editor.execCommand(\"autotypeset\")}});editorui.buttons[\"autotypeset\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"autotypeset\")==-1)});return ui};editorui[\"simpleupload\"]=function(editor){var name=\"simpleupload\",ui=new editorui.Button({className:\"edui-for-\"+name,title:editor.options.labelMap[name]||editor.getLang(\"labelMap.\"+name)||\"\",onclick:function(){},theme:editor.options.theme,showText:false});editorui.buttons[name]=ui;editor.addListener(\"ready\",function(){var b=ui.getDom(\"body\"),iconSpan=b.children[0];editor.fireEvent(\"simpleuploadbtnready\",iconSpan)});editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(name);if(state==-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,domUtils=baidu.editor.dom.domUtils;var nodeStack=[];function EditorUI(options){this.initOptions(options);this.initEditorUI()}EditorUI.prototype={uiName:\"editor\",initEditorUI:function(){this.editor.ui=this;this._dialogs={};this.initUIBase();this._initToolbars();var editor=this.editor,me=this;editor.addListener(\"ready\",function(){editor.getDialog=function(name){return editor.ui._dialogs[name+\"Dialog\"]};domUtils.on(editor.window,\"scroll\",function(evt){baidu.editor.ui.Popup.postHide(evt)});editor.ui._actualFrameWidth=editor.options.initialFrameWidth;UE.browser.ie&&UE.browser.version===6&&editor.container.ownerDocument.execCommand(\"BackgroundImageCache\",false,true);if(editor.options.elementPathEnabled){editor.ui.getDom(\"elementpath\").innerHTML='<div class=\"edui-editor-breadcrumb\">'+editor.getLang(\"elementPathTip\")+\":</div>\"}if(editor.options.wordCount){function countFn(){setCount(editor,me);domUtils.un(editor.document,\"click\",arguments.callee)}domUtils.on(editor.document,\"click\",countFn);editor.ui.getDom(\"wordcount\").innerHTML=editor.getLang(\"wordCountTip\")}editor.ui._scale();if(editor.options.scaleEnabled){if(editor.autoHeightEnabled){editor.disableAutoHeight()}me.enableScale()}else{me.disableScale()}if(!editor.options.elementPathEnabled&&!editor.options.wordCount&&!editor.options.scaleEnabled){editor.ui.getDom(\"elementpath\").style.display=\"none\";editor.ui.getDom(\"wordcount\").style.display=\"none\";editor.ui.getDom(\"scale\").style.display=\"none\"}if(!editor.selection.isFocus())return;editor.fireEvent(\"selectionchange\",false,true)});editor.addListener(\"mousedown\",function(t,evt){var el=evt.target||evt.srcElement;baidu.editor.ui.Popup.postHide(evt,el);baidu.editor.ui.ShortCutMenu.postHide(evt)});editor.addListener(\"delcells\",function(){if(UE.ui[\"edittip\"]){new UE.ui[\"edittip\"](editor)}editor.getDialog(\"edittip\").open()});var pastePop,isPaste=false,timer;editor.addListener(\"afterpaste\",function(){if(editor.queryCommandState(\"pasteplain\"))return;if(baidu.editor.ui.PastePicker){pastePop=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:editor}),editor:editor,className:\"edui-wordpastepop\"});pastePop.render()}isPaste=true});editor.addListener(\"afterinserthtml\",function(){clearTimeout(timer);timer=setTimeout(function(){if(pastePop&&(isPaste||editor.ui._isTransfer)){if(pastePop.isHidden()){var span=domUtils.createElement(editor.document,\"span\",{style:\"line-height:0px;\",innerHTML:\"\\ufeff\"}),range=editor.selection.getRange();range.insertNode(span);var tmp=getDomNode(span,\"firstChild\",\"previousSibling\");tmp&&pastePop.showAnchor(tmp.nodeType==3?tmp.parentNode:tmp);domUtils.remove(span)}else{pastePop.show()}delete editor.ui._isTransfer;isPaste=false}},200)});editor.addListener(\"contextmenu\",function(t,evt){baidu.editor.ui.Popup.postHide(evt)});editor.addListener(\"keydown\",function(t,evt){if(pastePop)pastePop.dispose(evt);var keyCode=evt.keyCode||evt.which;if(evt.altKey&&keyCode==90){UE.ui.buttons[\"fullscreen\"].onclick()}});editor.addListener(\"wordcount\",function(type){setCount(this,me)});function setCount(editor,ui){editor.setOpt({wordCount:true,maximumWords:1e4,wordCountMsg:editor.options.wordCountMsg||editor.getLang(\"wordCountMsg\"),wordOverFlowMsg:editor.options.wordOverFlowMsg||editor.getLang(\"wordOverFlowMsg\")});var opt=editor.options,max=opt.maximumWords,msg=opt.wordCountMsg,errMsg=opt.wordOverFlowMsg,countDom=ui.getDom(\"wordcount\");if(!opt.wordCount){return}var count=editor.getContentLength(true);if(count>max){countDom.innerHTML=errMsg;editor.fireEvent(\"wordcountoverflow\")}else{countDom.innerHTML=msg.replace(\"{#leave}\",max-count).replace(\"{#count}\",count)}}editor.addListener(\"selectionchange\",function(){if(editor.options.elementPathEnabled){me[(editor.queryCommandState(\"elementpath\")==-1?\"dis\":\"en\")+\"ableElementPath\"]()}if(editor.options.scaleEnabled){me[(editor.queryCommandState(\"scale\")==-1?\"dis\":\"en\")+\"ableScale\"]()}});var popup=new baidu.editor.ui.Popup({editor:editor,content:\"\",className:\"edui-bubble\",_onEditButtonClick:function(){this.hide();editor.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(name){this.hide();editor.ui._dialogs[name]&&editor.ui._dialogs[name].open()},_onImgSetFloat:function(value){this.hide();editor.execCommand(\"imagefloat\",value)},_setIframeAlign:function(value){var frame=popup.anchorEl;var newFrame=frame.cloneNode(true);switch(value){case-2:newFrame.setAttribute(\"align\",\"\");break;case-1:newFrame.setAttribute(\"align\",\"left\");break;case 1:newFrame.setAttribute(\"align\",\"right\");break}frame.parentNode.insertBefore(newFrame,frame);domUtils.remove(frame);popup.anchorEl=newFrame;popup.showAnchor(popup.anchorEl)},_updateIframe:function(){var frame=editor._iframe=popup.anchorEl;if(domUtils.hasClass(frame,\"ueditor_baidumap\")){editor.selection.getRange().selectNode(frame).select();editor.ui._dialogs.mapDialog.open();popup.hide()}else{editor.ui._dialogs.insertframeDialog.open();popup.hide()}},_onRemoveButtonClick:function(cmdName){editor.execCommand(cmdName);this.hide()},queryAutoHide:function(el){if(el&&el.ownerDocument==editor.document){if(el.tagName.toLowerCase()==\"img\"||domUtils.findParentByTagName(el,\"a\",true)){return el!==popup.anchorEl}}return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,el)}});popup.render();if(editor.options.imagePopup){editor.addListener(\"mouseover\",function(t,evt){evt=evt||window.event;var el=evt.target||evt.srcElement;if(editor.ui._dialogs.insertframeDialog&&/iframe/gi.test(el.tagName)){var html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">'+editor.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">'+editor.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">'+editor.getLang(\"justifyright\")+\"</span>&nbsp;&nbsp;\"+' <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span></nobr>\");if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=el;popup.showAnchor(popup.anchorEl)}else{popup.hide()}}});editor.addListener(\"selectionchange\",function(t,causeByUi){if(!causeByUi){return}var html=\"\",str=\"\",closedNode=editor.selection.getRange().getClosedNode(),dialogs=editor.ui._dialogs;if(closedNode&&closedNode.tagName===\"IMG\"){var dialogName=\"insertimageDialog\";if(closedNode.className.indexOf(\"edui-faked-video\")!==-1||closedNode.className.indexOf(\"edui-upload-video\")!==-1){dialogName=\"insertvideoDialog\"}if(closedNode.className.indexOf(\"edui-faked-audio\")!==-1||closedNode.className.indexOf(\"edui-upload-audio\")!==-1){dialogName=\"insertaudioDialog\"}if(closedNode.getAttribute(\"anchorname\")){dialogName=\"anchorDialog\";html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span>&nbsp;&nbsp;\"+\"<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\"+editor.getLang(\"delete\")+\"</span></nobr>\")}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){dialogName=\"\"}if(!dialogs[dialogName]){return}var actions=[];if(closedNode.getAttribute(\"data-word-image\")){actions.push(\"<span onclick=\\\"$$._onImgEditButtonClick('wordimageDialog');\\\" class='edui-clickable edui-popup-action-item'>\"+editor.getLang(\"save\")+\"</span>\")}else{}if(actions.length>0){actions.unshift(\"<nobr>\");actions.push(\"</nobr>\")}!html&&(html=popup.formatHtml(actions.join(\"\")))}if(editor.ui._dialogs.linkDialog){var link=editor.queryCommandValue(\"link\");var url;if(link&&(url=link.getAttribute(\"_href\")||link.getAttribute(\"href\",2))){var txt=url;if(url.length>30){txt=url.substring(0,20)+\"...\"}if(html){html+='<div style=\"height:5px;\"></div>'}html+=popup.formatHtml(\"<nobr>\"+editor.getLang(\"anchorMsg\")+': <a target=\"_blank\" href=\"'+url+'\" title=\"'+url+'\" >'+txt+\"</a>\"+' <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">'+editor.getLang(\"modify\")+\"</span>\"+' <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> '+editor.getLang(\"clear\")+\"</span></nobr>\");popup.showAnchor(link)}}if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=closedNode||link;popup.showAnchor(popup.anchorEl)}else{popup.hide()}})}},_initToolbars:function(){var editor=this.editor;var toolbars=this.toolbars||[];if(toolbars[0]){toolbars[0].unshift(\"message\")}var toolbarUis=[];var extraUIs=[];for(var i=0;i<toolbars.length;i++){var toolbar=toolbars[i];var toolbarUi=new baidu.editor.ui.Toolbar({theme:editor.options.theme});for(var j=0;j<toolbar.length;j++){var toolbarItem=toolbar[j];var toolbarItemUi=null;if(typeof toolbarItem==\"string\"){toolbarItem=toolbarItem.toLowerCase();if(toolbarItem===\"|\"){toolbarItem=\"Separator\"}if(toolbarItem===\"||\"){toolbarItem=\"Breakline\"}var ui=baidu.editor.ui[toolbarItem];if(ui){if(utils.isFunction(ui)){toolbarItemUi=new baidu.editor.ui[toolbarItem](editor)}else{if(ui.id&&ui.id!==editor.key){continue}var itemUI=ui.execFn.call(editor,editor,toolbarItem);if(itemUI){if(ui.index===undefined){toolbarUi.add(itemUI);continue}else{extraUIs.push({index:ui.index,itemUI:itemUI})}}}}if(toolbarItem===\"fullscreen\"){if(toolbarUis&&toolbarUis[0]){toolbarUis[0].items.splice(0,0,toolbarItemUi)}else{toolbarItemUi&&toolbarUi.items.splice(0,0,toolbarItemUi)}continue}}else{toolbarItemUi=toolbarItem}if(toolbarItemUi&&toolbarItemUi.id){toolbarUi.add(toolbarItemUi)}}toolbarUis[i]=toolbarUi}utils.each(extraUIs,function(obj){toolbarUi.add(obj.itemUI,obj.index)});this.toolbars=toolbarUis},getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\">'+'<div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">'+(this.toolbars.length?'<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">'+this.renderToolbarBoxHtml()+\"</div></div>\":\"\")+'<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\">'+'<div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">'+this.editor.getLang(\"clickToUpload\")+\"</div>\"+'<div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div>'+'<div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div>'+'<div style=\"height:0;overflow:hidden;clear:both;\"></div>'+\"</div>\"+'<div id=\"##_message_holder\" class=\"%%-messageholder\"></div>'+\"</div>\"+'<div id=\"##_iframeholder\" class=\"%%-iframeholder\">'+\"</div>\"+'<div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr>'+'<td id=\"##_elementpath\" class=\"%%-bottombar\"></td>'+'<td id=\"##_wordcount\" class=\"%%-wordcount\"></td>'+'<td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td>'+\"</tr></table></div>\"+'<div id=\"##_scalelayer\"></div>'+\"</div>\"},showWordImageDialog:function(){this._dialogs[\"wordimageDialog\"].open()},renderToolbarBoxHtml:function(){var buff=[];for(var i=0;i<this.toolbars.length;i++){buff.push(this.toolbars[i].renderHtml())}return buff.join(\"\")},setFullScreen:function(fullscreen){var editor=this.editor,container=editor.container.parentNode.parentNode;if(this._fullscreen!=fullscreen){this._fullscreen=fullscreen;this.editor.fireEvent(\"beforefullscreenchange\",fullscreen);if(baidu.editor.browser.gecko){var bk=editor.selection.getRange().createBookmark()}if(fullscreen){this._bakEditorContaninerWidth=editor.iframe.parentNode.style.width;while(container.tagName!==\"BODY\"){var position=baidu.editor.dom.domUtils.getComputedStyle(container,\"position\");nodeStack.push(position);container.style.position=\"static\";container=container.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow;this._bakBodyOverflow=document.body.style.overflow;this._bakAutoHeight=this.editor.autoHeightEnabled;this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);if(this._bakAutoHeight){editor.autoHeightEnabled=false;this.editor.disableAutoHeight()}document.documentElement.style.overflow=\"hidden\";window.scrollTo(0,window.scrollY);this._bakCssText=this.getDom().style.cssText;this._bakCssText1=this.getDom(\"iframeholder\").style.cssText;editor.iframe.parentNode.style.width=\"\";this._updateFullScreen()}else{while(container.tagName!==\"BODY\"){container.style.position=nodeStack.shift();container=container.parentNode}this.getDom().style.cssText=this._bakCssText;this.getDom(\"iframeholder\").style.cssText=this._bakCssText1;if(this._bakAutoHeight){editor.autoHeightEnabled=true;this.editor.enableAutoHeight()}document.documentElement.style.overflow=this._bakHtmlOverflow;document.body.style.overflow=this._bakBodyOverflow;editor.iframe.parentNode.style.width=this._bakEditorContaninerWidth;window.scrollTo(0,this._bakScrollTop)}if(browser.gecko&&editor.body.contentEditable===\"true\"){var input=document.createElement(\"input\");document.body.appendChild(input);editor.body.contentEditable=false;setTimeout(function(){input.focus();setTimeout(function(){editor.body.contentEditable=true;editor.fireEvent(\"fullscreenchanged\",fullscreen);editor.selection.getRange().moveToBookmark(bk).select(true);baidu.editor.dom.domUtils.remove(input);fullscreen&&window.scroll(0,0)},0)},0)}if(editor.body.contentEditable===\"true\"){this.editor.fireEvent(\"fullscreenchanged\",fullscreen);this.triggerLayout()}}},_updateFullScreen:function(){if(this._fullscreen){var vpRect=uiUtils.getViewportRect();this.getDom().style.cssText=\"border:0;position:absolute;left:0;top:var(--ueditor-top-offset,\"+(this.editor.options.topOffset||0)+\"px);width:\"+vpRect.width+\"px;height:\"+vpRect.height+\"px;z-index:\"+(this.getDom().style.zIndex*1+100);uiUtils.setViewportOffset(this.getDom(),{left:0});this.editor.setHeight(vpRect.height-this.getDom(\"toolbarbox\").offsetHeight-this.getDom(\"bottombar\").offsetHeight-(this.editor.options.topOffset||0),true);if(browser.gecko){try{window.onresize()}catch(e){}}}},_updateElementPath:function(){var bottom=this.getDom(\"elementpath\"),list;if(this.elementPathEnabled&&(list=this.editor.queryCommandValue(\"elementpath\"))){var buff=[];for(var i=0,ci;ci=list[i];i++){buff[i]=this.formatHtml('<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+i+'&quot;);\">'+ci+\"</span>\")}bottom.innerHTML='<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">'+this.editor.getLang(\"elementPathTip\")+\": \"+buff.join(\" &gt; \")+\"</div>\"}else{bottom.style.display=\"none\"}},disableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.innerHTML=\"\";bottom.style.display=\"none\";this.elementPathEnabled=false},enableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.style.display=\"\";this.elementPathEnabled=true;this._updateElementPath()},_scale:function(){var doc=document,editor=this.editor,editorHolder=editor.container,editorDocument=editor.document,toolbarBox=this.getDom(\"toolbarbox\"),bottombar=this.getDom(\"bottombar\"),scale=this.getDom(\"scale\"),scalelayer=this.getDom(\"scalelayer\");var isMouseMove=false,position=null,minEditorHeight=0,minEditorWidth=editor.options.minFrameWidth,pageX=0,pageY=0,scaleWidth=0,scaleHeight=0;function down(){position=domUtils.getXY(editorHolder);if(!minEditorHeight){minEditorHeight=editor.options.minFrameHeight+toolbarBox.offsetHeight+bottombar.offsetHeight}scalelayer.style.cssText=\"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\"+editorHolder.offsetWidth+\"px;height:\"+editorHolder.offsetHeight+\"px;z-index:\"+(editor.options.zIndex+1);domUtils.on(doc,\"mousemove\",move);domUtils.on(editorDocument,\"mouseup\",up);domUtils.on(doc,\"mouseup\",up)}var me=this;this.editor.addListener(\"fullscreenchanged\",function(e,fullScreen){if(fullScreen){me.disableScale()}else{if(me.editor.options.scaleEnabled){me.enableScale();var tmpNode=me.editor.document.createElement(\"span\");me.editor.body.appendChild(tmpNode);me.editor.body.style.height=Math.max(domUtils.getXY(tmpNode).y,me.editor.iframe.offsetHeight-20)+\"px\";domUtils.remove(tmpNode)}}});function move(event){clearSelection();var e=event||window.event;pageX=e.pageX||doc.documentElement.scrollLeft+e.clientX;pageY=e.pageY||doc.documentElement.scrollTop+e.clientY;scaleWidth=pageX-position.x;scaleHeight=pageY-position.y;if(scaleWidth>=minEditorWidth){isMouseMove=true;scalelayer.style.width=scaleWidth+\"px\"}if(scaleHeight>=minEditorHeight){isMouseMove=true;scalelayer.style.height=scaleHeight+\"px\"}}function up(){if(isMouseMove){isMouseMove=false;editor.ui._actualFrameWidth=scalelayer.offsetWidth-2;editorHolder.style.width=editor.ui._actualFrameWidth+\"px\";editor.setHeight(scalelayer.offsetHeight-bottombar.offsetHeight-toolbarBox.offsetHeight-2,true)}if(scalelayer){scalelayer.style.display=\"none\"}clearSelection();domUtils.un(doc,\"mousemove\",move);domUtils.un(editorDocument,\"mouseup\",up);domUtils.un(doc,\"mouseup\",up)}function clearSelection(){if(browser.ie)doc.selection.clear();else window.getSelection().removeAllRanges()}this.enableScale=function(){if(editor.queryCommandState(\"source\")==1)return;scale.style.display=\"\";this.scaleEnabled=true;domUtils.on(scale,\"mousedown\",down)};this.disableScale=function(){scale.style.display=\"none\";this.scaleEnabled=false;domUtils.un(scale,\"mousedown\",down)}},isFullScreen:function(){return this._fullscreen},postRender:function(){UIBase.prototype.postRender.call(this);for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].postRender()}var me=this;var timerId,domUtils=baidu.editor.dom.domUtils,updateFullScreenTime=function(){clearTimeout(timerId);timerId=setTimeout(function(){me._updateFullScreen()})};domUtils.on(window,\"resize\",updateFullScreenTime);me.addListener(\"destroy\",function(){domUtils.un(window,\"resize\",updateFullScreenTime);clearTimeout(timerId)})},showToolbarMsg:function(msg,flag){this.getDom(\"toolbarmsg_label\").innerHTML=msg;this.getDom(\"toolbarmsg\").style.display=\"\";if(!flag){var w=this.getDom(\"upload_dialog\");w.style.display=\"none\"}},hideToolbarMsg:function(){this.getDom(\"toolbarmsg\").style.display=\"none\"},mapUrl:function(url){return url?url.replace(\"~/\",this.editor.options.UEDITOR_CORS_URL||\"\"):\"\"},triggerLayout:function(){var dom=this.getDom();if(dom.style.zoom==\"1\"){dom.style.zoom=\"100%\"}else{dom.style.zoom=\"1\"}}};utils.inherits(EditorUI,baidu.editor.ui.UIBase);var instances={};UE.ui.Editor=function(options){var editor=new UE.Editor(options);editor.options.editor=editor;utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/css/ueditor.css?98125a73\",tag:\"link\",type:\"text/css\",rel:\"stylesheet\"});var oldRender=editor.render;editor.render=function(holder){if(holder.constructor===String){editor.key=holder;instances[holder]=editor}utils.domReady(function(){editor.langIsReady?renderUI():editor.addListener(\"langReady\",renderUI);function renderUI(){editor.setOpt({labelMap:editor.options.labelMap||editor.getLang(\"labelMap\")});new EditorUI(editor.options);if(holder){if(holder.constructor===String){holder=document.getElementById(holder)}holder&&holder.getAttribute(\"name\")&&(editor.options.textarea=holder.getAttribute(\"name\"));if(holder&&/script|textarea/gi.test(holder.tagName)){var newDiv=document.createElement(\"div\");holder.parentNode.insertBefore(newDiv,holder);var cont=holder.value||holder.innerHTML;editor.options.initialContent=/^[\\t\\r\\n ]*$/.test(cont)?editor.options.initialContent:cont.replace(/>[\\n\\r\\t]+([ ]{4})+/g,\">\").replace(/[\\n\\r\\t]+([ ]{4})+</g,\"<\").replace(/>[\\n\\r\\t]+</g,\"><\");holder.className&&(newDiv.className=holder.className);holder.style.cssText&&(newDiv.style.cssText=holder.style.cssText);if(/textarea/i.test(holder.tagName)){editor.textarea=holder;editor.textarea.style.display=\"none\"}else{holder.parentNode.removeChild(holder)}if(holder.id){newDiv.id=holder.id;domUtils.removeAttributes(holder,\"id\")}holder=newDiv;holder.innerHTML=\"\"}}domUtils.addClass(holder,\"edui-\"+editor.options.theme);editor.ui.render(holder);var opt=editor.options;editor.container=editor.ui.getDom();var parents=domUtils.findParents(holder,true);var displays=[];for(var i=0,ci;ci=parents[i];i++){displays[i]=ci.style.display;ci.style.display=\"block\"}if(opt.initialFrameWidth){opt.minFrameWidth=opt.initialFrameWidth}else{opt.minFrameWidth=opt.initialFrameWidth=holder.offsetWidth;var styleWidth=holder.style.width;if(/%$/.test(styleWidth)){opt.initialFrameWidth=styleWidth}}if(opt.initialFrameHeight){opt.minFrameHeight=opt.initialFrameHeight}else{opt.initialFrameHeight=opt.minFrameHeight=holder.offsetHeight}for(var i=0,ci;ci=parents[i];i++){ci.style.display=displays[i]}if(holder.style.height){holder.style.height=\"\"}editor.container.style.width=opt.initialFrameWidth+(/%$/.test(opt.initialFrameWidth)?\"\":\"px\");editor.container.style.zIndex=opt.zIndex;oldRender.call(editor,editor.ui.getDom(\"iframeholder\"));editor.fireEvent(\"afteruiready\")}})};return editor};UE.getEditor=function(id,opt){var editor=instances[id];if(!editor){editor=instances[id]=new UE.ui.Editor(opt);editor.render(id)}return editor};UE.delEditor=function(id){var editor;if(editor=instances[id]){editor.key&&editor.destroy();delete instances[id]}};UE.registerUI=function(uiName,fn,index,editorId){utils.each(uiName.split(/\\s+/),function(name){baidu.editor.ui[name]={id:editorId,execFn:fn,index:index}})}})();UE.registerUI(\"message\",function(editor){var editorui=baidu.editor.ui;var Message=editorui.Message;var holder;var _messageItems=[];var me=editor;me.setOpt(\"enableMessageShow\",true);if(me.getOpt(\"enableMessageShow\")===false){return}me.addListener(\"ready\",function(){holder=document.getElementById(me.ui.id+\"_message_holder\");updateHolderPos();setTimeout(function(){updateHolderPos()},500)});me.addListener(\"showmessage\",function(type,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=new Message({timeout:opt.timeout,type:opt.type,content:opt.content,keepshow:opt.keepshow,editor:me}),mid=opt.id||\"msg_\"+(+new Date).toString(36);message.render(holder);_messageItems[mid]=message;message.reset(opt);updateHolderPos();return mid});me.addListener(\"updatemessage\",function(type,id,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=_messageItems[id];message.render(holder);message&&message.reset(opt)});me.addListener(\"hidemessage\",function(type,id){var message=_messageItems[id];message&&message.hide()});function updateHolderPos(){if(!holder||!me.ui)return;var toolbarbox=me.ui.getDom(\"toolbarbox\");if(toolbarbox){holder.style.top=toolbarbox.offsetHeight+3+\"px\"}holder.style.zIndex=Math.max(me.options.zIndex,me.iframe.style.zIndex)+1}})})();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/ueditor.config.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(a,d){return c(a||self.document.URL||self.location.href,d||b())}function b(){var a=document.getElementsByTagName(\"script\");return a[a.length-1].src}function c(a,b){var c=b;return/^(\\/|\\\\\\\\)/.test(b)?c=/^.+?\\w(\\/|\\\\\\\\)/.exec(a)[0]+b.replace(/^(\\/|\\\\\\\\)/,\"\"):/^[a-z]+:/i.test(b)||(a=a.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/,\"\"),c=a+\"\"+b),d(c)}function d(a){var b=/^[a-z]+:\\/\\//.exec(a)[0],c=null,d=[];for(a=a.replace(b,\"\").split(\"?\")[0].split(\"#\")[0],a=a.replace(/\\\\/g,\"/\").split(/\\//),a[a.length-1]=\"\";a.length;)\"..\"===(c=a.shift())?d.pop():\".\"!==c&&d.push(c);return b+d.join(\"/\")}var e,f;e=window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:window.__msCDN?window.__msCDN+\"asset/vendor/ueditor/\":window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":a(),f=window.UEDITOR_CORS_URL?window.UEDITOR_CORS_URL:window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:a(),window.UEDITOR_CONFIG={UEDITOR_HOME_URL:e,UEDITOR_CORS_URL:f,debug:!1,serverUrl:\"/ueditor-plus/_demo_server/handle.php\",serverHeaders:{},toolbars:[[\"fullscreen\",\"source\",\"|\",\"undo\",\"redo\",\"|\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"strikethrough\",\"superscript\",\"subscript\",\"removeformat\",\"formatmatch\",\"autotypeset\",\"blockquote\",\"pasteplain\",\"|\",\"forecolor\",\"backcolor\",\"insertorderedlist\",\"insertunorderedlist\",\"selectall\",\"cleardoc\",\"|\",\"rowspacingtop\",\"rowspacingbottom\",\"lineheight\",\"|\",\"customstyle\",\"paragraph\",\"fontfamily\",\"fontsize\",\"|\",\"directionalityltr\",\"directionalityrtl\",\"indent\",\"|\",\"justifyleft\",\"justifycenter\",\"justifyright\",\"justifyjustify\",\"|\",\"touppercase\",\"tolowercase\",\"|\",\"link\",\"unlink\",\"anchor\",\"|\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"|\",\"simpleupload\",\"insertimage\",\"emotion\",\"scrawl\",\"insertvideo\",\"insertaudio\",\"attachment\",\"insertframe\",\"insertcode\",\"pagebreak\",\"template\",\"background\",\"formula\",\"|\",\"horizontal\",\"date\",\"time\",\"spechars\",\"wordimage\",\"|\",\"inserttable\",\"deletetable\",\"insertparagraphbeforetable\",\"insertrow\",\"deleterow\",\"insertcol\",\"deletecol\",\"mergecells\",\"mergeright\",\"mergedown\",\"splittocells\",\"splittorows\",\"splittocols\",\"|\",\"print\",\"preview\",\"searchreplace\",\"|\",\"contentimport\",\"help\"]],toolbarCallback:function(a,b){},imageConfig:{disableUpload:!1,disableOnline:!1,selectCallback:null},videoConfig:{disableUpload:!1,selectCallback:null},audioConfig:{disableUpload:!1,selectCallback:null},formulaConfig:{imageUrlTemplate:\"https://r.latexeasy.com/image.svg?{}\",editorMode:\"live\",editorLiveServer:\"https://latexeasy.com\"},autoSaveEnable:!0,autoSaveRestore:!1,autoSaveKey:null,initialContent:\"\",focus:!1,initialStyle:\"\",indentValue:\"2em\",readonly:!1,autoClearEmptyNode:!0,fullscreen:!1,allHtmlEnabled:!1,enableContextMenu:!0,shortcutMenu:[\"bold\",\"italic\",\"underline\",\"strikethrough\",\"fontborder\",\"forecolor\",\"backcolor\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"insertimage\",\"formula\"],elementPathEnabled:!0,wordCount:!0,maximumWords:1e4,maxUndoCount:20,maxInputCount:1,autoHeightEnabled:!0,catchRemoteImageEnable:!0,autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:{div:1},indent:!1,indentValue:\"2em\",bdc2sb:!1,tobdc:!1},allowDivTransToP:!0,rgb2Hex:!0},window.UE={getUEBasePath:a}}();"
  },
  {
    "path": "_examples-integrate/reactx/public/static/UEditorPlus/ueditor.parse.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){!function(){UE=window.UE||{};var a=!!window.ActiveXObject,b={removeLastbs:function(a){return a.replace(/\\/$/,\"\")},extend:function(a,b){for(var c=arguments,d=!!this.isBoolean(c[c.length-1])&&c[c.length-1],e=this.isBoolean(c[c.length-1])?c.length-1:c.length,f=1;f<e;f++){var g=c[f];for(var h in g)d&&a.hasOwnProperty(h)||(a[h]=g[h])}return a},isIE:a,cssRule:a?function(a,b,c){var d,e;c=c||document,d=c.indexList?c.indexList:c.indexList={};var f;if(d[a])f=c.styleSheets[d[a]];else{if(void 0===b)return\"\";f=c.createStyleSheet(\"\",e=c.styleSheets.length),d[a]=e}return void 0===b?f.cssText:void(f.cssText=f.cssText+\"\\n\"+(b||\"\"))}:function(a,b,c){c=c||document;var d,e=c.getElementsByTagName(\"head\")[0];if(!(d=c.getElementById(a))){if(void 0===b)return\"\";d=c.createElement(\"style\"),d.id=a,e.appendChild(d)}return void 0===b?d.innerHTML:void(\"\"!==b?d.innerHTML=d.innerHTML+\"\\n\"+b:e.removeChild(d))},domReady:function(b){var c=window.document;\"complete\"===c.readyState?b():a?(!function(){if(!c.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){return void setTimeout(arguments.callee,0)}b()}}(),window.attachEvent(\"onload\",function(){b()})):(c.addEventListener(\"DOMContentLoaded\",function(){c.removeEventListener(\"DOMContentLoaded\",arguments.callee,!1),b()},!1),window.addEventListener(\"load\",function(){b()},!1))},each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return!1}else for(var f in a)if(a.hasOwnProperty(f)&&b.call(c,a[f],f,a)===!1)return!1},inArray:function(a,b){var c=-1;return this.each(a,function(a,d){if(a===b)return c=d,!1}),c},pushItem:function(a,b){this.inArray(a,b)==-1&&a.push(b)},trim:function(a){return a.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},indexOf:function(a,b,c){var d=-1;return c=this.isNumber(c)?c:0,this.each(a,function(a,e){if(e>=c&&a===b)return d=e,!1}),d},hasClass:function(a,b){b=b.replace(/(^[ ]+)|([ ]+$)/g,\"\").replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp(\"\\\\b\"+c+\"\\\\b\",\"i\").test(e))return!1;return d-1==b.length},addClass:function(a,c){if(a){c=this.trim(c).replace(/[ ]{2,}/g,\" \").split(\" \");for(var d,e=0,f=a.className;d=c[e++];)new RegExp(\"\\\\b\"+d+\"\\\\b\").test(f)||(f+=\" \"+d);a.className=b.trim(f)}},removeClass:function(a,b){b=this.isArray(b)?b:this.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp(\"\\\\b\"+c+\"\\\\b\"),\"\");e=this.trim(e).replace(/[ ]{2,}/g,\" \"),a.className=e,!e&&a.removeAttribute(\"className\")},on:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.addEventListener)a.addEventListener(c,d,!1);else{d._d||(d._d={els:[]});var g=c+d.toString(),h=b.indexOf(d._d.els,a);d._d[g]&&h!=-1||(h==-1&&d._d.els.push(a),d._d[g]||(d._d[g]=function(a){return d.call(a.srcElement,a||window.event)}),a.attachEvent(\"on\"+c,d._d[g]))}a=null},off:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.removeEventListener)a.removeEventListener(c,d,!1);else{var g=c+d.toString();try{a.detachEvent(\"on\"+c,d._d?d._d[g]:d)}catch(h){}if(d._d&&d._d[g]){var i=b.indexOf(d._d.els,a);i!=-1&&d._d.els.splice(i,1),0==d._d.els.length&&delete d._d[g]}}},loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)\"tag\"!=h&&g.push(h+'=\"'+d[h]+'\"');return void c.write(\"<\"+d.tag+\" \"+g.join(\" \")+\" ></\"+d.tag+\">\")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error(\"The load \"+(d.href||d.src)+\" fails,check the url\")},c.getElementsByTagName(\"head\")[0].appendChild(i)}}}()};b.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Boolean\"],function(a){b[\"is\"+a]=function(b){return Object.prototype.toString.apply(b)==\"[object \"+a+\"]\"}});var c={};UE.parse={register:function(a,b){c[a]=b},load:function(a){b.each(c,function(c){c.call(a,b)})}},uParse=function(a,c){b.domReady(function(){var d;if(document.querySelectorAll)d=document.querySelectorAll(a);else if(/^#/.test(a))d=[document.getElementById(a.replace(/^#/,\"\"))];else if(/^\\./.test(a)){var d=[];b.each(document.getElementsByTagName(\"*\"),function(b){b.className&&new RegExp(\"\\\\b\"+a.replace(/^\\./,\"\")+\"\\\\b\",\"i\").test(b.className)&&d.push(b)})}else d=document.getElementsByTagName(a);b.each(d,function(d){UE.parse.load(b.extend({root:d,selector:a},c))})})}}(),UE.parse.register(\"insertcode\",function(a){var b=this.root.getElementsByTagName(\"pre\");if(b.length)if(\"undefined\"==typeof XRegExp){var c,d;void 0!==this.rootPath?(c=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCore.js\",d=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCoreDefault.css\"):(c=this.highlightJsUrl,d=this.highlightCssUrl),a.loadFile(document,{id:\"syntaxhighlighter_css\",tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:d}),a.loadFile(document,{id:\"syntaxhighlighter_js\",src:c,tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})})}else a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})}),UE.parse.register(\"table\",function(a){function b(b,c){var d,e=b;for(c=a.isArray(c)?c:[c];e;){for(d=0;d<c.length;d++)if(e.tagName==c[d].toUpperCase())return e;e=e.parentNode}return null}function c(b,c,e){for(var f=b.rows,g=[],h=\"TH\"===f[0].cells[0].tagName,i=0,j=0,k=f.length;j<k;j++)g[j]=f[j];var l={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){var c=a.innerText||a.textContent,d=b.innerText||b.textContent;return c.localeCompare(d)},reversebyasc:function(a,b){var c=a.innerHTML,d=b.innerHTML;return d.localeCompare(c)},orderbynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(d||0)-(e||0)},reversebynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(e||0)-(d||0)}};b.setAttribute(\"data-sort-type\",e&&\"string\"==typeof e&&l[e]?e:\"\"),h&&g.splice(0,1),g=d(g,function(a,b){var d;return d=e&&\"function\"==typeof e?e.call(this,a.cells[c],b.cells[c]):e&&\"number\"==typeof e?1:e&&\"string\"==typeof e&&l[e]?l[e].call(this,a.cells[c],b.cells[c]):l.orderbyasc.call(this,a.cells[c],b.cells[c])});for(var m=b.ownerDocument.createDocumentFragment(),n=0,k=g.length;n<k;n++)m.appendChild(g[n]);var o=b.getElementsByTagName(\"tbody\")[0];i?o.insertBefore(m,f[i-range.endRowIndex+range.beginRowIndex-1]):o.appendChild(m)}function d(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c<d;c++)for(var e=c,f=a.length;e<f;e++)if(b(a[c],a[e])>0){var g=a[c];a[c]=a[e],a[e]=g}return a}function e(b){if(!a.hasClass(b.rows[0],\"firstRow\")){for(var c=1;c<b.rows.length;c++)a.removeClass(b.rows[c],\"firstRow\");a.addClass(b.rows[0],\"firstRow\")}}var f=this,g=this.root,h=g.getElementsByTagName(\"table\");if(h.length){var i=this.selector;a.cssRule(\"table\",i+\" table.noBorderTable td,\"+i+\" table.noBorderTable th,\"+i+\" table.noBorderTable caption{border:1px dashed #ddd !important}\"+i+\" table.sortEnabled tr.firstRow th,\"+i+\" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;background-position: center right; background-image:url(\"+this.rootPath+\"themes/default/images/sortable.png);}\"+i+\" table.sortEnabled tr.firstRow th:hover,\"+i+\" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\"+i+\" table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+i+\" td,\"+i+\" th{padding: 5px 10px;border: 1px solid #DDD;}\"+i+\" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+i+\" th{border-top:1px solid #BBB;background:#F7F7F7;}\"+i+\" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\"+i+\" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\"+i+\" tr.ue-table-interlace-color-double td{ background: #f7faff; }\"+i+\" td p{margin:0;padding:0;width:auto;height:auto;}\",document),a.each(\"td th caption\".split(\" \"),function(b){var c=g.getElementsByTagName(b);c.length&&a.each(c,function(a){a.firstChild||(a.innerHTML=\"&nbsp;\")})});var h=g.getElementsByTagName(\"table\");a.each(h,function(d){/\\bsortEnabled\\b/.test(d.className)&&a.on(d,\"click\",function(d){var g=d.target||d.srcElement,h=b(g,[\"td\",\"th\"]),i=b(g,\"table\"),j=a.indexOf(i.rows[0].cells,h),k=i.getAttribute(\"data-sort-type\");j!=-1&&(c(i,j,f.tableSortCompareFn||k),e(i))})})}}),UE.parse.register(\"background\",function(a){for(var b,c,d=this,e=d.root,f=e.getElementsByTagName(\"p\"),g=0;c=f[g++];)b=c.getAttribute(\"data-background\"),b&&c.parentNode.removeChild(c);b&&a.cssRule(\"ueditor_background\",d.selector+\"{\"+b+\"}\",document)}),UE.parse.register(\"list\",function(a){function b(b){var e=this;a.each(b,function(b){if(b.className&&/custom_/i.test(b.className)){var f=b.className.match(/custom_(\\w+)/)[1];if(\"dash\"==f||\"dot\"==f)a.pushItem(c,h+\" li.list-\"+d[f]+\"{background-image:url(\"+e.liiconpath+d[f]+\".gif)}\"),a.pushItem(c,h+\" ul.custom_\"+f+\"{list-style:none;} \"+h+\" ul.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\");else{var g=1;a.each(b.childNodes,function(b){\"LI\"==b.tagName&&(a.pushItem(c,h+\" li.list-\"+d[f]+g+\"{background-image:url(\"+e.liiconpath+\"list-\"+d[f]+g+\".gif)}\"),g++)}),a.pushItem(c,h+\" ol.custom_\"+f+\"{list-style:none;}\"+h+\" ol.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\")}switch(f){case\"cn\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:30px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:55px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:68px}\");break;case\"num\":case\"num1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\");break;case\"num2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:35px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\");break;case\"dash\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:35px}\");break;case\"dot\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:20px}\")}}})}var c=[],d={cn:\"cn-1-\",cn1:\"cn-2-\",cn2:\"cn-3-\",num:\"num-1-\",num1:\"num-2-\",num2:\"num-3-\",dash:\"dash\",dot:\"dot\"};a.extend(this,{liiconpath:\"http://bs.baidu.com/listicon/\",listDefaultPaddingLeft:\"20\"});var e=this.root,f=e.getElementsByTagName(\"ol\"),g=e.getElementsByTagName(\"ul\"),h=this.selector;f.length&&b.call(this,f),g.length&&b.call(this,g),(f.length||g.length)&&(c.push(h+\" .list-paddingleft-1{padding-left:0}\"),c.push(h+\" .list-paddingleft-2{padding-left:\"+this.listDefaultPaddingLeft+\"px}\"),c.push(h+\" .list-paddingleft-3{padding-left:\"+2*this.listDefaultPaddingLeft+\"px}\"),a.cssRule(\"list\",h+\" ol,\"+h+\" ul{margin:0;padding:0;}\\n\"+h+\" li{clear:both;}\\n\"+c.join(\"\\n\"),document))})}();"
  },
  {
    "path": "_examples-integrate/reactx/src/App.css",
    "content": ".App {\n  text-align: center;\n}\n\n.App-logo {\n  height: 40vmin;\n  pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .App-logo {\n    animation: App-logo-spin infinite 20s linear;\n  }\n}\n\n.App-header {\n  background-color: #282c34;\n  min-height: 100vh;\n  display: flex;\n  flex-direction: column;\n  align-items: center;\n  justify-content: center;\n  font-size: calc(10px + 2vmin);\n  color: white;\n}\n\n.App-link {\n  color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n"
  },
  {
    "path": "_examples-integrate/reactx/src/App.js",
    "content": "import logo from './logo.svg';\nimport './App.css';\nimport RcUeditor from 'react-ueditor-wrap';\n\nfunction App() {\n    const hanldeChage = (value) => {\n        console.log('RcUeditor', value);\n    }\n    return (\n        <div className=\"App\">\n            <header>\n                <img src={logo} className=\"App-logo\" alt=\"logo\"/>\n            </header>\n            <h2>\n                UEditor Plus React 集成示例\n            </h2>\n            <div style={{margin: '0 auto', maxWidth: '800px'}}>\n                <RcUeditor\n                    value={'<p>Hello UEditorPlus</p>'}\n                    ueditorUrl={'/static/UEditorPlus/ueditor.all.js'}\n                    ueditorConfigUrl={'/static/UEditorPlus/ueditor.config.js'}\n                    editorConfig={{\n                        // 后端服务地址，后端处理参考\n                        // https://open.modstart.com/ueditor-plus/backend.html\n                        initialFrameWidth: '100%',\n                        serverUrl: '/api/path/to/server',\n                        UEDITOR_HOME_URL: '/static/UEditorPlus/',\n                        UEDITOR_CORS_URL: '/static/UEditorPlus/',\n                    }}\n                    onChange={hanldeChage}/>\n            </div>\n        </div>\n    );\n}\n\nexport default App;\n"
  },
  {
    "path": "_examples-integrate/reactx/src/App.test.js",
    "content": "import { render, screen } from '@testing-library/react';\nimport App from './App';\n\ntest('renders learn react link', () => {\n  render(<App />);\n  const linkElement = screen.getByText(/learn react/i);\n  expect(linkElement).toBeInTheDocument();\n});\n"
  },
  {
    "path": "_examples-integrate/reactx/src/index.css",
    "content": "body {\n  margin: 0;\n  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',\n    'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',\n    sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',\n    monospace;\n}\n"
  },
  {
    "path": "_examples-integrate/reactx/src/index.js",
    "content": "import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nconst root = ReactDOM.createRoot(document.getElementById('root'));\nroot.render(\n  <React.StrictMode>\n    <App />\n  </React.StrictMode>\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"
  },
  {
    "path": "_examples-integrate/reactx/src/reportWebVitals.js",
    "content": "const reportWebVitals = onPerfEntry => {\n  if (onPerfEntry && onPerfEntry instanceof Function) {\n    import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n      getCLS(onPerfEntry);\n      getFID(onPerfEntry);\n      getFCP(onPerfEntry);\n      getLCP(onPerfEntry);\n      getTTFB(onPerfEntry);\n    });\n  }\n};\n\nexport default reportWebVitals;\n"
  },
  {
    "path": "_examples-integrate/reactx/src/setupTests.js",
    "content": "// jest-dom adds custom jest matchers for asserting on DOM nodes.\n// allows you to do things like:\n// expect(element).toHaveTextContent(/react/i)\n// learn more: https://github.com/testing-library/jest-dom\nimport '@testing-library/jest-dom';\n"
  },
  {
    "path": "_examples-integrate/vue2/.gitignore",
    "content": ".DS_Store\nnode_modules\n/dist\n\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "_examples-integrate/vue2/README.md",
    "content": "# vue2\n\n## Project setup\n```\nnpm install\n```\n\n### Compiles and hot-reloads for development\n```\nnpm run serve\n```\n\n### Compiles and minifies for production\n```\nnpm run build\n```\n\n### Lints and fixes files\n```\nnpm run lint\n```\n\n### Customize configuration\nSee [Configuration Reference](https://cli.vuejs.org/config/).\n"
  },
  {
    "path": "_examples-integrate/vue2/babel.config.js",
    "content": "module.exports = {\n  presets: [\n    '@vue/cli-plugin-babel/preset'\n  ]\n}\n"
  },
  {
    "path": "_examples-integrate/vue2/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"baseUrl\": \"./\",\n    \"moduleResolution\": \"node\",\n    \"paths\": {\n      \"@/*\": [\n        \"src/*\"\n      ]\n    },\n    \"lib\": [\n      \"esnext\",\n      \"dom\",\n      \"dom.iterable\",\n      \"scripthost\"\n    ]\n  }\n}\n"
  },
  {
    "path": "_examples-integrate/vue2/package.json",
    "content": "{\n  \"name\": \"vue2\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve\",\n    \"build\": \"vue-cli-service build\",\n    \"lint\": \"vue-cli-service lint\"\n  },\n  \"dependencies\": {\n    \"core-js\": \"^3.8.3\",\n    \"vue\": \"^2.6.14\",\n    \"vue-ueditor-wrap\": \"^2.5.6\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.16\",\n    \"@babel/eslint-parser\": \"^7.12.16\",\n    \"@vue/cli-plugin-babel\": \"~5.0.0\",\n    \"@vue/cli-plugin-eslint\": \"~5.0.0\",\n    \"@vue/cli-service\": \"~5.0.0\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-plugin-vue\": \"^8.0.3\",\n    \"vue-template-compiler\": \"^2.6.14\"\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"env\": {\n      \"node\": true\n    },\n    \"extends\": [\n      \"plugin:vue/essential\",\n      \"eslint:recommended\"\n    ],\n    \"parserOptions\": {\n      \"parser\": \"@babel/eslint-parser\"\n    },\n    \"rules\": {}\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not dead\"\n  ]\n}\n"
  },
  {
    "path": "_examples-integrate/vue2/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title><%= htmlWebpackPlugin.options.title %></title>\n  </head>\n  <body>\n    <noscript>\n      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <style type=\"text/css\">\n        * {\n            color: #838383;\n            margin: 0;\n            padding: 0\n        }\n\n        html, body {\n            font-size: 12px;\n            overflow: hidden;\n        }\n\n        .content {\n            padding: 5px 0 0 15px;\n        }\n\n        input {\n            margin-left: 4px;\n            box-sizing: border-box;\n            width: 210px;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\" value=\"\"/>\n</div>\n<script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n<script type=\"text/javascript\">\n    var anchorInput = $G('anchorName'),\n        node = editor.selection.getRange().getClosedNode();\n    if (node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))) {\n        anchorInput.value = node;\n    }\n    anchorInput.onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            editor.execCommand('anchor', anchorInput.value);\n            dialog.close();\n            domUtils.preventDefault(evt)\n        }\n    };\n    dialog.onok = function () {\n        editor.execCommand('anchor', anchorInput.value);\n        dialog.close();\n    };\n    $focus(anchorInput);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/attachment/attachment.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #fileList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li div.file-wrapper{cursor:pointer;position:absolute;display:block;width:111px;height:111px;border:1px solid #eee;background:url(./images/bg.png) repeat}#online li div span.file-title{display:block;padding:0 3px;margin:3px 0 0;font-size:12px;height:15px;color:#555;text-align:center;width:107px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css?32c6a90a\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"attachment.js?1598cea7\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/attachment/attachment.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});setTabFocus(\"upload\")}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"upload\":uploadFile=uploadFile||new UploadFile(\"queueList\");break;case\"online\":onlineFile=onlineFile||new OnlineFile(\"fileList\")}}}function initButtons(){dialog.onok=function(){for(var a,b=[],c=$G(\"tabhead\").children,d=0;d<c.length;d++)if(domUtils.hasClass(c[d],\"focus\")){a=c[d].getAttribute(\"data-content-id\");break}switch(a){case\"upload\":b=uploadFile.getInsertList();var e=uploadFile.getQueueCount();if(e)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,e)+\"</span>\"),!1;break;case\"online\":b=onlineFile.getInsertList()}editor.execCommand(\"insertfile\",b)}}function UploadFile(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineFile(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var uploadFile,onlineFile;window.onload=function(){initTabs(),initButtons()},UploadFile.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\" title=\"'+a.name+'\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&A.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"fileActionName\")),z=editor.getOpt(\"fileMaxSize\"),A=(editor.getOpt(\"fileAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"fileActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"fileFieldName\"),duplicate:!0,fileSingleSizeLimit:z,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){b.ext&&A.indexOf(b.ext.toLowerCase())!=-1&&b.size<=z&&(q++,r+=b.size),1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&A.indexOf(a.ext.toLowerCase())!=-1&&a.size<=z&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.fileList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"file\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},getInsertList:function(){var a,b,c,d=[],e=editor.getOpt(\"fileUrlPrefix\");for(a=0;a<this.fileList.length;a++)c=this.fileList[a],b=c.url,d.push({title:c.original||b.substr(b.lastIndexOf(\"/\")+1),url:e+b});return d}},OnlineFile.prototype={init:function(){this.initContainer(),this.initEvents(),this.initData()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"fileList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getFileData()}),domUtils.on(this.list,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"fileManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getFileData()},getFileData:function(){var _this=this;_this.listEnd||this.isLoadingData||(this.isLoadingData=!0,ajax.request(editor.getActionUrl(editor.getOpt(\"fileManagerActionName\")),{timeout:1e5,data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}}))},pushData:function(a){var b,c,d,e,f,g=this,h=editor.getOpt(\"fileManagerUrlPrefix\");for(b=0;b<a.length;b++)if(a[b]&&a[b].url){if(c=document.createElement(\"li\"),f=document.createElement(\"span\"),d=a[b].url.substr(a[b].url.lastIndexOf(\".\")+1),\"png|jpg|jpeg|gif|bmp\".indexOf(d)!=-1)e=document.createElement(\"img\"),domUtils.on(e,\"load\",function(a){return function(){g.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(e)),e.width=113,e.setAttribute(\"src\",h+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36));else{var i=document.createElement(\"i\"),j=document.createElement(\"span\");j.innerHTML=a[b].original||a[b].url.substr(a[b].url.lastIndexOf(\"/\")+1),e=document.createElement(\"div\"),e.appendChild(i),e.appendChild(j),domUtils.addClass(e,\"file-wrapper\"),domUtils.addClass(j,\"file-title\"),domUtils.addClass(i,\"file-type-\"+d),domUtils.addClass(i,\"file-preview\")}domUtils.addClass(f,\"icon\"),c.setAttribute(\"data-url\",h+a[b].url),a[b].original&&c.setAttribute(\"data-title\",a[b].original),c.appendChild(e),c.appendChild(f),this.list.insertBefore(c,this.clearFloat)}},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[];for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var d=b[a].getAttribute(\"data-url\"),e=b[a].getAttribute(\"data-title\")||d.substr(d.lastIndexOf(\"/\")+1);c.push({title:e,url:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/audio/audio.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#audioUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#audioSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#audioSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#audioType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#audioSearchBtn,#audioSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewaudio{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-audio-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#audioInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#audioFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#audioFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadaudioInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/audio/audio.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"audio.css?622512f6\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"audioTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"audio\" class=\"focus\" data-content-id=\"audio\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"audio\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"audioUrl\" class=\"url\"><var id=\"lang_audio_url\"></var></label></td>\n                        <td><input id=\"audioUrl\" type=\"text\"><a href=\"javascript:;\" id=\"audioSelect\"\n                                                                style=\"display:none;\">选择音频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链音频支持MP3格式\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"audioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"audioFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadaudioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- audio -->\n<script type=\"text/javascript\" src=\"audio.js?d76559eb\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/audio/audio.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});r.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),r.selectCallback&&($G(\"audioSelect\").style.display=\"inline-block\",domUtils.on($G(\"audioSelect\"),\"click\",function(a){r.selectCallback(editor,function(a){a&&($G(\"audioUrl\").value=a.path,k(a.path))})}))}function b(){g([\"audioFloat\",\"upload_alignment\"]),i($G(\"audioUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-audio\"==b.className,e=b.className.indexOf(\"edui-upload-audio\")!=-1;if(c||e){$G(\"audioUrl\").value=a=b.getAttribute(\"_url\");var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(q=!0)}k(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=f(\"tabHeads\",\"tabSrc\");switch(a){case\"audio\":return e();case\"upload\":return l()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"audioFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"audioUrl\").value;f(\"audioFloat\",\"name\");return!!a&&void editor.execCommand(\"insertaudio\",{url:a},q?\"upload\":null)}function f(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function g(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}h(b)}}function h(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function i(a){browser.ie?a.onpropertychange=function(){k(this.value)}:a.addEventListener(\"input\",function(){k(this.value)},!1)}function j(a,b){b=b||{};var c=[\"<audio\",b.id?' id=\"'+b.id+'\"':\"\",b.cls?' class=\"'+b.cls+'\"':\"\",\" controls >\",'<source src=\"'+a+'\" type=\"audio/mpeg\" />',\"</audio>\"];return c.join(\"\")}function k(a){a&&($G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><div style=\"position: absolute; inset: 0; background: #FFF; text-align: center; display: flex; justify-items: center; align-items: center;\"><div style=\"text-align:center;flex-grow:1;\">'+j(a)+\"</div></div>\")}function l(){var a=[],b=editor.getOpt(\"audioUrlPrefix\"),c=f(\"upload_alignment\",\"name\")||\"none\";for(var d in p){var e=p[d];a.push({url:b+e.url,align:c})}var g=o.getQueueCount();return g?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,g)+\"</span>\"),!1):void editor.execCommand(\"insertaudio\",a,\"upload\")}function m(){o=new n(\"queueList\")}function n(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var o,p=[],q=!1,r={};window.onload=function(){r=editor.getOpt(\"audioConfig\"),$focus($G(\"audioUrl\")),a(),b(),m()},n.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=q.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),q.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),q.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":q.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":q.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(q.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":q.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),q=k.find(\".progress\").hide(),r=0,s=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"audioActionName\")),A=editor.getOpt(\"audioMaxSize\"),B=(editor.getOpt(\"audioAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"audioActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"audioFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){r++,s+=b.size,1===r&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){r--,s-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(p.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>')):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/background/background.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:424px;margin:10px auto;zoom:1;position:relative}.tabbody{height:225px}.tabbody .panel{position:absolute;width:100%;height:100%;background:#fff;display:none}.tabbody .focus{display:block}body{font-size:12px;color:#888;overflow:hidden}input,label{vertical-align:middle}.clear{clear:both}.pl{padding-left:18px;padding-left:23px \\9}#imageList{width:420px;height:215px;margin-top:10px;overflow:hidden;overflow-y:auto}#imageList div{float:left;width:100px;height:95px;margin:5px 10px}#imageList img{cursor:pointer;border:2px solid #fff}.bgarea{margin:10px;padding:5px;height:84%;border:1px solid #A8A297}.content div{margin:10px 0 10px 5px}.content .iptradio{margin:0 5px 5px 0}.txt{width:280px}.wrapcolor{height:19px}div.color{float:left;margin:0}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA;margin:0;float:left}div.alignment,#custom{margin-left:23px;margin-left:28px \\9}#custom input{height:15px;min-height:15px;width:20px}#repeatType{width:100px}#imgManager{width:100%;height:225px}#imgManager #imageList{width:100%;overflow-x:hidden;overflow-y:auto}#imgManager ul{display:block;list-style:none;margin:0;padding:0}#imgManager li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:9px 0 0 19px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#imgManager li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#imgManager li img{cursor:pointer}#imgManager li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#imgManager li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#imgManager li.selected .icon{background-image:url(images/success.png);background-position:75px 75px}#imgManager li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css?982ee6c2\">\n</head>\n<body>\n<div id=\"bg_container\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"normal\" class=\"panel focus\">\n            <fieldset class=\"bgarea\">\n                <legend><var id=\"lang_background_set\"></var></legend>\n                <div class=\"content\">\n                    <div>\n                        <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\"\n                                      checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                        <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var\n                            id=\"lang_background_colored\"></var></label>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <div class=\"color\">\n                            <var id=\"lang_background_color\"></var>:\n                        </div>\n                        <div id=\"colorPicker\"></div>\n                        <div class=\"clear\"></div>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                    </div>\n                    <div id=\"alignment\" class=\"alignment\">\n                        <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                        <option value=\"center\"></option>\n                        <option value=\"repeat-x\"></option>\n                        <option value=\"repeat-y\"></option>\n                        <option value=\"repeat\"></option>\n                        <option value=\"self\"></option>\n                    </select>\n                    </div>\n                    <div id=\"custom\">\n                        <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\"\n                                                                           value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\"\n                                                                                                            size=\"1\"\n                                                                                                            id=\"y\"\n                                                                                                            maxlength=\"4\"\n                                                                                                            value=\"0\">px\n                    </div>\n                </div>\n            </fieldset>\n\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"background.js?e67eb657\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/background/background.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){for(var c=b.target||b.srcElement,d=0;d<a.length;d++)if(a[d]==c){a[d].className=\"focus\";var e=a[d].getAttribute(\"data-content-id\");$G(e).style.display=\"block\"}else a[d].className=\"\",$G(a[d].getAttribute(\"data-content-id\")).style.display=\"none\"})}function initColorSelector(){var a=editor.queryCommandValue(\"background\");if(a){var b=a[\"background-color\"],c=a[\"background-repeat\"]||\"repeat\",d=a[\"background-image\"]||\"\",e=a[\"background-position\"]||\"center center\",f=e.split(\" \"),g=parseInt(f[0])||0,h=parseInt(f[1])||0;\"no-repeat\"==c&&(g||h)&&(c=\"self\"),d=d.match(/url[\\s]*\\(([^\\)]*)\\)/),d=d?d[1]:\"\",updateFormState(\"colored\",b,d,c,g,h)}else updateFormState();var i=function(){updateFormState(),updateBackground()};domUtils.on($G(\"nocolorRadio\"),\"click\",updateBackground),domUtils.on($G(\"coloredRadio\"),\"click\",i),domUtils.on($G(\"url\"),\"keyup\",function(){$G(\"url\").value&&\"none\"==$G(\"alignment\").style.display&&utils.each($G(\"repeatType\").children,function(a){a.selected=\"repeat\"==a.getAttribute(\"value\")&&\"selected\"}),i()}),domUtils.on($G(\"repeatType\"),\"change\",i),domUtils.on($G(\"x\"),\"keyup\",updateBackground),domUtils.on($G(\"y\"),\"keyup\",updateBackground),initColorPicker()}function initColorPicker(){var a=editor,b=$G(\"colorPicker\"),c=new UE.ui.Popup({content:new UE.ui.ColorPicker({noColorText:a.getLang(\"clearColor\"),editor:a,onpickcolor:function(a,b){updateFormState(\"colored\",b),updateBackground(),UE.ui.Popup.postHide()},onpicknocolor:function(a,b){updateFormState(\"colored\",\"transparent\"),updateBackground(),UE.ui.Popup.postHide()}}),editor:a,onhide:function(){}});domUtils.on(b,\"click\",function(){c.showAnchor(this)}),domUtils.on(document,\"mousedown\",function(a){var b=a.target||a.srcElement;UE.ui.Popup.postHide(b)}),domUtils.on(window,\"scroll\",function(){UE.ui.Popup.postHide()})}function updateFormState(a,b,c,d,e,f){var g=$G(\"nocolorRadio\"),h=$G(\"coloredRadio\");if(a&&(g.checked=\"colored\"!=a&&\"checked\",h.checked=\"colored\"==a&&\"checked\"),b&&domUtils.setStyle($G(\"colorPicker\"),\"background-color\",b),c&&/^\\//.test(c)){var i=document.createElement(\"a\");i.href=c,browser.ie&&(i.href=i.href),c=browser.ie?i.href:i.protocol+\"//\"+i.host+i.pathname+i.search+i.hash}(c||\"\"===c)&&($G(\"url\").value=c),d&&utils.each($G(\"repeatType\").children,function(a){a.selected=d==a.getAttribute(\"value\")&&\"selected\"}),(e||f)&&($G(\"x\").value=parseInt(e)||0,$G(\"y\").value=parseInt(f)||0),$G(\"alignment\").style.display=h.checked&&$G(\"url\").value?\"\":\"none\",$G(\"custom\").style.display=h.checked&&$G(\"url\").value&&\"self\"==$G(\"repeatType\").value?\"\":\"none\"}function updateBackground(){if($G(\"coloredRadio\").checked){var a=domUtils.getStyle($G(\"colorPicker\"),\"background-color\"),b=$G(\"url\").value,c=$G(\"repeatType\").value,d={\"background-repeat\":\"no-repeat\",\"background-position\":\"center center\"};a&&(d[\"background-color\"]=a),b&&(d[\"background-image\"]=\"url(\"+b+\")\"),\"self\"==c?d[\"background-position\"]=$G(\"x\").value+\"px \"+$G(\"y\").value+\"px\":\"repeat-x\"!=c&&\"repeat-y\"!=c&&\"repeat\"!=c||(d[\"background-repeat\"]=c),editor.execCommand(\"background\",d)}else editor.execCommand(\"background\",null)}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var onlineImage,backupStyle=editor.queryCommandValue(\"background\");window.onload=function(){initTabs(),initColorSelector()},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.id=\"imageListUl\",this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode,d=$G(\"imageListUl\").childNodes;if(\"li\"==c.tagName.toLowerCase()){updateFormState(\"nocolor\",null,\"\");for(var e,f=0;e=d[f++];)e!=c||domUtils.hasClass(e,\"selected\")?domUtils.removeClasses(e,\"selected\"):(domUtils.addClass(e,\"selected\"),updateFormState(\"colored\",null,c.firstChild.getAttribute(\"_src\"),\"repeat\"));updateBackground()}})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,floatStyle:d})}return c}},dialog.onok=function(){updateBackground(),editor.fireEvent(\"saveScene\")},dialog.oncancel=function(){editor.execCommand(\"background\",backupStyle)}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/contentimport/contentimport.html",
    "content": "<!DOCTYPE html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7;\n        }\n\n        .wrapper .file-upload {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .file-upload .file-tip {\n            color: #999;\n            font-size: 12px;\n            padding-left: 10px;\n            flex-grow: 1;\n        }\n\n        .wrapper .file-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .file-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .file-manual .body {\n        }\n\n        .wrapper .file-manual .body li {\n            list-style: disc;\n            margin-left: 20px;\n        }\n\n        .wrapper .upload-button {\n            width: 100px;\n            height: 30px;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n            border-radius: 4px;\n            text-align: center;\n            line-height: 28px;\n            cursor: pointer;\n            position: relative;\n            flex-shrink: 0;\n            margin-right: 5px;\n        }\n\n        .wrapper .upload-button .text {\n            display: inline-block;\n            vertical-align: middle;\n        }\n\n        .wrapper .upload-button input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n            height: 100%;\n            width: 100%;\n        }\n\n        .wrapper .file-result {\n            border: 1px solid #333;\n            padding: 10px;\n            border-radius: 5px;\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #FFF;\n            bottom: 10px;\n            overflow: auto;\n            display: none;\n        }\n        .wrapper .file-input{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #EEE;\n            bottom: 10px;\n            border-radius: 5px;\n            display:none;\n        }\n        .wrapper .file-input textarea{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            bottom: 10px;\n            border: none;\n            resize: none;\n            border-radius: 5px;\n            padding: 5px;\n            outline: none;\n            top: 30px;\n        }\n        .wrapper .file-input .tool{\n            text-align: right;\n            padding: 5px 10px;\n        }\n        .wrapper .file-input .tool a{\n            display: inline-block;\n            text-decoration: none;\n            color: #333;\n            background: #FFF;\n            padding: 0 10px;\n            line-height: 20px;\n            border-radius: 3px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"file-upload\">\n        <div class=\"upload-button\">\n            <div class=\"text\">选择本地文件</div>\n            <input type=\"file\" id=\"contentImport\"/>\n        </div>\n        <div class=\"upload-button\">\n            <div class=\"text\" onclick=\"$('.file-input').show();\">粘贴Markdown</div>\n        </div>\n        <div class=\"file-tip\"></div>\n    </div>\n    <div class=\"file-manual\">\n        <div class=\"title\">\n            支持文档格式\n        </div>\n        <div class=\"body\">\n            <ul>\n                <li><b>Word</b>：docx</li>\n                <li><b>Markdown</b>：md</li>\n            </ul>\n        </div>\n    </div>\n    <div class=\"file-result\"></div>\n    <div class=\"file-input\">\n        <textarea id=\"fileInputContent\"></textarea>\n        <div class=\"tool\">\n            <a href=\"javascript:;\" id=\"fileInputConfirm\">\n                确定\n            </a>\n            <a href=\"javascript:;\" onclick=\"$(this).closest('.file-input').hide();\">\n                关闭\n            </a>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"mammoth.browser.min.js?109831e5\"></script>\n<script src=\"showdown.min.js?a1c1e879\"></script>\n<script type=\"text/javascript\" src=\"contentimport.js?100d2e1a\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        contentImport.init(options, callbacks);\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/contentimport/contentimport.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction processWord(a){$(\".file-tip\").html(\"正在转换Word文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){mammoth.convertToHtml({arrayBuffer:a.target.result}).then(function(a){$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=a.value,$(\".file-result\").html(a.value).show()},function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)})},b.onerror=function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)},b.readAsArrayBuffer(a)}function processMarkdown(a){var b=new showdown.Converter,c=b.makeHtml(a);$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=c,$(\".file-result\").html(c).show()}function processMarkdownFile(a){$(\".file-tip\").html(\"正在转换Markdown文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){processMarkdown(a.target.result)},b.onerror=function(a){$(\".file-tip\").html(\"Markdown文件转换失败:\"+a)},b.readAsText(a,\"UTF-8\")}function addUploadButtonListener(){g(\"contentImport\").addEventListener(\"change\",function(){const a=this.files[0],b=a.name,c=b.substring(b.lastIndexOf(\".\")+1).toLowerCase();switch(c){case\"docx\":case\"doc\":processWord(a);break;case\"md\":processMarkdownFile(a);break;default:$(\".file-tip\").html(\"不支持的文件格式:\"+c)}}),g(\"fileInputConfirm\").addEventListener(\"click\",function(){processMarkdown(g(\"fileInputContent\").value),$(\".file-input\").hide()})}function addOkListener(){dialog.onok=function(){return contentImport.data.result?(editor.fireEvent(\"saveScene\"),editor.execCommand(\"inserthtml\",contentImport.data.result),void editor.fireEvent(\"saveScene\")):(alert(\"请先上传文件识别内容\"),!1)},dialog.oncancel=function(){}}var contentImport={},g=$G;contentImport.data={result:null},contentImport.init=function(a,b){addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/emotion/emotion.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.jd img{background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.pp img{background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:25px;height:25px;display:block}.ldw img{background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.tsj img{background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.cat img{background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.bb img{background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.youa img{background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.smileytable td{height:37px}#tabPanel{margin-left:5px;overflow:hidden}#tabContent{float:left;background:#FFF}#tabContent div{display:none;width:480px;overflow:hidden}#tabIconReview.show{left:17px;display:block}.menuFocus{background:#ACCD3C}.menuDefault{background:#FFF}#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px}img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFF;background-position:center;background-repeat:no-repeat}.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width:95%}.tabbody table{width:100%}.tabbody td{border:1px solid #BAC498}.tabbody td span{display:block;zoom:1;padding:0 4px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css?f71063c6\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js?cb3216b7\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum: 7, //切换面板数量\n        SmilmgName: {\n            tab0: ['j_00', 84],\n            tab1: ['t_00', 40],\n            tab2: ['w_00', 52],\n            tab3: ['B_00', 63],\n            tab4: ['C_00', 20],\n            tab5: ['i_f', 50],\n            tab6: ['y_00', 40]\n        }, //图片前缀名\n        imageFolders: {\n            tab0: 'jx2/',\n            tab1: 'tsj/',\n            tab2: 'ldw/',\n            tab3: 'bobo/',\n            tab4: 'babycat/',\n            tab5: 'face/',\n            tab6: 'youa/'\n        }, //图片对应文件夹路径\n        imageCss: {tab0: 'jd', tab1: 'tsj', tab2: 'ldw', tab3: 'bb', tab4: 'cat', tab5: 'pp', tab6: 'youa'}, //图片css类名\n        imageCssOffset: {tab0: 35, tab1: 35, tab2: 35, tab3: 35, tab4: 35, tab5: 25, tab6: 35}, //图片偏移\n        SmileyInfor: {\n            tab0: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2: ['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3: ['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4: ['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5: ['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6: ['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/emotion/emotion.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction initImgName(){for(var a in emotion.SmilmgName){var b=emotion.SmilmgName[a],c=emotion.SmileyBox[a],d=\"\";if(c.length)return;for(var e=1;e<=b[1];e++)d=b[0],e<10&&(d+=\"0\"),d=d+e+\".gif\",c.push(d)}}function initEvtHandler(a){for(var b=$G(a),c=0,d=0;c<b.childNodes.length;c++){var e=b.childNodes[c];1==e.nodeType&&(domUtils.on(e,\"click\",function(a){return function(){switchTab(a)}}(d)),d++)}switchTab(0),$G(\"tabIconReview\").style.display=\"none\"}function InsertSmiley(a,b){var c={src:editor.options.emotionLocalization?editor.options.UEDITOR_HOME_URL+\"dialogs/emotion/\"+a:a};c._src=c.src,editor.execCommand(\"insertimage\",c),b.ctrlKey||dialog.popup.hide()}function switchTab(a){autoHeight(a),0==emotion.tabExist[a]&&(emotion.tabExist[a]=1,createTab(\"tab\"+a));for(var b=$G(\"tabHeads\").getElementsByTagName(\"span\"),c=$G(\"tabBodys\").getElementsByTagName(\"div\"),d=0,e=b.length;d<e;d++)b[d].className=\"\",c[d].style.display=\"none\";b[a].className=\"focus\",c[a].style.display=\"block\"}function autoHeight(a){var b=dialog.getDom(\"iframe\"),c=b.parentNode.parentNode;switch(a){case 0:b.style.height=\"380px\",c.style.height=\"392px\";break;case 1:b.style.height=\"220px\",c.style.height=\"232px\";break;case 2:b.style.height=\"260px\",c.style.height=\"272px\";break;case 3:b.style.height=\"300px\",c.style.height=\"312px\";break;case 4:b.style.height=\"140px\",c.style.height=\"152px\";break;case 5:b.style.height=\"260px\",c.style.height=\"272px\";break;case 6:b.style.height=\"230px\",c.style.height=\"242px\"}}function createTab(a){for(var b,c,d,e,f,g,h=\"?v=1.1\",i=$G(a),j=emotion.SmileyPath+emotion.imageFolders[a],k=5.5,l=iHeight=35,m=3,n=emotion.imageCss[a],o=emotion.imageCssOffset[a],p=['<table class=\"smileytable\">'],q=0,r=emotion.SmileyBox[a].length,s=11;q<r;){p.push(\"<tr>\");for(var t=0;t<s;t++,q++)b=emotion.SmileyBox[a][q],b?(c=j+b+h,d=j+b,e=t<k?0:1,f=o*q*-1-1,g=emotion.SmileyInfor[a][q],p.push('<td  class=\"'+n+'\"   border=\"1\" width=\"'+m+'%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\''+d.replace(/'/g,\"\\\\'\")+\"',event)\\\" onmouseover=\\\"over(this,'\"+c+\"','\"+e+'\\')\" onmouseout=\"out(this)\">'),p.push(\"<span>\"),p.push('<img  style=\"background-position:left '+f+'px;\" title=\"'+g+'\" src=\"'+emotion.SmileyPath+(editor.options.emotionLocalization?'0.gif\" width=\"':'default/0.gif\" width=\"')+l+'\" height=\"'+iHeight+'\"></img>'),p.push(\"</span>\")):p.push('<td width=\"'+m+'%\"   bgcolor=\"#FFFFFF\">'),p.push(\"</td>\");p.push(\"</tr>\")}p.push(\"</table>\"),p=p.join(\"\"),i.innerHTML=p}function over(a,b,c){a.style.backgroundColor=\"#ACCD3C\",$G(\"faceReview\").style.backgroundImage=\"url(\"+b+\")\",1==c&&($G(\"tabIconReview\").className=\"show\"),$G(\"tabIconReview\").style.display=\"block\"}function out(a){a.style.backgroundColor=\"transparent\";var b=$G(\"tabIconReview\");b.className=\"\",b.style.display=\"none\"}function createTabList(a){for(var b={},c=0;c<a;c++)b[\"tab\"+c]=[];return b}function createArr(a){for(var b=[],c=0;c<a;c++)b[c]=0;return b}window.onload=function(){editor.setOpt({emotionLocalization:!1}),emotion.SmileyPath=editor.options.emotionLocalization===!0?\"images/\":\"http://img.baidu.com/hi/\",emotion.SmileyBox=createTabList(emotion.tabNum),emotion.tabExist=createArr(emotion.tabNum),initImgName(),initEvtHandler(\"tabHeads\")};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/formula/formula.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            box-sizing: border-box;\n            width: 800px;\n            height: 390px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .editor-wrap {\n            display: flex;\n            margin: 10px;\n        }\n\n        .editor-wrap #editor {\n            width: 0;\n            flex-grow: 1;\n            border: 1px solid #CCC;\n            border-radius: 3px;\n            padding: 5px;\n            height: 100px;\n            outline: none;\n        }\n\n        .input-tip {\n            margin: 10px;\n        }\n\n        .input-tip a {\n            color: #0f0d0d;\n        }\n\n        .editor-preview {\n            background: #FFF;\n            border-radius: 3px;\n            border: 1px solid #EEE;\n            display: none;\n            margin: 10px;\n        }\n\n        .editor-preview .title {\n            padding: 5px;\n        }\n\n        .editor-preview .body {\n            padding: 5px 5px 15px 5px;\n            text-align: center;\n        }\n\n        .editor-preview .body .image {\n            max-width: 100%;\n            max-height: 100px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n\n    <div id=\"modeLive\" style=\"display:none;\">\n        <iframe id=\"liveEditor\"\n                frameborder=\"0\"\n                style=\"width:800px;height:390px;border: 0;outline: none;\"\n        ></iframe>\n    </div>\n\n    <div id=\"modePlain\" style=\"display:none;\">\n        <div class=\"editor-wrap\">\n            <textarea id=\"editor\"></textarea>\n        </div>\n        <div class=\"input-tip\">\n            基于 latex 语法，<a href=\"javascript:;\" id=\"inputDemo\">点击输入示例</a>。\n        </div>\n        <div class=\"editor-preview\" id=\"preview\">\n            <div class=\"title\">预览</div>\n            <div class=\"body\">\n                <img class=\"image\" id=\"previewImage\"/>\n            </div>\n        </div>\n    </div>\n\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"formula.js?3e957a67\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        Formula.init();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/formula/formula.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction preg_quote(a,b){return(a+\"\").replace(new RegExp(\"[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\\"+(b||\"\")+\"-]\",\"g\"),\"\\\\$&\")}function loadScript(a,b){var c;c=document.createElement(\"script\"),c.src=a,c.onload=function(){b&&b({isNew:!0})},document.getElementsByTagName(\"head\")[0].appendChild(c)}var Formula={mode:\"plain\",latexeasy:null,init:function(){Formula.initMode(),Formula.initEvent(),Formula.initSubmit()},renderPlain:function(){var a=$(\"#preview\"),b=$(\"#editor\").val();if(!b)return void a.hide();b=encodeURIComponent(b);var c=editor.getOpt(\"formulaConfig\"),d=c.imageUrlTemplate.replace(/\\{\\}/,b);$(\"#previewImage\").attr(\"src\",d),a.show()},setValuePlain:function(a){$(\"#editor\").val(a),Formula.renderPlain()},setValueLive:function(a){return Formula.latexeasy?void Formula.latexeasy.call(\"set.latex\",{latex:a}):void setTimeout(function(){Formula.setValueLive(a)},100)},initMode:function(){var a=editor.getOpt(\"formulaConfig\");\"live\"===a.editorMode?($(\"#liveEditor\").attr(\"src\",a.editorLiveServer+\"/editor\"),$(\"#modeLive\").show(),Formula.mode=\"live\"):($(\"#modePlain\").show(),Formula.mode=\"plain\");var b=editor.selection.getRange().getClosedNode();if(b&&null!==b.getAttribute(\"data-formula-image\")){var c=b.getAttribute(\"data-formula-image\");c&&Formula.setValue(decodeURIComponent(c))}},setValue:function(a){switch(Formula.mode){case\"plain\":Formula.setValuePlain(a);break;case\"live\":Formula.setValueLive(a)}},getValue:function(a){switch(Formula.mode){case\"plain\":a($.trim($(\"#editor\").val()));break;case\"live\":Formula.latexeasy.call(\"get.latex\",{},function(b){a(b.latex)})}},initEvent:function(){var a,b=null;switch(Formula.mode){case\"plain\":$(\"#editor\").on(\"change keypress\",function(){b&&clearTimeout(b),b=setTimeout(function(){Formula.renderPlain()},1e3)}),$(\"#inputDemo\").on(\"click\",function(){$(\"#editor\").val(\"f(a) = \\\\frac{1}{2\\\\pi i} \\\\oint\\\\frac{f(z)}{z-a}dz\"),Formula.renderPlain()});break;case\"live\":var c=editor.getOpt(\"formulaConfig\");loadScript(c.editorLiveServer+\"/vendor/LatexEasyEditor/editor/sdk.js\",function(){a=new window.LatexEasy(document.getElementById(\"liveEditor\")),a.on(\"ready\",function(){Formula.latexeasy=a}),a.init()})}},initSubmit:function(){dialog.onclose=function(a,b){return!b||(Formula.getValue(function(a){editor.execCommand(\"formula\",a),editor.fireEvent(\"saveScene\"),dialog.close(!1)}),!1)}}};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/help/help.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:370px;margin:10px auto;zoom:1}.tabbody{height:360px}.tabbody .panel{width:100%;height:360px;position:absolute;background:#fff}.tabbody .panel h1{font-size:26px;margin:5px 0 0 5px}.tabbody .panel p{font-size:12px;margin:5px 0 0 5px}.tabbody table{width:90%;line-height:20px;margin:5px 0 0 5px}.tabbody table thead{font-weight:700;line-height:25px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css?94b325b2\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor Plus</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js?cf43351e\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/help/help.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");i.onclick=function(){this.style.zoom=1},j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}switchTab(\"helptab\"),document.getElementById(\"version\").innerHTML=parent.UE.version;"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/image/image.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.alignBar{float:right;margin-top:5px;position:relative}.alignBar .algnLabel{float:left;height:20px;line-height:20px}.alignBar #alignIcon{zoom:1;_display:inline;display:inline-block;position:relative}.alignBar #alignIcon span{float:left;cursor:pointer;display:block;width:19px;height:17px;margin-right:3px;margin-left:3px;background-image:url(./images/alignicon.jpg)}.alignBar #alignIcon .none-align{background-position:0 -18px}.alignBar #alignIcon .left-align{background-position:-20px -18px}.alignBar #alignIcon .right-align{background-position:-40px -18px}.alignBar #alignIcon .center-align{background-position:-60px -18px}.alignBar #alignIcon .none-align.focus{background-position:0 0}.alignBar #alignIcon .left-align.focus{background-position:-20px 0}.alignBar #alignIcon .right-align.focus{background-position:-40px 0}.alignBar #alignIcon .center-align.focus{background-position:-60px 0}#remote{z-index:200}#remote .top{width:100%;margin-top:25px}#remote .left{display:block;float:left;width:300px;height:10px}#remote .right{display:block;float:right;width:300px;height:10px}#remote .row{margin-left:20px;clear:both;height:40px}#remote .row label{text-align:center;width:50px;zoom:1;_display:inline;display:inline-block;vertical-align:middle}#remote .row label.algnLabel{float:left}#remote input.text{width:150px;padding:3px 6px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}#remote input.text:focus{outline:0}#remote #url{width:400px;margin-bottom:2px}#remote #imageSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:top}#remote #width,#remote #height{width:30px;margin-left:2px;margin-right:2px;text-align:center}#remote #border,#remote #vhSpace,#remote #title{width:180px;margin-right:5px}#remote #lock{display:inline-block;vertical-align:middle}#remote #lockicon{zoom:1;_display:inline;display:inline-block;width:20px;height:20px;background:url(../../themes/default/images/lock.gif) -13px -13px no-repeat;vertical-align:middle}#remote #preview{clear:both;width:260px;height:240px;z-index:9999;margin-top:10px;background-color:#eee;overflow:hidden}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both;position:relative}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background:url(./images/success.gif) no-repeat right bottom \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #imageList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/image/image.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css?4cbad164\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"remote\"><var id=\"lang_tab_remote\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n                        <span id=\"noneAlign\" class=\"none-align focus\" data-align=\"none\"></span>\n                        <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n                        <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n                        <span id=\"centerAlign\" class=\"center-align\" data-align=\"center\"></span>\n                    </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\"/>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n            <div class=\"top\">\n                <div class=\"row\">\n                    <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n                    <span><input class=\"text\" id=\"url\" type=\"text\"/></span>\n                    <a href=\"javascript:;\" id=\"imageSelect\" style=\"display:none;\">选择图片</a>\n                </div>\n            </div>\n            <div class=\"left\">\n                <div class=\"row\">\n                    <label><var id=\"lang_input_size\"></var></label>\n                    <span><var id=\"lang_input_width\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\"\n                                                                              id=\"width\"/>px </span>\n                    <span><var id=\"lang_input_height\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"height\"/>px </span>\n                    <span><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\"><span id=\"lockicon\"></span></span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_border\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"border\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_vhspace\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"vhSpace\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_title\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"title\"/></span>\n                </div>\n            </div>\n            <div class=\"right\">\n                <div id=\"preview\"></div>\n            </div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n            <div class=\"searchBar\">\n                <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\"/>\n                <select id=\"searchType\" class=\"searchType\">\n                    <option value=\"&s=4&z=0\"></option>\n                    <option value=\"&s=1&z=19\"></option>\n                    <option value=\"&s=2&z=0\"></option>\n                    <option value=\"&s=3&z=0\"></option>\n                </select>\n                <input id=\"searchReset\" type=\"button\"/>\n                <input id=\"searchBtn\" type=\"button\"/>\n            </div>\n            <div id=\"searchList\" class=\"searchList\">\n                <ul id=\"searchListUl\"></ul>\n            </div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"image.js?2137df65\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/image/image.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});editorOpt.disableUpload||($G(\"tabhead\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),editorOpt.disableOnline||($G(\"tabhead\").querySelector('[data-content-id=\"online\"]').style.display=\"inline-block\"),editorOpt.selectCallback&&($G(\"imageSelect\").style.display=\"inline-block\",domUtils.on($G(\"imageSelect\"),\"click\",function(a){editorOpt.selectCallback(editor,function(a){if(a){$G(\"url\").value=a.path,$G(\"title\").value=a.name;var b=new Image;b.onload=function(){$G(\"width\").value=b.width,$G(\"height\").value=b.height,remoteImage.setPreview()},b.onerror=function(){remoteImage.setPreview()},b.src=a.path}})}));var c=editor.selection.getRange().getClosedNode();setTabFocus((c&&c.tagName&&\"img\"==c.tagName.toLowerCase(),\"remote\"))}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"remote\":remoteImage=remoteImage||new RemoteImage;break;case\"upload\":setAlign(editor.getOpt(\"imageInsertAlign\")),uploadImage=uploadImage||new UploadImage(\"queueList\");break;case\"online\":setAlign(editor.getOpt(\"imageManagerInsertAlign\")),onlineImage=onlineImage||new OnlineImage(\"imageList\"),onlineImage.reset()}}}function initButtons(){dialog.onok=function(){for(var a,b=!1,c=[],d=$G(\"tabhead\").children,e=0;e<d.length;e++)if(domUtils.hasClass(d[e],\"focus\")){a=d[e].getAttribute(\"data-content-id\");break}switch(a){case\"remote\":c=remoteImage.getInsertList();break;case\"upload\":c=uploadImage.getInsertList();var f=uploadImage.getQueueCount();if(f)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,f)+\"</span>\"),!1;break;case\"online\":c=onlineImage.getInsertList()}c&&(editor.execCommand(\"insertimage\",c),b&&editor.fireEvent(\"catchRemoteImage\"))}}function initAlign(){domUtils.on($G(\"alignIcon\"),\"click\",function(a){var b=a.target||a.srcElement;b.className&&b.className.indexOf(\"-align\")!=-1&&setAlign(b.getAttribute(\"data-align\"))})}function setAlign(a){a=a||\"none\";var b=$G(\"alignIcon\").children;for(i=0;i<b.length;i++)b[i].getAttribute(\"data-align\")==a?(domUtils.addClass(b[i],\"focus\"),$G(\"align\").value=b[i].getAttribute(\"data-align\")):domUtils.removeClasses(b[i],\"focus\")}function getAlign(){var a=$G(\"align\").value||\"none\";return\"none\"==a?\"\":a}function RemoteImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}function UploadImage(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var remoteImage,uploadImage,onlineImage,editorOpt={};window.onload=function(){editorOpt=editor.getOpt(\"imageConfig\"),initTabs(),initAlign(),initButtons()},RemoteImage.prototype={init:function(){this.initContainer(),this.initEvents()},initContainer:function(){this.dom={url:$G(\"url\"),width:$G(\"width\"),height:$G(\"height\"),border:$G(\"border\"),vhSpace:$G(\"vhSpace\"),title:$G(\"title\"),align:$G(\"align\")};var a=editor.selection.getRange().getClosedNode();a&&this.setImage(a)},initEvents:function(){function a(){b.setPreview()}var b=this,c=$G(\"lock\");domUtils.on($G(\"url\"),\"keyup\",a),domUtils.on($G(\"border\"),\"keyup\",a),domUtils.on($G(\"title\"),\"keyup\",a),domUtils.on($G(\"width\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"height\").value=Math.round(this.value/d)}else b.updateLocker();a()}),domUtils.on($G(\"height\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"width\").value=Math.round(this.value*d)}else b.updateLocker();a()}),domUtils.on($G(\"lock\"),\"change\",function(){var a=parseInt($G(\"width\").value)/parseInt($G(\"height\").value);c.setAttribute(\"data-proportion\",a)})},updateLocker:function(){var a=$G(\"width\").value,b=$G(\"height\").value,c=$G(\"lock\");a&&b&&a==parseInt(a)&&b==parseInt(b)?(c.disabled=!1,c.title=\"\"):(c.checked=!1,c.disabled=\"disabled\",c.title=lang.remoteLockError)},setImage:function(a){if(a.tagName&&(\"img\"==a.tagName.toLowerCase()||a.getAttribute(\"src\"))&&a.src){var b=a.getAttribute(\"data-word-image\"),c=b?b.replace(\"&amp;\",\"&\"):a.getAttribute(\"_src\")||a.getAttribute(\"src\",2).replace(\"&amp;\",\"&\"),d=editor.queryCommandValue(\"imageFloat\");c!==$G(\"url\").value&&($G(\"url\").value=c),c&&($G(\"width\").value=a.width||\"\",$G(\"height\").value=a.height||\"\",$G(\"border\").value=a.getAttribute(\"border\")||\"0\",$G(\"vhSpace\").value=a.getAttribute(\"vspace\")||\"0\",$G(\"title\").value=a.title||a.alt||\"\",setAlign(d),this.setPreview(),this.updateLocker())}},getData:function(){var a={};for(var b in this.dom)a[b]=this.dom[b].value;return a},setPreview:function(){var a,b,c=$G(\"url\").value,d=$G(\"width\").value,e=$G(\"height\").value,f=$G(\"border\").value,g=$G(\"title\").value,h=$G(\"preview\");a=d&&e?Math.min(d,h.offsetWidth):h.offsetWidth,a=a+2*f>h.offsetWidth?a:h.offsetWidth-2*f,b=d&&e?a*e/d:\"\",c&&(h.innerHTML='<img src=\"'+c+'\" width=\"'+a+'\" height=\"'+b+'\" border=\"'+f+'px solid #000\" title=\"'+g+'\" />')},getInsertList:function(){var a=this.getData();if(a.url){var b={src:a.url,_src:a.url};return b._propertyDelete=[],b.style=[],a.width?(b.width=a.width,b.style.push(\"width:\"+a.width+\"px\")):b._propertyDelete.push(\"width\"),a.height?(b.height=a.height,b.style.push(\"height:\"+a.height+\"px\")):b._propertyDelete.push(\"height\"),a.border?b.border=a.border:b._propertyDelete.push(\"border\"),a.align?b.floatStyle=a.align:b._propertyDelete.push(\"floatStyle\"),a.vhSpace?b.vspace=a.vhSpace:b._propertyDelete.push(\"vspace\"),a.title?b.alt=a.title:b._propertyDelete.push(\"alt\"),b.style.length>0?b.style=b.style.join(\";\"):b._propertyDelete.push(\"style\"),[b]}return[]}},UploadImage.prototype={init:function(){this.imageList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&z.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!==v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"imageActionName\")),z=(editor.getOpt(\"imageAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\"),A=editor.getOpt(\"imageMaxSize\"),B=editor.getOpt(\"imageCompressBorder\");return WebUploader.Uploader.support()?editor.getOpt(\"imageActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},accept:{title:\"Images\",extensions:z,mimeTypes:\"image/*\"},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"imageFieldName\"),duplicate:!0,fileSingleSizeLimit:A,threads:1,headers:editor.getOpt(\"serverHeaders\")||{},compress:!!editor.getOpt(\"imageCompressEnable\")&&{enable:editor.getOpt(\"imageCompressEnable\"),maxWidthOrHeight:B,maxSize:A}}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&z.indexOf(a.ext.toLowerCase())!=-1&&a.size<=A&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c[\"X-Requested-With\"]=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.imageList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"image\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},destroy:function(){this.$wrap.remove()},getInsertList:function(){var a,b,c=[],d=getAlign(),e=editor.getOpt(\"imageUrlPrefix\");for(a=0;a<this.imageList.length;a++)b=this.imageList[a],c.push({src:e+b.url,_src:e+b.url,alt:b.original,floatStyle:d});return c}},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",headers:editor.options.serverHeaders||{},data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"===json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,alt:f.substr(f.lastIndexOf(\"/\")+1),floatStyle:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" href=\"../../themes/default/dialog.css?c473027a\">\n    <style type=\"text/css\">\n        .warp {\n            width: 320px;\n            height: 200px;\n            margin-left: 5px;\n            padding: 20px 0 0 15px;\n            position: relative;\n        }\n\n        #url {\n            width: 290px;\n            margin-bottom: 2px;\n            margin-left: -6px;\n            margin-left: -2px \\9;\n            *margin-left: 0;\n            _margin-left: 0;\n        }\n\n        .format span {\n            display: inline-block;\n            width: 58px;\n            text-align: left;\n            zoom: 1;\n        }\n\n        table td {\n            padding: 5px 0;\n        }\n\n        #align {\n            width: 65px;\n            height: 23px;\n            line-height: 22px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n    <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td colspan=\"2\" class=\"format\">\n                <span><var id=\"lang_input_address\"></var></span>\n                <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\"\n                                                                                                type=\"text\" id=\"width\"/>\n                px\n            </td>\n\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\"\n                                                                                                 type=\"text\"\n                                                                                                 id=\"height\"/> px\n            </td>\n        </tr>\n        <tr>\n            <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/></td>\n            <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/></td>\n        </tr>\n\n        <tr>\n            <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                <select id=\"align\">\n                    <option value=\"\"></option>\n                    <option value=\"left\"></option>\n                    <option value=\"right\"></option>\n                </select>\n            </td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if (iframe) {\n        $G(\"url\").value = iframe.getAttribute(\"src\") || \"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\") || iframe.style.width.replace(\"px\", \"\") || \"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\", \"\") || \"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n\n    function queding() {\n        var url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig, \"\"),\n            width = $G(\"width\").value,\n            height = $G(\"height\").value,\n            scroll = $G(\"scroll\"),\n            frameborder = $G(\"frameborder\"),\n            float = $G(\"align\").value,\n            newIframe = editor.document.createElement(\"iframe\"),\n            div;\n        if (!url) {\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\", /http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\" + url);\n        /^[1-9]+[.]?\\d*$/g.test(width) ? newIframe.setAttribute(\"width\", width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test(height) ? newIframe.setAttribute(\"height\", height) : \"\";\n        scroll.checked ? newIframe.setAttribute(\"scrolling\", \"yes\") : newIframe.setAttribute(\"scrolling\", \"no\");\n        frameborder.checked ? newIframe.setAttribute(\"frameborder\", \"1\", 0) : newIframe.setAttribute(\"frameborder\", \"0\", 0);\n        float ? newIframe.setAttribute(\"align\", float) : newIframe.setAttribute(\"align\", \"\");\n        if (iframe) {\n            iframe.parentNode.insertBefore(newIframe, iframe);\n            domUtils.remove(iframe);\n        } else {\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\", div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function (evt) {\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            queding();\n        }\n    };\n    $focus($G(\"url\"));\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/internal.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a=window.parent;dialog=a.$EDITORUI[window.frameElement.id.replace(/_iframe$/,\"\")],editor=dialog.editor,UE=a.UE,domUtils=UE.dom.domUtils,utils=UE.utils,browser=UE.browser,ajax=UE.ajax,$G=function(a){return document.getElementById(a)},$focus=function(a){setTimeout(function(){if(browser.ie){var b=a.createTextRange();b.collapse(!1),b.select()}else a.focus()},0)},utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/dialogbase.css?cache=\"+Math.random(),tag:\"link\",type:\"text/css\",rel:\"stylesheet\"}),lang=editor.getLang(dialog.className.split(\"-\")[2]),lang&&domUtils.on(window,\"load\",function(){var a=editor.options.langPath+editor.options.lang+\"/images/\";for(var b in lang[\"static\"]){var c=$G(b);if(c){var d=c.tagName,e=lang[\"static\"][b];switch(e.src&&(e=utils.extend({},e,!1),e.src=a+e.src),e.style&&(e=utils.extend({},e,!1),e.style=e.style.replace(/url\\s*\\(/g,\"url(\"+a)),d.toLowerCase()){case\"var\":c.parentNode.replaceChild(document.createTextNode(e),c);break;case\"select\":for(var f,g=c.options,h=0;f=g[h];)f.innerHTML=e.options[h++];for(var i in e)\"options\"!=i&&c.setAttribute(i,e[i]);break;default:domUtils.setAttributes(c,e)}}}})}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        * {\n            margin: 0;\n            padding: 0;\n            color: #838383;\n        }\n\n        table {\n            font-size: 12px;\n            margin: 10px;\n            line-height: 36px;\n            width: 100%;\n        }\n\n        .txt {\n            box-sizing: border-box;\n            width: 90%;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div style=\"padding:10px;\">\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                <input id=\"target\" type=\"checkbox\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue(\"link\") : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(), 'a', true),\n        orgText;\n\n    link = domUtils.findParentByTagName(link, \"a\", true);\n\n    if (link) {\n        url = utils.html(link.getAttribute('_href') || link.getAttribute('href', 2));\n\n        if (rangeLink === link && !link.getElementsByTagName('img').length) {\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText' : 'textContent'];\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    } else {\n        if (range.collapsed) {\n            text.removeAttribute('disabled');\n            text.value = '';\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url : '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true : false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk() {\n        var href = $G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if (href) {\n            if (!hrefStartWith(href, allowLinkProtocols)) {\n                href = \"http://\" + href;\n            }\n            var obj = {\n                'href': href,\n                'target': $G(\"target\").checked ? \"_blank\" : '_self',\n                'title': $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href': href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if (orgText && text.value != orgText) {\n                link[browser.ie ? 'innerText' : 'textContent'] = obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if (range.collapsed) {\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link', utils.clearEmptyAttrs(obj));\n            dialog.close();\n        }\n    }\n\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function () {\n        if (!hrefStartWith(this.value, allowLinkProtocols)) {\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\" + lang.httpPrompt + \"</span>\";\n        } else {\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href, arr) {\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for (var i = 0, ai; ai = arr[i++];) {\n            if (href.indexOf(ai) == 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <style>\n        html, body {\n            height: 100%;\n            width: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview {\n            width: 100%;\n            height: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview * {\n            font-family: sans-serif;\n            font-size: 16px;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <script src=\"../../ueditor.parse.js?63488b91\"></script>\n    <title></title>\n</head>\n<body class=\"view\">\n<div id=\"preview\" style=\"margin:8px\">\n\n</div>\n</body>\n<script>\n    document.getElementById('preview').innerHTML = editor.getContent();\n    uParse('#preview', {\n        rootPath: '../../',\n        chartContainerHeight: 500\n    })\n    dialog.oncancel = function () {\n        document.getElementById('preview').innerHTML = '';\n    }\n</script>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/scrawl/scrawl.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{margin:0}table{width:100%}table td{padding:2px 4px;vertical-align:middle}a{text-decoration:none}em{font-style:normal}.border_style1{border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}.main{margin:8px;overflow:hidden}.hot{float:left;height:335px}.drawBoard{position:relative;cursor:crosshair}.brushBorad{position:absolute;left:0;top:0;z-index:998}.picBoard{border:0;text-align:center;line-height:300px;cursor:default}.operateBar{margin-top:10px;font-size:12px;text-align:center}.operateBar span{margin-left:10px}.drawToolbar{float:right;width:110px;height:300px;overflow:hidden}.colorBar{margin-top:10px;font-size:12px;text-align:center}.colorBar a{display:block;width:10px;height:10px;border:1px solid #1006F1;border-radius:3px;box-shadow:2px 2px 5px #d3d6da;opacity:.3}.sectionBar{margin-top:15px;font-size:12px;text-align:center}.sectionBar a{display:inline-block;width:10px;height:12px;color:#888;text-indent:-999px;opacity:.3}.size1{background:url(images/size.png) 1px center no-repeat}.size2{background:url(images/size.png) -10px center no-repeat}.size3{background:url(images/size.png) -22px center no-repeat}.size4{background:url(images/size.png) -35px center no-repeat}.addImgH{position:relative}.addImgH_form{position:absolute;left:18px;top:-1px;width:75px;height:21px;opacity:0;cursor:pointer}.addImgH_form input{width:100%}.maskLayerNull{display:none}.maskLayer{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.7;background-color:#fff;text-align:center;font-weight:700;line-height:300px;z-index:1000}.previousStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undoH.png);cursor:pointer}.previousStepH .text{color:#888;cursor:pointer}.previousStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undo.png);cursor:default}.previousStep .text{color:#ccc;cursor:default}.nextStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redoH.png);cursor:pointer}.nextStepH .text{color:#888;cursor:pointer}.nextStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redo.png);cursor:default}.nextStep .text{color:#ccc;cursor:default}.clearBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/emptyH.png);cursor:pointer}.clearBoardH .text{color:#888;cursor:pointer}.clearBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/empty.png);cursor:default}.clearBoard .text{color:#ccc;cursor:default}.scaleBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scaleH.png);cursor:pointer}.scaleBoardH .text{color:#888;cursor:pointer}.scaleBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scale.png);cursor:default}.scaleBoard .text{color:#ccc;cursor:default}.removeImgH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimgH.png);cursor:pointer}.removeImgH .text{color:#888;cursor:pointer}.removeImg .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimg.png);cursor:default}.removeImg .text{color:#ccc;cursor:default}.addImgH .icon{vertical-align:top;display:inline-block;width:16px;height:16px;background-image:url(images/addimg.png)}.addImgH .text{color:#888;cursor:pointer}.brushIcon{display:inline-block;width:16px;height:16px;background-image:url(images/brush.png)}.eraserIcon{display:inline-block;width:16px;height:16px;background-image:url(images/eraser.png)}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css?dce615c7\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js?eb98629c\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize: 3, //画笔初始大小\n        drawBrushColor: \"#4bacc6\", //画笔初始颜色\n        colorList: ['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum: 10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl(settings);\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec(scrawlObj);\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/scrawl/scrawl.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction ue_callback(a,b){function c(a,b,c,d){var e,f=0,g=0,h=a.width||c,i=a.height||d;(h>b||i>b)&&(h>=i?(f=h-b)&&(e=(f/h).toFixed(2),a.height=i-i*e,a.width=b):(g=i-b)&&(e=(g/i).toFixed(2),a.width=h-h*e,a.height=b))}var d=document,e=$G(\"J_picBoard\"),f=d.createElement(\"img\");removeMaskLayer(),\"SUCCESS\"==b?(e.innerHTML=\"\",f.onload=function(){c(this,300),e.appendChild(f);var a=new scrawl;a.btn2Highlight(\"J_removeImg\"),a.btn2Highlight(\"J_sacleBoard\")},f.src=a):alert(b)}function removeMaskLayer(){var a=$G(\"J_maskLayer\");a.className=\"maskLayerNull\",a.innerHTML=\"\",dialog.buttons[0].setDisabled(!1)}function addMaskLayer(a){var b=$G(\"J_maskLayer\");dialog.buttons[0].setDisabled(!0),b.className=\"maskLayer\",b.innerHTML=a}function exec(scrawlObj){if(scrawlObj.isScrawl){addMaskLayer(lang.scrawlUpLoading);var base64=scrawlObj.getCanvasData();if(base64){var options={timeout:1e5,headers:editor.options.serverHeaders||{},onsuccess:function(xhr){if(!scrawlObj.isCancelScrawl){var responseObj;if(responseObj=eval(\"(\"+xhr.responseText+\")\"),\"SUCCESS\"===responseObj.state){var imgObj={},url=editor.options.scrawlUrlPrefix+responseObj.url;imgObj.src=url,imgObj._src=url,imgObj.alt=responseObj.original||\"\",editor.execCommand(\"insertImage\",imgObj),dialog.close(),editor.fireEvent(\"uploadsuccess\",{res:responseObj,type:\"scrawl\"})}else alert(responseObj.state)}},onerror:function(){alert(lang.imageError),dialog.close()}};options[editor.getOpt(\"scrawlFieldName\")]=base64;var actionUrl=editor.getActionUrl(editor.getOpt(\"scrawlActionName\")),params=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(actionUrl+(actionUrl.indexOf(\"?\")==-1?\"?\":\"&\")+params);ajax.request(url,options)}}else addMaskLayer(lang.noScarwl+\"&nbsp;&nbsp;&nbsp;<input type='button' value='\"+lang.continueBtn+\"'  onclick='removeMaskLayer()'/>\")}var scrawl=function(a){a&&this.initOptions(a)};!function(){var a=$G(\"J_brushBoard\"),b=a.getContext(\"2d\"),c=[],d=0;scrawl.prototype={isScrawl:!1,brushWidth:-1,brushColor:\"\",initOptions:function(a){var b=this;b.originalState(a),b._buildToolbarColor(a.colorList),b._addBoardListener(a.saveNum),b._addOPerateListener(a.saveNum),b._addColorBarListener(),b._addBrushBarListener(),b._addEraserBarListener(),b._addAddImgListener(),b._addRemoveImgListenter(),b._addScalePicListenter(),b._addClearSelectionListenter(),b._originalColorSelect(a.drawBrushColor),b._originalBrushSelect(a.drawBrushSize),b._clearSelection()},originalState:function(a){var c=this;c.brushWidth=a.drawBrushSize,c.brushColor=a.drawBrushColor,b.lineWidth=c.brushWidth,b.strokeStyle=c.brushColor,b.fillStyle=\"transparent\",b.lineCap=\"round\",b.fill()},_buildToolbarColor:function(a){var b=null,c=[];c.push(\"<table id='J_colorList'>\");for(var d,e=0;d=a[e++];)(e-1)%5==0&&(1!=e&&c.push(\"</tr>\"),c.push(\"<tr>\")),b=\"#\"+d,c.push(\"<td><a title='\"+b+\"' href='javascript:void(0)' style='background-color:\"+b+\"'></a></td>\");c.push(\"</tr></table>\"),$G(\"J_colorBar\").innerHTML=c.join(\"\")},_addBoardListener:function(e){var f,g=this,h=0,i=-1,j=-1,k=!1,l=!1,m=!1,n=0,o=\"\";h=parseInt(domUtils.getComputedStyle($G(\"J_wrap\"),\"margin-left\")),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d+=1,domUtils.on(a,[\"mousedown\",\"mousemove\",\"mouseup\",\"mouseout\"],function(a){switch(f=browser.webkit?a.which:n,a.type){case\"mousedown\":n=1,o=1,k=!0,m=!1,l=!1,g.isScrawl=!0,i=a.clientX-h,j=a.clientY-h,b.beginPath();break;case\"mousemove\":if(!o&&0==f)return;if(!o&&f&&(i=a.clientX-h,j=a.clientY-h,b.beginPath(),o=1),m||!k)return;var c=a.clientX-h,d=a.clientY-h;b.moveTo(i,j),b.lineTo(c,d),b.stroke(),i=c,j=d,l=!0;break;case\"mouseup\":if(n=0,!k)return;l||(b.arc(i,j,b.lineWidth,0,2*Math.PI,!1),b.fillStyle=b.strokeStyle,b.fill()),b.closePath(),g._saveOPerate(e),k=!1,l=!1,m=!0,i=-1,j=-1;break;case\"mouseout\":if(o=\"\",n=0,1==f)return;b.closePath()}})},_addOPerateListener:function(a){var e=this;domUtils.on($G(\"J_previousStep\"),\"click\",function(){d>1&&(d-=1,b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d-1],0,0),e.btn2Highlight(\"J_nextStep\"),1==d&&e.btn2disable(\"J_previousStep\"))}),domUtils.on($G(\"J_nextStep\"),\"click\",function(){d>0&&d<c.length&&(b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d],0,0),d+=1,e.btn2Highlight(\"J_previousStep\"),d==c.length&&e.btn2disable(\"J_nextStep\"))}),domUtils.on($G(\"J_clearBoard\"),\"click\",function(){b.clearRect(0,0,b.canvas.width,b.canvas.height),c=[],e._saveOPerate(a),d=1,e.isScrawl=!1,e.btn2disable(\"J_previousStep\"),e.btn2disable(\"J_nextStep\"),e.btn2disable(\"J_clearBoard\")})},_addColorBarListener:function(){var a=this;domUtils.on($G(\"J_colorBar\"),\"click\",function(c){var d=a.getTarget(c),e=d.title;e&&(a._addColorSelect(d),a.brushColor=e,b.globalCompositeOperation=\"source-over\",b.lineWidth=a.brushWidth,b.strokeStyle=e)})},_addBrushBarListener:function(){var a=this;domUtils.on($G(\"J_brushBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.globalCompositeOperation=\"source-over\",b.lineWidth=parseInt(e),b.strokeStyle=a.brushColor,a.brushWidth=b.lineWidth)})},_addEraserBarListener:function(){var a=this;domUtils.on($G(\"J_eraserBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.lineWidth=parseInt(e),b.globalCompositeOperation=\"destination-out\",b.strokeStyle=\"#FFF\")})},_addAddImgListener:function(){var a=$G(\"J_imgTxt\");window.FileReader||($G(\"J_addImg\").style.display=\"none\",$G(\"J_removeImg\").style.display=\"none\",$G(\"J_sacleBoard\").style.display=\"none\"),domUtils.on(a,\"change\",function(b){var c=a.parentNode;addMaskLayer(lang.backgroundUploading);var d=b.target||b.srcElement,e=new FileReader;e.onload=function(a){var b=a.target||a.srcElement;ue_callback(b.result,\"SUCCESS\")},e.readAsDataURL(d.files[0]),c.reset()})},_addRemoveImgListenter:function(){var a=this;domUtils.on($G(\"J_removeImg\"),\"click\",function(){$G(\"J_picBoard\").innerHTML=\"\",a.btn2disable(\"J_removeImg\"),a.btn2disable(\"J_sacleBoard\")})},_addScalePicListenter:function(){domUtils.on($G(\"J_sacleBoard\"),\"click\",function(){var b=$G(\"J_picBoard\"),c=$G(\"J_scaleCon\"),d=b.children[0];if(d)if(c)\"visible\"==c.style.visibility?(c.style.visibility=\"hidden\",b.style.position=\"\",b.style.zIndex=\"\"):(c.style.visibility=\"visible\",b.style.cssText+=\"position:relative;z-index:999\");else{b.style.cssText=\"position:relative;z-index:999;\"+b.style.cssText,d.style.cssText=\"position: absolute;top:\"+(a.height-d.height)/2+\"px;left:\"+(a.width-d.width)/2+\"px;\";var e=new ScaleBoy;b.appendChild(e.init()),e.startScale(d)}})},_addClearSelectionListenter:function(){var a=document;domUtils.on(a,\"mousemove\",function(b){browser.ie&&browser.version<11?a.selection.clear():window.getSelection().removeAllRanges()})},_clearSelection:function(){for(var a,b=[\"J_operateBar\",\"J_colorBar\",\"J_brushBar\",\"J_eraserBar\",\"J_picBoard\"],c=0;a=b[c++];)domUtils.unSelectable($G(a))},_saveOPerate:function(a){var e=this;c.length<=a?(d<c.length&&(e.btn2disable(\"J_nextStep\"),c.splice(d)),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length):(c.shift(),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length),e.btn2Highlight(\"J_previousStep\"),e.btn2Highlight(\"J_clearBoard\")},_originalColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=0;b=c[d++];)b.children[0].title.toLowerCase()==a&&(b.children[0].style.opacity=1)},_originalBrushSelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=0;b=c[d++];)if(\"a\"==b.tagName.toLowerCase()){var e=browser.ie?b.innerText:b.text;e.toLowerCase()==a&&(b.style.opacity=1)}},_addColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=$G(\"J_eraserBar\").children,e=$G(\"J_brushBar\").children,f=0;b=c[f++];)b.children[0].style.opacity=.3;for(var g,h=0;g=e[h++];)if(\"a\"==g.tagName.toLowerCase()){g.style.opacity=.3;var i=browser.ie?g.innerText:g.text;i.toLowerCase()==this.brushWidth&&(g.style.opacity=1)}for(var j,k=0;j=d[k++];)\"a\"==j.tagName.toLowerCase()&&(j.style.opacity=.3);a.style.opacity=1,a.blur()},_addBESelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=$G(\"J_eraserBar\").children,e=0;b=c[e++];)\"a\"==b.tagName.toLowerCase()&&(b.style.opacity=.3);for(var f,g=0;f=d[g++];)\"a\"==f.tagName.toLowerCase()&&(f.style.opacity=.3);a.style.opacity=1,a.blur()},getCanvasData:function(){var c=$G(\"J_picBoard\"),d=c.children[0];if(d){var e,f;\"absolute\"==d.style.position?(e=parseInt(d.style.left),f=parseInt(d.style.top)):(e=(c.offsetWidth-d.width)/2,f=(c.offsetHeight-d.height)/2),b.globalCompositeOperation=\"destination-over\",b.drawImage(d,e,f,d.width,d.height)}else b.globalCompositeOperation=\"destination-atop\",b.fillStyle=\"#fff\",b.fillRect(0,0,a.width,a.height);try{return a.toDataURL(\"image/png\").substring(22)}catch(g){return\"\"}},btn2Highlight:function(a){var b=$G(a);b.className.indexOf(\"H\")==-1&&(b.className+=\"H\")},btn2disable:function(a){var b=$G(a);b.className.indexOf(\"H\")!=-1&&(b.className=b.className.replace(\"H\",\"\"))},getTarget:function(a){return a.target||a.srcElement}}}();var ScaleBoy=function(){this.dom=null,this.scalingElement=null};!function(){function a(){var a=document,b=a.getElementsByTagName(\"head\")[0],c=a.createElement(\"style\"),d=\".scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}.scale .hand0, .scale .hand7{cursor:nw-resize;}.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}.scale .hand2, .scale .hand5{cursor:ne-resize;}\";c.type=\"text/css\";try{c.appendChild(a.createTextNode(d))}catch(e){c.styleSheet.cssText=d}b.appendChild(c)}function b(){var a=document,b=[],c=a.createElement(\"div\");c.id=\"J_scaleCon\",c.className=\"scale\";for(var d=0;d<8;d++)b.push(\"<span class='hand\"+d+\"'></span>\");return c.innerHTML=b.join(\"\"),c}var c=[[1,1,-1,-1],[0,1,0,-1],[0,1,1,-1],[1,0,-1,0],[0,0,1,0],[1,0,-1,1],[0,0,0,1],[0,0,1,1]];ScaleBoy.prototype={init:function(){a();var c=this,d=c.dom=b();return c.scaleMousemove.fp=c,domUtils.on(d,\"mousedown\",function(a){var b=a.target||a.srcElement;c.start={x:a.clientX,y:a.clientY},b.className.indexOf(\"hand\")!=-1&&(c.dir=b.className.replace(\"hand\",\"\")),domUtils.on(document.body,\"mousemove\",c.scaleMousemove),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}),domUtils.on(document.body,\"mouseup\",function(a){c.start&&(domUtils.un(document.body,\"mousemove\",c.scaleMousemove),c.moved&&c.updateScaledElement({position:{x:d.style.left,y:d.style.top},size:{w:d.style.width,h:d.style.height}}),delete c.start,delete c.moved,delete c.dir)}),d},startScale:function(a){var b=this,c=b.dom;c.style.cssText=\"visibility:visible;top:\"+a.style.top+\";left:\"+a.style.left+\";width:\"+a.offsetWidth+\"px;height:\"+a.offsetHeight+\"px;\",b.scalingElement=a},updateScaledElement:function(a){var b=this.scalingElement,c=a.position,d=a.size;c&&(\"undefined\"!=typeof c.x&&(b.style.left=c.x),\"undefined\"!=typeof c.y&&(b.style.top=c.y)),d&&(d.w&&(b.style.width=d.w),d.h&&(b.style.height=d.h))},updateStyleByDir:function(a,b){var d,e=this,f=e.dom;c.def=[1,1,0,0],0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp(\"left\",d)+\"px\"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp(\"top\",d)+\"px\"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp(\"width\",d)+\"px\"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp(\"height\",d)+\"px\"),\"def\"===a&&e.updateScaledElement({position:{x:f.style.left,y:f.style.top}})},scaleMousemove:function(a){var b=arguments.callee.fp,c=b.start,d=b.dir||\"def\",e={x:a.clientX-c.x,y:a.clientY-c.y};b.updateStyleByDir(d,e),arguments.callee.fp.start={x:a.clientX,y:a.clientY},arguments.callee.fp.moved=1},_validScaledProp:function(a,b){var c=this.dom,d=$G(\"J_picBoard\");switch(b=isNaN(b)?0:b,a){case\"left\":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case\"top\":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case\"width\":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case\"height\":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}}}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .warpper {\n            position: relative;\n            width: 380px;\n            height: 100%;\n            margin: 10px auto;\n        }\n\n        .tabbody {\n            height: 160px;\n        }\n\n        .tabbody table {\n            width: 100%;\n            border-collapse: separate;\n            border-spacing: 3px;\n            line-height: 36px;\n        }\n\n        .tabbody .panel {\n            width: 373px;\n            height: 100%;\n            padding-left: 5px;\n            position: absolute;\n            background-color: #fff;\n        }\n\n        .tabbody input.int {\n            width: 190px;\n            height: 30px;\n            border: 1px solid #d7d7d7;\n            line-height: 21px;\n            border-radius: 3px;\n            outline: none;\n            padding: 0 5px;\n        }\n\n        .tabbody input.btn {\n            text-align: center;\n            line-height: 28px;\n            text-decoration: none;\n            height: 30px;\n            border: 1px solid #ccc;\n            background: #FFF;\n            border-radius: 3px;\n            padding: 0 5px;\n            font-size: 12px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span tabsrc=\"replace\"><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>:</td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>:</td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>:</td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js?54c26e9a\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}function getMatchCase(a){return!!$G(a).checked}editor.firstForSR=0,editor.currentRangeForSR=null,$G(\"searchtab\").onmousedown=function(){$G(\"search-msg\").innerHTML=\"\",$G(\"replace-msg\").innerHTML=\"\"},$G(\"nextFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;if(!e)return!1;if(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase\")},!frCommond(d)){var f=editor.selection.getRange().createBookmark();$G(\"search-msg\").innerHTML=lang.getEnd,editor.selection.getRange().moveToBookmark(f).select()}},$G(\"nextReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"preFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase\")},void(frCommond(d)||($G(\"search-msg\").innerHTML=lang.getStart)))},$G(\"preReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"repalceBtn\").onclick=function(){editor.trigger(\"clearLastSearchResult\");var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");return!!b&&(!(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())&&(a={searchStr:b,dir:1,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c},void frCommond(a)))},$G(\"repalceAllBtn\").onclick=function(){var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");if(!b)return!1;if(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())return!1;a={searchStr:b,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c,all:!0};var d=frCommond(a);d&&($G(\"replace-msg\").innerHTML=lang.countMsg.replace(\"{#count}\",d))};var frCommond=function(a){return editor.execCommand(\"searchreplace\",a)};switchTab(\"searchtab\"),dialog.onclose=function(){editor.trigger(\"clearLastSearchResult\")};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        html, body {\n            overflow: hidden;\n        }\n\n        #specharsTab {\n            width: 97%;\n            margin: 10px auto;\n            zoom: 1;\n            position: relative\n        }\n\n        .tabbody {\n            height: 447px;\n        }\n\n        .tabbody span {\n            margin: 5px 3px;\n            text-align: center;\n            display: inline-block;\n            width: 40px;\n            height: 16px;\n            line-height: 16px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div id=\"specharsTab\">\n    <div id=\"tabHeads\" class=\"tabhead\"></div>\n    <div id=\"tabBodys\" class=\"tabbody\"></div>\n</div>\n<script type=\"text/javascript\" src=\"spechars.js?78a9bbd0\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/spechars/spechars.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction toArray(a){return a.split(\",\")}var charsContent=[{name:\"tsfh\",title:lang.tsfh,content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},{name:\"lmsz\",title:lang.lmsz,content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},{name:\"szfh\",title:lang.szfh,content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},{name:\"rwfh\",title:lang.rwfh,content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},{name:\"xlzm\",title:lang.xlzm,content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},{name:\"ewzm\",title:lang.ewzm,content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},{name:\"pyzm\",title:lang.pyzm,content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},{name:\"yyyb\",title:lang.yyyb,content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},{name:\"zyzf\",title:lang.zyzf,content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}];!function(a){for(var b,c=0;b=a[c++];){var d=document.createElement(\"span\");d.setAttribute(\"tabSrc\",b.name),d.innerHTML=b.title,1==c&&(d.className=\"focus\"),domUtils.on(d,\"click\",function(){for(var a,b=$G(\"tabHeads\").children,c=0;a=b[c++];)a.className=\"\";b=$G(\"tabBodys\").children;for(var a,c=0;a=b[c++];)a.style.display=\"none\";this.className=\"focus\",$G(this.getAttribute(\"tabSrc\")).style.display=\"\"}),$G(\"tabHeads\").appendChild(d),domUtils.insertAfter(d,document.createTextNode(\"\\n\"));var e=document.createElement(\"div\");e.id=b.name,e.style.display=1==c?\"\":\"none\";for(var f,g=b.content,h=0;f=g[h++];){var i=document.createElement(\"span\");i.innerHTML=f,domUtils.on(i,\"click\",function(){editor.execCommand(\"insertHTML\",this.innerHTML),dialog.close()}),e.appendChild(i)}$G(\"tabBodys\").appendChild(e)}}(charsContent);"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/table/edittable.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{overflow:hidden;width:540px}.wrapper{margin:10px auto 0;font-size:12px;overflow:hidden;width:520px;height:315px}.clear{clear:both}.wrapper .left{float:left;margin-left:10px}.wrapper .right{float:right;border-left:2px dotted #EDEDED;padding-left:15px}.section{margin-bottom:15px;width:240px;overflow:hidden}.section h3{font-weight:700;padding:5px 0;margin-bottom:10px;border-bottom:1px solid #EDEDED;font-size:12px}.section ul{list-style:none;overflow:hidden;clear:both}.section li{float:left;width:120px}.section .tone{width:80px}.section .preview{width:220px}.section .preview table{text-align:center;vertical-align:middle;color:#666}.section .preview caption{font-weight:700}.section .preview td{border-width:1px;border-style:solid;height:22px}.section .preview th{border-style:solid;border-color:#DDD;border-width:2px 1px 1px;height:22px;background-color:#F7F7F7}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css?97f6eb5f\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var\n                        id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var\n                        id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var\n                        id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var\n                        id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var\n                        id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly'/>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js?69ed0ec5\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/table/edittable.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=$G(\"J_title\"),c=$G(\"J_titleCol\"),d=$G(\"J_caption\"),e=$G(\"J_sorttable\"),f=$G(\"J_autoSizeContent\"),g=$G(\"J_autoSizePage\"),h=$G(\"J_tone\"),i=$G(\"J_preview\"),j=function(){a=this,a.init()};j.prototype={init:function(){var i=new UE.ui.ColorPicker({editor:editor}),j=new UE.ui.Popup({editor:editor,content:i});b.checked=editor.queryCommandState(\"inserttitle\")==-1,c.checked=editor.queryCommandState(\"inserttitlecol\")==-1,d.checked=editor.queryCommandState(\"insertcaption\")==-1,e.checked=1==editor.queryCommandState(\"enablesort\");var k=editor.queryCommandState(\"enablesort\"),l=editor.queryCommandState(\"disablesort\");e.checked=!!(k<0&&l>=0),e.disabled=!!(k<0&&l<0),e.title=k<0&&l<0?lang.errorMsg:\"\",a.createTable(b.checked,c.checked,d.checked),a.setAutoSize(),a.setColor(a.getColor()),domUtils.on(b,\"click\",a.titleHanler),domUtils.on(c,\"click\",a.titleColHanler),domUtils.on(d,\"click\",a.captionHanler),domUtils.on(e,\"click\",a.sorttableHanler),domUtils.on(f,\"click\",a.autoSizeContentHanler),domUtils.on(g,\"click\",a.autoSizePageHanler),domUtils.on(h,\"click\",function(){j.showAnchor(h)}),domUtils.on(document,\"mousedown\",function(){j.hide()}),i.addListener(\"pickcolor\",function(){a.setColor(arguments[1]),j.hide()}),i.addListener(\"picknocolor\",function(){a.setColor(\"\"),j.hide()})},createTable:function(a,b,c){var d=[];if(d.push(\"<table id='J_example'>\"),c&&d.push(\"<caption>\"+lang.captionName+\"</caption>\"),a){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var e=0;e<5;e++)d.push(\"<th>\"+lang.titleName+\"</th>\");d.push(\"</tr>\")}for(var f=0;f<6;f++){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var g=0;g<5;g++)d.push(\"<td>\"+lang.cellsName+\"</td>\");d.push(\"</tr>\")}d.push(\"</table>\"),i.innerHTML=d.join(\"\"),this.updateSortSpan()},titleHanler:function(){var c=$G(\"J_example\"),d=document.createDocumentFragment(),e=domUtils.getComputedStyle(domUtils.getElementsByTagName(c,\"td\")[0],\"border-color\"),f=c.rows[0].children.length;if(b.checked){c.insertRow(0);for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,d.appendChild(g);c.rows[0].appendChild(d)}else domUtils.remove(c.rows[0]);a.setColor(e),a.updateSortSpan()},titleColHanler:function(){var b=$G(\"J_example\"),d=domUtils.getComputedStyle(domUtils.getElementsByTagName(b,\"td\")[0],\"border-color\"),e=b.rows,f=e.length;if(c.checked)for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,e[h].insertBefore(g,e[h].children[0]);else for(var h=0;h<f;h++)domUtils.remove(e[h].children[0]);a.setColor(d),a.updateSortSpan()},captionHanler:function(){var a=$G(\"J_example\");if(d.checked){var b=document.createElement(\"caption\");b.innerHTML=lang.captionName,a.insertBefore(b,a.firstChild)}else domUtils.remove(domUtils.getElementsByTagName(a,\"caption\")[0])},sorttableHanler:function(){a.updateSortSpan()},autoSizeContentHanler:function(){var a=$G(\"J_example\");a.removeAttribute(\"width\")},autoSizePageHanler:function(){var a=$G(\"J_example\"),b=a.getElementsByTagName(a,\"td\");utils.each(b,function(a){a.removeAttribute(\"width\")}),a.setAttribute(\"width\",\"100%\")},updateSortSpan:function(){var a=$G(\"J_example\"),b=a.rows[0],c=domUtils.getElementsByTagName(a,\"span\");utils.each(c,function(a){a.parentNode.removeChild(a)}),e.checked&&utils.each(b.cells,function(a,b){var c=document.createElement(\"span\");c.innerHTML=\"^\",a.appendChild(c)})},getColor:function(){var a,b=editor.selection.getStart(),c=domUtils.findParentByTagName(b,[\"td\",\"th\",\"caption\"],!0);return a=c&&domUtils.getComputedStyle(c,\"border-color\"),a||(a=\"#DDDDDD\"),a},setColor:function(a){var b=$G(\"J_example\"),c=domUtils.getElementsByTagName(b,\"td\").concat(domUtils.getElementsByTagName(b,\"th\"),domUtils.getElementsByTagName(b,\"caption\"));h.value=a,utils.each(c,function(b){b.style.borderColor=a})},setAutoSize:function(){var a=this;g.checked=!0,a.autoSizePageHanler()}},new j,dialog.onok=function(){editor.__hasEnterExecCommand=!0;var a={title:\"inserttitle deletetitle\",titleCol:\"inserttitlecol deletetitlecol\",caption:\"insertcaption deletecaption\",sorttable:\"enablesort disablesort\"};editor.fireEvent(\"saveScene\");for(var b in a){var c=a[b].split(\" \"),d=$G(\"J_\"+b);d.checked?editor.queryCommandState(c[0])!=-1&&editor.execCommand(c[0]):editor.queryCommandState(c[1])!=-1&&editor.execCommand(c[1])}editor.execCommand(\"edittable\",h.value),f.checked?editor.execCommand(\"adaptbytext\"):\"\",g.checked?editor.execCommand(\"adaptbywindow\"):\"\",editor.fireEvent(\"saveScene\"),editor.__hasEnterExecCommand=!1}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n        colorPiker = new UE.ui.ColorPicker({\n            editor: editor\n        }),\n        colorPop = new UE.ui.Popup({\n            editor: editor,\n            content: colorPiker\n        });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value = \"\";\n        colorPop.hide();\n    });\n    dialog.onok = function () {\n        editor.execCommand(\"edittd\", tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if (cell) {\n        var color = domUtils.getComputedStyle(cell, 'background-color');\n        if (/^#/.test(color)) {\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/template/config.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar templates=[{pre:\"pre0.png\",title:lang.blank,preHtml:'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',html:'<p class=\"ue_t\">欢迎使用UEditor！</p>'},{pre:\"pre1.png\",title:lang.blog,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',html:'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'},{pre:\"pre2.png\",title:lang.resume,preHtml:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',html:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'},{pre:\"pre3.png\",title:lang.richText,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',html:'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'},{pre:\"pre4.png\",title:lang.sciPapers,preHtml:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',html:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'}];"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/template/template.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrap{padding:5px;font-size:14px}.left{width:425px;float:left}.right{width:160px;border:1px solid #ccc;float:right;padding:5px;margin-right:5px}.right .pre{height:332px;overflow-y:auto}.right .preitem{border:#fff 1px solid;margin:5px 0;padding:2px 0}.right .preitem:hover{background-color:#fffacd;cursor:pointer;border:#ccc 1px solid}.right .preitem img{display:block;margin:0 auto;width:100px}.clear{clear:both}.top{height:26px;line-height:26px;padding:5px}.bottom{height:320px;width:100%;margin:0 auto}.transparent{background:url(images/bg.gif) repeat}.bottom table tr td{border:1px dashed #ccc}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA}.border_style1{padding:2px;border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}p{margin:5px 0}table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all}li{clear:both}ol{padding-left:40px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css?65b4074c\">\n</head>\n<body>\n<div class=\"wrap\">\n    <div class=\"left\">\n        <div class=\"top\">\n            <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n        </div>\n        <div class=\"bottom border_style1\" id=\"preview\"></div>\n    </div>\n    <fieldset class=\"right border_style1\">\n        <legend><var id=\"lang_template_select\"></var></legend>\n        <div class=\"pre\" id=\"preitem\"></div>\n    </fieldset>\n    <div class=\"clear\"></div>\n</div>\n<script type=\"text/javascript\" src=\"config.js?5c9539a4\"></script>\n<script type=\"text/javascript\" src=\"template.js?08eb5fca\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/template/template.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=editor,c=$G(\"preview\"),d=$G(\"preitem\"),e=templates,f=function(){for(var a,b=\"\",c=0;a=e[c++];)b+='<div class=\"preitem\" onclick=\"pre('+c+')\"><img src=\"images/'+a.pre+'\" '+(a.title?\"alt=\"+a.title+\" title=\"+a.title:\"\")+\"></div>\";d.innerHTML=b},g=function(b){var f=e[b-1];a=f,h(),domUtils.setStyles(d.childNodes[b-1],{\"background-color\":\"lemonChiffon\",border:\"#ccc 1px solid\"}),c.innerHTML=f.preHtml?f.preHtml:\"\"},h=function(){for(var a,b=d.children,c=0;a=b[c++];)domUtils.setStyles(a,{\"background-color\":\"\",border:\"white 1px solid\"})};dialog.onok=function(){$G(\"issave\").checked||b.execCommand(\"cleardoc\");var c={html:a&&a.html};b.execCommand(\"template\",c)},f(),window.pre=g,g(2)}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/video/video.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#videoUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#videoSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#videoSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#videoType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#videoSearchBtn,#videoSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewVideo{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-video-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#videoInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#videoFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#videoFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css?0043553c\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td>\n                        <td><input id=\"videoUrl\" type=\"text\"><a href=\"javascript:;\" id=\"videoSelect\"\n                                                                style=\"display:none;\">选择视频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链视频支持：优酷、腾讯视频、哔哩哔哩\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"videoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_video_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"videoFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label><var id=\"lang_upload_width\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label><var id=\"lang_upload_height\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js?ce575232\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/video/video.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});u.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),u.selectCallback&&($G(\"videoSelect\").style.display=\"inline-block\",domUtils.on($G(\"videoSelect\"),\"click\",function(a){u.selectCallback(editor,function(a){a&&($G(\"videoUrl\").value=a.path,n(a.path))})}))}function b(){k([\"videoFloat\",\"upload_alignment\"]),m($G(\"videoUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-video\"==b.className,e=b.className.indexOf(\"edui-upload-video\")!=-1;if(c||e){$G(\"videoUrl\").value=a=b.getAttribute(\"_url\"),$G(\"videoWidth\").value=b.width,$G(\"videoHeight\").value=b.height;var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(t=!0)}n(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=g(\"tabHeads\",\"tabSrc\");switch(a){case\"video\":return e();case\"videoSearch\":return f(\"searchList\");case\"upload\":return o()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"videoFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"videoWidth\"),b=$G(\"videoHeight\"),c=$G(\"videoUrl\").value,d=g(\"videoFloat\",\"name\");return!!c&&(!!i([a,b])&&void editor.execCommand(\"insertvideo\",{url:h(c),width:a.value,height:b.value,align:d},t?\"upload\":null))}function f(a){for(var b,c=domUtils.getElementsByTagName($G(a),\"img\"),d=[],e=0;b=c[e++];)b.getAttribute(\"selected\")&&d.push({url:b.getAttribute(\"ue_video_url\"),width:420,height:280,align:\"none\"});editor.execCommand(\"insertvideo\",d)}function g(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function h(a){return a?a=utils.trim(a).replace(/v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i,\"player.youku.com/embed/$1\").replace(/v\\.qq\\.com\\/x\\/cover\\/[\\w]+\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/v\\.qq\\.com\\/x\\/page\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/www\\.bilibili\\.com\\/video\\/([a-zA-Z0-9]+)\\/?.*$/i,\"player.bilibili.com/player.html?bvid=$1\"):\"\"}function i(a){for(var b,c=0;b=a[c++];){var d=b.value;if(!j(d)&&d)return alert(lang.numError),b.value=\"\",b.focus(),!1}return!0}function j(a){return/(0|^[1-9]\\d*$)/.test(a)}function k(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}l(b)}}function l(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function m(a){browser.ie?a.onpropertychange=function(){n(this.value)}:a.addEventListener(\"input\",function(){n(this.value)},!1)}function n(a){if(a){var b=h(a);b=utils.unhtml(b),$G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><iframe class=\"previewVideo\"  src=\"'+b+'\" width=\"420\" height=\"280\" frameborder=0 allowfullscreen></iframe>'}}function o(){var a=[],b=editor.getOpt(\"videoUrlPrefix\"),c=$G(\"upload_width\").value||420,d=$G(\"upload_height\").value||280,e=g(\"upload_alignment\",\"name\")||\"none\";for(var f in s){var h=s[f];a.push({url:b+h.url,width:c,height:d,align:e})}var i=r.getQueueCount();return i?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,i)+\"</span>\"),!1):void editor.execCommand(\"insertvideo\",a,\"upload\")}function p(){r=new q(\"queueList\")}function q(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var r,s=[],t=!1,u={};window.onload=function(){u=editor.getOpt(\"videoConfig\"),$focus($G(\"videoUrl\")),a(),b(),p()},q.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"videoActionName\")),A=editor.getOpt(\"videoMaxSize\"),B=(editor.getOpt(\"videoAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"videoActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"videoFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){q--,r-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(s.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"video\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .wrapper .image-info {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .image-info .input {\n            flex-grow: 1;\n            display: flex;\n        }\n\n        .wrapper .image-info .input input {\n            display: block;\n            border: 1px solid #CCC;\n            height: 23px;\n            border-radius: 3px;\n            flex-grow: 1;\n            outline: none;\n        }\n\n        .wrapper .image-info .copy {\n            width: 60px;\n            cursor: pointer;\n            margin: 0 5px;\n        }\n\n        .wrapper .image-info .copy div {\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action {\n            width: 100px;\n            cursor: pointer;\n        }\n\n        .wrapper .image-info .action .save-from-local {\n            position: relative;\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action .save-from-local input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n        }\n\n        .wrapper .image-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .image-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .image-manual .body {\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"image-info\">\n        <div class=\"input\">\n            <input type=\"text\" id=\"fileUrl\"/>\n        </div>\n        <div class=\"copy\">\n            <div id=\"copyButton\">复制路径</div>\n        </div>\n        <div class=\"action\">\n            <div class=\"save-from-local\">\n                <div>本地选择保存</div>\n                <input type=\"file\" id=\"saveFile\" multiple=true/>\n            </div>\n        </div>\n    </div>\n    <div class=\"image-tip\"></div>\n    <div class=\"image-manual\">\n        <div class=\"title\">\n            Windows使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n        <div class=\"title\">\n            Mac使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，按快捷 Command+Shift+G ，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"wordimage.js?94055851\"></script>\n<script type=\"text/javascript\">\n    editor.setOpt({\n        wordImageFieldName: \"upfile\",\n        compressSide: 0,\n        maxImageSideLength: 900\n    });\n    //全局变量\n    var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n        selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n        optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        optImageFieldName = editor.getOpt('imageFieldName'),\n        optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder') : null,\n        maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n        extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n    /* 添加额外的GET参数 */\n    var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n        urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?' : '&') + params;\n\n    var uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder');\n    uploader = WebUploader.create({\n        accept: {\n            title: 'Images',\n            extensions: acceptExtensions,\n            mimeTypes: 'image/*'\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n        threads: 1,\n        compress: editor.getOpt('imageCompressEnable') ? {\n            width: imageCompressBorder,\n            height: imageCompressBorder,\n            // 图片质量，只有type为`image/jpeg`的时候才有效。\n            quality: 90,\n            // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n            allowMagnify: false,\n            // 是否允许裁剪。\n            crop: false,\n            // 是否保留头部meta信息。\n            preserveHeaders: true\n        } : false\n    });\n    uploader.on('uploadSuccess', function (file, res) {\n        if ('state' in res) {\n            if (res.state === 'SUCCESS') {\n                if (res.url) {\n                    imageUrls.push({\n                        name: file.name,\n                        url: res.url,\n                        title: '',\n                    });\n                    $('.image-tip').html('<span style=\"color:#139213;\">图片' + imageUrls.length + '(' + file.name + ')' + '转存成功</span>');\n                } else {\n                    $('.image-tip').html('上传失败:' + JSON.stringify(res))\n                }\n                // 触发上传附件事件\n                editor.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'image'\n                });\n            } else {\n                $('.image-tip').html('上传失败:' + JSON.stringify(res))\n            }\n        } else {\n            $('.image-tip').html('上传失败:' + JSON.stringify(res))\n        }\n    });\n    uploader.on('uploadFinished', function () {\n        $('.image-tip').html('<span style=\"color:#139213;\">转存成功，请提交确认</span>');\n    });\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        wordImage.init(options, callbacks);\n    });\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/dialogs/wordimage/wordimage.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction addUploadButtonListener(){g(\"saveFile\").addEventListener(\"change\",function(){$(\".image-tip\").html(\"正在转存，请稍后...\"),uploader.addFile(this.files),uploader.upload()})}function addOkListener(){dialog.onok=function(){if(imageUrls.length){var a=editor.getOpt(\"imageUrlPrefix\"),b=domUtils.getElementsByTagName(editor.document,\"img\");editor.fireEvent(\"saveScene\");for(var c,d=0;c=b[d++];){var e=c.getAttribute(\"data-word-image\");if(e)for(var f,g=0;f=imageUrls[g++];)if(e.indexOf(f.name.replace(\" \",\"\"))!=-1){c.src=a+f.url,c.setAttribute(\"_src\",a+f.url),c.setAttribute(\"title\",f.title),domUtils.removeAttributes(c,[\"data-word-image\",\"style\",\"width\",\"height\"]),editor.fireEvent(\"selectionchange\");break}}editor.fireEvent(\"saveScene\")}},dialog.oncancel=function(){}}function showLocalPath(a){var b=editor.selection.getRange().getClosedNode(),c=editor.execCommand(\"wordimage\");if(1==c.length||b&&\"IMG\"==b.tagName)return void(g(a).value=c[0]);var d=c[0],e=d.lastIndexOf(\"/\")||0,f=d.lastIndexOf(\"\\\\\")||0,h=e>f?\"/\":\"\\\\\";d=d.substring(0,d.lastIndexOf(h)+1),g(a).value=d;for(var i=[],j=0,k=c.length;j<k;j++){var b=c[j];i.push(b.substring(b.lastIndexOf(h)+1,b.length))}$(\".image-tip\").html('<span style=\"color:#ff0000;\">请选择:'+i.join(\"、\")+\"共\"+c.length+\"个文件</span>\")}function createCopyButton(a,b){var c=g(b).value;c.startsWith(\"file:////\")&&(c=c.substring(8)),c=decodeURI(c),g(a).setAttribute(\"data-clipboard-text\",c);var d=new Clipboard(\"[data-clipboard-text]\");d.on(\"success\",function(a){g(\"copyButton\").innerHTML=\"复制成功\"})}var wordImage={},g=$G,flashObj,flashContainer;wordImage.init=function(a,b){showLocalPath(\"fileUrl\"),createCopyButton(\"copyButton\",\"fileUrl\"),addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>UEditorPlus 完整演示</title>\n    <meta name=\"viewport\" content=\"width=device-width, minimum-scale=0.5, maximum-scale=5, user-scalable=no\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.all.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"lang/zh-cn/zh-cn.js?49010875\"></script>\n    <script src=\"./plugins/demo/demo.js\"></script>\n    <script>\n        // window.UEDITOR_CONFIG.toolbars[0].push('undo');\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <style>\n        :root {\n            /*--ueditor-top-offset: 20px;*/\n        }\n    </style>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>完整示例</h1>\n    <div>\n        <script id=\"editor\" type=\"text/plain\" style=\"height:300px;\">\n<h1>\n    你好 UEditorPlus\n</h1>\n<p>\n    UEditorPlus 是基于 UEditor 二次开发的富文本编辑器，让 UEditor <span style=\"color: #E36C09;\">焕<span style=\"color: #0070C0;\">然</span><span style=\"color: #31859B;\"><span style=\"color: #00B050;\">一</span><span style=\"color: #FF0000;\">新</span></span></span>\n</p>\n\n<table data-sort=\"sortDisabled\">\n    <tbody>\n        <tr class=\"firstRow\">\n            <td valign=\"top\" style=\"word-break: break-all;\" rowspan=\"1\" colspan=\"3\">\n                我是表格\n            </td>\n        </tr>\n        <tr>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                如果\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                有一天\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                我离开了\n            </td>\n        </tr>\n        <tr>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                怎么才能\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                证明我\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                曾经来过\n            </td>\n        </tr>\n    </tbody>\n</table>\n<pre class=\"brush:html;toolbar:false\">&lt;div&gt;\n  &lt;span&gt;这里是HTML标签&lt;/span&gt;\n&lt;/div&gt;</pre>\n<h2>\n公式支持\n</h2>\n<p>\n    <img src=\"https://r.latexeasy.com/image.svg?%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"\n      data-formula-image=\"%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"/>\n</p>\n<p>\n    <br/>\n</p>\n\n        </script>\n    </div>\n    <div id=\"btns\" style=\"margin-top:20px;\">\n        <div>\n\n            <button onclick=\"alert(UE.getEditor('editor').getAllHtml())\">获得整个html的内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContent())\">获得内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', false)\">写入内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', true)\">追加内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContentTxt())\">获得纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').getPlainTxt())\">获得带格式的纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').hasContents())\">判断是否有内容</button>\n            <button onclick=\"UE.getEditor('editor').focus()\">使编辑器获得焦点</button>\n            <button onmousedown=\"isFocus()\">编辑器是否获得焦点</button>\n            <button onmousedown=\"setBlur()\">编辑器失去焦点</button>\n            <button onclick=\"getSelectText()\">获得当前选中的文本</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('insertHtml', '插入的内容')\">插入内容</button>\n            <button onclick=\"UE.getEditor('editor').setEnabled()\">设定可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setDisabled('fullscreen')\">设定不可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setHide()\">隐藏编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setShow()\">显示编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setHeight(300)\">设置固定高度</button>\n            <button onclick=\"UE.getEditor('editor')\">创建编辑器</button>\n            <button onclick=\"UE.getEditor('editor').destroy()\">销毁编辑器</button>\n            <button onclick=\"alert( UE.getEditor('editor').execCommand('get_auto_save_content') )\">草稿箱-获取</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('clear_auto_save_content'); alert('已清空草稿箱')\">草稿箱-清空\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('set_auto_save_content'); alert('已保存')\">草稿箱-立即保存\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('auto_save_restore')\">草稿箱-恢复到编辑器</button>\n        </div>\n    </div>\n\n    <script type=\"text/javascript\">\n        var ue = UE.getEditor('editor',{\n            // autoHeightEnabled: false,\n        });\n        ue.on('contentchange', function () {\n            // console.log('contentchange', ue.getContent());\n        });\n\n        function isFocus(e) {\n            alert(UE.getEditor('editor').isFocus());\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function setBlur(e) {\n            UE.getEditor('editor').blur();\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function getSelectText() {\n            var range = UE.getEditor('editor').selection.getRange();\n            range.select();\n            var txt = UE.getEditor('editor').selection.getText();\n            alert(txt)\n        }\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/lang/en/en.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N.en={labelMap:{anchor:\"Anchor\",undo:\"Undo\",redo:\"Redo\",bold:\"Bold\",indent:\"Indent\",italic:\"Italic\",underline:\"Underline\",strikethrough:\"Strikethrough\",subscript:\"SubScript\",fontborder:\"text border\",superscript:\"SuperScript\",formatmatch:\"Format Match\",source:\"Source\",blockquote:\"BlockQuote\",pasteplain:\"PastePlain\",selectall:\"SelectAll\",print:\"Print\",preview:\"Preview\",horizontal:\"Horizontal\",removeformat:\"RemoveFormat\",time:\"Time\",date:\"Date\",unlink:\"Unlink\",insertrow:\"InsertRow\",insertcol:\"InsertCol\",mergeright:\"MergeRight\",mergedown:\"MergeDown\",deleterow:\"DeleteRow\",deletecol:\"DeleteCol\",splittorows:\"SplitToRows\",insertcode:\"insert code\",splittocols:\"SplitToCols\",splittocells:\"SplitToCells\",deletecaption:\"DeleteCaption\",inserttitle:\"InsertTitle\",mergecells:\"MergeCells\",deletetable:\"DeleteTable\",cleardoc:\"Clear\",contentimport:\"Content Import\",insertparagraphbeforetable:\"InsertParagraphBeforeTable\",fontfamily:\"FontFamily\",fontsize:\"FontSize\",paragraph:\"Paragraph\",simpleupload:\"Single Image\",insertimage:\"Multi Image\",edittable:\"Edit Table\",edittd:\"Edit Td\",link:\"Link\",emotion:\"Emotion\",spechars:\"Spechars\",searchreplace:\"SearchReplace\",insertvideo:\"Video\",help:\"Help\",justifyleft:\"JustifyLeft\",justifyright:\"JustifyRight\",justifycenter:\"JustifyCenter\",justifyjustify:\"Justify\",forecolor:\"FontColor\",backcolor:\"BackColor\",insertorderedlist:\"OL\",insertunorderedlist:\"UL\",fullscreen:\"FullScreen\",directionalityltr:\"EnterFromLeft\",directionalityrtl:\"EnterFromRight\",rowspacingtop:\"RowSpacingTop\",rowspacingbottom:\"RowSpacingBottom\",pagebreak:\"PageBreak\",insertframe:\"Iframe\",imagenone:\"Default\",imageleft:\"ImageLeft\",imageright:\"ImageRight\",attachment:\"Attachment\",imagecenter:\"ImageCenter\",wordimage:\"WordImage\",formula:\"Formula\",lineheight:\"LineHeight\",edittip:\"EditTip\",customstyle:\"CustomStyle\",scrawl:\"Scrawl\",autotypeset:\"AutoTypeset\",touppercase:\"UpperCase\",tolowercase:\"LowerCase\",template:\"Template\",background:\"Background\",inserttable:\"InsertTable\"},autosave:{autoRestoreTip:\"Has been recovered from draft\"},insertorderedlist:{num:\"1,2,3...\",num1:\"1),2),3)...\",num2:\"(1),(2),(3)...\",cn:\"一,二,三....\",cn1:\"一),二),三)....\",cn2:\"(一),(二),(三)....\",decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ Circle\",disc:\"● Circle dot\",square:\"■ Rectangle \",dash:\"－ Dash\",dot:\"。dot\"},paragraph:{p:\"Paragraph\",h1:\"Title 1\",h2:\"Title 2\",h3:\"Title 3\",h4:\"Title 4\",h5:\"Title 5\",h6:\"Title 6\"},fontfamily:{\"default\":\"Default\",songti:\"Sim Sun\",kaiti:\"Sim Kai\",heiti:\"Sim Hei\",lishu:\"Sim Li\",yahei:\"Microsoft YaHei\",arial:\"Arial\",timesNewRoman:\"Times New Roman\"},customstyle:{tc:\"Title center\",tl:\"Title left\",im:\"Important\",hi:\"Highlight\"},autoupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},simpleupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},elementPathTip:\"Path\",wordCountTip:\"Word Count\",wordCountMsg:\"{#count} characters entered,{#leave} left. \",wordOverFlowMsg:'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',ok:\"OK\",cancel:\"Cancel\",closeDialog:\"closeDialog\",tableDrag:\"You must import the file uiUtils.js before drag! \",autofloatMsg:\"The plugin AutoFloat depends on EditorUI!\",loadconfigError:\"Get server config error.\",loadconfigFormatError:\"Server config format error.\",loadconfigHttpError:\"Get server config http error.\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"Do you confirm to clear the Document?\",contextMenu:{\"delete\":\"Delete\",selectall:\"Select all\",deletecode:\"Delete Code\",cleardoc:\"Clear Document\",confirmclear:\"Do you confirm to clear the Document?\",unlink:\"Unlink\",paragraph:\"Paragraph\",edittable:\"Table property\",aligncell:\"Align cell\",aligntable:\"Table alignment\",tableleft:\"Left float\",tablecenter:\"Center\",tableright:\"Right float\",aligntd:\"Cell alignment\",edittd:\"Cell property\",setbordervisible:\"set table edge visible\",table:\"Table\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justifyjustify:\"Default\",deletetable:\"Delete table\",insertparagraphbefore:\"InsertedBeforeLine\",insertparagraphafter:\"InsertedAfterLine\",inserttable:\"Insert table\",insertcaption:\"Insert caption\",deletecaption:\"Delete Caption\",inserttitle:\"Insert Title\",deletetitle:\"Delete Title\",inserttitlecol:\"Insert Title Col\",deletetitlecol:\"Delete Title Col\",averageDiseRow:\"AverageDise Row\",averageDisCol:\"AverageDis Col\",deleterow:\"Delete row\",deletecol:\"Delete col\",insertrow:\"Insert row\",insertcol:\"Insert col\",insertrownext:\"Insert Row Next\",insertcolnext:\"Insert Col Next\",mergeright:\"Merge right\",mergeleft:\"Merge left\",mergedown:\"Merge down\",mergecells:\"Merge cells\",splittocells:\"Split to cells\",splittocols:\"Split to Cols\",splittorows:\"Split to Rows\",tablesort:\"Table sorting\",enablesort:\"Sorting Enable\",disablesort:\"Sorting Disable\",reversecurrent:\"Reverse current\",orderbyasc:\"Order By ASCII\",reversebyasc:\"Reverse By ASCII\",orderbynum:\"Order By Num\",reversebynum:\"Reverse By Num\",borderbk:\"Border shading\",setcolor:\"interlaced color\",unsetcolor:\"Cancel interlacedcolor\",setbackground:\"Background interlaced\",unsetbackground:\"Cancel Bk interlaced\",redandblue:\"Blue and red\",threecolorgradient:\"Three-color gradient\",copy:\"Copy(Ctrl + c)\",copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",paste:\"Paste(Ctrl + v)\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\"},copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\",anchorMsg:\"Link\",clearColor:\"Clear\",standardColor:\"Standard color\",themeColor:\"Theme color\",property:\"Property\",\"default\":\"Default\",modify:\"Modify\",save:\"Save\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justify:\"Default\",clear:\"Clear\",\"delete\":\"Delete\",clickToUpload:\"Click to upload\",unset:\"Language hasn't been set!\",t_row:\"row\",t_col:\"col\",pasteOpt:\"Paste Option\",pasteSourceFormat:\"Keep Source Formatting\",tagFormat:\"Keep tag\",pasteTextFormat:\"Keep Text only\",more:\"More\",autoTypeSet:{mergeLine:\"Merge empty line\",delLine:\"Del empty line\",removeFormat:\"Remove format\",indent:\"Indent\",alignment:\"Alignment\",imageFloat:\"Image float\",removeFontsize:\"Remove font size\",removeFontFamily:\"Remove fontFamily\",removeHtml:\"Remove redundant HTML code\",pasteFilter:\"Paste filter\",run:\"Done\",symbol:\"Symbol Conversion\",bdc2sb:\"Full-width to Half-width\",tobdc:\"Half-width to Full-width\"},background:{\"static\":{lang_background_normal:\"Normal\",lang_background_local:\"Online\",lang_background_set:\"Background Set\",lang_background_none:\"No Background\",lang_background_colored:\"Colored Background\",lang_background_color:\"Color Set\",lang_background_netimg:\"Net-Image\",lang_background_align:\"Align Type\",lang_background_position:\"Position\",repeatType:{options:[\"Center\",\"Repeat-x\",\"Repeat-y\",\"Tile\",\"Custom\"]}},noUploadImage:\"No pictures has been uploaded！\",toggleSelect:\"Change the active state by click!\\n Image Size: \"},insertimage:{\"static\":{lang_tab_remote:\"Insert\",lang_tab_upload:\"Local\",lang_tab_online:\"Manager\",lang_tab_search:\"Search\",lang_input_url:\"Address:\",lang_input_size:\"Size:\",lang_input_width:\"Width\",lang_input_height:\"Height\",lang_input_border:\"Border:\",lang_input_vhspace:\"Margins:\",lang_input_title:\"Title:\",lang_input_align:\"Image Float Style:\",lang_imgLoading:\"Loading...\",lang_start_upload:\"Start Upload\",lock:{title:\"Lock rate\"},searchType:{title:\"ImageType\",options:[\"News\",\"Wallpaper\",\"emotions\",\"photo\"]},searchTxt:{value:\"Enter the search keyword!\"},searchBtn:{value:\"Search\"},searchReset:{value:\"Clear\"},noneAlign:{title:\"None Float\"},leftAlign:{title:\"Left Float\"},rightAlign:{title:\"Right Float\"},centerAlign:{title:\"Center In A Line\"}},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",uploadNoPreview:\"Can Not Preview\",updateStatusReady:\"Selected _ pictures, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ pictures (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\",remoteLockError:\"Cannot Lock the Proportion between width and height\",numError:\"Please enter the correct Num. e.g 123,400\",imageUrlError:\"The image format may be wrong!\",imageLoadError:\"Error,please check the network or URL！\",searchRemind:\"Enter the search keyword!\",searchLoading:\"Image is loading,please wait...\",searchRetry:\" Sorry,can't find the image,please try again!\"},attachment:{\"static\":{lang_tab_upload:\"Upload\",lang_tab_online:\"Online\",lang_start_upload:\"Start upload\",lang_drop_remind:\"You can drop files here, a single maximum of 300 files\"},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},insertvideo:{\"static\":{lang_tab_insertV:\"Video\",lang_tab_searchV:\"Search\",lang_tab_uploadV:\"Upload\",lang_video_url:\" URL \",lang_video_size:\"Video Size\",lang_videoW:\"Width\",lang_videoH:\"Height\",lang_alignment:\"Alignment\",videoSearchTxt:{value:\"Enter the search keyword!\"},videoType:{options:[\"All\",\"Hot\",\"Entertainment\",\"Funny\",\"Sports\",\"Science\",\"variety\"]},videoSearchBtn:{value:\"Search in Baidu\"},videoSearchReset:{value:\"Clear result\"},lang_input_fileStatus:\" No file uploaded!\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"Video Size\",lang_upload_width:\"Width\",lang_upload_height:\"Height\",lang_upload_alignment:\"Alignment\",lang_format_advice:\"Recommends mp4 format.\"},numError:\"Please enter the correct Num. e.g 123,400\",floatLeft:\"Float left\",floatRight:\"Float right\",\"default\":\"Default\",block:\"Display in block\",urlError:\"The video url format may be wrong!\",loading:\" &nbsp;The video is loading, please wait…\",clickToSelect:\"Click to select\",goToSource:\"Visit source video \",noVideo:\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",browseFiles:\"Open files\",uploadSuccess:\"Upload Successful!\",delSuccessFile:\"Remove from the success of the queue\",delFailSaveFile:\"Remove the save failed file\",statusPrompt:\" file(s) uploaded! \",flashVersionError:\"The current Flash version is too low, please update FlashPlayer,then try again!\",flashLoadingError:\"The Flash failed loading! Please check the path or network state\",fileUploadReady:\"Wait for uploading...\",delUploadQueue:\"Remove from the uploading queue \",limitPrompt1:\"Can not choose more than single\",limitPrompt2:\"file(s)！Please choose again！\",delFailFile:\"Remove failure file\",fileSizeLimit:\"File size exceeds the limit！\",emptyFile:\"Can not upload an empty file！\",fileTypeError:\"File type error！\",unknownError:\"Unknown error！\",fileUploading:\"Uploading,please wait...\",cancelUpload:\"Cancel upload\",netError:\"Network error\",failUpload:\"Upload failed\",serverIOError:\"Server IO error！\",noAuthority:\"No Permission！\",fileNumLimit:\"Upload limit to the number\",failCheck:\"Authentication fails, the upload is skipped!\",fileCanceling:\"Cancel, please wait...\",stopUploading:\"Upload has stopped...\",uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},template:{\"static\":{lang_template_bkcolor:\"Background Color\",lang_template_clear:\"Keep Content\",lang_template_select:\"Select Template\"},blank:\"Blank\",blog:\"Blog\",resume:\"Resume\",richText:\"Rich Text\",scrPapers:\"Scientific Papers\"},scrawl:{\"static\":{lang_input_previousStep:\"Previous\",lang_input_nextsStep:\"Next\",lang_input_clear:\"Clear\",lang_input_addPic:\"AddImage\",lang_input_ScalePic:\"ScaleImage\",lang_input_removePic:\"RemoveImage\",J_imgTxt:{title:\"Add background image\"}},noScarwl:\"No paint, a white paper...\",scrawlUpLoading:\"Image is uploading, please wait...\",continueBtn:\"Try again\",imageError:\"Image failed to load!\",backgroundUploading:\"Image is uploading,please wait...\"},anchor:{\"static\":{lang_input_anchorName:\"Anchor Name:\"}},emotion:{\"static\":{lang_input_choice:\"Choice\",lang_input_Tuzki:\"Tuzki\",lang_input_lvdouwa:\"LvDouWa\",lang_input_BOBO:\"BOBO\",lang_input_babyCat:\"BabyCat\",lang_input_bubble:\"Bubble\",lang_input_youa:\"YouA\"}},help:{\"static\":{lang_input_about:\"About UEditor Plus\",lang_input_shortcuts:\"Shortcuts\",lang_input_introduction:\"UEditor Plus is based on UEditor.\",lang_Txt_shortcuts:\"Shortcuts\",lang_Txt_func:\"Function\",lang_Txt_bold:\"Bold\",lang_Txt_copy:\"Copy\",lang_Txt_cut:\"Cut\",lang_Txt_Paste:\"Paste\",lang_Txt_undo:\"Undo\",lang_Txt_redo:\"Redo\",lang_Txt_italic:\"Italic\",lang_Txt_underline:\"Underline\",lang_Txt_selectAll:\"Select All\",lang_Txt_visualEnter:\"Submit\",lang_Txt_fullscreen:\"Fullscreen\"}},insertframe:{\"static\":{lang_input_address:\"Address：\",lang_input_width:\"Width：\",lang_input_height:\"height：\",lang_input_isScroll:\"Enable scrollbars：\",lang_input_frameborder:\"Show frame border：\",lang_input_alignMode:\"Alignment：\",align:{title:\"Alignment\",options:[\"Default\",\"Left\",\"Right\",\"Center\"]}},enterAddress:\"Please enter an address!\"},link:{\"static\":{lang_input_text:\"Text：\",lang_input_url:\"URL：\",lang_input_title:\"Title：\",lang_input_target:\"open in new window：\"},validLink:\"Supports only effective when a link is selected\",httpPrompt:'The hyperlink you enter should start with \"http|https|ftp://\"!'},searchreplace:{\"static\":{lang_tab_search:\"Search\",lang_tab_replace:\"Replace\",lang_search1:\"Search\",lang_search2:\"Search\",lang_replace:\"Replace\",lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_case_sensitive1:\"Case sense\",lang_case_sensitive2:\"Case sense\",nextFindBtn:{value:\"Next\"},preFindBtn:{value:\"Preview\"},nextReplaceBtn:{value:\"Next\"},preReplaceBtn:{value:\"Preview\"},repalceBtn:{value:\"Replace\"},repalceAllBtn:{value:\"Replace all\"}},getEnd:\"Has the search to the bottom!\",getStart:\"Has the search to the top!\",countMsg:\"Altogether replaced {#count} character(s)!\"},spechars:{\"static\":{},tsfh:\"Special\",lmsz:\"Roman\",szfh:\"Numeral\",rwfh:\"Japanese\",xlzm:\"The Greek\",ewzm:\"Russian\",pyzm:\"Phonetic\",yyyb:\"English\",zyzf:\"Others\"},edittable:{\"static\":{lang_tableStyle:\"Table style\",lang_insertCaption:\"Add table header row\",lang_insertTitle:\"Add table title row\",lang_insertTitleCol:\"Add table title col\",lang_tableSize:\"Automatically adjust table size\",lang_autoSizeContent:\"Adaptive by form text\",lang_orderbycontent:\"Table of contents sortable\",lang_autoSizePage:\"Page width adaptive\",lang_example:\"Example\",lang_borderStyle:\"Table Border\",lang_color:\"Color:\"},captionName:\"Caption\",titleName:\"Title\",cellsName:\"text\",errorMsg:\"There are merged cells, can not sort.\"},edittip:{\"static\":{lang_delRow:\"Delete entire row\",lang_delCol:\"Delete entire col\"}},edittd:{\"static\":{lang_tdBkColor:\"Background Color:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"The re-save step\",uploadBtn:{src:\"upload.png\",alt:\"Upload\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"},fileType:\"Image\",flashError:\"Flash initialization failed!\",netError:\"Network error! Please try again!\",copySuccess:\"URL has been copied!\",flashI18n:{lang:encodeURI('{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}'),uploadingTF:encodeURI('{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}'),imageTF:encodeURI('{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}'),textEncoding:\"utf-8\",addImageSkinURL:\"addImage.png\",allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",deleteBtnEnableSkinURL:\"deleteEnable.png\",deleteBtnDisableSkinURL:\"deleteDisable.png\",backgroundURL:\"\",listBackgroundURL:\"\",buttonURL:\"button.png\"}}};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/lang/zh-cn/zh-cn.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N[\"zh-cn\"]={labelMap:{anchor:\"锚点\",undo:\"撤销\",redo:\"重做\",bold:\"加粗\",indent:\"首行缩进\",italic:\"斜体\",underline:\"下划线\",strikethrough:\"删除线\",subscript:\"下标\",fontborder:\"字符边框\",superscript:\"上标\",formatmatch:\"格式刷\",source:\"源代码\",blockquote:\"引用\",pasteplain:\"纯文本粘贴模式\",selectall:\"全选\",print:\"打印\",preview:\"预览\",horizontal:\"分隔线\",removeformat:\"清除格式\",time:\"时间\",date:\"日期\",unlink:\"取消链接\",insertrow:\"前插入行\",insertcol:\"前插入列\",mergeright:\"右合并单元格\",mergedown:\"下合并单元格\",deleterow:\"删除行\",deletecol:\"删除列\",splittorows:\"拆分成行\",splittocols:\"拆分成列\",splittocells:\"完全拆分单元格\",deletecaption:\"删除表格标题\",inserttitle:\"插入标题\",mergecells:\"合并多个单元格\",deletetable:\"删除表格\",cleardoc:\"清空文档\",contentimport:\"导入内容\",insertparagraphbeforetable:\"表格前插入行\",insertcode:\"代码语言\",fontfamily:\"字体\",fontsize:\"字号\",paragraph:\"段落格式\",simpleupload:\"单图上传\",insertimage:\"插入图片\",edittable:\"表格属性\",edittd:\"单元格属性\",link:\"超链接\",emotion:\"表情\",spechars:\"特殊字符\",searchreplace:\"查询替换\",insertvideo:\"视频\",insertaudio:\"音频\",help:\"帮助\",justifyleft:\"居左对齐\",justifyright:\"居右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",forecolor:\"字体颜色\",backcolor:\"背景色\",insertorderedlist:\"有序列表\",insertunorderedlist:\"无序列表\",fullscreen:\"全屏\",directionalityltr:\"从左向右输入\",directionalityrtl:\"从右向左输入\",rowspacingtop:\"段前距\",rowspacingbottom:\"段后距\",pagebreak:\"分页\",insertframe:\"插入Iframe\",imagenone:\"默认\",imageleft:\"左浮动\",imageright:\"右浮动\",attachment:\"附件\",imagecenter:\"居中\",wordimage:\"图片转存\",formula:\"公式\",lineheight:\"行间距\",edittip:\"编辑提示\",customstyle:\"自定义标题\",autotypeset:\"自动排版\",touppercase:\"字母大写\",tolowercase:\"字母小写\",background:\"背景\",template:\"模板\",scrawl:\"涂鸦\",inserttable:\"插入表格\"},autosave:{autoRestoreTip:\"已自动从草稿箱恢复\"},insertorderedlist:{decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ 大圆圈\",disc:\"● 小黑点\",square:\"■ 小方块 \"},paragraph:{p:\"段落\",h1:\"标题 1\",h2:\"标题 2\",h3:\"标题 3\",h4:\"标题 4\",h5:\"标题 5\",h6:\"标题 6\"},fontfamily:{\"default\":\"默认\",songti:\"宋体\",kaiti:\"楷体\",heiti:\"黑体\",lishu:\"隶书\",yahei:\"微软雅黑\",arial:\"arial\",timesNewRoman:\"times new roman\"},customstyle:{tc:\"标题居中\",tl:\"标题居左\",im:\"强调\",hi:\"明显强调\"},autoupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},simpleupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},elementPathTip:\"元素路径\",wordCountTip:\"字数统计\",wordCountMsg:\"{#count} / {#leave}\",wordOverFlowMsg:'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',ok:\"确认\",cancel:\"取消\",closeDialog:\"关闭对话框\",tableDrag:\"表格拖动必须引入uiUtils.js文件！\",autofloatMsg:\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",loadconfigError:\"获取后台配置项请求出错，上传功能将不能正常使用！\",loadconfigFormatError:\"后台配置项返回格式出错，上传功能将不能正常使用！\",loadconfigHttpError:\"请求后台配置项http错误，上传功能将不能正常使用！\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"确定清空当前文档么？\",contextMenu:{\"delete\":\"删除\",selectall:\"全选\",deletecode:\"删除代码\",cleardoc:\"清空文档\",confirmclear:\"确定清空当前文档么？\",unlink:\"删除超链接\",paragraph:\"段落格式\",edittable:\"表格属性\",aligntd:\"单元格对齐方式\",aligntable:\"表格对齐方式\",tableleft:\"左浮动\",tablecenter:\"居中显示\",tableright:\"右浮动\",edittd:\"单元格属性\",setbordervisible:\"设置表格边线可见\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",table:\"表格\",inserttable:\"插入表格\",deletetable:\"删除表格\",insertparagraphbefore:\"前插入段落\",insertparagraphafter:\"后插入段落\",deleterow:\"删除当前行\",deletecol:\"删除当前列\",insertrow:\"前插入行\",insertcol:\"左插入列\",insertrownext:\"后插入行\",insertcolnext:\"右插入列\",insertcaption:\"插入表格名称\",deletecaption:\"删除表格名称\",inserttitle:\"插入表格标题行\",deletetitle:\"删除表格标题行\",inserttitlecol:\"插入表格标题列\",deletetitlecol:\"删除表格标题列\",averageDiseRow:\"平均分布各行\",averageDisCol:\"平均分布各列\",mergeright:\"向右合并\",mergeleft:\"向左合并\",mergedown:\"向下合并\",mergecells:\"合并单元格\",splittocells:\"完全拆分单元格\",splittocols:\"拆分成列\",splittorows:\"拆分成行\",tablesort:\"表格排序\",enablesort:\"设置表格可排序\",disablesort:\"取消表格可排序\",reversecurrent:\"逆序当前\",orderbyasc:\"按ASCII字符升序\",reversebyasc:\"按ASCII字符降序\",orderbynum:\"按数值大小升序\",reversebynum:\"按数值大小降序\",borderbk:\"边框底纹\",setcolor:\"表格隔行变色\",unsetcolor:\"取消表格隔行变色\",setbackground:\"选区背景隔行\",unsetbackground:\"取消选区背景\",redandblue:\"红蓝相间\",threecolorgradient:\"三色渐变\",copy:\"复制(Ctrl + c)\",copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",paste:\"粘贴(Ctrl + v)\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\"},copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\",anchorMsg:\"链接\",clearColor:\"清空颜色\",standardColor:\"标准颜色\",themeColor:\"主题颜色\",property:\"属性\",\"default\":\"默认\",modify:\"修改\",save:\"保存\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中\",justify:\"默认\",clear:\"清除\",\"delete\":\"删除\",clickToUpload:\"点击上传\",unset:\"尚未设置语言文件\",t_row:\"行\",t_col:\"列\",more:\"更多\",pasteOpt:\"粘贴选项\",pasteSourceFormat:\"保留源格式\",tagFormat:\"只保留标签\",pasteTextFormat:\"只保留文本\",autoTypeSet:{mergeLine:\"合并空行\",delLine:\"清除空行\",removeFormat:\"清除格式\",indent:\"首行缩进\",alignment:\"对齐方式\",imageFloat:\"图片浮动\",removeFontsize:\"清除字号\",removeFontFamily:\"清除字体\",removeHtml:\"清除冗余HTML代码\",pasteFilter:\"粘贴过滤\",run:\"执行\",symbol:\"符号转换\",bdc2sb:\"全角转半角\",tobdc:\"半角转全角\"},background:{\"static\":{lang_background_normal:\"背景设置\",lang_background_local:\"在线图片\",lang_background_set:\"选项\",lang_background_none:\"无背景色\",lang_background_colored:\"有背景色\",lang_background_color:\"颜色设置\",lang_background_netimg:\"网络图片\",lang_background_align:\"对齐方式\",lang_background_position:\"精确定位\",repeatType:{options:[\"居中\",\"横向重复\",\"纵向重复\",\"平铺\",\"自定义\"]}},noUploadImage:\"当前未上传过任何图片！\",toggleSelect:\"单击可切换选中状态\\n原图尺寸: \"},insertimage:{\"static\":{lang_tab_remote:\"插入图片\",lang_tab_upload:\"本地上传\",lang_tab_online:\"在线管理\",lang_input_url:\"地 址：\",lang_input_size:\"大 小：\",lang_input_width:\"宽度\",lang_input_height:\"高度\",lang_input_border:\"边 框：\",lang_input_vhspace:\"边 距：\",lang_input_title:\"描 述：\",lang_input_align:\"图片浮动方式：\",lang_imgLoading:\"　图片加载中……\",lang_start_upload:\"开始上传\",lock:{title:\"锁定宽高比例\"},searchType:{title:\"图片类型\",options:[\"新闻\",\"壁纸\",\"表情\",\"头像\"]},searchTxt:{value:\"请输入搜索关键词\"},searchBtn:{value:\"百度一下\"},searchReset:{value:\"清空搜索\"},noneAlign:{title:\"无浮动\"},leftAlign:{title:\"左浮动\"},rightAlign:{title:\"右浮动\"},centerAlign:{title:\"居中独占一行\"}},uploadSelectFile:\"点击选择图片\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",uploadNoPreview:\"不能预览\",updateStatusReady:\"选中_张图片，共_KB。\",updateStatusConfirm:\"已成功上传_张照片，_张照片上传失败\",updateStatusFinish:\"共_张（_KB），_张上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\",remoteLockError:\"宽高不正确,不能所定比例\",numError:\"请输入正确的长度或者宽度值！例如：123，400\",imageUrlError:\"不允许的图片格式或者图片域！\",imageLoadError:\"图片加载失败！请检查链接地址或网络状态！\",searchRemind:\"请输入搜索关键词\",searchLoading:\"图片加载中，请稍后……\",searchRetry:\" :( ，抱歉，没有找到图片！请重试一次！\"},attachment:{\"static\":{lang_tab_upload:\"上传附件\",lang_tab_online:\"在线附件\",lang_start_upload:\"开始上传\",lang_drop_remind:\"可以将文件拖到这里，单次最多可选100个文件\"},uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"已成功上传_个文件，_个文件上传失败\",updateStatusFinish:\"共_个（_KB），_个上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertvideo:{\"static\":{lang_tab_insertV:\"插入视频\",lang_tab_searchV:\"搜索视频\",lang_tab_uploadV:\"上传视频\",lang_video_url:\"视频网址\",lang_video_size:\"视频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"视频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的视频地址有误，请检查后再试！\",loading:\" &nbsp;视频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源视频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertaudio:{\"static\":{lang_tab_insertV:\"插入音频\",lang_tab_searchV:\"搜索音频\",lang_tab_uploadV:\"上传音频\",lang_video_url:\"音频网址\",lang_video_size:\"音频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"音频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的音频地址有误，请检查后再试！\",loading:\" &nbsp;音频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源音频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的音频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},template:{\"static\":{lang_template_bkcolor:\"背景颜色\",lang_template_clear:\"保留原有内容\",lang_template_select:\"选择模板\"},blank:\"空白文档\",blog:\"博客文章\",resume:\"个人简历\",richText:\"图文混排\",sciPapers:\"科技论文\"},scrawl:{\"static\":{lang_input_previousStep:\"上一步\",lang_input_nextsStep:\"下一步\",lang_input_clear:\"清空\",lang_input_addPic:\"添加背景\",lang_input_ScalePic:\"缩放背景\",lang_input_removePic:\"删除背景\",J_imgTxt:{title:\"添加背景图片\"}},noScarwl:\"尚未作画，白纸一张~\",scrawlUpLoading:\"涂鸦上传中,别急哦~\",continueBtn:\"继续\",imageError:\"糟糕，图片读取失败了！\",backgroundUploading:\"背景图片上传中,别急哦~\"},anchor:{\"static\":{lang_input_anchorName:\"锚点名字：\"}},emotion:{\"static\":{lang_input_choice:\"精选\",lang_input_Tuzki:\"兔斯基\",lang_input_BOBO:\"BOBO\",lang_input_lvdouwa:\"绿豆蛙\",lang_input_babyCat:\"baby猫\",lang_input_bubble:\"泡泡\",lang_input_youa:\"有啊\"}},help:{\"static\":{lang_input_about:\"关于 UEditor Plus\",lang_input_shortcuts:\"快捷键\",lang_input_introduction:\"UEditor Plus 是基于百度UEditor二次开发的所见即所得富文本web编辑器，主要丰富也界面样式，注重用户体验等特点。基于Apache 2.0协议开源，允许自由使用和修改代码。\",lang_Txt_shortcuts:\"快捷键\",lang_Txt_func:\"功能\",lang_Txt_bold:\"给选中字设置为加粗\",lang_Txt_copy:\"复制选中内容\",lang_Txt_cut:\"剪切选中内容\",lang_Txt_Paste:\"粘贴\",lang_Txt_undo:\"重新执行上次操作\",lang_Txt_redo:\"撤销上一次操作\",lang_Txt_italic:\"给选中字设置为斜体\",lang_Txt_underline:\"给选中字加下划线\",lang_Txt_selectAll:\"全部选中\",lang_Txt_visualEnter:\"软回车\",lang_Txt_fullscreen:\"全屏\"}},insertframe:{\"static\":{lang_input_address:\"地址：\",lang_input_width:\"宽度：\",lang_input_height:\"高度：\",lang_input_isScroll:\"允许滚动条：\",lang_input_frameborder:\"显示框架边框：\",lang_input_alignMode:\"对齐方式：\",align:{title:\"对齐方式\",options:[\"默认\",\"左对齐\",\"右对齐\",\"居中\"]}},enterAddress:\"请输入地址!\"},link:{\"static\":{lang_input_text:\"文本内容：\",lang_input_url:\"链接地址：\",lang_input_title:\"标题：\",lang_input_target:\"是否在新窗口打开：\"},validLink:\"只支持选中一个链接时生效\",httpPrompt:\"您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀\"},searchreplace:{\"static\":{lang_tab_search:\"查找\",lang_tab_replace:\"替换\",lang_search1:\"查找\",lang_search2:\"查找\",lang_replace:\"替换\",lang_searchReg:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_searchReg1:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_case_sensitive1:\"区分大小写\",lang_case_sensitive2:\"区分大小写\",nextFindBtn:{value:\"下一个\"},preFindBtn:{value:\"上一个\"},nextReplaceBtn:{value:\"下一个\"},preReplaceBtn:{value:\"上一个\"},repalceBtn:{value:\"替换\"},repalceAllBtn:{value:\"全部替换\"}},getEnd:\"已经搜索到文章末尾！\",getStart:\"已经搜索到文章头部\",countMsg:\"总共替换了{#count}处！\"},spechars:{\"static\":{},tsfh:\"特殊字符\",lmsz:\"罗马字符\",szfh:\"数学字符\",rwfh:\"日文字符\",xlzm:\"希腊字母\",ewzm:\"俄文字符\",pyzm:\"拼音字母\",yyyb:\"英语音标\",zyzf:\"其他\"},edittable:{\"static\":{lang_tableStyle:\"表格样式\",lang_insertCaption:\"添加表格名称行\",lang_insertTitle:\"添加表格标题行\",lang_insertTitleCol:\"添加表格标题列\",lang_orderbycontent:\"使表格内容可排序\",lang_tableSize:\"自动调整表格尺寸\",lang_autoSizeContent:\"按表格文字自适应\",lang_autoSizePage:\"按页面宽度自适应\",lang_example:\"示例\",lang_borderStyle:\"表格边框\",lang_color:\"颜色:\"},captionName:\"表格名称\",titleName:\"标题\",cellsName:\"内容\",errorMsg:\"有合并单元格，不可排序\"},edittip:{\"static\":{lang_delRow:\"删除整行\",lang_delCol:\"删除整列\"}},edittd:{\"static\":{lang_tdBkColor:\"背景颜色:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"转存步骤\",uploadBtn:{src:\"upload.png\",alt:\"上传\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"},fileType:\"图片\",flashError:\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",netError:\"网络连接错误，请重试！\",copySuccess:\"图片地址已经复制！\",flashI18n:{}}};"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/plugins/demo/demo.js",
    "content": "/*! UEditorPlus v2.0.0*/\n"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/themes/default/css/ueditor.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--edui-color-active-bg:rgba(200,200,200,.3);--edui-color-border:#EEE;--edui-bg-toolbar:#FFF;--edui-color-muted:#CCC}@font-face{font-family:edui-iconfont;src:url(\"data:font/woff2;base64,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\") format('woff2'),url(\"data:font/woff;base64,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\") format('woff'),url(\"data:font/ttf;base64,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b2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBlAGQAdQBpAC0AaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQADmNvbnRlbnQtaW1wb3J0BXNvdW5kBXJpZ2h0D2ljX2ltYWdlX3VwbG9hZAVjaGVjawZpZnJhbWUQQmFja2dyb3VuZEVmZmVjdANsdHIDcnRsC2ZpbmRyZXBsYWNlCWljcHJldmlldwVyaXFpMgtldXJvLXN5bWJvbAVtdXNpYwRoZWxwCWhhbmRfZHJhdwVwcmludAR0aW1lBWJhaWR1C0dvb2dsZS1NYXBzCmltYWdlLW5vbmUMaW1hZ2UtY2VudGVyCmltYWdlLWxlZnQLaW1hZ2UtcmlnaHQJY2xlYXItZG9jCnBhZ2UtYnJlYWsGYXV0aG9yCndvcmQtaW1hZ2ULdG91cHBlcmNhc2ULdG9sb3dlcmNhc2UKaG9yaXpvbnRhbA9tZXJnZS1kb3duLWNlbGwLbWVyZ2UtY2VsbHMQbWVyZ2UtcmlnaHQtY2VsbA1zcGxpdC10by1yb3dzDXNwbGl0LXRvLWNvbHMOc3BsaXQtdG8tY2VsbHMOaW5zZXJ0cm93YWJvdmUaMjRnbC1wYXJhZ3JhcGhNYXJnaW5Cb3R0b20XMjRnbC1wYXJhZ3JhcGhNYXJnaW5Ub3ANdW5vcmRlcmVkbGlzdAxsaXN0LW9yZGVyZWQUc3BsaXQtY2VsbHMtdmVydGljYWwWc3BsaXQtY2VsbHMtaG9yaXpvbnRhbAphdHRhY2htZW50CXN1YnNjcmlwdAlzZWxlY3RhbGwLc3VwZXJzY3JpcHQDbWFwCWJnLWNvbG9ycw1hZGRfY29sX2FmdGVyDmFkZF9jb2xfYmVmb3JlDWFkZF9yb3dfYWZ0ZXIOYWRkX3Jvd19iZWZvcmUKZGVsZXRlX2NvbA1jb21iaW5lX2NlbGxzAm9sCmRlbGV0ZV9yb3cMZGVsZXRlX3RhYmxlAnVsBHJlZG8FdGFibGUEdW5kbwVwYXN0ZQZ1cGxvYWQFYnJ1c2gKdGV4dF9xdW90ZRFpbnNlcnQtcm93LWJvdHRvbRFmdWxsc2NyZWVuLWV4cGFuZA5pbnNlcnQtcm93LXRvcAh0ZW1wbGF0ZRJmb3JtYXQtaW1hZ2UtcmlnaHQRZm9ybWF0LWltYWdlLWxlZnQTZm9ybWF0LWltYWdlLWNlbnRlcgtsaW5lLWhlaWdodBdBZnRlcmNsYXNzVGV4dC1PdXRsaW5lZAVzbWlsZQ1hbGlnbi1qdXN0aWZ5B2Zvcm11bGEKYW5nbGUtZG93bgVjbG9zZQptYWdpYy13YW5kBmVyYXNlcgRodG1sBnVubGluawZpbmRlbnQLYWxpZ24tcmlnaHQMYWxpZ24tY2VudGVyCmFsaWduLWxlZnQLZm9udC1jb2xvcnMEcGxheQl1bmRlcmxpbmUFaW1hZ2UGaXRhbGljBGxpbmsGc3RyaWtlBGNvZGUEYm9sZAAAAAAA\") format('truetype')}.edui-default{accent-color:#333}.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden;line-height:30px}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:inline-block;vertical-align:middle}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:pointer}.edui-default span.edui-clickable{color:#666;cursor:pointer;text-decoration:none}.edui-default span.edui-clickable:hover{color:#333}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default span.edui-popup-action-item{margin-right:5px}.edui-default span.edui-popup-action-item:last-child{margin-right:0}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid var(--edui-color-border);background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid var(--edui-color-border);background-color:var(--edui-bg-toolbar);-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid var(--edui-color-border);line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;padding:0 5px;color:var(--edui-color-muted)}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px;color:var(--edui-color-muted)}.edui-default .edui-editor-breadcrumb span{cursor:pointer;color:var(--edui-color-muted);line-height:16px;display:inline-block}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{font-size:13px;box-shadow:0 0 10px #0001f;transition:.25s;color:#666;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap;cursor:pointer}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#EEE;border:1px solid #EEE;padding:0;border-radius:3px}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;cursor:pointer}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:24px;line-height:22px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-menuitem .edui-menuitem-body .edui-icon:before{display:none}.edui-default .edui-contextmenu .edui-popup-content .edui-menuitem-body .edui-icon:before{display:inline-block}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon{line-height:20px;text-align:center}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon:before{content:\"\\e7fc\";font-size:10px;display:inline-block}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:30px;line-height:30px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid var(--edui-color-border);background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox .edui-combox-body>div{vertical-align:top}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:30px!important;width:30px!important;background-position:center;background-repeat:no-repeat;font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;text-align:center;cursor:pointer}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative;border-radius:3px}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid #EEE;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-toolbar-button-custom{display:inline-block!important;line-height:30px;vertical-align:middle;padding:0 10px;border-radius:3px;margin:0 5px}.edui-default .edui-toolbar-button-custom:hover{background:#EEE}.edui-default .edui-for-undo .edui-icon:before{content:\"\\e60f\"}.edui-default .edui-for-redo .edui-icon:before{content:\"\\e60c\"}.edui-default .edui-for-bold .edui-icon:before{content:\"\\e628\"}.edui-default .edui-for-italic .edui-icon:before{content:\"\\e62a\"}.edui-default .edui-for-fontborder .edui-icon:before{content:'\\e62d'}.edui-default .edui-for-underline .edui-icon:before{content:\"\\e63e\"}.edui-default .edui-for-strikethrough .edui-icon:before{content:\"\\e64a\"}.edui-default .edui-for-subscript .edui-icon:before{content:\"\\ece9\"}.edui-default .edui-for-superscript .edui-icon:before{content:\"\\e83e\"}.edui-default .edui-for-blockquote .edui-icon:before{content:\"\\e6d8\"}.edui-default .edui-for-forecolor .edui-icon:before{content:\"\\e7f8\"}.edui-default .edui-for-backcolor .edui-icon:before{content:\"\\e71a\"}.edui-default .edui-for-inserttable .edui-icon:before{content:\"\\e60d\"}.edui-default .edui-for-autotypeset .edui-icon:before{content:\"\\e662\"}.edui-default .edui-for-justifyleft .edui-icon:before{content:\"\\e7f7\"}.edui-default .edui-for-justifycenter .edui-icon:before{content:\"\\e7f6\"}.edui-default .edui-for-justifyright .edui-icon:before{content:\"\\e7f5\"}.edui-default .edui-for-justifyjustify .edui-icon:before{content:\"\\e87c\"}.edui-default .edui-for-insertorderedlist .edui-icon:before{content:\"\\e737\"}.edui-default .edui-for-insertunorderedlist .edui-icon:before{content:\"\\e7f4\"}.edui-default .edui-for-lineheight .edui-icon:before{content:\"\\e638\"}.edui-default .edui-for-rowspacingbottom .edui-icon:before{content:'\\eb09'}.edui-default .edui-for-rowspacingtop .edui-icon:before{content:'\\eb0a'}.edui-default .edui-for-horizontal .edui-icon:before{content:\"\\e617\"}.edui-default .edui-for-link .edui-icon:before{content:\"\\e648\"}.edui-default .edui-for-code .edui-icon:before{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon:before{content:\"\\e605\"}.edui-default .edui-for-insertframe .edui-icon:before{content:\"\\e6c0\"}.edui-default .edui-for-emoticon .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-spechars .edui-icon:before{content:\"\\e891\"}.edui-default .edui-for-help .edui-icon:before{content:\"\\e752\"}.edui-default .edui-for-print .edui-icon:before{content:\"\\e67a\"}.edui-default .edui-for-preview .edui-icon:before{content:\"\\e644\"}.edui-default .edui-for-selectall .edui-icon:before{content:'\\e62f'}.edui-default .edui-for-searchreplace .edui-icon:before{content:\"\\eb6c\"}.edui-default .edui-for-contentimport .edui-icon:before{content:\"\\e6f1\"}.edui-default .edui-for-map .edui-icon:before{content:\"\\e649\"}.edui-default .edui-for-insertvideo .edui-icon:before{content:\"\\e636\"}.edui-default .edui-for-insertaudio .edui-icon:before{content:\"\\e77b\"}.edui-default .edui-for-time .edui-icon:before{content:\"\\e680\"}.edui-default .edui-for-date .edui-icon:before{content:\"\\e697\"}.edui-default .edui-for-cut .edui-icon:before{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon:before{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon:before{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon:before{content:\"\\e637\"}.edui-default .edui-for-pasteplain .edui-icon:before{content:'\\edfb'}.edui-default .edui-for-directionalityltr .edui-icon:before{content:\"\\e623\"}.edui-default .edui-for-directionalityrtl .edui-icon:before{content:\"\\e7bc\"}.edui-default .edui-for-source .edui-icon:before{content:\"\\e608\"}.edui-default .edui-for-removeformat .edui-icon:before{content:\"\\e782\"}.edui-default .edui-for-unlink .edui-icon:before{content:\"\\e92b\"}.edui-default .edui-for-touppercase .edui-icon:before{content:\"\\e619\"}.edui-default .edui-for-tolowercase .edui-icon:before{content:\"\\e61a\"}.edui-default .edui-for-insertrow .edui-icon:before{content:\"\\e603\"}.edui-default .edui-for-insertrownext .edui-icon:before{content:\"\\e602\"}.edui-default .edui-for-insertcol .edui-icon:before{content:\"\\e601\"}.edui-default .edui-for-insertcolnext .edui-icon:before{content:\"\\e600\"}.edui-default .edui-for-mergeright .edui-icon:before{content:\"\\e615\"}.edui-default .edui-for-mergedown .edui-icon:before{content:\"\\e613\"}.edui-default .edui-for-splittorows .edui-icon:before{content:\"\\e610\"}.edui-default .edui-for-splittocols .edui-icon:before{content:\"\\e611\"}.edui-default .edui-for-insertparagraphbeforetable .edui-icon:before{content:'\\e901'}.edui-default .edui-for-deleterow .edui-icon:before{content:\"\\e609\"}.edui-default .edui-for-deletecol .edui-icon:before{content:\"\\e604\"}.edui-default .edui-for-splittocells .edui-icon:before{content:\"\\e612\"}.edui-default .edui-for-mergecells .edui-icon:before{content:\"\\e606\"}.edui-default .edui-for-deletetable .edui-icon:before{content:\"\\e60a\"}.edui-default .edui-for-cleardoc .edui-icon:before{content:\"\\e61e\"}.edui-default .edui-for-fullscreen .edui-icon:before{content:\"\\e675\"}.edui-default .edui-for-anchor .edui-icon:before{content:\"\\e61b\"}.edui-default .edui-for-pagebreak .edui-icon:before{content:\"\\e61d\"}.edui-default .edui-for-imagenone .edui-icon:before{content:\"\\e61f\"}.edui-default .edui-for-imageleft .edui-icon:before{content:\"\\e621\"}.edui-default .edui-for-wordimage .edui-icon:before{content:\"\\e618\"}.edui-default .edui-for-imageright .edui-icon:before{content:\"\\e622\"}.edui-default .edui-for-imagecenter .edui-icon:before{content:\"\\e620\"}.edui-default .edui-for-indent .edui-icon:before{content:\"\\e7f3\"}.edui-default .edui-for-outdent .edui-icon:before{background-position:-540px 0}.edui-default .edui-for-table .edui-icon:before{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon:before{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon:before{content:\"\\e6ad\"}.edui-default .edui-for-delete .edui-icon:before{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon:before{content:\"\\e704\"}.edui-default .edui-for-edittd .edui-icon:before{background-position:-700px -40px}.edui-default .edui-for-scrawl .edui-icon:before{content:\"\\e70b\"}.edui-default .edui-for-background .edui-icon:before{content:\"\\e624\"}.edui-default .edui-for-formula .edui-icon:before{content:\"\\e616\"}.edui-default .edui-for-aligntd .edui-icon:before{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon:before{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon:before{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon:before{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon:before{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon:before{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon:before{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon:before{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon:before{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon:before{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon:before{background-position:-480px 0}.edui-default .edui-for-inserttitlecol .edui-icon:before{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon:before{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon:before{content:\"\\edfc\"}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow:before,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px;vertical-align:middle}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px;border-radius:3px;display:flex}.edui-default .edui-toolbar .edui-splitborder{width:0;height:30px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin-top:1px}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{font-size:13px;box-shadow:0 0 10px rgba(0,0,0,.2);transition:.25s;color:#333;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-popup .edui-bordereraser{background-color:transparent;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff;border-radius:0 0 5px 5px;height:40px}.edui-default .edui-dialog-titlebar{height:30px;background:#FFF;position:relative;cursor:move;border-radius:5px 5px 0 0}.edui-default .edui-dialog-caption{font-weight:700;font-size:14px;line-height:30px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:30px;padding:5px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:10px;top:10px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon{width:20px;height:20px;font-family:edui-iconfont;line-height:20px;font-size:20px;text-align:center;color:#999;vertical-align:top}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon:before{content:\"\\e6a7\"}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body .edui-icon{color:#333}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body .edui-icon{display:none!important}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{height:30px;font-size:12px;line-height:28px;cursor:pointer;border-radius:4px;text-align:center;background-color:#F8F8F8;border:1px solid #EEE;padding:0 15px}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:230px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-formula .edui-dialog-content{width:800px;height:400px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-insertaudio .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-contentimport .edui-dialog-content{width:620px;height:400px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:30px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left;border-radius:3px;position:relative}.edui-default .edui-colorpicker-preview input{padding:0;left:0;border:0;position:absolute;top:0;width:100%;height:100%;border-radius:3px;opacity:0;cursor:pointer}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:20px;height:20px;border:1px solid #333;padding:0 5px;cursor:pointer;border-radius:3px;box-sizing:content-box}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer;border-radius:2px}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-autotypesetpicker-body td button{border:0;padding:5px 10px;font-size:13px;line-height:1.5;border-radius:4rem;-webkit-appearance:none;cursor:pointer;margin-bottom:5px;background-color:#EEE}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:1px;height:20px;margin:5px;background:var(--edui-color-border)}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:5px;width:20px;height:4px}.edui-default .edui-for-emotion .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-hassubmenu .edui-arrow:before{content:\"\\e665\"}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:var(--edui-color-active-bg);border-radius:3px;border:1px solid var(--edui-color-active-bg)}.edui-default .edui-shortcutmenu{padding:2px;white-space:nowrap;height:auto;background-color:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.2)}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}.edui-quick-operate{position:relative;margin:-10px;height:40px;background:#FFF;width:50px!important;border-radius:4px}.edui-quick-operate:hover .edui-quick-operate-menu{display:block}.edui-quick-operate-status{display:flex}.edui-quick-operate-icon{display:inline-block;line-height:30px!important;width:30px!important;text-align:center;cursor:pointer;color:#2A57FE}.edui-quick-operate-icon:last-child{width:20px!important;font-size:0;color:#999}.edui-quick-operate-icon:last-child svg{vertical-align:middle}.edui-quick-operate-menu{border:1px solid #CCC;border-radius:5px;box-shadow:0 0 10px #CCC;position:absolute;left:50px;top:0;background:#FFF;width:100px!important;display:none}.edui-quick-operate-menu .item{height:30px;line-height:30px;padding:0 10px;cursor:pointer}.edui-quick-operate-menu .item:hover{background:#F5F5F5}.edui-quick-operate-menu .item i{display:inline-block;width:2em}.edui-quick-operate .icon{font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased}.edui-quick-operate .icon.icon-image:before{content:\"\\e605\"}.edui-quick-operate .icon.icon-list:before{content:\"\\e87c\"}.edui-quick-operate .icon.icon-trash:before{content:\"\\e87c\"}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/themes/default/dialog.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\ninput[type=text]{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}select{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/themes/default/dialogbase.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nhtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;outline:0;font-size:100%}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}body{background-color:#fff;font:12px/1.5 sans-serif,\"宋体\",\"Arial Narrow\",HELVETICA;color:#646464}.tabhead{position:relative;z-index:10}.tabhead span{display:inline-block;padding:0 5px;height:30px;border:1px solid #ccc;background:#EEE;text-align:center;line-height:30px;cursor:pointer;*margin-right:5px;border-radius:3px 3px 0 0}.tabhead span.focus{height:31px;border-bottom:0;background:#fff}.tabbody{position:relative;top:-1px;margin:0 auto;border:1px solid #ccc}a.button{display:block;text-align:center;line-height:24px;text-decoration:none;height:24px;width:95px;border:0;color:#838383;background:url(../../themes/default/images/icons-all.gif) no-repeat}a.button:hover{background-position:0 -30px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/themes/iframe.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}a{color:#09f;text-decoration:none}a:hover,a:focus{color:#09f;text-decoration:none}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #EEE}img+br{display:block;padding:4px 0;content:' '}body p{margin-bottom:1em}iframe{border:0}img{max-width:100%}img[data-word-image]{cursor:pointer}pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;line-height:1.5}img{cursor:pointer}.edui-quick-operate-active{background:#E6ECFF}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCore.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar XRegExp;if(XRegExp)throw Error(\"can't load XRegExp twice in the same frame\");if(function(a){function b(a,b){if(!XRegExp.isRegExp(a))throw TypeError(\"type RegExp expected\");var d=a._xregexp;return a=XRegExp(a.source,c(a)+(b||\"\")),d&&(a._xregexp={source:d.source,captureNames:d.captureNames?d.captureNames.slice(0):null}),a}function c(a){return(a.global?\"g\":\"\")+(a.ignoreCase?\"i\":\"\")+(a.multiline?\"m\":\"\")+(a.extended?\"x\":\"\")+(a.sticky?\"y\":\"\")}function d(a,b,c,d){var e,f,g,h=j.length;i=!0;try{for(;h--;)if(g=j[h],c&g.scope&&(!g.trigger||g.trigger.call(d))&&(g.pattern.lastIndex=b,f=g.pattern.exec(a),f&&f.index===b)){e={output:g.handler.call(d,f,c),match:f};break}}catch(k){throw k}finally{i=!1}return e}function e(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}XRegExp=function(c,e){var f,h,j,l,m,n=[],p=XRegExp.OUTSIDE_CLASS,q=0;if(XRegExp.isRegExp(c)){if(e!==a)throw TypeError(\"can't supply flags when constructing one RegExp from another\");return b(c)}if(i)throw Error(\"can't call the XRegExp constructor within token definition functions\");for(e=e||\"\",f={hasNamedCapture:!1,captureNames:[],hasFlag:function(a){return e.indexOf(a)>-1},setFlag:function(a){e+=a}};q<c.length;)h=d(c,q,p,f),h?(n.push(h.output),q+=h.match[0].length||1):(j=k.exec.call(o[p],c.slice(q)))?(n.push(j[0]),q+=j[0].length):(l=c.charAt(q),\"[\"===l?p=XRegExp.INSIDE_CLASS:\"]\"===l&&(p=XRegExp.OUTSIDE_CLASS),n.push(l),q++);return m=RegExp(n.join(\"\"),k.replace.call(e,g,\"\")),m._xregexp={source:c,captureNames:f.hasNamedCapture?f.captureNames:null},m},XRegExp.version=\"1.5.1\",XRegExp.INSIDE_CLASS=1,XRegExp.OUTSIDE_CLASS=2;var f=/\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,g=/[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g,h=/^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,i=!1,j=[],k={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},l=k.exec.call(/()??/,\"\")[1]===a,m=function(){var a=/^/g;return k.test.call(a,\"\"),!a.lastIndex}(),n=RegExp.prototype.sticky!==a,o={};o[XRegExp.INSIDE_CLASS]=/^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/,o[XRegExp.OUTSIDE_CLASS]=/^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/,XRegExp.addToken=function(a,c,d,e){j.push({pattern:b(a,\"g\"+(n?\"y\":\"\")),handler:c,scope:d||XRegExp.OUTSIDE_CLASS,trigger:e||null})},XRegExp.cache=function(a,b){var c=a+\"/\"+(b||\"\");return XRegExp.cache[c]||(XRegExp.cache[c]=XRegExp(a,b))},XRegExp.copyAsGlobal=function(a){return b(a,\"g\")},XRegExp.escape=function(a){return a.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},XRegExp.execAt=function(a,c,d,e){var f,g=b(c,\"g\"+(e&&n?\"y\":\"\"));return g.lastIndex=d=d||0,f=g.exec(a),e&&f&&f.index!==d&&(f=null),c.global&&(c.lastIndex=f?g.lastIndex:0),f},XRegExp.freezeTokens=function(){XRegExp.addToken=function(){throw Error(\"can't run addToken after freezeTokens\")}},XRegExp.isRegExp=function(a){return\"[object RegExp]\"===Object.prototype.toString.call(a)},XRegExp.iterate=function(a,c,d,e){for(var f,g=b(c,\"g\"),h=-1;f=g.exec(a);)c.global&&(c.lastIndex=g.lastIndex),d.call(e,f,++h,a,c),g.lastIndex===f.index&&g.lastIndex++;c.global&&(c.lastIndex=0)},XRegExp.matchChain=function(a,c){return function d(a,e){var f,g=c[e].regex?c[e]:{regex:c[e]},h=b(g.regex,\"g\"),i=[];for(f=0;f<a.length;f++)XRegExp.iterate(a[f],h,function(a){i.push(g.backref?a[g.backref]||\"\":a[0])});return e!==c.length-1&&i.length?d(i,e+1):i}([a],0)},RegExp.prototype.apply=function(a,b){return this.exec(b[0])},RegExp.prototype.call=function(a,b){return this.exec(b)},RegExp.prototype.exec=function(b){var d,f,g,h;if(this.global||(h=this.lastIndex),d=k.exec.apply(this,arguments)){if(!l&&d.length>1&&e(d,\"\")>-1&&(g=RegExp(this.source,k.replace.call(c(this),\"g\",\"\")),k.replace.call((b+\"\").slice(d.index),g,function(){for(var b=1;b<arguments.length-2;b++)arguments[b]===a&&(d[b]=a)})),this._xregexp&&this._xregexp.captureNames)for(var i=1;i<d.length;i++)f=this._xregexp.captureNames[i-1],f&&(d[f]=d[i]);!m&&this.global&&!d[0].length&&this.lastIndex>d.index&&this.lastIndex--}return this.global||(this.lastIndex=h),d},RegExp.prototype.test=function(a){var b,c;return this.global||(c=this.lastIndex),b=k.exec.call(this,a),b&&!m&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,this.global||(this.lastIndex=c),!!b},String.prototype.match=function(a){if(XRegExp.isRegExp(a)||(a=RegExp(a)),a.global){var b=k.match.apply(this,arguments);return a.lastIndex=0,b}return a.exec(this)},String.prototype.replace=function(a,b){var c,d,g,h,i=XRegExp.isRegExp(a);return i?(a._xregexp&&(c=a._xregexp.captureNames),a.global||(h=a.lastIndex)):a+=\"\",\"[object Function]\"===Object.prototype.toString.call(b)?d=k.replace.call(this+\"\",a,function(){if(c){arguments[0]=new String(arguments[0]);for(var d=0;d<c.length;d++)c[d]&&(arguments[0][c[d]]=arguments[d+1])}return i&&a.global&&(a.lastIndex=arguments[arguments.length-2]+arguments[0].length),b.apply(null,arguments)}):(g=this+\"\",d=k.replace.call(g,a,function(){var a=arguments;return k.replace.call(b+\"\",f,function(b,d,f){if(!d){var g=+f;return g<=a.length-3?a[g]:(g=c?e(c,f):-1,g>-1?a[g+1]:b)}switch(d){case\"$\":return\"$\";case\"&\":return a[0];case\"`\":return a[a.length-1].slice(0,a[a.length-2]);case\"'\":return a[a.length-1].slice(a[a.length-2]+a[0].length);default:var h=\"\";if(d=+d,!d)return b;for(;d>a.length-3;)h=String.prototype.slice.call(d,-1)+h,d=Math.floor(d/10);return(d?a[d]||\"\":\"$\")+h}})})),i&&(a.global?a.lastIndex=0:a.lastIndex=h),d},String.prototype.split=function(b,c){if(!XRegExp.isRegExp(b))return k.split.apply(this,arguments);var d,e,f=this+\"\",g=[],h=0;if(c===a||+c<0)c=1/0;else if(c=Math.floor(+c),!c)return[];for(b=XRegExp.copyAsGlobal(b);(d=b.exec(f))&&!(b.lastIndex>h&&(g.push(f.slice(h,d.index)),d.length>1&&d.index<f.length&&Array.prototype.push.apply(g,d.slice(1)),e=d[0].length,h=b.lastIndex,g.length>=c));)b.lastIndex===d.index&&b.lastIndex++;return h===f.length?k.test.call(b,\"\")&&!e||g.push(\"\"):g.push(f.slice(h)),g.length>c?g.slice(0,c):g},XRegExp.addToken(/\\(\\?#[^)]*\\)/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"}),XRegExp.addToken(/\\((?!\\?)/,function(){return this.captureNames.push(null),\"(\"}),XRegExp.addToken(/\\(\\?<([$\\w]+)>/,function(a){return this.captureNames.push(a[1]),this.hasNamedCapture=!0,\"(\"}),XRegExp.addToken(/\\\\k<([\\w$]+)>/,function(a){var b=e(this.captureNames,a[1]);return b>-1?\"\\\\\"+(b+1)+(isNaN(a.input.charAt(a.index+a[0].length))?\"\":\"(?:)\"):a[0]}),XRegExp.addToken(/\\[\\^?]/,function(a){return\"[]\"===a[0]?\"\\\\b\\\\B\":\"[\\\\s\\\\S]\"}),XRegExp.addToken(/^\\(\\?([imsx]+)\\)/,function(a){return this.setFlag(a[1]),\"\"}),XRegExp.addToken(/(?:\\s+|#.*)+/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"x\")}),XRegExp.addToken(/\\./,function(){return\"[\\\\s\\\\S]\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"s\")})}(),\"undefined\"==typeof SyntaxHighlighter)var SyntaxHighlighter=function(){function a(a,b){return a.className.indexOf(b)!=-1}function b(b,c){a(b,c)||(b.className+=\" \"+c)}function c(a,b){a.className=a.className.replace(b,\"\")}function d(a){for(var b=[],c=0;c<a.length;c++)b.push(a[c]);return b}function e(a){return a.split(/\\r?\\n/)}function f(a){var b=\"highlighter_\";return 0==a.indexOf(b)?a:b+a}function g(a){return J.vars.highlighters[f(a)]}function h(a){return document.getElementById(f(a))}function i(a){J.vars.highlighters[f(a.id)]=a}function j(a,b,c){if(null==a)return null;var d,e,f=1!=c?a.childNodes:[a.parentNode],g={\"#\":\"id\",\".\":\"className\"}[b.substr(0,1)]||\"nodeName\";if(d=\"nodeName\"!=g?b.substr(1):b.toUpperCase(),(a[g]||\"\").indexOf(d)!=-1)return a;for(var h=0;f&&h<f.length&&null==e;h++)e=j(f[h],b,c);return e}function k(a,b){return j(a,b,!0)}function l(a,b,c){c=Math.max(c||0,0);for(var d=c;d<a.length;d++)if(a[d]==b)return d;return-1}function m(a){return(a||\"\")+Math.round(1e6*Math.random()).toString()}function n(a,b){var c,d={};for(c in a)d[c]=a[c];for(c in b)d[c]=b[c];return d}function o(a){var b={\"true\":!0,\"false\":!1}[a];return null==b?a:b}function p(a,b,c,d,e){var f=(screen.width-c)/2,g=(screen.height-d)/2;e+=\", left=\"+f+\", top=\"+g+\", width=\"+c+\", height=\"+d,e=e.replace(/^,/,\"\");var h=window.open(a,b,e);return h.focus(),h}function q(a,b,c,d){function e(a){a=a||window.event,a.target||(a.target=a.srcElement,a.preventDefault=function(){this.returnValue=!1}),c.call(d||window,a)}a.attachEvent?a.attachEvent(\"on\"+b,e):a.addEventListener(b,e,!1)}function r(a){window.alert(J.config.strings.alert+a)}function s(a,b){var c=J.vars.discoveredBrushes,d=null;if(null==c){c={};for(var e in J.brushes){var f=J.brushes[e],g=f.aliases;if(null!=g){f.brushName=e.toLowerCase();for(var h=0;h<g.length;h++)c[g[h]]=e}}J.vars.discoveredBrushes=c}return d=J.brushes[c[a]],null==d&&b&&r(J.config.strings.noBrush+a),d}function t(a,b){for(var c=e(a),d=0;d<c.length;d++)c[d]=b(c[d],d);return c.join(\"\\r\\n\")}function u(a){return a.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,\"\")}function v(a){for(var b,c={},d=new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),e=new XRegExp(\"(?<name>[\\\\w-]+)\\\\s*:\\\\s*(?<value>[\\\\w-%#]+|\\\\[.*?\\\\]|\\\".*?\\\"|'.*?')\\\\s*;?\",\"g\");null!=(b=e.exec(a));){var f=b.value.replace(/^['\"]|['\"]$/g,\"\");if(null!=f&&d.test(f)){var g=d.exec(f);f=g.values.length>0?g.values.split(/\\s*,\\s*/):[]}c[b.name]=f}return c}function w(a,b){return null==a||0==a.length||\"\\n\"==a?a:(a=a.replace(/</g,\"&lt;\"),a=a.replace(/ {2,}/g,function(a){for(var b=\"\",c=0;c<a.length-1;c++)b+=J.config.space;return b+\" \"}),null!=b&&(a=t(a,function(a){if(0==a.length)return\"\";var c=\"\";return a=a.replace(/^(&nbsp;| )+/,function(a){return c=a,\"\"}),0==a.length?c:c+'<code class=\"'+b+'\">'+a+\"</code>\"})),a)}function x(a,b){for(var c=a.toString();c.length<b;)c=\"0\"+c;return c}function y(a,b){for(var c=\"\",d=0;d<b;d++)c+=\" \";return a.replace(/\\t/g,c)}function z(a,b){function c(a,b,c){return a.substr(0,b)+f.substr(0,c)+a.substr(b+1,a.length)}for(var d=(e(a),\"\\t\"),f=\"\",g=0;g<50;g++)f+=\"                    \";return a=t(a,function(a){if(a.indexOf(d)==-1)return a;for(var e=0;(e=a.indexOf(d))!=-1;){var f=b-e%b;a=c(a,e,f)}return a})}function A(a){var b=/<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;return 1==J.config.bloggerMode&&(a=a.replace(b,\"\\n\")),1==J.config.stripBrs&&(a=a.replace(b,\"\")),a}function B(a){return a.replace(/^\\s+|\\s+$/g,\"\")}function C(a){for(var b=e(A(a)),c=(new Array,/^\\s*/),d=1e3,f=0;f<b.length&&d>0;f++){var g=b[f];if(0!=B(g).length){var h=c.exec(g);if(null==h)return a;d=Math.min(h[0].length,d)}}if(d>0)for(var f=0;f<b.length;f++)b[f]=b[f].substr(d);return b.join(\"\\n\")}function D(a,b){return a.index<b.index?-1:a.index>b.index?1:a.length<b.length?-1:a.length>b.length?1:0}function E(a,b){function c(a,b){return a[0]}for(var d=null,e=[],f=b.func?b.func:c;null!=(d=b.regex.exec(a));){var g=f(d,b);\"string\"==typeof g&&(g=[new J.Match(g,d.index,b.css)]),e=e.concat(g)}return e}function F(a){var b=/(.*)((&gt;|&lt;).*)/;return a.replace(J.regexLib.url,function(a){var c=\"\",d=null;return(d=b.exec(a))&&(a=d[1],c=d[2]),'<a href=\"'+a+'\">'+a+\"</a>\"+c})}function G(){for(var a=document.getElementsByTagName(\"script\"),b=[],c=0;c<a.length;c++)\"syntaxhighlighter\"==a[c].type&&b.push(a[c]);return b}function H(a){var b=\"<![CDATA[\",c=\"]]>\",d=B(a),e=!1,f=b.length,g=c.length;0==d.indexOf(b)&&(d=d.substring(f),e=!0);var h=d.length;return d.indexOf(c)==h-g&&(d=d.substring(0,h-g),e=!0),e?d:a}function I(a){var d,e=a.target,f=k(e,\".syntaxhighlighter\"),h=k(e,\".container\"),i=document.createElement(\"textarea\");if(h&&f&&!j(h,\"textarea\")){d=g(f.id),b(f,\"source\");for(var l=h.childNodes,m=[],n=0;n<l.length;n++)m.push(l[n].innerText||l[n].textContent);m=m.join(\"\\r\"),m=m.replace(/\\u00a0/g,\" \"),i.appendChild(document.createTextNode(m)),h.appendChild(i),i.focus(),i.select(),q(i,\"blur\",function(a){i.parentNode.removeChild(i),c(f,\"source\")})}}\"undefined\"!=typeof require&&\"undefined\"==typeof XRegExp&&(XRegExp=require(\"XRegExp\").XRegExp);var J={defaults:{\"class-name\":\"\",\"first-line\":1,\"pad-line-numbers\":!1,highlight:!1,title:null,\"smart-tabs\":!0,\"tab-size\":4,gutter:!0,toolbar:!0,\"quick-code\":!0,collapse:!1,\"auto-links\":!1,light:!1,unindent:!0,\"html-script\":!1},config:{space:\"&nbsp;\",useScriptTags:!0,bloggerMode:!1,stripBrs:!1,tagName:\"pre\",strings:{expandSource:\"expand source\",help:\"?\",alert:\"SyntaxHighlighter\\n\\n\",noBrush:\"Can't find brush for: \",brushNotHtmlScript:\"Brush wasn't configured for html-script option: \",aboutDialog:\"@ABOUT@\"}},vars:{discoveredBrushes:null,highlighters:{}},brushes:{},regexLib:{multiLineCComments:/\\/\\*[\\s\\S]*?\\*\\//gm,singleLineCComments:/\\/\\/.*$/gm,singleLinePerlComments:/#.*$/gm,doubleQuotedString:/\"([^\\\\\"\\n]|\\\\.)*\"/g,singleQuotedString:/'([^\\\\'\\n]|\\\\.)*'/g,multiLineDoubleQuotedString:new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"',\"gs\"),multiLineSingleQuotedString:new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\",\"gs\"),xmlComments:/(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,url:/\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,phpScriptTags:{left:/(&lt;|<)\\?(?:=|php)?/g,right:/\\?(&gt;|>)/g,eof:!0},aspScriptTags:{left:/(&lt;|<)%=?/g,right:/%(&gt;|>)/g},scriptScriptTags:{left:/(&lt;|<)\\s*script.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi}},toolbar:{getHtml:function(a){function b(a,b){return J.toolbar.getButtonHtml(a,b,J.config.strings[b])}for(var c='<div class=\"toolbar\">',d=J.toolbar.items,e=d.list,f=0;f<e.length;f++)c+=(d[e[f]].getHtml||b)(a,e[f]);return c+=\"</div>\"},getButtonHtml:function(a,b,c){return'<span><a href=\"#\" class=\"toolbar_item command_'+b+\" \"+b+'\">'+c+\"</a></span>\"},handler:function(a){function b(a){var b=new RegExp(a+\"_(\\\\w+)\"),c=b.exec(d);return c?c[1]:null}var c=a.target,d=c.className||\"\",e=g(k(c,\".syntaxhighlighter\").id),f=b(\"command\");e&&f&&J.toolbar.items[f].execute(e),a.preventDefault()},items:{list:[\"expandSource\",\"help\"],expandSource:{getHtml:function(a){if(1!=a.getParam(\"collapse\"))return\"\";var b=a.getParam(\"title\");return J.toolbar.getButtonHtml(a,\"expandSource\",b?b:J.config.strings.expandSource)},execute:function(a){var b=h(a.id);c(b,\"collapsed\")}},help:{execute:function(a){var b=p(\"\",\"_blank\",500,250,\"scrollbars=0\"),c=b.document;c.write(J.config.strings.aboutDialog),c.close(),b.focus()}}}},findElements:function(a,b){var c=b?[b]:d(document.getElementsByTagName(J.config.tagName)),e=J.config,f=[];if(e.useScriptTags&&(c=c.concat(G())),0===c.length)return f;for(var g=0;g<c.length;g++){var h={target:c[g],params:n(a,v(c[g].className))};null!=h.params.brush&&f.push(h)}return f},highlight:function(a,b){var c=this.findElements(a,b),d=\"innerHTML\",e=null,f=J.config;if(0!==c.length)for(var g=0;g<c.length;g++){var h,b=c[g],i=b.target,j=b.params,k=j.brush;if(null!=k){if(\"true\"==j[\"html-script\"]||1==J.defaults[\"html-script\"])e=new J.HtmlScript(k),k=\"htmlscript\";else{var l=s(k);if(!l)continue;e=new l}h=i[d],f.useScriptTags&&(h=H(h)),\"\"!=(i.title||\"\")&&(j.title=i.title),j.brush=k,e.init(j),b=e.getDiv(h),\"\"!=(i.id||\"\")&&(b.id=i.id);var m=b.firstChild.firstChild;m.className=b.firstChild.className,i.parentNode.replaceChild(m,i)}}},all:function(a){q(window,\"load\",function(){J.highlight(a)})}};return J.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c,this.brushName=null},J.Match.prototype.toString=function(){return this.value},J.HtmlScript=function(a){function b(a,b){for(var c=0;c<a.length;c++)a[c].index+=b}function c(a,c){for(var f,g=a.code,h=[],i=d.regexList,j=a.index+a.left.length,k=d.htmlScript,l=0;l<i.length;l++)f=E(g,i[l]),b(f,j),h=h.concat(f);null!=k.left&&null!=a.left&&(f=E(a.left,k.left),b(f,a.index),h=h.concat(f)),null!=k.right&&null!=a.right&&(f=E(a.right,k.right),b(f,a.index+a[0].lastIndexOf(a.right)),h=h.concat(f));for(var m=0;m<h.length;m++)h[m].brushName=e.brushName;return h}var d,e=s(a),f=new J.brushes.Xml,g=this,h=\"getDiv getHtml init\".split(\" \");if(null!=e){d=new e;for(var i=0;i<h.length;i++)(function(){var a=h[i];g[a]=function(){return f[a].apply(f,arguments)}})();return null==d.htmlScript?void r(J.config.strings.brushNotHtmlScript+a):void f.regexList.push({regex:d.htmlScript.code,func:c})}},J.Highlighter=function(){},J.Highlighter.prototype={getParam:function(a,b){var c=this.params[a];return o(null==c?b:c)},create:function(a){return document.createElement(a)},findMatches:function(a,b){var c=[];if(null!=a)for(var d=0;d<a.length;d++)\"object\"==typeof a[d]&&(c=c.concat(E(b,a[d])));return this.removeNestedMatches(c.sort(D))},removeNestedMatches:function(a){for(var b=0;b<a.length;b++)if(null!==a[b])for(var c=a[b],d=c.index+c.length,e=b+1;e<a.length&&null!==a[b];e++){var f=a[e];if(null!==f){if(f.index>d)break;f.index==c.index&&f.length>c.length?a[b]=null:f.index>=c.index&&f.index<d&&(a[e]=null)}}return a},figureOutLineNumbers:function(a){var b=[],c=parseInt(this.getParam(\"first-line\"));return t(a,function(a,d){b.push(d+c)}),b},isLineHighlighted:function(a){var b=this.getParam(\"highlight\",[]);return\"object\"!=typeof b&&null==b.push&&(b=[b]),l(b,a.toString())!=-1},getLineHtml:function(a,b,c){var d=[\"line\",\"number\"+b,\"index\"+a,\"alt\"+(b%2==0?1:2).toString()];return this.isLineHighlighted(b)&&d.push(\"highlighted\"),0==b&&d.push(\"break\"),'<div class=\"'+d.join(\" \")+'\">'+c+\"</div>\"},getLineNumbersHtml:function(a,b){var c=\"\",d=e(a).length,f=parseInt(this.getParam(\"first-line\")),g=this.getParam(\"pad-line-numbers\");1==g?g=(f+d-1).toString().length:1==isNaN(g)&&(g=0);for(var h=0;h<d;h++){var i=b?b[h]:f+h,a=0==i?J.config.space:x(i,g);c+=this.getLineHtml(h,i,a)}return c},getCodeLinesHtml:function(a,b){a=B(a);for(var c=e(a),d=(this.getParam(\"pad-line-numbers\"),parseInt(this.getParam(\"first-line\"))),a=\"\",f=this.getParam(\"brush\"),g=0;g<c.length;g++){var h=c[g],i=/^(&nbsp;|\\s)+/.exec(h),j=null,k=b?b[g]:d+g;null!=i&&(j=i[0].toString(),h=h.substr(j.length),j=j.replace(\" \",J.config.space)),h=B(h),0==h.length&&(h=J.config.space),a+=this.getLineHtml(g,k,(null!=j?'<code class=\"'+f+' spaces\">'+j+\"</code>\":\"\")+h)}return a},getTitleHtml:function(a){return a?\"<caption>\"+a+\"</caption>\":\"\"},getMatchesHtml:function(a,b){function c(a){var b=a?a.brushName||f:f;return b?b+\" \":\"\"}for(var d=0,e=\"\",f=this.getParam(\"brush\",\"\"),g=0;g<b.length;g++){var h,i=b[g];null!==i&&0!==i.length&&(h=c(i),e+=w(a.substr(d,i.index-d),h+\"plain\")+w(i.value,h+i.css),d=i.index+i.length+(i.offset||0))}return e+=w(a.substr(d),c()+\"plain\")},getHtml:function(a){var b,c,d,e=\"\",g=[\"syntaxhighlighter\"];return 1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1),className=\"syntaxhighlighter\",1==this.getParam(\"collapse\")&&g.push(\"collapsed\"),0==(gutter=this.getParam(\"gutter\"))&&g.push(\"nogutter\"),g.push(this.getParam(\"class-name\")),g.push(this.getParam(\"brush\")),a=u(a).replace(/\\r/g,\" \"),b=this.getParam(\"tab-size\"),a=1==this.getParam(\"smart-tabs\")?z(a,b):y(a,b),this.getParam(\"unindent\")&&(a=C(a)),gutter&&(d=this.figureOutLineNumbers(a)),c=this.findMatches(this.regexList,a),e=this.getMatchesHtml(a,c),e=this.getCodeLinesHtml(e,d),this.getParam(\"auto-links\")&&(e=F(e)),\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.match(/MSIE/)&&g.push(\"ie\"),e='<div id=\"'+f(this.id)+'\" class=\"'+g.join(\" \")+'\">'+(this.getParam(\"toolbar\")?J.toolbar.getHtml(this):\"\")+'<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'+this.getTitleHtml(this.getParam(\"title\"))+\"<tbody><tr>\"+(gutter?'<td class=\"gutter\">'+this.getLineNumbersHtml(a)+\"</td>\":\"\")+'<td class=\"code\"><div class=\"container\">'+e+\"</div></td></tr></tbody></table></div>\"},getDiv:function(a){null===a&&(a=\"\"),this.code=a;var b=this.create(\"div\");return b.innerHTML=this.getHtml(a),this.getParam(\"toolbar\")&&q(j(b,\".toolbar\"),\"click\",J.toolbar.handler),this.getParam(\"quick-code\")&&q(j(b,\".code\"),\"dblclick\",I),b},init:function(a){this.id=m(),i(this),this.params=n(J.defaults,a||{}),1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1)},getKeywords:function(a){return a=a.replace(/^\\s+|\\s+$/g,\"\").replace(/\\s+/g,\"|\"),\"\\\\b(?:\"+a+\")\\\\b\"},forHtmlScript:function(a){var b={end:a.right.source};a.eof&&(b.end=\"(?:(?:\"+b.end+\")|$)\"),this.htmlScript={left:{regex:a.left,css:\"script\"},right:{regex:a.right,css:\"script\"},code:new XRegExp(\"(?<left>\"+a.left.source+\")(?<code>.*?)(?<right>\"+b.end+\")\",\"sgi\")}}},J}();\"undefined\"!=typeof exports?exports.SyntaxHighlighter=SyntaxHighlighter:null,function(){function a(){var a=\"class interface function package\",b=\"-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape extends false final finally flash_proxy for get if implements import in include Infinity instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null Null Number Object object_proxy override parseFloat parseInt private protected public return set static String super switch this throw true try typeof uint undefined unescape use void while with\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:new RegExp(\"var\",\"gm\"),css:\"variable\"},{regex:new RegExp(\"trace\",\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"actionscript3\",\"as3\"],SyntaxHighlighter.brushes.AS3=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without\",b=\"first second third fourth fifth sixth seventh eighth ninth tenth last front back middle\",c=\"activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes\";this.regexList=[{regex:/(--|#).*$/gm,css:\"comments\"},{regex:/\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/\"[\\s\\S]*?\"/gm,css:\"string\"},{regex:/(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,css:\"color1\"},{regex:/(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g,css:\"color1\"},{regex:/(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,css:\"color2\"},{regex:/\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,css:\"keyword\"},{regex:/\\b\\d+(st|nd|rd|th)\\b/g,css:\"keyword\"},{regex:/\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,css:\"color3\"},{regex:/\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,css:\"color3\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"applescript\"],SyntaxHighlighter.brushes.AppleScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"if fi then elif else for do done until while break continue case esac function return in eq ne ge le\",b=\"alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chrootcksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig import install join kill less let ln local locate logname logout look lpc lpr lprint lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir vi watch wc whereis which who whoami Wget xargs yes\";this.regexList=[{regex:/^#!.*$/gm,css:\"preprocessor bold\"},{regex:/\\/[\\w-\\/]+/gm,css:\"plain\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"functions\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"bash\",\"shell\",\"sh\"],SyntaxHighlighter.brushes.Bash=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform XmlValidate Year YesNoFormat\",b=\"cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx cfwindow cfxml cfzip cfzipparam\",c=\"all and any between cross in join like not null or outer some\";\nthis.regexList=[{regex:new RegExp(\"--(.*)$\",\"gm\"),css:\"comments\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"coldfusion\",\"cf\"],SyntaxHighlighter.brushes.ColdFusion=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t __wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler sig_atomic_t size_t _stat __stat64 _stati64 terminate_function time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf va_list wchar_t wctrans_t wctype_t wint_t signed\",b=\"auto break case catch class const decltype __finally __exception __try const_cast continue private public protected __declspec default delete deprecated dllexport dllimport do dynamic_cast else enum explicit extern if for friend goto inline mutable naked namespace new noinline noreturn nothrow register reinterpret_cast return selectany sizeof static static_cast struct switch template this thread throw true false try typedef typeid typename union using uuid virtual void volatile whcar_t while\",c=\"assert isalnum isalpha iscntrl isdigit isgraph islower isprintispunct isspace isupper isxdigit tolower toupper errno localeconv setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell fwrite getc getchar gets perror printf putc putchar puts remove rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs mbtowc qsort rand realloc srand strtod strtol strtoul system wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr strcmp strcoll strcpy strcspn strerror strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime clock ctime difftime gmtime localtime mktime strftime time\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^ *#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color1 bold\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"functions bold\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword bold\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"cpp\",\"c\"],SyntaxHighlighter.brushes.Cpp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=0==a[0].indexOf(\"///\")?\"color1\":\"comments\";return[new SyntaxHighlighter.Match(a[0],a.index,c)]}var b=\"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit volatile extern false finally fixed float for foreach get goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed set short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void while var from group by into select let where orderby join on equals ascending descending\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,func:a},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:/@\"(?:[^\"]|\"\")*\"/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:/\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,css:\"keyword\"},{regex:/\\byield(?=\\s+(?:return|break)\\b)/g,css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"c#\",\"c-sharp\",\"csharp\"],SyntaxHighlighter.brushes.CSharp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\";this.regexList=[{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,css:\"value\"},{regex:/!important/g,css:\"color3\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}],this.forHtmlScript({left:/(&lt;|<)\\s*style.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"css\"],SyntaxHighlighter.brushes.CSS=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs addr and ansichar ansistring array as asm begin boolean byte cardinal case char class comp const constructor currency destructor div do double downto else end except exports extended false file finalization finally for function goto if implementation in inherited int64 initialization integer interface is label library longint longword mod nil not object of on or packed pansichar pansistring pchar pcurrency pdatetime pextended pint64 pointer private procedure program property pshortstring pstring pvariant pwidechar pwidestring protected public published raise real real48 record repeat set shl shortint shortstring shr single smallint string then threadvar to true try type unit until uses val var varirnt while widechar widestring with word write writeln xor\";this.regexList=[{regex:/\\(\\*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/{(?!\\$)[\\s\\S]*?}/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\{\\$[a-zA-Z]+ .+\\}/g,css:\"color1\"},{regex:/\\b[\\d\\.]+\\b/g,css:\"value\"},{regex:/\\$[a-zA-Z0-9]+\\b/g,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"delphi\",\"pascal\",\"pas\"],SyntaxHighlighter.brushes.Delphi=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){this.regexList=[{regex:/^\\+\\+\\+ .*$/gm,css:\"color2\"},{regex:/^\\-\\-\\- .*$/gm,css:\"color2\"},{regex:/^\\s.*$/gm,css:\"color1\"},{regex:/^@@.*@@.*$/gm,css:\"variable\"},{regex:/^\\+.*$/gm,css:\"string\"},{regex:/^\\-.*$/gm,css:\"color3\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"diff\",\"patch\"],SyntaxHighlighter.brushes.Diff=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor module export import define\";this.regexList=[{regex:new RegExp(\"[A-Z][A-Za-z0-9_]+\",\"g\"),css:\"constants\"},{regex:new RegExp(\"\\\\%.+\",\"gm\"),css:\"comments\"},{regex:new RegExp(\"\\\\?[A-Za-z0-9_]+\",\"g\"),css:\"preprocessor\"},{regex:new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\",\"g\"),css:\"functions\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"erl\",\"erlang\"],SyntaxHighlighter.brushes.Erland=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"as assert break case catch class continue def default do else extends finally if in implements import instanceof interface new package property return switch throw throws try while public protected private static\",b=\"void boolean byte char short int long float double\",c=\"null\",d=\"allProperties count get size collect each eachProperty eachPropertyName eachWithIndex find findAll findIndexOf grep inject max min reverseEach sort asImmutable asSynchronized flatten intersect join pop reverse subMap toList padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText splitEachLine withReader append encodeBase64 decodeBase64 filterLine transformChar transformLine withOutputStream withPrintWriter withStream withStreams withWriter withWriterAppend write writeLine dump inspect invokeMethod print println step times upto use waitForOrKill getText\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\"\"\".*\"\"\"/g,css:\"string\"},{regex:new RegExp(\"\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b\",\"gi\"),css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(d),\"gm\"),css:\"functions\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"groovy\"],SyntaxHighlighter.brushes.Groovy=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws true transient try void volatile while\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:/\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,css:\"comments\"},{regex:/\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,css:\"preprocessor\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:/(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,css:\"color1\"},{regex:/\\@interface\\b/g,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript({left:/(&lt;|<)%[@!=]?/g,right:/%(&gt;|>)/g})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"java\"],SyntaxHighlighter.brushes.Java=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Boolean Byte Character Double Duration Float Integer Long Number Short String Void\",b=\"abstract after and as assert at before bind bound break catch class continue def delete else exclusive extends false finally first for from function if import in indexof init insert instanceof into inverse last lazy mixin mod nativearray new not null on or override package postinit protected public public-init public-read replace return reverse sizeof step super then this throw true try tween typeof var where while with attribute let private readonly static trigger\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"variable\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"jfx\",\"javafx\"],SyntaxHighlighter.brushes.JavaFX=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"break case catch continue default delete do else false  for function if in instanceof new null return super switch this throw true try typeof var while with\",b=SyntaxHighlighter.regexLib;this.regexList=[{regex:b.multiLineDoubleQuotedString,css:\"string\"},{regex:b.multiLineSingleQuotedString,css:\"string\"},{regex:b.singleLineCComments,css:\"comments\"},{regex:b.multiLineCComments,css:\"comments\"},{regex:/\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(b.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"js\",\"jscript\",\"javascript\"],SyntaxHighlighter.brushes.JScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr chroot close closedir connect cos crypt defined delete each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd oct open opendir ord pack pipe pop pos print printf prototype push quotemeta rand read readdir readline readlink readpipe recv rename reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study substr symlink syscall sysopen sysread sysseek system syswrite tell telldir time times tr truncate uc ucfirst umask undef unlink unpack unshift utime values vec wait waitpid warn write say\",b=\"bless caller continue dbmclose dbmopen die do dump else elsif eval exit for foreach goto if import last local my next no our package redo ref require return sub tie tied unless untie until use wantarray while given when default try catch finally has extends with before after around override augment\";this.regexList=[{regex:/(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,css:\"string\"},{regex:/#.*$/gm,css:\"comments\"},{regex:/^#!.*\\n/g,css:\"preprocessor\"},{regex:/-?\\w+(?=\\s*=(>|&gt;))/g,css:\"string\"},{regex:/\\bq[qwxr]?\\([\\s\\S]*?\\)/g,css:\"string\"},{regex:/\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,css:\"string\"},{regex:/\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,css:\"string\"},{regex:/\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,css:\"string\"},{regex:/\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,css:\"variable\"},{regex:/\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,css:\"comments\"},{regex:/(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,css:\"comments\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"perl\",\"Perl\",\"pl\"],SyntaxHighlighter.brushes.Perl=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs acos acosh addcslashes addslashes array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill array_filter array_flip array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists closedir closelog copy cos cosh count count_chars date decbin dechex decoct deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime strtoupper strtr strval substr substr_compare\",b=\"abstract and array as break case catch cfunction class clone const continue declare default die do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements include include_once interface instanceof insteadof namespace new old_function or private protected public return require require_once static switch trait throw try use var while xor \",c=\"__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"php\"],SyntaxHighlighter.brushes.Php=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"text\",\"plain\"],SyntaxHighlighter.brushes.Plain=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"while validateset validaterange validatepattern validatelength validatecount until trap switch return ref process param parameter in if global: function foreach for finally filter end elseif else dynamicparam do default continue cmdletbinding break begin alias \\\\? % #script #private #local #global mandatory parametersetname position valuefrompipeline valuefrompipelinebypropertyname valuefromremainingarguments helpmessage \",b=\" and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle clike clt cmatch cne cnotcontains cnotlike cnotmatch contains creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt imatch ine inotcontains inotlike inotmatch ireplace is isnot le like lt match ne not notcontains notlike notmatch or regex replace wildcard\",c=\"write where wait use update unregister undo trace test tee take suspend stop start split sort skip show set send select scroll resume restore restart resolve resize reset rename remove register receive read push pop ping out new move measure limit join invoke import group get format foreach export expand exit enter enable disconnect disable debug cxnew copy convertto convertfrom convert connect complete compare clear checkpoint aggregate add\",d=\" component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis\";this.regexList=[{regex:new RegExp(\"^\\\\s*#[#\\\\s]*\\\\.(\"+this.getKeywords(d)+\").*$\",\"gim\"),css:\"preprocessor help bold\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,css:\"comments here\"},{regex:new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@',\"gm\"),css:\"script string here\"},{regex:new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\",\"gm\"),css:\"script string single here\"},{regex:new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"',\"g\"),css:\"string\"},{regex:new RegExp(\"'(?:[^']|'')*'\",\"g\"),css:\"string single\"},{regex:new RegExp(\"[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+\",\"gi\"),css:\"variable\"},{regex:new RegExp(\"(?:\\\\b\"+c.replace(/ /g,\"\\\\b|\\\\b\")+\")-[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"},{regex:new RegExp(\"-\"+this.getKeywords(b),\"gmi\"),css:\"operator value\"},{regex:new RegExp(\"\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]\",\"gi\"),css:\"constants\"},{regex:new RegExp(\"\\\\s+-(?!\"+this.getKeywords(b)+\")[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"powershell\",\"ps\",\"posh\"],SyntaxHighlighter.brushes.PowerShell=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try yield while\",b=\"__import__ abs all any apply basestring bin bool buffer callable chr classmethod cmp coerce compile complex delattr dict dir divmod enumerate eval execfile file filter float format frozenset getattr globals hasattr hash help hex id input int intern isinstance issubclass iter len list locals long map max min next object oct open ord pow print property range raw_input reduce reload repr reversed round set setattr slice sorted staticmethod str sum super tuple type type unichr unicode vars xrange zip\",c=\"None True False self cls class_\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/^\\s*@\\w+/gm,css:\"decorator\"},{regex:/(['\\\"]{3})([^\\1])*?\\1/gm,css:\"comments\"},{regex:/\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm,css:\"string\"},{regex:/'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm,css:\"string\"},{regex:/\\+|\\-|\\*|\\/|\\%|=|==/gm,css:\"keyword\"},{regex:/\\b\\d+\\.?\\w*/g,css:\"value\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"py\",\"python\"],SyntaxHighlighter.brushes.Python=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"alias and BEGIN begin break case class def define_method defined do each else elsif END end ensure false for if in module new next nil not or raise redo rescue retry return self super then throw true undef unless until when while yield\",b=\"Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ThreadGroup Thread Time TrueClass\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b[A-Z0-9_]+\\b/g,css:\"constants\"},{regex:/:[a-z][A-Za-z0-9_]*/g,css:\"color2\"},{regex:/(\\$|@@|@)\\w+/g,css:\"variable bold\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),\na.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"ruby\",\"rails\",\"ror\",\"rb\"],SyntaxHighlighter.brushes.Ruby=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\",f=\"!important !default\",g=\"@import @extend @debug @warn @if @for @while @mixin @include\",h=SyntaxHighlighter.regexLib;this.regexList=[{regex:h.multiLineCComments,css:\"comments\"},{regex:h.singleLineCComments,css:\"comments\"},{regex:h.doubleQuotedString,css:\"string\"},{regex:h.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,css:\"value\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(f),\"g\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(g),\"g\"),css:\"preprocessor\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sass\",\"scss\"],SyntaxHighlighter.brushes.Sass=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"val sealed case def true trait implicit forSome import match object null finally super override try lazy for var catch throw type extends class while with new final yield abstract else do if return protected private this package false\",b=\"[_:=><%#@]+\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(b,\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"scala\"],SyntaxHighlighter.brushes.Scala=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs avg case cast coalesce convert count current_timestamp current_user day isnull left lower month nullif replace right session_user space substring sum system_user upper user year\",b=\"absolute action add after alter as asc at authorization begin bigint binary bit by cascade char character check checkpoint close collate column commit committed connect connection constraint contains continue create cube current current_date current_time cursor database date deallocate dec decimal declare default delete desc distinct double drop dynamic else end end-exec escape except exec execute false fetch first float for force foreign forward free from full function global goto grant group grouping having hour ignore index inner insensitive insert instead int integer intersect into is isolation key last level load local max min minute modify move name national nchar next no numeric of off on only open option order out output partial password precision prepare primary prior privileges procedure public read real references relative repeatable restrict return returns revoke rollback rollup rows rule schema scroll second section select sequence serializable set size smallint static statistics table temp temporary then time timestamp to top transaction translation trigger true truncate uncommitted union unique update values varchar varying view when where with work\",c=\"all and any between cross in join like not null or outer some\";this.regexList=[{regex:/--(.*)$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"color2\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sql\"],SyntaxHighlighter.brushes.Sql=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date Decimal Declare Default Delegate Dim DirectCast Do Double Each Else ElseIf End Enum Erase Error Event Exit False Finally For Friend Function Get GetType GoSub GoTo Handles If Implements Imports In Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing NotInheritable NotOverridable Object On Option Optional Or OrElse Overloads Overridable Overrides ParamArray Preserve Private Property Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume Return Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until Variant When While With WithEvents WriteOnly Xor\";this.regexList=[{regex:/'.*$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/^\\s*#.*$/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"vb\",\"vbnet\"],SyntaxHighlighter.brushes.Vb=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=SyntaxHighlighter.Match,d=a[0],e=new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)\",\"xg\").exec(d),f=[];if(null!=a.attributes)for(var g,h=new XRegExp(\"(?<name> [\\\\w:\\\\-\\\\.]+)\\\\s*=\\\\s*(?<value> \\\".*?\\\"|'.*?'|\\\\w+)\",\"xg\");null!=(g=h.exec(d));)f.push(new c(g.name,a.index+g.index,\"color1\")),f.push(new c(g.value,a.index+g.index+g[0].indexOf(g.value),\"string\"));return null!=e&&f.push(new c(e.name,a.index+e[0].indexOf(e.name),\"keyword\")),f}this.regexList=[{regex:new XRegExp(\"(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)\",\"gm\"),css:\"color2\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)\",\"sg\"),func:a}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"xml\",\"xhtml\",\"xslt\",\"html\"],SyntaxHighlighter.brushes.Xml=a,\"undefined\"!=typeof exports?exports.Brush=a:null}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:400!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:700!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:0!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:#000!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:#000!important}.syntaxhighlighter caption{color:#000!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:0!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:0!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:700!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:700!important}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/clipboard/clipboard.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,b.Clipboard=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\"Cannot find module '\"+g+\"'\");throw j.code=\"MODULE_NOT_FOUND\",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a,b){for(;a&&a!==document;){if(a.matches(b))return a;a=a.parentNode}}if(Element&&!Element.prototype.matches){var e=Element.prototype;e.matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}b.exports=d},{}],2:[function(a,b,c){function d(a,b,c,d,f){var g=e.apply(this,arguments);return a.addEventListener(c,g,f),{destroy:function(){a.removeEventListener(c,g,f)}}}function e(a,b,c,d){return function(c){c.delegateTarget=f(c.target,b),c.delegateTarget&&d.call(a,c)}}var f=a(\"./closest\");b.exports=d},{\"./closest\":1}],3:[function(a,b,c){c.node=function(a){return void 0!==a&&a instanceof HTMLElement&&1===a.nodeType},c.nodeList=function(a){var b=Object.prototype.toString.call(a);return void 0!==a&&(\"[object NodeList]\"===b||\"[object HTMLCollection]\"===b)&&\"length\"in a&&(0===a.length||c.node(a[0]))},c.string=function(a){return\"string\"==typeof a||a instanceof String},c.fn=function(a){var b=Object.prototype.toString.call(a);return\"[object Function]\"===b}},{}],4:[function(a,b,c){function d(a,b,c){if(!a&&!b&&!c)throw new Error(\"Missing required arguments\");if(!h.string(b))throw new TypeError(\"Second argument must be a String\");if(!h.fn(c))throw new TypeError(\"Third argument must be a Function\");if(h.node(a))return e(a,b,c);if(h.nodeList(a))return f(a,b,c);if(h.string(a))return g(a,b,c);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}function e(a,b,c){return a.addEventListener(b,c),{destroy:function(){a.removeEventListener(b,c)}}}function f(a,b,c){return Array.prototype.forEach.call(a,function(a){a.addEventListener(b,c)}),{destroy:function(){Array.prototype.forEach.call(a,function(a){a.removeEventListener(b,c)})}}}function g(a,b,c){return i(document.body,a,b,c)}var h=a(\"./is\"),i=a(\"delegate\");b.exports=d},{\"./is\":3,delegate:2}],5:[function(a,b,c){function d(a){var b;if(\"SELECT\"===a.nodeName)a.focus(),b=a.value;else if(\"INPUT\"===a.nodeName||\"TEXTAREA\"===a.nodeName)a.focus(),a.setSelectionRange(0,a.value.length),b=a.value;else{a.hasAttribute(\"contenteditable\")&&a.focus();var c=window.getSelection(),d=document.createRange();d.selectNodeContents(a),c.removeAllRanges(),c.addRange(d),b=c.toString()}return b}b.exports=d},{}],6:[function(a,b,c){function d(){}d.prototype={on:function(a,b,c){var d=this.e||(this.e={});return(d[a]||(d[a]=[])).push({fn:b,ctx:c}),this},once:function(a,b,c){function d(){e.off(a,d),b.apply(c,arguments)}var e=this;return d._=b,this.on(a,d,c)},emit:function(a){var b=[].slice.call(arguments,1),c=((this.e||(this.e={}))[a]||[]).slice(),d=0,e=c.length;for(d;d<e;d++)c[d].fn.apply(c[d].ctx,b);return this},off:function(a,b){var c=this.e||(this.e={}),d=c[a],e=[];if(d&&b)for(var f=0,g=d.length;f<g;f++)d[f].fn!==b&&d[f].fn._!==b&&e.push(d[f]);return e.length?c[a]=e:delete c[a],this}},b.exports=d},{}],7:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"select\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"select\"));else{var g={exports:{}};f(g,e.select),e.clipboardAction=g.exports}}(this,function(a,b){\"use strict\";function c(a){return a&&a.__esModule?a:{\"default\":a}}function d(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}var e=c(b),f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},g=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),h=function(){function a(b){d(this,a),this.resolveOptions(b),this.initSelection()}return g(a,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=a.action,this.emitter=a.emitter,this.target=a.target,this.text=a.text,this.trigger=a.trigger,this.selectedText=\"\"}},{key:\"initSelection\",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:\"selectFake\",value:function(){var a=this,b=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return a.removeFake()},this.fakeHandler=document.body.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[b?\"right\":\"left\"]=\"-9999px\";var c=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener(\"focus\",window.scrollTo(0,c)),this.fakeElem.style.top=c+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,e[\"default\"])(this.fakeElem),this.copyText()}},{key:\"removeFake\",value:function(){this.fakeHandler&&(document.body.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:\"selectTarget\",value:function(){this.selectedText=(0,e[\"default\"])(this.target),this.copyText()}},{key:\"copyText\",value:function(){var a=void 0;try{a=document.execCommand(this.action)}catch(b){a=!1}this.handleResult(a)}},{key:\"handleResult\",value:function(a){this.emitter.emit(a?\"success\":\"error\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:\"clearSelection\",value:function(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:\"destroy\",value:function(){this.removeFake()}},{key:\"action\",set:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"copy\";if(this._action=a,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function(){return this._action}},{key:\"target\",set:function(a){if(void 0!==a){if(!a||\"object\"!==(\"undefined\"==typeof a?\"undefined\":f(a))||1!==a.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&a.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(a.hasAttribute(\"readonly\")||a.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=a}},get:function(){return this._target}}]),a}();a.exports=h})},{select:5}],8:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"./clipboard-action\",\"tiny-emitter\",\"good-listener\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"./clipboard-action\"),b(\"tiny-emitter\"),b(\"good-listener\"));else{var g={exports:{}};f(g,e.clipboardAction,e.tinyEmitter,e.goodListener),e.clipboard=g.exports}}(this,function(a,b,c,d){\"use strict\";function e(a){return a&&a.__esModule?a:{\"default\":a}}function f(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}function g(a,b){if(!a)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!b||\"object\"!=typeof b&&\"function\"!=typeof b?a:b}function h(a,b){if(\"function\"!=typeof b&&null!==b)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){var c=\"data-clipboard-\"+a;if(b.hasAttribute(c))return b.getAttribute(c)}var j=e(b),k=e(c),l=e(d),m=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),n=function(a){function b(a,c){f(this,b);var d=g(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return d.resolveOptions(c),d.listenClick(a),d}return h(b,a),m(b,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=\"function\"==typeof a.action?a.action:this.defaultAction,this.target=\"function\"==typeof a.target?a.target:this.defaultTarget,this.text=\"function\"==typeof a.text?a.text:this.defaultText}},{key:\"listenClick\",value:function(a){var b=this;this.listener=(0,l[\"default\"])(a,\"click\",function(a){return b.onClick(a)})}},{key:\"onClick\",value:function(a){var b=a.delegateTarget||a.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new j[\"default\"]({action:this.action(b),target:this.target(b),text:this.text(b),trigger:b,emitter:this})}},{key:\"defaultAction\",value:function(a){return i(\"action\",a)}},{key:\"defaultTarget\",value:function(a){var b=i(\"target\",a);if(b)return document.querySelector(b)}},{key:\"defaultText\",value:function(a){return i(\"text\",a)}},{key:\"destroy\",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),b}(k[\"default\"]);a.exports=n})},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)});"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/codemirror/codemirror.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.CodeMirror{line-height:1.5;font-family:monospace}.CodeMirror-scroll{overflow:auto;height:300px;position:relative}.CodeMirror-gutter{position:absolute;left:0;top:0;z-index:10;background-color:#f7f7f7;border-right:1px solid #eee;min-width:2em;height:100%}.CodeMirror-gutter-text{color:#aaa;text-align:right;padding:.4em .2em .4em .4em;white-space:pre!important}.CodeMirror-lines{padding:.4em}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;border-radius:0;border-width:0;margin:0;padding:0;background:transparent;font-family:inherit;font-size:inherit;padding:0;margin:0;white-space:pre;word-wrap:normal}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;line-height:1.4}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror textarea{outline:0!important}.CodeMirror pre.CodeMirror-cursor{z-index:10;position:absolute;visibility:hidden;border-left:1px solid #000;margin-top:-2px}.CodeMirror-focused pre.CodeMirror-cursor{visibility:visible}span.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused span.CodeMirror-selected{background:#d2dcf8}.CodeMirror-searching{background:#ffa}.cm-s-default span.cm-keyword{color:#708}.cm-s-default span.cm-atom{color:#219}.cm-s-default span.cm-number{color:#164}.cm-s-default span.cm-def{color:#00f}.cm-s-default span.cm-variable{color:#000}.cm-s-default span.cm-variable-2{color:#05a}.cm-s-default span.cm-variable-3{color:#085}.cm-s-default span.cm-property{color:#000}.cm-s-default span.cm-operator{color:#000}.cm-s-default span.cm-comment{color:#a50}.cm-s-default span.cm-string{color:#a11}.cm-s-default span.cm-string-2{color:#f50}.cm-s-default span.cm-meta{color:#555}.cm-s-default span.cm-error{color:red}.cm-s-default span.cm-qualifier{color:#555}.cm-s-default span.cm-builtin{color:#30a}.cm-s-default span.cm-bracket{color:#cc7}.cm-s-default span.cm-tag{color:#170}.cm-s-default span.cm-attribute{color:#00c}.cm-s-default span.cm-header{color:#a0a}.cm-s-default span.cm-quote{color:#090}.cm-s-default span.cm-hr{color:#999}.cm-s-default span.cm-link{color:#00c}span.cm-header,span.cm-strong{font-weight:700}span.cm-em{font-style:italic}span.cm-emstrong{font-style:italic;font-weight:700}span.cm-link{text-decoration:underline}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/codemirror/codemirror.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar CodeMirror=function(){function a(f,j){function r(a){return a>=0&&a<Yb.size}function u(a){return m(Yb,a)}function A(a,b){hc=!0;for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function B(a){var b={line:0,ch:0};ga(b,{line:Yb.size-1,ch:u(Yb.size-1).text.length},X(a),b,b),bc=!0}function M(a){var b=[];return Yb.iter(0,Yb.size,function(a){b.push(a.text)}),b.join(\"\\n\")}function N(a){function b(a){var c=pb(a,!0);if(c&&!E(c,g)){Vb||ea(),g=c,Fa(d,c),bc=!1;var e=ya();(c.line>=e.to||c.line<e.from)&&(f=setTimeout(Ab(function(){b(a)}),150))}}Ea(a.shiftKey);for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Jb&&c!=Kb)return;for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Mb)return Bb.onGutterClick&&Bb.onGutterClick(vc,J(Mb.childNodes,c)+oc,a),t(a);var d=pb(a);switch(x(a)){case 3:return void(S&&!L&&qb(a));case 2:return void(d&&Ia(d.line,d.ch,!0))}if(!d)return void(w(a)==Ib&&t(a));Vb||ea();var e=+new Date;if(_b&&_b.time>e-400&&E(_b.pos,d))return t(a),setTimeout(ua,20),Qa(d.line);if($b&&$b.time>e-400&&E($b.pos,d))return _b={time:e,pos:d},t(a),Pa(d);$b={time:e,pos:d};var f,g=d;if(R&&!E(lc.from,lc.to)&&!F(d,lc.from)&&!F(lc.to,d)){U&&(Nb.draggable=!0);var h=y(Eb,\"mouseup\",Ab(function(b){U&&(Nb.draggable=!1),ac=!1,h(),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(t(b),Ia(d.line,d.ch,!0),ua())}),!0);return void(ac=!0)}t(a),Ia(d.line,d.ch,!0);var i=y(Eb,\"mousemove\",Ab(function(a){clearTimeout(f),t(a),b(a)}),!0),h=y(Eb,\"mouseup\",Ab(function(a){clearTimeout(f);var b=pb(a);b&&Fa(d,b),t(a),ua(),bc=!0,i(),h()}),!0)}function V(a){for(var b=w(a);b!=Fb;b=b.parentNode)if(b.parentNode==Mb)return t(a);var c=pb(a);c&&(_b={time:+new Date,pos:c},t(a),Pa(c))}function $(a){function b(a,b){var d=new FileReader;d.onload=function(){f[b]=d.result,++g==e&&(c=Ka(c),Ab(function(){var a=la(f.join(\"\"),c,c);Fa(c,a)})())},d.readAsText(a)}a.preventDefault();var c=pb(a,!0),d=a.dataTransfer.files;if(c&&!Bb.readOnly)if(d&&d.length&&window.FileReader&&window.File)for(var e=d.length,f=Array(e),g=0,h=0;h<e;++h)b(d[h],h);else try{var f=a.dataTransfer.getData(\"Text\");if(f){var i=la(f,c,c),j=lc.from,k=lc.to;Fa(c,i),ac&&la(\"\",j,k),ua()}}catch(a){}}function _(a){var b=pa();H(b),a.dataTransfer.setDragImage(W,0,0),a.dataTransfer.setData(\"Text\",b)}function aa(a){var d,e,f=Z[a.keyCode],g=Q[Bb.keyMap].auto;if(null==f||a.altGraphKey)return g&&(Bb.keyMap=g),null;if(a.altKey&&(f=\"Alt-\"+f),a.ctrlKey&&(f=\"Ctrl-\"+f),a.metaKey&&(f=\"Cmd-\"+f),a.shiftKey&&(d=b(\"Shift-\"+f,Bb.extraKeys,Bb.keyMap))?e=!0:d=b(f,Bb.extraKeys,Bb.keyMap),\"string\"==typeof d&&(d=P.propertyIsEnumerable(d)?P[d]:null),!g||!d&&c(a)||(Bb.keyMap=g),!d)return!1;if(e){var h=Zb;Zb=null,d(vc),Zb=h}else d(vc);return t(a),!0}function ba(a){Vb||ea();var b=a.keyCode;if(T&&27==b&&(a.returnValue=!1),Ea(16==b||a.shiftKey),!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a))){var c=aa(a);window.opera&&(wc=c?a.keyCode:null,!c&&(L?a.metaKey:a.ctrlKey)&&88==a.keyCode&&ma(\"\"))}}function ca(a){if(window.opera&&a.keyCode==wc)return wc=null,void t(a);if((!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a)))&&(!window.opera||a.which||!aa(a))){if(Bb.electricChars&&Tb.electricChars){var b=String.fromCharCode(null==a.charCode?a.keyCode:a.charCode);Tb.electricChars.indexOf(b)>-1&&setTimeout(Ab(function(){Sa(lc.to.line,\"smart\")}),75)}ra()}}function da(a){Bb.onKeyEvent&&Bb.onKeyEvent(vc,s(a))||16==a.keyCode&&(Zb=null)}function ea(){Bb.readOnly||(Vb||(Bb.onFocus&&Bb.onFocus(vc),Vb=!0,Fb.className.search(/\\bCodeMirror-focused\\b/)==-1&&(Fb.className+=\" CodeMirror-focused\"),gc||ta(!0)),qa(),rb())}function fa(){Vb&&(Bb.onBlur&&Bb.onBlur(vc),Vb=!1,Fb.className=Fb.className.replace(\" CodeMirror-focused\",\"\")),clearInterval(Sb),setTimeout(function(){Vb||(Zb=null)},150)}function ga(a,b,c,d,e){if(tc){var f=[];for(Yb.iter(a.line,b.line+1,function(a){f.push(a.text)}),tc.addChange(a.line,c.length,f);tc.done.length>Bb.undoDepth;)tc.done.shift()}ka(a,b,c,d,e)}function ha(a,b){var c=a.pop();if(c){var d=[],e=c.start+c.added;Yb.iter(c.start,e,function(a){d.push(a.text)}),b.push({start:c.start,added:c.old.length,old:d});var f=Ka({line:c.start+c.old.length-1,ch:I(d[d.length-1],c.old[c.old.length-1])});ka({line:c.start,ch:0},{line:e-1,ch:u(e-1).text.length},c.old,f,f),bc=!0}}function ia(){ha(tc.done,tc.undone)}function ja(){ha(tc.undone,tc.done)}function ka(a,b,c,d,e){function f(a){return a<=Math.min(b.line,b.line+s)?a:a+s}var g=!1,h=rc.length;Bb.lineWrapping||Yb.iter(a.line,b.line,function(a){if(a.text.length==h)return g=!0,!0}),(a.line!=b.line||c.length>1)&&(hc=!0);var j=b.line-a.line,k=u(a.line),l=u(b.line);if(0==a.ch&&0==b.ch&&\"\"==c[c.length-1]){var m=[],n=null;a.line?(n=u(a.line-1),n.fixMarkEnds(l)):l.fixMarkStarts();for(var o=0,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],n));j&&Yb.remove(a.line,j,ic),m.length&&Yb.insert(a.line,m)}else if(k==l)if(1==c.length)k.replace(a.ch,b.ch,c[0]);else{l=k.split(b.ch,c[c.length-1]),k.replace(a.ch,null,c[0]),k.fixMarkEnds(l);for(var m=[],o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));m.push(l),Yb.insert(a.line+1,m)}else if(1==c.length)k.replace(a.ch,null,c[0]),l.replace(null,b.ch,\"\"),k.append(l),Yb.remove(a.line+1,j,ic);else{var m=[];k.replace(a.ch,null,c[0]),l.replace(null,b.ch,c[c.length-1]),k.fixMarkEnds(l);for(var o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));j>1&&Yb.remove(a.line+1,j-1,ic),Yb.insert(a.line+1,m)}if(Bb.lineWrapping){var q=Ib.clientWidth/mb()-3;Yb.iter(a.line,a.line+c.length,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/q)||1;b!=a.height&&A(a,b)}})}else Yb.iter(a.line,o+c.length,function(a){var b=a.text;b.length>h&&(rc=b,h=b.length,kc=null,g=!1)}),g&&(h=0,rc=\"\",kc=null,Yb.iter(0,Yb.size,function(a){var b=a.text;b.length>h&&(h=b.length,rc=b)}));for(var r=[],s=c.length-j-1,o=0,t=Ub.length;o<t;++o){var v=Ub[o];v<a.line?r.push(v):v>b.line&&r.push(v+s)}var w=a.line+Math.min(c.length,500);vb(a.line,w),r.push(w),Ub=r,xb(100),dc.push({from:a.line,to:b.line+1,diff:s});var x={from:a,to:b,text:c};if(ec){for(var y=ec;y.next;y=y.next);y.next=x}else ec=x;Ga(d,e,f(lc.from.line),f(lc.to.line)),Jb.style.height=Yb.height*lb()+2*nb()+\"px\"}function la(a,b,c){function d(d){if(F(d,b))return d;if(!F(c,d))return e;var f=d.line+a.length-(c.line-b.line)-1,g=d.ch;return d.line==c.line&&(g+=a[a.length-1].length-(c.ch-(c.line==b.line?b.ch:0))),{line:f,ch:g}}b=Ka(b),c=c?Ka(c):b,a=X(a);var e;return na(a,b,c,function(a){return e=a,{from:d(lc.from),to:d(lc.to)}}),e}function ma(a,b){na(X(a),lc.from,lc.to,function(a){return\"end\"==b?{from:a,to:a}:\"start\"==b?{from:lc.from,to:lc.from}:{from:lc.from,to:a}})}function na(a,b,c,d){var e=1==a.length?a[0].length+b.ch:a[a.length-1].length,f=d({line:b.line+a.length-1,ch:e});ga(b,c,a,f.from,f.to)}function oa(a,b){var c=a.line,d=b.line;if(c==d)return u(c).text.slice(a.ch,b.ch);var e=[u(c).text.slice(a.ch)];return Yb.iter(c+1,d,function(a){e.push(a.text)}),e.push(u(d).text.slice(0,b.ch)),e.join(\"\\n\")}function pa(){return oa(lc.from,lc.to)}function qa(){xc||Wb.set(Bb.pollInterval,function(){yb(),sa(),Vb&&qa(),zb()})}function ra(){function a(){yb();var c=sa();c||b?(xc=!1,qa()):(b=!0,Wb.set(60,a)),zb()}var b=!1;xc=!0,Wb.set(20,a)}function sa(){if(gc||!Vb||Y(Hb))return!1;var a=Hb.value;if(a==yc)return!1;Zb=null;for(var b=0,c=Math.min(yc.length,a.length);b<c&&yc[b]==a[b];)++b;return b<yc.length?lc.from={line:lc.from.line,ch:lc.from.ch-(yc.length-b)}:mc&&E(lc.from,lc.to)&&(lc.to={line:lc.to.line,ch:Math.min(u(lc.to.line).text.length,lc.to.ch+(a.length-b))}),ma(a.slice(b),\"end\"),yc=a,!0}function ta(a){E(lc.from,lc.to)?a&&(yc=Hb.value=\"\"):(yc=\"\",Hb.value=pa(),Hb.select())}function ua(){Bb.readOnly||Hb.focus()}function va(){if(Pb.getBoundingClientRect){var a=Pb.getBoundingClientRect();if(!T||a.top!=a.bottom){var b=window.innerHeight||Math.max(document.body.offsetHeight,document.documentElement.offsetHeight);(a.top<0||a.bottom>b)&&Pb.scrollIntoView()}}}function wa(){var a=ib(lc.inverted?lc.from:lc.to),b=Bb.lineWrapping?Math.min(a.x,Nb.offsetWidth):a.x;return xa(b,a.y,b,a.yBot)}function xa(a,b,c,d){var e=ob(),f=nb(),g=lb();b+=f,d+=f,a+=e,c+=e;var h=Ib.clientHeight,i=Ib.scrollTop,j=!1,k=!0;b<i?(Ib.scrollTop=Math.max(0,b-2*g),j=!0):d>i+h&&(Ib.scrollTop=d+g-h,j=!0);var l=Ib.clientWidth,m=Ib.scrollLeft,n=Bb.fixedGutter?Lb.clientWidth:0;return a<m+n?(a<50&&(a=0),Ib.scrollLeft=Math.max(0,a-10-n),j=!0):c>l+m-3&&(Ib.scrollLeft=c+10-l,j=!0,c>Jb.clientWidth&&(k=!1)),j&&Bb.onScroll&&Bb.onScroll(vc),k}function ya(){var a=lb(),b=Ib.scrollTop-nb(),c=Math.max(0,Math.floor(b/a)),d=Math.ceil((b+Ib.clientHeight)/a);return{from:o(Yb,c),to:o(Yb,d)}}function za(a,b){if(!Ib.clientWidth)return void(oc=pc=nc=0);var c=ya();if(!(a!==!0&&0==a.length&&c.from>=oc&&c.to<=pc)){var d=Math.max(c.from-100,0),e=Math.min(Yb.size,c.to+100);oc<d&&d-oc<20&&(d=oc),pc>e&&pc-e<20&&(e=Math.min(Yb.size,pc));for(var f=a===!0?[]:Aa([{from:oc,to:pc,domStart:0}],a),g=0,h=0;h<f.length;++h){var i=f[h];i.from<d&&(i.domStart+=d-i.from,i.from=d),i.to>e&&(i.to=e),i.from>=i.to?f.splice(h--,1):g+=i.to-i.from}if(g!=e-d){f.sort(function(a,b){return a.domStart-b.domStart});var j=lb(),k=Lb.style.display;Qb.style.display=Lb.style.display=\"none\",Ba(d,e,f),Qb.style.display=\"\";var l=d!=oc||e!=pc||qc!=Ib.clientHeight+j;if(l&&(qc=Ib.clientHeight+j),oc=d,pc=e,nc=p(Yb,d),Kb.style.top=nc*j+\"px\",Jb.style.height=Yb.height*j+2*nb()+\"px\",Qb.childNodes.length!=pc-oc)throw new Error(\"BAD PATCH! \"+JSON.stringify(f)+\" size=\"+(pc-oc)+\" nodes=\"+Qb.childNodes.length);if(Bb.lineWrapping){kc=Ib.clientWidth;var m=Qb.firstChild;Yb.iter(oc,pc,function(a){if(!a.hidden){var b=Math.round(m.offsetHeight/j)||1;a.height!=b&&(A(a,b),hc=!0)}m=m.nextSibling})}else null==kc&&(kc=gb(rc)),kc>Ib.clientWidth?(Nb.style.width=kc+\"px\",Jb.style.width=\"\",Jb.style.width=Ib.scrollWidth+\"px\"):Nb.style.width=Jb.style.width=\"\";return Lb.style.display=k,(l||hc)&&Ca(),Da(),!b&&Bb.onUpdate&&Bb.onUpdate(vc),!0}}}function Aa(a,b){for(var c=0,d=b.length||0;c<d;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;h<i;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g,domStart:j.domStart}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from,domStart:j.domStart}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g,domStart:j.domStart+(e.to-j.from)}))}a=f}return a}function Ba(a,b,c){function d(a){var b=a.nextSibling;return a.parentNode.removeChild(a),b}if(c.length){for(var e=0,f=Qb.firstChild,g=0;g<c.length;++g){for(var h=c[g];h.domStart>e;)f=d(f),e++;for(var i=0,j=h.to-h.from;i<j;++i)f=f.nextSibling,e++}for(;f;)f=d(f)}else Qb.innerHTML=\"\";var k=c.shift(),f=Qb.firstChild,i=a,l=lc.from.line,m=lc.to.line,n=l<a&&m>=a,o=Eb.createElement(\"div\");Yb.iter(a,b,function(a){var b=null,d=null;n?(b=0,m==i&&(n=!1,d=lc.to.ch)):l==i&&(m==i?(b=lc.from.ch,d=lc.to.ch):(n=!0,b=lc.from.ch)),k&&k.to==i&&(k=c.shift()),!k||k.from>i?(a.hidden?o.innerHTML=\"<pre></pre>\":o.innerHTML=a.getHTML(b,d,!0,sc),Qb.insertBefore(o.firstChild,f)):f=f.nextSibling,++i})}function Ca(){if(Bb.gutter||Bb.lineNumbers){var a=Kb.offsetHeight,b=Ib.clientHeight;Lb.style.height=(a-b<2?b:a)+\"px\";var c=[],d=oc;Yb.iter(oc,Math.max(pc,oc+1),function(a){if(a.hidden)c.push(\"<pre></pre>\");else{var b=a.gutterMarker,e=Bb.lineNumbers?d+Bb.firstLineNumber:null;b&&b.text?e=b.text.replace(\"%N%\",null!=e?e:\"\"):null==e&&(e=\" \"),c.push(b&&b.style?'<pre class=\"'+b.style+'\">':\"<pre>\",e);for(var f=1;f<a.height;++f)c.push(\"<br/>&#160;\");c.push(\"</pre>\")}++d}),Lb.style.display=\"none\",Mb.innerHTML=c.join(\"\");for(var e=String(Yb.size).length,f=Mb.firstChild,g=D(f),h=\"\";g.length+h.length<e;)h+=\" \";h&&f.insertBefore(Eb.createTextNode(h),f.firstChild),Lb.style.display=\"\",Nb.style.marginLeft=Lb.offsetWidth+\"px\",hc=!1}}function Da(){var a=lc.inverted?lc.from:lc.to,b=(lb(),ib(a,!0)),c=C(Fb),d=C(Qb);Gb.style.top=b.y+d.top-c.top+\"px\",Gb.style.left=b.x+d.left-c.left+\"px\",E(lc.from,lc.to)?(Pb.style.top=b.y+\"px\",Pb.style.left=(Bb.lineWrapping?Math.min(b.x,Nb.offsetWidth):b.x)+\"px\",Pb.style.display=\"\"):Pb.style.display=\"none\"}function Ea(a){Zb=a?Zb||(lc.inverted?lc.to:lc.from):null}function Fa(a,b){var c=Zb&&Ka(Zb);c&&(F(c,a)?a=c:F(b,c)&&(b=c)),Ga(a,b),cc=!0}function Ga(a,b,c,d){if(zc=null,null==c&&(c=lc.from.line,d=lc.to.line),!E(lc.from,a)||!E(lc.to,b)){if(F(b,a)){var e=b;b=a,a=e}a.line!=c&&(a=Ha(a,c,lc.from.ch)),b.line!=d&&(b=Ha(b,d,lc.to.ch)),E(a,b)?lc.inverted=!1:E(a,lc.to)?lc.inverted=!1:E(b,lc.from)&&(lc.inverted=!0),E(a,b)?E(lc.from,lc.to)||dc.push({from:c,to:d+1}):E(lc.from,lc.to)?dc.push({from:a.line,to:b.line+1}):(E(a,lc.from)||(a.line<c?dc.push({from:a.line,to:Math.min(b.line,c)+1}):dc.push({from:c,to:Math.min(d,a.line)+1})),E(b,lc.to)||(b.line<d?dc.push({from:Math.max(c,a.line),to:d+1}):dc.push({from:Math.max(a.line,d),to:b.line+1}))),lc.from=a,lc.to=b,fc=!0}}function Ha(a,b,c){function d(b){for(var d=a.line+b,e=1==b?Yb.size:-1;d!=e;){var f=u(d);if(!f.hidden){var g=a.ch;return(g>c||g>f.text.length)&&(g=f.text.length),{line:d,ch:g}}d+=b}}var e=u(a.line);return e.hidden?a.line>=b?d(1)||d(-1):d(-1)||d(1):a}function Ia(a,b,c){var d=Ka({line:a,ch:b||0});(c?Fa:Ga)(d,d)}function Ja(a){return Math.max(0,Math.min(a,Yb.size-1))}function Ka(a){if(a.line<0)return{line:0,ch:0};if(a.line>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var b=a.ch,c=u(a.line).text.length;return null==b||b>c?{line:a.line,ch:c}:b<0?{line:a.line,ch:0}:a}function La(a,b){function c(){for(var b=f+a,c=a<0?-1:Yb.size;b!=c;b+=a){var d=u(b);if(!d.hidden)return f=b,h=d,!0}}function d(b){if(g==(a<0?0:h.text.length)){if(b||!c())return!1;g=a<0?h.text.length:0}else g+=a;return!0}var e=lc.inverted?lc.from:lc.to,f=e.line,g=e.ch,h=u(f);if(\"char\"==b)d();else if(\"column\"==b)d(!0);else if(\"word\"==b)for(var i=!1;!(a<0)||d();){if(K(h.text.charAt(g)))i=!0;else if(i){a<0&&(a=1,d());break}if(a>0&&!d())break}return{line:f,ch:g}}function Ma(a,b){var c=a<0?lc.from:lc.to;(Zb||E(lc.from,lc.to))&&(c=La(a,b)),Ia(c.line,c.ch,!0)}function Na(a,b){E(lc.from,lc.to)?a<0?la(\"\",La(a,b),lc.to):la(\"\",lc.from,La(a,b)):la(\"\",lc.from,lc.to),cc=!0}function Oa(a,b){var c=0,d=ib(lc.inverted?lc.from:lc.to,!0);null!=zc&&(d.x=zc),\"page\"==b?c=Ib.clientHeight:\"line\"==b&&(c=lb());var e=jb(d.x,d.y+c*a+2);Ia(e.line,e.ch,!0),zc=d.x}function Pa(a){for(var b=u(a.line).text,c=a.ch,d=a.ch;c>0&&K(b.charAt(c-1));)--c;for(;d<b.length&&K(b.charAt(d));)++d;Fa({line:a.line,ch:c},{line:a.line,ch:d})}function Qa(a){Fa({line:a,ch:0},{line:a,ch:u(a).text.length})}function Ra(a){if(E(lc.from,lc.to))return Sa(lc.from.line,a);for(var b=lc.to.line-(lc.to.ch?0:1),c=lc.from.line;c<=b;++c)Sa(c,a)}function Sa(a,b){if(b||(b=\"add\"),\"smart\"==b)if(Tb.indent)var c=ub(a);else b=\"prev\";var d,e=u(a),f=e.indentation(Bb.tabSize),g=e.text.match(/^\\s*/)[0];\"prev\"==b?d=a?u(a-1).indentation(Bb.tabSize):0:\"smart\"==b?d=Tb.indent(c,e.text.slice(g.length),e.text):\"add\"==b?d=f+Bb.indentUnit:\"subtract\"==b&&(d=f-Bb.indentUnit),d=Math.max(0,d);var h=d-f;if(h){var i=\"\",j=0;if(Bb.indentWithTabs)for(var k=Math.floor(d/Bb.tabSize);k;--k)j+=Bb.tabSize,i+=\"\\t\";for(;j<d;)++j,i+=\" \"}else{if(lc.from.line!=a&&lc.to.line!=a)return;var i=g}la(i,{line:a,ch:0},{line:a,ch:g.length})}function Ta(){Tb=a.getMode(Bb,Bb.mode),Yb.iter(0,Yb.size,function(a){a.stateAfter=null}),Ub=[0],xb()}function Ua(){var a=Bb.gutter||Bb.lineNumbers;Lb.style.display=a?\"\":\"none\",a?hc=!0:Qb.parentNode.style.marginLeft=0}function Va(a,b){if(Bb.lineWrapping){Fb.className+=\" CodeMirror-wrap\";var c=Ib.clientWidth/mb()-3;Yb.iter(0,Yb.size,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/c)||1;1!=b&&A(a,b)}}),Nb.style.width=Jb.style.width=\"\"}else Fb.className=Fb.className.replace(\" CodeMirror-wrap\",\"\"),kc=null,rc=\"\",Yb.iter(0,Yb.size,function(a){1==a.height||a.hidden||A(a,1),a.text.length>rc.length&&(rc=a.text)});dc.push({from:0,to:Yb.size})}function Wa(){for(var a='<span class=\"cm-tab\">',b=0;b<Bb.tabSize;++b)a+=\" \";return a+\"</span>\"}function Xa(){sc=Wa(),za(!0)}function Ya(){Ib.className=Ib.className.replace(/\\s*cm-s-\\w+/g,\"\")+Bb.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\")}function Za(){this.set=[]}function $a(a,b,c){function d(a,b,c,d){u(a).addMark(new g(b,c,d,e.set))}a=Ka(a),b=Ka(b);var e=new Za;if(a.line==b.line)d(a.line,a.ch,b.ch,c);else{d(a.line,a.ch,null,c);for(var f=a.line+1,h=b.line;f<h;++f)d(f,null,null,c);d(b.line,null,b.ch,c)}return dc.push({from:a.line,to:b.line+1}),e}function _a(a){a=Ka(a);var b=new h(a.ch);return u(a.line).addMark(b),b}function ab(a,b,c){return\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker={text:b,style:c},hc=!0,a}function bb(a){\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker=null,hc=!0}function cb(a,b){var c=a,d=a;return\"number\"==typeof a?d=u(Ja(a)):c=n(a),null==c?null:b(d,c)?(dc.push({from:c,to:c+1}),d):null}function db(a,b){return cb(a,function(a){if(a.className!=b)return a.className=b,!0})}function eb(a,b){return cb(a,function(a,c){if(a.hidden!=b)return a.hidden=b,A(a,b?0:1),!b||lc.from.line!=c&&lc.to.line!=c||Ga(Ha(lc.from,lc.from.line,lc.from.ch),Ha(lc.to,lc.to.line,lc.to.ch)),hc=!0})}function fb(a){if(\"number\"==typeof a){if(!r(a))return null;var b=a;if(a=u(a),!a)return null}else{var b=n(a);if(null==b)return null}var c=a.gutterMarker;return{line:b,handle:a,text:a.text,markerText:c&&c.text,markerClass:c&&c.style,lineClass:a.className}}function gb(a){return Ob.innerHTML=\"<pre><span>x</span></pre>\",Ob.firstChild.firstChild.firstChild.nodeValue=a,Ob.firstChild.firstChild.offsetWidth||10}function hb(a,b){var c=\"\";if(Bb.lineWrapping){var d=a.text.indexOf(\" \",b+2);c=H(a.text.slice(b+1,d<0?a.text.length:d+(T?5:0)))}Ob.innerHTML=\"<pre>\"+a.getHTML(null,null,!1,sc,b)+'<span id=\"CodeMirror-temp-'+Ec+'\">'+H(a.text.charAt(b)||\" \")+\"</span>\"+c+\"</pre>\";var e=document.getElementById(\"CodeMirror-temp-\"+Ec),f=e.offsetTop,g=e.offsetLeft;if(T&&b&&0==f&&0==g){var h=document.createElement(\"span\");h.innerHTML=\"x\",e.parentNode.insertBefore(h,e.nextSibling),f=h.offsetTop}return{top:f,left:g}}function ib(a,b){var c,d=lb(),e=d*(p(Yb,a.line)-(b?nc:0));if(0==a.ch)c=0;else{var f=hb(u(a.line),a.ch);c=f.left,Bb.lineWrapping&&(e+=Math.max(0,f.top))}return{x:c,y:e,yBot:e+d}}function jb(a,b){function c(a){var b=hb(h,a);if(j){var c=Math.round(b.top/d);return Math.max(0,b.left+(c-k)*Ib.clientWidth)}return b.left}b<0&&(b=0);var d=lb(),e=mb(),f=nc+Math.floor(b/d),g=o(Yb,f);if(g>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var h=u(g),i=h.text,j=Bb.lineWrapping,k=j?f-p(Yb,g):0;if(a<=0&&0==k)return{line:g,ch:0};for(var l,m=0,n=0,q=i.length,r=Math.min(q,Math.ceil((a+k*Ib.clientWidth*.9)/e));;){var s=c(r);if(!(s<=a&&r<q)){l=s,q=r;break}r=Math.min(q,Math.ceil(1.2*r))}if(a>l)return{line:g,ch:q};for(r=Math.floor(.8*q),s=c(r),s<a&&(m=r,n=s);;){if(q-m<=1)return{line:g,ch:l-a>a-n?m:q};var t=Math.ceil((m+q)/2),v=c(t);v>a?(q=t,l=v):(m=t,n=v)}}function kb(a){var b=ib(a,!0),c=C(Nb);return{x:c.left+b.x,y:c.top+b.y,yBot:c.top+b.yBot}}function lb(){if(null==Cc){Cc=\"<pre>\";for(var a=0;a<49;++a)Cc+=\"x<br/>\";Cc+=\"x</pre>\"}var b=Qb.clientHeight;return b==Bc?Ac:(Bc=b,Ob.innerHTML=Cc,Ac=Ob.firstChild.offsetHeight/50||1,Ob.innerHTML=\"\",Ac)}function mb(){return Ib.clientWidth==Fc?Dc:(Fc=Ib.clientWidth,Dc=gb(\"x\"))}function nb(){return Nb.offsetTop}function ob(){return Nb.offsetLeft}function pb(a,b){var c,d,e=C(Ib,!0);try{c=a.clientX,d=a.clientY}catch(a){return null}if(!b&&(c-e.left>Ib.clientWidth||d-e.top>Ib.clientHeight))return null;var f=C(Nb,!0);return jb(c-f.left,d-f.top)}function qb(a){function b(){var a=X(Hb.value).join(\"\\n\");a!=e&&Ab(ma)(a,\"end\"),Gb.style.position=\"relative\",Hb.style.cssText=d,gc=!1,ta(!0),qa()}var c=pb(a);if(c&&!window.opera){(E(lc.from,lc.to)||F(c,lc.from)||!F(c,lc.to))&&Ab(Ia)(c.line,c.ch);var d=Hb.style.cssText;Gb.style.position=\"absolute\",Hb.style.cssText=\"position: fixed; width: 30px; height: 30px; top: \"+(a.clientY-5)+\"px; left: \"+(a.clientX-5)+\"px; z-index: 1000; background: white; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",gc=!0;var e=Hb.value=pa();if(ua(),Hb.select(),S){v(a);var f=y(window,\"mouseup\",function(){f(),setTimeout(b,20)},!0)}else setTimeout(b,50)}}function rb(){clearInterval(Sb);var a=!0;Pb.style.visibility=\"\",Sb=setInterval(function(){Pb.style.visibility=(a=!a)?\"\":\"hidden\"},650)}function sb(a){function b(a,b,c){if(a.text)for(var d,e=a.styles,f=g?0:a.text.length-1,i=g?0:e.length-2,j=g?e.length:-2;i!=j;i+=2*h){var k=e[i];if(null==e[i+1]||e[i+1]==m){for(var l=g?0:k.length-1,p=g?k.length:-1;l!=p;l+=h,f+=h)if(f>=b&&f<c&&o.test(d=k.charAt(l))){var q=Gc[d];if(\">\"==q.charAt(1)==g)n.push(d);else{if(n.pop()!=q.charAt(0))return{pos:f,match:!1};if(!n.length)return{pos:f,match:!0}}}}else f+=h*k.length}}var c=lc.inverted?lc.from:lc.to,d=u(c.line),e=c.ch-1,f=e>=0&&Gc[d.text.charAt(e)]||Gc[d.text.charAt(++e)];if(f){for(var g=(f.charAt(0),\">\"==f.charAt(1)),h=g?1:-1,i=d.styles,j=e+1,k=0,l=i.length;k<l;k+=2)if((j-=i[k].length)<=0){var m=i[k+1];break}for(var n=[d.text.charAt(e)],o=/[(){}[\\]]/,k=c.line,l=g?Math.min(k+100,Yb.size):Math.max(-1,k-100);k!=l;k+=h){var d=u(k),p=k==c.line,q=b(d,p&&g?e+1:0,p&&!g?e:d.text.length);if(q)break}q||(q={pos:null,match:!1});var m=q.match?\"CodeMirror-matchingbracket\":\"CodeMirror-nonmatchingbracket\",r=$a({line:c.line,ch:e},{line:c.line,ch:e+1},m),s=null!=q.pos&&$a({line:k,ch:q.pos},{line:k,ch:q.pos+1},m),t=Ab(function(){r.clear(),s&&s.clear()});a?setTimeout(t,800):jc=t}}function tb(a){for(var b,c,d=a,e=a-40;d>e;--d){if(0==d)return 0;var f=u(d-1);if(f.stateAfter)return d;var g=f.indentation(Bb.tabSize);(null==c||b>g)&&(c=d-1,b=g)}return c}function ub(a){var b=tb(a),c=b&&u(b-1).stateAfter;return c=c?d(Tb,c):e(Tb),Yb.iter(b,a,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)}),b<a&&dc.push({from:b,to:a}),a<Yb.size&&!u(a).stateAfter&&Ub.push(a),c}function vb(a,b){var c=ub(a);Yb.iter(a,b,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)})}function wb(){for(var a=+new Date+Bb.workTime,b=Ub.length;Ub.length;){if(u(oc).stateAfter)var c=Ub.pop();else var c=oc;if(!(c>=Yb.size)){var f=tb(c),g=f&&u(f-1).stateAfter;g=g?d(Tb,g):e(Tb);var h=0,i=Tb.compareStates,j=!1,k=f,l=!1;if(Yb.iter(k,Yb.size,function(b){var e=b.stateAfter;if(+new Date>a)return Ub.push(k),xb(Bb.workDelay),j&&dc.push({from:c,to:k+1}),l=!0;var f=b.highlight(Tb,g,Bb.tabSize);if(f&&(j=!0),b.stateAfter=d(Tb,g),i){if(e&&i(e,g))return!0}else if(f===!1&&e){if(++h>3&&(!Tb.indent||Tb.indent(e,\"\")==Tb.indent(g,\"\")))return!0}else h=0;++k}),l)return;j&&dc.push({from:c,to:k+1})}}b&&Bb.onHighlightComplete&&Bb.onHighlightComplete(vc)}function xb(a){Ub.length&&Xb.set(a,Ab(wb))}function yb(){bc=cc=ec=null,dc=[],fc=!1,ic=[]}function zb(){var a,b=!1;fc&&(b=!wa()),dc.length?a=za(dc,!0):(fc&&Da(),hc&&Ca()),b&&wa(),fc&&(va(),rb()),Vb&&!gc&&(bc===!0||bc!==!1&&fc)&&ta(cc),fc&&Bb.matchBrackets&&setTimeout(Ab(function(){jc&&(jc(),jc=null),E(lc.from,lc.to)&&sb(!1)}),20);var c=ec,d=ic;fc&&Bb.onCursorActivity&&Bb.onCursorActivity(vc),c&&Bb.onChange&&vc&&Bb.onChange(vc,c);for(var e=0;e<d.length;++e)d[e](vc);a&&Bb.onUpdate&&Bb.onUpdate(vc)}function Ab(a){return function(){Hc++||yb();try{var b=a.apply(this,arguments)}finally{--Hc||zb()}return b}}var Bb={},Cb=a.defaults;for(var Db in Cb)Cb.hasOwnProperty(Db)&&(Bb[Db]=(j&&j.hasOwnProperty(Db)?j:Cb)[Db]);var Eb=Bb.document,Fb=Eb.createElement(\"div\");Fb.className=\"CodeMirror\"+(Bb.lineWrapping?\" CodeMirror-wrap\":\"\"),Fb.innerHTML='<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\"><textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" autocorrect=\"off\" autocapitalize=\"off\"></textarea></div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div style=\"position: relative\"><div style=\"position: relative\"><div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div><div class=\"CodeMirror-lines\"><div style=\"position: relative\"><div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div><pre class=\"CodeMirror-cursor\">&#160;</pre><div></div></div></div></div></div></div>',f.appendChild?f.appendChild(Fb):f(Fb);var Gb=Fb.firstChild,Hb=Gb.firstChild,Ib=Fb.lastChild,Jb=Ib.firstChild,Kb=Jb.firstChild,Lb=Kb.firstChild,Mb=Lb.firstChild,Nb=Lb.nextSibling.firstChild,Ob=Nb.firstChild,Pb=Ob.nextSibling,Qb=Pb.nextSibling;Ya(),/AppleWebKit/.test(navigator.userAgent)&&/Mobile\\/\\w+/.test(navigator.userAgent)&&(Hb.style.width=\"0px\"),U||(Nb.draggable=!0),null!=Bb.tabindex&&(Hb.tabIndex=Bb.tabindex),Bb.gutter||Bb.lineNumbers||(Lb.style.display=\"none\");try{gb(\"x\")}catch(Rb){throw Rb.message.match(/runtime/i)&&(Rb=new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\")),Rb}var Sb,Tb,Ub,Vb,Wb=new z,Xb=new z,Yb=new l([new k([new i(\"\")])]);Ta();var Zb,$b,_b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc,kc,lc={from:{line:0,ch:0},to:{line:0,ch:0},inverted:!1},mc=!1,nc=0,oc=0,pc=0,qc=0,rc=\"\",sc=Wa();Ab(function(){B(Bb.value||\"\"),bc=!1})();var tc=new q;y(Ib,\"mousedown\",Ab(N)),y(Ib,\"dblclick\",Ab(V)),y(Nb,\"dragstart\",_),y(Nb,\"selectstart\",t),S||y(Ib,\"contextmenu\",qb),y(Ib,\"scroll\",function(){za([]),Bb.fixedGutter&&(Lb.style.left=Ib.scrollLeft+\"px\"),Bb.onScroll&&Bb.onScroll(vc)}),y(window,\"resize\",function(){za(!0)}),y(Hb,\"keyup\",Ab(da)),y(Hb,\"input\",ra),y(Hb,\"keydown\",Ab(ba)),y(Hb,\"keypress\",Ab(ca)),y(Hb,\"focus\",ea),y(Hb,\"blur\",fa),y(Ib,\"dragenter\",v),y(Ib,\"dragover\",v),y(Ib,\"drop\",Ab($)),y(Ib,\"paste\",function(){ua(),ra()}),y(Hb,\"paste\",ra),y(Hb,\"cut\",Ab(function(){ma(\"\")}));var uc;try{uc=Eb.activeElement==Hb}catch(Rb){}uc?setTimeout(ea,20):fa();var vc=Fb.CodeMirror={getValue:M,setValue:Ab(B),getSelection:pa,replaceSelection:Ab(ma),focus:function(){ua(),ea(),ra()},setOption:function(a,b){var c=Bb[a];Bb[a]=b,\"mode\"==a||\"indentUnit\"==a?Ta():\"readOnly\"==a&&b?(fa(),Hb.blur()):\"theme\"==a?Ya():\"lineWrapping\"==a&&c!=b?Ab(Va)():\"tabSize\"==a&&Ab(Xa)(),\"lineNumbers\"!=a&&\"gutter\"!=a&&\"firstLineNumber\"!=a&&\"theme\"!=a||Ab(Ua)()},getOption:function(a){return Bb[a]},undo:Ab(ia),redo:Ab(ja),indentLine:Ab(function(a,b){r(a)&&Sa(a,null==b?\"smart\":b?\"add\":\"subtract\")}),indentSelection:Ab(Ra),historySize:function(){return{undo:tc.done.length,redo:tc.undone.length}},clearHistory:function(){tc=new q},matchBrackets:Ab(function(){sb(!0)}),getTokenAt:Ab(function(a){return a=Ka(a),u(a.line).getTokenAt(Tb,ub(a.line),a.ch)}),getStateAfter:function(a){return a=Ja(null==a?Yb.size-1:a),ub(a+1)},cursorCoords:function(a){return null==a&&(a=lc.inverted),kb(a?lc.from:lc.to)},charCoords:function(a){return kb(Ka(a))},coordsChar:function(a){var b=C(Nb);return jb(a.x-b.left,a.y-b.top)},markText:Ab($a),setBookmark:_a,setMarker:Ab(ab),clearMarker:Ab(bb),setLineClass:Ab(db),hideLine:Ab(function(a){return eb(a,!0)}),showLine:Ab(function(a){return eb(a,!1)}),onDeleteLine:function(a,b){if(\"number\"==typeof a){if(!r(a))return null;a=u(a)}return(a.handlers||(a.handlers=[])).push(b),a},lineInfo:fb,addWidget:function(a,b,c,d,e){a=ib(Ka(a));var f=a.yBot,g=a.x;if(b.style.position=\"absolute\",Jb.appendChild(b),\"over\"==d)f=a.y;else if(\"near\"==d){var h=Math.max(Ib.offsetHeight,Yb.height*lb()),i=Math.max(Jb.clientWidth,Nb.clientWidth)-ob();a.yBot+b.offsetHeight>h&&a.y>b.offsetHeight&&(f=a.y-b.offsetHeight),g+b.offsetWidth>i&&(g=i-b.offsetWidth)}b.style.top=f+nb()+\"px\",b.style.left=b.style.right=\"\",\"right\"==e?(g=Jb.clientWidth-b.offsetWidth,b.style.right=\"0px\"):(\"left\"==e?g=0:\"middle\"==e&&(g=(Jb.clientWidth-b.offsetWidth)/2),b.style.left=g+ob()+\"px\"),c&&xa(g,f,g+b.offsetWidth,f+b.offsetHeight)},lineCount:function(){return Yb.size},clipPos:Ka,getCursor:function(a){return null==a&&(a=lc.inverted),G(a?lc.from:lc.to)},somethingSelected:function(){return!E(lc.from,lc.to)},setCursor:Ab(function(a,b,c){null==b&&\"number\"==typeof a.line?Ia(a.line,a.ch,c):Ia(a,b,c)}),setSelection:Ab(function(a,b,c){(c?Fa:Ga)(Ka(a),Ka(b||a))}),getLine:function(a){if(r(a))return u(a).text},getLineHandle:function(a){if(r(a))return u(a)},setLine:Ab(function(a,b){r(a)&&la(b,{line:a,ch:0},{line:a,ch:u(a).text.length})}),removeLine:Ab(function(a){r(a)&&la(\"\",{line:a,ch:0},Ka({line:a+1,ch:0}))}),replaceRange:Ab(la),getRange:function(a,b){return oa(Ka(a),Ka(b))},execCommand:function(a){return P[a](vc)},moveH:Ab(Ma),deleteH:Ab(Na),moveV:Ab(Oa),toggleOverwrite:function(){mc=!mc},posFromIndex:function(a){var b,c=0;return Yb.iter(0,Yb.size,function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,void++c)}),Ka({line:c,ch:b})},indexFromPos:function(a){if(a.line<0||a.ch<0)return 0;var b=a.ch;return Yb.iter(0,a.line,function(a){b+=a.text.length+1}),b},operation:function(a){return Ab(a)()},refresh:function(){za(!0)},getInputField:function(){return Hb},getWrapperElement:function(){return Fb},getScrollerElement:function(){return Ib},getGutterElement:function(){return Lb}},wc=null,xc=!1,yc=\"\",zc=null;Za.prototype.clear=Ab(function(){for(var a=1/0,b=-(1/0),c=0,d=this.set.length;c<d;++c){var e=this.set[c],f=e.marked;if(f&&e.parent){var g=n(e);a=Math.min(a,g),b=Math.max(b,g);for(var h=0;h<f.length;++h)f[h].set==this.set&&f.splice(h--,1)}}a!=1/0&&dc.push({from:a,to:b+1})}),Za.prototype.find=function(){for(var a,b,c=0,d=this.set.length;c<d;++c)for(var e=this.set[c],f=e.marked,g=0;g<f.length;++g){var h=f[g];if(h.set==this.set&&(null!=h.from||null!=h.to)){var i=n(e);null!=i&&(null!=h.from&&(a={line:i,ch:h.from}),null!=h.to&&(b={line:i,ch:h.to}))}}return{from:a,to:b}};var Ac,Bc,Cc,Dc,Ec=Math.floor(16777215*Math.random()).toString(16),Fc=0,Gc={\"(\":\")>\",\")\":\"(<\",\"[\":\"]>\",\"]\":\"[<\",\"{\":\"}>\",\"}\":\"{<\"},Hc=0;for(var Ic in O)O.propertyIsEnumerable(Ic)&&!vc.propertyIsEnumerable(Ic)&&(vc[Ic]=O[Ic]);return vc}function b(a,b,c){function d(a,b,c){var e=b[a];if(null!=e)return e;if(null==c&&(c=b.fallthrough),null==c)return b.catchall;if(\"string\"==typeof c)return d(a,Q[c]);for(var f=0,g=c.length;f<g;++f)if(e=d(a,Q[c[f]]),null!=e)return e;return null}return b?d(a,b,c):d(a,Q[c])}function c(a){var b=Z[a.keyCode];return\"Ctrl\"==b||\"Alt\"==b||\"Shift\"==b||\"Mod\"==b}function d(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function e(a,b,c){return!a.startState||a.startState(b,c)}function f(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8}function g(a,b,c,d){this.from=a,this.to=b,this.style=c,this.set=d}function h(a){this.from=a,this.to=a,this.line=null}function i(a,b){this.styles=b||[a,null],this.text=a,this.height=1,this.marked=this.gutterMarker=this.className=this.handlers=null,this.stateAfter=this.parent=this.hidden=null}function j(a,b,c,d){for(var e=0,f=0,g=0;f<b;e+=2){var h=c[e],i=f+h.length;0==g?(i>a&&d.push(h.slice(a-f,Math.min(h.length,b-f)),c[e+1]),i>=a&&(g=1)):1==g&&(i>b?d.push(h.slice(0,b-f),c[e+1]):d.push(h,c[e+1])),f=i}}function k(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;b<c;++b)a[b].parent=this,d+=a[b].height;this.height=d}function l(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;d<e;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function m(a,b){for(;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(b<e){a=d;break}b-=e}return a.lines[b]}function n(a){if(null==a.parent)return null;for(var b=a.parent,c=J(b.lines,a),d=b.parent;d;b=d,d=d.parent){var e=0;for(d.children.length;d.children[e]!=b;++e)c+=d.children[e].chunkSize()}return c}function o(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.height;if(b<g){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;d<e;++d){var h=a.lines[d],i=h.height;if(b<i)break;b-=i}return c+d}function p(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.chunkSize();if(b<g){a=f;continue a}b-=g,c+=f.height}return c}while(!a.lines);for(var d=0;d<b;++d)c+=a.lines[d].height;return c}function q(){this.time=0,this.done=[],this.undone=[]}function r(){v(this)}function s(a){return a.stop||(a.stop=r),a}function t(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function u(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function v(a){t(a),u(a)}function w(a){return a.target||a.srcElement}function x(a){return a.which?a.which:1&a.button?1:2&a.button?3:4&a.button?2:void 0}function y(a,b,c,d){\nif(\"function\"==typeof a.addEventListener){if(a.addEventListener(b,c,!1),d)return function(){a.removeEventListener(b,c,!1)}}else{var e=function(a){c(a||window.event)};if(a.attachEvent(\"on\"+b,e),d)return function(){a.detachEvent(\"on\"+b,e)}}}function z(){this.id=null}function A(a,b,c){null==b&&(b=a.search(/[^\\s\\u00a0]/),b==-1&&(b=a.length));for(var d=0,e=0;d<b;++d)\"\\t\"==a.charAt(d)?e+=c-e%c:++e;return e}function B(a){return a.currentStyle?a.currentStyle:window.getComputedStyle(a,null)}function C(a,b){for(var c=a.ownerDocument.body,d=0,e=0,f=!1,g=a;g;g=g.offsetParent){var h=g.offsetLeft,i=g.offsetTop;g==c?(d+=Math.abs(h),e+=Math.abs(i)):(d+=h,e+=i),b&&\"fixed\"==B(g).position&&(f=!0)}for(var j=b&&!f?null:c,g=a.parentNode;g!=j;g=g.parentNode)null!=g.scrollLeft&&(d-=g.scrollLeft,e-=g.scrollTop);return{left:d,top:e}}function D(a){return a.textContent||a.innerText||a.nodeValue||\"\"}function E(a,b){return a.line==b.line&&a.ch==b.ch}function F(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function G(a){return{line:a.line,ch:a.ch}}function H(a){return W.textContent=a,W.innerHTML}function I(a,b){if(!b)return a?a.length:0;if(!a)return b.length;for(var c=a.length,d=b.length;c>=0&&d>=0&&a.charAt(c)==b.charAt(d);--c,--d);return d+1}function J(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;++c)if(a[c]==b)return c;return-1}function K(a){return/\\w/.test(a)||a.toUpperCase()!=a.toLowerCase()}a.defaults={value:\"\",mode:null,theme:\"default\",indentUnit:2,indentWithTabs:!1,tabSize:4,keyMap:\"default\",extraKeys:null,electricChars:!0,onKeyEvent:null,lineWrapping:!1,lineNumbers:!1,gutter:!1,fixedGutter:!1,firstLineNumber:1,readOnly:!1,onChange:null,onCursorActivity:null,onGutterClick:null,onHighlightComplete:null,onUpdate:null,onFocus:null,onBlur:null,onScroll:null,matchBrackets:!1,workTime:100,workDelay:200,pollInterval:100,undoDepth:40,tabindex:null,document:window.document};var L=/Mac/.test(navigator.platform),M=(/Win/.test(navigator.platform),{}),N={};a.defineMode=function(b,c){a.defaults.mode||\"null\"==b||(a.defaults.mode=b),M[b]=c},a.defineMIME=function(a,b){N[a]=b},a.getMode=function(b,c){if(\"string\"==typeof c&&N.hasOwnProperty(c)&&(c=N[c]),\"string\"==typeof c)var d=c,e={};else if(null!=c)var d=c.name,e=c;var f=M[d];return f?f(b,e||{}):(window.console&&console.warn(\"No mode \"+d+\" found, falling back to plain text.\"),a.getMode(b,\"text/plain\"))},a.listModes=function(){var a=[];for(var b in M)M.propertyIsEnumerable(b)&&a.push(b);return a},a.listMIMEs=function(){var a=[];for(var b in N)N.propertyIsEnumerable(b)&&a.push({mime:b,mode:N[b]});return a};var O=a.extensions={};a.defineExtension=function(a,b){O[a]=b};var P=a.commands={selectAll:function(a){a.setSelection({line:0,ch:0},{line:a.lineCount()-1})},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!E(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange(\"\",b,d?c:{line:b.line}):a.replaceRange(\"\",b,{line:b.line+1,ch:0})},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange(\"\",{line:b,ch:0},{line:b})},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.setCursor(0,0,!0)},goDocEnd:function(a){a.setSelection({line:a.lineCount()-1},null,!0)},goLineStart:function(a){a.setCursor(a.getCursor().line,0,!0)},goLineStartSmart:function(a){var b=a.getCursor(),c=a.getLine(b.line),d=Math.max(0,c.search(/\\S/));a.setCursor(b.line,b.ch<=d&&b.ch?0:d,!0)},goLineEnd:function(a){a.setSelection({line:a.getCursor().line},null,!0)},goLineUp:function(a){a.moveV(-1,\"line\")},goLineDown:function(a){a.moveV(1,\"line\")},goPageUp:function(a){a.moveV(-1,\"page\")},goPageDown:function(a){a.moveV(1,\"page\")},goCharLeft:function(a){a.moveH(-1,\"char\")},goCharRight:function(a){a.moveH(1,\"char\")},goColumnLeft:function(a){a.moveH(-1,\"column\")},goColumnRight:function(a){a.moveH(1,\"column\")},goWordLeft:function(a){a.moveH(-1,\"word\")},goWordRight:function(a){a.moveH(1,\"word\")},delCharLeft:function(a){a.deleteH(-1,\"char\")},delCharRight:function(a){a.deleteH(1,\"char\")},delWordLeft:function(a){a.deleteH(-1,\"word\")},delWordRight:function(a){a.deleteH(1,\"word\")},indentAuto:function(a){a.indentSelection(\"smart\")},indentMore:function(a){a.indentSelection(\"add\")},indentLess:function(a){a.indentSelection(\"subtract\")},insertTab:function(a){a.replaceSelection(\"\\t\",\"end\")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),{line:b.line,ch:b.ch-1},{line:b.line,ch:b.ch+1})},newlineAndIndent:function(a){a.replaceSelection(\"\\n\",\"end\"),a.indentLine(a.getCursor().line)},toggleOverwrite:function(a){a.toggleOverwrite()}},Q=a.keyMap={};Q.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharRight\",Backspace:\"delCharLeft\",Tab:\"indentMore\",\"Shift-Tab\":\"indentLess\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\"},Q.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Alt-Up\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Down\":\"goDocEnd\",\"Ctrl-Left\":\"goWordLeft\",\"Ctrl-Right\":\"goWordRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delWordLeft\",\"Ctrl-Delete\":\"delWordRight\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",fallthrough:\"basic\"},Q.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goWordLeft\",\"Alt-Right\":\"goWordRight\",\"Cmd-Left\":\"goLineStart\",\"Cmd-Right\":\"goLineEnd\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-Alt-Backspace\":\"delWordRight\",\"Alt-Delete\":\"delWordRight\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",fallthrough:[\"basic\",\"emacsy\"]},Q[\"default\"]=L?Q.macDefault:Q.pcDefault,Q.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageUp\",\"Shift-Ctrl-V\":\"goPageDown\",\"Ctrl-D\":\"delCharRight\",\"Ctrl-H\":\"delCharLeft\",\"Alt-D\":\"delWordRight\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\"},a.fromTextArea=function(b,c){function d(){b.value=h.getValue()}function e(){d(),b.form.submit=g,b.form.submit(),b.form.submit=e}if(c||(c={}),c.value=b.value,!c.tabindex&&b.tabindex&&(c.tabindex=b.tabindex),b.form){var f=y(b.form,\"submit\",d,!0);if(\"function\"==typeof b.form.submit){var g=b.form.submit;b.form.submit=e}}b.style.display=\"none\";var h=a(function(a){b.parentNode.insertBefore(a,b.nextSibling)},c);return h.save=d,h.getTextArea=function(){return b},h.toTextArea=function(){d(),b.parentNode.removeChild(h.getWrapperElement()),b.style.display=\"\",b.form&&(f(),\"function\"==typeof b.form.submit&&(b.form.submit=g))},h},a.copyState=d,a.startState=e,f.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if(\"string\"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));if(c)return++this.pos,b},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return A(this.string,this.start,this.tabSize)},indentation:function(){return A(this.string,null,this.tabSize)},match:function(a,b,c){function d(a){return c?a.toLowerCase():a}if(\"string\"!=typeof a){var e=this.string.slice(this.pos).match(a);return e&&b!==!1&&(this.pos+=e[0].length),e}if(d(this.string).indexOf(d(a),this.pos)==this.pos)return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},a.StringStream=f,g.prototype={attach:function(a){this.set.push(a)},detach:function(a){var b=J(this.set,a);b>-1&&this.set.splice(b,1)},split:function(a,b){if(this.to<=a&&null!=this.to)return null;var c=this.from<a||null==this.from?null:this.from-a+b,d=null==this.to?null:this.to-a+b;return new g(c,d,this.style,this.set)},dup:function(){return new g(null,null,this.style,this.set)},clipTo:function(a,b,c,d,e){null!=this.from&&this.from>=b&&(this.from=Math.max(d,this.from)+e),null!=this.to&&this.to>b&&(this.to=d<this.to?this.to+e:b),a&&d>this.from&&(d<this.to||null==this.to)&&(this.from=null),c&&(b<this.to||null==this.to)&&(b>this.from||null==this.from)&&(this.to=null)},isDead:function(){return null!=this.from&&null!=this.to&&this.from>=this.to},sameSet:function(a){return this.set==a.set}},h.prototype={attach:function(a){this.line=a},detach:function(a){this.line==a&&(this.line=null)},split:function(a,b){if(a<this.from)return this.from=this.to=this.from-a+b,this},isDead:function(){return this.from>this.to},clipTo:function(a,b,c,d,e){(a||b<this.from)&&(c||d>this.to)?(this.from=0,this.to=-1):this.from>b&&(this.from=this.to=Math.max(d,this.from)+e)},sameSet:function(a){return!1},find:function(){return this.line&&this.line.parent?{line:n(this.line),ch:this.from}:null},clear:function(){if(this.line){var a=J(this.line.marked,this);a!=-1&&this.line.marked.splice(a,1),this.line=null}}},i.inheritMarks=function(a,b){var c=new i(a),d=b&&b.marked;if(d)for(var e=0;e<d.length;++e)if(null==d[e].to&&d[e].style){var f=c.marked||(c.marked=[]),g=d[e],h=g.dup();f.push(h),h.attach(c)}return c},i.prototype={replace:function(a,b,c){var d=[],e=this.marked,f=null==b?this.text.length:b;if(j(0,a,this.styles,d),c&&d.push(c,null),j(f,this.text.length,this.styles,d),this.styles=d,this.text=this.text.slice(0,a)+c+this.text.slice(f),this.stateAfter=null,e)for(var g=c.length-(f-a),h=0,i=e[h];h<e.length;++h)i.clipTo(null==a,a||0,null==b,f,g),i.isDead()&&(i.detach(this),e.splice(h--,1))},split:function(a,b){var c=[b,null],d=this.marked;j(a,this.text.length,this.styles,c);var e=new i(b+this.text.slice(a),c);if(d)for(var f=0;f<d.length;++f){var g=d[f],h=g.split(a,b.length);h&&(e.marked||(e.marked=[]),e.marked.push(h),h.attach(e))}return e},append:function(a){var b=this.text.length,c=a.marked,d=this.marked;if(this.text+=a.text,j(0,a.text.length,a.styles,this.styles),d)for(var e=0;e<d.length;++e)null==d[e].to&&(d[e].to=b);if(c&&c.length){d||(this.marked=d=[]);a:for(var e=0;e<c.length;++e){var f=c[e];if(!f.from)for(var g=0;g<d.length;++g){var h=d[g];if(h.to==b&&h.sameSet(f)){h.to=null==f.to?null:f.to+b,h.isDead()&&(h.detach(this),c.splice(e--,1));continue a}}d.push(f),f.attach(this),f.from+=b,null!=f.to&&(f.to+=b)}}},fixMarkEnds:function(a){var b=this.marked,c=a.marked;if(b)for(var d=0;d<b.length;++d){var e=b[d],f=null==e.to;if(f&&c)for(var g=0;g<c.length;++g)if(c[g].sameSet(e)){f=!1;break}f&&(e.to=this.text.length)}},fixMarkStarts:function(){var a=this.marked;if(a)for(var b=0;b<a.length;++b)null==a[b].from&&(a[b].from=0)},addMark:function(a){a.attach(this),null==this.marked&&(this.marked=[]),this.marked.push(a),this.marked.sort(function(a,b){return(a.from||0)-(b.from||0)})},highlight:function(a,b,c){var d,e=new f(this.text,c),g=this.styles,h=0,i=!1,j=g[0];for(\"\"==this.text&&a.blankLine&&a.blankLine(b);!e.eol();){var k=a.token(e,b),l=this.text.slice(e.start,e.pos);if(e.start=e.pos,h&&g[h-1]==k?g[h-2]+=l:l&&(!i&&(g[h+1]!=k||h&&g[h-2]!=d)&&(i=!0),g[h++]=l,g[h++]=k,d=j,j=g[h]),e.pos>5e3){g[h++]=this.text.slice(e.pos),g[h++]=null;break}}return g.length!=h&&(g.length=h,i=!0),h&&g[h-2]!=d&&(i=!0),i||g.length<5&&this.text.length<10&&null},getTokenAt:function(a,b,c){for(var d=this.text,e=new f(d);e.pos<c&&!e.eol();){e.start=e.pos;var g=a.token(e,b)}return{start:e.start,end:e.pos,string:e.current(),className:g||null,state:b}},indentation:function(a){return A(this.text,null,a)},getHTML:function(a,b,c,d,e){function f(a,b){a&&(i&&T&&\" \"==a.charAt(0)&&(a=\" \"+a.slice(1)),i=!1,b?h.push('<span class=\"',b,'\">',H(a).replace(/\\t/g,d),\"</span>\"):h.push(H(a).replace(/\\t/g,d)))}function g(){l&&(r+=1,s=r<l.length?l[r]:null)}var h=[],i=!0;c&&h.push(this.className?'<pre class=\"'+this.className+'\">':\"<pre>\");var j=this.styles,k=this.text,l=this.marked;a==b&&(a=null);var m=k.length;if(null!=e&&(m=Math.min(e,m)),k||null!=e)if(l||null!=a){var n,o=0,p=0,q=\"\",r=-1,s=null;for(g();o<m;){var t=m,u=\"\";for(null!=a&&(a>o?t=a:(null==b||b>o)&&(u=\" CodeMirror-selected\",null!=b&&(t=Math.min(t,b))));s&&null!=s.to&&s.to<=o;)g();for(s&&(s.from>o?t=Math.min(t,s.from):(u+=\" \"+s.style,null!=s.to&&(t=Math.min(t,s.to))));;){var v=o+q.length,w=n;if(u&&(w=n?n+u:u),f(v>t?q.slice(0,t-o):q,w),v>=t){q=q.slice(t-o),o=t;break}o=v,q=j[p++],n=\"cm-\"+j[p++]}}null!=a&&null==b&&f(\" \",\"CodeMirror-selected\")}else for(var p=0,x=0;x<m;p+=2){var y=j[p],n=j[p+1],z=y.length;x+z>m&&(y=y.slice(0,m-x)),x+=z,f(y,n&&\"cm-\"+n)}else f(\" \",null!=a&&null==b?\"CodeMirror-selected\":null);return c&&h.push(\"</pre>\"),h.join(\"\")},cleanUp:function(){if(this.parent=null,this.marked)for(var a=0,b=this.marked.length;a<b;++a)this.marked[a].detach(this)}},k.prototype={chunkSize:function(){return this.lines.length},remove:function(a,b,c){for(var d=a,e=a+b;d<e;++d){var f=this.lines[d];if(this.height-=f.height,f.cleanUp(),f.handlers)for(var g=0;g<f.handlers.length;++g)c.push(f.handlers[g])}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertHeight:function(a,b,c){this.height+=c,this.lines.splice.apply(this.lines,[a,0].concat(b));for(var d=0,e=b.length;d<e;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;a<d;++a)if(c(this.lines[a]))return!0}},l.prototype={chunkSize:function(){return this.size},remove:function(a,b,c){this.size-=b;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<f){var g=Math.min(b,f-a),h=e.height;if(e.remove(a,g,c),this.height-=h-e.height,f==g&&(this.children.splice(d--,1),e.parent=null),0==(b-=g))break;a=0}else a-=f}if(this.size-b<25){var i=[];this.collapse(i),this.children=[new k(i)]}},collapse:function(a){for(var b=0,c=this.children.length;b<c;++b)this.children[b].collapse(a)},insert:function(a,b){for(var c=0,d=0,e=b.length;d<e;++d)c+=b[d].height;this.insertHeight(a,b,c)},insertHeight:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<=g){if(f.insertHeight(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new k(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new l(b);if(a.parent){a.size-=c.size,a.height-=c.height;var d=J(a.parent.children,a);a.parent.children.splice(d+1,0,c)}else{var e=new l(a.children);e.parent=a,a.children=[e,c],a=e}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iter:function(a,b,c){this.iterN(a,b-a,c)},iterN:function(a,b,c){for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<g){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}},q.prototype={addChange:function(a,b,c){this.undone.length=0;var d=+new Date,e=this.done[this.done.length-1];if(d-this.time>400||!e||e.start>a+b||e.start+e.added<a-e.added+e.old.length)this.done.push({start:a,added:b,old:c});else{var f=0;if(a<e.start){for(var g=e.start-a-1;g>=0;--g)e.old.unshift(c[g]);e.added+=e.start-a,e.start=a}else e.start<a&&(f=a-e.start,b+=f);for(var g=e.added-f,h=c.length;g<h;++g)e.old.push(c[g]);e.added<b&&(e.added=b)}this.time=d}},a.e_stop=v,a.e_preventDefault=t,a.e_stopPropagation=u,a.connect=y,z.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}};var R=function(){if(/MSIE [1-8]\\b/.test(navigator.userAgent))return!1;var a=document.createElement(\"div\");return\"draggable\"in a}(),S=/gecko\\/\\d{7}/i.test(navigator.userAgent),T=/MSIE \\d/.test(navigator.userAgent),U=/WebKit\\//.test(navigator.userAgent),V=\"\\n\";!function(){var a=document.createElement(\"textarea\");a.value=\"foo\\nbar\",a.value.indexOf(\"\\r\")>-1&&(V=\"\\r\\n\")}(),null!=document.documentElement.getBoundingClientRect&&(C=function(a,b){try{var c=a.getBoundingClientRect();c={top:c.top,left:c.left}}catch(d){c={top:0,left:0}}if(!b)if(null==window.pageYOffset){var e=document.documentElement||document.body.parentNode;null==e.scrollTop&&(e=document.body),c.top+=e.scrollTop,c.left+=e.scrollLeft}else c.top+=window.pageYOffset,c.left+=window.pageXOffset;return c});var W=document.createElement(\"pre\");\"\\na\"==H(\"a\")?H=function(a){return W.textContent=a,W.innerHTML.slice(1)}:\"\\t\"!=H(\"\\t\")&&(H=function(a){return W.innerHTML=\"\",W.appendChild(document.createTextNode(a)),W.innerHTML}),a.htmlEscape=H;var X=3!=\"\\n\\nb\".split(/\\n/).length?function(a){for(var b,c=0,d=[];(b=a.indexOf(\"\\n\",c))>-1;)d.push(a.slice(c,\"\\r\"==a.charAt(b-1)?b-1:b)),c=b+1;return d.push(a.slice(c)),d}:function(a){return a.split(/\\r?\\n/)};a.splitLines=X;var Y=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return!(!b||b.parentElement()!=a)&&0!=b.compareEndPoints(\"StartToEnd\",b)};a.defineMode(\"null\",function(){return{token:function(a){a.skipToEnd()}}}),a.defineMIME(\"text/plain\",\"null\");var Z={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",91:\"Mod\",92:\"Mod\",93:\"Mod\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63276:\"PageUp\",63277:\"PageDown\",63275:\"End\",63273:\"Home\",63234:\"Left\",63232:\"Up\",63235:\"Right\",63233:\"Down\",63302:\"Insert\",63272:\"Delete\"};return a.keyNames=Z,function(){for(var a=0;a<10;a++)Z[a+48]=String(a);for(var a=65;a<=90;a++)Z[a]=String.fromCharCode(a);for(var a=1;a<=12;a++)Z[a+111]=Z[a+63235]=\"F\"+a}(),a}();CodeMirror.defineMode(\"xml\",function(a,b){function c(a,b){function c(c){return b.tokenize=c,c(a,b)}var e=a.next();if(\"<\"==e){if(a.eat(\"!\"))return a.eat(\"[\")?a.match(\"CDATA[\")?c(f(\"atom\",\"]]>\")):null:a.match(\"--\")?c(f(\"comment\",\"-->\")):a.match(\"DOCTYPE\",!0,!0)?(a.eatWhile(/[\\w\\._\\-]/),c(g(1))):null;if(a.eat(\"?\"))return a.eatWhile(/[\\w\\._\\-]/),b.tokenize=f(\"meta\",\"?>\"),\"meta\";s=a.eat(\"/\")?\"closeTag\":\"openTag\",a.eatSpace(),r=\"\";for(var h;h=a.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);)r+=h;return b.tokenize=d,\"tag\"}return\"&\"==e?(a.eatWhile(/[^;]/),a.eat(\";\"),\"atom\"):(a.eatWhile(/[^&<]/),null)}function d(a,b){var d=a.next();return\">\"==d||\"/\"==d&&a.eat(\">\")?(b.tokenize=c,s=\">\"==d?\"endTag\":\"selfcloseTag\",\"tag\"):\"=\"==d?(s=\"equals\",null):/[\\'\\\"]/.test(d)?(b.tokenize=e(d),b.tokenize(a,b)):(a.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/),\"word\")}function e(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=d;break}return\"string\"}}function f(a,b){return function(d,e){for(;!d.eol();){if(d.match(b)){e.tokenize=c;break}d.next()}return a}}function g(a){return function(b,d){for(var e;null!=(e=b.next());){if(\"<\"==e)return d.tokenize=g(a+1),d.tokenize(b,d);if(\">\"==e){if(1==a){d.tokenize=c;break}return d.tokenize=g(a-1),d.tokenize(b,d)}}return\"meta\"}}function h(){for(var a=arguments.length-1;a>=0;a--)t.cc.push(arguments[a])}function i(){return h.apply(null,arguments),!0}function j(a,b){var c=w.doNotIndent.hasOwnProperty(a)||t.context&&t.context.noIndent;t.context={prev:t.context,tagName:a,indent:t.indented,startOfLine:b,noIndent:c}}function k(){t.context&&(t.context=t.context.prev)}function l(a){if(\"openTag\"==a)return t.tagName=r,i(o,m(t.startOfLine));if(\"closeTag\"==a){var b=!1;return b=!t.context||t.context.tagName!=r,b&&(u=\"error\"),i(n(b))}return i()}function m(a){return function(b){return\"selfcloseTag\"==b||\"endTag\"==b&&w.autoSelfClosers.hasOwnProperty(t.tagName.toLowerCase())?i():\"endTag\"==b?(j(t.tagName,a),i()):i()}}function n(a){return function(b){return a&&(u=\"error\"),\"endTag\"==b?(k(),i()):(u=\"error\",i(arguments.callee))}}function o(a){return\"word\"==a?(u=\"attribute\",i(o)):\"equals\"==a?i(p,o):\"string\"==a?(u=\"error\",i(o)):h()}function p(a){return\"word\"==a&&w.allowUnquoted?(u=\"string\",i()):\"string\"==a?i(q):h()}function q(a){return\"string\"==a?i(q):h()}var r,s,t,u,v=a.indentUnit,w=b.htmlMode?{autoSelfClosers:{br:!0,img:!0,hr:!0,link:!0,input:!0,meta:!0,col:!0,frame:!0,base:!0,area:!0},doNotIndent:{pre:!0},allowUnquoted:!0}:{autoSelfClosers:{},doNotIndent:{},allowUnquoted:!1},x=b.alignCDATA;return{startState:function(){return{tokenize:c,cc:[],indented:0,startOfLine:!0,tagName:null,context:null}},token:function(a,b){if(a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;u=s=r=null;var c=b.tokenize(a,b);if(b.type=s,(c||s)&&\"comment\"!=c)for(t=b;;){var d=b.cc.pop()||l;if(d(s||c))break}return b.startOfLine=!1,u||c},indent:function(a,b,e){var f=a.context;if(a.tokenize!=d&&a.tokenize!=c||f&&f.noIndent)return e?e.match(/^(\\s*)/)[0].length:0;if(x&&/<!\\[CDATA\\[/.test(b))return 0;for(f&&/^<\\//.test(b)&&(f=f.prev);f&&!f.startOfLine;)f=f.prev;return f?f.indent+v:0},compareStates:function(a,b){if(a.indented!=b.indented||a.tokenize!=b.tokenize)return!1;for(var c=a.context,d=b.context;;c=c.prev,d=d.prev){if(!c||!d)return c==d;if(c.tagName!=d.tagName)return!1}},electricChars:\"/\"}}),CodeMirror.defineMIME(\"application/xml\",\"xml\"),CodeMirror.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0}),CodeMirror.defineMode(\"javascript\",function(a,b){function c(a,b,c){return b.tokenize=c,c(a,b)}function d(a,b){for(var c,d=!1;null!=(c=a.next());){if(c==b&&!d)return!1;d=!d&&\"\\\\\"==c}return d}function e(a,b,c){return K=a,L=c,b}function f(a,b){var f=a.next();if('\"'==f||\"'\"==f)return c(a,b,g(f));if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(f))return e(f);if(\"0\"==f&&a.eat(/x/i))return a.eatWhile(/[\\da-f]/i),e(\"number\",\"number\");if(/\\d/.test(f))return a.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),e(\"number\",\"number\");if(\"/\"==f)return a.eat(\"*\")?c(a,b,h):a.eat(\"/\")?(a.skipToEnd(),e(\"comment\",\"comment\")):b.reAllowed?(d(a,\"/\"),a.eatWhile(/[gimy]/),e(\"regexp\",\"string\")):(a.eatWhile(P),e(\"operator\",null,a.current()));if(\"#\"==f)return a.skipToEnd(),e(\"error\",\"error\");if(P.test(f))return a.eatWhile(P),e(\"operator\",null,a.current());a.eatWhile(/[\\w\\$_]/);var i=a.current(),j=O.propertyIsEnumerable(i)&&O[i];return j&&b.kwAllowed?e(j.type,j.style,i):e(\"variable\",\"variable\",i)}function g(a){return function(b,c){return d(b,a)||(c.tokenize=f),e(\"string\",\"string\")}}function h(a,b){for(var c,d=!1;c=a.next();){if(\"/\"==c&&d){b.tokenize=f;break}d=\"*\"==c}return e(\"comment\",\"comment\")}function i(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function j(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function k(a,b,c,d,e){var f=a.cc;for(R.state=a,R.stream=e,R.marked=null,R.cc=f,a.lexical.hasOwnProperty(\"align\")||(a.lexical.align=!0);;){var g=f.length?f.pop():N?u:t;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return R.marked?R.marked:\"variable\"==c&&j(a,d)?\"variable-2\":b}}}function l(){for(var a=arguments.length-1;a>=0;a--)R.cc.push(arguments[a])}function m(){return l.apply(null,arguments),!0}function n(a){var b=R.state;if(b.context){R.marked=\"def\";for(var c=b.localVars;c;c=c.next)if(c.name==a)return;b.localVars={name:a,next:b.localVars}}}function o(){R.state.context||(R.state.localVars=S),R.state.context={prev:R.state.context,vars:R.state.localVars}}function p(){R.state.localVars=R.state.context.vars,R.state.context=R.state.context.prev}function q(a,b){var c=function(){var c=R.state;c.lexical=new i(c.indented,R.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function r(){var a=R.state;a.lexical.prev&&(\")\"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function s(a){return function(b){return b==a?m():\";\"==a?l():m(arguments.callee)}}function t(a){return\"var\"==a?m(q(\"vardef\"),C,s(\";\"),r):\"keyword a\"==a?m(q(\"form\"),u,t,r):\"keyword b\"==a?m(q(\"form\"),t,r):\"{\"==a?m(q(\"}\"),B,r):\";\"==a?m():\"function\"==a?m(I):\"for\"==a?m(q(\"form\"),s(\"(\"),q(\")\"),E,s(\")\"),r,t,r):\"variable\"==a?m(q(\"stat\"),x):\"switch\"==a?m(q(\"form\"),u,q(\"}\",\"switch\"),s(\"{\"),B,r,r):\"case\"==a?m(u,s(\":\")):\"default\"==a?m(s(\":\")):\"catch\"==a?m(q(\"form\"),o,s(\"(\"),J,s(\")\"),t,r,p):l(q(\"stat\"),u,s(\";\"),r)}function u(a){return Q.hasOwnProperty(a)?m(w):\"function\"==a?m(I):\"keyword c\"==a?m(v):\"(\"==a?m(q(\")\"),u,s(\")\"),r,w):\"operator\"==a?m(u):\"[\"==a?m(q(\"]\"),A(u,\"]\"),r,w):\"{\"==a?m(q(\"}\"),A(z,\"}\"),r,w):m()}function v(a){return a.match(/[;\\}\\)\\],]/)?l():l(u)}function w(a,b){if(\"operator\"==a&&/\\+\\+|--/.test(b))return m(w);if(\"operator\"==a)return m(u);if(\";\"!=a)return\"(\"==a?m(q(\")\"),A(u,\")\"),r,w):\".\"==a?m(y,w):\"[\"==a?m(q(\"]\"),u,s(\"]\"),r,w):void 0}function x(a){return\":\"==a?m(r,t):l(w,s(\";\"),r)}function y(a){if(\"variable\"==a)return R.marked=\"property\",m()}function z(a){if(\"variable\"==a&&(R.marked=\"property\"),Q.hasOwnProperty(a))return m(s(\":\"),u)}function A(a,b){function c(d){return\",\"==d?m(a,c):d==b?m():m(s(b))}return function(d){return d==b?m():l(a,c)}}function B(a){return\"}\"==a?m():l(t,B)}function C(a,b){return\"variable\"==a?(n(b),m(D)):m()}function D(a,b){return\"=\"==b?m(u,D):\",\"==a?m(C):void 0}function E(a){return\"var\"==a?m(C,G):\";\"==a?l(G):\"variable\"==a?m(F):l(G)}function F(a,b){return\"in\"==b?m(u):m(w,G)}function G(a,b){return\";\"==a?m(H):\"in\"==b?m(u):m(u,s(\";\"),H)}function H(a){\")\"!=a&&m(u)}function I(a,b){return\"variable\"==a?(n(b),m(I)):\"(\"==a?m(q(\")\"),o,A(J,\")\"),r,t,p):void 0}function J(a,b){if(\"variable\"==a)return n(b),m()}var K,L,M=a.indentUnit,N=b.json,O=function(){function a(a){return{type:a,style:\"keyword\"}}var b=a(\"keyword a\"),c=a(\"keyword b\"),d=a(\"keyword c\"),e=a(\"operator\"),f={type:\"atom\",style:\"atom\"};return{\"if\":b,\"while\":b,\"with\":b,\"else\":c,\"do\":c,\"try\":c,\"finally\":c,\"return\":d,\"break\":d,\"continue\":d,\"new\":d,\"delete\":d,\"throw\":d,\"var\":a(\"var\"),\"const\":a(\"var\"),\"let\":a(\"var\"),\"function\":a(\"function\"),\"catch\":a(\"catch\"),\"for\":a(\"for\"),\"switch\":a(\"switch\"),\"case\":a(\"case\"),\"default\":a(\"default\"),\"in\":e,\"typeof\":e,\"instanceof\":e,\"true\":f,\"false\":f,\"null\":f,undefined:f,NaN:f,Infinity:f}}(),P=/[+\\-*&%=<>!?|]/,Q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0},R={state:null,column:null,marked:null,cc:null},S={name:\"this\",next:{name:\"arguments\"}};return r.lex=!0,{startState:function(a){return{tokenize:f,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new i((a||0)-M,0,\"block\",(!1)),localVars:null,context:null,indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty(\"align\")||(b.lexical.align=!1),b.indented=a.indentation()),a.eatSpace())return null;var c=b.tokenize(a,b);return\"comment\"==K?c:(b.reAllowed=\"operator\"==K||\"keyword c\"==K||K.match(/^[\\[{}\\(,;:]$/),b.kwAllowed=\".\"!=K,k(b,c,K,L,a))},indent:function(a,b){if(a.tokenize!=f)return 0;var c=b&&b.charAt(0),d=a.lexical,e=d.type,g=c==e;return\"vardef\"==e?d.indented+4:\"form\"==e&&\"{\"==c?d.indented:\"stat\"==e||\"form\"==e?d.indented+M:\"switch\"!=d.info||g?d.align?d.column+(g?0:1):d.indented+(g?0:M):d.indented+(/^(?:case|default)\\b/.test(b)?M:2*M)},electricChars:\":{}\"}}),CodeMirror.defineMIME(\"text/javascript\",\"javascript\"),CodeMirror.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),CodeMirror.defineMode(\"css\",function(a){function b(a,b){return g=b,a}function c(a,c){var g=a.next();return\"@\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"meta\",a.current())):\"/\"==g&&a.eat(\"*\")?(c.tokenize=d,d(a,c)):\"<\"==g&&a.eat(\"!\")?(c.tokenize=e,e(a,c)):\"=\"!=g?\"~\"!=g&&\"|\"!=g||!a.eat(\"=\")?'\"'==g||\"'\"==g?(c.tokenize=f(g),c.tokenize(a,c)):\"#\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"atom\",\"hash\")):\"!\"==g?(a.match(/^\\s*\\w*/),b(\"keyword\",\"important\")):/\\d/.test(g)?(a.eatWhile(/[\\w.%]/),b(\"number\",\"unit\")):/[,.+>*\\/]/.test(g)?b(null,\"select-op\"):/[;{}:\\[\\]]/.test(g)?b(null,g):(a.eatWhile(/[\\w\\\\\\-]/),b(\"variable\",\"variable\")):b(null,\"compare\"):void b(null,\"compare\")}function d(a,d){for(var e,f=!1;null!=(e=a.next());){if(f&&\"/\"==e){d.tokenize=c;break}f=\"*\"==e}return b(\"comment\",\"comment\")}function e(a,d){for(var e,f=0;null!=(e=a.next());){if(f>=2&&\">\"==e){d.tokenize=c;break}f=\"-\"==e?f+1:0}return b(\"comment\",\"comment\")}function f(a){return function(d,e){for(var f,g=!1;null!=(f=d.next())&&(f!=a||g);)g=!g&&\"\\\\\"==f;return g||(e.tokenize=c),b(\"string\",\"string\")}}var g,h=a.indentUnit;return{startState:function(a){return{tokenize:c,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b),d=b.stack[b.stack.length-1];return\"hash\"==g&&\"rule\"==d?c=\"atom\":\"variable\"==c&&(\"rule\"==d?c=\"number\":d&&\"@media{\"!=d||(c=\"tag\")),\"rule\"==d&&/^[\\{\\};]$/.test(g)&&b.stack.pop(),\"{\"==g?\"@media\"==d?b.stack[b.stack.length-1]=\"@media{\":b.stack.push(\"{\"):\"}\"==g?b.stack.pop():\"@media\"==g?b.stack.push(\"@media\"):\"{\"==d&&\"comment\"!=g&&b.stack.push(\"rule\"),c},indent:function(a,b){var c=a.stack.length;return/^\\}/.test(b)&&(c-=\"rule\"==a.stack[a.stack.length-1]?2:1),a.baseIndent+c*h},electricChars:\"}\"}}),CodeMirror.defineMIME(\"text/css\",\"css\"),CodeMirror.defineMode(\"htmlmixed\",function(a,b){function c(a,b){var c=g.token(a,b.htmlState);return\"tag\"==c&&\">\"==a.current()&&b.htmlState.context&&(/^script$/i.test(b.htmlState.context.tagName)?(b.token=e,b.localState=h.startState(g.indent(b.htmlState,\"\")),b.mode=\"javascript\"):/^style$/i.test(b.htmlState.context.tagName)&&(b.token=f,b.localState=i.startState(g.indent(b.htmlState,\"\")),b.mode=\"css\")),c}function d(a,b,c){var d=a.current(),e=d.search(b);return e>-1&&a.backUp(d.length-e),c}function e(a,b){return a.match(/^<\\/\\s*script\\s*>/i,!1)?(b.token=c,b.curState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*script\\s*>/,h.token(a,b.localState))}function f(a,b){return a.match(/^<\\/\\s*style\\s*>/i,!1)?(b.token=c,b.localState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*style\\s*>/,i.token(a,b.localState))}var g=CodeMirror.getMode(a,{name:\"xml\",htmlMode:!0}),h=CodeMirror.getMode(a,\"javascript\"),i=CodeMirror.getMode(a,\"css\");return{startState:function(){var a=g.startState();return{token:c,localState:null,mode:\"html\",htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.token==f?i:h,a.localState);return{token:a.token,localState:b,mode:a.mode,htmlState:CodeMirror.copyState(g,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==c||/^\\s*<\\//.test(b)?g.indent(a.htmlState,b):a.token==e?h.indent(a.localState,b):i.indent(a.localState,b)},compareStates:function(a,b){return g.compareStates(a.htmlState,b.htmlState)},electricChars:\"/{}:\"}}),CodeMirror.defineMIME(\"text/html\",\"htmlmixed\");"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/jquery-1.10.2.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){function c(a){var b=a.length,c=ka.type(a);return!ka.isWindow(a)&&(!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)))}function d(a){var b=za[a]={};return ka.each(a.match(ma)||[],function(a,c){b[c]=!0}),b}function e(a,c,d,e){if(ka.acceptData(a)){var f,g,h=ka.expando,i=a.nodeType,j=i?ka.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||d!==b||\"string\"!=typeof c)return k||(k=i?a[h]=ba.pop()||ka.guid++:h),j[k]||(j[k]=i?{}:{toJSON:ka.noop}),(\"object\"==typeof c||\"function\"==typeof c)&&(e?j[k]=ka.extend(j[k],c):j[k].data=ka.extend(j[k].data,c)),g=j[k],e||(g.data||(g.data={}),g=g.data),d!==b&&(g[ka.camelCase(c)]=d),\"string\"==typeof c?(f=g[c],null==f&&(f=g[ka.camelCase(c)])):f=g,f}}function f(a,b,c){if(ka.acceptData(a)){var d,e,f=a.nodeType,g=f?ka.cache:a,i=f?a[ka.expando]:ka.expando;if(g[i]){if(b&&(d=c?g[i]:g[i].data)){ka.isArray(b)?b=b.concat(ka.map(b,ka.camelCase)):b in d?b=[b]:(b=ka.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;for(;e--;)delete d[b[e]];if(c?!h(d):!ka.isEmptyObject(d))return}(c||(delete g[i].data,h(g[i])))&&(f?ka.cleanData([a],!0):ka.support.deleteExpando||g!=g.window?delete g[i]:g[i]=null)}}}function g(a,c,d){if(d===b&&1===a.nodeType){var e=\"data-\"+c.replace(Ba,\"-$1\").toLowerCase();if(d=a.getAttribute(e),\"string\"==typeof d){try{d=\"true\"===d||\"false\"!==d&&(\"null\"===d?null:+d+\"\"===d?+d:Aa.test(d)?ka.parseJSON(d):d)}catch(f){}ka.data(a,c,d)}else d=b}return d}function h(a){var b;for(b in a)if((\"data\"!==b||!ka.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;return!0}function i(){return!0}function j(){return!1}function k(){try{return Y.activeElement}catch(a){}}function l(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function m(a,b,c){if(ka.isFunction(b))return ka.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return ka.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(Qa.test(b))return ka.filter(b,a,c);b=ka.filter(b,a)}return ka.grep(a,function(a){return ka.inArray(a,b)>=0!==c})}function n(a){var b=Ua.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function o(a,b){return ka.nodeName(a,\"table\")&&ka.nodeName(1===b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function p(a){return a.type=(null!==ka.find.attr(a,\"type\"))+\"/\"+a.type,a}function q(a){var b=eb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function r(a,b){for(var c,d=0;null!=(c=a[d]);d++)ka._data(c,\"globalEval\",!b||ka._data(b[d],\"globalEval\"))}function s(a,b){if(1===b.nodeType&&ka.hasData(a)){var c,d,e,f=ka._data(a),g=ka._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)ka.event.add(b,c,h[c][d])}g.data&&(g.data=ka.extend({},g.data))}}function t(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!ka.support.noCloneEvent&&b[ka.expando]){e=ka._data(b);for(d in e.events)ka.removeEvent(b,d,e.handle);b.removeAttribute(ka.expando)}\"script\"===c&&b.text!==a.text?(p(b).text=a.text,q(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),ka.support.html5Clone&&a.innerHTML&&!ka.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&bb.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}}function u(a,c){var d,e,f=0,g=typeof a.getElementsByTagName!==W?a.getElementsByTagName(c||\"*\"):typeof a.querySelectorAll!==W?a.querySelectorAll(c||\"*\"):b;if(!g)for(g=[],d=a.childNodes||a;null!=(e=d[f]);f++)!c||ka.nodeName(e,c)?g.push(e):ka.merge(g,u(e,c));return c===b||c&&ka.nodeName(a,c)?ka.merge([a],g):g}function v(a){bb.test(a.type)&&(a.defaultChecked=a.checked)}function w(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=yb.length;e--;)if(b=yb[e]+c,b in a)return b;return d}function x(a,b){return a=b||a,\"none\"===ka.css(a,\"display\")||!ka.contains(a.ownerDocument,a)}function y(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ka._data(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&x(d)&&(f[g]=ka._data(d,\"olddisplay\",C(d.nodeName)))):f[g]||(e=x(d),(c&&\"none\"!==c||!e)&&ka._data(d,\"olddisplay\",e?c:ka.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}function z(a,b,c){var d=rb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function A(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=ka.css(a,c+xb[f],!0,e)),d?(\"content\"===c&&(g-=ka.css(a,\"padding\"+xb[f],!0,e)),\"margin\"!==c&&(g-=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e))):(g+=ka.css(a,\"padding\"+xb[f],!0,e),\"padding\"!==c&&(g+=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e)));return g}function B(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=kb(a),g=ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=lb(a,b,f),(0>e||null==e)&&(e=a.style[b]),sb.test(e))return e;d=g&&(ka.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+A(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}function C(a){var b=Y,c=ub[a];return c||(c=D(a,b),\"none\"!==c&&c||(jb=(jb||ka(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(b.documentElement),b=(jb[0].contentWindow||jb[0].contentDocument).document,b.write(\"<!doctype html><html><body>\"),b.close(),c=D(a,b),jb.detach()),ub[a]=c),c}function D(a,b){var c=ka(b.createElement(a)).appendTo(b.body),d=ka.css(c[0],\"display\");return c.remove(),d}function E(a,b,c,d){var e;if(ka.isArray(b))ka.each(b,function(b,e){c||Ab.test(a)?d(a,e):E(a+\"[\"+(\"object\"==typeof e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==ka.type(b))d(a,b);else for(e in b)E(a+\"[\"+e+\"]\",b[e],c,d)}function F(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(ma)||[];if(ka.isFunction(c))for(;d=f[e++];)\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function G(a,c,d,e){function f(i){var j;return g[i]=!0,ka.each(a[i]||[],function(a,i){var k=i(c,d,e);return\"string\"!=typeof k||h||g[k]?h?!(j=k):b:(c.dataTypes.unshift(k),f(k),!1)}),j}var g={},h=a===Rb;return f(c.dataTypes[0])||!g[\"*\"]&&f(\"*\")}function H(a,c){var d,e,f=ka.ajaxSettings.flatOptions||{};for(e in c)c[e]!==b&&((f[e]?a:d||(d={}))[e]=c[e]);return d&&ka.extend(!0,a,d),a}function I(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;\"*\"===j[0];)j.shift(),f===b&&(f=a.mimeType||c.getResponseHeader(\"Content-Type\"));if(f)for(h in i)if(i[h]&&i[h].test(f)){j.unshift(h);break}if(j[0]in d)g=j[0];else{for(h in d){if(!j[0]||a.converters[h+\" \"+j[0]]){g=h;break}e||(e=h)}g=g||e}return g?(g!==j[0]&&j.unshift(g),d[g]):b}function J(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}function K(){try{return new a.XMLHttpRequest}catch(b){}}function L(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function M(){return setTimeout(function(){$b=b}),$b=ka.now()}function N(a,b,c){for(var d,e=(ec[b]||[]).concat(ec[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function O(a,b,c){var d,e,f=0,g=dc.length,h=ka.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||M(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:ka.extend({},b),opts:ka.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||M(),duration:c.duration,tweens:[],createTween:function(b,c){var d=ka.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(P(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return ka.map(k,N,j),ka.isFunction(j.opts.start)&&j.opts.start.call(a,j),ka.fx.timer(ka.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function P(a,b){var c,d,e,f,g;for(c in a)if(d=ka.camelCase(c),e=b[d],f=a[c],ka.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=ka.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Q(a,b,c){var d,e,f,g,h,i,j=this,k={},l=a.style,m=a.nodeType&&x(a),n=ka._data(a,\"fxshow\");c.queue||(h=ka._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,j.always(function(){j.always(function(){h.unqueued--,ka.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[l.overflow,l.overflowX,l.overflowY],\"inline\"===ka.css(a,\"display\")&&\"none\"===ka.css(a,\"float\")&&(ka.support.inlineBlockNeedsLayout&&\"inline\"!==C(a.nodeName)?l.zoom=1:l.display=\"inline-block\")),c.overflow&&(l.overflow=\"hidden\",ka.support.shrinkWrapBlocks||j.always(function(){l.overflow=c.overflow[0],l.overflowX=c.overflow[1],l.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(m?\"hide\":\"show\"))continue;k[d]=n&&n[d]||ka.style(a,d)}if(!ka.isEmptyObject(k)){n?\"hidden\"in n&&(m=n.hidden):n=ka._data(a,\"fxshow\",{}),f&&(n.hidden=!m),m?ka(a).show():j.done(function(){ka(a).hide()}),j.done(function(){var b;ka._removeData(a,\"fxshow\");for(b in k)ka.style(a,b,k[b])});for(d in k)g=N(m?n[d]:0,d,j),d in n||(n[d]=g.start,m&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function R(a,b,c,d,e){return new R.prototype.init(a,b,c,d,e)}function S(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=xb[e],d[\"margin\"+c]=d[\"padding\"+c]=a;return b&&(d.opacity=d.width=a),d}function T(a){return ka.isWindow(a)?a:9===a.nodeType&&(a.defaultView||a.parentWindow)}var U,V,W=typeof b,X=a.location,Y=a.document,Z=Y.documentElement,$=a.jQuery,_=a.$,aa={},ba=[],ca=\"1.10.2\",da=ba.concat,ea=ba.push,fa=ba.slice,ga=ba.indexOf,ha=aa.toString,ia=aa.hasOwnProperty,ja=ca.trim,ka=function(a,b){return new ka.fn.init(a,b,V)},la=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ma=/\\S+/g,na=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,oa=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,pa=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,qa=/^[\\],:{}\\s]*$/,ra=/(?:^|:|,)(?:\\s*\\[)+/g,sa=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,ta=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,ua=/^-ms-/,va=/-([\\da-z])/gi,wa=function(a,b){return b.toUpperCase()},xa=function(a){(Y.addEventListener||\"load\"===a.type||\"complete\"===Y.readyState)&&(ya(),ka.ready())},ya=function(){Y.addEventListener?(Y.removeEventListener(\"DOMContentLoaded\",xa,!1),a.removeEventListener(\"load\",xa,!1)):(Y.detachEvent(\"onreadystatechange\",xa),a.detachEvent(\"onload\",xa))};ka.fn=ka.prototype={jquery:ca,constructor:ka,init:function(a,c,d){var e,f;if(!a)return this;if(\"string\"==typeof a){if(e=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:oa.exec(a),!e||!e[1]&&c)return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a);if(e[1]){if(c=c instanceof ka?c[0]:c,ka.merge(this,ka.parseHTML(e[1],c&&c.nodeType?c.ownerDocument||c:Y,!0)),pa.test(e[1])&&ka.isPlainObject(c))for(e in c)ka.isFunction(this[e])?this[e](c[e]):this.attr(e,c[e]);return this}if(f=Y.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return d.find(a);this.length=1,this[0]=f}return this.context=Y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):ka.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),ka.makeArray(a,this))},selector:\"\",length:0,toArray:function(){return fa.call(this)},get:function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},pushStack:function(a){var b=ka.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return ka.each(this,a,b)},ready:function(a){return ka.ready.promise().done(a),this},slice:function(){return this.pushStack(fa.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},map:function(a){return this.pushStack(ka.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:ea,sort:[].sort,splice:[].splice},ka.fn.init.prototype=ka.fn,ka.extend=ka.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for(\"boolean\"==typeof h&&(k=h,h=arguments[1]||{},i=2),\"object\"==typeof h||ka.isFunction(h)||(h={}),j===i&&(h=this,--i);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(ka.isPlainObject(d)||(c=ka.isArray(d)))?(c?(c=!1,g=a&&ka.isArray(a)?a:[]):g=a&&ka.isPlainObject(a)?a:{},h[e]=ka.extend(k,g,d)):d!==b&&(h[e]=d));return h},ka.extend({expando:\"jQuery\"+(ca+Math.random()).replace(/\\D/g,\"\"),noConflict:function(b){return a.$===ka&&(a.$=_),b&&a.jQuery===ka&&(a.jQuery=$),ka},isReady:!1,readyWait:1,holdReady:function(a){a?ka.readyWait++:ka.ready(!0)},ready:function(a){if(a===!0?!--ka.readyWait:!ka.isReady){if(!Y.body)return setTimeout(ka.ready);ka.isReady=!0,a!==!0&&--ka.readyWait>0||(U.resolveWith(Y,[ka]),ka.fn.trigger&&ka(Y).trigger(\"ready\").off(\"ready\"))}},isFunction:function(a){return\"function\"===ka.type(a)},isArray:Array.isArray||function(a){return\"array\"===ka.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?aa[ha.call(a)]||\"object\":typeof a},isPlainObject:function(a){var c;if(!a||\"object\"!==ka.type(a)||a.nodeType||ka.isWindow(a))return!1;try{if(a.constructor&&!ia.call(a,\"constructor\")&&!ia.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(d){return!1}if(ka.support.ownLast)for(c in a)return ia.call(a,c);for(c in a);return c===b||ia.call(a,c)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw Error(a)},parseHTML:function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||Y;var d=pa.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=ka.buildFragment([a],b,e),e&&ka(e).remove(),ka.merge([],d.childNodes))},parseJSON:function(c){return a.JSON&&a.JSON.parse?a.JSON.parse(c):null===c?c:\"string\"==typeof c&&(c=ka.trim(c),c&&qa.test(c.replace(sa,\"@\").replace(ta,\"]\").replace(ra,\"\")))?Function(\"return \"+c)():(ka.error(\"Invalid JSON: \"+c),b)},parseXML:function(c){var d,e;if(!c||\"string\"!=typeof c)return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(f){d=b}return d&&d.documentElement&&!d.getElementsByTagName(\"parsererror\").length||ka.error(\"Invalid XML: \"+c),d},noop:function(){},globalEval:function(b){b&&ka.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(ua,\"ms-\").replace(va,wa)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:ja&&!ja.call(\"\\ufeff \")?function(a){return null==a?\"\":ja.call(a)}:function(a){return null==a?\"\":(a+\"\").replace(na,\"\")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?ka.merge(d,\"string\"==typeof a?[a]:a):ea.call(d,a)),d},inArray:function(a,b,c){var d;if(b){if(ga)return ga.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(\"number\"==typeof d)for(;d>f;f++)a[e++]=c[f];else for(;c[f]!==b;)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;for(c=!!c;g>f;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&(i[i.length]=e);else for(f in a)e=b(a[f],f,d),null!=e&&(i[i.length]=e);return da.apply([],i)},guid:1,proxy:function(a,c){var d,e,f;return\"string\"==typeof c&&(f=a[c],c=a,a=f),ka.isFunction(a)?(d=fa.call(arguments,2),e=function(){return a.apply(c||this,d.concat(fa.call(arguments)))},e.guid=a.guid=a.guid||ka.guid++,e):b},access:function(a,c,d,e,f,g,h){var i=0,j=a.length,k=null==d;if(\"object\"===ka.type(d)){f=!0;for(i in d)ka.access(a,c,i,d[i],!0,g,h)}else if(e!==b&&(f=!0,ka.isFunction(e)||(h=!0),k&&(h?(c.call(a,e),c=null):(k=c,c=function(a,b,c){return k.call(ka(a),c)})),c))for(;j>i;i++)c(a[i],d,h?e:e.call(a[i],i,c(a[i],d)));return f?a:k?c.call(a):j?c(a[0],d):g},now:function(){return(new Date).getTime()},swap:function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e}}),ka.ready.promise=function(b){if(!U)if(U=ka.Deferred(),\"complete\"===Y.readyState)setTimeout(ka.ready);else if(Y.addEventListener)Y.addEventListener(\"DOMContentLoaded\",xa,!1),a.addEventListener(\"load\",xa,!1);else{Y.attachEvent(\"onreadystatechange\",xa),a.attachEvent(\"onload\",xa);var c=!1;try{c=null==a.frameElement&&Y.documentElement}catch(d){}c&&c.doScroll&&function e(){if(!ka.isReady){try{c.doScroll(\"left\")}catch(a){return setTimeout(e,50)}ya(),ka.ready()}}()}return U.promise(b)},ka.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){aa[\"[object \"+b+\"]\"]=b.toLowerCase()}),V=ka(Y),function(a,b){function c(a,b,c,d){var e,f,g,h,i,j,k,l,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],!a||\"string\"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(I&&!d){if(e=ta.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return aa.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&x.getElementsByClassName&&b.getElementsByClassName)return aa.apply(c,b.getElementsByClassName(g)),c}if(x.qsa&&(!J||!J.test(a))){if(l=k=N,o=b,p=9===h&&a,1===h&&\"object\"!==b.nodeName.toLowerCase()){for(j=m(a),(k=b.getAttribute(\"id\"))?l=k.replace(wa,\"\\\\$&\"):b.setAttribute(\"id\",l),l=\"[id='\"+l+\"'] \",i=j.length;i--;)j[i]=l+n(j[i]);o=na.test(a)&&b.parentNode||b,p=j.join(\",\")}if(p)try{return aa.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{k||b.removeAttribute(\"id\")}}}return v(a.replace(ja,\"$1\"),b,c,d)}function d(){function a(c,d){return b.push(c+=\" \")>z.cacheLength&&delete a[b.shift()],a[c]=d}var b=[];return a}function e(a){return a[N]=!0,a}function f(a){var b=G.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function g(a,b){for(var c=a.split(\"|\"),d=a.length;d--;)z.attrHandle[c[d]]=b}function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||X)-(~a.sourceIndex||X);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(){}function m(a,b){var d,e,f,g,h,i,j,k=S[a+\" \"];if(k)return b?0:k.slice(0);for(h=a,i=[],j=z.preFilter;h;){(!d||(e=la.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ma.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ja,\" \")}),h=h.slice(d.length));for(g in z.filter)!(e=ra[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return b?h.length:h?c.error(a):S(a,i).slice(0)}function n(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function o(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=P+\" \"+f;if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e)if(j=b[N]||(b[N]={}),(i=j[d])&&i[0]===k){if((h=i[1])===!0||h===y)return h===!0}else if(i=j[d]=[k],i[1]=a(b,c,g)||y,i[1]===!0)return!0}}function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,d,f,g){return d&&!d[N]&&(d=r(d)),f&&!f[N]&&(f=r(f,g)),e(function(e,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=e||u(b||\"*\",h.nodeType?[h]:h,[]),r=!a||!e&&b?p:q(p,m,a,h,i),s=c?f||(e?a:o||d)?[]:g:r;if(c&&c(r,s,h,i),d)for(j=q(s,n),d(j,[],h,i),k=j.length;k--;)(l=j[k])&&(s[n[k]]=!(r[n[k]]=l));if(e){if(f||a){if(f){for(j=[],k=s.length;k--;)(l=s[k])&&j.push(r[k]=l);f(null,s=[],j,i)}for(k=s.length;k--;)(l=s[k])&&(j=f?ca.call(e,l):m[k])>-1&&(e[j]=!(g[j]=l))}}else s=q(s===g?s.splice(o,s.length):s),f?f(null,g,s,i):aa.apply(g,s)})}function s(a){for(var b,c,d,e=a.length,f=z.relative[a[0].type],g=f||z.relative[\" \"],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ca.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];e>h;h++)if(c=z.relative[a[h].type])k=[o(p(k),c)];else{if(c=z.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!z.relative[a[d].type];d++);return r(h>1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:\" \"===a[h-2].type?\"*\":\"\"})).replace(ja,\"$1\"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&n(a))}k.push(c)}return p(k)}function t(a,b){var d=0,f=b.length>0,g=a.length>0,h=function(e,h,i,j,k){var l,m,n,o=[],p=0,r=\"0\",s=e&&[],t=null!=k,u=D,v=e||g&&z.find.TAG(\"*\",k&&h.parentNode||h),w=P+=null==u?1:Math.random()||.1;for(t&&(D=h!==G&&h,y=d);null!=(l=v[r]);r++){if(g&&l){for(m=0;n=a[m++];)if(n(l,h,i)){j.push(l);break}t&&(P=w,y=++d)}f&&((l=!n&&l)&&p--,e&&s.push(l))}if(p+=r,f&&r!==p){for(m=0;n=b[m++];)n(s,o,h,i);if(e){if(p>0)for(;r--;)s[r]||o[r]||(o[r]=$.call(j));o=q(o)}aa.apply(j,o),t&&!e&&o.length>0&&p+b.length>1&&c.uniqueSort(j)}return t&&(P=w,D=u),s};return f?e(h):h}function u(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}function v(a,b,c,d){var e,f,g,h,i,j=m(a);if(!d&&1===j.length){if(f=j[0]=j[0].slice(0),f.length>2&&\"ID\"===(g=f[0]).type&&x.getById&&9===b.nodeType&&I&&z.relative[f[1].type]){if(b=(z.find.ID(g.matches[0].replace(xa,ya),b)||[])[0],!b)return c;a=a.slice(f.shift().value.length)}for(e=ra.needsContext.test(a)?0:f.length;e--&&(g=f[e],!z.relative[h=g.type]);)if((i=z.find[h])&&(d=i(g.matches[0].replace(xa,ya),na.test(f[0].type)&&b.parentNode||b))){if(f.splice(e,1),a=d.length&&n(f),!a)return aa.apply(c,d),c;break}}return C(a,j)(d,b,!I,c,na.test(a)),c}var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=\"sizzle\"+-new Date,O=a.document,P=0,Q=0,R=d(),S=d(),T=d(),U=!1,V=function(a,b){return a===b?(U=!0,0):0},W=typeof b,X=1<<31,Y={}.hasOwnProperty,Z=[],$=Z.pop,_=Z.push,aa=Z.push,ba=Z.slice,ca=Z.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},da=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ea=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",fa=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ga=fa.replace(\"w\",\"w#\"),ha=\"\\\\[\"+ea+\"*(\"+fa+\")\"+ea+\"*(?:([*^$|!~]?=)\"+ea+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+ga+\")|)|)\"+ea+\"*\\\\]\",ia=\":(\"+fa+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ha.replace(3,8)+\")*)|.*)\\\\)|)\",ja=RegExp(\"^\"+ea+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ea+\"+$\",\"g\"),la=RegExp(\"^\"+ea+\"*,\"+ea+\"*\"),ma=RegExp(\"^\"+ea+\"*([>+~]|\"+ea+\")\"+ea+\"*\"),na=RegExp(ea+\"*[+~]\"),oa=RegExp(\"=\"+ea+\"*([^\\\\]'\\\"]*)\"+ea+\"*\\\\]\",\"g\"),pa=RegExp(ia),qa=RegExp(\"^\"+ga+\"$\"),ra={ID:RegExp(\"^#(\"+fa+\")\"),CLASS:RegExp(\"^\\\\.(\"+fa+\")\"),TAG:RegExp(\"^(\"+fa.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+ha),PSEUDO:RegExp(\"^\"+ia),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ea+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ea+\"*(?:([+-]|)\"+ea+\"*(\\\\d+)|))\"+ea+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+da+\")$\",\"i\"),needsContext:RegExp(\"^\"+ea+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ea+\"*((?:-\\\\d)?\\\\d*)\"+ea+\"*\\\\)|)(?=[^-]|$)\",\"i\")},sa=/^[^{]+\\{\\s*\\[native \\w/,ta=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ua=/^(?:input|select|textarea|button)$/i,va=/^h\\d$/i,wa=/'|\\\\/g,xa=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ea+\"?|(\"+ea+\")|.)\",\"ig\"),ya=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(55296|d>>10,56320|1023&d)};try{aa.apply(Z=ba.call(O.childNodes),O.childNodes),Z[O.childNodes.length].nodeType}catch(za){aa={apply:Z.length?function(a,b){_.apply(a,ba.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}B=c.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},x=c.support={},F=c.setDocument=function(a){var c=a?a.ownerDocument||a:O,d=c.defaultView;return c!==G&&9===c.nodeType&&c.documentElement?(G=c,H=c.documentElement,I=!B(c),d&&d.attachEvent&&d!==d.top&&d.attachEvent(\"onbeforeunload\",function(){F()}),x.attributes=f(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),x.getElementsByTagName=f(function(a){return a.appendChild(c.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),x.getElementsByClassName=f(function(a){return a.innerHTML=\"<div class='a'></div><div class='a i'></div>\",a.firstChild.className=\"i\",2===a.getElementsByClassName(\"i\").length}),x.getById=f(function(a){return H.appendChild(a).id=N,!c.getElementsByName||!c.getElementsByName(N).length}),x.getById?(z.find.ID=function(a,b){if(typeof b.getElementById!==W&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){return a.getAttribute(\"id\")===b}}):(delete z.find.ID,z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){var c=typeof a.getAttributeNode!==W&&a.getAttributeNode(\"id\");return c&&c.value===b}}),z.find.TAG=x.getElementsByTagName?function(a,c){return typeof c.getElementsByTagName!==W?c.getElementsByTagName(a):b}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},z.find.CLASS=x.getElementsByClassName&&function(a,c){return typeof c.getElementsByClassName!==W&&I?c.getElementsByClassName(a):b},K=[],J=[],(x.qsa=sa.test(c.querySelectorAll))&&(f(function(a){a.innerHTML=\"<select><option selected=''></option></select>\",a.querySelectorAll(\"[selected]\").length||J.push(\"\\\\[\"+ea+\"*(?:value|\"+da+\")\"),a.querySelectorAll(\":checked\").length||J.push(\":checked\")}),f(function(a){var b=c.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"t\",\"\"),a.querySelectorAll(\"[t^='']\").length&&J.push(\"[*^$]=\"+ea+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\":enabled\").length||J.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),J.push(\",.*:\")})),(x.matchesSelector=sa.test(L=H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&f(function(a){x.disconnectedMatch=L.call(a,\"div\"),L.call(a,\"[s!='']:x\"),K.push(\"!=\",ia)}),J=J.length&&RegExp(J.join(\"|\")),K=K.length&&RegExp(K.join(\"|\")),M=sa.test(H.contains)||H.compareDocumentPosition?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},V=H.compareDocumentPosition?function(a,b){if(a===b)return U=!0,0;var d=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b);return d?1&d||!x.sortDetached&&b.compareDocumentPosition(a)===d?a===c||M(O,a)?-1:b===c||M(O,b)?1:E?ca.call(E,a)-ca.call(E,b):0:4&d?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var d,e=0,f=a.parentNode,g=b.parentNode,i=[a],j=[b];if(a===b)return U=!0,0;if(!f||!g)return a===c?-1:b===c?1:f?-1:g?1:E?ca.call(E,a)-ca.call(E,b):0;if(f===g)return h(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?h(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},c):G},c.matches=function(a,b){return c(a,null,null,b)},c.matchesSelector=function(a,b){if((a.ownerDocument||a)!==G&&F(a),b=b.replace(oa,\"='$1']\"),!(!x.matchesSelector||!I||K&&K.test(b)||J&&J.test(b)))try{var d=L.call(a,b);if(d||x.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return c(b,G,null,[a]).length>0},c.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},c.attr=function(a,c){(a.ownerDocument||a)!==G&&F(a);var d=z.attrHandle[c.toLowerCase()],e=d&&Y.call(z.attrHandle,c.toLowerCase())?d(a,c,!I):b;return e===b?x.attributes||!I?a.getAttribute(c):(e=a.getAttributeNode(c))&&e.specified?e.value:null:e},c.error=function(a){throw Error(\"Syntax error, unrecognized expression: \"+a)},c.uniqueSort=function(a){var b,c=[],d=0,e=0;if(U=!x.detectDuplicates,E=!x.sortStable&&a.slice(0),a.sort(V),U){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return a},A=c.getText=function(a){var b,c=\"\",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=A(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d];d++)c+=A(b);return c},z=c.selectors={cacheLength:50,createPseudo:e,match:ra,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(xa,ya),a[3]=(a[4]||a[5]||\"\").replace(xa,ya),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||c.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&c.error(a[0]),a},PSEUDO:function(a){var c,d=!a[5]&&a[2];return ra.CHILD.test(a[0])?null:(a[3]&&a[4]!==b?a[2]=a[4]:d&&pa.test(d)&&(c=m(d,!0))&&(c=d.indexOf(\")\",d.length-c)-d.length)&&(a[0]=a[0].slice(0,c),a[2]=d.slice(0,c)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(xa,ya).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+\" \"];return b||(b=RegExp(\"(^|\"+ea+\")\"+a+\"(\"+ea+\"|$)\"))&&R(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||typeof a.getAttribute!==W&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,d){return function(e){var f=c.attr(e,a);return null==f?\"!=\"===b:!b||(f+=\"\",\"=\"===b?f===d:\"!=\"===b?f!==d:\"^=\"===b?d&&0===f.indexOf(d):\"*=\"===b?d&&f.indexOf(d)>-1:\"$=\"===b?d&&f.slice(-d.length)===d:\"~=\"===b?(\" \"+f+\" \").indexOf(d)>-1:\"|=\"===b&&(f===d||f.slice(0,d.length+1)===d+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;\nif(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||0===m%d&&m/d>=0}}},PSEUDO:function(a,b){var d,f=z.pseudos[a]||z.setFilters[a.toLowerCase()]||c.error(\"unsupported pseudo: \"+a);return f[N]?f(b):f.length>1?(d=[a,a,\"\",b],z.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,c){for(var d,e=f(a,b),g=e.length;g--;)d=ca.call(a,e[g]),a[d]=!(c[d]=e[g])}):function(a){return f(a,0,d)}):f}},pseudos:{not:e(function(a){var b=[],c=[],d=C(a.replace(ja,\"$1\"));return d[N]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:e(function(a){return function(b){return c(a,b).length>0}}),contains:e(function(a){return function(b){return(b.textContent||b.innerText||A(b)).indexOf(a)>-1}}),lang:e(function(a){return qa.test(a||\"\")||c.error(\"unsupported lang: \"+a),a=a.replace(xa,ya).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeName>\"@\"||3===a.nodeType||4===a.nodeType)return!1;return!0},parent:function(a){return!z.pseudos.empty(a)},header:function(a){return va.test(a.nodeName)},input:function(a){return ua.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||b.toLowerCase()===a.type)},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[0>c?c+b:c]}),even:k(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:k(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:k(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=0>c?c+b:c;b>++d;)a.push(d);return a})}},z.pseudos.nth=z.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})z.pseudos[w]=i(w);for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+\" \"];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split(\"\").sort(V).join(\"\")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement(\"div\"))}),f(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||g(\"type|href|height|width\",function(a,c,d){return d?b:a.getAttribute(c,\"type\"===c.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||g(\"value\",function(a,c,d){return d||\"input\"!==a.nodeName.toLowerCase()?b:a.defaultValue}),f(function(a){return null==a.getAttribute(\"disabled\")})||g(da,function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&e.specified?e.value:a[c]===!0?c.toLowerCase():null}),ka.find=c,ka.expr=c.selectors,ka.expr[\":\"]=ka.expr.pseudos,ka.unique=c.uniqueSort,ka.text=c.getText,ka.isXMLDoc=c.isXML,ka.contains=c.contains}(a);var za={};ka.Callbacks=function(a){a=\"string\"==typeof a?za[a]||d(a):ka.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(e=a.memory&&b,f=!0,h=i||0,i=0,g=j.length,c=!0;j&&g>h;h++)if(j[h].apply(b[0],b[1])===!1&&a.stopOnFalse){e=!1;break}c=!1,j&&(k?k.length&&l(k.shift()):e?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){ka.each(b,function(b,c){var e=ka.type(c);\"function\"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&\"string\"!==e&&d(c)})}(arguments),c?g=j.length:e&&(i=b,l(e))}return this},remove:function(){return j&&ka.each(arguments,function(a,b){for(var d;(d=ka.inArray(b,j,d))>-1;)j.splice(d,1),c&&(g>=d&&g--,h>=d&&h--)}),this},has:function(a){return a?ka.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],g=0,this},disable:function(){return j=k=e=b,this},disabled:function(){return!j},lock:function(){return k=b,e||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||f&&!k||(b=b||[],b=[a,b.slice?b.slice():b],c?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!f}};return m},ka.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",ka.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ka.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ka.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return ka.Deferred(function(c){ka.each(b,function(b,f){var g=f[0],h=ka.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&ka.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+\"With\"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?ka.extend(a,d):d}},e={};return d.pipe=d.then,ka.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=fa.call(arguments),g=f.length,h=1!==g||a&&ka.isFunction(a.promise)?g:0,i=1===h?a:ka.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?fa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=Array(g),c=Array(g),d=Array(g);g>e;e++)f[e]&&ka.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),ka.support=function(b){var c,d,e,f,g,h,i,j,k,l=Y.createElement(\"div\");if(l.setAttribute(\"className\",\"t\"),l.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",c=l.getElementsByTagName(\"*\")||[],d=l.getElementsByTagName(\"a\")[0],!d||!d.style||!c.length)return b;f=Y.createElement(\"select\"),h=f.appendChild(Y.createElement(\"option\")),e=l.getElementsByTagName(\"input\")[0],d.style.cssText=\"top:1px;float:left;opacity:.5\",b.getSetAttribute=\"t\"!==l.className,b.leadingWhitespace=3===l.firstChild.nodeType,b.tbody=!l.getElementsByTagName(\"tbody\").length,b.htmlSerialize=!!l.getElementsByTagName(\"link\").length,b.style=/top/.test(d.getAttribute(\"style\")),b.hrefNormalized=\"/a\"===d.getAttribute(\"href\"),b.opacity=/^0.5/.test(d.style.opacity),b.cssFloat=!!d.style.cssFloat,b.checkOn=!!e.value,b.optSelected=h.selected,b.enctype=!!Y.createElement(\"form\").enctype,b.html5Clone=\"<:nav></:nav>\"!==Y.createElement(\"nav\").cloneNode(!0).outerHTML,b.inlineBlockNeedsLayout=!1,b.shrinkWrapBlocks=!1,b.pixelPosition=!1,b.deleteExpando=!0,b.noCloneEvent=!0,b.reliableMarginRight=!0,b.boxSizingReliable=!0,e.checked=!0,b.noCloneChecked=e.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!h.disabled;try{delete l.test}catch(m){b.deleteExpando=!1}e=Y.createElement(\"input\"),e.setAttribute(\"value\",\"\"),b.input=\"\"===e.getAttribute(\"value\"),e.value=\"t\",e.setAttribute(\"type\",\"radio\"),b.radioValue=\"t\"===e.value,e.setAttribute(\"checked\",\"t\"),e.setAttribute(\"name\",\"t\"),g=Y.createDocumentFragment(),g.appendChild(e),b.appendChecked=e.checked,b.checkClone=g.cloneNode(!0).cloneNode(!0).lastChild.checked,l.attachEvent&&(l.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),l.cloneNode(!0).click());for(k in{submit:!0,change:!0,focusin:!0})l.setAttribute(i=\"on\"+k,\"t\"),b[k+\"Bubbles\"]=i in a||l.attributes[i].expando===!1;l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",b.clearCloneStyle=\"content-box\"===l.style.backgroundClip;for(k in ka(b))break;return b.ownLast=\"0\"!==k,ka(function(){var c,d,e,f=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",g=Y.getElementsByTagName(\"body\")[0];g&&(c=Y.createElement(\"div\"),c.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",g.appendChild(c).appendChild(l),l.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",e=l.getElementsByTagName(\"td\"),e[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",j=0===e[0].offsetHeight,e[0].style.display=\"\",e[1].style.display=\"none\",b.reliableHiddenOffsets=j&&0===e[0].offsetHeight,l.innerHTML=\"\",l.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",ka.swap(g,null!=g.style.zoom?{zoom:1}:{},function(){b.boxSizing=4===l.offsetWidth}),a.getComputedStyle&&(b.pixelPosition=\"1%\"!==(a.getComputedStyle(l,null)||{}).top,b.boxSizingReliable=\"4px\"===(a.getComputedStyle(l,null)||{width:\"4px\"}).width,d=l.appendChild(Y.createElement(\"div\")),d.style.cssText=l.style.cssText=f,d.style.marginRight=d.style.width=\"0\",l.style.width=\"1px\",b.reliableMarginRight=!parseFloat((a.getComputedStyle(d,null)||{}).marginRight)),typeof l.style.zoom!==W&&(l.innerHTML=\"\",l.style.cssText=f+\"width:1px;padding:1px;display:inline;zoom:1\",b.inlineBlockNeedsLayout=3===l.offsetWidth,l.style.display=\"block\",l.innerHTML=\"<div></div>\",l.firstChild.style.width=\"5px\",b.shrinkWrapBlocks=3!==l.offsetWidth,b.inlineBlockNeedsLayout&&(g.style.zoom=1)),g.removeChild(c),c=l=e=d=null)}),c=f=g=h=d=e=null,b}({});var Aa=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,Ba=/([A-Z])/g;ka.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?ka.cache[a[ka.expando]]:a[ka.expando],!!a&&!h(a)},data:function(a,b,c){return e(a,b,c)},removeData:function(a,b){return f(a,b)},_data:function(a,b,c){return e(a,b,c,!0)},_removeData:function(a,b){return f(a,b,!0)},acceptData:function(a){if(a.nodeType&&1!==a.nodeType&&9!==a.nodeType)return!1;var b=a.nodeName&&ka.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute(\"classid\")===b}}),ka.fn.extend({data:function(a,c){var d,e,f=null,h=0,i=this[0];if(a===b){if(this.length&&(f=ka.data(i),1===i.nodeType&&!ka._data(i,\"parsedAttrs\"))){for(d=i.attributes;d.length>h;h++)e=d[h].name,0===e.indexOf(\"data-\")&&(e=ka.camelCase(e.slice(5)),g(i,e,f[e]));ka._data(i,\"parsedAttrs\",!0)}return f}return\"object\"==typeof a?this.each(function(){ka.data(this,a)}):arguments.length>1?this.each(function(){ka.data(this,a,c)}):i?g(i,a,ka.data(i,a)):null},removeData:function(a){return this.each(function(){ka.removeData(this,a)})}}),ka.extend({queue:function(a,c,d){var e;return a?(c=(c||\"fx\")+\"queue\",e=ka._data(a,c),d&&(!e||ka.isArray(d)?e=ka._data(a,c,ka.makeArray(d)):e.push(d)),e||[]):b},dequeue:function(a,b){b=b||\"fx\";var c=ka.queue(a,b),d=c.length,e=c.shift(),f=ka._queueHooks(a,b),g=function(){ka.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return ka._data(a,c)||ka._data(a,c,{empty:ka.Callbacks(\"once memory\").add(function(){ka._removeData(a,b+\"queue\"),ka._removeData(a,c)})})}}),ka.fn.extend({queue:function(a,c){var d=2;return\"string\"!=typeof a&&(c=a,a=\"fx\",d--),d>arguments.length?ka.queue(this[0],a):c===b?this:this.each(function(){var b=ka.queue(this,a,c);ka._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==b[0]&&ka.dequeue(this,a)})},dequeue:function(a){return this.each(function(){ka.dequeue(this,a)})},delay:function(a,b){return a=ka.fx?ka.fx.speeds[a]||a:a,b=b||\"fx\",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){var d,e=1,f=ka.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};for(\"string\"!=typeof a&&(c=a,a=b),a=a||\"fx\";h--;)d=ka._data(g[h],a+\"queueHooks\"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var Ca,Da,Ea=/[\\t\\r\\n\\f]/g,Fa=/\\r/g,Ga=/^(?:input|select|textarea|button|object)$/i,Ha=/^(?:a|area)$/i,Ia=/^(?:checked|selected)$/i,Ja=ka.support.getSetAttribute,Ka=ka.support.input;ka.fn.extend({attr:function(a,b){return ka.access(this,ka.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){ka.removeAttr(this,a)})},prop:function(a,b){return ka.access(this,ka.prop,a,b,arguments.length>1)},removeProp:function(a){return a=ka.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).addClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\" \")){for(f=0;e=b[f++];)0>d.indexOf(\" \"+e+\" \")&&(d+=e+\" \");c.className=ka.trim(d)}return this},removeClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=0===arguments.length||\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).removeClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\"\")){for(f=0;e=b[f++];)for(;d.indexOf(\" \"+e+\" \")>=0;)d=d.replace(\" \"+e+\" \",\" \");c.className=a?ka.trim(d):\"\"}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):ka.isFunction(a)?this.each(function(c){ka(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(\"string\"===c)for(var b,d=0,e=ka(this),f=a.match(ma)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===W||\"boolean\"===c)&&(this.className&&ka._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":ka._data(this,\"__className__\")||\"\")})},hasClass:function(a){for(var b=\" \"+a+\" \",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(\" \"+this[c].className+\" \").replace(Ea,\" \").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];return arguments.length?(e=ka.isFunction(a),this.each(function(c){var f;1===this.nodeType&&(f=e?a.call(this,c,ka(this).val()):a,null==f?f=\"\":\"number\"==typeof f?f+=\"\":ka.isArray(f)&&(f=ka.map(f,function(a){return null==a?\"\":a+\"\"})),d=ka.valHooks[this.type]||ka.valHooks[this.nodeName.toLowerCase()],d&&\"set\"in d&&d.set(this,f,\"value\")!==b||(this.value=f))})):f?(d=ka.valHooks[f.type]||ka.valHooks[f.nodeName.toLowerCase()],d&&\"get\"in d&&(c=d.get(f,\"value\"))!==b?c:(c=f.value,\"string\"==typeof c?c.replace(Fa,\"\"):null==c?\"\":c)):void 0}}),ka.extend({valHooks:{option:{get:function(a){var b=ka.find.attr(a,\"value\");return null!=b?b:a.text}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(ka.support.optDisabled?c.disabled:null!==c.getAttribute(\"disabled\"))||c.parentNode.disabled&&ka.nodeName(c.parentNode,\"optgroup\"))){if(b=ka(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=ka.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=ka.inArray(ka(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}},attr:function(a,c,d){var e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return typeof a.getAttribute===W?ka.prop(a,c,d):(1===g&&ka.isXMLDoc(a)||(c=c.toLowerCase(),e=ka.attrHooks[c]||(ka.expr.match.bool.test(c)?Da:Ca)),d===b?e&&\"get\"in e&&null!==(f=e.get(a,c))?f:(f=ka.find.attr(a,c),null==f?b:f):null!==d?e&&\"set\"in e&&(f=e.set(a,d,c))!==b?f:(a.setAttribute(c,d+\"\"),d):(ka.removeAttr(a,c),b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(ma);if(f&&1===a.nodeType)for(;c=f[e++];)d=ka.propFix[c]||c,ka.expr.match.bool.test(c)?Ka&&Ja||!Ia.test(c)?a[d]=!1:a[ka.camelCase(\"default-\"+c)]=a[d]=!1:ka.attr(a,c,\"\"),a.removeAttribute(Ja?c:d)},attrHooks:{type:{set:function(a,b){if(!ka.support.radioValue&&\"radio\"===b&&ka.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(a&&3!==h&&8!==h&&2!==h)return g=1!==h||!ka.isXMLDoc(a),g&&(c=ka.propFix[c]||c,f=ka.propHooks[c]),d!==b?f&&\"set\"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&\"get\"in f&&null!==(e=f.get(a,c))?e:a[c]},propHooks:{tabIndex:{get:function(a){var b=ka.find.attr(a,\"tabindex\");return b?parseInt(b,10):Ga.test(a.nodeName)||Ha.test(a.nodeName)&&a.href?0:-1}}}}),Da={set:function(a,b,c){return b===!1?ka.removeAttr(a,c):Ka&&Ja||!Ia.test(c)?a.setAttribute(!Ja&&ka.propFix[c]||c,c):a[ka.camelCase(\"default-\"+c)]=a[c]=!0,c}},ka.each(ka.expr.match.bool.source.match(/\\w+/g),function(a,c){var d=ka.expr.attrHandle[c]||ka.find.attr;ka.expr.attrHandle[c]=Ka&&Ja||!Ia.test(c)?function(a,c,e){var f=ka.expr.attrHandle[c],g=e?b:(ka.expr.attrHandle[c]=b)!=d(a,c,e)?c.toLowerCase():null;return ka.expr.attrHandle[c]=f,g}:function(a,c,d){return d?b:a[ka.camelCase(\"default-\"+c)]?c.toLowerCase():null}}),Ka&&Ja||(ka.attrHooks.value={set:function(a,c,d){return ka.nodeName(a,\"input\")?(a.defaultValue=c,b):Ca&&Ca.set(a,c,d)}}),Ja||(Ca={set:function(a,c,d){var e=a.getAttributeNode(d);return e||a.setAttributeNode(e=a.ownerDocument.createAttribute(d)),e.value=c+=\"\",\"value\"===d||c===a.getAttribute(d)?c:b}},ka.expr.attrHandle.id=ka.expr.attrHandle.name=ka.expr.attrHandle.coords=function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&\"\"!==e.value?e.value:null},ka.valHooks.button={get:function(a,c){var d=a.getAttributeNode(c);return d&&d.specified?d.value:b},set:Ca.set},ka.attrHooks.contenteditable={set:function(a,b,c){Ca.set(a,\"\"!==b&&b,c)}},ka.each([\"width\",\"height\"],function(a,c){ka.attrHooks[c]={set:function(a,d){return\"\"===d?(a.setAttribute(c,\"auto\"),d):b}}})),ka.support.hrefNormalized||ka.each([\"href\",\"src\"],function(a,b){ka.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),ka.support.style||(ka.attrHooks.style={get:function(a){return a.style.cssText||b},set:function(a,b){return a.style.cssText=b+\"\"}}),ka.support.optSelected||(ka.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),ka.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ka.propFix[this.toLowerCase()]=this}),ka.support.enctype||(ka.propFix.enctype=\"encoding\"),ka.each([\"radio\",\"checkbox\"],function(){ka.valHooks[this]={set:function(a,c){return ka.isArray(c)?a.checked=ka.inArray(ka(a).val(),c)>=0:b}},ka.support.checkOn||(ka.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var La=/^(?:input|select|textarea)$/i,Ma=/^key/,Na=/^(?:mouse|contextmenu)|click/,Oa=/^(?:focusinfocus|focusoutblur)$/,Pa=/^([^.]*)(?:\\.(.+)|)$/;ka.event={global:{},add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r=ka._data(a);if(r){for(d.handler&&(j=d,d=j.handler,f=j.selector),d.guid||(d.guid=ka.guid++),(h=r.events)||(h=r.events={}),(l=r.handle)||(l=r.handle=function(a){return typeof ka===W||a&&ka.event.triggered===a.type?b:ka.event.dispatch.apply(l.elem,arguments)},l.elem=a),c=(c||\"\").match(ma)||[\"\"],i=c.length;i--;)g=Pa.exec(c[i])||[],o=q=g[1],p=(g[2]||\"\").split(\".\").sort(),o&&(k=ka.event.special[o]||{},o=(f?k.delegateType:k.bindType)||o,k=ka.event.special[o]||{},m=ka.extend({type:o,origType:q,data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&ka.expr.match.needsContext.test(f),namespace:p.join(\".\")},j),(n=h[o])||(n=h[o]=[],n.delegateCount=0,k.setup&&k.setup.call(a,e,p,l)!==!1||(a.addEventListener?a.addEventListener(o,l,!1):a.attachEvent&&a.attachEvent(\"on\"+o,l))),k.add&&(k.add.call(a,m),m.handler.guid||(m.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,m):n.push(m),ka.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ka.hasData(a)&&ka._data(a);if(q&&(k=q.events)){for(b=(b||\"\").match(ma)||[\"\"],j=b.length;j--;)if(h=Pa.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){for(l=ka.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=k[n]||[],h=h[2]&&RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=m.length;f--;)g=m[f],!e&&p!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||ka.removeEvent(a,n,q.handle),delete k[n])}else for(n in k)ka.event.remove(a,n+b[j],c,d,!0);ka.isEmptyObject(k)&&(delete q.handle,ka._removeData(a,\"events\"))}},trigger:function(c,d,e,f){var g,h,i,j,k,l,m,n=[e||Y],o=ia.call(c,\"type\")?c.type:c,p=ia.call(c,\"namespace\")?c.namespace.split(\".\"):[];if(i=l=e=e||Y,3!==e.nodeType&&8!==e.nodeType&&!Oa.test(o+ka.event.triggered)&&(o.indexOf(\".\")>=0&&(p=o.split(\".\"),o=p.shift(),p.sort()),h=0>o.indexOf(\":\")&&\"on\"+o,c=c[ka.expando]?c:new ka.Event(o,\"object\"==typeof c&&c),c.isTrigger=f?2:3,c.namespace=p.join(\".\"),c.namespace_re=c.namespace?RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,c.result=b,c.target||(c.target=e),d=null==d?[c]:ka.makeArray(d,[c]),k=ka.event.special[o]||{},f||!k.trigger||k.trigger.apply(e,d)!==!1)){if(!f&&!k.noBubble&&!ka.isWindow(e)){for(j=k.delegateType||o,Oa.test(j+o)||(i=i.parentNode);i;i=i.parentNode)n.push(i),l=i;l===(e.ownerDocument||Y)&&n.push(l.defaultView||l.parentWindow||a)}for(m=0;(i=n[m++])&&!c.isPropagationStopped();)c.type=m>1?j:k.bindType||o,g=(ka._data(i,\"events\")||{})[c.type]&&ka._data(i,\"handle\"),g&&g.apply(i,d),g=h&&i[h],g&&ka.acceptData(i)&&g.apply&&g.apply(i,d)===!1&&c.preventDefault();if(c.type=o,!f&&!c.isDefaultPrevented()&&(!k._default||k._default.apply(n.pop(),d)===!1)&&ka.acceptData(e)&&h&&e[o]&&!ka.isWindow(e)){l=e[h],l&&(e[h]=null),ka.event.triggered=o;try{e[o]()}catch(q){}ka.event.triggered=b,l&&(e[h]=l)}return c.result}},dispatch:function(a){a=ka.event.fix(a);var c,d,e,f,g,h=[],i=fa.call(arguments),j=(ka._data(this,\"events\")||{})[a.type]||[],k=ka.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){for(h=ka.event.handlers.call(this,a,j),c=0;(f=h[c++])&&!a.isPropagationStopped();)for(a.currentTarget=f.elem,g=0;(e=f.handlers[g++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,d=((ka.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),d!==b&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,c){var d,e,f,g,h=[],i=c.delegateCount,j=a.target;if(i&&j.nodeType&&(!a.button||\"click\"!==a.type))for(;j!=this;j=j.parentNode||this)if(1===j.nodeType&&(j.disabled!==!0||\"click\"!==a.type)){for(f=[],g=0;i>g;g++)e=c[g],d=e.selector+\" \",f[d]===b&&(f[d]=e.needsContext?ka(d,this).index(j)>=0:ka.find(d,this,null,[j]).length),f[d]&&f.push(e);f.length&&h.push({elem:j,handlers:f})}return c.length>i&&h.push({elem:this,handlers:c.slice(i)}),h},fix:function(a){if(a[ka.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Na.test(e)?this.mouseHooks:Ma.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new ka.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||Y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,c){var d,e,f,g=c.button,h=c.fromElement;return null==a.pageX&&null!=c.clientX&&(e=a.target.ownerDocument||Y,f=e.documentElement,d=e.body,a.pageX=c.clientX+(f&&f.scrollLeft||d&&d.scrollLeft||0)-(f&&f.clientLeft||d&&d.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||d&&d.scrollTop||0)-(f&&f.clientTop||d&&d.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?c.toElement:h),a.which||g===b||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===k()&&this.blur?(this.blur(),!1):b},delegateType:\"focusout\"},click:{trigger:function(){return ka.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):b},_default:function(a){return ka.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){a.result!==b&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=ka.extend(new ka.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?ka.event.trigger(e,null,b):ka.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},ka.removeEvent=Y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d=\"on\"+b;a.detachEvent&&(typeof a[d]===W&&(a[d]=null),a.detachEvent(d,c))},ka.Event=function(a,c){return this instanceof ka.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?i:j):this.type=a,c&&ka.extend(this,c),this.timeStamp=a&&a.timeStamp||ka.now(),this[ka.expando]=!0,b):new ka.Event(a,c)},ka.Event.prototype={isDefaultPrevented:j,isPropagationStopped:j,isImmediatePropagationStopped:j,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=i,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=i,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i,this.stopPropagation()}},ka.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){ka.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!ka.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),ka.support.submitBubbles||(ka.event.special.submit={setup:function(){return!ka.nodeName(this,\"form\")&&(ka.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=ka.nodeName(c,\"input\")||ka.nodeName(c,\"button\")?c.form:b;d&&!ka._data(d,\"submitBubbles\")&&(ka.event.add(d,\"submit._submit\",function(a){a._submit_bubble=!0}),ka._data(d,\"submitBubbles\",!0))}),b)},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&ka.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){return!ka.nodeName(this,\"form\")&&(ka.event.remove(this,\"._submit\"),b)}}),ka.support.changeBubbles||(ka.event.special.change={setup:function(){return La.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(ka.event.add(this,\"propertychange._change\",function(a){\"checked\"===a.originalEvent.propertyName&&(this._just_changed=!0)}),ka.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),ka.event.simulate(\"change\",this,a,!0)})),!1):(ka.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;La.test(b.nodeName)&&!ka._data(b,\"changeBubbles\")&&(ka.event.add(b,\"change._change\",function(a){!this.parentNode||a.isSimulated||a.isTrigger||ka.event.simulate(\"change\",this.parentNode,a,!0)}),ka._data(b,\"changeBubbles\",!0))}),b)},handle:function(a){var c=a.target;return this!==c||a.isSimulated||a.isTrigger||\"radio\"!==c.type&&\"checkbox\"!==c.type?a.handleObj.handler.apply(this,arguments):b},teardown:function(){return ka.event.remove(this,\"._change\"),!La.test(this.nodeName)}}),ka.support.focusinBubbles||ka.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=0,d=function(a){ka.event.simulate(b,a.target,ka.event.fix(a),!0)};ka.event.special[b]={setup:function(){0===c++&&Y.addEventListener(a,d,!0)},teardown:function(){0===--c&&Y.removeEventListener(a,d,!0)}}}),ka.fn.extend({on:function(a,c,d,e,f){var g,h;if(\"object\"==typeof a){\"string\"!=typeof c&&(d=d||c,c=b);for(g in a)this.on(g,c,d,a[g],f);return this}if(null==d&&null==e?(e=c,d=c=b):null==e&&(\"string\"==typeof c?(e=d,d=b):(e=d,d=c,c=b)),e===!1)e=j;else if(!e)return this;return 1===f&&(h=e,e=function(a){return ka().off(a),h.apply(this,arguments)},e.guid=h.guid||(h.guid=ka.guid++)),this.each(function(){ka.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,ka(a.delegateTarget).off(e.namespace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler),this;if(\"object\"==typeof a){for(f in a)this.off(f,c,a[f]);return this}return(c===!1||\"function\"==typeof c)&&(d=c,c=b),d===!1&&(d=j),this.each(function(){ka.event.remove(this,a,d,c)})},trigger:function(a,b){return this.each(function(){ka.event.trigger(a,b,this)})},triggerHandler:function(a,c){var d=this[0];return d?ka.event.trigger(a,c,d,!0):b}});var Qa=/^.[^:#\\[\\.,]*$/,Ra=/^(?:parents|prev(?:Until|All))/,Sa=ka.expr.match.needsContext,Ta={children:!0,contents:!0,next:!0,prev:!0};ka.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(ka(a).filter(function(){for(b=0;e>b;b++)if(ka.contains(d[b],this))return!0}));for(b=0;e>b;b++)ka.find(a,d[b],c);return c=this.pushStack(e>1?ka.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},has:function(a){var b,c=ka(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(ka.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(m(this,a||[],!0))},filter:function(a){return this.pushStack(m(this,a||[],!1))},is:function(a){return!!m(this,\"string\"==typeof a&&Sa.test(a)?ka(a):a||[],!1).length},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=Sa.test(a)||\"string\"!=typeof a?ka(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(11>c.nodeType&&(g?g.index(c)>-1:1===c.nodeType&&ka.find.matchesSelector(c,a))){c=f.push(c);break}return this.pushStack(f.length>1?ka.unique(f):f)},index:function(a){return a?\"string\"==typeof a?ka.inArray(this[0],ka(a)):ka.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){var c=\"string\"==typeof a?ka(a,b):ka.makeArray(a&&a.nodeType?[a]:a),d=ka.merge(this.get(),c);return this.pushStack(ka.unique(d))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),ka.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return ka.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return ka.dir(a,\"parentNode\",c)},next:function(a){return l(a,\"nextSibling\")},prev:function(a){return l(a,\"previousSibling\")},nextAll:function(a){return ka.dir(a,\"nextSibling\");\n},prevAll:function(a){return ka.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return ka.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return ka.dir(a,\"previousSibling\",c)},siblings:function(a){return ka.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return ka.sibling(a.firstChild)},contents:function(a){return ka.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:ka.merge([],a.childNodes)}},function(a,b){ka.fn[a]=function(c,d){var e=ka.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=ka.filter(d,e)),this.length>1&&(Ta[a]||(e=ka.unique(e)),Ra.test(a)&&(e=e.reverse())),this.pushStack(e)}}),ka.extend({filter:function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?ka.find.matchesSelector(d,a)?[d]:[]:ka.find.matches(a,ka.grep(b,function(a){return 1===a.nodeType}))},dir:function(a,c,d){for(var e=[],f=a[c];f&&9!==f.nodeType&&(d===b||1!==f.nodeType||!ka(f).is(d));)1===f.nodeType&&e.push(f),f=f[c];return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var Ua=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",Va=/ jQuery\\d+=\"(?:null|\\d+)\"/g,Wa=RegExp(\"<(?:\"+Ua+\")[\\\\s/>]\",\"i\"),Xa=/^\\s+/,Ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,Za=/<([\\w:]+)/,$a=/<tbody/i,_a=/<|&#?\\w+;/,ab=/<(?:script|style|link)/i,bb=/^(?:checkbox|radio)$/i,cb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,db=/^$|\\/(?:java|ecma)script/i,eb=/^true\\/(.*)/,fb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,gb={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:ka.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},hb=n(Y),ib=hb.appendChild(Y.createElement(\"div\"));gb.optgroup=gb.option,gb.tbody=gb.tfoot=gb.colgroup=gb.caption=gb.thead,gb.th=gb.td,ka.fn.extend({text:function(a){return ka.access(this,function(a){return a===b?ka.text(this):this.empty().append((this[0]&&this[0].ownerDocument||Y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?ka.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||ka.cleanData(u(c)),c.parentNode&&(b&&ka.contains(c.ownerDocument,c)&&r(u(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&ka.cleanData(u(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&ka.nodeName(a,\"select\")&&(a.options.length=0)}return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return ka.clone(this,a,b)})},html:function(a){return ka.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return 1===c.nodeType?c.innerHTML.replace(Va,\"\"):b;if(!(\"string\"!=typeof a||ab.test(a)||!ka.support.htmlSerialize&&Wa.test(a)||!ka.support.leadingWhitespace&&Xa.test(a)||gb[(Za.exec(a)||[\"\",\"\"])[1].toLowerCase()])){a=a.replace(Ya,\"<$1></$2>\");try{for(;e>d;d++)c=this[d]||{},1===c.nodeType&&(ka.cleanData(u(c,!1)),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=ka.map(this,function(a){return[a.nextSibling,a.parentNode]}),b=0;return this.domManip(arguments,function(c){var d=a[b++],e=a[b++];e&&(d&&d.parentNode!==e&&(d=this.nextSibling),ka(this).remove(),e.insertBefore(c,d))},!0),b?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b,c){a=da.apply([],a);var d,e,f,g,h,i,j=0,k=this.length,l=this,m=k-1,n=a[0],o=ka.isFunction(n);if(o||!(1>=k||\"string\"!=typeof n||ka.support.checkClone)&&cb.test(n))return this.each(function(d){var e=l.eq(d);o&&(a[0]=n.call(this,d,e.html())),e.domManip(a,b,c)});if(k&&(i=ka.buildFragment(a,this[0].ownerDocument,!1,!c&&this),d=i.firstChild,1===i.childNodes.length&&(i=d),d)){for(g=ka.map(u(i,\"script\"),p),f=g.length;k>j;j++)e=i,j!==m&&(e=ka.clone(e,!0,!0),f&&ka.merge(g,u(e,\"script\"))),b.call(this[j],e,j);if(f)for(h=g[g.length-1].ownerDocument,ka.map(g,q),j=0;f>j;j++)e=g[j],db.test(e.type||\"\")&&!ka._data(e,\"globalEval\")&&ka.contains(h,e)&&(e.src?ka._evalUrl(e.src):ka.globalEval((e.text||e.textContent||e.innerHTML||\"\").replace(fb,\"\")));i=d=null}return this}}),ka.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){ka.fn[a]=function(a){for(var c,d=0,e=[],f=ka(a),g=f.length-1;g>=d;d++)c=d===g?this:this.clone(!0),ka(f[d])[b](c),ea.apply(e,c.get());return this.pushStack(e)}}),ka.extend({clone:function(a,b,c){var d,e,f,g,h,i=ka.contains(a.ownerDocument,a);if(ka.support.html5Clone||ka.isXMLDoc(a)||!Wa.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(ib.innerHTML=a.outerHTML,ib.removeChild(f=ib.firstChild)),!(ka.support.noCloneEvent&&ka.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||ka.isXMLDoc(a)))for(d=u(f),h=u(a),g=0;null!=(e=h[g]);++g)d[g]&&t(e,d[g]);if(b)if(c)for(h=h||u(a),d=d||u(f),g=0;null!=(e=h[g]);g++)s(e,d[g]);else s(a,f);return d=u(f,\"script\"),d.length>0&&r(d,!i&&u(a,\"script\")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,l=a.length,m=n(b),o=[],p=0;l>p;p++)if(f=a[p],f||0===f)if(\"object\"===ka.type(f))ka.merge(o,f.nodeType?[f]:f);else if(_a.test(f)){for(h=h||m.appendChild(b.createElement(\"div\")),i=(Za.exec(f)||[\"\",\"\"])[1].toLowerCase(),k=gb[i]||gb._default,h.innerHTML=k[1]+f.replace(Ya,\"<$1></$2>\")+k[2],e=k[0];e--;)h=h.lastChild;if(!ka.support.leadingWhitespace&&Xa.test(f)&&o.push(b.createTextNode(Xa.exec(f)[0])),!ka.support.tbody)for(f=\"table\"!==i||$a.test(f)?\"<table>\"!==k[1]||$a.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;e--;)ka.nodeName(j=f.childNodes[e],\"tbody\")&&!j.childNodes.length&&f.removeChild(j);for(ka.merge(o,h.childNodes),h.textContent=\"\";h.firstChild;)h.removeChild(h.firstChild);h=m.lastChild}else o.push(b.createTextNode(f));for(h&&m.removeChild(h),ka.support.appendChecked||ka.grep(u(o,\"input\"),v),p=0;f=o[p++];)if((!d||-1===ka.inArray(f,d))&&(g=ka.contains(f.ownerDocument,f),h=u(m.appendChild(f),\"script\"),g&&r(h),c))for(e=0;f=h[e++];)db.test(f.type||\"\")&&c.push(f);return h=null,m},cleanData:function(a,b){for(var c,d,e,f,g=0,h=ka.expando,i=ka.cache,j=ka.support.deleteExpando,k=ka.event.special;null!=(c=a[g]);g++)if((b||ka.acceptData(c))&&(e=c[h],f=e&&i[e])){if(f.events)for(d in f.events)k[d]?ka.event.remove(c,d):ka.removeEvent(c,d,f.handle);i[e]&&(delete i[e],j?delete c[h]:typeof c.removeAttribute!==W?c.removeAttribute(h):c[h]=null,ba.push(e))}},_evalUrl:function(a){return ka.ajax({url:a,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),ka.fn.extend({wrapAll:function(a){if(ka.isFunction(a))return this.each(function(b){ka(this).wrapAll(a.call(this,b))});if(this[0]){var b=ka(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return ka.isFunction(a)?this.each(function(b){ka(this).wrapInner(a.call(this,b))}):this.each(function(){var b=ka(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=ka.isFunction(a);return this.each(function(c){ka(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){ka.nodeName(this,\"body\")||ka(this).replaceWith(this.childNodes)}).end()}});var jb,kb,lb,mb=/alpha\\([^)]*\\)/i,nb=/opacity\\s*=\\s*([^)]*)/,ob=/^(top|right|bottom|left)$/,pb=/^(none|table(?!-c[ea]).+)/,qb=/^margin/,rb=RegExp(\"^(\"+la+\")(.*)$\",\"i\"),sb=RegExp(\"^(\"+la+\")(?!px)[a-z%]+$\",\"i\"),tb=RegExp(\"^([+-])=(\"+la+\")\",\"i\"),ub={BODY:\"block\"},vb={position:\"absolute\",visibility:\"hidden\",display:\"block\"},wb={letterSpacing:0,fontWeight:400},xb=[\"Top\",\"Right\",\"Bottom\",\"Left\"],yb=[\"Webkit\",\"O\",\"Moz\",\"ms\"];ka.fn.extend({css:function(a,c){return ka.access(this,function(a,c,d){var e,f,g={},h=0;if(ka.isArray(c)){for(f=kb(a),e=c.length;e>h;h++)g[c[h]]=ka.css(a,c[h],!1,f);return g}return d!==b?ka.style(a,c,d):ka.css(a,c)},a,c,arguments.length>1)},show:function(){return y(this,!0)},hide:function(){return y(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){x(this)?ka(this).show():ka(this).hide()})}}),ka.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=lb(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":ka.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=ka.camelCase(c),j=a.style;if(c=ka.cssProps[i]||(ka.cssProps[i]=w(j,i)),h=ka.cssHooks[c]||ka.cssHooks[i],d===b)return h&&\"get\"in h&&(f=h.get(a,!1,e))!==b?f:j[c];if(g=typeof d,\"string\"===g&&(f=tb.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(ka.css(a,c)),g=\"number\"),!(null==d||\"number\"===g&&isNaN(d)||(\"number\"!==g||ka.cssNumber[i]||(d+=\"px\"),ka.support.clearCloneStyle||\"\"!==d||0!==c.indexOf(\"background\")||(j[c]=\"inherit\"),h&&\"set\"in h&&(d=h.set(a,d,e))===b)))try{j[c]=d}catch(k){}}},css:function(a,c,d,e){var f,g,h,i=ka.camelCase(c);return c=ka.cssProps[i]||(ka.cssProps[i]=w(a.style,i)),h=ka.cssHooks[c]||ka.cssHooks[i],h&&\"get\"in h&&(g=h.get(a,!0,d)),g===b&&(g=lb(a,c,e)),\"normal\"===g&&c in wb&&(g=wb[c]),\"\"===d||d?(f=parseFloat(g),d===!0||ka.isNumeric(f)?f||0:g):g}}),a.getComputedStyle?(kb=function(b){return a.getComputedStyle(b,null)},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(\"\"!==i||ka.contains(a.ownerDocument,a)||(i=ka.style(a,c)),sb.test(i)&&qb.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i}):Y.documentElement.currentStyle&&(kb=function(a){return a.currentStyle},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h[c]:b,j=a.style;return null==i&&j&&j[c]&&(i=j[c]),sb.test(i)&&!ob.test(c)&&(e=j.left,f=a.runtimeStyle,g=f&&f.left,g&&(f.left=a.currentStyle.left),j.left=\"fontSize\"===c?\"1em\":i,i=j.pixelLeft+\"px\",j.left=e,g&&(f.left=g)),\"\"===i?\"auto\":i}),ka.each([\"height\",\"width\"],function(a,c){ka.cssHooks[c]={get:function(a,d,e){return d?0===a.offsetWidth&&pb.test(ka.css(a,\"display\"))?ka.swap(a,vb,function(){return B(a,c,e)}):B(a,c,e):b},set:function(a,b,d){var e=d&&kb(a);return z(a,b,d?A(a,c,d,ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,e),e):0)}}}),ka.support.opacity||(ka.cssHooks.opacity={get:function(a,b){return nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=ka.isNumeric(b)?\"alpha(opacity=\"+100*b+\")\":\"\",f=d&&d.filter||c.filter||\"\";c.zoom=1,(b>=1||\"\"===b)&&\"\"===ka.trim(f.replace(mb,\"\"))&&c.removeAttribute&&(c.removeAttribute(\"filter\"),\"\"===b||d&&!d.filter)||(c.filter=mb.test(f)?f.replace(mb,e):f+\" \"+e)}}),ka(function(){ka.support.reliableMarginRight||(ka.cssHooks.marginRight={get:function(a,c){return c?ka.swap(a,{display:\"inline-block\"},lb,[a,\"marginRight\"]):b}}),!ka.support.pixelPosition&&ka.fn.position&&ka.each([\"top\",\"left\"],function(a,c){ka.cssHooks[c]={get:function(a,d){return d?(d=lb(a,c),sb.test(d)?ka(a).position()[c]+\"px\":d):b}}})}),ka.expr&&ka.expr.filters&&(ka.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!ka.support.reliableHiddenOffsets&&\"none\"===(a.style&&a.style.display||ka.css(a,\"display\"))},ka.expr.filters.visible=function(a){return!ka.expr.filters.hidden(a)}),ka.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){ka.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+xb[d]+b]=f[d]||f[d-2]||f[0];return e}},qb.test(a)||(ka.cssHooks[a+b].set=z)});var zb=/%20/g,Ab=/\\[\\]$/,Bb=/\\r?\\n/g,Cb=/^(?:submit|button|image|reset|file)$/i,Db=/^(?:input|select|textarea|keygen)/i;ka.fn.extend({serialize:function(){return ka.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=ka.prop(this,\"elements\");return a?ka.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!ka(this).is(\":disabled\")&&Db.test(this.nodeName)&&!Cb.test(a)&&(this.checked||!bb.test(a))}).map(function(a,b){var c=ka(this).val();return null==c?null:ka.isArray(c)?ka.map(c,function(a){return{name:b.name,value:a.replace(Bb,\"\\r\\n\")}}):{name:b.name,value:c.replace(Bb,\"\\r\\n\")}}).get()}}),ka.param=function(a,c){var d,e=[],f=function(a,b){b=ka.isFunction(b)?b():null==b?\"\":b,e[e.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(c===b&&(c=ka.ajaxSettings&&ka.ajaxSettings.traditional),ka.isArray(a)||a.jquery&&!ka.isPlainObject(a))ka.each(a,function(){f(this.name,this.value)});else for(d in a)E(d,a[d],c,f);return e.join(\"&\").replace(zb,\"+\")},ka.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){ka.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),ka.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}});var Eb,Fb,Gb=ka.now(),Hb=/\\?/,Ib=/#.*$/,Jb=/([?&])_=[^&]*/,Kb=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Lb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mb=/^(?:GET|HEAD)$/,Nb=/^\\/\\//,Ob=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Pb=ka.fn.load,Qb={},Rb={},Sb=\"*/\".concat(\"*\");try{Fb=X.href}catch(Tb){Fb=Y.createElement(\"a\"),Fb.href=\"\",Fb=Fb.href}Eb=Ob.exec(Fb.toLowerCase())||[],ka.fn.load=function(a,c,d){if(\"string\"!=typeof a&&Pb)return Pb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(\" \");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),ka.isFunction(c)?(d=c,c=b):c&&\"object\"==typeof c&&(g=\"POST\"),h.length>0&&ka.ajax({url:a,type:g,dataType:\"html\",data:c}).done(function(a){f=arguments,h.html(e?ka(\"<div>\").append(ka.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,f||[a.responseText,b,a])}),this},ka.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){ka.fn[b]=function(a){return this.on(b,a)}}),ka.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Fb,type:\"GET\",isLocal:Lb.test(Eb[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Sb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ka.parseJSON,\"text xml\":ka.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?H(H(a,ka.ajaxSettings),b):H(ka.ajaxSettings,a)},ajaxPrefilter:F(Qb),ajaxTransport:F(Rb),ajax:function(a,c){function d(a,c,d,e){var f,l,s,t,v,x=c;2!==u&&(u=2,i&&clearTimeout(i),k=b,h=e||\"\",w.readyState=a>0?4:0,f=a>=200&&300>a||304===a,d&&(t=I(m,w,d)),t=J(m,t,w,f),f?(m.ifModified&&(v=w.getResponseHeader(\"Last-Modified\"),v&&(ka.lastModified[g]=v),v=w.getResponseHeader(\"etag\"),v&&(ka.etag[g]=v)),204===a||\"HEAD\"===m.type?x=\"nocontent\":304===a?x=\"notmodified\":(x=t.state,l=t.data,s=t.error,f=!s)):(s=x,(a||!x)&&(x=\"error\",0>a&&(a=0))),w.status=a,w.statusText=(c||x)+\"\",f?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=b,j&&o.trigger(f?\"ajaxSuccess\":\"ajaxError\",[w,m,f?l:s]),q.fireWith(n,[w,x]),j&&(o.trigger(\"ajaxComplete\",[w,m]),--ka.active||ka.event.trigger(\"ajaxStop\")))}\"object\"==typeof a&&(c=a,a=b),c=c||{};var e,f,g,h,i,j,k,l,m=ka.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?ka(n):ka.event,p=ka.Deferred(),q=ka.Callbacks(\"once memory\"),r=m.statusCode||{},s={},t={},u=0,v=\"canceled\",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!l)for(l={};b=Kb.exec(h);)l[b[1].toLowerCase()]=b[2];b=l[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?h:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return k&&k.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((a||m.url||Fb)+\"\").replace(Ib,\"\").replace(Nb,Eb[1]+\"//\"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=ka.trim(m.dataType||\"*\").toLowerCase().match(ma)||[\"\"],null==m.crossDomain&&(e=Ob.exec(m.url.toLowerCase()),m.crossDomain=!(!e||e[1]===Eb[1]&&e[2]===Eb[2]&&(e[3]||(\"http:\"===e[1]?\"80\":\"443\"))===(Eb[3]||(\"http:\"===Eb[1]?\"80\":\"443\")))),m.data&&m.processData&&\"string\"!=typeof m.data&&(m.data=ka.param(m.data,m.traditional)),G(Qb,m,c,w),2===u)return w;j=m.global,j&&0===ka.active++&&ka.event.trigger(\"ajaxStart\"),m.type=m.type.toUpperCase(),m.hasContent=!Mb.test(m.type),g=m.url,m.hasContent||(m.data&&(g=m.url+=(Hb.test(g)?\"&\":\"?\")+m.data,delete m.data),m.cache===!1&&(m.url=Jb.test(g)?g.replace(Jb,\"$1_=\"+Gb++):g+(Hb.test(g)?\"&\":\"?\")+\"_=\"+Gb++)),m.ifModified&&(ka.lastModified[g]&&w.setRequestHeader(\"If-Modified-Since\",ka.lastModified[g]),ka.etag[g]&&w.setRequestHeader(\"If-None-Match\",ka.etag[g])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader(\"Content-Type\",m.contentType),w.setRequestHeader(\"Accept\",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+(\"*\"!==m.dataTypes[0]?\", \"+Sb+\"; q=0.01\":\"\"):m.accepts[\"*\"]);for(f in m.headers)w.setRequestHeader(f,m.headers[f]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v=\"abort\";for(f in{success:1,error:1,complete:1})w[f](m[f]);if(k=G(Rb,m,c,w)){w.readyState=1,j&&o.trigger(\"ajaxSend\",[w,m]),m.async&&m.timeout>0&&(i=setTimeout(function(){w.abort(\"timeout\")},m.timeout));try{u=1,k.send(s,d)}catch(x){if(!(2>u))throw x;d(-1,x)}}else d(-1,\"No Transport\");return w},getJSON:function(a,b,c){return ka.get(a,b,c,\"json\")},getScript:function(a,c){return ka.get(a,b,c,\"script\")}}),ka.each([\"get\",\"post\"],function(a,c){ka[c]=function(a,d,e,f){return ka.isFunction(d)&&(f=f||e,e=d,d=b),ka.ajax({url:a,type:c,dataType:f,data:d,success:e})}}),ka.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(a){return ka.globalEval(a),a}}}),ka.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),ka.ajaxTransport(\"script\",function(a){if(a.crossDomain){var c,d=Y.head||ka(\"head\")[0]||Y.documentElement;return{send:function(b,e){c=Y.createElement(\"script\"),c.async=!0,a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,b){(b||!c.readyState||/loaded|complete/.test(c.readyState))&&(c.onload=c.onreadystatechange=null,c.parentNode&&c.parentNode.removeChild(c),c=null,b||e(200,\"success\"))},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(b,!0)}}}});var Ub=[],Vb=/(=)\\?(?=&|$)|\\?\\?/;ka.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Ub.pop()||ka.expando+\"_\"+Gb++;return this[a]=!0,a}}),ka.ajaxPrefilter(\"json jsonp\",function(c,d,e){var f,g,h,i=c.jsonp!==!1&&(Vb.test(c.url)?\"url\":\"string\"==typeof c.data&&!(c.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Vb.test(c.data)&&\"data\");return i||\"jsonp\"===c.dataTypes[0]?(f=c.jsonpCallback=ka.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,i?c[i]=c[i].replace(Vb,\"$1\"+f):c.jsonp!==!1&&(c.url+=(Hb.test(c.url)?\"&\":\"?\")+c.jsonp+\"=\"+f),c.converters[\"script json\"]=function(){return h||ka.error(f+\" was not called\"),h[0]},c.dataTypes[0]=\"json\",g=a[f],a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,Ub.push(f)),h&&ka.isFunction(g)&&g(h[0]),h=g=b}),\"script\"):b});var Wb,Xb,Yb=0,Zb=a.ActiveXObject&&function(){var a;for(a in Wb)Wb[a](b,!0)};ka.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&K()||L()}:K,Xb=ka.ajaxSettings.xhr(),ka.support.cors=!!Xb&&\"withCredentials\"in Xb,Xb=ka.support.ajax=!!Xb,Xb&&ka.ajaxTransport(function(c){if(!c.crossDomain||ka.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();if(c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async),c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),c.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l;try{if(d&&(e||4===i.readyState))if(d=b,g&&(i.onreadystatechange=ka.noop,Zb&&delete Wb[g]),e)4!==i.readyState&&i.abort();else{l={},h=i.status,j=i.getAllResponseHeaders(),\"string\"==typeof i.responseText&&(l.text=i.responseText);try{k=i.statusText}catch(m){k=\"\"}h||!c.isLocal||c.crossDomain?1223===h&&(h=204):h=l.text?200:404}}catch(n){e||f(-1,n)}l&&f(h,k,l,j)},c.async?4===i.readyState?setTimeout(d):(g=++Yb,Zb&&(Wb||(Wb={},ka(a).unload(Zb)),Wb[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(b,!0)}}}});var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=RegExp(\"^(?:([+-])=|)(\"+la+\")([a-z%]*)$\",\"i\"),cc=/queueHooks$/,dc=[Q],ec={\"*\":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(ka.cssNumber[a]?\"\":\"px\"),g=(ka.cssNumber[a]||\"px\"!==f&&+d)&&bc.exec(ka.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||\".5\",g/=h,ka.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};ka.Animation=ka.extend(O,{tweener:function(a,b){ka.isFunction(a)?(b=a,a=[\"*\"]):a=a.split(\" \");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),ka.Tween=R,R.prototype={constructor:R,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||\"swing\",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(ka.cssNumber[c]?\"\":\"px\")},cur:function(){var a=R.propHooks[this.prop];return a&&a.get?a.get(this):R.propHooks._default.get(this)},run:function(a){var b,c=R.propHooks[this.prop];return this.pos=b=this.options.duration?ka.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=ka.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0):a.elem[a.prop]},set:function(a){ka.fx.step[a.prop]?ka.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[ka.cssProps[a.prop]]||ka.cssHooks[a.prop])?ka.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},ka.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=ka.fn[b];ka.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(S(b,!0),a,d,e)}}),ka.fn.extend({fadeTo:function(a,b,c,d){return this.filter(x).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=ka.isEmptyObject(a),f=ka.speed(b,c,d),g=function(){var b=O(this,ka.extend({},a),f);(e||ka._data(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return\"string\"!=typeof a&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,c=null!=a&&a+\"queueHooks\",f=ka.timers,g=ka._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cc.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem!==this||null!=a&&f[c].queue!==a||(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&ka.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=ka._data(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=ka.timers,g=d?d.length:0;for(c.finish=!0,ka.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),ka.each({slideDown:S(\"show\"),slideUp:S(\"hide\"),slideToggle:S(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){ka.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),ka.speed=function(a,b,c){var d=a&&\"object\"==typeof a?ka.extend({},a):{complete:c||!c&&b||ka.isFunction(a)&&a,duration:a,easing:c&&b||b&&!ka.isFunction(b)&&b};return d.duration=ka.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in ka.fx.speeds?ka.fx.speeds[d.duration]:ka.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){ka.isFunction(d.old)&&d.old.call(this),d.queue&&ka.dequeue(this,d.queue)},d},ka.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},ka.timers=[],ka.fx=R.prototype.init,ka.fx.tick=function(){var a,c=ka.timers,d=0;for($b=ka.now();c.length>d;d++)a=c[d],a()||c[d]!==a||c.splice(d--,1);c.length||ka.fx.stop(),$b=b},ka.fx.timer=function(a){a()&&ka.timers.push(a)&&ka.fx.start()},ka.fx.interval=13,ka.fx.start=function(){_b||(_b=setInterval(ka.fx.tick,ka.fx.interval))},ka.fx.stop=function(){clearInterval(_b),_b=null},ka.fx.speeds={slow:600,fast:200,_default:400},ka.fx.step={},ka.expr&&ka.expr.filters&&(ka.expr.filters.animated=function(a){return ka.grep(ka.timers,function(b){return a===b.elem}).length}),ka.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){ka.offset.setOffset(this,a,b)});var c,d,e={top:0,left:0},f=this[0],g=f&&f.ownerDocument;return g?(c=g.documentElement,ka.contains(c,f)?(typeof f.getBoundingClientRect!==W&&(e=f.getBoundingClientRect()),d=T(g),{top:e.top+(d.pageYOffset||c.scrollTop)-(c.clientTop||0),left:e.left+(d.pageXOffset||c.scrollLeft)-(c.clientLeft||0)}):e):void 0},ka.offset={setOffset:function(a,b,c){var d=ka.css(a,\"position\");\"static\"===d&&(a.style.position=\"relative\");var e,f,g=ka(a),h=g.offset(),i=ka.css(a,\"top\"),j=ka.css(a,\"left\"),k=(\"absolute\"===d||\"fixed\"===d)&&ka.inArray(\"auto\",[i,j])>-1,l={},m={};k?(m=g.position(),e=m.top,f=m.left):(e=parseFloat(i)||0,f=parseFloat(j)||0),ka.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(l.top=b.top-h.top+e),null!=b.left&&(l.left=b.left-h.left+f),\"using\"in b?b.using.call(a,l):g.css(l)}},ka.fn.extend({position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===ka.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),ka.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=ka.css(a[0],\"borderTopWidth\",!0),c.left+=ka.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-ka.css(d,\"marginTop\",!0),left:b.left-c.left-ka.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Z;a&&!ka.nodeName(a,\"html\")&&\"static\"===ka.css(a,\"position\");)a=a.offsetParent;return a||Z})}}),ka.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=/Y/.test(c);ka.fn[a]=function(e){return ka.access(this,function(a,e,f){var g=T(a);return f===b?g?c in g?g[c]:g.document.documentElement[e]:a[e]:(g?g.scrollTo(d?ka(g).scrollLeft():f,d?f:ka(g).scrollTop()):a[e]=f,b)},a,e,arguments.length,null)}}),ka.each({Height:\"height\",Width:\"width\"},function(a,c){ka.each({padding:\"inner\"+a,content:c,\"\":\"outer\"+a},function(d,e){ka.fn[e]=function(e,f){var g=arguments.length&&(d||\"boolean\"!=typeof e),h=d||(e===!0||f===!0?\"margin\":\"border\");return ka.access(this,function(c,d,e){var f;return ka.isWindow(c)?c.document.documentElement[\"client\"+a]:9===c.nodeType?(f=c.documentElement,Math.max(c.body[\"scroll\"+a],f[\"scroll\"+a],c.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):e===b?ka.css(c,d,h):ka.style(c,d,e,h)},c,g?e:b,g,null)}})}),ka.fn.size=function(){return this.length},ka.fn.andSelf=ka.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=ka:(a.jQuery=a.$=ka,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return ka}))}(window);"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/webuploader/webuploader.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--webuploader-color-primary:var(--color-primary,#00B7EE);--webuploader-color-content-bg:var(--color-content-bg,#FFF)}.webuploader-container{position:relative}.webuploader-element-invisible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.webuploader-pick{position:relative;display:block;cursor:pointer;padding:0;color:#666;text-align:center;border-radius:2px;overflow:hidden}.webuploader-pick-hover{}.webuploader-pick-disable{opacity:.6;pointer-events:none}.webuploader-list{display:block;margin:0;padding:0;position:static;border:1px solid #EEE;border-radius:.2rem;padding:.2rem;background-color:var(--webuploader-color-content-bg)}.webuploader-list:empty{display:none}.webuploader-list>li{list-style:none;display:block;border:1px solid #EEE;padding:0;margin-bottom:.1rem;background:var(--webuploader-color-content-bg);border-radius:.2rem}.webuploader-list>li .progress-box{background-color:#EEE;margin:2px;border-radius:4px}.webuploader-list>li .progress-box .progress-bar{height:3px;background-color:var(--webuploader-color-primary);border-radius:4px}.webuploader-list>li .progress-info{font-size:12px;line-height:20px;width:100%;word-wrap:normal;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#999}.webuploader-list>li .progress-info .status{display:inline;line-height:20px}"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/webuploader/webuploader.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.require,c=a.__dollar||a.jQuery||a.Zepto||b(\"jquery\")||b(\"zepto\");if(!c)throw new Error(\"jQuery or Zepto not found!\");return c}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"1.0.0\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={debug:!1},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numOfInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return!(b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1)},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a))}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||c.lastModified&&new Date(c.lastModified).toLocaleString()||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\",style:\"webuploader-pick\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button,h=e.style;h&&g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":h&&g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":h&&g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b[0]&&b[0].offsetWidth||b.outerWidth()||b.width(),d=b[0]&&b[0].offsetHeight||b.outerHeight()||b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.on(\"dialogopen\",function(){e.owner.trigger(\"dialogOpen\",j.button)}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"lib/browser-image-compression\",[\"base\",\"lib/blob\"],function(b,c){function d(a,b){return b.forEach(function(b){b&&\"string\"!=typeof b&&!Array.isArray(b)&&Object.keys(b).forEach(function(c){if(\"default\"!==c&&!(c in a)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d.get?d:{enumerable:!0,get:function(){return b[c]}})}})}),Object.freeze(a)}function e(a,b){return new Promise(function(d,e){var f;return z(a).then(function(a){try{return f=a,d(new c([b.slice(0,2),f,b.slice(2)],{type:\"image/jpeg\"}))}catch(a){return e(a)}},e)})}function f(a,b,d){return void 0===d&&(d=Date.now()),new Promise(function(e){for(var f=a.split(\",\"),g=f[0].match(/:(.*?);/)[1],h=globalThis.atob(f[1]),i=h.length,j=new Uint8Array(i);i--;)j[i]=h.charCodeAt(i);var k=new c([j],{type:g});k.name=b,k.lastModified=d,e(k)})}function g(a){return new Promise(function(b,c){var d=new L;d.onload=function(){return b(d.result)},d.onerror=function(a){return c(a)},d.readAsDataURL(a)})}function h(a){return new Promise(function(b,c){var d=new Image;d.onload=function(){return b(d)},d.onerror=function(a){return c(a)},d.src=a})}function i(){if(void 0!==i.cachedResult)return i.cachedResult;var a=F.ETC,b=navigator.userAgent;return/Chrom(e|ium)/i.test(b)?a=F.CHROME:/iP(ad|od|hone)/i.test(b)&&/WebKit/i.test(b)?a=F.IOS:/Safari/i.test(b)?a=F.DESKTOP_SAFARI:/Firefox/i.test(b)?a=F.FIREFOX:(/MSIE/i.test(b)||1==!!document.documentMode)&&(a=F.IE),i.cachedResult=a,i.cachedResult}function j(a,b){for(var c=i(),d=G[c],e=a,f=b,g=e*f,h=e>f?f/e:e/f;g>d*d;){var j=(d+e)/2,k=(d+f)/2;k>j?(f=k,e=k*h):(f=j*h,e=j),g=e*f}return{width:e,height:f}}function k(a,b){var c,d;try{if(c=new OffscreenCanvas(a,b),d=c.getContext(\"2d\"),null===d)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(a){c=document.createElement(\"canvas\"),d=c.getContext(\"2d\")}return c.width=a,c.height=b,[c,d]}function l(a,b){var c=j(a.width,a.height),d=c.width,e=c.height,f=k(d,e),g=f[0],h=f[1];return b&&/jpe?g/.test(b)&&(h.fillStyle=\"white\",h.fillRect(0,0,g.width,g.height)),h.drawImage(a,0,0,g.width,g.height),g}function m(){return void 0!==m.cachedResult||(m.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),m.cachedResult}function n(a,b){return void 0===b&&(b={}),new Promise(function(a,c){var d,e,f=function(){try{return e=l(d,b.fileType||f.type),a([d,e])}catch(f){return c(f)}},j=function(){try{var a=function(a){try{throw a}catch(a){return c(a)}};try{var b;return g(e).then(function(e){try{return b=e,h(b).then(function(b){try{return d=b,function(){try{return f()}catch(a){return c(a)}}()}catch(b){return a(b)}},a)}catch(e){return a(e)}},a)}catch(e){a(e)}}catch(e){return c(e)}};try{if(m()||[F.DESKTOP_SAFARI,F.MOBILE_SAFARI].includes(i()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(k).then(function(a){try{return d=a,f()}catch(a){return j()}},j)}catch(k){j()}})}function o(a,b,d,e,g){return void 0===g&&(g=1),new Promise(function(h,i){function j(){return k.call(this)}function k(){return l.call(this)}function l(){return h(m)}var m;if(\"image/png\"===b){var n=void 0,o=void 0,p=void 0;return n=a.getContext(\"2d\"),o=n.getImageData(0,0,a.width,a.height).data,p=C.encode([o.buffer],a.width,a.height,4096*g),m=new c([p],{type:b}),m.name=d,m.lastModified=e,l.call(this)}if(\"image/bmp\"===b)return new Promise(function(b){return E.toBlob(a,b)}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,k.call(this)}catch(a){return i(a)}}.bind(this),i);if(\"function\"==typeof OffscreenCanvas&&a instanceof OffscreenCanvas)return a.convertToBlob({type:b,quality:g}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,j.call(this)}catch(a){return i(a)}}.bind(this),i);var q=void 0;return q=a.toDataURL(b,g),f(q,d,e).then(function(a){try{return m=a,j.call(this)}catch(a){return i(a)}}.bind(this),i)})}function p(a){a.width=0,a.height=0}function q(){return new Promise(function(a,b){var c,d,e,g,h;return void 0!==q.cachedResult?a(q.cachedResult):(c=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",f(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(a){try{return d=a,n(d).then(function(a){try{return e=a[1],o(e,d.type,d.name,d.lastModified).then(function(a){try{return g=a,p(e),n(g).then(function(a){try{return h=a[0],q.cachedResult=1===h.width&&2===h.height,c(q.cachedResult)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b))})}function r(a){return new Promise(function(b,c){var d=new L;d.onload=function(a){var c=new DataView(a.target.result);if(65496!=c.getUint16(0,!1))return b(-2);for(var d=c.byteLength,e=2;d>e;){if(c.getUint16(e+2,!1)<=8)return b(-1);var f=c.getUint16(e,!1);if(e+=2,65505==f){if(1165519206!=c.getUint32(e+=2,!1))return b(-1);var g=18761==c.getUint16(e+=6,!1);e+=c.getUint32(e+4,g);var h=c.getUint16(e,g);e+=2;for(var i=0;h>i;i++)if(274==c.getUint16(e+12*i,g))return b(c.getUint16(e+12*i+8,g))}else{if(65280!=(65280&f))break;e+=c.getUint16(e,!1)}}return b(-1)},d.onerror=function(a){return c(a)},d.readAsArrayBuffer(a)})}function s(a,b){var c,d,e=a.width,f=a.height,g=b.maxWidthOrHeight,h=a;return isFinite(g)&&(e>g||f>g)&&(c=k(e,f),h=c[0],d=c[1],e>f?(h.width=g,h.height=f/e*g):(h.width=e/f*g,h.height=g),d.drawImage(a,0,0,h.width,h.height),p(a)),h}function t(a,b){var c=a.width,d=a.height,e=k(c,d),f=e[0],g=e[1];switch(b>4&&9>b?(f.width=d,f.height=c):(f.width=c,f.height=d),b){case 2:g.transform(-1,0,0,1,c,0);break;case 3:g.transform(-1,0,0,-1,c,d);break;case 4:g.transform(1,0,0,-1,0,d);break;case 5:g.transform(0,1,1,0,0,0);break;case 6:g.transform(0,1,-1,0,d,0);break;case 7:g.transform(0,-1,-1,0,d,c);break;case 8:g.transform(0,-1,1,0,0,c)}return g.drawImage(a,0,0,c,d),p(a),f}function u(a,b,c){return void 0===c&&(c=0),new Promise(function(d,e){function f(a){if(void 0===a&&(a=5),b.signal&&b.signal.aborted)throw b.signal.reason;h+=a,b.onProgress(Math.min(h,100))}function g(a){if(b.signal&&b.signal.aborted)throw b.signal.reason;h=Math.min(Math.max(a,h),100),b.onProgress(h)}var h,i,j,l,m,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I;return h=c,i=b.maxIteration||10,j=1048576*b.maxSizeMB,f(),n(a,b).then(function(a){try{return l=a[1],f(),m=s(l,b),f(),new Promise(function(a,d){function e(){return a(f)}var f;return(f=b.exifOrientation)?e.call(this):r(c).then(function(a){try{return f=a,e.call(this)}catch(a){return d(a)}}.bind(this),d)}).then(function(a){try{return u=a,f(),q().then(function(a){try{return v=a?m:t(m,u),f(),w=b.initialQuality||1,x=b.fileType||c.type,o(v,x,c.name,c.lastModified,w).then(function(a){function h(){var a;if(i--&&(D>j||D>B)){var b,d;return b=I?.95*H.width:H.width,d=I?.95*H.height:H.height,a=k(b,d),F=a[0],G=a[1],G.drawImage(H,0,0,b,d),w*=\"image/png\"===x?.85:.95,o(F,x,c.name,c.lastModified,w).then(function(a){try{return E=a,p(H),H=F,D=E.size,g(Math.min(99,Math.floor(100*((C-D)/(C-j))))),h}catch(a){return e(a)}},e)}return[1]}function n(){return p(H),p(F),p(m),p(v),p(l),g(100),d(E)}try{if(y=a,f(),z=y.size>j,A=y.size>c.size,!z&&!A)return g(100),d(y);var q;return B=c.size,C=y.size,D=C,H=v,I=!b.alwaysKeepResolution&&z,(q=function(a){for(;a;){if(a.then)return void a.then(q,e);try{if(a.pop){if(a.length)return a.pop()?n.call(this):a;a=h}else a=a.call(this)}catch(a){return e(a)}}}.bind(this))(h)}catch(r){return e(r)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)})}function v(a,b){return new Promise(function(d,e){D||(D=function(a){var b=[];return\"function\"==typeof a?b.push(\"(\".concat(a,\")()\")):b.push(a),URL.createObjectURL(new c(b))}(M));var f=new Worker(D);f.addEventListener(\"message\",function(a){if(b.signal&&b.signal.aborted)f.terminate();else if(void 0===a.data.progress){if(a.data.error)return e(new Error(a.data.error)),void f.terminate();d(a.data.file),f.terminate()}else b.onProgress(a.data.progress)}),f.addEventListener(\"error\",e),b.signal&&b.signal.addEventListener(\"abort\",function(){e(b.signal.reason),f.terminate()}),f.postMessage({file:a,imageCompressionLibUrl:b.libURL,options:y(y({},b),{onProgress:void 0,signal:void 0})})})}function w(a,b){return new Promise(function(a,d){function f(){try{h.name=b.name,h.lastModified=b.lastModified}catch(b){}try{g.preserveExif&&\"image/jpeg\"===b.type&&(!g.fileType||g.fileType&&g.fileType===b.type)&&(h=e(b,h))}catch(b){}return a(h)}var g,h,i,j,k,l;if(g=y({},b),i=0,j=g.onProgress,g.maxSizeMB=g.maxSizeMB||Number.POSITIVE_INFINITY,k=\"boolean\"!=typeof g.useWebWorker||g.useWebWorker,delete g.useWebWorker,g.onProgress=function(a){i=a,\"function\"==typeof j&&j(i)},!(o instanceof c||o instanceof K))return d(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(o.type))return d(new Error(\"The file given is not an image\"));if(l=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!k||\"function\"!=typeof Worker||l)return u(o,g).then(function(a){try{return h=a,f.call(this)}catch(a){return d(a)}}.bind(this),d);var m=function(){try{return f.call(this)}catch(a){return d(a)}}.bind(this),n=function(){try{return u(a,g).then(function(a){try{return h=a,m()}catch(a){return d(a)}},d)}catch(a){return d(a)}};try{return g.libURL=g.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",v(o,g).then(function(a){try{return h=a,m()}catch(a){return n()}},n)}catch(o){n()}})}var x,y=this&&this.__assign||function(){return y=Object.assign||function(a){for(var b,c=1,d=arguments.length;d>c;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a},y.apply(this,arguments)},z=function(a){return new Promise(function(b,d){var e=new FileReader;e.addEventListener(\"load\",function(a){var e=a.target.result,f=new DataView(e),g=0;if(65496!==f.getUint16(g))return d(\"not a valid JPEG\");for(g+=2;;){var h=f.getUint16(g);if(65498===h)break;var i=f.getUint16(g+2);if(65505===h&&1165519206===f.getUint32(g+4)){var j=g+10,k=void 0;switch(f.getUint16(j)){case 18761:k=!0;break;case 19789:k=!1;break;default:return d(\"TIFF header contains invalid endian\")}if(42!==f.getUint16(j+2,k))return d(\"TIFF header contains invalid version\");for(var l=f.getUint32(j+4,k),m=j+l+2+12*f.getUint16(j+l,k),n=j+l+2;m>n;n+=12)if(274==f.getUint16(n,k)){if(3!==f.getUint16(n+2,k))return d(\"Orientation data type is invalid\");if(1!==f.getUint32(n+4,k))return d(\"Orientation data count is invalid\");f.setUint16(n+8,1,k);break}return b(e.slice(g,g+2+i))}g+=2+i}return b(new c)}),e.readAsArrayBuffer(a)})},A={};!function(a){var b,c,d={};a.exports=d,d.parse=function(a,b){for(var c=d.bin.readUshort,e=d.bin.readUint,f=0,g={},h=new Uint8Array(a),i=h.length-4;101010256!=e(h,i);)i--;f=i,f+=4;var j=c(h,f+=4);c(h,f+=2);var k=e(h,f+=2),l=e(h,f+=4);f+=4,f=l;for(var m=0;j>m;m++){e(h,f),f+=4,f+=4,f+=4,e(h,f+=4),k=e(h,f+=4);var n=e(h,f+=4),o=c(h,f+=4),p=c(h,f+2),q=c(h,f+4);f+=6;var r=e(h,f+=8);f+=4,f+=o+p+q,d._readLocal(h,r,g,k,n,b)}return g},d._readLocal=function(a,b,c,e,f,g){var h=d.bin.readUshort,i=d.bin.readUint;i(a,b),h(a,b+=4),h(a,b+=2);var j=h(a,b+=2);i(a,b+=2),i(a,b+=4),b+=4;var k=h(a,b+=8),l=h(a,b+=2);b+=2;var m=d.bin.readUTF8(a,b,k);if(b+=k,b+=l,g)c[m]={size:f,csize:e};else{var n=new Uint8Array(a.buffer,b);if(0==j)c[m]=new Uint8Array(n.buffer.slice(b,b+e));else{if(8!=j)throw\"unknown compression method: \"+j;var o=new Uint8Array(f);d.inflateRaw(n,o),c[m]=o}}},d.inflateRaw=function(a,b){return d.F.inflate(a,b)},d.inflate=function(a,b){return a[0],a[1],d.inflateRaw(new Uint8Array(a.buffer,a.byteOffset+2,a.length-6),b)},d.deflate=function(a,b){null==b&&(b={level:6});var c=0,e=new Uint8Array(50+Math.floor(1.1*a.length));e[c]=120,e[c+1]=156,c+=2,c=d.F.deflateRaw(a,e,c,b.level);var f=d.adler(a,0,a.length);return e[c+0]=255&f>>>24,e[c+1]=255&f>>>16,e[c+2]=255&f>>>8,e[c+3]=255&f>>>0,new Uint8Array(e.buffer,0,c+4)},d.deflateRaw=function(a,b){null==b&&(b={level:6});var c=new Uint8Array(50+Math.floor(1.1*a.length)),e=d.F.deflateRaw(a,c,e,b.level);return new Uint8Array(c.buffer,0,e)},d.encode=function(a,b){null==b&&(b=!1);var c=0,e=d.bin.writeUint,f=d.bin.writeUshort,g={};for(var h in a){var i=!d._noNeed(h)&&!b,j=a[h],k=d.crc.crc(j,0,j.length);g[h]={cpr:i,usize:j.length,crc:k,file:i?d.deflateRaw(j):j}}for(var h in g)c+=g[h].file.length+30+46+2*d.bin.sizeUTF8(h);c+=22;var l=new Uint8Array(c),m=0,n=[];for(var h in g){var o=g[h];n.push(m),m=d._writeHeader(l,m,h,o,0)}var p=0,q=m;for(var h in g)o=g[h],n.push(m),m=d._writeHeader(l,m,h,o,1,n[p++]);var r=m-q;return e(l,m,101010256),m+=4,f(l,m+=4,p),f(l,m+=2,p),e(l,m+=2,r),e(l,m+=4,q),m+=4,m+=2,l.buffer},d._noNeed=function(a){var b=a.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(b)},d._writeHeader=function(a,b,c,e,f,g){var h=d.bin.writeUint,i=d.bin.writeUshort,j=e.file;return h(a,b,0==f?67324752:33639248),b+=4,1==f&&(b+=2),i(a,b,20),i(a,b+=2,0),i(a,b+=2,e.cpr?8:0),h(a,b+=2,0),h(a,b+=4,e.crc),h(a,b+=4,j.length),h(a,b+=4,e.usize),i(a,b+=4,d.bin.sizeUTF8(c)),i(a,b+=2,0),b+=2,1==f&&(b+=2,b+=2,h(a,b+=6,g),b+=4),b+=d.bin.writeUTF8(a,b,c),0==f&&(a.set(j,b),b+=j.length),b},d.crc={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,e){for(var f=0;e>f;f++)a=d.crc.table[255&(a^b[c+f])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^d.crc.update(4294967295,a,b,c)}},d.adler=function(a,b,c){for(var d=1,e=0,f=b,g=b+c;g>f;){for(var h=Math.min(f+5552,g);h>f;)e+=d+=a[f++];d%=65521,e%=65521}return e<<16|d},d.bin={readUshort:function(a,b){return a[b]|a[b+1]<<8},writeUshort:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8},readUint:function(a,b){return 16777216*a[b+3]+(a[b+2]<<16|a[b+1]<<8|a[b])},writeUint:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8,a[b+2]=255&c>>16,a[b+3]=255&c>>24},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},pad:function(a){return a.length<2?\"0\"+a:a},readUTF8:function(a,b,c){for(var e,f=\"\",g=0;c>g;g++)f+=\"%\"+d.bin.pad(a[b+g].toString(16));try{e=decodeURIComponent(f)}catch(e){return d.bin.readASCII(a,b,c)}return e},writeUTF8:function(a,b,c){for(var d=c.length,e=0,f=0;d>f;f++){var g=c.charCodeAt(f);if(0==(4294967168&g))a[b+e]=g,e++;else if(0==(4294965248&g))a[b+e]=192|g>>6,a[b+e+1]=128|63&g>>0,e+=2;else if(0==(4294901760&g))a[b+e]=224|g>>12,a[b+e+1]=128|63&g>>6,a[b+e+2]=128|63&g>>0,e+=3;else{if(0!=(4292870144&g))throw\"e\";a[b+e]=240|g>>18,a[b+e+1]=128|63&g>>12,a[b+e+2]=128|63&g>>6,\na[b+e+3]=128|63&g>>0,e+=4}}return e},sizeUTF8:function(a){for(var b=a.length,c=0,d=0;b>d;d++){var e=a.charCodeAt(d);if(0==(4294967168&e))c++;else if(0==(4294965248&e))c+=2;else if(0==(4294901760&e))c+=3;else{if(0!=(4292870144&e))throw\"e\";c+=4}}return c}},d.F={},d.F.deflateRaw=function(a,b,c,e){var f=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][e],g=d.F.U,h=d.F._goodIndex;d.F._hash;var i=d.F._putsE,j=0,k=c<<3,l=0,m=a.length;if(0==e){for(;m>j;)i(b,k,j+(y=Math.min(65535,m-j))==m?1:0),k=d.F._copyExact(a,j,y,b,k+8),j+=y;return k>>>3}var n=g.lits,o=g.strt,p=g.prev,q=0,r=0,s=0,t=0,u=0,v=0;for(m>2&&(o[v=d.F._hash(a,0)]=0),j=0;m>j;j++){if(u=v,m-2>j+1){v=d.F._hash(a,j+1);var w=32767&j+1;p[w]=o[v],o[v]=w}if(j>=l){(q>14e3||r>26697)&&m-j>100&&(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(j==m-1||l==m?1:0,n,q,t,a,s,j-s,b,k),q=r=t=0,s=j);var x=0;m-2>j&&(x=d.F._bestMatch(a,j,p,u,Math.min(f[2],m-j),f[3]));var y=x>>>16,z=65535&x;if(0!=x){z=65535&x;var A=h(y=x>>>16,g.of0);g.lhst[257+A]++;var B=h(z,g.df0);g.dhst[B]++,t+=g.exb[A]+g.dxb[B],n[q]=y<<23|j-l,n[q+1]=z<<16|A<<8|B,q+=2,l=j+y}else g.lhst[a[j]]++;r++}}for(s==j&&0!=a.length||(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(1,n,q,t,a,s,j-s,b,k),q=0,r=0,q=r=t=0,s=j);0!=(7&k);)k++;return k>>>3},d.F._bestMatch=function(a,b,c,e,f,g){var h=32767&b,i=c[h],j=32767&h-i+32768;if(i==h||e!=d.F._hash(a,b-j))return 0;for(var k=0,l=0,m=Math.min(32767,b);m>=j&&0!=--g&&i!=h;){if(0==k||a[b+k]==a[b+k-j]){var n=d.F._howLong(a,b,j);if(n>k){if(l=j,(k=n)>=f)break;n>j+2&&(n=j+2);for(var o=0,p=0;n-2>p;p++){var q=32767&b-j+p+32768,r=32767&q-c[q]+32768;r>o&&(o=r,i=q)}}}j+=32767&(h=i)-(i=c[h])+32768}return k<<16|l},d.F._howLong=function(a,b,c){if(a[b]!=a[b-c]||a[b+1]!=a[b+1-c]||a[b+2]!=a[b+2-c])return 0;var d=b,e=Math.min(a.length,b+258);for(b+=3;e>b&&a[b]==a[b-c];)b++;return b-d},d.F._hash=function(a,b){return 65535&(a[b]<<8|a[b+1])+(a[b+2]<<4)},d.saved=0,d.F._writeBlock=function(a,b,c,e,f,g,h,i,j){var k,l,m,n,o,p,q,r,s,t=d.F.U,u=d.F._putsF,v=d.F._putsE;t.lhst[256]++,l=(k=d.F.getTrees())[0],m=k[1],n=k[2],o=k[3],p=k[4],q=k[5],r=k[6],s=k[7];var w=32+(0==(7&j+3)?0:8-(7&j+3))+(h<<3),x=e+d.F.contSize(t.fltree,t.lhst)+d.F.contSize(t.fdtree,t.dhst),y=e+d.F.contSize(t.ltree,t.lhst)+d.F.contSize(t.dtree,t.dhst);y+=14+3*q+d.F.contSize(t.itree,t.ihst)+(2*t.ihst[16]+3*t.ihst[17]+7*t.ihst[18]);for(var z=0;286>z;z++)t.lhst[z]=0;for(z=0;30>z;z++)t.dhst[z]=0;for(z=0;19>z;z++)t.ihst[z]=0;var A=x>w&&y>w?0:y>x?1:2;if(u(i,j,a),u(i,j+1,A),j+=3,0==A){for(;0!=(7&j);)j++;j=d.F._copyExact(f,g,h,i,j)}else{var B,C;if(1==A&&(B=t.fltree,C=t.fdtree),2==A){d.F.makeCodes(t.ltree,l),d.F.revCodes(t.ltree,l),d.F.makeCodes(t.dtree,m),d.F.revCodes(t.dtree,m),d.F.makeCodes(t.itree,n),d.F.revCodes(t.itree,n),B=t.ltree,C=t.dtree,v(i,j,o-257),v(i,j+=5,p-1),v(i,j+=5,q-4),j+=4;for(var D=0;q>D;D++)v(i,j+3*D,t.itree[1+(t.ordr[D]<<1)]);j+=3*q,j=d.F._codeTiny(r,t.itree,i,j),j=d.F._codeTiny(s,t.itree,i,j)}for(var E=g,F=0;c>F;F+=2){for(var G=b[F],H=G>>>23,I=E+(8388607&G);I>E;)j=d.F._writeLit(f[E++],B,i,j);if(0!=H){var J=b[F+1],K=J>>16,L=255&J>>8,M=255&J;v(i,j=d.F._writeLit(257+L,B,i,j),H-t.of0[L]),j+=t.exb[L],u(i,j=d.F._writeLit(M,C,i,j),K-t.df0[M]),j+=t.dxb[M],E+=H}}j=d.F._writeLit(256,B,i,j)}return j},d.F._copyExact=function(a,b,c,d,e){var f=e>>>3;return d[f]=c,d[f+1]=c>>>8,d[f+2]=255-d[f],d[f+3]=255-d[f+1],f+=4,d.set(new Uint8Array(a.buffer,b,c),f),e+(c+4<<3)},d.F.getTrees=function(){for(var a=d.F.U,b=d.F._hufTree(a.lhst,a.ltree,15),c=d.F._hufTree(a.dhst,a.dtree,15),e=[],f=d.F._lenCodes(a.ltree,e),g=[],h=d.F._lenCodes(a.dtree,g),i=0;i<e.length;i+=2)a.ihst[e[i]]++;for(i=0;i<g.length;i+=2)a.ihst[g[i]]++;for(var j=d.F._hufTree(a.ihst,a.itree,7),k=19;k>4&&0==a.itree[1+(a.ordr[k-1]<<1)];)k--;return[b,c,j,f,h,k,e,g]},d.F.getSecond=function(a){for(var b=[],c=0;c<a.length;c+=2)b.push(a[c+1]);return b},d.F.nonZero=function(a){for(var b=\"\",c=0;c<a.length;c+=2)0!=a[c+1]&&(b+=(c>>1)+\",\");return b},d.F.contSize=function(a,b){for(var c=0,d=0;d<b.length;d++)c+=b[d]*a[1+(d<<1)];return c},d.F._codeTiny=function(a,b,c,e){for(var f=0;f<a.length;f+=2){var g=a[f],h=a[f+1];e=d.F._writeLit(g,b,c,e);var i=16==g?2:17==g?3:7;g>15&&(d.F._putsE(c,e,h,i),e+=i)}return e},d.F._lenCodes=function(a,b){for(var c=a.length;2!=c&&0==a[c-1];)c-=2;for(var d=0;c>d;d+=2){var e=a[d+1],f=c>d+3?a[d+3]:-1,g=c>d+5?a[d+5]:-1,h=0==d?-1:a[d-1];if(0==e&&f==e&&g==e){for(var i=d+5;c>i+2&&a[i+2]==e;)i+=2;(j=Math.min(i+1-d>>>1,138))<11?b.push(17,j-3):b.push(18,j-11),d+=2*j-2}else if(e==h&&f==e&&g==e){for(i=d+5;c>i+2&&a[i+2]==e;)i+=2;var j=Math.min(i+1-d>>>1,6);b.push(16,j-3),d+=2*j-2}else b.push(e,0)}return c>>>1},d.F._hufTree=function(a,b,c){var e=[],f=a.length,g=b.length,h=0;for(h=0;g>h;h+=2)b[h]=0,b[h+1]=0;for(h=0;f>h;h++)0!=a[h]&&e.push({lit:h,f:a[h]});var i=e.length,j=e.slice(0);if(0==i)return 0;if(1==i){var k=e[0].lit;return j=0==k?1:0,b[1+(k<<1)]=1,b[1+(j<<1)]=1,1}e.sort(function(a,b){return a.f-b.f});var l=e[0],m=e[1],n=0,o=1,p=2;for(e[0]={lit:-1,f:l.f+m.f,l:l,r:m,d:0};o!=i-1;)l=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],m=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],e[o++]={lit:-1,f:l.f+m.f,l:l,r:m};var q=d.F.setDepth(e[o-1],0);for(q>c&&(d.F.restrictDepth(j,c,q),q=c),h=0;i>h;h++)b[1+(j[h].lit<<1)]=j[h].d;return q},d.F.setDepth=function(a,b){return-1!=a.lit?(a.d=b,b):Math.max(d.F.setDepth(a.l,b+1),d.F.setDepth(a.r,b+1))},d.F.restrictDepth=function(a,b,c){var d=0,e=1<<c-b,f=0;for(a.sort(function(a,b){return b.d==a.d?a.f-b.f:b.d-a.d}),d=0;d<a.length&&a[d].d>b;d++){var g=a[d].d;a[d].d=b,f+=e-(1<<c-g)}for(f>>>=c-b;f>0;)(g=a[d].d)<b?(a[d].d++,f-=1<<b-g-1):d++;for(;d>=0;d--)a[d].d==b&&0>f&&(a[d].d--,f++);0!=f&&console.log(\"debt left\")},d.F._goodIndex=function(a,b){var c=0;return b[16|c]<=a&&(c|=16),b[8|c]<=a&&(c|=8),b[4|c]<=a&&(c|=4),b[2|c]<=a&&(c|=2),b[1|c]<=a&&(c|=1),c},d.F._writeLit=function(a,b,c,e){return d.F._putsF(c,e,b[a<<1]),e+b[1+(a<<1)]},d.F.inflate=function(a,b){var c=Uint8Array;if(3==a[0]&&0==a[1])return b||new c(0);var e=d.F,f=e._bitsF,g=e._bitsE,h=e._decodeTiny,i=e.makeCodes,j=e.codes2map,k=e._get17,l=e.U,m=null==b;m&&(b=new c(a.length>>>2<<3));for(var n,o,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;0==p;)if(p=f(a,x,1),q=f(a,x+1,2),x+=3,0!=q){if(m&&(b=d.F._check(b,w+(1<<17))),1==q&&(n=l.flmap,o=l.fdmap,u=511,v=31),2==q){r=g(a,x,5)+257,s=g(a,x+5,5)+1,t=g(a,x+10,4)+4,x+=14;for(var y=0;38>y;y+=2)l.itree[y]=0,l.itree[y+1]=0;var z=1;for(y=0;t>y;y++){var A=g(a,x+3*y,3);l.itree[1+(l.ordr[y]<<1)]=A,A>z&&(z=A)}x+=3*t,i(l.itree,z),j(l.itree,z,l.imap),n=l.lmap,o=l.dmap,x=h(l.imap,(1<<z)-1,r+s,a,x,l.ttree);var B=e._copyOut(l.ttree,0,r,l.ltree);u=(1<<B)-1;var C=e._copyOut(l.ttree,r,s,l.dtree);v=(1<<C)-1,i(l.ltree,B),j(l.ltree,B,n),i(l.dtree,C),j(l.dtree,C,o)}for(;;){var D=n[k(a,x)&u];x+=15&D;var E=D>>>4;if(0==E>>>8)b[w++]=E;else{if(256==E)break;var F=w+E-254;if(E>264){var G=l.ldef[E-257];F=w+(G>>>3)+g(a,x,7&G),x+=7&G}var H=o[k(a,x)&v];x+=15&H;var I=H>>>4,J=l.ddef[I],K=(J>>>4)+f(a,x,15&J);for(x+=15&J,m&&(b=d.F._check(b,w+(1<<17)));F>w;)b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K];w=F}}}else{0!=(7&x)&&(x+=8-(7&x));var L=4+(x>>>3),M=a[L-4]|a[L-3]<<8;m&&(b=d.F._check(b,w+M)),b.set(new c(a.buffer,a.byteOffset+L,M),w),x=L+M<<3,w+=M}return b.length==w?b:b.slice(0,w)},d.F._check=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(Math.max(c<<1,b));return d.set(a,0),d},d.F._decodeTiny=function(a,b,c,e,f,g){for(var h=d.F._bitsE,i=d.F._get17,j=0;c>j;){var k=a[i(e,f)&b];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},d.F._copyOut=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},d.F.makeCodes=function(a,b){for(var c,e,f,g,h=d.F.U,i=a.length,j=h.bl_count,k=0;b>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[a[k]]++;var l=h.next_code;for(c=0,j[0]=0,e=1;b>=e;e++)c=c+j[e-1]<<1,l[e]=c;for(f=0;i>f;f+=2)0!=(g=a[f+1])&&(a[f]=l[g],l[g]++)},d.F.codes2map=function(a,b,c){for(var e=a.length,f=d.F.U.rev15,g=0;e>g;g+=2)if(0!=a[g+1])for(var h=g>>1,i=a[g+1],j=h<<4|i,k=b-i,l=a[g]<<k,m=l+(1<<k);l!=m;)c[f[l]>>>15-b]=j,l++},d.F.revCodes=function(a,b){for(var c=d.F.U.rev15,e=15-b,f=0;f<a.length;f+=2){var g=a[f]<<b-a[f+1];a[f]=c[g]>>>e}},d.F._putsE=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},d.F._putsF=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},d.F._bitsE=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},d.F._bitsF=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},d.F._get17=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},d.F._get25=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},d.F.U=(b=Uint16Array,c=Uint32Array,{next_code:new b(16),bl_count:new b(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new b(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new c(32),flmap:new b(512),fltree:[],fdmap:new b(32),fdtree:[],lmap:new b(32768),ltree:[],ttree:[],dmap:new b(32768),dtree:[],imap:new b(512),itree:[],rev15:new b(32768),lhst:new c(286),dhst:new c(30),ihst:new c(19),lits:new c(15e3),strt:new b(65536),prev:new b(32768)}),function(){function a(a,b,c){for(;0!=b--;)a.push(0,c)}for(var b=d.F.U,c=0;32768>c;c++){var e=c;e=(4278255360&(e=(4042322160&(e=(3435973836&(e=(2863311530&e)>>>1|(1431655765&e)<<1))>>>2|(858993459&e)<<2))>>>4|(252645135&e)<<4))>>>8|(16711935&e)<<8,b.rev15[c]=(e>>>16|e<<16)>>>17}for(c=0;32>c;c++)b.ldef[c]=b.of0[c]<<3|b.exb[c],b.ddef[c]=b.df0[c]<<4|b.dxb[c];a(b.fltree,144,8),a(b.fltree,112,9),a(b.fltree,24,7),a(b.fltree,8,8),d.F.makeCodes(b.fltree,9),d.F.codes2map(b.fltree,9,b.flmap),d.F.revCodes(b.fltree,9),a(b.fdtree,32,5),d.F.makeCodes(b.fdtree,5),d.F.codes2map(b.fdtree,5,b.fdmap),d.F.revCodes(b.fdtree,5),a(b.itree,19,0),a(b.ltree,286,0),a(b.dtree,30,0),a(b.ttree,320,0)}()}({get exports(){return A},set exports(a){A=a}});var B=d({__proto__:null,\"default\":A},[A]),C=function(){function a(a,b,c,e){var f=b*c,g=d(e),h=Math.ceil(b*g/8),j=new Uint8Array(4*f),k=new Uint32Array(j.buffer),l=e.ctype,m=e.depth,n=i.readUshort;if(6==l){var o=f<<2;if(8==m)for(var p=0;o>p;p+=4)j[p]=a[p],j[p+1]=a[p+1],j[p+2]=a[p+2],j[p+3]=a[p+3];if(16==m)for(p=0;o>p;p++)j[p]=a[p<<1]}else if(2==l){var q=e.tabs.tRNS;if(null==q){if(8==m)for(p=0;f>p;p++){var r=3*p;k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r]}if(16==m)for(p=0;f>p;p++)r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r]}else{var s=q[0],t=q[1],u=q[2];if(8==m)for(p=0;f>p;p++){var v=p<<2;r=3*p,k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r],a[r]==s&&a[r+1]==t&&a[r+2]==u&&(j[v+3]=0)}if(16==m)for(p=0;f>p;p++)v=p<<2,r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r],n(a,r)==s&&n(a,r+2)==t&&n(a,r+4)==u&&(j[v+3]=0)}}else if(3==l){var w=e.tabs.PLTE,x=e.tabs.tRNS,y=x?x.length:0;if(1==m)for(var z=0;c>z;z++){var A=z*h,B=z*b;for(p=0;b>p;p++){v=B+p<<2;var C=3*(D=1&a[A+(p>>3)]>>7-((7&p)<<0));j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}if(2==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=3&a[A+(p>>2)]>>6-((3&p)<<1)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(4==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=15&a[A+(p>>1)]>>4-((1&p)<<2)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(8==m)for(p=0;f>p;p++){var D;v=p<<2,C=3*(D=a[p]),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}else if(4==l){if(8==m)for(p=0;f>p;p++){v=p<<2;var E=a[F=p<<1];j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+1]}if(16==m)for(p=0;f>p;p++){var F;v=p<<2,E=a[F=p<<2],j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+2]}}else if(0==l)for(s=e.tabs.tRNS?e.tabs.tRNS:-1,z=0;c>z;z++){var G=z*h,H=z*b;if(1==m)for(var I=0;b>I;I++){var J=(E=255*(1&a[G+(I>>>3)]>>>7-(7&I)))==255*s?0:255;k[H+I]=J<<24|E<<16|E<<8|E}else if(2==m)for(I=0;b>I;I++)J=(E=85*(3&a[G+(I>>>2)]>>>6-((3&I)<<1)))==85*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(4==m)for(I=0;b>I;I++)J=(E=17*(15&a[G+(I>>>1)]>>>4-((1&I)<<2)))==17*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(8==m)for(I=0;b>I;I++)J=(E=a[G+I])==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(16==m)for(I=0;b>I;I++)E=a[G+(I<<1)],J=n(a,G+(I<<1))==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E}return j}function b(a,b,f,g){var h=d(a),i=Math.ceil(f*h/8),k=new Uint8Array((i+1+a.interlace)*g);return b=a.tabs.CgBI?j(b,k):c(b,k),0==a.interlace?b=e(b,a,0,f,g):1==a.interlace&&(b=function(a,b){for(var c=b.width,f=b.height,g=d(b),h=g>>3,i=Math.ceil(c*g/8),j=new Uint8Array(f*i),k=0,l=[0,0,4,0,2,0,1],m=[0,4,0,2,0,1,0],n=[8,8,8,4,4,2,2],o=[8,8,4,4,2,2,1],p=0;7>p;){for(var q=n[p],r=o[p],s=0,t=0,u=l[p];f>u;)u+=q,t++;for(var v=m[p];c>v;)v+=r,s++;var w=Math.ceil(s*g/8);e(a,b,k,s,t);for(var x=0,y=l[p];f>y;){for(var z=m[p],A=k+x*w<<3;c>z;){var B;if(1==g&&(B=1&(B=a[A>>3])>>7-(7&A),j[y*i+(z>>3)]|=B<<7-((7&z)<<0)),2==g&&(B=3&(B=a[A>>3])>>6-(7&A),j[y*i+(z>>2)]|=B<<6-((3&z)<<1)),4==g&&(B=15&(B=a[A>>3])>>4-(7&A),j[y*i+(z>>1)]|=B<<4-((1&z)<<2)),g>=8)for(var C=y*i+z*h,D=0;h>D;D++)j[C+D]=a[(A>>3)+D];A+=g,z+=r}x++,y+=q}0!=s*t&&(k+=t*(1+w)),p+=1}return j}(b,a)),b}function c(a,b){return j(new Uint8Array(a.buffer,2,a.length-6),b)}function d(a){return[1,null,3,1,2,null,4][a.ctype]*a.depth}function e(a,b,c,e,g){var h,i,j=d(b),k=Math.ceil(e*j/8);j=Math.ceil(j/8);var l=a[c],m=0;if(l>1&&(a[c]=[0,0,1][l-2]),3==l)for(m=j;k>m;m++)a[m+1]=255&a[m+1]+(a[m+1-j]>>>1);for(var n=0;g>n;n++)if(h=c+n*k,i=h+n+1,l=a[i-1],m=0,0==l)for(;k>m;m++)a[h+m]=a[i+m];else if(1==l){for(;j>m;m++)a[h+m]=a[i+m];for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-j]}else if(2==l)for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-k];else if(3==l){for(;j>m;m++)a[h+m]=a[i+m]+(a[h+m-k]>>>1);for(;k>m;m++)a[h+m]=a[i+m]+(a[h+m-k]+a[h+m-j]>>>1)}else{for(;j>m;m++)a[h+m]=a[i+m]+f(0,a[h+m-k],0);for(;k>m;m++)a[h+m]=a[i+m]+f(a[h+m-j],a[h+m-k],a[h+m-j-k])}return a}function f(a,b,c){var d=a+b-c,e=d-a,f=d-b,g=d-c;return f*f>=e*e&&g*g>=e*e?a:g*g>=f*f?b:c}function g(a,b,c){c.width=i.readUint(a,b),b+=4,c.height=i.readUint(a,b),b+=4,c.depth=a[b],b++,c.ctype=a[b],b++,c.compress=a[b],b++,c.filter=a[b],b++,c.interlace=a[b],b++}function h(a,b,c,d,e,f,g,h,i){for(var j=Math.min(b,e),k=Math.min(c,f),l=0,m=0,n=0;k>n;n++)for(var o=0;j>o;o++)if(g>=0&&h>=0?(l=n*b+o<<2,m=(h+n)*e+g+o<<2):(l=(-h+n)*b-g+o<<2,m=n*e+o<<2),0==i)d[m]=a[l],d[m+1]=a[l+1],d[m+2]=a[l+2],d[m+3]=a[l+3];else if(1==i){var p=a[l+3]*(1/255),q=a[l]*p,r=a[l+1]*p,s=a[l+2]*p,t=d[m+3]*(1/255),u=d[m]*t,v=d[m+1]*t,w=d[m+2]*t,x=1-p,y=p+t*x,z=0==y?0:1/y;d[m+3]=255*y,d[m+0]=(q+u*x)*z,d[m+1]=(r+v*x)*z,d[m+2]=(s+w*x)*z}else if(2==i)p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w?(d[m]=0,d[m+1]=0,d[m+2]=0,d[m+3]=0):(d[m]=q,d[m+1]=r,d[m+2]=s,d[m+3]=p);else if(3==i){if(p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w)continue;if(220>p&&t>20)return!1}return!0}var i={nextZero:function(a,b){for(;0!=a[b];)b++;return b},readUshort:function(a,b){return a[b]<<8|a[b+1]},writeUshort:function(a,b,c){a[b]=255&c>>8,a[b+1]=255&c},readUint:function(a,b){return 16777216*a[b]+(a[b+1]<<16|a[b+2]<<8|a[b+3])},writeUint:function(a,b,c){a[b]=255&c>>24,a[b+1]=255&c>>16,a[b+2]=255&c>>8,a[b+3]=255&c},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},readBytes:function(a,b,c){for(var d=[],e=0;c>e;e++)d.push(a[b+e]);return d},pad:function(a){return a.length<2?\"0\".concat(a):a},readUTF8:function(a,b,c){for(var d,e=\"\",f=0;c>f;f++)e+=\"%\".concat(i.pad(a[b+f].toString(16)));try{d=decodeURIComponent(e)}catch(d){return i.readASCII(a,b,c)}return d}},j=function(){var a={H:{}};return a.H.N=function(b,c){var d,e,f=Uint8Array,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(3==b[0]&&0==b[1])return c||new f(0);var p=a.H,q=p.b,r=p.e,s=p.R,t=p.n,u=p.A,v=p.Z,w=p.m,x=null==c;for(x&&(c=new f(b.length>>>2<<5));0==g;)if(g=q(b,o,1),h=q(b,o+1,2),o+=3,0!=h){if(x&&(c=a.H.W(c,n+(1<<17))),1==h&&(d=w.J,e=w.h,l=511,m=31),2==h){i=r(b,o,5)+257,j=r(b,o+5,5)+1,k=r(b,o+10,4)+4,o+=14;for(var y=1,z=0;38>z;z+=2)w.Q[z]=0,w.Q[z+1]=0;for(z=0;k>z;z++){var A=r(b,o+3*z,3);w.Q[1+(w.X[z]<<1)]=A,A>y&&(y=A)}o+=3*k,t(w.Q,y),u(w.Q,y,w.u),d=w.w,e=w.d,o=s(w.u,(1<<y)-1,i+j,b,o,w.v);var B=p.V(w.v,0,i,w.C);l=(1<<B)-1;var C=p.V(w.v,i,j,w.D);m=(1<<C)-1,t(w.C,B),u(w.C,B,d),t(w.D,C),u(w.D,C,e)}for(;;){var D=d[v(b,o)&l];o+=15&D;var E=D>>>4;if(0==E>>>8)c[n++]=E;else{if(256==E)break;var F=n+E-254;if(E>264){var G=w.q[E-257];F=n+(G>>>3)+r(b,o,7&G),o+=7&G}var H=e[v(b,o)&m];o+=15&H;var I=H>>>4,J=w.c[I],K=(J>>>4)+q(b,o,15&J);for(o+=15&J;F>n;)c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K];n=F}}}else{0!=(7&o)&&(o+=8-(7&o));var L=4+(o>>>3),M=b[L-4]|b[L-3]<<8;x&&(c=a.H.W(c,n+M)),c.set(new f(b.buffer,b.byteOffset+L,M),n),o=L+M<<3,n+=M}return c.length==n?c:c.slice(0,n)},a.H.W=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(c<<1);return d.set(a,0),d},a.H.R=function(b,c,d,e,f,g){for(var h=a.H.e,i=a.H.Z,j=0;d>j;){var k=b[i(e,f)&c];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},a.H.V=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},a.H.n=function(b,c){for(var d,e,f,g,h=a.H.m,i=b.length,j=h.j,k=0;c>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[b[k]]++;var l=h.K;for(d=0,j[0]=0,e=1;c>=e;e++)d=d+j[e-1]<<1,l[e]=d;for(f=0;i>f;f+=2)g=b[f+1],0!=g&&(b[f]=l[g],l[g]++)},a.H.A=function(b,c,d){for(var e=b.length,f=a.H.m.r,g=0;e>g;g+=2)if(0!=b[g+1])for(var h=g>>1,i=b[g+1],j=h<<4|i,k=c-i,l=b[g]<<k,m=l+(1<<k);l!=m;)d[f[l]>>>15-c]=j,l++},a.H.l=function(b,c){for(var d=a.H.m.r,e=15-c,f=0;f<b.length;f+=2){var g=b[f]<<c-b[f+1];b[f]=d[g]>>>e}},a.H.M=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},a.H.I=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},a.H.e=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},a.H.b=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},a.H.Z=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},a.H.i=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},a.H.m=function(){var a=Uint16Array,b=Uint32Array;return{K:new a(16),j:new a(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new a(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new b(32),J:new a(512),_:[],h:new a(32),$:[],w:new a(32768),C:[],v:[],d:new a(32768),D:[],u:new a(512),Q:[],r:new a(32768),s:new b(286),Y:new b(30),a:new b(19),t:new b(15e3),k:new a(65536),g:new a(32768)}}(),function(){function b(a,b,c){for(;0!=b--;)a.push(0,c)}for(var c=a.H.m,d=0;32768>d;d++){var e=d;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,c.r[d]=(e>>>16|e<<16)>>>17}for(d=0;32>d;d++)c.q[d]=c.S[d]<<3|c.T[d],c.c[d]=c.p[d]<<4|c.z[d];b(c._,144,8),b(c._,112,9),b(c._,24,7),b(c._,8,8),a.H.n(c._,9),a.H.A(c._,9,c.J),a.H.l(c._,9),b(c.$,32,5),a.H.n(c.$,5),a.H.A(c.$,5,c.h),a.H.l(c.$,5),b(c.Q,19,0),b(c.C,286,0),b(c.D,30,0),b(c.v,320,0)}(),a.H.N}();return{decode:function(a){for(var d,e=new Uint8Array(a),f=8,h=w,i=h.readUshort,k=h.readUint,l={tabs:{},frames:[]},m=new Uint8Array(e.length),n=0,o=0,p=[137,80,78,71,13,10,26,10],q=0;8>q;q++)if(e[q]!=p[q])throw\"The input is not a PNG file!\";for(;f<e.length;){var r=h.readUint(e,f);f+=4;var s=h.readASCII(e,f,4);if(f+=4,\"IHDR\"==s)g(e,f,l);else if(\"iCCP\"==s){for(var t=f;0!=e[t];)t++;h.readASCII(e,f,t-f),e[t+1];var u=e.slice(t+2,f+r),v=null;try{v=c(u)}catch(w){v=j(u)}l.tabs[s]=v}else if(\"CgBI\"==s)l.tabs[s]=e.slice(f,f+4);else if(\"IDAT\"==s){for(q=0;r>q;q++)m[n+q]=e[f+q];n+=r}else if(\"acTL\"==s)l.tabs[s]={num_frames:k(e,f),num_plays:k(e,f+4)},d=new Uint8Array(e.length);else if(\"fcTL\"==s){0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height),o=0);var x={x:k(e,f+12),y:k(e,f+16),width:k(e,f+4),height:k(e,f+8)},y=i(e,f+22);y=i(e,f+20)/(0==y?100:y);var z={rect:x,delay:Math.round(1e3*y),dispose:e[f+24],blend:e[f+25]};l.frames.push(z)}else if(\"fdAT\"==s){for(q=0;r-4>q;q++)d[o+q]=e[f+q+4];o+=r-4}else if(\"pHYs\"==s)l.tabs[s]=[h.readUint(e,f),h.readUint(e,f+4),e[f+8]];else if(\"cHRM\"==s)for(l.tabs[s]=[],q=0;8>q;q++)l.tabs[s].push(h.readUint(e,f+4*q));else if(\"tEXt\"==s||\"zTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={});var A=h.nextZero(e,f),B=h.readASCII(e,f,A-f),C=f+r-A-1;if(\"tEXt\"==s)E=h.readASCII(e,A+1,C);else{var D=c(e.slice(A+2,A+2+C));E=h.readUTF8(D,0,D.length)}l.tabs[s][B]=E}else if(\"iTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={}),A=0,t=f,A=h.nextZero(e,t),B=h.readASCII(e,t,A-t);var E,F=e[t=A+1];e[t+1],t+=2,A=h.nextZero(e,t),h.readASCII(e,t,A-t),t=A+1,A=h.nextZero(e,t),h.readUTF8(e,t,A-t),C=r-((t=A+1)-f),0==F?E=h.readUTF8(e,t,C):(D=c(e.slice(t,t+C)),E=h.readUTF8(D,0,D.length)),l.tabs[s][B]=E}else if(\"PLTE\"==s)l.tabs[s]=h.readBytes(e,f,r);else if(\"hIST\"==s){var G=l.tabs.PLTE.length/3;for(l.tabs[s]=[],q=0;G>q;q++)l.tabs[s].push(i(e,f+2*q))}else if(\"tRNS\"==s)3==l.ctype?l.tabs[s]=h.readBytes(e,f,r):0==l.ctype?l.tabs[s]=i(e,f):2==l.ctype&&(l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]);else if(\"gAMA\"==s)l.tabs[s]=h.readUint(e,f)/1e5;else if(\"sRGB\"==s)l.tabs[s]=e[f];else if(\"bKGD\"==s)0==l.ctype||4==l.ctype?l.tabs[s]=[i(e,f)]:2==l.ctype||6==l.ctype?l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]:3==l.ctype&&(l.tabs[s]=e[f]);else if(\"IEND\"==s)break;f+=r,h.readUint(e,f),f+=4}var H;return 0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height)),l.data=b(l,m,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function(b){var c=b.width,d=b.height;if(null==b.tabs.acTL)return[a(b.data,c,d,b).buffer];var e=[];null==b.frames[0].data&&(b.frames[0].data=b.data);for(var f=4*c*d,g=new Uint8Array(f),i=new Uint8Array(f),j=new Uint8Array(f),k=0;k<b.frames.length;k++){var l=b.frames[k],m=l.rect.x,n=l.rect.y,o=l.rect.width,p=l.rect.height,q=a(l.data,o,p,b);if(0!=k)for(var r=0;f>r;r++)j[r]=g[r];if(0==l.blend?h(q,o,p,g,c,d,m,n,0):1==l.blend&&h(q,o,p,g,c,d,m,n,1),e.push(g.buffer.slice(0)),0==l.dispose);else if(1==l.dispose)h(i,o,p,g,c,d,m,n,0);else if(2==l.dispose)for(r=0;f>r;r++)g[r]=j[r]}return e},_paeth:f,_copyTile:h,_bin:i}}();!function(){function a(a,b,c,d){b[c]+=a[0]*d>>4,b[c+1]+=a[1]*d>>4,b[c+2]+=a[2]*d>>4,b[c+3]+=a[3]*d>>4}function b(a){return Math.max(0,Math.min(255,a))}function c(a,b){var c=a[0]-b[0],d=a[1]-b[1],e=a[2]-b[2],f=a[3]-b[3];return c*c+d*d+e*e+f*f}function d(d,e,f,g,h,i,j){null==j&&(j=1);for(var k=g.length,l=[],m=0;k>m;m++){var n=g[m];l.push([255&n>>>0,255&n>>>8,255&n>>>16,255&n>>>24])}for(m=0;k>m;m++)for(var o=4294967295,p=0,q=0;k>q;q++){var r=c(l[m],l[q]);q!=m&&o>r&&(o=r,p=q)}var s=new Uint32Array(h.buffer),t=new Int16Array(4*e*f),u=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(m=0;m<u.length;m++)u[m]=255*((u[m]+.5)/16-.5);for(var v=0;f>v;v++)for(var w=0;e>w;w++){var x;m=4*(v*e+w),2!=j?x=[b(d[m]+t[m]),b(d[m+1]+t[m+1]),b(d[m+2]+t[m+2]),b(d[m+3]+t[m+3])]:(r=u[4*(3&v)+(3&w)],x=[b(d[m]+r),b(d[m+1]+r),b(d[m+2]+r),b(d[m+3]+r)]),p=0;var y=16777215;for(q=0;k>q;q++){var z=c(x,l[q]);y>z&&(y=z,p=q)}var A=l[p],B=[x[0]-A[0],x[1]-A[1],x[2]-A[2],x[3]-A[3]];1==j&&(w!=e-1&&a(B,t,m+4,7),v!=f-1&&(0!=w&&a(B,t,m+4*e-4,3),a(B,t,m+4*e,5),w!=e-1&&a(B,t,m+4*e+4,1))),i[m>>2]=p,s[m>>2]=g[p]}}function e(a,b,c,d,e){null==e&&(e={});var f,g=w.crc,h=u.writeUint,i=u.writeUshort,j=u.writeASCII,k=8,l=a.frames.length>1,m=!1,n=33+(l?20:0);if(null!=e.sRGB&&(n+=13),null!=e.pHYs&&(n+=21),null!=e.iCCP&&(f=pako.deflate(e.iCCP),n+=21+f.length+4),3==a.ctype){for(var o=a.plte.length,p=0;o>p;p++)255!=a.plte[p]>>>24&&(m=!0);n+=8+3*o+4+(m?8+1*o+4:0)}for(var q=0;q<a.frames.length;q++)l&&(n+=38),n+=(C=a.frames[q]).cimg.length+12,0!=q&&(n+=4);n+=12;var r=new Uint8Array(n),s=[137,80,78,71,13,10,26,10];for(p=0;8>p;p++)r[p]=s[p];if(h(r,k,13),k+=4,j(r,k,\"IHDR\"),k+=4,h(r,k,b),k+=4,h(r,k,c),k+=4,r[k]=a.depth,k++,r[k]=a.ctype,k++,r[k]=0,k++,r[k]=0,k++,r[k]=0,k++,h(r,k,g(r,k-17,17)),k+=4,null!=e.sRGB&&(h(r,k,1),k+=4,j(r,k,\"sRGB\"),k+=4,r[k]=e.sRGB,k++,h(r,k,g(r,k-5,5)),k+=4),null!=e.iCCP){var t=13+f.length;h(r,k,t),k+=4,j(r,k,\"iCCP\"),k+=4,j(r,k,\"ICC profile\"),k+=11,k+=2,r.set(f,k),k+=f.length,h(r,k,g(r,k-(t+4),t+4)),k+=4}if(null!=e.pHYs&&(h(r,k,9),k+=4,j(r,k,\"pHYs\"),k+=4,h(r,k,e.pHYs[0]),k+=4,h(r,k,e.pHYs[1]),k+=4,r[k]=e.pHYs[2],k++,h(r,k,g(r,k-13,13)),k+=4),l&&(h(r,k,8),k+=4,j(r,k,\"acTL\"),k+=4,h(r,k,a.frames.length),k+=4,h(r,k,null!=e.loop?e.loop:0),k+=4,h(r,k,g(r,k-12,12)),k+=4),3==a.ctype){for(h(r,k,3*(o=a.plte.length)),k+=4,j(r,k,\"PLTE\"),k+=4,p=0;o>p;p++){var v=3*p,x=a.plte[p],y=255&x,z=255&x>>>8,A=255&x>>>16;r[k+v+0]=y,r[k+v+1]=z,r[k+v+2]=A}if(k+=3*o,h(r,k,g(r,k-3*o-4,3*o+4)),k+=4,m){for(h(r,k,o),k+=4,j(r,k,\"tRNS\"),k+=4,p=0;o>p;p++)r[k+p]=255&a.plte[p]>>>24;k+=o,h(r,k,g(r,k-o-4,o+4)),k+=4}}var B=0;for(q=0;q<a.frames.length;q++){var C=a.frames[q];l&&(h(r,k,26),k+=4,j(r,k,\"fcTL\"),k+=4,h(r,k,B++),k+=4,h(r,k,C.rect.width),k+=4,h(r,k,C.rect.height),k+=4,h(r,k,C.rect.x),k+=4,h(r,k,C.rect.y),k+=4,i(r,k,d[q]),k+=2,i(r,k,1e3),k+=2,r[k]=C.dispose,k++,r[k]=C.blend,k++,h(r,k,g(r,k-30,30)),k+=4);var D=C.cimg;h(r,k,(o=D.length)+(0==q?0:4)),k+=4;var E=k;j(r,k,0==q?\"IDAT\":\"fdAT\"),k+=4,0!=q&&(h(r,k,B++),k+=4),r.set(D,k),k+=o,h(r,k,g(r,E,k-E)),k+=4}return h(r,k,0),k+=4,j(r,k,\"IEND\"),k+=4,h(r,k,g(r,k-4,4)),k+=4,r.buffer}function f(a,b,c){for(var d=0;d<a.frames.length;d++){var e=a.frames[d];e.rect.width;var f=e.rect.height,g=new Uint8Array(f*e.bpl+f);e.cimg=j(e.img,f,e.bpp,e.bpl,g,b,c)}}function g(a,b,c,e,f){for(var g=f[0],j=f[1],k=f[2],m=f[3],n=f[4],o=f[5],p=6,q=8,r=255,s=0;s<a.length;s++)for(var u=new Uint8Array(a[s]),v=u.length,w=0;v>w;w+=4)r&=u[w+3];var x=255!=r,y=function(a,b,c,d,e,f){for(var g=[],j=0;j<a.length;j++){var k,l=new Uint8Array(a[j]),m=new Uint32Array(l.buffer),n=0,o=0,p=b,q=c,r=d?1:0;if(0!=j){for(var s=f||d||1==j||0!=g[j-2].dispose?1:2,u=0,v=1e9,w=0;s>w;w++){for(var x=new Uint8Array(a[j-1-w]),y=new Uint32Array(a[j-1-w]),z=b,A=c,B=-1,C=-1,D=0;c>D;D++)for(var E=0;b>E;E++)m[M=D*b+E]!=y[M]&&(z>E&&(z=E),E>B&&(B=E),A>D&&(A=D),D>C&&(C=D));-1==B&&(z=A=B=C=0),e&&(1==(1&z)&&z--,1==(1&A)&&A--);var F=(B-z+1)*(C-A+1);v>F&&(v=F,u=w,n=z,o=A,p=B-z+1,q=C-A+1)}x=new Uint8Array(a[j-1-u]),1==u&&(g[j-1].dispose=2),k=new Uint8Array(4*p*q),t(x,b,c,k,p,q,-n,-o,0),r=t(l,b,c,k,p,q,-n,-o,3)?1:0,1==r?i(l,b,c,k,{x:n,y:o,width:p,height:q}):t(l,b,c,k,p,q,-n,-o,0)}else k=l.slice(0);g.push({rect:{x:n,y:o,width:p,height:q},img:k,blend:r,dispose:0})}if(d)for(j=0;j<g.length;j++)if(1!=(N=g[j]).blend){var G=N.rect,H=g[j-1].rect,I=Math.min(G.x,H.x),J=Math.min(G.y,H.y),K={x:I,y:J,width:Math.max(G.x+G.width,H.x+H.width)-I,height:Math.max(G.y+G.height,H.y+H.height)-J};g[j-1].dispose=1,0!=j-1&&h(a,b,c,g,j-1,K,e),h(a,b,c,g,j,K,e)}var L=0;if(1!=a.length)for(var M=0;M<g.length;M++){var N;L+=(N=g[M]).rect.width*N.rect.height}return g}(a,b,c,g,j,k),z={},A=[],B=[];if(0!=e){var C=[];for(w=0;w<y.length;w++)C.push(y[w].img.buffer);var D=function(a){for(var b=0,c=0;c<a.length;c++)b+=a[c].byteLength;var d=new Uint8Array(b),e=0;for(c=0;c<a.length;c++){for(var f=new Uint8Array(a[c]),g=f.length,h=0;g>h;h+=4){var i=f[h],j=f[h+1],k=f[h+2],l=f[h+3];0==l&&(i=j=k=0),d[e+h]=i,d[e+h+1]=j,d[e+h+2]=k,d[e+h+3]=l}e+=g}return d.buffer}(C),E=l(D,e);for(w=0;w<E.plte.length;w++)A.push(E.plte[w].est.rgba);var F=0;for(w=0;w<y.length;w++){var G=(J=y[w]).img.length,H=new Uint8Array(E.inds.buffer,F>>2,G>>2);B.push(H);var I=new Uint8Array(E.abuf,F,G);o&&d(J.img,J.rect.width,J.rect.height,A,I,H),J.img.set(I),F+=G}}else for(s=0;s<y.length;s++){var J=y[s],K=new Uint32Array(J.img.buffer),L=J.rect.width;for(v=K.length,H=new Uint8Array(v),B.push(H),w=0;v>w;w++){var M=K[w];if(0!=w&&M==K[w-1])H[w]=H[w-1];else if(w>L&&M==K[w-L])H[w]=H[w-L];else{var N=z[M];if(null==N&&(z[M]=N=A.length,A.push(M),A.length>=300))break;H[w]=N}}}var O=A.length;for(256>=O&&0==n&&(q=2>=O?1:4>=O?2:16>=O?4:8,q=Math.max(q,m)),s=0;s<y.length;s++){(J=y[s]).rect.x,J.rect.y,L=J.rect.width;var P=J.rect.height,Q=J.img;new Uint32Array(Q.buffer);var R=4*L,S=4;if(256>=O&&0==n){R=Math.ceil(q*L/8);for(var T=new Uint8Array(R*P),U=B[s],V=0;P>V;V++){w=V*R;var W=V*L;if(8==q)for(var X=0;L>X;X++)T[w+X]=U[W+X];else if(4==q)for(X=0;L>X;X++)T[w+(X>>1)]|=U[W+X]<<4-4*(1&X);else if(2==q)for(X=0;L>X;X++)T[w+(X>>2)]|=U[W+X]<<6-2*(3&X);else if(1==q)for(X=0;L>X;X++)T[w+(X>>3)]|=U[W+X]<<7-1*(7&X)}Q=T,p=3,S=1}else if(0==x&&1==y.length){T=new Uint8Array(3*L*P);var Y=L*P;for(w=0;Y>w;w++){var Z=3*w,$=4*w;T[Z]=Q[$],T[Z+1]=Q[$+1],T[Z+2]=Q[$+2]}Q=T,p=2,S=3,R=3*L}J.img=Q,J.bpl=R,J.bpp=S}return{ctype:p,depth:q,plte:A,frames:y}}function h(a,b,c,d,e,f,g){for(var h=Uint8Array,j=Uint32Array,k=new h(a[e-1]),l=new j(a[e-1]),m=e+1<a.length?new h(a[e+1]):null,n=new h(a[e]),o=new j(n.buffer),p=b,q=c,r=-1,s=-1,u=0;u<f.height;u++)for(var v=0;v<f.width;v++){var w=f.x+v,x=f.y+u,y=x*b+w,z=o[y];0==z||0==d[e-1].dispose&&l[y]==z&&(null==m||0!=m[4*y+3])||(p>w&&(p=w),w>r&&(r=w),q>x&&(q=x),x>s&&(s=x))}-1==r&&(p=q=r=s=0),g&&(1==(1&p)&&p--,1==(1&q)&&q--),f={x:p,y:q,width:r-p+1,height:s-q+1};var A=d[e];A.rect=f,A.blend=1,A.img=new Uint8Array(4*f.width*f.height),0==d[e-1].dispose?(t(k,b,c,A.img,f.width,f.height,-f.x,-f.y,0),i(n,b,c,A.img,f)):t(n,b,c,A.img,f.width,f.height,-f.x,-f.y,0)}function i(a,b,c,d,e){t(a,b,c,d,e.width,e.height,-e.x,-e.y,2)}function j(a,b,c,d,e,f,g){var h,i=[],j=[0,1,2,3,4];-1!=f?j=[f]:(b*d>5e5||1==c)&&(j=[0]),g&&(h={level:0});for(var l=B,m=0;m<j.length;m++){for(var n=0;b>n;n++)k(e,a,n,d,c,j[m]);i.push(l.deflate(e,h))}var o,p=1e9;for(m=0;m<i.length;m++)i[m].length<p&&(o=m,p=i[m].length);return i[o]}function k(a,b,c,d,e,f){var g=c*d,h=g+c;if(a[h]=f,h++,0==f)if(500>d)for(var i=0;d>i;i++)a[h+i]=b[g+i];else a.set(new Uint8Array(b.buffer,g,d),h);else if(1==f){for(i=0;e>i;i++)a[h+i]=b[g+i];for(i=e;d>i;i++)a[h+i]=255&b[g+i]-b[g+i-e]+256}else if(0==c){for(i=0;e>i;i++)a[h+i]=b[g+i];if(2==f)for(i=e;d>i;i++)a[h+i]=b[g+i];if(3==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-(b[g+i-e]>>1)+256;if(4==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-v(b[g+i-e],0,0)+256}else{if(2==f)for(i=0;d>i;i++)a[h+i]=255&b[g+i]+256-b[g+i-d];if(3==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]>>1);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]+b[g+i-e]>>1)}if(4==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-v(0,b[g+i-d],0);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-v(b[g+i-e],b[g+i-d],b[g+i-e-d])}}}function l(a,b){var c,d=new Uint8Array(a),e=d.slice(0),f=new Uint32Array(e.buffer),g=m(e,b),h=g[0],i=g[1],j=d.length,k=new Uint8Array(j>>2);if(d.length<2e7)for(var l=0;j>l;l+=4)c=n(h,p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255)),k[l>>2]=c.ind,f[l>>2]=c.est.rgba;else for(l=0;j>l;l+=4){var p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255);for(c=h;c.left;)c=o(c.est,p,q,r,s)<=0?c.left:c.right;k[l>>2]=c.ind,f[l>>2]=c.est.rgba}return{abuf:e.buffer,inds:k,plte:i}}function m(a,b,c){null==c&&(c=1e-4);var d=new Uint32Array(a.buffer),e={i0:0,i1:a.length,bst:null,est:null,tdst:0,left:null,right:null};e.bst=r(a,e.i0,e.i1),e.est=s(e.bst);for(var f=[e];f.length<b;){for(var g=0,h=0,i=0;i<f.length;i++)f[i].est.L>g&&(g=f[i].est.L,h=i);if(c>g)break;\nvar j=f[h],k=p(a,d,j.i0,j.i1,j.est.e,j.est.eMq255);if(j.i0>=k||j.i1<=k)j.est.L=0;else{var l={i0:j.i0,i1:k,bst:null,est:null,tdst:0,left:null,right:null};l.bst=r(a,l.i0,l.i1),l.est=s(l.bst);var m={i0:k,i1:j.i1,bst:null,est:null,tdst:0,left:null,right:null};for(m.bst={R:[],m:[],N:j.bst.N-l.bst.N},i=0;16>i;i++)m.bst.R[i]=j.bst.R[i]-l.bst.R[i];for(i=0;4>i;i++)m.bst.m[i]=j.bst.m[i]-l.bst.m[i];m.est=s(m.bst),j.left=l,j.right=m,f[h]=l,f.push(m)}}for(f.sort(function(a,b){return b.bst.N-a.bst.N}),i=0;i<f.length;i++)f[i].ind=i;return[e,f]}function n(a,b,c,d,e){if(null==a.left)return a.tdst=function(a,b,c,d,e){var f=b-a[0],g=c-a[1],h=d-a[2],i=e-a[3];return f*f+g*g+h*h+i*i}(a.est.q,b,c,d,e),a;var f=o(a.est,b,c,d,e),g=a.left,h=a.right;f>0&&(g=a.right,h=a.left);var i=n(g,b,c,d,e);if(i.tdst<=f*f)return i;var j=n(h,b,c,d,e);return j.tdst<i.tdst?j:i}function o(a,b,c,d,e){var f=a.e;return f[0]*b+f[1]*c+f[2]*d+f[3]*e-a.eMq}function p(a,b,c,d,e,f){for(d-=4;d>c;){for(;q(a,c,e)<=f;)c+=4;for(;q(a,d,e)>f;)d-=4;if(c>=d)break;var g=b[c>>2];b[c>>2]=b[d>>2],b[d>>2]=g,c+=4,d-=4}for(;q(a,c,e)>f;)c-=4;return c+4}function q(a,b,c){return a[b]*c[0]+a[b+1]*c[1]+a[b+2]*c[2]+a[b+3]*c[3]}function r(a,b,c){for(var d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e=[0,0,0,0],f=c-b>>2,g=b;c>g;g+=4){var h=a[g]*(1/255),i=a[g+1]*(1/255),j=a[g+2]*(1/255),k=a[g+3]*(1/255);e[0]+=h,e[1]+=i,e[2]+=j,e[3]+=k,d[0]+=h*h,d[1]+=h*i,d[2]+=h*j,d[3]+=h*k,d[5]+=i*i,d[6]+=i*j,d[7]+=i*k,d[10]+=j*j,d[11]+=j*k,d[15]+=k*k}return d[4]=d[1],d[8]=d[2],d[9]=d[6],d[12]=d[3],d[13]=d[7],d[14]=d[11],{R:d,m:e,N:f}}function s(a){var b=a.R,c=a.m,d=a.N,e=c[0],f=c[1],g=c[2],h=c[3],i=0==d?0:1/d,j=[b[0]-e*e*i,b[1]-e*f*i,b[2]-e*g*i,b[3]-e*h*i,b[4]-f*e*i,b[5]-f*f*i,b[6]-f*g*i,b[7]-f*h*i,b[8]-g*e*i,b[9]-g*f*i,b[10]-g*g*i,b[11]-g*h*i,b[12]-h*e*i,b[13]-h*f*i,b[14]-h*g*i,b[15]-h*h*i],k=j,l=x,m=[Math.random(),Math.random(),Math.random(),Math.random()],n=0,o=0;if(0!=d)for(var p=0;16>p&&(m=l.multVec(k,m),o=Math.sqrt(l.dot(m,m)),m=l.sml(1/o,m),!(0!=p&&Math.abs(o-n)<1e-9));p++)n=o;var q=[e*i,f*i,g*i,h*i];return{Cov:j,q:q,e:m,L:n,eMq255:l.dot(l.sml(255,q),m),eMq:l.dot(m,q),rgba:(Math.round(255*q[3])<<24|Math.round(255*q[2])<<16|Math.round(255*q[1])<<8|Math.round(255*q[0])<<0)>>>0}}var t=C._copyTile,u=C._bin,v=C._paeth,w={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,d){for(var e=0;d>e;e++)a=w.table[255&(a^b[c+e])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^w.update(4294967295,a,b,c)}},x={multVec:function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],a[4]*b[0]+a[5]*b[1]+a[6]*b[2]+a[7]*b[3],a[8]*b[0]+a[9]*b[1]+a[10]*b[2]+a[11]*b[3],a[12]*b[0]+a[13]*b[1]+a[14]*b[2]+a[15]*b[3]]},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]},sml:function(a,b){return[a*b[0],a*b[1],a*b[2],a*b[3]]}};C.encode=function(a,b,c,d,h,i,j){null==d&&(d=0),null==j&&(j=!1);var k=g(a,b,c,d,[!1,!1,!1,0,j,!1]);return f(k,-1),e(k,b,c,h,i)},C.encodeLL=function(a,b,c,d,g,h,i,j){for(var k={ctype:0+(1==d?0:2)+(0==g?0:4),depth:h,frames:[]},l=(d+g)*h,m=l*b,n=0;n<a.length;n++)k.frames.push({rect:{x:0,y:0,width:b,height:c},img:new Uint8Array(a[n]),blend:0,dispose:1,bpp:Math.ceil(l/8),bpl:Math.ceil(m/8)});return f(k,0,!0),e(k,b,c,i,j)},C.encode.compress=g,C.encode.dither=d,C.quantize=l,C.quantize.getKDtree=m,C.quantize.getNearest=n}();var D,E={toArrayBuffer:function(a,b){function c(a){s.setUint16(w,a,!0),w+=2}function d(a){s.setUint32(w,a,!0),w+=4}function e(a){w+=a}var f,g,h,i,j=a.width,k=a.height,l=j<<2,m=a.getContext(\"2d\").getImageData(0,0,j,k),n=new Uint32Array(m.data.buffer),o=(32*j+31)/32<<2,p=o*k,q=122+p,r=new ArrayBuffer(q),s=new DataView(r),t=1<<20,u=t,v=0,w=0,x=0;c(19778),d(q),e(4),d(122),d(108),d(j),d(-k>>>0),c(1),c(32),d(3),d(p),d(2835),d(2835),e(8),d(16711680),d(65280),d(255),d(4278190080),d(1466527264),function y(){for(;k>v&&u>0;){for(i=122+v*o,f=0;l>f;)u--,g=n[x++],h=g>>>24,s.setUint32(i+f,g<<8|h),f+=4;v++}x<n.length?(u=t,setTimeout(y,E._dly)):b(r)}()},toBlob:function(a,b){this.toArrayBuffer(a,function(a){b(new c([a],{type:\"image/bmp\"}))})},_dly:9},F={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},G=(x={},x[F.CHROME]=16384,x[F.FIREFOX]=11180,x[F.DESKTOP_SAFARI]=16384,x[F.IE]=8192,x[F.IOS]=4096,x[F.ETC]=8192,x),H=\"undefined\"!=typeof a,I=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,J=H&&a.cordova&&a.cordova.require&&a.cordova.require(\"cordova/modulemapper\"),K=(H||I)&&(J&&J.getOriginalSymbol(a,\"File\")||\"undefined\"!=typeof File&&File),L=(H||I)&&(J&&J.getOriginalSymbol(a,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader),M=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";return w.getDataUrlFromFile=g,w.getFilefromDataUrl=f,w.loadImage=h,w.drawImageInCanvas=l,w.drawFileInCanvas=n,w.canvasToFile=o,w.getExifOrientation=r,w.handleMaxWidthOrHeight=s,w.followExifOrientation=t,w.cleanupCanvasMemory=p,w.isAutoOrientationInBrowser=q,w.approximateBelowMaximumCanvasSizeOfBrowser=j,w.copyExifWithoutOrientation=e,w.getBrowserName=i,w.version=\"2.0.2\",w}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"lib/browser-image-compression\",\"widgets/widget\"],function(a,b,c,d){var e,f=a.$;return e=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),f.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{enable:!1,maxWidthOrHeight:4e3,maxSize:10485760}}),b.register({name:\"image\",makeThumb:function(a,b,d,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=f.extend({},this.options.thumb),f.isPlainObject(d)&&(h=f.extend(h,d),d=null),d=d||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=d&&d>0&&(d=a._info.width*d),1>=g&&g>0&&(g=a._info.height*g),i.resize(d,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void e(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var c,e=this.options.compress;if(b=this.request(\"get-file\",b),!b._widgetImageData){var g={processed:!1,success:!1,originalSize:b.size};return e&&e.enable&&~\"image/jpeg,image/jpg,image/png\".indexOf(b.type)?(e=f.extend({},e),c=a.Deferred(),d(b.source.source,{maxSizeMB:e.maxSize/1024/1024,maxWidthOrHeight:e.maxWidthOrHeight}).then(function(a){e.debug&&console.log(\"webuploader.compress\",(100*(a.size/b.size)).toFixed(2)+\"%\");var d=b.size;b.source.source=a,b.source.size=a.size,b.size=a.size,b.trigger(\"resize\",a.size,d),g.processed=!0,g.success=!0,b._widgetImageData=g,c.resolve()})[\"catch\"](function(a){console.error(\"webuploader.compress.error\",a),g.processed=!0,b._widgetImageData=g,c.resolve()}),c.promise()):void(b._widgetImageData=g)}}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numOfDeleted:0,numOfInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],this._delFile(a),a.destroy(),this.stats.numOfDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)})),a.setStatus(f.QUEUED)},_delFile:function(a){for(var b=this._queue.length-1;b>=0;b--)if(this._queue[b]==a){this._queue.splice(b,1);break}},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numOfInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numOfInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),a.length&&(b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20))},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponseHeaders:function(){return this.exec(\"getResponseHeaders\")},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,chunkRetryDelay:1e3,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b?(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT?(b.setStatus(h.QUEUED),f.each(c.pool,function(a,c){c.file===b&&(c.transport&&c.transport.send(),b.setStatus(h.PROGRESS))})):b.getStatus()!==h.PROGRESS&&b.setStatus(h.QUEUED)):f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)}),c.runing)return c.owner.trigger(\"startUpload\",b),a.nextTick(c.__tick);c.runing=!0;var d=[];b||f.each(c.pool,function(a,b){var e=b.file;if(e.getStatus()===h.INTERRUPT){if(c._trigged=!1,d.push(e),b.waiting)return;b.transport?b.transport.send():c._doSend(b)}}),f.each(d,function(){this.setStatus(h.PROGRESS)}),b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,e){e.file===b&&(e.transport&&e.transport.abort(),c&&(d._putback(e),d._popBlock(e)))}),d.owner.trigger(\"stopUpload\",b),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numOfInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||(this.remaning++,a.file.remaning++,this.stack.unshift(a.cuted))},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),b.waiting=c=d.request(\"before-send\",b,function(){delete b.waiting,e.getStatus()===h.PROGRESS?d._doSend(b):b.file.getStatus()!==h.INTERRUPT&&d._popBlock(b),a.nextTick(d.__tick)}),void c.fail(function(){delete b.waiting,1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=f.extend({},g.options,b.options),k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),e._headers=l.getResponseHeaders(),b.response=e,c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){var e,f,m=a.split(\"|\");a=m[0],e=parseFloat(m[1]),f=m[2],b.retried=b.retried||0,b.chunks>1&&~\"http,abort,server\".indexOf(a.replace(/-.*/,\"\"))&&b.retried<j.chunkRetry?(b.retried++,g.retryTimer=setTimeout(function(){l.send()},j.chunkRetryDelay||1e3)):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a,e,f),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))},destroy:function(){clearTimeout(this.retryTimer)}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return!!this.trigger(\"beforeFileQueuedCheckfileNumLimit\",a,c)&&(c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!(c>=d))}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!b}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"lib/md5\",[\"runtime/client\",\"mediator\"],function(a,b){function c(){a.call(this,\"Md5\")}return b.installTo(c.prototype),c.prototype.loadFromBlob=function(a){var b=this;b.getRuid()&&b.disconnectRuntime(),b.connectRuntime(a.ruid,function(){b.exec(\"init\"),b.exec(\"loadFromBlob\",a)})},c.prototype.getResult=function(){return this.exec(\"getResult\")},c}),b(\"widgets/md5\",[\"base\",\"uploader\",\"lib/md5\",\"lib/blob\",\"widgets/widget\"],function(a,b,c,d){return b.register({name:\"md5\",md5File:function(b,e,f){var g=new c,h=a.Deferred(),i=b instanceof d?b:this.request(\"get-file\",b).source;return g.on(\"progress load\",function(a){a=a||{},h.notify(a.total?a.loaded/a.total:1)}),g.on(\"complete\",function(){h.resolve(g.getResult())}),g.on(\"error\",function(a){h.reject(a)}),arguments.length>1&&(e=e||0,f=f||0,0>e&&(e=i.size+e),0>f&&(f=i.size+f),f=Math.min(f,i.size),i=i.slice(e,f)),g.loadFromBlob(i),h.promise()}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return!(b&&!d.contains(b,a.currentTarget))&&(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return g.dndOver=!1,g.elem.removeClass(e+\"over\"),b&&!f?(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),!1):void 0},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f,g=this.getRuntime().getContainer(),h=this,i=h.owner,j=h.options,k=this.label=c(document.createElement(\"label\")),l=this.input=c(document.createElement(\"input\"));if(l.attr(\"type\",\"file\"),l.attr(\"capture\",\"camera\"),l.attr(\"name\",j.name),l.addClass(\"webuploader-element-invisible\"),k.on(\"click\",function(a){l.trigger(\"click\"),a.stopPropagation(),i.trigger(\"dialogopen\")}),k.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),j.multiple&&l.attr(\"multiple\",\"multiple\"),j.accept&&j.accept.length>0){for(a=[],b=0,d=j.accept.length;d>b;b++)a.push(j.accept[b].mimeTypes);l.attr(\"accept\",a.join(\",\"))}g.append(l),g.append(k),e=function(a){i.trigger(a.type)},f=function(a){var b;return 0!==a.target.files.length&&(h.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),l.off(),l=c(b).on(\"change\",f).on(\"mouseenter mouseleave\",e),void i.trigger(\"change\"))},l.on(\"change\",f),k.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a;\n}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\0\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(8*z[P[i]]*h[j]*h[k]),C[i]=1/(8*A[P[i]]*h[j]*h[k]),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(255&a>>8),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?0|_+.5:0|_-.5;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=50>a?Math.floor(5e3/a):Math.floor(200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}Math.round;var t,u,v,w,x,y=Math.floor,z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._metas=a,this):this._metas},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576&&(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3])}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=g.attachInfoToQuery!==!1?(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData):\"\",c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getResponseHeaders:function(){return this._headers},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_parseHeader:function(a){var b={};return a&&a.replace(/^([^\\:]+):(.*)$/gm,function(a,c,d){b[c.trim()]=d.trim()}),b},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){if(4===b.readyState){b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status;var d=\"|\",e=d+b.status+d+b.statusText;return b.status>=200&&b.status<300?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"error\",\"server\"+e)):a.trigger(\"error\",a._status?\"http\"+e:\"abort\")}},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/html5/md5\",[\"runtime/html5/runtime\"],function(a){var b=function(a,b){return 4294967295&a+b},c=function(a,c,d,e,f,g){return c=b(b(c,a),b(e,g)),b(c<<f|c>>>32-f,d)},d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)},e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)},f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)},g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)},h=function(a,c){var h=a[0],i=a[1],j=a[2],k=a[3];h=d(h,i,j,k,c[0],7,-680876936),k=d(k,h,i,j,c[1],12,-389564586),j=d(j,k,h,i,c[2],17,606105819),i=d(i,j,k,h,c[3],22,-1044525330),h=d(h,i,j,k,c[4],7,-176418897),k=d(k,h,i,j,c[5],12,1200080426),j=d(j,k,h,i,c[6],17,-1473231341),i=d(i,j,k,h,c[7],22,-45705983),h=d(h,i,j,k,c[8],7,1770035416),k=d(k,h,i,j,c[9],12,-1958414417),j=d(j,k,h,i,c[10],17,-42063),i=d(i,j,k,h,c[11],22,-1990404162),h=d(h,i,j,k,c[12],7,1804603682),k=d(k,h,i,j,c[13],12,-40341101),j=d(j,k,h,i,c[14],17,-1502002290),i=d(i,j,k,h,c[15],22,1236535329),h=e(h,i,j,k,c[1],5,-165796510),k=e(k,h,i,j,c[6],9,-1069501632),j=e(j,k,h,i,c[11],14,643717713),i=e(i,j,k,h,c[0],20,-373897302),h=e(h,i,j,k,c[5],5,-701558691),k=e(k,h,i,j,c[10],9,38016083),j=e(j,k,h,i,c[15],14,-660478335),i=e(i,j,k,h,c[4],20,-405537848),h=e(h,i,j,k,c[9],5,568446438),k=e(k,h,i,j,c[14],9,-1019803690),j=e(j,k,h,i,c[3],14,-187363961),i=e(i,j,k,h,c[8],20,1163531501),h=e(h,i,j,k,c[13],5,-1444681467),k=e(k,h,i,j,c[2],9,-51403784),j=e(j,k,h,i,c[7],14,1735328473),i=e(i,j,k,h,c[12],20,-1926607734),h=f(h,i,j,k,c[5],4,-378558),k=f(k,h,i,j,c[8],11,-2022574463),j=f(j,k,h,i,c[11],16,1839030562),i=f(i,j,k,h,c[14],23,-35309556),h=f(h,i,j,k,c[1],4,-1530992060),k=f(k,h,i,j,c[4],11,1272893353),j=f(j,k,h,i,c[7],16,-155497632),i=f(i,j,k,h,c[10],23,-1094730640),h=f(h,i,j,k,c[13],4,681279174),k=f(k,h,i,j,c[0],11,-358537222),j=f(j,k,h,i,c[3],16,-722521979),i=f(i,j,k,h,c[6],23,76029189),h=f(h,i,j,k,c[9],4,-640364487),k=f(k,h,i,j,c[12],11,-421815835),j=f(j,k,h,i,c[15],16,530742520),i=f(i,j,k,h,c[2],23,-995338651),h=g(h,i,j,k,c[0],6,-198630844),k=g(k,h,i,j,c[7],10,1126891415),j=g(j,k,h,i,c[14],15,-1416354905),i=g(i,j,k,h,c[5],21,-57434055),h=g(h,i,j,k,c[12],6,1700485571),k=g(k,h,i,j,c[3],10,-1894986606),j=g(j,k,h,i,c[10],15,-1051523),i=g(i,j,k,h,c[1],21,-2054922799),h=g(h,i,j,k,c[8],6,1873313359),k=g(k,h,i,j,c[15],10,-30611744),j=g(j,k,h,i,c[6],15,-1560198380),i=g(i,j,k,h,c[13],21,1309151649),h=g(h,i,j,k,c[4],6,-145523070),k=g(k,h,i,j,c[11],10,-1120210379),j=g(j,k,h,i,c[2],15,718787259),i=g(i,j,k,h,c[9],21,-343485551),a[0]=b(h,a[0]),a[1]=b(i,a[1]),a[2]=b(j,a[2]),a[3]=b(k,a[3])},i=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c},j=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},k=function(a){var b,c,d,e,f,g,j=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;j>=b;b+=64)h(k,i(a.substring(b-64,b)));for(a=a.substring(b-64),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*j,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},l=function(a){var b,c,d,e,f,g,i=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;i>=b;b+=64)h(k,j(a.subarray(b-64,b)));for(a=i>b-64?a.subarray(b-64):new Uint8Array(0),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a[b]<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*i,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},m=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],n=function(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=m[15&a>>8*b+4]+m[15&a>>8*b];return c},o=function(a){var b;for(b=0;b<a.length;b+=1)a[b]=n(a[b]);return a.join(\"\")},p=function(a){return o(k(a))},q=function(){this.reset()};return\"5d41402abc4b2a76b9719d911017c592\"!==p(\"hello\")&&(b=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}),q.prototype.append=function(a){return/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),this.appendBinary(a),this},q.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var b,c=this._buff.length;for(b=64;c>=b;b+=64)h(this._state,i(this._buff.substring(b-64,b)));return this._buff=this._buff.substr(b-64),this},q.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.prototype._finish=function(a,b){var c,d,e,f=b;if(a[f>>2]|=128<<(f%4<<3),f>55)for(h(this._state,a),f=0;16>f;f+=1)a[f]=0;c=8*this._length,c=c.toString(16).match(/(.*?)(.{0,8})$/),d=parseInt(c[2],16),e=parseInt(c[1],16)||0,a[14]=d,a[15]=e,h(this._state,a)},q.prototype.reset=function(){return this._buff=\"\",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},q.hash=function(a,b){/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a)));var c=k(a);return b?c:o(c)},q.hashBinary=function(a,b){var c=k(a);return b?c:o(c)},q.ArrayBuffer=function(){this.reset()},q.ArrayBuffer.prototype.append=function(a){var b,c=this._concatArrayBuffer(this._buff,a),d=c.length;for(this._length+=a.byteLength,b=64;d>=b;b+=64)h(this._state,j(c.subarray(b-64,b)));return this._buff=d>b-64?c.subarray(b-64):new Uint8Array(0),this},q.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.ArrayBuffer.prototype._finish=q.prototype._finish,q.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.ArrayBuffer.prototype.destroy=q.prototype.destroy,q.ArrayBuffer.prototype._concatArrayBuffer=function(a,b){var c=a.length,d=new Uint8Array(c+b.byteLength);return d.set(a),d.set(new Uint8Array(b),c),d},q.ArrayBuffer.hash=function(a,b){var c=l(new Uint8Array(a));return b?c:o(c)},a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){var b,c,d=a.getSource(),e=2097152,f=Math.ceil(d.size/e),g=0,h=this.owner,i=new q.ArrayBuffer,j=this,k=d.mozSlice||d.webkitSlice||d.slice;c=new FileReader,(b=function(){var l,m;l=g*e,m=Math.min(l+e,d.size),c.onload=function(b){i.append(b.target.result),h.trigger(\"progress\",{total:a.size,loaded:m})},c.onloadend=function(){c.onloadend=c.onload=null,++g<f?setTimeout(b,1):setTimeout(function(){h.trigger(\"load\"),j.result=i.end(),b=a=d=i=null,h.trigger(\"complete\")},50)},c.readAsArrayBuffer(k.call(d,l,m))})()},getResult:function(){return this.result}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"widgets/md5\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/html5/md5\"],function(a){return a}),b(\"widgets/log\",[\"base\",\"uploader\",\"widgets/widget\"],function(a,b){function c(a){var b=e.extend({},d,a),c=f.replace(/^(.*)\\?/,\"$1\"+e.param(b)),g=new Image;g.src=c}var d,e=a.$,f=\" http://static.tieba.baidu.com/tb/pms/img/st.gif??\",g=(location.hostname||location.host||\"protected\").toLowerCase(),h=g&&/baidu/i.exec(g);if(h)return d={dv:3,master:\"webuploader\",online:/test/.exec(g)?0:1,module:\"\",product:g,type:0},b.register({name:\"log\",init:function(){var a=this.owner,b=0,d=0;a.on(\"error\",function(a){c({type:2,c_error_code:a})}).on(\"uploadError\",function(a,b){c({type:2,c_error_code:\"UPLOAD_ERROR\",c_reason:\"\"+b})}).on(\"uploadComplete\",function(a){b++,d+=a.size}).on(\"uploadFinished\",function(){c({c_count:b,c_size:d}),b=d=0}),c({c_usage:1})}})}),b(\"webuploader\",[\"preset/all\",\"widgets/log\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/ueditor.all.js",
    "content": "(function(){UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu;window.UE=baidu.editor={plugins:{},commands:{},instants:{},I18N:{},_customizeUI:{},version:\"3.9.0-beta\",constants:{STATEFUL:{DISABLED:-1,OFF:0,ON:1}}};var dom=UE.dom={};var browser=UE.browser=function(){var agent=navigator.userAgent.toLowerCase(),opera=window.opera,browser={ie:/(msie\\s|trident.*rv:)([\\w.]+)/i.test(agent),opera:!!opera&&opera.version,webkit:agent.indexOf(\" applewebkit/\")>-1,mac:agent.indexOf(\"macintosh\")>-1,quirks:document.compatMode==\"BackCompat\"};browser.gecko=navigator.product==\"Gecko\"&&!browser.webkit&&!browser.opera&&!browser.ie;var version=0;if(browser.ie){var v1=agent.match(/(?:msie\\s([\\w.]+))/);var v2=agent.match(/(?:trident.*rv:([\\w.]+))/);if(v1&&v2&&v1[1]&&v2[1]){version=Math.max(v1[1]*1,v2[1]*1)}else if(v1&&v1[1]){version=v1[1]*1}else if(v2&&v2[1]){version=v2[1]*1}else{version=0}browser.ie11Compat=document.documentMode==11;browser.ie9Compat=document.documentMode==9;browser.ie8=!!document.documentMode;browser.ie8Compat=document.documentMode==8;browser.ie7Compat=version==7&&!document.documentMode||document.documentMode==7;browser.ie6Compat=version<7||browser.quirks;browser.ie9above=version>8;browser.ie9below=version<9;browser.ie11above=version>10;browser.ie11below=version<11}if(browser.gecko){var geckoRelease=agent.match(/rv:([\\d\\.]+)/);if(geckoRelease){geckoRelease=geckoRelease[1].split(\".\");version=geckoRelease[0]*1e4+(geckoRelease[1]||0)*100+(geckoRelease[2]||0)*1}}if(/chrome\\/(\\d+\\.\\d)/i.test(agent)){browser.chrome=+RegExp[\"$1\"]}if(/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(agent)&&!/chrome/i.test(agent)){browser.safari=+(RegExp[\"$1\"]||RegExp[\"$2\"])}if(browser.opera)version=parseFloat(opera.version());if(browser.webkit)version=parseFloat(agent.match(/ applewebkit\\/(\\d+)/)[1]);browser.version=version;browser.isCompatible=!browser.mobile&&(browser.ie&&version>=6||browser.gecko&&version>=10801||browser.opera&&version>=9.5||browser.air&&version>=1||browser.webkit&&version>=522||false);return browser}();var ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera;var utils=UE.utils={each:function(obj,iterator,context){if(obj==null)return;if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===false)return false}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)===false)return false}}}},makeInstance:function(obj){var noop=new Function;noop.prototype=obj;obj=new noop;noop.prototype=null;return obj},isObject:function(item){return item&&typeof item===\"object\"&&!Array.isArray(item)},merge:function(target,source){var output=Object.assign({},target);if(this.isObject(target)&&this.isObject(source)){Object.keys(source).forEach(key=>{if(this.isObject(source[key])){if(!(key in target)){Object.assign(output,{[key]:source[key]})}else{output[key]=this.merge(target[key],source[key])}}else{Object.assign(output,{[key]:source[key]})}})}return output},extend:function(t,s,b){if(s){for(var k in s){if(!b||!t.hasOwnProperty(k)){t[k]=s[k]}}}return t},extend2:function(t){var a=arguments;for(var i=1;i<a.length;i++){var x=a[i];for(var k in x){if(!t.hasOwnProperty(k)){t[k]=x[k]}}}return t},inherits:function(subClass,superClass){var oldP=subClass.prototype,newP=utils.makeInstance(superClass.prototype);utils.extend(newP,oldP,true);subClass.prototype=newP;return newP.constructor=subClass},bind:function(fn,context){return function(){return fn.apply(context,arguments)}},defer:function(fn,delay,exclusion){var timerID;return function(){if(exclusion){clearTimeout(timerID)}timerID=setTimeout(fn,delay)}},indexOf:function(array,item,start){var index=-1;start=this.isNumber(start)?start:0;this.each(array,function(v,i){if(i>=start&&v===item){index=i;return false}});return index},removeItem:function(array,item){for(var i=0,l=array.length;i<l;i++){if(array[i]===item){array.splice(i,1);i--}}},trim:function(str){return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},listToMap:function(list){if(!list)return{};list=utils.isArray(list)?list:list.split(\",\");for(var i=0,ci,obj={};ci=list[i++];){obj[ci.toUpperCase()]=obj[ci]=1}return obj},unhtml:function(str,reg){return str?str.replace(reg||/[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,function(a,b){if(b){return a}else{return{\"<\":\"&lt;\",\"&\":\"&amp;\",'\"':\"&quot;\",\"“\":\"&ldquo;\",\"”\":\"&rdquo;\",\">\":\"&gt;\",\"'\":\"&#39;\"}[a]}}):\"\"},html:function(str){return str?str.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g,function(m){return{\"&lt;\":\"<\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&ldquo;\":\"“\",\"&rdquo;\":\"”\",\"&gt;\":\">\",\"&#39;\":\"'\",\"&nbsp;\":\" \"}[m]}):\"\"},cssStyleToDomStyle:function(){var test=document.createElement(\"div\").style,cache={float:test.cssFloat!==undefined?\"cssFloat\":test.styleFloat!==undefined?\"styleFloat\":\"float\"};return function(cssName){return cache[cssName]||(cache[cssName]=cssName.toLowerCase().replace(/-./g,function(match){return match.charAt(1).toUpperCase()}))}}(),loadFile:function(){var tmpList=[];function getItem(doc,obj){try{for(var i=0,ci;ci=tmpList[i++];){if(ci.doc===doc&&ci.url==(obj.src||obj.href)){return ci}}}catch(e){return null}}return function(doc,obj,fn){var item=getItem(doc,obj);if(item){if(item.ready){fn&&fn()}else{item.funs.push(fn)}return}tmpList.push({doc:doc,url:obj.src||obj.href,funs:[fn]});if(!doc.body){var html=[];for(var p in obj){if(p==\"tag\")continue;html.push(p+'=\"'+obj[p]+'\"')}doc.write(\"<\"+obj.tag+\" \"+html.join(\" \")+\" ></\"+obj.tag+\">\");return}if(obj.id&&doc.getElementById(obj.id)){return}var element=doc.createElement(obj.tag);delete obj.tag;for(var p in obj){element.setAttribute(p,obj[p])}element.onload=element.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){item=getItem(doc,obj);if(item.funs.length>0){item.ready=1;for(var fi;fi=item.funs.pop();){fi()}}element.onload=element.onreadystatechange=null}};element.onerror=function(){throw Error(\"The load \"+(obj.href||obj.src)+\" fails,check the url settings of file ueditor.config.js \")};doc.getElementsByTagName(\"head\")[0].appendChild(element)}}(),isEmptyObject:function(obj){if(obj==null)return true;if(this.isArray(obj)||this.isString(obj))return obj.length===0;for(var key in obj)if(obj.hasOwnProperty(key))return false;return true},fixColor:function(name,value){if(/color/i.test(name)&&/rgba?/.test(value)){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}value=value.toUpperCase()}return value},optCss:function(val){var padding,margin,border;val=val.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi,function(str,key,name,val){if(val.split(\" \").length==1){switch(key){case\"padding\":!padding&&(padding={});padding[name]=val;return\"\";case\"margin\":!margin&&(margin={});margin[name]=val;return\"\";case\"border\":return val==\"initial\"?\"\":str}}return str});function opt(obj,name){if(!obj){return\"\"}var t=obj.top,b=obj.bottom,l=obj.left,r=obj.right,val=\"\";if(!t||!l||!b||!r){for(var p in obj){val+=\";\"+name+\"-\"+p+\":\"+obj[p]+\";\"}}else{val+=\";\"+name+\":\"+(t==b&&b==l&&l==r?t:t==b&&l==r?t+\" \"+l:l==r?t+\" \"+l+\" \"+b:t+\" \"+r+\" \"+b+\" \"+l)+\";\"}return val}val+=opt(padding,\"padding\")+opt(margin,\"margin\");return val.replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/,\"\").replace(/;([ \\n\\r\\t]+)|\\1;/g,\";\").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+\";;\":\";\"})},clone:function(source,target){var tmp;target=target||{};for(var i in source){if(source.hasOwnProperty(i)){tmp=source[i];if(typeof tmp==\"object\"){target[i]=utils.isArray(tmp)?[]:{};utils.clone(source[i],target[i])}else{target[i]=tmp}}}return target},transUnitToPx:function(val){if(!/(pt|cm)/.test(val)){return val}var unit;val.replace(/([\\d.]+)(\\w+)/,function(str,v,u){val=v;unit=u});switch(unit){case\"cm\":val=parseFloat(val)*25;break;case\"pt\":val=Math.round(parseFloat(val)*96/72)}return val+(val?\"px\":\"\")},domReady:function(){var fnArr=[];function doReady(doc){doc.isReady=true;for(var ci;ci=fnArr.pop();ci()){}}return function(onready,win){win=win||window;var doc=win.document;onready&&fnArr.push(onready);if(doc.readyState===\"complete\"){doReady(doc)}else{doc.isReady&&doReady(doc);if(browser.ie&&browser.version!=11){(function(){if(doc.isReady)return;try{doc.documentElement.doScroll(\"left\")}catch(error){setTimeout(arguments.callee,0);return}doReady(doc)})();win.attachEvent(\"onload\",function(){doReady(doc)})}else{doc.addEventListener(\"DOMContentLoaded\",function(){doc.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);doReady(doc)},false);win.addEventListener(\"load\",function(){doReady(doc)},false)}}}}(),cssRule:browser.ie&&browser.version!=11?function(key,style,doc){var indexList,index;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(index!==undefined){return doc.styleSheets[index].cssText}return undefined}doc=doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(style===\"\"){if(index!==undefined){doc.styleSheets[index].cssText=\"\";delete indexList[key];return true}return false}if(index!==undefined){sheetStyle=doc.styleSheets[index]}else{sheetStyle=doc.createStyleSheet(\"\",index=doc.styleSheets.length);indexList[key]=index}sheetStyle.cssText=style}:function(key,style,doc){var head,node;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;node=doc.getElementById(key);return node?node.innerHTML:undefined}doc=doc||document;node=doc.getElementById(key);if(style===\"\"){if(node){node.parentNode.removeChild(node);return true}return false}if(node){node.innerHTML=style}else{node=doc.createElement(\"style\");node.id=key;node.innerHTML=style;doc.getElementsByTagName(\"head\")[0].appendChild(node)}},sort:function(array,compareFn){compareFn=compareFn||function(item1,item2){return item1.localeCompare(item2)};for(var i=0,len=array.length;i<len;i++){for(var j=i,length=array.length;j<length;j++){if(compareFn(array[i],array[j])>0){var t=array[i];array[i]=array[j];array[j]=t}}}return array},serializeParam:function(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\")continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")},formatUrl:function(url){var u=url.replace(/&&/g,\"&\");u=u.replace(/\\?&/g,\"?\");u=u.replace(/&$/g,\"\");u=u.replace(/&#/g,\"#\");u=u.replace(/&+/g,\"&\");return u},addStyleContent:function(cssContent){var style=document.createElement(\"style\");style.innerHTML=cssContent;document.head.appendChild(style)},isCrossDomainUrl:function(url){var a=document.createElement(\"a\");a.href=url;if(browser.ie){a.href=a.href}return!(a.protocol==location.protocol&&a.hostname==location.hostname&&(a.port==location.port||a.port==\"80\"&&location.port==\"\"||a.port==\"\"&&location.port==\"80\"))},clearEmptyAttrs:function(obj){for(var p in obj){if(obj[p]===\"\"){delete obj[p]}}return obj},str2json:function(s){if(!utils.isString(s))return null;if(window.JSON){return JSON.parse(s)}else{return new Function(\"return \"+utils.trim(s||\"\"))()}},json2str:function(){if(window.JSON){return JSON.stringify}else{var escapeMap={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};function encodeString(source){if(/[\"\\\\\\x00-\\x1f]/.test(source)){source=source.replace(/[\"\\\\\\x00-\\x1f]/g,function(match){var c=escapeMap[match];if(c){return c}c=match.charCodeAt();return\"\\\\u00\"+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'\"'+source+'\"'}function encodeArray(source){var result=[\"[\"],l=source.length,preComma,i,item;for(i=0;i<l;i++){item=source[i];switch(typeof item){case\"undefined\":case\"function\":case\"unknown\":break;default:if(preComma){result.push(\",\")}result.push(utils.json2str(item));preComma=1}}result.push(\"]\");return result.join(\"\")}function pad(source){return source<10?\"0\"+source:source}function encodeDate(source){return'\"'+source.getFullYear()+\"-\"+pad(source.getMonth()+1)+\"-\"+pad(source.getDate())+\"T\"+pad(source.getHours())+\":\"+pad(source.getMinutes())+\":\"+pad(source.getSeconds())+'\"'}return function(value){switch(typeof value){case\"undefined\":return\"undefined\";case\"number\":return isFinite(value)?String(value):\"null\";case\"string\":return encodeString(value);case\"boolean\":return String(value);default:if(value===null){return\"null\"}else if(utils.isArray(value)){return encodeArray(value)}else if(utils.isDate(value)){return encodeDate(value)}else{var result=[\"{\"],encode=utils.json2str,preComma,item;for(var key in value){if(Object.prototype.hasOwnProperty.call(value,key)){item=value[key];switch(typeof item){case\"undefined\":case\"unknown\":case\"function\":break;default:if(preComma){result.push(\",\")}preComma=1;result.push(encode(key)+\":\"+encode(item))}}}result.push(\"}\");return result.join(\"\")}}}}}()};utils.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Date\"],function(v){UE.utils[\"is\"+v]=function(obj){return Object.prototype.toString.apply(obj)==\"[object \"+v+\"]\"}});var EventBase=UE.EventBase=function(){};EventBase.prototype={addListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){getListener(this,ti,true).push(listener)}},on:function(types,listener){return this.addListener(types,listener)},off:function(types,listener){return this.removeListener(types,listener)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){utils.removeItem(getListener(this,ti)||[],listener)}},fireEvent:function(){var types=arguments[0];types=utils.trim(types).split(\" \");for(var i=0,ti;ti=types[i++];){var listeners=getListener(this,ti),r,t,k;if(listeners){k=listeners.length;while(k--){if(!listeners[k])continue;t=listeners[k].apply(this,arguments);if(t===true){return t}if(t!==undefined){r=t}}}if(t=this[\"on\"+ti.toLowerCase()]){r=t.apply(this,arguments)}}return r}};function getListener(obj,type,force){var allListeners;type=type.toLowerCase();return(allListeners=obj.__allListeners||force&&(obj.__allListeners={}))&&(allListeners[type]||force&&(allListeners[type]=[]))}var dtd=dom.dtd=function(){function _(s){for(var k in s){s[k.toUpperCase()]=s[k]}return s}var X=utils.extend2;var A=_({isindex:1,fieldset:1}),B=_({input:1,button:1,select:1,textarea:1,label:1}),C=X(_({a:1}),B),D=X({iframe:1},C),E=_({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),F=_({ins:1,del:1,script:1,style:1}),G=X(_({mark:1,b:1,acronym:1,bdo:1,var:1,\"#\":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),F),H=X(_({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),G),I=X(_({p:1}),H),J=X(_({iframe:1}),H,B),K=_({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,\"#\":1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,var:1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),L=X(_({a:0}),J),M=_({tr:1}),N=_({\"#\":1}),O=X(_({param:1}),K),P=X(_({form:1}),A,D,E,I),Q=_({li:1,ol:1,ul:1}),R=_({style:1,script:1}),S=_({base:1,link:1,meta:1,title:1}),T=X(S,R),U=_({head:1,body:1}),V=_({html:1});var block=_({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),empty=_({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return _({$nonBodyContent:X(V,U,S),$block:block,$inline:L,$inlineWithA:X(_({a:1}),L),$body:X(_({script:1,style:1}),block),$cdata:_({script:1,style:1}),$empty:empty,$nonChild:_({iframe:1,textarea:1}),$listItem:_({dd:1,dt:1,li:1}),$list:_({ul:1,ol:1,dl:1}),$isNotEmpty:_({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,textarea:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:_({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,var:1}),$removeEmptyBlock:_({p:1,div:1}),$tableContent:_({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),$notTransContent:_({pre:1,script:1,style:1,textarea:1}),html:U,head:T,style:N,script:N,body:P,base:{},link:{},meta:{},title:N,col:{},tr:_({td:1,th:1}),img:{},embed:{},colgroup:_({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:_({optgroup:1,option:1}),font:L,ins:L,menu:Q,abbr:L,label:L,table:_({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),code:L,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:L,textarea:N,noframes:P,big:L,small:L,span:_({\"#\":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:L,dt:L,sub:L,optgroup:_({option:1}),param:{},bdo:L,var:L,div:P,object:O,sup:L,dd:P,strike:L,area:{},dir:Q,map:X(_({area:1,form:1,p:1}),A,F,E),applet:O,dl:_({dt:1,dd:1}),del:L,isindex:{},fieldset:X(_({legend:1}),K),thead:M,ul:Q,acronym:L,b:L,a:X(_({a:1}),J),blockquote:X(_({td:1,tr:1,tbody:1,li:1}),P),caption:L,i:L,u:L,tbody:M,s:L,address:X(D,I),tt:L,legend:L,q:L,pre:X(G,C),p:X(_({a:1}),L),em:L,dfn:L,mark:L})}();function getDomNode(node,start,ltr,startFromChild,fn,guard){var tmpNode=startFromChild&&node[start],parent;!tmpNode&&(tmpNode=node[ltr]);while(!tmpNode&&(parent=(parent||node).parentNode)){if(parent.tagName==\"BODY\"||guard&&!guard(parent)){return null}tmpNode=parent[ltr]}if(tmpNode&&fn&&!fn(tmpNode)){return getDomNode(tmpNode,start,ltr,false,fn)}return tmpNode}var attrFix=ie&&browser.version<9?{tabindex:\"tabIndex\",readonly:\"readOnly\",for:\"htmlFor\",class:\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\"}:{tabindex:\"tabIndex\",readonly:\"readOnly\"},styleBlock=utils.listToMap([\"-webkit-box\",\"-moz-box\",\"block\",\"list-item\",\"table\",\"table-row-group\",\"table-header-group\",\"table-footer-group\",\"table-row\",\"table-column-group\",\"table-column\",\"table-cell\",\"table-caption\"]);var domUtils=dom.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:ie&&browser.version===\"6\"?\"\\ufeff\":\"​\",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(nodeA,nodeB){if(nodeA===nodeB){return 0}var node,parentsA=[nodeA],parentsB=[nodeB];node=nodeA;while(node=node.parentNode){if(node===nodeB){return 10}parentsA.push(node)}node=nodeB;while(node=node.parentNode){if(node===nodeA){return 20}parentsB.push(node)}parentsA.reverse();parentsB.reverse();if(parentsA[0]!==parentsB[0]){return 1}var i=-1;while(i++,parentsA[i]===parentsB[i]){}nodeA=parentsA[i];nodeB=parentsB[i];while(nodeA=nodeA.nextSibling){if(nodeA===nodeB){return 4}}return 2},getNodeIndex:function(node,ignoreTextNode){var preNode=node,i=0;while(preNode=preNode.previousSibling){if(ignoreTextNode&&preNode.nodeType==3){if(preNode.nodeType!=preNode.nextSibling.nodeType){i++}continue}i++}return i},inDoc:function(node,doc){return domUtils.getPosition(node,doc)===10},findParent:function(node,filterFn,includeSelf){if(node&&!domUtils.isBody(node)){node=includeSelf?node:node.parentNode;while(node){if(!filterFn||filterFn(node)||domUtils.isBody(node)){return filterFn&&!filterFn(node)&&domUtils.isBody(node)?null:node}node=node.parentNode}}return null},findParentByTagName:function(node,tagNames,includeSelf,excludeFn){tagNames=utils.listToMap(utils.isArray(tagNames)?tagNames:[tagNames]);return domUtils.findParent(node,function(node){return tagNames[node.tagName]&&!(excludeFn&&excludeFn(node))},includeSelf)},findParents:function(node,includeSelf,filterFn,closerFirst){var parents=includeSelf&&(filterFn&&filterFn(node)||!filterFn)?[node]:[];while(node=domUtils.findParent(node,filterFn)){parents.push(node)}return closerFirst?parents:parents.reverse()},insertAfter:function(node,newNode){return node.nextSibling?node.parentNode.insertBefore(newNode,node.nextSibling):node.parentNode.appendChild(newNode)},remove:function(node,keepChildren){var parent=node.parentNode,child;if(parent){if(keepChildren&&node.hasChildNodes()){while(child=node.firstChild){parent.insertBefore(child,node)}}parent.removeChild(node)}return node},getNextDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"firstChild\",\"nextSibling\",startFromChild,filterFn,guard)},getPreDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"lastChild\",\"previousSibling\",startFromChild,filterFn,guard)},isBookmarkNode:function(node){return node.nodeType==1&&node.id&&/^_baidu_bookmark_/i.test(node.id)},getWindow:function(node){var doc=node.ownerDocument||node;return doc.defaultView||doc.parentWindow},getCommonAncestor:function(nodeA,nodeB){if(nodeA===nodeB)return nodeA;var parentsA=[nodeA],parentsB=[nodeB],parent=nodeA,i=-1;while(parent=parent.parentNode){if(parent===nodeB){return parent}parentsA.push(parent)}parent=nodeB;while(parent=parent.parentNode){if(parent===nodeA)return parent;parentsB.push(parent)}parentsA.reverse();parentsB.reverse();while(i++,parentsA[i]===parentsB[i]){}return i==0?null:parentsA[i-1]},clearEmptySibling:function(node,ignoreNext,ignorePre){function clear(next,dir){var tmpNode;while(next&&!domUtils.isBookmarkNode(next)&&(domUtils.isEmptyInlineElement(next)||!new RegExp(\"[^\\t\\n\\r\"+domUtils.fillChar+\"]\").test(next.nodeValue))){tmpNode=next[dir];domUtils.remove(next);next=tmpNode}}!ignoreNext&&clear(node.nextSibling,\"nextSibling\");!ignorePre&&clear(node.previousSibling,\"previousSibling\")},split:function(node,offset){var doc=node.ownerDocument;if(browser.ie&&offset==node.nodeValue.length){var next=doc.createTextNode(\"\");return domUtils.insertAfter(node,next)}var retval=node.splitText(offset);if(browser.ie8){var tmpNode=doc.createTextNode(\"\");domUtils.insertAfter(retval,tmpNode);domUtils.remove(tmpNode)}return retval},isWhitespace:function(node){return!new RegExp(\"[^ \\t\\n\\r\"+domUtils.fillChar+\"]\").test(node.nodeValue)},getXY:function(element){var x=0,y=0;while(element.offsetParent){y+=element.offsetTop;x+=element.offsetLeft;element=element.offsetParent}return{x:x,y:y}},on:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.addEventListener){element.addEventListener(type,handler,false)}else{if(!handler._d){handler._d={els:[]}}var key=type+handler.toString(),index=utils.indexOf(handler._d.els,element);if(!handler._d[key]||index==-1){if(index==-1){handler._d.els.push(element)}if(!handler._d[key]){handler._d[key]=function(evt){return handler.call(evt.srcElement,evt||window.event)}}element.attachEvent(\"on\"+type,handler._d[key])}}}element=null},un:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.removeEventListener){element.removeEventListener(type,handler,false)}else{var key=type+handler.toString();try{element.detachEvent(\"on\"+type,handler._d?handler._d[key]:handler)}catch(e){}if(handler._d&&handler._d[key]){var index=utils.indexOf(handler._d.els,element);if(index!=-1){handler._d.els.splice(index,1)}handler._d.els.length==0&&delete handler._d[key]}}}},isSameElement:function(nodeA,nodeB){if(nodeA.tagName!=nodeB.tagName){return false}var thisAttrs=nodeA.attributes,otherAttrs=nodeB.attributes;if(!ie&&thisAttrs.length!=otherAttrs.length){return false}var attrA,attrB,al=0,bl=0;for(var i=0;attrA=thisAttrs[i++];){if(attrA.nodeName==\"style\"){if(attrA.specified){al++}if(domUtils.isSameStyle(nodeA,nodeB)){continue}else{return false}}if(ie){if(attrA.specified){al++;attrB=otherAttrs.getNamedItem(attrA.nodeName)}else{continue}}else{attrB=nodeB.attributes[attrA.nodeName]}if(!attrB.specified||attrA.nodeValue!=attrB.nodeValue){return false}}if(ie){for(i=0;attrB=otherAttrs[i++];){if(attrB.specified){bl++}}if(al!=bl){return false}}return true},isSameStyle:function(nodeA,nodeB){var styleA=nodeA.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\"),styleB=nodeB.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\");if(browser.opera){styleA=nodeA.style;styleB=nodeB.style;if(styleA.length!=styleB.length)return false;for(var p in styleA){if(/^(\\d+|csstext)$/i.test(p)){continue}if(styleA[p]!=styleB[p]){return false}}return true}if(!styleA||!styleB){return styleA==styleB}styleA=styleA.split(\";\");styleB=styleB.split(\";\");if(styleA.length!=styleB.length){return false}for(var i=0,ci;ci=styleA[i++];){if(utils.indexOf(styleB,ci)==-1){return false}}return true},isBlockElm:function(node){return node.nodeType==1&&(dtd.$block[node.tagName]||styleBlock[domUtils.getComputedStyle(node,\"display\")])&&!dtd.$nonChild[node.tagName]},isBody:function(node){return node&&node.nodeType==1&&node.tagName.toLowerCase()==\"body\"},breakParent:function(node,parent){var tmpNode,parentClone=node,clone=node,leftNodes,rightNodes;do{parentClone=parentClone.parentNode;if(leftNodes){tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(leftNodes);leftNodes=tmpNode;tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(rightNodes);rightNodes=tmpNode}else{leftNodes=parentClone.cloneNode(false);rightNodes=leftNodes.cloneNode(false)}while(tmpNode=clone.previousSibling){leftNodes.insertBefore(tmpNode,leftNodes.firstChild)}while(tmpNode=clone.nextSibling){rightNodes.appendChild(tmpNode)}clone=parentClone}while(parent!==parentClone);tmpNode=parent.parentNode;tmpNode.insertBefore(leftNodes,parent);tmpNode.insertBefore(rightNodes,parent);tmpNode.insertBefore(node,rightNodes);domUtils.remove(parent);return node},isEmptyInlineElement:function(node){if(node.nodeType!=1||!dtd.$removeEmpty[node.tagName]){return 0}node=node.firstChild;while(node){if(domUtils.isBookmarkNode(node)){return 0}if(node.nodeType==1&&!domUtils.isEmptyInlineElement(node)||node.nodeType==3&&!domUtils.isWhitespace(node)){return 0}node=node.nextSibling}return 1},trimWhiteTextNode:function(node){function remove(dir){var child;while((child=node[dir])&&child.nodeType==3&&domUtils.isWhitespace(child)){node.removeChild(child)}}remove(\"firstChild\");remove(\"lastChild\")},mergeChild:function(node,tagName,attrs){var list=domUtils.getElementsByTagName(node,node.tagName.toLowerCase());for(var i=0,ci;ci=list[i++];){if(!ci.parentNode||domUtils.isBookmarkNode(ci)){continue}if(ci.tagName.toLowerCase()==\"span\"){if(node===ci.parentNode){domUtils.trimWhiteTextNode(node);if(node.childNodes.length==1){node.style.cssText=ci.style.cssText+\";\"+node.style.cssText;domUtils.remove(ci,true);continue}}ci.style.cssText=node.style.cssText+\";\"+ci.style.cssText;if(attrs){var style=attrs.style;if(style){style=style.split(\";\");for(var j=0,s;s=style[j++];){ci.style[utils.cssStyleToDomStyle(s.split(\":\")[0])]=s.split(\":\")[1]}}}if(domUtils.isSameStyle(ci,node)){domUtils.remove(ci,true)}continue}if(domUtils.isSameElement(node,ci)){domUtils.remove(ci,true)}}},getElementsByTagName:function(node,tagName,filter){if(filter&&utils.isString(filter)){var className=filter;filter=function(node){return domUtils.hasClass(node,className)}}tagName=utils.trim(tagName).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[];for(var n=0,ni;ni=tagName[n++];){var list=node.getElementsByTagName(ni);for(var i=0,ci;ci=list[i++];){if(!filter||filter(ci))arr.push(ci)}}return arr},mergeToParent:function(node){var parent=node.parentNode;while(parent&&dtd.$removeEmpty[parent.tagName]){if(parent.tagName==node.tagName||parent.tagName==\"A\"){domUtils.trimWhiteTextNode(parent);if(parent.tagName==\"SPAN\"&&!domUtils.isSameStyle(parent,node)||parent.tagName==\"A\"&&node.tagName==\"SPAN\"){if(parent.childNodes.length>1||parent!==node.parentNode){node.style.cssText=parent.style.cssText+\";\"+node.style.cssText;parent=parent.parentNode;continue}else{parent.style.cssText+=\";\"+node.style.cssText;if(parent.tagName==\"A\"){parent.style.textDecoration=\"underline\"}}}if(parent.tagName!=\"A\"){parent===node.parentNode&&domUtils.remove(node,true);break}}parent=parent.parentNode}},mergeSibling:function(node,ignorePre,ignoreNext){function merge(rtl,start,node){var next;if((next=node[rtl])&&!domUtils.isBookmarkNode(next)&&next.nodeType==1&&domUtils.isSameElement(node,next)){while(next.firstChild){if(start==\"firstChild\"){node.insertBefore(next.lastChild,node.firstChild)}else{node.appendChild(next.firstChild)}}domUtils.remove(next)}}!ignorePre&&merge(\"previousSibling\",\"firstChild\",node);!ignoreNext&&merge(\"nextSibling\",\"lastChild\",node)},unSelectable:ie&&browser.ie9below||browser.opera?function(node){node.onselectstart=function(){return false};node.onclick=node.onkeyup=node.onkeydown=function(){return false};node.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\");for(var i=0,ci;ci=node.all[i++];){switch(ci.tagName.toLowerCase()){case\"iframe\":case\"textarea\":case\"input\":case\"select\":break;default:ci.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\")}}}:function(node){node.style.MozUserSelect=node.style.webkitUserSelect=node.style.msUserSelect=node.style.KhtmlUserSelect=\"none\"},removeAttributes:function(node,attrNames){attrNames=utils.isArray(attrNames)?attrNames:utils.trim(attrNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci;ci=attrNames[i++];){ci=attrFix[ci]||ci;switch(ci){case\"className\":node[ci]=\"\";break;case\"style\":node.style.cssText=\"\";var val=node.getAttributeNode(\"style\");!browser.ie&&val&&node.removeAttributeNode(val)}node.removeAttribute(ci)}},createElement:function(doc,tag,attrs){return domUtils.setAttributes(doc.createElement(tag),attrs)},setAttributes:function(node,attrs){for(var attr in attrs){if(\"_propertyDelete\"===attr){for(var j=0;j<attrs[attr].length;j++){if(node.hasAttribute(attrs[attr][j])){node.removeAttribute(attrs[attr][j])}}continue}if(attrs.hasOwnProperty(attr)){var value=attrs[attr];switch(attr){case\"class\":node.className=value;break;case\"style\":node.style.cssText=node.style.cssText+\";\"+value;break;case\"innerHTML\":node[attr]=value;break;case\"value\":node.value=value;break;default:node.setAttribute(attrFix[attr]||attr,value)}}}return node},getComputedStyle:function(element,styleName){var pros=\"width height top left\";if(pros.indexOf(styleName)>-1){return element[\"offset\"+styleName.replace(/^\\w/,function(s){return s.toUpperCase()})]+\"px\"}if(element.nodeType===3){element=element.parentNode}if(browser.ie&&browser.version<9&&styleName===\"font-size\"&&!element.style.fontSize&&!dtd.$empty[element.tagName]&&!dtd.$nonChild[element.tagName]){var span=element.ownerDocument.createElement(\"span\");span.style.cssText=\"padding:0;border:0;font-family:simsun;\";span.innerHTML=\".\";element.appendChild(span);var result=span.offsetHeight;element.removeChild(span);span=null;return result+\"px\"}try{var value=domUtils.getStyle(element,styleName)||(window.getComputedStyle?domUtils.getWindow(element).getComputedStyle(element,\"\").getPropertyValue(styleName):(element.currentStyle||element.style)[utils.cssStyleToDomStyle(styleName)])}catch(e){return\"\"}return utils.transUnitToPx(utils.fixColor(styleName,value))},removeClasses:function(elm,classNames){classNames=utils.isArray(classNames)?classNames:utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){cls=cls.replace(new RegExp(\"\\\\b\"+ci+\"\\\\b\"),\"\")}cls=utils.trim(cls).replace(/[ ]{2,}/g,\" \");if(cls){elm.className=cls}else{domUtils.removeAttributes(elm,[\"class\"])}},addClass:function(elm,classNames){if(!elm)return;classNames=utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\").test(cls)){cls+=\" \"+ci}}elm.className=utils.trim(cls)},hasClass:function(element,className){if(utils.isRegExp(className)){return className.test(element.className)}className=utils.trim(className).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=element.className;ci=className[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\",\"i\").test(cls)){return false}}return i-1==className.length},preventDefault:function(evt){evt.preventDefault?evt.preventDefault():evt.returnValue=false},removeStyle:function(element,name){if(browser.ie){if(name==\"color\"){name=\"(^|;)\"+name}element.style.cssText=element.style.cssText.replace(new RegExp(name+\"[^:]*:[^;]+;?\",\"ig\"),\"\")}else{if(element.style.removeProperty){element.style.removeProperty(name)}else{element.style.removeAttribute(utils.cssStyleToDomStyle(name))}}if(!element.style.cssText){domUtils.removeAttributes(element,[\"style\"])}},getStyle:function(element,name){var value=element.style[utils.cssStyleToDomStyle(name)];return utils.fixColor(name,value)},setStyle:function(element,name,value){element.style[utils.cssStyleToDomStyle(name)]=value;if(!utils.trim(element.style.cssText)){this.removeAttributes(element,\"style\")}},setStyles:function(element,styles){for(var name in styles){if(styles.hasOwnProperty(name)){domUtils.setStyle(element,name,styles[name])}}},removeDirtyAttr:function(node){for(var i=0,ci,nodes=node.getElementsByTagName(\"*\");ci=nodes[i++];){ci.removeAttribute(\"_moz_dirty\")}node.removeAttribute(\"_moz_dirty\")},getChildCount:function(node,fn){var count=0,first=node.firstChild;fn=fn||function(){return 1};while(first){if(fn(first)){count++}first=first.nextSibling}return count},isEmptyNode:function(node){return!node.firstChild||domUtils.getChildCount(node,function(node){return!domUtils.isBr(node)&&!domUtils.isBookmarkNode(node)&&!domUtils.isWhitespace(node)})==0},clearSelectedArr:function(nodes){var node;while(node=nodes.pop()){domUtils.removeAttributes(node,[\"class\"])}},scrollToView:function(node,win,offsetTop){offsetTop=offsetTop||0;var getViewPaneSize=function(){var doc=win.document,mode=doc.compatMode==\"CSS1Compat\";return{width:(mode?doc.documentElement.clientWidth:doc.body.clientWidth)||0,height:(mode?doc.documentElement.clientHeight:doc.body.clientHeight)||0}},getScrollPosition=function(win){if(\"pageXOffset\"in win){return{x:win.pageXOffset||0,y:win.pageYOffset||0}}else{var doc=win.document;return{x:doc.documentElement.scrollLeft||doc.body.scrollLeft||0,y:doc.documentElement.scrollTop||doc.body.scrollTop||0}}};var winHeight=getViewPaneSize().height,offset=winHeight*-1+offsetTop;offset+=node.offsetHeight||0;var elementPosition=domUtils.getXY(node);offset+=elementPosition.y;var currentScroll=getScrollPosition(win).y;if(offset>currentScroll||offset<currentScroll-winHeight){win.scrollTo({top:offset+(offset<0?-20:20),behavior:\"smooth\"})}},isBr:function(node){return node.nodeType==1&&node.tagName==\"BR\"},isFillChar:function(node,isInStart){if(node.nodeType!=3)return false;var text=node.nodeValue;if(isInStart){return new RegExp(\"^\"+domUtils.fillChar).test(text)}return!text.replace(new RegExp(domUtils.fillChar,\"g\"),\"\").length},isStartInblock:function(range){var tmpRange=range.cloneRange(),flag=0,start=tmpRange.startContainer,tmp;if(start.nodeType==1&&start.childNodes[tmpRange.startOffset]){start=start.childNodes[tmpRange.startOffset];var pre=start.previousSibling;while(pre&&domUtils.isFillChar(pre)){start=pre;pre=pre.previousSibling}}if(this.isFillChar(start,true)&&tmpRange.startOffset==1){tmpRange.setStartBefore(start);start=tmpRange.startContainer}while(start&&domUtils.isFillChar(start)){tmp=start;start=start.previousSibling}if(tmp){tmpRange.setStartBefore(tmp);start=tmpRange.startContainer}if(start.nodeType==1&&domUtils.isEmptyNode(start)&&tmpRange.startOffset==1){tmpRange.setStart(start,0).collapse(true)}while(!tmpRange.startOffset){start=tmpRange.startContainer;if(domUtils.isBlockElm(start)||domUtils.isBody(start)){flag=1;break}var pre=tmpRange.startContainer.previousSibling,tmpNode;if(!pre){tmpRange.setStartBefore(tmpRange.startContainer)}else{while(pre&&domUtils.isFillChar(pre)){tmpNode=pre;pre=pre.previousSibling}if(tmpNode){tmpRange.setStartBefore(tmpNode)}else{tmpRange.setStartBefore(tmpRange.startContainer)}}}return flag&&!domUtils.isBody(tmpRange.startContainer)?1:0},isEmptyBlock:function(node,reg){if(node.nodeType!=1)return 0;reg=reg||new RegExp(\"[  \\t\\r\\n\"+domUtils.fillChar+\"]\",\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1},setViewportOffset:function(element,offset){var left=parseInt(element.style.left)|0;var top=parseInt(element.style.top)|0;var rect=element.getBoundingClientRect();var offsetLeft=offset.left-rect.left;var offsetTop=offset.top-rect.top;if(offsetLeft){element.style.left=left+offsetLeft+\"px\"}if(offsetTop){element.style.top=top+offsetTop+\"px\"}},fillNode:function(doc,node){var tmpNode=browser.ie?doc.createTextNode(domUtils.fillChar):doc.createElement(\"br\");node.innerHTML=\"\";node.appendChild(tmpNode)},moveChild:function(src,tag,dir){while(src.firstChild){if(dir&&tag.firstChild){tag.insertBefore(src.lastChild,tag.firstChild)}else{tag.appendChild(src.firstChild)}}},hasNoAttributes:function(node){return browser.ie?/^<\\w+\\s*?>/.test(node.outerHTML):node.attributes.length==0},isCustomeNode:function(node){return node.nodeType==1&&node.getAttribute(\"_ue_custom_node_\")},isTagNode:function(node,tagNames){return node.nodeType==1&&new RegExp(\"\\\\b\"+node.tagName+\"\\\\b\",\"i\").test(tagNames)},filterNodeList:function(nodelist,filter,forAll){var results=[];if(!utils.isFunction(filter)){var str=filter;filter=function(n){return utils.indexOf(utils.isArray(str)?str:str.split(\" \"),n.tagName.toLowerCase())!=-1}}utils.each(nodelist,function(n){filter(n)&&results.push(n)});return results.length==0?null:results.length==1||!forAll?results[0]:results},isInNodeEndBoundary:function(rng,node){var start=rng.startContainer;if(start.nodeType==3&&rng.startOffset!=start.nodeValue.length){return 0}if(start.nodeType==1&&rng.startOffset!=start.childNodes.length){return 0}while(start!==node){if(start.nextSibling){return 0}start=start.parentNode}return 1},isBoundaryNode:function(node,dir){var tmp;while(!domUtils.isBody(node)){tmp=node;node=node.parentNode;if(tmp!==node[dir]){return false}}return true},fillHtml:browser.ie11below?\"&nbsp;\":\"<br/>\",loadScript:function(url,cb){var script;script=document.createElement(\"script\");script.src=url;script.onload=function(){cb&&cb({isNew:true})};document.getElementsByTagName(\"head\")[0].appendChild(script)}};var fillCharReg=new RegExp(domUtils.fillChar,\"g\");(function(){var guid=0,fillChar=domUtils.fillChar,fillData;function updateCollapse(range){range.collapsed=range.startContainer&&range.endContainer&&range.startContainer===range.endContainer&&range.startOffset===range.endOffset}function selectOneNode(rng){return!rng.collapsed&&rng.startContainer.nodeType===1&&rng.startContainer===rng.endContainer&&rng.endOffset-rng.startOffset===1}function setEndPoint(toStart,node,offset,range){if(node.nodeType===1&&(dtd.$empty[node.tagName]||dtd.$nonChild[node.tagName])){offset=domUtils.getNodeIndex(node)+(toStart?0:1);node=node.parentNode}if(toStart){range.startContainer=node;range.startOffset=offset;if(!range.endContainer){range.collapse(true)}}else{range.endContainer=node;range.endOffset=offset;if(!range.startContainer){range.collapse(false)}}updateCollapse(range);return range}function execContentsAction(range,action){var start=range.startContainer,end=range.endContainer,startOffset=range.startOffset,endOffset=range.endOffset,doc=range.document,frag=doc.createDocumentFragment(),tmpStart,tmpEnd;if(start.nodeType==1){start=start.childNodes[startOffset]||(tmpStart=start.appendChild(doc.createTextNode(\"\")))}if(end.nodeType==1){end=end.childNodes[endOffset]||(tmpEnd=end.appendChild(doc.createTextNode(\"\")))}if(start===end&&start.nodeType==3){frag.appendChild(doc.createTextNode(start.substringData(startOffset,endOffset-startOffset)));if(action){start.deleteData(startOffset,endOffset-startOffset);range.collapse(true)}return frag}var current,currentLevel,clone=frag,startParents=domUtils.findParents(start,true),endParents=domUtils.findParents(end,true);for(var i=0;startParents[i]==endParents[i];){i++}for(var j=i,si;si=startParents[j];j++){current=si.nextSibling;if(si==start){if(!tmpStart){if(range.startContainer.nodeType==3){clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset)));if(action){start.deleteData(startOffset,start.nodeValue.length-startOffset)}}else{clone.appendChild(!action?start.cloneNode(true):start)}}}else{currentLevel=si.cloneNode(false);clone.appendChild(currentLevel)}while(current){if(current===end||current===endParents[j]){break}si=current.nextSibling;clone.appendChild(!action?current.cloneNode(true):current);current=si}clone=currentLevel}clone=frag;if(!startParents[i]){clone.appendChild(startParents[i-1].cloneNode(false));clone=clone.firstChild}for(var j=i,ei;ei=endParents[j];j++){current=ei.previousSibling;if(ei==end){if(!tmpEnd&&range.endContainer.nodeType==3){clone.appendChild(doc.createTextNode(end.substringData(0,endOffset)));if(action){end.deleteData(0,endOffset)}}}else{currentLevel=ei.cloneNode(false);clone.appendChild(currentLevel)}if(j!=i||!startParents[i]){while(current){if(current===start){break}ei=current.previousSibling;clone.insertBefore(!action?current.cloneNode(true):current,clone.firstChild);current=ei}}clone=currentLevel}if(action){range.setStartBefore(!endParents[i]?endParents[i-1]:!startParents[i]?startParents[i-1]:endParents[i]).collapse(true)}tmpStart&&domUtils.remove(tmpStart);tmpEnd&&domUtils.remove(tmpEnd);return frag}var Range=dom.Range=function(document){var me=this;me.startContainer=me.startOffset=me.endContainer=me.endOffset=null;me.document=document;me.collapsed=true};function removeFillData(doc,excludeNode){try{if(fillData&&domUtils.inDoc(fillData,doc)){if(!fillData.nodeValue.replace(fillCharReg,\"\").length){var tmpNode=fillData.parentNode;domUtils.remove(fillData);while(tmpNode&&domUtils.isEmptyInlineElement(tmpNode)&&(browser.safari?!(domUtils.getPosition(tmpNode,excludeNode)&domUtils.POSITION_CONTAINS):!tmpNode.contains(excludeNode))){fillData=tmpNode.parentNode;domUtils.remove(tmpNode);tmpNode=fillData}}else{fillData.nodeValue=fillData.nodeValue.replace(fillCharReg,\"\")}}}catch(e){}}function mergeSibling(node,dir){var tmpNode;node=node[dir];while(node&&domUtils.isFillChar(node)){tmpNode=node[dir];domUtils.remove(node);node=tmpNode}}Range.prototype={cloneContents:function(){return this.collapsed?null:execContentsAction(this,0)},deleteContents:function(){var txt;if(!this.collapsed){execContentsAction(this,1)}if(browser.webkit){txt=this.startContainer;if(txt.nodeType==3&&!txt.nodeValue.length){this.setStartBefore(txt).collapse(true);domUtils.remove(txt)}}return this},extractContents:function(){return this.collapsed?null:execContentsAction(this,2)},setStart:function(node,offset){return setEndPoint(true,node,offset,this)},setEnd:function(node,offset){return setEndPoint(false,node,offset,this)},setStartAfter:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node)+1)},setStartBefore:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node))},setEndAfter:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node)+1)},setEndBefore:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node))},setStartAtFirst:function(node){return this.setStart(node,0)},setStartAtLast:function(node){return this.setStart(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},setEndAtFirst:function(node){return this.setEnd(node,0)},setEndAtLast:function(node){return this.setEnd(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},selectNode:function(node){return this.setStartBefore(node).setEndAfter(node)},selectNodeContents:function(node){return this.setStart(node,0).setEndAtLast(node)},cloneRange:function(){var me=this;return new Range(me.document).setStart(me.startContainer,me.startOffset).setEnd(me.endContainer,me.endOffset)},collapse:function(toStart){var me=this;if(toStart){me.endContainer=me.startContainer;me.endOffset=me.startOffset}else{me.startContainer=me.endContainer;me.startOffset=me.endOffset}me.collapsed=true;return me},shrinkBoundary:function(ignoreEnd){var me=this,child,collapsed=me.collapsed;function check(node){return node.nodeType==1&&!domUtils.isBookmarkNode(node)&&!dtd.$empty[node.tagName]&&!dtd.$nonChild[node.tagName]}while(me.startContainer.nodeType==1&&(child=me.startContainer.childNodes[me.startOffset])&&check(child)){me.setStart(child,0)}if(collapsed){return me.collapse(true)}if(!ignoreEnd){while(me.endContainer.nodeType==1&&me.endOffset>0&&(child=me.endContainer.childNodes[me.endOffset-1])&&check(child)){me.setEnd(child,child.childNodes.length)}}return me},getCommonAncestor:function(includeSelf,ignoreTextNode){var me=this,start=me.startContainer,end=me.endContainer;if(start===end){if(includeSelf&&selectOneNode(this)){start=start.childNodes[me.startOffset];if(start.nodeType==1)return start}return ignoreTextNode&&start.nodeType==3?start.parentNode:start}return domUtils.getCommonAncestor(start,end)},trimBoundary:function(ignoreEnd){this.txtToElmBoundary();var start=this.startContainer,offset=this.startOffset,collapsed=this.collapsed,end=this.endContainer;if(start.nodeType==3){if(offset==0){this.setStartBefore(start)}else{if(offset>=start.nodeValue.length){this.setStartAfter(start)}else{var textNode=domUtils.split(start,offset);if(start===end){this.setEnd(textNode,this.endOffset-offset)}else if(start.parentNode===end){this.endOffset+=1}this.setStartBefore(textNode)}}if(collapsed){return this.collapse(true)}}if(!ignoreEnd){offset=this.endOffset;end=this.endContainer;if(end.nodeType==3){if(offset==0){this.setEndBefore(end)}else{offset<end.nodeValue.length&&domUtils.split(end,offset);this.setEndAfter(end)}}}return this},txtToElmBoundary:function(ignoreCollapsed){function adjust(r,c){var container=r[c+\"Container\"],offset=r[c+\"Offset\"];if(container.nodeType==3){if(!offset){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"Before\"](container)}else if(offset>=container.nodeValue.length){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"After\"](container)}}}if(ignoreCollapsed||!this.collapsed){adjust(this,\"start\");adjust(this,\"end\")}return this},insertNode:function(node){var first=node,length=1;if(node.nodeType==11){first=node.firstChild;length=node.childNodes.length}this.trimBoundary(true);var start=this.startContainer,offset=this.startOffset;var nextNode=start.childNodes[offset];if(nextNode){start.insertBefore(node,nextNode)}else{start.appendChild(node)}if(first.parentNode===this.endContainer){this.endOffset=this.endOffset+length}return this.setStartBefore(first)},setCursor:function(toEnd,noFillData){return this.collapse(!toEnd).select(noFillData)},createBookmark:function(serialize,same){var endNode,startNode=this.document.createElement(\"span\");startNode.style.cssText=\"display:none;line-height:0px;\";startNode.appendChild(this.document.createTextNode(\"‍\"));startNode.id=\"_baidu_bookmark_start_\"+(same?\"\":guid++);if(!this.collapsed){endNode=startNode.cloneNode(true);endNode.id=\"_baidu_bookmark_end_\"+(same?\"\":guid++)}this.insertNode(startNode);if(endNode){this.collapse().insertNode(endNode).setEndBefore(endNode)}this.setStartAfter(startNode);return{start:serialize?startNode.id:startNode,end:endNode?serialize?endNode.id:endNode:null,id:serialize}},moveToBookmark:function(bookmark){var start=bookmark.id?this.document.getElementById(bookmark.start):bookmark.start,end=bookmark.end&&bookmark.id?this.document.getElementById(bookmark.end):bookmark.end;this.setStartBefore(start);domUtils.remove(start);if(end){this.setEndBefore(end);domUtils.remove(end)}else{this.collapse(true)}return this},enlarge:function(toBlock,stopFn){var isBody=domUtils.isBody,pre,node,tmp=this.document.createTextNode(\"\");if(toBlock){node=this.startContainer;if(node.nodeType==1){if(node.childNodes[this.startOffset]){pre=node=node.childNodes[this.startOffset]}else{node.appendChild(tmp);pre=node=tmp}}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.previousSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setStartBefore(node);break}pre=node;node=node.parentNode}node=this.endContainer;if(node.nodeType==1){if(pre=node.childNodes[this.endOffset]){node.insertBefore(tmp,pre)}else{node.appendChild(tmp)}pre=node=tmp}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.nextSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setEndAfter(node);break}pre=node;node=node.parentNode}if(tmp.parentNode===this.endContainer){this.endOffset--}domUtils.remove(tmp)}if(!this.collapsed){while(this.startOffset==0){if(stopFn&&stopFn(this.startContainer)){break}if(isBody(this.startContainer)){break}this.setStartBefore(this.startContainer)}while(this.endOffset==(this.endContainer.nodeType==1?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)){if(stopFn&&stopFn(this.endContainer)){break}if(isBody(this.endContainer)){break}this.setEndAfter(this.endContainer)}}return this},enlargeToBlockElm:function(ignoreEnd){while(!domUtils.isBlockElm(this.startContainer)){this.setStartBefore(this.startContainer)}if(!ignoreEnd){while(!domUtils.isBlockElm(this.endContainer)){this.setEndAfter(this.endContainer)}}return this},adjustmentBoundary:function(){if(!this.collapsed){while(!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length&&this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setStartAfter(this.startContainer)}while(!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[this.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setEndBefore(this.endContainer)}}return this},applyInlineStyle:function(tagName,attrs,list){if(this.collapsed)return this;this.trimBoundary().enlarge(false,function(node){return node.nodeType==1&&domUtils.isBlockElm(node)}).adjustmentBoundary();var bookmark=this.createBookmark(),end=bookmark.end,filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},current=domUtils.getNextDomNode(bookmark.start,false,filterFn),node,pre,range=this.cloneRange();while(current&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd[tagName][current.tagName]){range.setStartBefore(current);node=current;while(node&&(node.nodeType==3||dtd[tagName][node.tagName])&&node!==end){pre=node;node=domUtils.getNextDomNode(node,node.nodeType==1,null,function(parent){return dtd[tagName][parent.tagName]})}var frag=range.setEndAfter(pre).extractContents(),elm;if(list&&list.length>0){var level,top;top=level=list[0].cloneNode(false);for(var i=1,ci;ci=list[i++];){level.appendChild(ci.cloneNode(false));level=level.firstChild}elm=level}else{elm=range.document.createElement(tagName)}if(attrs){domUtils.setAttributes(elm,attrs)}elm.appendChild(frag);if(elm.tagName==\"SPAN\"&&attrs&&attrs.style){utils.each(elm.getElementsByTagName(\"span\"),function(s){s.style.cssText=s.style.cssText+\";\"+attrs.style})}range.insertNode(list?top:elm);var aNode;if(tagName==\"span\"&&attrs.style&&/text\\-decoration/.test(attrs.style)&&(aNode=domUtils.findParentByTagName(elm,\"a\",true))){domUtils.setAttributes(aNode,attrs);domUtils.remove(elm,true);elm=aNode}else{domUtils.mergeSibling(elm);domUtils.clearEmptySibling(elm)}domUtils.mergeChild(elm,attrs);current=domUtils.getNextDomNode(elm,false,filterFn);domUtils.mergeToParent(elm);if(node===end){break}}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return this.moveToBookmark(bookmark)},removeInlineStyle:function(tagNames){if(this.collapsed)return this;tagNames=utils.isArray(tagNames)?tagNames:[tagNames];this.shrinkBoundary().adjustmentBoundary();var start=this.startContainer,end=this.endContainer;while(1){if(start.nodeType==1){if(utils.indexOf(tagNames,start.tagName.toLowerCase())>-1){break}if(start.tagName.toLowerCase()==\"body\"){start=null;break}}start=start.parentNode}while(1){if(end.nodeType==1){if(utils.indexOf(tagNames,end.tagName.toLowerCase())>-1){break}if(end.tagName.toLowerCase()==\"body\"){end=null;break}}end=end.parentNode}var bookmark=this.createBookmark(),frag,tmpRange;if(start){tmpRange=this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(start,true);start.parentNode.insertBefore(bookmark.start,start)}if(end){tmpRange=this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(end,false,true);end.parentNode.insertBefore(bookmark.end,end.nextSibling)}var current=domUtils.getNextDomNode(bookmark.start,false,function(node){return node.nodeType==1}),next;while(current&&current!==bookmark.end){next=domUtils.getNextDomNode(current,true,function(node){return node.nodeType==1});if(utils.indexOf(tagNames,current.tagName.toLowerCase())>-1){domUtils.remove(current,true)}current=next}return this.moveToBookmark(bookmark)},getClosedNode:function(){var node;if(!this.collapsed){var range=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(selectOneNode(range)){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&(dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName])){node=child}}}return node},select:browser.ie?function(noFillData,textRange){var nativeRange;if(!this.collapsed)this.shrinkBoundary();var node=this.getClosedNode();if(node&&!textRange){try{nativeRange=this.document.body.createControlRange();nativeRange.addElement(node);nativeRange.select()}catch(e){}return this}var bookmark=this.createBookmark(),start=bookmark.start,end;nativeRange=this.document.body.createTextRange();nativeRange.moveToElementText(start);nativeRange.moveStart(\"character\",1);if(!this.collapsed){var nativeRangeEnd=this.document.body.createTextRange();end=bookmark.end;nativeRangeEnd.moveToElementText(end);nativeRange.setEndPoint(\"EndToEnd\",nativeRangeEnd)}else{if(!noFillData&&this.startContainer.nodeType!=3){var tmpText=this.document.createTextNode(fillChar),tmp=this.document.createElement(\"span\");tmp.appendChild(this.document.createTextNode(fillChar));start.parentNode.insertBefore(tmp,start);start.parentNode.insertBefore(tmpText,start);removeFillData(this.document,tmpText);fillData=tmpText;mergeSibling(tmp,\"previousSibling\");mergeSibling(start,\"nextSibling\");nativeRange.moveStart(\"character\",-1);nativeRange.collapse(true)}}this.moveToBookmark(bookmark);tmp&&domUtils.remove(tmp);try{nativeRange.select()}catch(e){}return this}:function(notInsertFillData){function checkOffset(rng){function check(node,offset,dir){if(node.nodeType==3&&node.nodeValue.length<offset){rng[dir+\"Offset\"]=node.nodeValue.length}}check(rng.startContainer,rng.startOffset,\"start\");check(rng.endContainer,rng.endOffset,\"end\")}var win=domUtils.getWindow(this.document),sel=win.getSelection(),txtNode;browser.gecko?this.document.body.focus():win.focus();if(sel){sel.removeAllRanges();if(this.collapsed&&!notInsertFillData){var start=this.startContainer,child=start;if(start.nodeType==1){child=start.childNodes[this.startOffset]}if(!(start.nodeType==3&&this.startOffset)&&(child?!child.previousSibling||child.previousSibling.nodeType!=3:!start.lastChild||start.lastChild.nodeType!=3)){txtNode=this.document.createTextNode(fillChar);this.insertNode(txtNode);removeFillData(this.document,txtNode);mergeSibling(txtNode,\"previousSibling\");mergeSibling(txtNode,\"nextSibling\");fillData=txtNode;this.setStart(txtNode,browser.webkit?1:0).collapse(true)}}var nativeRange=this.document.createRange();if(this.collapsed&&browser.opera&&this.startContainer.nodeType==1){var child=this.startContainer.childNodes[this.startOffset];if(!child){child=this.startContainer.lastChild;if(child&&domUtils.isBr(child)){this.setStartBefore(child).collapse(true)}}else{while(child&&domUtils.isBlockElm(child)){if(child.nodeType==1&&child.childNodes[0]){child=child.childNodes[0]}else{break}}child&&this.setStartBefore(child).collapse(true)}}checkOffset(this);nativeRange.setStart(this.startContainer,this.startOffset);nativeRange.setEnd(this.endContainer,this.endOffset);sel.addRange(nativeRange)}return this},scrollToView:function(win,offset){win=win?window:domUtils.getWindow(this.document);offset=offset||win.innerHeight-100;var me=this,span=me.document.createElement(\"span\");span.innerHTML=\"&nbsp;\";me.cloneRange().insertNode(span);domUtils.scrollToView(span,win,offset);domUtils.remove(span);return me},inFillChar:function(){var start=this.startContainer;if(this.collapsed&&start.nodeType==3&&start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\").length+1==start.nodeValue.length){return true}return false},createAddress:function(ignoreEnd,ignoreTxt){var addr={},me=this;function getAddress(isStart){var node=isStart?me.startContainer:me.endContainer;var parents=domUtils.findParents(node,true,function(node){return!domUtils.isBody(node)}),addrs=[];for(var i=0,ci;ci=parents[i++];){addrs.push(domUtils.getNodeIndex(ci,ignoreTxt))}var firstIndex=0;if(ignoreTxt){if(node.nodeType==3){var tmpNode=node.previousSibling;while(tmpNode&&tmpNode.nodeType==3){firstIndex+=tmpNode.nodeValue.replace(fillCharReg,\"\").length;tmpNode=tmpNode.previousSibling}firstIndex+=isStart?me.startOffset:me.endOffset}else{node=node.childNodes[isStart?me.startOffset:me.endOffset];if(node){firstIndex=domUtils.getNodeIndex(node,ignoreTxt)}else{node=isStart?me.startContainer:me.endContainer;var first=node.firstChild;while(first){if(domUtils.isFillChar(first)){first=first.nextSibling;continue}firstIndex++;if(first.nodeType==3){while(first&&first.nodeType==3){first=first.nextSibling}}else{first=first.nextSibling}}}}}else{firstIndex=isStart?domUtils.isFillChar(node)?0:me.startOffset:me.endOffset}if(firstIndex<0){firstIndex=0}addrs.push(firstIndex);return addrs}addr.startAddress=getAddress(true);if(!ignoreEnd){addr.endAddress=me.collapsed?[].concat(addr.startAddress):getAddress()}return addr},moveToAddress:function(addr,ignoreEnd){var me=this;function getNode(address,isStart){var tmpNode=me.document.body,parentNode,offset;for(var i=0,ci,l=address.length;i<l;i++){ci=address[i];parentNode=tmpNode;tmpNode=tmpNode.childNodes[ci];if(!tmpNode){offset=ci;break}}if(isStart){if(tmpNode){me.setStartBefore(tmpNode)}else{me.setStart(parentNode,offset)}}else{if(tmpNode){me.setEndBefore(tmpNode)}else{me.setEnd(parentNode,offset)}}}getNode(addr.startAddress,true);!ignoreEnd&&addr.endAddress&&getNode(addr.endAddress);return me},equals:function(rng){for(var p in this){if(this.hasOwnProperty(p)){if(this[p]!==rng[p])return false}}return true},traversal:function(doFn,filterFn){if(this.collapsed)return this;var bookmark=this.createBookmark(),end=bookmark.end,current=domUtils.getNextDomNode(bookmark.start,false,filterFn);while(current&&current!==end&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){var tmpNode=domUtils.getNextDomNode(current,false,filterFn);doFn(current);current=tmpNode}return this.moveToBookmark(bookmark)}}})();(function(){function getBoundaryInformation(range,start){var getIndex=domUtils.getNodeIndex;range=range.duplicate();range.collapse(start);var parent=range.parentElement();if(!parent.hasChildNodes()){return{container:parent,offset:0}}var siblings=parent.children,child,testRange=range.duplicate(),startIndex=0,endIndex=siblings.length-1,index=-1,distance;while(startIndex<=endIndex){index=Math.floor((startIndex+endIndex)/2);child=siblings[index];testRange.moveToElementText(child);var position=testRange.compareEndPoints(\"StartToStart\",range);if(position>0){endIndex=index-1}else if(position<0){startIndex=index+1}else{return{container:parent,offset:getIndex(child)}}}if(index==-1){testRange.moveToElementText(parent);testRange.setEndPoint(\"StartToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;siblings=parent.childNodes;if(!distance){child=siblings[siblings.length-1];return{container:child,offset:child.nodeValue.length}}var i=siblings.length;while(distance>0){distance-=siblings[--i].nodeValue.length}return{container:siblings[i],offset:-distance}}testRange.collapse(position>0);testRange.setEndPoint(position>0?\"StartToStart\":\"EndToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;if(!distance){return dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName]?{container:parent,offset:getIndex(child)+(position>0?0:1)}:{container:child,offset:position>0?0:child.childNodes.length}}while(distance>0){try{var pre=child;child=child[position>0?\"previousSibling\":\"nextSibling\"];distance-=child.nodeValue.length}catch(e){return{container:parent,offset:getIndex(pre)}}}return{container:child,offset:position>0?-distance:child.nodeValue.length+distance}}function transformIERangeToRange(ieRange,range){if(ieRange.item){range.selectNode(ieRange.item(0))}else{var bi=getBoundaryInformation(ieRange,true);range.setStart(bi.container,bi.offset);if(ieRange.compareEndPoints(\"StartToEnd\",ieRange)!=0){bi=getBoundaryInformation(ieRange,false);range.setEnd(bi.container,bi.offset)}}return range}function _getIERange(sel){var ieRange;try{ieRange=sel.getNative().createRange()}catch(e){return null}var el=ieRange.item?ieRange.item(0):ieRange.parentElement();if((el.ownerDocument||el)===sel.document){return ieRange}return null}var Selection=dom.Selection=function(doc){var me=this,iframe;me.document=doc;if(browser.ie9below){iframe=domUtils.getWindow(doc).frameElement;domUtils.on(iframe,\"beforedeactivate\",function(){me._bakIERange=me.getIERange()});domUtils.on(iframe,\"activate\",function(){try{if(!_getIERange(me)&&me._bakIERange){me._bakIERange.select()}}catch(ex){}me._bakIERange=null})}iframe=doc=null};Selection.prototype={rangeInBody:function(rng,txtRange){var node=browser.ie9below||txtRange?rng.item?rng.item():rng.parentElement():rng.startContainer;return node===this.document.body||domUtils.inDoc(node,this.document)},getNative:function(){var doc=this.document;try{return!doc?null:browser.ie9below?doc.selection:domUtils.getWindow(doc).getSelection()}catch(e){return null}},getIERange:function(){var ieRange=_getIERange(this);if(!ieRange){if(this._bakIERange){return this._bakIERange}}return ieRange},cache:function(){this.clear();this._cachedRange=this.getRange();this._cachedStartElement=this.getStart();this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath){return this._cachedStartElementPath}var start=this.getStart();if(start){return domUtils.findParents(start,true,null,true)}return[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var nativeRange=_getIERange(this);return!!(nativeRange&&this.rangeInBody(nativeRange))}else{return!!this.getNative().rangeCount}}catch(e){return false}},getRange:function(){var me=this;function optimze(range){var child=me.document.body.firstChild,collapsed=range.collapsed;while(child&&child.firstChild){range.setStart(child,0);child=child.firstChild}if(!range.startContainer){range.setStart(me.document.body,0)}if(collapsed){range.collapse(true)}}if(me._cachedRange!=null){return this._cachedRange}var range=new baidu.editor.dom.Range(me.document);if(browser.ie9below){var nativeRange=me.getIERange();if(nativeRange){try{transformIERangeToRange(nativeRange,range)}catch(e){optimze(range)}}else{optimze(range)}}else{var sel=me.getNative();if(sel&&sel.rangeCount){var firstRange=sel.getRangeAt(0);var lastRange=sel.getRangeAt(sel.rangeCount-1);range.setStart(firstRange.startContainer,firstRange.startOffset).setEnd(lastRange.endContainer,lastRange.endOffset);if(range.collapsed&&domUtils.isBody(range.startContainer)&&!range.startOffset){optimze(range)}}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document)){return this._bakRange}optimze(range)}}return this._bakRange=range},getStart:function(){if(this._cachedStartElement){return this._cachedStartElement}var range=browser.ie9below?this.getIERange():this.getRange(),tmpRange,start,tmp,parent;if(browser.ie9below){if(!range){return this.document.body.firstChild}if(range.item){return range.item(0)}tmpRange=range.duplicate();tmpRange.text.length>0&&tmpRange.moveStart(\"character\",1);tmpRange.collapse(1);start=tmpRange.parentElement();parent=tmp=range.parentElement();while(tmp=tmp.parentNode){if(tmp==start){start=parent;break}}}else{range.shrinkBoundary();start=range.startContainer;if(start.nodeType==1&&start.hasChildNodes()){start=start.childNodes[Math.min(start.childNodes.length-1,range.startOffset)]}if(start.nodeType==3){return start.parentNode}}return start},getText:function(){var nativeSel,nativeRange;if(this.isFocus()&&(nativeSel=this.getNative())){nativeRange=browser.ie9below?nativeSel.createRange():nativeSel.getRangeAt(0);return browser.ie9below?nativeRange.text:nativeRange.toString()}return\"\"},clearRange:function(){this.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]()}}})();(function(){var uid=0,_selectionChangeTimer;function setValue(form,editor){if(!editor.options.textarea){return}var textarea;textarea=editor.textarea;if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.id===\"ueditor_textarea_\"+editor.options.textarea})[0]}if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.name===editor.options.textarea})[0]}if(!textarea){form.appendChild(textarea=domUtils.createElement(document,\"textarea\",{name:editor.options.textarea,id:\"ueditor_textarea_\"+editor.options.textarea,style:\"display:none\"}))}if(textarea&&!editor.textarea){editor.textarea=textarea}!textarea.getAttribute(\"name\")&&textarea.setAttribute(\"name\",editor.options.textarea);textarea.value=editor.hasContents()?editor.options.allHtmlEnabled?editor.getAllHtml():editor.getContent(null,null,true):\"\"}function loadPlugins(me){for(var pi in UE.plugins){UE.plugins[pi].call(me)}}function checkCurLang(I18N){for(var lang in I18N){return lang}}function langReadied(me){me.langIsReady=true;me.fireEvent(\"langReady\")}var Editor=UE.Editor=function(options){var me=this;me.uid=uid++;EventBase.call(me);me.commands={};me.options=utils.extend(utils.clone(options||{}),UEDITOR_CONFIG,true);me.shortcutkeys={};me.inputRules=[];me.outputRules=[];me.setOpt(Editor.defaultOptions(me));me.loadServerConfig();if(!utils.isEmptyObject(UE.I18N)){me.options.lang=checkCurLang(UE.I18N);UE.plugin.load(me);langReadied(me)}else{utils.loadFile(document,{src:me.options.langPath+me.options.lang+\"/\"+me.options.lang+\".js?7a537435\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){UE.plugin.load(me);langReadied(me)})}UE.instants[\"ueditorInstant\"+me.uid]=me};Editor.prototype={registerCommand:function(name,obj){this.commands[name]=obj},ready:function(fn){var me=this;if(fn){me.isReady?fn.apply(me):me.addListener(\"ready\",fn)}},setOpt:function(key,val){var obj={};if(utils.isString(key)){obj[key]=val}else{obj=key}utils.extend(this.options,obj,true)},getOpt:function(key){return this.options[key]},destroy:function(){var me=this;me.fireEvent(\"destroy\");var container=me.container.parentNode;var textarea=me.textarea;if(!textarea){textarea=document.createElement(\"textarea\");container.parentNode.insertBefore(textarea,container)}else{textarea.style.display=\"\"}textarea.style.width=me.iframe.offsetWidth+\"px\";textarea.style.height=me.iframe.offsetHeight+\"px\";textarea.value=me.getContent();textarea.id=me.key;container.innerHTML=\"\";domUtils.remove(container);var key=me.key;for(var p in me){if(me.hasOwnProperty(p)){delete this[p]}}UE.delEditor(key)},render:function(container){var me=this,options=me.options,getStyleValue=function(attr){return parseInt(domUtils.getComputedStyle(container,attr))};if(utils.isString(container)){container=document.getElementById(container)}if(container){if(options.initialFrameWidth){options.minFrameWidth=options.initialFrameWidth}else{options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(options.initialFrameHeight){options.minFrameHeight=options.initialFrameHeight}else{options.initialFrameHeight=options.minFrameHeight=container.offsetHeight}container.style.width=/%$/.test(options.initialFrameWidth)?\"100%\":options.initialFrameWidth-getStyleValue(\"padding-left\")-getStyleValue(\"padding-right\")+\"px\";container.style.height=/%$/.test(options.initialFrameHeight)?\"100%\":options.initialFrameHeight-getStyleValue(\"padding-top\")-getStyleValue(\"padding-bottom\")+\"px\";container.style.zIndex=options.zIndex;var additionCssHtml=[];for(var i in options.iframeCssUrlsAddition){additionCssHtml.push(\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrlsAddition[i])+\"'/>\")}var html=(ie&&browser.version<9?\"\":\"<!DOCTYPE html>\")+\"<html xmlns='http://www.w3.org/1999/xhtml' class='view' >\"+\"<head>\"+\"<style type='text/css'>\"+\".view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\n\"+\"body{margin:8px;font-family:sans-serif;font-size:16px;}\"+\"p{margin:5px 0;}</style>\"+(options.iframeCssUrl?\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrl)+\"'/>\":\"\")+(options.initialStyle?\"<style>\"+options.initialStyle+\"</style>\":\"\")+additionCssHtml.join(\"\")+\"</head>\"+\"<body class='view' ></body>\"+\"<script type='text/javascript' \"+(ie?\"defer='defer'\":\"\")+\" id='_initialScript'>\"+\"setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\"+me.uid+\"'];editor._setup(document);},0);\"+\"var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);\"+\"<\\/script>\"+(options.iframeJsUrl?\"<script type='text/javascript' src='\"+utils.unhtml(options.iframeJsUrl)+\"'><\\/script>\":\"\")+\"</html>\";container.appendChild(domUtils.createElement(document,\"iframe\",{id:\"ueditor_\"+me.uid,width:\"100%\",height:\"100%\",frameborder:\"0\",src:\"javascript:void(function(){document.open();\"+(options.customDomain&&document.domain!=location.hostname?'document.domain=\"'+document.domain+'\";':\"\")+'document.write(\"'+html+'\");document.close();}())'}));container.style.overflow=\"hidden\";setTimeout(function(){if(/%$/.test(options.initialFrameWidth)){options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(/%$/.test(options.initialFrameHeight)){options.minFrameHeight=options.initialFrameHeight=container.offsetHeight;container.style.height=options.initialFrameHeight+\"px\"}})}},_setup:function(doc){var me=this,options=me.options;if(ie){doc.body.disabled=true;doc.body.contentEditable=true;doc.body.disabled=false}else{doc.body.contentEditable=true}doc.body.spellcheck=false;me.document=doc;me.window=doc.defaultView||doc.parentWindow;me.iframe=me.window.frameElement;me.body=doc.body;me.selection=new dom.Selection(doc);var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}this._initEvents();for(var form=this.iframe.parentNode;!domUtils.isBody(form);form=form.parentNode){if(form.tagName===\"FORM\"){me.form=form;if(me.options.autoSyncData){domUtils.on(me.window,\"blur\",function(){setValue(form,me)});domUtils.on(form,\"submit\",function(){me.fireEvent(\"beforesubmit\")})}else{domUtils.on(form,\"submit\",function(){setValue(this,me);me.fireEvent(\"beforesubmit\")})}break}}if(options.initialContent){if(options.autoClearinitialContent){var oldExecCommand=me.execCommand;me.execCommand=function(){me.fireEvent(\"firstBeforeExecCommand\");return oldExecCommand.apply(me,arguments)};this._setDefaultContent(options.initialContent)}else this.setContent(options.initialContent,false,true)}if(domUtils.isEmptyNode(me.body)){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"}if(options.focus){setTimeout(function(){me.focus(me.options.focusInEnd);!me.options.autoClearinitialContent&&me._selectionChange()},0)}if(!me.container){me.container=this.iframe.parentNode}if(options.fullscreen&&me.ui){me.ui.setFullScreen(true)}try{me.document.execCommand(\"2D-position\",false,false)}catch(e){}try{me.document.execCommand(\"enableInlineTableEditing\",false,false)}catch(e){}try{me.document.execCommand(\"enableObjectResizing\",false,false)}catch(e){}me._bindshortcutKeys();me.isReady=1;me.fireEvent(\"ready\");options.onready&&options.onready.call(me);if(!browser.ie9below){domUtils.on(me.window,[\"blur\",\"focus\"],function(e){if(e.type==\"blur\"){me._bakRange=me.selection.getRange();try{me._bakNativeRange=me.selection.getNative().getRangeAt(0);me.selection.getNative().removeAllRanges()}catch(e){me._bakNativeRange=null}}else{try{me._bakRange&&me._bakRange.select()}catch(e){}}})}if(browser.gecko&&browser.version<=10902){me.body.contentEditable=false;setTimeout(function(){me.body.contentEditable=true},100);setInterval(function(){me.body.style.height=me.iframe.offsetHeight-20+\"px\"},100)}!options.isShow&&me.setHide();options.readonly&&me.setDisabled()},sync:function(formId){var me=this,form=formId?document.getElementById(formId):domUtils.findParent(me.iframe.parentNode,function(node){return node.tagName===\"FORM\"},true);form&&setValue(form,me)},syncCommandState:function(){this.fireEvent(\"selectionchange\")},setWidth:function(width){if(width!==parseInt(this.iframe.parentNode.parentNode.style.width)){this.iframe.parentNode.parentNode.style.width=width+\"px\"}},setHeight:function(height,notSetHeight){if(height!==parseInt(this.iframe.parentNode.style.height)){this.iframe.parentNode.style.height=height+\"px\"}!notSetHeight&&(this.options.minFrameHeight=this.options.initialFrameHeight=height);this.body.style.height=height+\"px\";!notSetHeight&&this.trigger(\"setHeight\")},addshortcutkey:function(cmd,keys){var obj={};if(keys){obj[cmd]=keys}else{obj=cmd}utils.extend(this.shortcutkeys,obj)},_bindshortcutKeys:function(){var me=this,shortcutkeys=this.shortcutkeys;me.addListener(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;for(var i in shortcutkeys){var tmp=shortcutkeys[i].split(\",\");for(var t=0,ti;ti=tmp[t++];){ti=ti.split(\":\");var key=ti[0],param=ti[1];if(/^(ctrl)(\\+shift)?\\+(\\d+)$/.test(key.toLowerCase())||/^(\\d+)$/.test(key)){if((RegExp.$1==\"ctrl\"?e.ctrlKey||e.metaKey:0)&&(RegExp.$2!=\"\"?e[RegExp.$2.slice(1)+\"Key\"]:1)&&keyCode==RegExp.$3||keyCode==RegExp.$1){if(me.queryCommandState(i,param)!=-1)me.execCommand(i,param);domUtils.preventDefault(e)}}}}})},getContent:function(cmd,fn,notSetCursor,ignoreBlank,formatter){var me=this;if(cmd&&utils.isFunction(cmd)){fn=cmd;cmd=\"\"}if(fn?!fn():!this.hasContents()){return\"\"}me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML,ignoreBlank);me.filterOutputRule(root);me.fireEvent(\"aftergetcontent\",cmd,root);return root.toHtml(formatter)},getAllHtml:function(){var me=this,headHtml=[],html=\"\";me.fireEvent(\"getAllHtml\",headHtml);if(browser.ie&&browser.version>8){var headHtmlForIE9=\"\";utils.each(me.document.styleSheets,function(si){headHtmlForIE9+=si.href?'<link rel=\"stylesheet\" type=\"text/css\" href=\"'+si.href+'\" />':\"<style>\"+si.cssText+\"</style>\"});utils.each(me.document.getElementsByTagName(\"script\"),function(si){headHtmlForIE9+=si.outerHTML})}return\"<html><head>\"+(me.options.charset?'<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+me.options.charset+'\"/>':\"\")+(headHtmlForIE9||me.document.getElementsByTagName(\"head\")[0].innerHTML)+headHtml.join(\"\\n\")+\"</head>\"+\"<body \"+(ie&&browser.version<9?'class=\"view\"':\"\")+\">\"+me.getContent(null,null,true)+\"</body></html>\"},getPlainTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\"),html=this.body.innerHTML.replace(/[\\n\\r]/g,\"\");html=html.replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi,\"\\n\").replace(/<br\\/?>/gi,\"\\n\").replace(/<[^>/]+>/g,\"\").replace(/(\\n)?<\\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?\"\\n\":b?b:\"\"});return html.replace(reg,\"\").replace(/\\u00a0/g,\" \").replace(/&nbsp;/g,\" \")},getContentTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\");return this.body[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").replace(/\\u00a0/g,\" \")},setContent:function(html,isAppendTo,notFireSelectionchange){var me=this;me.fireEvent(\"beforesetcontent\",html);var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();me.body.innerHTML=(isAppendTo?me.body.innerHTML:\"\")+html;function isCdataDiv(node){return node.tagName==\"DIV\"&&node.getAttribute(\"cdata_tag\")}if(me.options.enterTag==\"p\"){var child=this.body.firstChild,tmpNode;if(!child||child.nodeType==1&&(dtd.$cdata[child.tagName]||isCdataDiv(child)||domUtils.isCustomeNode(child))&&child===this.body.lastChild){this.body.innerHTML=\"<p>\"+(browser.ie?\"&nbsp;\":\"<br/>\")+\"</p>\"+this.body.innerHTML}else{var p=me.document.createElement(\"p\");while(child){while(child&&(child.nodeType==3||child.nodeType==1&&dtd.p[child.tagName]&&!dtd.$cdata[child.tagName])){tmpNode=child.nextSibling;p.appendChild(child);child=tmpNode}if(p.firstChild){if(!child){me.body.appendChild(p);break}else{child.parentNode.insertBefore(p,child);p=me.document.createElement(\"p\")}}child=child.nextSibling}}}me.fireEvent(\"aftersetcontent\");me.fireEvent(\"contentchange\");!notFireSelectionchange&&me._selectionChange();me._bakRange=me._bakIERange=me._bakNativeRange=null;var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}if(me.options.autoSyncData){me.form&&setValue(me.form,me)}},focus:function(toEnd){try{var me=this,rng=me.selection.getRange();if(toEnd){var node=me.body.lastChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){if(domUtils.isEmptyBlock(node)){rng.setStartAtFirst(node)}else{rng.setStartAtLast(node)}rng.collapse(true)}rng.setCursor(true)}else{if(!rng.collapsed&&domUtils.isBody(rng.startContainer)&&rng.startOffset==0){var node=me.body.firstChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){rng.setStartAtFirst(node).collapse(true)}}rng.select(true)}this.fireEvent(\"focus selectionchange\")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var sel=this.selection.getNative();if(sel.empty&&browser.ie){var nativeRng=document.body.createTextRange();nativeRng.moveToElementText(document.body);nativeRng.collapse(true);nativeRng.select();sel.empty()}else{sel.removeAllRanges()}},_initEvents:function(){var me=this,doc=me.document,win=me.window;me._proxyDomEvent=utils.bind(me._proxyDomEvent,me);domUtils.on(doc,[\"click\",\"contextmenu\",\"mousedown\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mouseover\",\"mouseout\",\"selectstart\"],me._proxyDomEvent);domUtils.on(win,[\"focus\",\"blur\"],me._proxyDomEvent);domUtils.on(me.body,\"drop\",function(e){if(browser.gecko&&e.stopPropagation){e.stopPropagation()}me.fireEvent(\"contentchange\")});domUtils.on(me.body,\"dblclick\",function(e){try{var node=me.body.lastChild;if(!node){return}var rect=node.getBoundingClientRect();if(e.clientY>rect.top+rect.height){var p=document.createElement(\"p\");p.innerHTML=\"<br />\";me.body.appendChild(p);setTimeout(function(){me.focus(true)},100)}}catch(e){console.error(\"auto insert p at end\",e)}});domUtils.on(doc,[\"mouseup\",\"keydown\"],function(evt){if(evt.type===\"keydown\"&&(evt.ctrlKey||evt.metaKey||evt.shiftKey||evt.altKey)){return}if(evt.button===2)return;me._selectionChange(250,evt)})},_proxyDomEvent:function(evt){if(this.fireEvent(\"before\"+evt.type.replace(/^on/,\"\").toLowerCase())===false){return false}if(this.fireEvent(evt.type.replace(/^on/,\"\"),evt)===false){return false}return this.fireEvent(\"after\"+evt.type.replace(/^on/,\"\").toLowerCase())},_selectionChange:function(delay,evt){var me=this;var hackForMouseUp=false;var mouseX,mouseY;if(browser.ie&&browser.version<9&&evt&&evt.type==\"mouseup\"){var range=this.selection.getRange();if(!range.collapsed){hackForMouseUp=true;mouseX=evt.clientX;mouseY=evt.clientY}}clearTimeout(_selectionChangeTimer);_selectionChangeTimer=setTimeout(function(){if(!me.selection||!me.selection.getNative()){return}var ieRange;if(hackForMouseUp&&me.selection.getNative().type==\"None\"){ieRange=me.document.body.createTextRange();try{ieRange.moveToPoint(mouseX,mouseY)}catch(ex){ieRange=null}}var bakGetIERange;if(ieRange){bakGetIERange=me.selection.getIERange;me.selection.getIERange=function(){return ieRange}}me.selection.cache();if(bakGetIERange){me.selection.getIERange=bakGetIERange}if(me.selection._cachedRange&&me.selection._cachedStartElement){me.fireEvent(\"beforeselectionchange\");me.fireEvent(\"selectionchange\",!!evt);me.fireEvent(\"afterselectionchange\");me.selection.clear()}},delay||50)},_callCmdFn:function(fnName,args){var cmdName=args[0].toLowerCase(),cmd,cmdFn;cmd=this.commands[cmdName]||UE.commands[cmdName];cmdFn=cmd&&cmd[fnName];if((!cmd||!cmdFn)&&fnName==\"queryCommandState\"){return 0}else if(cmdFn){return cmdFn.apply(this,args)}},execCommand:function(cmdName){cmdName=cmdName.toLowerCase();var me=this,result,cmd=me.commands[cmdName]||UE.commands[cmdName];if(!cmd||!cmd.execCommand){return null}if(!cmd.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;if(me.queryCommandState.apply(me,arguments)!=-1){me.fireEvent(\"saveScene\");me.fireEvent.apply(me,[\"beforeexeccommand\",cmdName].concat(arguments));result=this._callCmdFn(\"execCommand\",arguments);me.fireEvent.apply(me,[\"afterexeccommand\",cmdName].concat(arguments));me.fireEvent(\"saveScene\")}me.__hasEnterExecCommand=false}else{result=this._callCmdFn(\"execCommand\",arguments);!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me.fireEvent(\"contentchange\")}!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me._selectionChange();return result},queryCommandState:function(cmdName){return this._callCmdFn(\"queryCommandState\",arguments)},queryCommandValue:function(cmdName){return this._callCmdFn(\"queryCommandValue\",arguments)},hasContents:function(tags){if(tags){for(var i=0,ci;ci=tags[i++];){if(this.document.getElementsByTagName(ci).length>0){return true}}}if(!domUtils.isEmptyBlock(this.body)){return true}tags=[\"div\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){if(domUtils.isCustomeNode(cn)){return true}}}tags=[\"video\",\"iframe\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){return true}}return false},reset:function(){this.clear();this.fireEvent(\"reset\")},clear:function(){this.setContent(\"\")},setEnabled:function(){var me=this,range;if(me.body.contentEditable===\"false\"){me.body.contentEditable=true;range=me.selection.getRange();try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}range.select(true);if(me.bkqueryCommandState){me.queryCommandState=me.bkqueryCommandState;delete me.bkqueryCommandState}if(me.bkqueryCommandValue){me.queryCommandValue=me.bkqueryCommandValue;delete me.bkqueryCommandValue}me.fireEvent(\"selectionchange\")}},enable:function(){return this.setEnabled()},setDisabled:function(except){var me=this;except=except?utils.isArray(except)?except:[except]:[];if(me.body.contentEditable==\"true\"){if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.body.contentEditable=false;me.bkqueryCommandState=me.queryCommandState;me.bkqueryCommandValue=me.queryCommandValue;me.queryCommandState=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandState.apply(me,arguments)}return-1};me.queryCommandValue=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandValue.apply(me,arguments)}return null};me.fireEvent(\"selectionchange\")}},disable:function(except){return this.setDisabled(except)},_setDefaultContent:function(){function clear(){var me=this;if(me.document.getElementById(\"initContent\")){me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";me.removeListener(\"firstBeforeExecCommand focus\",clear);setTimeout(function(){me.focus();me._selectionChange()},0)}}return function(cont){var me=this;me.body.innerHTML='<p id=\"initContent\">'+cont+\"</p>\";me.addListener(\"firstBeforeExecCommand focus\",clear)}}(),setShow:function(){var me=this,range=me.selection.getRange();if(me.container.style.display==\"none\"){try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}setTimeout(function(){range.select(true)},100);me.container.style.display=\"\"}},show:function(){return this.setShow()},setHide:function(){var me=this;if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.container.style.display=\"none\"},hide:function(){return this.setHide()},getLang:function(path){var lang=UE.I18N[this.options.lang];if(!lang){throw Error(\"not import language file\")}path=(path||\"\").split(\".\");for(var i=0,ci;ci=path[i++];){lang=lang[ci];if(!lang)break}return lang},getContentLength:function(ingoneHtml,tagNames){var count=this.getContent(false,false,true).length;if(ingoneHtml){tagNames=(tagNames||[]).concat([\"hr\",\"img\",\"iframe\"]);count=this.getContentTxt().replace(/[\\t\\r\\n]+/g,\"\").length;for(var i=0,ci;ci=tagNames[i++];){count+=this.document.getElementsByTagName(ci).length}}return count},getScrollTop:function(){return Math.max(this.document.documentElement.scrollTop,this.document.body.scrollTop)},getScrollLeft:function(){return Math.max(this.document.documentElement.scrollLeft,this.document.body.scrollLeft)},addInputRule:function(rule){this.inputRules.push(rule)},filterInputRule:function(root){for(var i=0,ci;ci=this.inputRules[i++];){ci.call(this,root)}},addOutputRule:function(rule){this.outputRules.push(rule)},filterOutputRule:function(root){for(var i=0,ci;ci=this.outputRules[i++];){ci.call(this,root)}},getActionUrl:function(action){var serverUrl=this.getOpt(\"serverUrl\");if(!action){return serverUrl}var actionName=this.getOpt(action)||action,imageUrl=this.getOpt(\"imageUrl\");if(!serverUrl&&imageUrl){serverUrl=imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\")}if(serverUrl){serverUrl=serverUrl+(serverUrl.indexOf(\"?\")===-1?\"?\":\"&\")+\"action=\"+(actionName||\"\");return utils.formatUrl(serverUrl)}else{return\"\"}}};utils.inherits(Editor,EventBase)})();UE.Editor.defaultOptions=function(editor){var _url=editor.options.UEDITOR_HOME_URL;return{isShow:true,initialContent:\"\",initialStyle:\"\",autoClearinitialContent:false,iframeCssUrl:_url+\"themes/iframe.css?c20ec247\",iframeCssUrlsAddition:[],textarea:\"\",focus:false,focusInEnd:true,autoClearEmptyNode:true,fullscreen:false,readonly:false,zIndex:999,imagePopup:true,enterTag:\"p\",customDomain:false,lang:\"zh-cn\",langPath:_url+\"lang/\",theme:\"default\",themePath:_url+\"themes/\",allHtmlEnabled:false,scaleEnabled:false,tableNativeEditInFF:false,autoSyncData:true,fileNameFormat:\"{time}{rand:6}\"}};(function(){UE.Editor.prototype.loadServerConfig=function(){var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt(\"serverUrl\",me.options.imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\"));var configUrl=me.getActionUrl(\"config\"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=false;configUrl&&UE.ajax.request(configUrl,{method:\"GET\",dataType:isJsonp?\"jsonp\":\"\",headers:me.options.serverHeaders||{},onsuccess:function(r){try{var config=isJsonp?r:eval(\"(\"+r.responseText+\")\");me.options=utils.merge(me.options,config);me.fireEvent(\"serverConfigLoaded\");me._serverConfigLoaded=true}catch(e){showErrorMsg(me.getLang(\"loadconfigFormatError\"))}},onerror:function(){showErrorMsg(me.getLang(\"loadconfigHttpError\"))}})}catch(e){showErrorMsg(me.getLang(\"loadconfigError\"))}});function showErrorMsg(msg){console&&console.error(msg)}};UE.Editor.prototype.isServerConfigLoaded=function(){var me=this;return me._serverConfigLoaded||false};UE.Editor.prototype.afterConfigReady=function(handler){if(!handler||!utils.isFunction(handler))return;var me=this;var readyHandler=function(){handler.apply(me,arguments);me.removeListener(\"serverConfigLoaded\",readyHandler)};if(me.isServerConfigLoaded()){handler.call(me,\"serverConfigLoaded\")}else{me.addListener(\"serverConfigLoaded\",readyHandler)}}})();UE.ajax=function(){var fnStr=\"XMLHttpRequest()\";try{new ActiveXObject(\"Msxml2.XMLHTTP\");fnStr=\"ActiveXObject('Msxml2.XMLHTTP')\"}catch(e){try{new ActiveXObject(\"Microsoft.XMLHTTP\");fnStr=\"ActiveXObject('Microsoft.XMLHTTP')\"}catch(e){}}var creatAjaxRequest=new Function(\"return new \"+fnStr);function json2str(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\"||i==\"dataType\"||i==\"callback\")continue;if(json[i]==undefined||json[i]==null)continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")}function doAjax(url,ajaxOptions){var xhr=creatAjaxRequest(),timeIsOut=false,defaultAjaxOptions={method:\"POST\",timeout:5e3,async:true,headers:{},data:{},onsuccess:function(){},onerror:function(){}};if(typeof url===\"object\"){ajaxOptions=url;url=ajaxOptions.url}if(!xhr||!url)return;var ajaxOpts=ajaxOptions?utils.extend(defaultAjaxOptions,ajaxOptions):defaultAjaxOptions;var submitStr=json2str(ajaxOpts);if(!utils.isEmptyObject(ajaxOpts.data)){submitStr+=(submitStr?\"&\":\"\")+json2str(ajaxOpts.data)}var timerID=setTimeout(function(){if(xhr.readyState!==4){timeIsOut=true;xhr.abort();clearTimeout(timerID)}},ajaxOpts.timeout);var method=ajaxOpts.method.toUpperCase();var str=url+(url.indexOf(\"?\")===-1?\"?\":\"&\")+(method===\"POST\"?\"\":submitStr+\"&noCache=\"+ +new Date);xhr.open(method,str,ajaxOpts.async);xhr.onreadystatechange=function(){if(xhr.readyState===4){if(!timeIsOut&&xhr.status===200){ajaxOpts.onsuccess(xhr)}else{ajaxOpts.onerror(xhr)}}};if(ajaxOpts.headers){for(var key in ajaxOpts.headers){xhr.setRequestHeader(key,ajaxOpts.headers[key])}}if(method===\"POST\"){xhr.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");xhr.send(submitStr)}else{xhr.send(null)}}function doJsonp(url,opts){var successhandler=opts.onsuccess||function(){},scr=document.createElement(\"SCRIPT\"),options=opts||{},charset=options[\"charset\"],callbackField=options[\"jsonp\"]||\"callback\",callbackFnName,timeOut=options[\"timeOut\"]||0,timer,reg=new RegExp(\"(\\\\?|&)\"+callbackField+\"=([^&]*)\"),matches;if(utils.isFunction(successhandler)){callbackFnName=\"bd__editor__\"+Math.floor(Math.random()*2147483648).toString(36);window[callbackFnName]=getCallBack(0)}else if(utils.isString(successhandler)){callbackFnName=successhandler}else{if(matches=reg.exec(url)){callbackFnName=matches[2]}}url=url.replace(reg,\"$1\"+callbackField+\"=\"+callbackFnName);if(url.search(reg)<0){url+=(url.indexOf(\"?\")<0?\"?\":\"&\")+callbackField+\"=\"+callbackFnName}var queryStr=json2str(opts);if(!utils.isEmptyObject(opts.data)){queryStr+=(queryStr?\"&\":\"\")+json2str(opts.data)}if(queryStr){url=url.replace(/\\?/,\"?\"+queryStr+\"&\")}scr.onerror=getCallBack(1);if(timeOut){timer=setTimeout(getCallBack(1),timeOut)}createScriptTag(scr,url,charset);function createScriptTag(scr,url,charset){scr.setAttribute(\"type\",\"text/javascript\");scr.setAttribute(\"defer\",\"defer\");charset&&scr.setAttribute(\"charset\",charset);scr.setAttribute(\"src\",url);document.getElementsByTagName(\"head\")[0].appendChild(scr)}function getCallBack(onTimeOut){return function(){try{if(onTimeOut){options.onerror&&options.onerror()}else{try{clearTimeout(timer);successhandler.apply(window,arguments)}catch(e){}}}catch(exception){options.onerror&&options.onerror.call(window,exception)}finally{options.oncomplete&&options.oncomplete.apply(window,arguments);scr.parentNode&&scr.parentNode.removeChild(scr);window[callbackFnName]=null;try{delete window[callbackFnName]}catch(e){}}}}}return{request:function(url,opts){if(opts&&opts.dataType===\"jsonp\"){doJsonp(url,opts)}else{doAjax(url,opts)}},getJSONP:function(url,data,fn){var opts={data:data,oncomplete:fn};doJsonp(url,opts)}}}();UE.api=function(){var axios=null;!function(e,t){axios=t()}(this,function(){\"use strict\";function e(t){return e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null==n)return;var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){return function(){return e.apply(t,arguments)}}var s,u=Object.prototype.toString,c=Object.getPrototypeOf,f=(s=Object.create(null),function(e){var t=u.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())}),l=function(e){return e=e.toLowerCase(),function(t){return f(t)===e}},d=function(t){return function(n){return e(n)===t}},p=Array.isArray,h=d(\"undefined\");var m=l(\"ArrayBuffer\");var y=d(\"string\"),v=d(\"function\"),b=d(\"number\"),g=function(t){return null!==t&&\"object\"===e(t)},w=function(e){if(\"object\"!==f(e))return!1;var t=c(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},E=l(\"Date\"),O=l(\"File\"),S=l(\"Blob\"),R=l(\"FileList\"),A=l(\"URLSearchParams\");function T(t,n){var r,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=i.allOwnKeys,s=void 0!==a&&a;if(null!=t)if(\"object\"!==e(t)&&(t=[t]),p(t))for(r=0,o=t.length;r<o;r++)n.call(null,t[r],r,t);else{var u,c=s?Object.getOwnPropertyNames(t):Object.keys(t),f=c.length;for(r=0;r<f;r++)u=c[r],n.call(null,t[u],u,t)}}function j(e,t){t=t.toLowerCase();for(var n,r=Object.keys(e),o=r.length;o-- >0;)if(t===(n=r[o]).toLowerCase())return n;return null}var N=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:global,C=function(e){return!h(e)&&e!==N};var x,P=(x=\"undefined\"!=typeof Uint8Array&&c(Uint8Array),function(e){return x&&e instanceof x}),k=l(\"HTMLFormElement\"),U=function(e){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),_=l(\"RegExp\"),F=function(e,t){var n=Object.getOwnPropertyDescriptors(e),r={};T(n,function(n,o){!1!==t(n,o,e)&&(r[o]=n)}),Object.defineProperties(e,r)},B=\"abcdefghijklmnopqrstuvwxyz\",L=\"0123456789\",D={DIGIT:L,ALPHA:B,ALPHA_DIGIT:B+B.toUpperCase()+L};var I=l(\"AsyncFunction\"),q={isArray:p,isArrayBuffer:m,isBuffer:function(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&v(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t;return e&&(\"function\"==typeof FormData&&e instanceof FormData||v(e.append)&&(\"formdata\"===(t=f(e))||\"object\"===t&&v(e.toString)&&\"[object FormData]\"===e.toString()))},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer)},isString:y,isNumber:b,isBoolean:function(e){return!0===e||!1===e},isObject:g,isPlainObject:w,isUndefined:h,isDate:E,isFile:O,isBlob:S,isRegExp:_,isFunction:v,isStream:function(e){return g(e)&&v(e.pipe)},isURLSearchParams:A,isTypedArray:P,isFileList:R,forEach:T,merge:function e(){for(var t=C(this)&&this||{},n=t.caseless,r={},o=function(t,o){var i=n&&j(r,o)||o;w(r[i])&&w(t)?r[i]=e(r[i],t):w(t)?r[i]=e({},t):p(t)?r[i]=t.slice():r[i]=t},i=0,a=arguments.length;i<a;i++)arguments[i]&&T(arguments[i],o);return r},extend:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.allOwnKeys;return T(t,function(t,r){n&&v(t)?e[r]=a(t,n):e[r]=t},{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,\"super\",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var o,i,a,s={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],r&&!r(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==n&&c(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:f,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(p(e))return e;var t=e.length;if(!b(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var o=n.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:k,hasOwnProperty:U,hasOwnProp:U,reduceDescriptors:F,freezeMethods:function(e){F(e,function(t,n){if(v(e)&&-1!==[\"arguments\",\"caller\",\"callee\"].indexOf(n))return!1;var r=e[n];v(r)&&(t.enumerable=!1,\"writable\"in t?t.writable=!1:t.set||(t.set=function(){throw Error(\"Can not rewrite read-only method '\"+n+\"'\")}))})},toObjectSet:function(e,t){var n={},r=function(e){e.forEach(function(e){n[e]=!0})};return p(e)?r(e):r(String(e).split(t)),n},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})},noop:function(){},toFiniteNumber:function(e,t){return e=+e,Number.isFinite(e)?e:t},findKey:j,global:N,isContextDefined:C,ALPHABET:D,generateString:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D.ALPHA_DIGIT,n=\"\",r=t.length;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&v(e.append)&&\"FormData\"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:function(e){var t=new Array(10);return function e(n,r){if(g(n)){if(t.indexOf(n)>=0)return;if(!(\"toJSON\"in n)){t[r]=n;var o=p(n)?[]:{};return T(n,function(t,n){var i=e(t,r+1);!h(i)&&(o[n]=i)}),t[r]=void 0,o}}return n}(e,0)},isAsyncFn:I,isThenable:function(e){return e&&(g(e)||v(e))&&v(e.then)&&v(e.catch)}};function M(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name=\"AxiosError\",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}q.inherits(M,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:q.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var z=M.prototype,H={};[\"ERR_BAD_OPTION_VALUE\",\"ERR_BAD_OPTION\",\"ECONNABORTED\",\"ETIMEDOUT\",\"ERR_NETWORK\",\"ERR_FR_TOO_MANY_REDIRECTS\",\"ERR_DEPRECATED\",\"ERR_BAD_RESPONSE\",\"ERR_BAD_REQUEST\",\"ERR_CANCELED\",\"ERR_NOT_SUPPORT\",\"ERR_INVALID_URL\"].forEach(function(e){H[e]={value:e}}),Object.defineProperties(M,H),Object.defineProperty(z,\"isAxiosError\",{value:!0}),M.from=function(e,t,n,r,o,i){var a=Object.create(z);return q.toFlatObject(e,a,function(e){return e!==Error.prototype},function(e){return\"isAxiosError\"!==e}),M.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function J(e){return q.isPlainObject(e)||q.isArray(e)}function W(e){return q.endsWith(e,\"[]\")?e.slice(0,-2):e}function K(e,t,n){return e?e.concat(t).map(function(e,t){return e=W(e),!n&&t?\"[\"+e+\"]\":e}).join(n?\".\":\"\"):t}var V=q.toFlatObject(q,{},null,function(e){return/^is[A-Z]/.test(e)});function G(t,n,r){if(!q.isObject(t))throw new TypeError(\"target must be an object\");n=n||new FormData;var o=(r=q.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!q.isUndefined(t[e])})).metaTokens,i=r.visitor||f,a=r.dots,s=r.indexes,u=(r.Blob||\"undefined\"!=typeof Blob&&Blob)&&q.isSpecCompliantForm(n);if(!q.isFunction(i))throw new TypeError(\"visitor must be a function\");function c(e){if(null===e)return\"\";if(q.isDate(e))return e.toISOString();if(!u&&q.isBlob(e))throw new M(\"Blob is not supported. Use a Buffer instead.\");return q.isArrayBuffer(e)||q.isTypedArray(e)?u&&\"function\"==typeof Blob?new Blob([e]):Buffer.from(e):e}function f(t,r,i){var u=t;if(t&&!i&&\"object\"===e(t))if(q.endsWith(r,\"{}\"))r=o?r:r.slice(0,-2),t=JSON.stringify(t);else if(q.isArray(t)&&function(e){return q.isArray(e)&&!e.some(J)}(t)||(q.isFileList(t)||q.endsWith(r,\"[]\"))&&(u=q.toArray(t)))return r=W(r),u.forEach(function(e,t){!q.isUndefined(e)&&null!==e&&n.append(!0===s?K([r],t,a):null===s?r:r+\"[]\",c(e))}),!1;return!!J(t)||(n.append(K(i,r,a),c(t)),!1)}var l=[],d=Object.assign(V,{defaultVisitor:f,convertValue:c,isVisitable:J});if(!q.isObject(t))throw new TypeError(\"data must be an object\");return function e(t,r){if(!q.isUndefined(t)){if(-1!==l.indexOf(t))throw Error(\"Circular reference detected in \"+r.join(\".\"));l.push(t),q.forEach(t,function(t,o){!0===(!(q.isUndefined(t)||null===t)&&i.call(n,t,q.isString(o)?o.trim():o,r,d))&&e(t,r?r.concat(o):[o])}),l.pop()}}(t),n}function $(e){var t={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\",\"%00\":\"\\0\"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function X(e,t){this._pairs=[],e&&G(e,this,t)}var Q=X.prototype;function Z(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}function Y(e,t,n){if(!t)return e;var r,o=n&&n.encode||Z,i=n&&n.serialize;if(r=i?i(t,n):q.isURLSearchParams(t)?t.toString():new X(t,n).toString(o)){var a=e.indexOf(\"#\");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+r}return e}Q.append=function(e,t){this._pairs.push([e,t])},Q.toString=function(e){var t=e?function(t){return e.call(this,t,$)}:$;return this._pairs.map(function(e){return t(e[0])+\"=\"+t(e[1])},\"\").join(\"&\")};var ee,te=function(){function e(){t(this,e),this.handlers=[]}return r(e,[{key:\"use\",value:function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:\"eject\",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:\"clear\",value:function(){this.handlers&&(this.handlers=[])}},{key:\"forEach\",value:function(e){q.forEach(this.handlers,function(t){null!==t&&e(t)})}}]),e}(),ne={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},re={isBrowser:!0,classes:{URLSearchParams:\"undefined\"!=typeof URLSearchParams?URLSearchParams:X,FormData:\"undefined\"!=typeof FormData?FormData:null,Blob:\"undefined\"!=typeof Blob?Blob:null},isStandardBrowserEnv:(\"undefined\"==typeof navigator||\"ReactNative\"!==(ee=navigator.product)&&\"NativeScript\"!==ee&&\"NS\"!==ee)&&\"undefined\"!=typeof window&&\"undefined\"!=typeof document,isStandardBrowserWebWorkerEnv:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&\"function\"==typeof self.importScripts,protocols:[\"http\",\"https\",\"file\",\"blob\",\"url\",\"data\"]};function oe(e){function t(e,n,r,o){var i=e[o++],a=Number.isFinite(+i),s=o>=e.length;return i=!i&&q.isArray(r)?r.length:i,s?(q.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&q.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&q.isArray(r[i])&&(r[i]=function(e){var t,n,r={},o=Object.keys(e),i=o.length;for(t=0;t<i;t++)r[n=o[t]]=e[n];return r}(r[i])),!a)}if(q.isFormData(e)&&q.isFunction(e.entries)){var n={};return q.forEachEntry(e,function(e,r){t(function(e){return q.matchAll(/\\w+|\\[(\\w*)]/g,e).map(function(e){return\"[]\"===e[0]?\"\":e[1]||e[0]})}(e),r,n,0)}),n}return null}var ie={\"Content-Type\":void 0};var ae={transitional:ne,adapter:[\"xhr\",\"http\"],transformRequest:[function(e,t){var n,r=t.getContentType()||\"\",o=r.indexOf(\"application/json\")>-1,i=q.isObject(e);if(i&&q.isHTMLForm(e)&&(e=new FormData(e)),q.isFormData(e))return o&&o?JSON.stringify(oe(e)):e;if(q.isArrayBuffer(e)||q.isBuffer(e)||q.isStream(e)||q.isFile(e)||q.isBlob(e))return e;if(q.isArrayBufferView(e))return e.buffer;if(q.isURLSearchParams(e))return t.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\",!1),e.toString();if(i){if(r.indexOf(\"application/x-www-form-urlencoded\")>-1)return function(e,t){return G(e,new re.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return re.isNode&&q.isBuffer(e)?(this.append(t,e.toString(\"base64\")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((n=q.isFileList(e))||r.indexOf(\"multipart/form-data\")>-1){var a=this.env&&this.env.FormData;return G(n?{\"files[]\":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType(\"application/json\",!1),function(e,t,n){if(q.isString(e))try{return(t||JSON.parse)(e),q.trim(e)}catch(e){if(\"SyntaxError\"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||ae.transitional,n=t&&t.forcedJSONParsing,r=\"json\"===this.responseType;if(e&&q.isString(e)&&(n&&!this.responseType||r)){var o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(o){if(\"SyntaxError\"===e.name)throw M.from(e,M.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,env:{FormData:re.classes.FormData,Blob:re.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};q.forEach([\"delete\",\"get\",\"head\"],function(e){ae.headers[e]={}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){ae.headers[e]=q.merge(ie)});var se=ae,ue=q.toObjectSet([\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"]),ce=Symbol(\"internals\");function fe(e){return e&&String(e).trim().toLowerCase()}function le(e){return!1===e||null==e?e:q.isArray(e)?e.map(le):String(e)}function de(e,t,n,r,o){return q.isFunction(r)?r.call(this,t,n):(o&&(t=n),q.isString(t)?q.isString(r)?-1!==t.indexOf(r):q.isRegExp(r)?r.test(t):void 0:void 0)}var pe=function(e,n){function i(e){t(this,i),e&&this.set(e)}return r(i,[{key:\"set\",value:function(e,t,n){var r=this;function o(e,t,n){var o=fe(t);if(!o)throw new Error(\"header name must be a non-empty string\");var i=q.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=le(e))}var i,a,s,u,c,f=function(e,t){return q.forEach(e,function(e,n){return o(e,n,t)})};return q.isPlainObject(e)||e instanceof this.constructor?f(e,t):q.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?f((c={},(i=e)&&i.split(\"\\n\").forEach(function(e){u=e.indexOf(\":\"),a=e.substring(0,u).trim().toLowerCase(),s=e.substring(u+1).trim(),!a||c[a]&&ue[a]||(\"set-cookie\"===a?c[a]?c[a].push(s):c[a]=[s]:c[a]=c[a]?c[a]+\", \"+s:s)}),c),t):null!=e&&o(t,e,n),this}},{key:\"get\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);if(n){var r=this[n];if(!t)return r;if(!0===t)return function(e){for(var t,n=Object.create(null),r=/([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;t=r.exec(e);)n[t[1]]=t[2];return n}(r);if(q.isFunction(t))return t.call(this,r,n);if(q.isRegExp(t))return t.exec(r);throw new TypeError(\"parser must be boolean|regexp|function\")}}}},{key:\"has\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);return!(!n||void 0===this[n]||t&&!de(0,this[n],n,t))}return!1}},{key:\"delete\",value:function(e,t){var n=this,r=!1;function o(e){if(e=fe(e)){var o=q.findKey(n,e);!o||t&&!de(0,n[o],o,t)||(delete n[o],r=!0)}}return q.isArray(e)?e.forEach(o):o(e),r}},{key:\"clear\",value:function(e){for(var t=Object.keys(this),n=t.length,r=!1;n--;){var o=t[n];e&&!de(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}},{key:\"normalize\",value:function(e){var t=this,n={};return q.forEach(this,function(r,o){var i=q.findKey(n,o);if(i)return t[i]=le(r),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})}(o):String(o).trim();a!==o&&delete t[o],t[a]=le(r),n[a]=!0}),this}},{key:\"concat\",value:function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=this.constructor).concat.apply(e,[this].concat(n))}},{key:\"toJSON\",value:function(e){var t=Object.create(null);return q.forEach(this,function(n,r){null!=n&&!1!==n&&(t[r]=e&&q.isArray(n)?n.join(\", \"):n)}),t}},{key:Symbol.iterator,value:function(){return Object.entries(this.toJSON())[Symbol.iterator]()}},{key:\"toString\",value:function(){return Object.entries(this.toJSON()).map(function(e){var t=o(e,2);return t[0]+\": \"+t[1]}).join(\"\\n\")}},{key:Symbol.toStringTag,get:function(){return\"AxiosHeaders\"}}],[{key:\"from\",value:function(e){return e instanceof this?e:new this(e)}},{key:\"concat\",value:function(e){for(var t=new this(e),n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach(function(e){return t.set(e)}),t}},{key:\"accessor\",value:function(e){var t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function r(e){var r=fe(e);t[r]||(!function(e,t){var n=q.toCamelCase(\" \"+t);[\"get\",\"set\",\"has\"].forEach(function(r){Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return q.isArray(e)?e.forEach(r):r(e),this}}]),i}();pe.accessor([\"Content-Type\",\"Content-Length\",\"Accept\",\"Accept-Encoding\",\"User-Agent\",\"Authorization\"]),q.freezeMethods(pe.prototype),q.freezeMethods(pe);var he=pe;function me(e,t){var n=this||se,r=t||n,o=he.from(r.headers),i=r.data;return q.forEach(e,function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function ye(e){return!(!e||!e.__CANCEL__)}function ve(e,t,n){M.call(this,null==e?\"canceled\":e,M.ERR_CANCELED,t,n),this.name=\"CanceledError\"}q.inherits(ve,M,{__CANCEL__:!0});var be=re.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){var a=[];a.push(e+\"=\"+encodeURIComponent(t)),q.isNumber(n)&&a.push(\"expires=\"+new Date(n).toGMTString()),q.isString(r)&&a.push(\"path=\"+r),q.isString(o)&&a.push(\"domain=\"+o),!0===i&&a.push(\"secure\"),document.cookie=a.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function ge(e,t){return e&&!/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(t)?function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}(e,t):t}var we=re.isStandardBrowserEnv?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function r(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=r(window.location.href),function(t){var n=q.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0};function Ee(e,t){var n=0,r=function(e,t){e=e||10;var n,r=new Array(e),o=new Array(e),i=0,a=0;return t=void 0!==t?t:1e3,function(s){var u=Date.now(),c=o[a];n||(n=u),r[i]=s,o[i]=u;for(var f=a,l=0;f!==i;)l+=r[f++],f%=e;if((i=(i+1)%e)===a&&(a=(a+1)%e),!(u-n<t)){var d=c&&u-c;return d?Math.round(1e3*l/d):void 0}}}(50,250);return function(o){var i=o.loaded,a=o.lengthComputable?o.total:void 0,s=i-n,u=r(s);n=i;var c={loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:o};c[t?\"download\":\"upload\"]=!0,e(c)}}var Oe={http:null,xhr:\"undefined\"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){var r,o=e.data,i=he.from(e.headers).normalize(),a=e.responseType;function s(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener(\"abort\",r)}q.isFormData(o)&&(re.isStandardBrowserEnv||re.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.setContentType(\"multipart/form-data;\",!1));var u=new XMLHttpRequest;if(e.auth){var c=e.auth.username||\"\",f=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";i.set(\"Authorization\",\"Basic \"+btoa(c+\":\"+f))}var l=ge(e.baseURL,e.url);function d(){if(u){var r=he.from(\"getAllResponseHeaders\"in u&&u.getAllResponseHeaders());!function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new M(\"Request failed with status code \"+n.status,[M.ERR_BAD_REQUEST,M.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}(function(e){t(e),s()},function(e){n(e),s()},{data:a&&\"text\"!==a&&\"json\"!==a?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:e,request:u}),u=null}}if(u.open(e.method.toUpperCase(),Y(l,e.params,e.paramsSerializer),!0),u.timeout=e.timeout,\"onloadend\"in u?u.onloadend=d:u.onreadystatechange=function(){u&&4===u.readyState&&(0!==u.status||u.responseURL&&0===u.responseURL.indexOf(\"file:\"))&&setTimeout(d)},u.onabort=function(){u&&(n(new M(\"Request aborted\",M.ECONNABORTED,e,u)),u=null)},u.onerror=function(){n(new M(\"Network Error\",M.ERR_NETWORK,e,u)),u=null},u.ontimeout=function(){var t=e.timeout?\"timeout of \"+e.timeout+\"ms exceeded\":\"timeout exceeded\",r=e.transitional||ne;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new M(t,r.clarifyTimeoutError?M.ETIMEDOUT:M.ECONNABORTED,e,u)),u=null},re.isStandardBrowserEnv){var p=(e.withCredentials||we(l))&&e.xsrfCookieName&&be.read(e.xsrfCookieName);p&&i.set(e.xsrfHeaderName,p)}void 0===o&&i.setContentType(null),\"setRequestHeader\"in u&&q.forEach(i.toJSON(),function(e,t){u.setRequestHeader(t,e)}),q.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),a&&\"json\"!==a&&(u.responseType=e.responseType),\"function\"==typeof e.onDownloadProgress&&u.addEventListener(\"progress\",Ee(e.onDownloadProgress,!0)),\"function\"==typeof e.onUploadProgress&&u.upload&&u.upload.addEventListener(\"progress\",Ee(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=function(t){u&&(n(!t||t.type?new ve(null,e,u):t),u.abort(),u=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener(\"abort\",r)));var h,m=(h=/^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(l))&&h[1]||\"\";m&&-1===re.protocols.indexOf(m)?n(new M(\"Unsupported protocol \"+m+\":\",M.ERR_BAD_REQUEST,e)):u.send(o||null)})}};q.forEach(Oe,function(e,t){if(e){try{Object.defineProperty(e,\"name\",{value:t})}catch(e){}Object.defineProperty(e,\"adapterName\",{value:t})}});var Se=function(e){for(var t,n,r=(e=q.isArray(e)?e:[e]).length,o=0;o<r&&(t=e[o],!(n=q.isString(t)?Oe[t.toLowerCase()]:t));o++);if(!n){if(!1===n)throw new M(\"Adapter \".concat(t,\" is not supported by the environment\"),\"ERR_NOT_SUPPORT\");throw new Error(q.hasOwnProp(Oe,t)?\"Adapter '\".concat(t,\"' is not available in the build\"):\"Unknown adapter '\".concat(t,\"'\"))}if(!q.isFunction(n))throw new TypeError(\"adapter is not a function\");return n};function Re(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ve(null,e)}function Ae(e){return Re(e),e.headers=he.from(e.headers),e.data=me.call(e,e.transformRequest),-1!==[\"post\",\"put\",\"patch\"].indexOf(e.method)&&e.headers.setContentType(\"application/x-www-form-urlencoded\",!1),Se(e.adapter||se.adapter)(e).then(function(t){return Re(e),t.data=me.call(e,e.transformResponse,t),t.headers=he.from(t.headers),t},function(t){return ye(t)||(Re(e),t&&t.response&&(t.response.data=me.call(e,e.transformResponse,t.response),t.response.headers=he.from(t.response.headers))),Promise.reject(t)})}var Te=function(e){return e instanceof he?e.toJSON():e};function je(e,t){t=t||{};var n={};function r(e,t,n){return q.isPlainObject(e)&&q.isPlainObject(t)?q.merge.call({caseless:n},e,t):q.isPlainObject(t)?q.merge({},t):q.isArray(t)?t.slice():t}function o(e,t,n){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!q.isUndefined(t))return r(void 0,t)}function a(e,t){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}var u={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:function(e,t){return o(Te(e),Te(t),!0)}};return q.forEach(Object.keys(Object.assign({},e,t)),function(r){var i=u[r]||o,a=i(e[r],t[r],r);q.isUndefined(a)&&i!==s||(n[r]=a)}),n}var Ne=\"1.4.0\",Ce={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach(function(t,n){Ce[t]=function(r){return e(r)===t||\"a\"+(n<1?\"n \":\" \")+t}});var xe={};Ce.transitional=function(e,t,n){function r(e,t){return\"[Axios v1.4.0] Transitional option '\"+e+\"'\"+t+(n?\". \"+n:\"\")}return function(n,o,i){if(!1===e)throw new M(r(o,\" has been removed\"+(t?\" in \"+t:\"\")),M.ERR_DEPRECATED);return t&&!xe[o]&&(xe[o]=!0,console.warn(r(o,\" has been deprecated since v\"+t+\" and will be removed in the near future\"))),!e||e(n,o,i)}};var Pe={assertOptions:function(t,n,r){if(\"object\"!==e(t))throw new M(\"options must be an object\",M.ERR_BAD_OPTION_VALUE);for(var o=Object.keys(t),i=o.length;i-- >0;){var a=o[i],s=n[a];if(s){var u=t[a],c=void 0===u||s(u,a,t);if(!0!==c)throw new M(\"option \"+a+\" must be \"+c,M.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new M(\"Unknown option \"+a,M.ERR_BAD_OPTION)}},validators:Ce},ke=Pe.validators,Ue=function(){function e(n){t(this,e),this.defaults=n,this.interceptors={request:new te,response:new te}}return r(e,[{key:\"request\",value:function(e,t){\"string\"==typeof e?(t=t||{}).url=e:t=e||{};var n,r=t=je(this.defaults,t),o=r.transitional,i=r.paramsSerializer,a=r.headers;void 0!==o&&Pe.assertOptions(o,{silentJSONParsing:ke.transitional(ke.boolean),forcedJSONParsing:ke.transitional(ke.boolean),clarifyTimeoutError:ke.transitional(ke.boolean)},!1),null!=i&&(q.isFunction(i)?t.paramsSerializer={serialize:i}:Pe.assertOptions(i,{encode:ke.function,serialize:ke.function},!0)),t.method=(t.method||this.defaults.method||\"get\").toLowerCase(),(n=a&&q.merge(a.common,a[t.method]))&&q.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete a[e]}),t.headers=he.concat(n,a);var s=[],u=!0;this.interceptors.request.forEach(function(e){\"function\"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,s.unshift(e.fulfilled,e.rejected))});var c,f=[];this.interceptors.response.forEach(function(e){f.push(e.fulfilled,e.rejected)});var l,d=0;if(!u){var p=[Ae.bind(this),void 0];for(p.unshift.apply(p,s),p.push.apply(p,f),l=p.length,c=Promise.resolve(t);d<l;)c=c.then(p[d++],p[d++]);return c}l=s.length;var h=t;for(d=0;d<l;){var m=s[d++],y=s[d++];try{h=m(h)}catch(e){y.call(this,e);break}}try{c=Ae.call(this,h)}catch(e){return Promise.reject(e)}for(d=0,l=f.length;d<l;)c=c.then(f[d++],f[d++]);return c}},{key:\"getUri\",value:function(e){return Y(ge((e=je(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}]),e}();q.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){Ue.prototype[e]=function(t,n){return this.request(je(n||{},{method:e,url:t,data:(n||{}).data}))}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){function t(t){return function(n,r,o){return this.request(je(o||{},{method:e,headers:t?{\"Content-Type\":\"multipart/form-data\"}:{},url:n,data:r}))}}Ue.prototype[e]=t(),Ue.prototype[e+\"Form\"]=t(!0)});var _e=Ue,Fe=function(){function e(n){if(t(this,e),\"function\"!=typeof n)throw new TypeError(\"executor must be a function.\");var r;this.promise=new Promise(function(e){r=e});var o=this;this.promise.then(function(e){if(o._listeners){for(var t=o._listeners.length;t-- >0;)o._listeners[t](e);o._listeners=null}}),this.promise.then=function(e){var t,n=new Promise(function(e){o.subscribe(e),t=e}).then(e);return n.cancel=function(){o.unsubscribe(t)},n},n(function(e,t,n){o.reason||(o.reason=new ve(e,t,n),r(o.reason))})}return r(e,[{key:\"throwIfRequested\",value:function(){if(this.reason)throw this.reason}},{key:\"subscribe\",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:\"unsubscribe\",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}}],[{key:\"source\",value:function(){var t;return{token:new e(function(e){t=e}),cancel:t}}}]),e}();var Be={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Be).forEach(function(e){var t=o(e,2),n=t[0],r=t[1];Be[r]=n});var Le=Be;var De=function e(t){var n=new _e(t),r=a(_e.prototype.request,n);return q.extend(r,_e.prototype,n,{allOwnKeys:!0}),q.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(je(t,n))},r}(se);return De.Axios=_e,De.CanceledError=ve,De.CancelToken=Fe,De.isCancel=ye,De.VERSION=Ne,De.toFormData=G,De.AxiosError=M,De.Cancel=De.CanceledError,De.all=function(e){return Promise.all(e)},De.spread=function(e){return function(t){return e.apply(null,t)}},De.isAxiosError=function(e){return q.isObject(e)&&!0===e.isAxiosError},De.mergeConfig=je,De.AxiosHeaders=he,De.formToJSON=function(e){return oe(q.isHTMLForm(e)?new FormData(e):e)},De.HttpStatusCode=Le,De.default=De,De});return{requestAction:function(me,action,config){config.url=me.getActionUrl();config.method=\"post\";config.params=config.params||{};config.params=Object.assign(config.params,me.getOpt(\"serverparam\"));config.params.action=action;return this.request(me,config)},request:function(me,config){config.headers=config.headers||{};var customHeaders=me.getOpt(\"serverHeaders\");if(customHeaders){for(var key in customHeaders){config.headers[key]=customHeaders[key]}}return axios(config)}}}();UE.image=function(){var imageCompression=null;!function(e,t){imageCompression=t()}(this,function(){\"use strict\";function _mergeNamespaces(e,t){return t.forEach(function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach(function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}})}),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise(function(r,i){let o;return getApp1Segment(e).then(function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}},i)})}const getApp1Segment=e=>new Promise((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e<c;e+=12){if(274==i.getUint16(e,f)){if(3!==i.getUint16(e+2,f))return r(\"Orientation data type is invalid\");if(1!==i.getUint32(e+4,f))return r(\"Orientation data count is invalid\");i.setUint16(e+8,1,f);break}}return t(e.slice(o,o+2+s))}o+=2+s}return t(new Blob)}),i.readAsArrayBuffer(e)});var e={};!function(e){var t,r,UZIP={};e.exports=UZIP,UZIP.parse=function(e,t){for(var r=UZIP.bin.readUshort,i=UZIP.bin.readUint,o=0,a={},s=new Uint8Array(e),f=s.length-4;101010256!=i(s,f);)f--;o=f;o+=4;var l=r(s,o+=4);r(s,o+=2);var c=i(s,o+=2),u=i(s,o+=4);o+=4,o=u;for(var h=0;h<l;h++){i(s,o),o+=4,o+=4,o+=4,i(s,o+=4);c=i(s,o+=4);var d=i(s,o+=4),A=r(s,o+=4),g=r(s,o+2),p=r(s,o+4);o+=6;var m=i(s,o+=8);o+=4,o+=A+g+p,UZIP._readLocal(s,m,a,c,d,t)}return a},UZIP._readLocal=function(e,t,r,i,o,a){var s=UZIP.bin.readUshort,f=UZIP.bin.readUint;f(e,t),s(e,t+=4),s(e,t+=2);var l=s(e,t+=2);f(e,t+=2),f(e,t+=4),t+=4;var c=s(e,t+=8),u=s(e,t+=2);t+=2;var h=UZIP.bin.readUTF8(e,t,c);if(t+=c,t+=u,a)r[h]={size:o,csize:i};else{var d=new Uint8Array(e.buffer,t);if(0==l)r[h]=new Uint8Array(d.buffer.slice(t,t+i));else{if(8!=l)throw\"unknown compression method: \"+l;var A=new Uint8Array(o);UZIP.inflateRaw(d,A),r[h]=A}}},UZIP.inflateRaw=function(e,t){return UZIP.F.inflate(e,t)},UZIP.inflate=function(e,t){return e[0],e[1],UZIP.inflateRaw(new Uint8Array(e.buffer,e.byteOffset+2,e.length-6),t)},UZIP.deflate=function(e,t){null==t&&(t={level:6});var r=0,i=new Uint8Array(50+Math.floor(1.1*e.length));i[r]=120,i[r+1]=156,r+=2,r=UZIP.F.deflateRaw(e,i,r,t.level);var o=UZIP.adler(e,0,e.length);return i[r+0]=o>>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o<i;o++)e=UZIP.crc.table[255&(e^t[r+o])]^e>>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a<s;){for(var f=Math.min(a+5552,s);a<f;)o+=i+=e[a++];i%=65521,o%=65521}return o<<16|i},UZIP.bin={readUshort:function(e,t){return e[t]|e[t+1]<<8},writeUshort:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII:function(e,t,r){for(var i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,t,r){for(var i,o=\"\",a=0;a<r;a++)o+=\"%\"+UZIP.bin.pad(e[t+a].toString(16));try{i=decodeURIComponent(o)}catch(i){return UZIP.bin.readASCII(e,t,r)}return i},writeUTF8:function(e,t,r){for(var i=r.length,o=0,a=0;a<i;a++){var s=r.charCodeAt(a);if(0==(4294967168&s))e[t+o]=s,o++;else if(0==(4294965248&s))e[t+o]=192|s>>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i<t;i++){var o=e.charCodeAt(i);if(0==(4294967168&o))r++;else if(0==(4294965248&o))r+=2;else if(0==(4294901760&o))r+=3;else{if(0!=(4292870144&o))throw\"e\";r+=4}}return r}},UZIP.F={},UZIP.F.deflateRaw=function(e,t,r,i){var o=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][i],a=UZIP.F.U,s=UZIP.F._goodIndex;UZIP.F._hash;var f=UZIP.F._putsE,l=0,c=r<<3,u=0,h=e.length;if(0==i){for(;l<h;){f(t,c,l+(_=Math.min(65535,h-l))==h?1:0),c=UZIP.F._copyExact(e,l,_,t,c+8),l+=_}return c>>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l<h;l++){if(b=y,l+1<h-2){y=UZIP.F._hash(e,l+1);var E=l+1&32767;g[E]=A[y],A[y]=E}if(u<=l){(p>14e3||m>26697)&&h-l>100&&(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(l==h-1||u==h?1:0,d,p,v,e,w,l-w,t,c),p=m=v=0,w=l);var F=0;l<h-2&&(F=UZIP.F._bestMatch(e,l,g,b,Math.min(o[2],h-l),o[3]));var _=F>>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(1,d,p,v,e,w,l-w,t,c),p=0,m=0,p=m=v=0,w=l);0!=(7&c);)c++;return c>>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2<d&&(d=l+2);for(var A=0,g=0;g<d-2;g++){var p=t-l+g+32768&32767,m=p-r[p]+32768&32767;m>A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t<o&&e[t]==e[t-r];)t++;return t-i},UZIP.F._hash=function(e,t){return(e[t]<<8|e[t+1])+(e[t+2]<<4)&65535},UZIP.saved=0,UZIP.F._writeBlock=function(e,t,r,i,o,a,s,f,l){var c,u,h,d,A,g,p,m,w,v=UZIP.F.U,b=UZIP.F._putsF,y=UZIP.F._putsE;v.lhst[256]++,u=(c=UZIP.F.getTrees())[0],h=c[1],d=c[2],A=c[3],g=c[4],p=c[5],m=c[6],w=c[7];var E=32+(0==(l+3&7)?0:8-(l+3&7))+(s<<3),F=i+UZIP.F.contSize(v.fltree,v.lhst)+UZIP.F.contSize(v.fdtree,v.dhst),_=i+UZIP.F.contSize(v.ltree,v.lhst)+UZIP.F.contSize(v.dtree,v.dhst);_+=14+3*p+UZIP.F.contSize(v.itree,v.ihst)+(2*v.ihst[16]+3*v.ihst[17]+7*v.ihst[18]);for(var B=0;B<286;B++)v.lhst[B]=0;for(B=0;B<30;B++)v.dhst[B]=0;for(B=0;B<19;B++)v.ihst[B]=0;var U=E<F&&E<_?0:F<_?1:2;if(b(f,l,e),b(f,l+1,U),l+=3,0==U){for(;0!=(7&l);)l++;l=UZIP.F._copyExact(o,a,s,f,l)}else{var C,I;if(1==U&&(C=v.fltree,I=v.fdtree),2==U){UZIP.F.makeCodes(v.ltree,u),UZIP.F.revCodes(v.ltree,u),UZIP.F.makeCodes(v.dtree,h),UZIP.F.revCodes(v.dtree,h),UZIP.F.makeCodes(v.itree,d),UZIP.F.revCodes(v.itree,d),C=v.ltree,I=v.dtree,y(f,l,A-257),y(f,l+=5,g-1),y(f,l+=5,p-4),l+=4;for(var Q=0;Q<p;Q++)y(f,l+3*Q,v.itree[1+(v.ordr[Q]<<1)]);l+=3*p,l=UZIP.F._codeTiny(m,v.itree,f,l),l=UZIP.F._codeTiny(w,v.itree,f,l)}for(var M=a,x=0;x<r;x+=2){for(var T=t[x],S=T>>>23,R=M+(8388607&T);M<R;)l=UZIP.F._writeLit(o[M++],C,f,l);if(0!=S){var O=t[x+1],P=O>>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),S-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=S}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f<i.length;f+=2)e.ihst[i[f]]++;for(f=0;f<a.length;f+=2)e.ihst[a[f]]++;for(var l=UZIP.F._hufTree(e.ihst,e.itree,7),c=19;c>4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(e[r+1]);return t},UZIP.F.nonZero=function(e){for(var t=\"\",r=0;r<e.length;r+=2)0!=e[r+1]&&(t+=(r>>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i<t.length;i++)r+=t[i]*e[1+(i<<1)];return r},UZIP.F._codeTiny=function(e,t,r,i){for(var o=0;o<e.length;o+=2){var a=e[o],s=e[o+1];i=UZIP.F._writeLit(a,t,r,i);var f=16==a?2:17==a?3:7;a>15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i<r;i+=2){var o=e[i+1],a=i+3<r?e[i+3]:-1,s=i+5<r?e[i+5]:-1,f=0==i?-1:e[i-1];if(0==o&&a==o&&s==o){for(var l=i+5;l+2<r&&e[l+2]==o;)l+=2;(c=Math.min(l+1-i>>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2<r&&e[l+2]==o;)l+=2;var c=Math.min(l+1-i>>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;s<a;s+=2)t[s]=0,t[s+1]=0;for(s=0;s<o;s++)0!=e[s]&&i.push({lit:s,f:e[s]});var f=i.length,l=i.slice(0);if(0==f)return 0;if(1==f){var c=i[0].lit;l=0==c?1:0;return t[1+(c<<1)]=1,t[1+(l<<1)]=1,1}i.sort(function(e,t){return e.f-t.f});var u=i[0],h=i[1],d=0,A=1,g=2;for(i[0]={lit:-1,f:u.f+h.f,l:u,r:h,d:0};A!=f-1;)u=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],h=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],i[A++]={lit:-1,f:u.f+h.f,l:u,r:h};var p=UZIP.F.setDepth(i[A-1],0);for(p>r&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;s<f;s++)t[1+(l[s].lit<<1)]=l[s].d;return p},UZIP.F.setDepth=function(e,t){return-1!=e.lit?(e.d=t,t):Math.max(UZIP.F.setDepth(e.l,t+1),UZIP.F.setDepth(e.r,t+1))},UZIP.F.restrictDepth=function(e,t,r){var i=0,o=1<<r-t,a=0;for(e.sort(function(e,t){return t.d==e.d?e.f-t.f:t.d-e.d}),i=0;i<e.length&&e[i].d>t;i++){var s=e[i].d;e[i].d=t,a+=o-(1<<r-s)}for(a>>>=r-t;a>0;){(s=e[i].d)<t?(e[i].d++,a-=1<<t-s-1):i++}for(;i>=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_<v;_++){var U=a(e,F+3*_,3);u.itree[1+(u.ordr[_]<<1)]=U,U>B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<<B)-1,m+w,e,F,u.ttree);var C=i._copyOut(u.ttree,0,m,u.ltree);b=(1<<C)-1;var I=i._copyOut(u.ttree,m,w,u.dtree);y=(1<<I)-1,f(u.ltree,C),l(u.ltree,C,d),f(u.dtree,I),l(u.dtree,I,A)}for(;;){var Q=d[c(e,F)&b];F+=15&Q;var M=Q>>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var T=u.ldef[M-257];x=E+(T>>>3)+a(e,F,7&T),F+=7&T}var S=A[c(e,F)&y];F+=15&S;var R=S>>>4,O=u.ddef[R],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E<x;)t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P];E=x}}}else{0!=(7&F)&&(F+=8-(7&F));var H=4+(F>>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l<r;){var c=e[f(i,o)&t];o+=15&c;var u=c>>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l<A;)a[l]=h,l++}}return o},UZIP.F._copyOut=function(e,t,r,i){for(var o=0,a=0,s=i.length>>>1;a<r;){var f=e[a+t];i[a<<1]=0,i[1+(a<<1)]=f,f>o&&(o=f),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},UZIP.F.makeCodes=function(e,t){for(var r,i,o,a,s=UZIP.F.U,f=e.length,l=s.bl_count,c=0;c<=t;c++)l[c]=0;for(c=1;c<f;c+=2)l[e[c]]++;var u=s.next_code;for(r=0,l[0]=0,i=1;i<=t;i++)r=r+l[i-1]<<1,u[i]=r;for(o=0;o<f;o+=2)0!=(a=e[o+1])&&(e[o]=u[a],u[a]++)},UZIP.F.codes2map=function(e,t,r){for(var i=e.length,o=UZIP.F.U.rev15,a=0;a<i;a+=2)if(0!=e[a+1])for(var s=a>>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<<c,h=u+(1<<c);u!=h;){r[o[u]>>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o<e.length;o+=2){var a=e[o]<<t-e[o+1];e[o]=r[a]>>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},UZIP.F._bitsF=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},UZIP.F._get17=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}({get exports(){return e},set exports(t){e=t}});var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII(e,t,r){for(let i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},readBytes(e,t,r){const i=[];for(let o=0;o<r;o++)i.push(e[t+o]);return i},pad:e=>e.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o<i;o++)a+=`%${e.pad(t[r+o].toString(16))}`;try{o=decodeURIComponent(a)}catch(o){return e.readASCII(t,r,i)}return o}};function decodeImage(t,r,i,o){const a=r*i,s=_getBPP(o),f=Math.ceil(r*s/8),l=new Uint8Array(4*a),c=new Uint32Array(l.buffer),{ctype:u}=o,{depth:h}=o,d=e.readUshort;if(6==u){const e=a<<2;if(8==h)for(var A=0;A<e;A+=4)l[A]=t[A],l[A+1]=t[A+1],l[A+2]=t[A+2],l[A+3]=t[A+3];if(16==h)for(A=0;A<e;A++)l[A]=t[A<<1]}else if(2==u){const e=o.tabs.tRNS;if(null==e){if(8==h)for(A=0;A<a;A++){var g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g]}if(16==h)for(A=0;A<a;A++){g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g]}}else{var p=e[0];const r=e[1],i=e[2];if(8==h)for(A=0;A<a;A++){var m=A<<2;g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g],t[g]==p&&t[g+1]==r&&t[g+2]==i&&(l[m+3]=0)}if(16==h)for(A=0;A<a;A++){m=A<<2,g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g],d(t,g)==p&&d(t,g+2)==r&&d(t,g+4)==i&&(l[m+3]=0)}}}else if(3==u){const e=o.tabs.PLTE,s=o.tabs.tRNS,c=s?s.length:0;if(1==h)for(var w=0;w<i;w++){var v=w*f,b=w*r;for(A=0;A<r;A++){m=b+A<<2;var y=3*(E=t[v+(A>>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}if(2==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(4==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(8==h)for(A=0;A<a;A++){var E;m=A<<2,y=3*(E=t[A]);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}else if(4==u){if(8==h)for(A=0;A<a;A++){m=A<<2;var F=t[_=A<<1];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+1]}if(16==h)for(A=0;A<a;A++){var _;m=A<<2,F=t[_=A<<2];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+2]}}else if(0==u)for(p=o.tabs.tRNS?o.tabs.tRNS:-1,w=0;w<i;w++){const e=w*f,i=w*r;if(1==h)for(var B=0;B<r;B++){var U=(F=255*(t[e+(B>>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B<r;B++){U=(F=85*(t[e+(B>>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B<r;B++){U=(F=17*(t[e+(B>>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B<r;B++){U=(F=t[e+B])==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(16==h)for(B=0;B<r;B++){F=t[e+(B<<1)],U=d(t,e+(B<<1))==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}}return l}function _decompress(e,r,i,o){const a=_getBPP(e),s=Math.ceil(i*a/8),f=new Uint8Array((s+1+e.interlace)*o);return r=e.tabs.CgBI?t(r,f):_inflate(r,f),0==e.interlace?r=_filterZero(r,e,0,i,o):1==e.interlace&&(r=function _readInterlace(e,t){const r=t.width,i=t.height,o=_getBPP(t),a=o>>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b<i;)b+=p,v++;let y=u[A];for(;y<r;)y+=m,w++;const E=Math.ceil(w*o/8);_filterZero(e,t,l,w,v);let F=0,_=c[A];for(;_<i;){let t=u[A],i=l+F*E<<3;for(;t<r;){var g;if(1==o)g=(g=e[i>>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t<a;t++)f[r+t]=e[(i>>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;B<u;B++){const r=w(t,g+3*B,3);F.Q[1+(F.X[B]<<1)]=r,r>e&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<<e)-1,l+c,t,g,F.v);const r=p.V(F.v,0,l,F.C);h=(1<<r)-1;const i=p.V(F.v,l,c,F.D);d=(1<<i)-1,b(F.C,r),y(F.C,r,o),b(F.D,i),y(F.D,i,a)}for(;;){const e=o[E(t,g)&h];g+=15&e;const i=e>>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A<e;)r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l];A=e}}}}else{0!=(7&g)&&(g+=8-(7&g));const o=4+(g>>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c<i;){const e=t[l(o,a)&r];a+=15&e;const i=e>>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c<r;)s[c]=e,c++}}return a},e.H.V=function(e,t,r,i){let o=0,a=0;const s=i.length>>>1;for(;a<r;){const r=e[a+t];i[a<<1]=0,i[1+(a<<1)]=r,r>o&&(o=r),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},e.H.n=function(t,r){const i=e.H.m,o=t.length;let a,s,f;let l;const c=i.j;for(var u=0;u<=r;u++)c[u]=0;for(u=1;u<o;u+=2)c[t[u]]++;const h=i.K;for(a=0,c[0]=0,s=1;s<=r;s++)a=a+c[s-1]<<1,h[s]=a;for(f=0;f<o;f+=2)l=t[f+1],0!=l&&(t[f]=h[l],h[l]++)},e.H.A=function(t,r,i){const o=t.length,a=e.H.m.r;for(let e=0;e<o;e+=2)if(0!=t[e+1]){const o=e>>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<<l;const u=c+(1<<l);for(;c!=u;){i[a[c]>>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e<t.length;e+=2){const a=t[e]<<r-t[e+1];t[e]=i[a]>>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},e.H.b=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},e.H.Z=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u<s;u++)e[u+1]=e[u+1]+(e[u+1-a]>>>1)&255;for(let t=0;t<o;t++)if(f=r+t*s,l=f+t+1,c=e[l-1],u=0,0==c)for(;u<s;u++)e[f+u]=e[l+u];else if(1==c){for(;u<a;u++)e[f+u]=e[l+u];for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-a]}else if(2==c)for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-s];else if(3==c){for(;u<a;u++)e[f+u]=e[l+u]+(e[f+u-s]>>>1);for(;u<s;u++)e[f+u]=e[l+u]+(e[f+u-s]+e[f+u-a]>>>1)}else{for(;u<a;u++)e[f+u]=e[l+u]+_paeth(0,e[f+u-s],0);for(;u<s;u++)e[f+u]=e[l+u]+_paeth(e[f+u-a],e[f+u-s],e[f+u-a-s])}return e}function _paeth(e,t,r){const i=e+t-r,o=i-e,a=i-t,s=i-r;return o*o<=a*a&&o*o<=s*s?e:a*a<=s*s?t:r}function _IHDR(t,r,i){i.width=e.readUint(t,r),r+=4,i.height=e.readUint(t,r),r+=4,i.depth=t[r],r++,i.ctype=t[r],r++,i.compress=t[r],r++,i.filter=t[r],r++,i.interlace=t[r],r++}function _copyTile(e,t,r,i,o,a,s,f,l){const c=Math.min(t,o),u=Math.min(r,a);let h=0,d=0;for(let r=0;r<u;r++)for(let a=0;a<c;a++)if(s>=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o<i.length;){const e=a.readUint(i,o);o+=4;const r=a.readASCII(i,o,4);if(o+=4,\"IHDR\"==r)_IHDR(i,o,l);else if(\"iCCP\"==r){for(var p=o;0!=i[p];)p++;a.readASCII(i,o,p-o),i[p+1];const s=i.slice(p+2,o+e);let f=null;try{f=_inflate(s)}catch(e){f=t(s)}l.tabs[r]=f}else if(\"CgBI\"==r)l.tabs[r]=i.slice(o,o+4);else if(\"IDAT\"==r){for(g=0;g<e;g++)c[h+g]=i[o+g];h+=e}else if(\"acTL\"==r)l.tabs[r]={num_frames:f(i,o),num_plays:f(i,o+4)},u=new Uint8Array(i.length);else if(\"fcTL\"==r){if(0!=d)(E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height),d=0;const e={x:f(i,o+12),y:f(i,o+16),width:f(i,o+4),height:f(i,o+8)};let t=s(i,o+22);t=s(i,o+20)/(0==t?100:t);const r={rect:e,delay:Math.round(1e3*t),dispose:i[o+24],blend:i[o+25]};l.frames.push(r)}else if(\"fdAT\"==r){for(g=0;g<e-4;g++)u[d+g]=i[o+g+4];d+=e-4}else if(\"pHYs\"==r)l.tabs[r]=[a.readUint(i,o),a.readUint(i,o+4),i[o+8]];else if(\"cHRM\"==r){l.tabs[r]=[];for(g=0;g<8;g++)l.tabs[r].push(a.readUint(i,o+4*g))}else if(\"tEXt\"==r||\"zTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});var m=a.nextZero(i,o),w=a.readASCII(i,o,m-o),v=o+e-m-1;if(\"tEXt\"==r)y=a.readASCII(i,m+1,v);else{var b=_inflate(i.slice(m+2,m+2+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"iTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});m=0,p=o;m=a.nextZero(i,p);w=a.readASCII(i,p,m-p);const t=i[p=m+1];var y;i[p+1],p+=2,m=a.nextZero(i,p),a.readASCII(i,p,m-p),p=m+1,m=a.nextZero(i,p),a.readUTF8(i,p,m-p);v=e-((p=m+1)-o);if(0==t)y=a.readUTF8(i,p,v);else{b=_inflate(i.slice(p,p+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"PLTE\"==r)l.tabs[r]=a.readBytes(i,o,e);else if(\"hIST\"==r){const e=l.tabs.PLTE.length/3;l.tabs[r]=[];for(g=0;g<e;g++)l.tabs[r].push(s(i,o+2*g))}else if(\"tRNS\"==r)3==l.ctype?l.tabs[r]=a.readBytes(i,o,e):0==l.ctype?l.tabs[r]=s(i,o):2==l.ctype&&(l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]);else if(\"gAMA\"==r)l.tabs[r]=a.readUint(i,o)/1e5;else if(\"sRGB\"==r)l.tabs[r]=i[o];else if(\"bKGD\"==r)0==l.ctype||4==l.ctype?l.tabs[r]=[s(i,o)]:2==l.ctype||6==l.ctype?l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]:3==l.ctype&&(l.tabs[r]=i[o]);else if(\"IEND\"==r)break;o+=e,a.readUint(i,o),o+=4}var E;return 0!=d&&((E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height)),l.data=_decompress(l,c,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function toRGBA8(e){const t=e.width,r=e.height;if(null==e.tabs.acTL)return[decodeImage(e.data,t,r,e).buffer];const i=[];null==e.frames[0].data&&(e.frames[0].data=e.data);const o=t*r*4,a=new Uint8Array(o),s=new Uint8Array(o),f=new Uint8Array(o);for(let c=0;c<e.frames.length;c++){const u=e.frames[c],h=u.rect.x,d=u.rect.y,A=u.rect.width,g=u.rect.height,p=decodeImage(u.data,A,g,e);if(0!=c)for(var l=0;l<o;l++)f[l]=a[l];if(0==u.blend?_copyTile(p,A,g,a,t,r,h,d,0):1==u.blend&&_copyTile(p,A,g,a,t,r,h,d,1),i.push(a.buffer.slice(0)),0==u.dispose);else if(1==u.dispose)_copyTile(s,A,g,a,t,r,h,d,0);else if(2==u.dispose)for(l=0;l<o;l++)a[l]=f[l]}return i},_paeth:_paeth,_copyTile:_copyTile,_bin:e}}();!function(){const{_copyTile:e}=UPNG,{_bin:t}=UPNG,r=UPNG._paeth;var i={table:function(){const e=new Uint32Array(256);for(let t=0;t<256;t++){let r=t;for(let e=0;e<8;e++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a<o;a++)e=i.table[255&(e^t[r+a])]^e>>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c<f;c++){const e=i[c];l.push([e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c<f;c++){let e=4294967295;for(var u=0,h=0;h<f;h++){var d=D(l[c],l[h]);h!=c&&d<e&&(e=d,u=h)}}const A=new Uint32Array(o.buffer),g=new Int16Array(t*r*4),p=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(c=0;c<p.length;c++)p[c]=255*((p[c]+.5)/16-.5);for(let o=0;o<r;o++)for(let w=0;w<t;w++){var m;c=4*(o*t+w);if(2!=s)m=[N(e[c]+g[c]),N(e[c+1]+g[c+1]),N(e[c+2]+g[c+2]),N(e[c+3]+g[c+3])];else{d=p[4*(3&o)+(3&w)];m=[N(e[c]+d),N(e[c+1]+d),N(e[c+2]+d),N(e[c+3]+d)]}u=0;let v=16777215;for(h=0;h<f;h++){const e=D(m,l[h]);e<v&&(v=e,u=h)}const b=l[u],y=[m[0]-b[0],m[1]-b[1],m[2]-b[2],m[3]-b[3]];1==s&&(w!=t-1&&addErr(y,g,c+4,7),o!=r-1&&(0!=w&&addErr(y,g,c+4*t-4,3),addErr(y,g,c+4*t,5),w!=t-1&&addErr(y,g,c+4*t+4,1))),a[c>>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w<m;w++)e.plte[w]>>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v<e.frames.length;v++){d&&(p+=38),p+=(F=e.frames[v]).cimg.length+12,0!=v&&(p+=4)}p+=12;const b=new Uint8Array(p),y=[137,80,78,71,13,10,26,10];for(w=0;w<8;w++)b[w]=y[w];if(l(b,h,13),h+=4,u(b,h,\"IHDR\"),h+=4,l(b,h,r),h+=4,l(b,h,o),h+=4,b[h]=e.depth,h++,b[h]=e.ctype,h++,b[h]=0,h++,b[h]=0,h++,b[h]=0,h++,l(b,h,f(b,h-17,17)),h+=4,null!=s.sRGB&&(l(b,h,1),h+=4,u(b,h,\"sRGB\"),h+=4,b[h]=s.sRGB,h++,l(b,h,f(b,h-5,5)),h+=4),null!=s.iCCP){const e=13+A.length;l(b,h,e),h+=4,u(b,h,\"iCCP\"),h+=4,u(b,h,\"ICC profile\"),h+=11,h+=2,b.set(A,h),h+=A.length,l(b,h,f(b,h-(e+4),e+4)),h+=4}if(null!=s.pHYs&&(l(b,h,9),h+=4,u(b,h,\"pHYs\"),h+=4,l(b,h,s.pHYs[0]),h+=4,l(b,h,s.pHYs[1]),h+=4,b[h]=s.pHYs[2],h++,l(b,h,f(b,h-13,13)),h+=4),d&&(l(b,h,8),h+=4,u(b,h,\"acTL\"),h+=4,l(b,h,e.frames.length),h+=4,l(b,h,null!=s.loop?s.loop:0),h+=4,l(b,h,f(b,h-12,12)),h+=4),3==e.ctype){l(b,h,3*(m=e.plte.length)),h+=4,u(b,h,\"PLTE\"),h+=4;for(w=0;w<m;w++){const t=3*w,r=e.plte[w],i=255&r,o=r>>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w<m;w++)b[h+w]=e.plte[w]>>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;v<e.frames.length;v++){var F=e.frames[v];d&&(l(b,h,26),h+=4,u(b,h,\"fcTL\"),h+=4,l(b,h,E++),h+=4,l(b,h,F.rect.width),h+=4,l(b,h,F.rect.height),h+=4,l(b,h,F.rect.x),h+=4,l(b,h,F.rect.y),h+=4,c(b,h,a[v]),h+=2,c(b,h,1e3),h+=2,b[h]=F.dispose,h++,b[h]=F.blend,h++,l(b,h,f(b,h-30,30)),h+=4);const t=F.cimg;l(b,h,(m=t.length)+(0==v?0:4)),h+=4;const r=h;u(b,h,0==v?\"IDAT\":\"fdAT\"),h+=4,0!=v&&(l(b,h,E++),h+=4),b.set(t,h),h+=m,l(b,h,f(b,r,h-r)),h+=4}return l(b,h,0),h+=4,u(b,h,\"IEND\"),h+=4,l(b,h,f(b,h-4,4)),h+=4,b.buffer}function compressPNG(e,t,r){for(let i=0;i<e.frames.length;i++){const o=e.frames[i];o.rect.width;const a=o.rect.height,s=new Uint8Array(a*o.bpl+a);o.cimg=_filterZero(o.img,a,o.bpp,o.bpl,s,t,r)}}function compress(t,r,i,o,a){const s=a[0],f=a[1],l=a[2],c=a[3],u=a[4],h=a[5];let d=6,A=8,g=255;for(var p=0;p<t.length;p++){const e=new Uint8Array(t[p]);for(var m=e.length,w=0;w<m;w+=4)g&=e[w+3]}const v=255!=g,b=function framize(t,r,i,o,a,s){const f=[];for(var l=0;l<t.length;l++){const h=new Uint8Array(t[l]),A=new Uint32Array(h.buffer);var c;let g=0,p=0,m=r,w=i,v=o?1:0;if(0!=l){const b=s||o||1==l||0!=f[l-2].dispose?1:2;let y=0,E=1e9;for(let e=0;e<b;e++){var u=new Uint8Array(t[l-1-e]);const o=new Uint32Array(t[l-1-e]);let s=r,f=i,c=-1,h=-1;for(let e=0;e<i;e++)for(let t=0;t<r;t++){A[d=e*r+t]!=o[d]&&(t<s&&(s=t),t>c&&(c=t),e<f&&(f=e),e>h&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v<E&&(E=v,y=e,g=s,p=f,m=c-s+1,w=h-f+1)}u=new Uint8Array(t[l-1-y]);1==y&&(f[l-1].dispose=2),c=new Uint8Array(m*w*4),e(u,r,i,c,m,w,-g,-p,0),v=e(h,r,i,c,m,w,-g,-p,3)?1:0,1==v?_prepareDiff(h,r,i,c,{x:g,y:p,width:m,height:w}):e(h,r,i,c,m,w,-g,-p,0)}else c=h.slice(0);f.push({rect:{x:g,y:p,width:m,height:w},img:c,blend:v,dispose:0})}if(o)for(l=0;l<f.length;l++){if(1==(A=f[l]).blend)continue;const e=A.rect,o=f[l-1].rect,s=Math.min(e.x,o.x),c=Math.min(e.y,o.y),u={x:s,y:c,width:Math.max(e.x+e.width,o.x+o.width)-s,height:Math.max(e.y+e.height,o.y+o.height)-c};f[l-1].dispose=1,l-1!=0&&_updateFrame(t,r,i,f,l-1,u,a),_updateFrame(t,r,i,f,l,u,a)}let h=0;if(1!=t.length)for(var d=0;d<f.length;d++){var A;h+=(A=f[d]).rect.width*A.rect.height}return f}(t,r,i,s,f,l),y={},E=[],F=[];if(0!=o){const e=[];for(w=0;w<b.length;w++)e.push(b[w].img.buffer);const t=function concatRGBA(e){let t=0;for(var r=0;r<e.length;r++)t+=e[r].byteLength;const i=new Uint8Array(t);let o=0;for(r=0;r<e.length;r++){const t=new Uint8Array(e[r]),a=t.length;for(let e=0;e<a;e+=4){let r=t[e],a=t[e+1],s=t[e+2];const f=t[e+3];0==f&&(r=a=s=0),i[o+e]=r,i[o+e+1]=a,i[o+e+2]=s,i[o+e+3]=f}o+=a}return i.buffer}(e),r=quantize(t,o);for(w=0;w<r.plte.length;w++)E.push(r.plte[w].est.rgba);let i=0;for(w=0;w<b.length;w++){const e=(B=b[w]).img.length;var _=new Uint8Array(r.inds.buffer,i>>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;p<b.length;p++){var B=b[p];const e=new Uint32Array(B.img.buffer);var U=B.rect.width;m=e.length,_=new Uint8Array(m);F.push(_);for(w=0;w<m;w++){const t=e[w];if(0!=w&&t==e[w-1])_[w]=_[w-1];else if(w>U&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p<b.length;p++){(B=b[p]).rect.x,B.rect.y;U=B.rect.width;const e=B.rect.height;let t=B.img;new Uint32Array(t.buffer);let r=4*U,i=4;if(C<=256&&0==u){r=Math.ceil(A*U/8);var I=new Uint8Array(r*e);const o=F[p];for(let t=0;t<e;t++){w=t*r;const e=t*U;if(8==A)for(var Q=0;Q<U;Q++)I[w+Q]=o[e+Q];else if(4==A)for(Q=0;Q<U;Q++)I[w+(Q>>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q<U;Q++)I[w+(Q>>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q<U;Q++)I[w+(Q>>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;w<o;w++){const e=3*w,r=4*w;I[e]=t[r],I[e+1]=t[r+1],I[e+2]=t[r+2]}t=I,d=2,i=3,r=3*U}B.img=t,B.bpl=r,B.bpp=i}return{ctype:d,depth:A,plte:E,frames:b}}function _updateFrame(t,r,i,o,a,s,f){const l=Uint8Array,c=Uint32Array,u=new l(t[a-1]),h=new c(t[a-1]),d=a+1<t.length?new l(t[a+1]):null,A=new l(t[a]),g=new c(A.buffer);let p=r,m=i,w=-1,v=-1;for(let e=0;e<s.height;e++)for(let t=0;t<s.width;t++){const i=s.x+t,f=s.y+e,l=f*r+i,c=g[l];0==c||0==o[a-1].dispose&&h[l]==c&&(null==d||0!=d[4*l+3])||(i<p&&(p=i),i>w&&(w=i),f<m&&(m=f),f>v&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h<c.length;h++){for(let a=0;a<t;a++)_filterLine(o,e,a,i,r,c[h]);f.push(u.deflate(o,l))}let d,A=1e9;for(h=0;h<f.length;h++)f[h].length<A&&(d=h,A=f[h].length);return f[d]}function _filterLine(e,t,i,o,a,s){const f=i*o;let l=f+i;if(e[l]=s,l++,0==s)if(o<500)for(var c=0;c<o;c++)e[l+c]=t[f+c];else e.set(new Uint8Array(t.buffer,f,o),l);else if(1==s){for(c=0;c<a;c++)e[l+c]=t[f+c];for(c=a;c<o;c++)e[l+c]=t[f+c]-t[f+c-a]+256&255}else if(0==i){for(c=0;c<a;c++)e[l+c]=t[f+c];if(2==s)for(c=a;c<o;c++)e[l+c]=t[f+c];if(3==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-(t[f+c-a]>>1)+256&255;if(4==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-r(t[f+c-a],0,0)+256&255}else{if(2==s)for(c=0;c<o;c++)e[l+c]=t[f+c]+256-t[f+c-o]&255;if(3==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-(t[f+c-o]>>1)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-(t[f+c-o]+t[f+c-a]>>1)&255}if(4==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-r(0,t[f+c-o],0)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-r(t[f+c-a],t[f+c-o],t[f+c-a-o])&255}}}function quantize(e,t){const r=new Uint8Array(e),i=r.slice(0),o=new Uint32Array(i.buffer),a=getKDtree(i,t),s=a[0],f=a[1],l=r.length,c=new Uint8Array(l>>2);let u;if(r.length<2e7)for(var h=0;h<l;h+=4){u=getNearest(s,d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255)),c[h>>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h<l;h+=4){var d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255);for(u=s;u.left;)u=planeDst(u.est,d,A,g,p)<=0?u.left:u.right;c[h>>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.length<t;){let t=0,o=0;for(var s=0;s<a.length;s++)a[s].est.L>t&&(t=a[s].est.L,o=s);if(t<r)break;const f=a[o],l=splitPixels(e,i,f.i0,f.i1,f.est.e,f.est.eMq255);if(f.i0>=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort((e,t)=>t.bst.N-e.bst.N);for(s=0;s<a.length;s++)a[s].ind=s;return[o,a]}function getNearest(e,t,r,i,o){if(null==e.left)return e.tdst=function dist(e,t,r,i,o){const a=t-e[0],s=r-e[1],f=i-e[2],l=o-e[3];return a*a+s*s+f*f+l*l}(e.est.q,t,r,i,o),e;const a=planeDst(e.est,t,r,i,o);let s=e.left,f=e.right;a>0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdst<l.tdst?c:l}function planeDst(e,t,r,i,o){const{e:a}=e;return a[0]*t+a[1]*r+a[2]*i+a[3]*o-e.eMq}function splitPixels(e,t,r,i,o,a){for(i-=4;r<i;){for(;vecDot(e,r,o)<=a;)r+=4;for(;vecDot(e,i,o)>a;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a<r;a+=4){const t=e[a]*(1/255),r=e[a+1]*(1/255),s=e[a+2]*(1/255),f=e[a+3]*(1/255);o[0]+=t,o[1]+=r,o[2]+=s,o[3]+=f,i[0]+=t*t,i[1]+=t*r,i[2]+=t*s,i[3]+=t*f,i[5]+=r*r,i[6]+=r*s,i[7]+=r*f,i[10]+=s*s,i[11]+=s*f,i[15]+=f*f}return i[4]=i[1],i[8]=i[2],i[9]=i[6],i[12]=i[3],i[13]=i[7],i[14]=i[11],{R:i,m:o,N:a}}function estats(e){const{R:t}=e,{m:r}=e,{N:i}=e,a=r[0],s=r[1],f=r[2],l=r[3],c=0==i?0:1/i,u=[t[0]-a*a*c,t[1]-a*s*c,t[2]-a*f*c,t[3]-a*l*c,t[4]-s*a*c,t[5]-s*s*c,t[6]-s*f*c,t[7]-s*l*c,t[8]-f*a*c,t[9]-f*s*c,t[10]-f*f*c,t[11]-f*l*c,t[12]-l*a*c,t[13]-l*s*c,t[14]-l*f*c,t[15]-l*l*c],h=u,d=o;let A=[Math.random(),Math.random(),Math.random(),Math.random()],g=0,p=0;if(0!=i)for(let e=0;e<16&&(A=d.multVec(h,A),p=Math.sqrt(d.dot(A,A)),A=d.sml(1/p,A),!(0!=e&&Math.abs(p-g)<1e-9));e++)g=p;const m=[a*c,s*c,f*c,l*c];return{Cov:u,q:m,e:A,L:g,eMq255:d.dot(d.sml(255,m),A),eMq:d.dot(A,m),rgba:(Math.round(255*m[3])<<24|Math.round(255*m[2])<<16|Math.round(255*m[1])<<8|Math.round(255*m[0])<<0)>>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i<e.length;i++)l.frames.push({rect:{x:0,y:0,width:t,height:r},img:new Uint8Array(e[i]),blend:0,dispose:1,bpp:Math.ceil(c/8),bpl:Math.ceil(u/8)});return compressPNG(l,0,!0),_main(l,t,r,s,f)},UPNG.encode.compress=compress,UPNG.encode.dither=dither,UPNG.quantize=quantize,UPNG.quantize.getKDtree=getKDtree,UPNG.quantize.getNearest=getNearest}();const t={toArrayBuffer(e,r){const i=e.width,o=e.height,a=i<<2,s=e.getContext(\"2d\").getImageData(0,0,i,o),f=new Uint32Array(s.data.buffer),l=(32*i+31)/32<<2,c=l*o,u=122+c,h=new ArrayBuffer(u),d=new DataView(h),A=1<<20;let g,p,m,w,v=A,b=0,y=0,E=0;function set16(e){d.setUint16(y,e,!0),y+=2}function set32(e){d.setUint32(y,e,!0),y+=4}function seek(e){y+=e}set16(19778),set32(u),seek(4),set32(122),set32(108),set32(i),set32(-o>>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b<o&&v>0;){for(w=122+b*l,g=0;g<a;)v--,p=f[E++],m=p>>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E<f.length?(v=A,setTimeout(convert,t._dly)):r(h)}()},toBlob(e,t){this.toArrayBuffer(e,e=>{t(new Blob([e],{type:\"image/bmp\"}))})},_dly:9};var r={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},i={[r.CHROME]:16384,[r.FIREFOX]:11180,[r.DESKTOP_SAFARI]:16384,[r.IE]:8192,[r.IOS]:4096,[r.ETC]:8192};const o=\"undefined\"!=typeof window,a=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,s=o&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(o||a)&&(s&&s.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(o||a)&&(s&&s.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise(i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)})}function getDataUrlFromFile(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)})}function loadImage(e){return new Promise((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e})}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=r.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=r.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=r.IOS:/Safari/i.test(t)?e=r.DESKTOP_SAFARI:/Firefox/i.test(t)?e=r.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=r.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),o=i[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>o*o;){const e=(o+a)/2,t=(o+s)/2;e<t?(s=t,a=t*l):(s=e*l,a=e),f=a*s}return{width:a,height:s}}function getNewCanvasAndCtx(e,t){let r,i;try{if(r=new OffscreenCanvas(e,t),i=r.getContext(\"2d\"),null===i)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(e){r=document.createElement(\"canvas\"),i=r.getContext(\"2d\")}return r.width=e,r.height=t,[r,i]}function drawImageInCanvas(e,t){const{width:r,height:i}=approximateBelowMaximumCanvasSizeOfBrowser(e.width,e.height),[o,a]=getNewCanvasAndCtx(r,i);return t&&/jpe?g/.test(t)&&(a.fillStyle=\"white\",a.fillRect(0,0,o.width,o.height)),a.drawImage(e,0,0,o.width,o.height),o}function isIOS(){return void 0!==isIOS.cachedResult||(isIOS.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),isIOS.cachedResult}function drawFileInCanvas(e,t={}){return new Promise(function(i,o){let a,s;var $Try_2_Post=function(){try{return s=drawImageInCanvas(a,t.fileType||e.type),i([a,s])}catch(e){return o(e)}},$Try_2_Catch=function(t){try{0;var $Try_3_Catch=function(e){try{throw e}catch(e){return o(e)}};try{let t;return getDataUrlFromFile(e).then(function(e){try{return t=e,loadImage(t).then(function(e){try{return a=e,function(){try{return $Try_2_Post()}catch(e){return o(e)}}()}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){$Try_3_Catch(e)}}catch(e){return o(e)}};try{if(isIOS()||[r.DESKTOP_SAFARI,r.MOBILE_SAFARI].includes(getBrowserName()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(e).then(function(e){try{return a=e,$Try_2_Post()}catch(e){return $Try_2_Catch()}},$Try_2_Catch)}catch(e){$Try_2_Catch()}})}function canvasToFile(e,r,i,o,a=1){return new Promise(function(s,f){let l;if(\"image/png\"===r){let c,u,h;return c=e.getContext(\"2d\"),{data:u}=c.getImageData(0,0,e.width,e.height),h=UPNG.encode([u.buffer],e.width,e.height,4096*a),l=new Blob([h],{type:r}),l.name=i,l.lastModified=o,$If_4.call(this)}{if(\"image/bmp\"===r)return new Promise(r=>t.toBlob(e,r)).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:r,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(r,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}})}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise(function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(r){try{return i=r,drawFileInCanvas(i).then(function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then(function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then(function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t))})}function getExifOrientation(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;o<i;){if(r.getUint16(o+2,!1)<=8)return t(-1);const e=r.getUint16(o,!1);if(o+=2,65505==e){if(1165519206!=r.getUint32(o+=2,!1))return t(-1);const e=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,e);const i=r.getUint16(o,e);o+=2;for(let a=0;a<i;a++)if(274==r.getUint16(o+12*a,e))return t(r.getUint16(o+12*a+8,e))}else{if(65280!=(65280&e))break;o+=r.getUint16(o,!1)}}return t(-1)},i.onerror=e=>r(e),i.readAsArrayBuffer(e)})}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise(function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise(function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)}).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then(function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}},o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)})}const f=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";let l;function compressOnWebWorker(e,t){return new Promise((r,i)=>{l||(l=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(f));const o=new Worker(l);o.addEventListener(\"message\",function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)}),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",()=>{i(t.signal.reason),o.terminate()}),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})})}function imageCompression(e,t){return new Promise(function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,{onProgress:f}=o,o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(1||e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then(function(e){try{return a=e,u()}catch(e){return i(e)}},i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.bootcdn.net/ajax/libs/browser-image-compression/2.0.2/browser-image-compression.js\",compressOnWebWorker(e,o).then(function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}},$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}})}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\",imageCompression});return{compress:function(file,option){return imageCompression(file,option)}}}();UE.dialog=function(){return{loadingPlaceholder:function(me){var loadingId=\"loading_\"+(+new Date).toString(36);me.focus();me.execCommand(\"inserthtml\",'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">');return loadingId},removeLoadingPlaceholder:function(me,loadingId){var loader=me.document.getElementById(loadingId);if(loader){domUtils.remove(loader,false)}},tipError:function(me,title){me.fireEvent(\"showmessage\",{content:title,type:\"error\",timeout:4e3})}}}();var filterWord=UE.filterWord=function(){function isWordDocument(str){return/(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(str)}function transUnit(v){v=v.replace(/[\\d.]+\\w+/g,function(m){return utils.transUnitToPx(m)});return v}function filterPasteWord(str){return str.replace(/[\\t\\r\\n]+/g,\" \").replace(/<!--[\\s\\S]*?-->/gi,\"\").replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi,function(str){if(browser.opera){return\"\"}try{if(/Bitmap/i.test(str)){return\"\"}var width=str.match(/width:([ \\d.]*p[tx])/i)[1],height=str.match(/height:([ \\d.]*p[tx])/i)[1],src=str.match(/src=\\s*\"([^\"]*)\"/i)[1];return'<img width=\"'+transUnit(width)+'\" height=\"'+transUnit(height)+'\" src=\"'+src+'\" />'}catch(e){return\"\"}}).replace(/<\\/?div[^>]*>/g,\"\").replace(/v:\\w+=([\"']?)[^'\"]+\\1/g,\"\").replace(/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\"\").replace(/<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\"<p><strong>$1</strong></p>\").replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi,function(str,name,marks,val){return name==\"class\"&&val==\"MsoListParagraph\"?str:\"\"}).replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi,function(a,b,c){return c.replace(/[\\t\\r\\n ]+/g,\" \")}).replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi,function(str,tag,tmp,style){var n=[],s=style.replace(/^\\s+|\\s+$/,\"\").replace(/&#39;/g,\"'\").replace(/&quot;/gi,\"'\").replace(/[\\d.]+(cm|pt)/g,function(str){return utils.transUnitToPx(str)}).split(/;\\s*/g);for(var i=0,v;v=s[i];i++){var name,value,parts=v.split(\":\");if(parts.length==2){name=parts[0].toLowerCase();value=parts[1].toLowerCase();if(/^(background)\\w*/.test(name)&&value.replace(/(initial|\\s)/g,\"\").length==0||/^(margin)\\w*/.test(name)&&/^0\\w+$/.test(value)){continue}switch(name){case\"mso-padding-alt\":case\"mso-padding-top-alt\":case\"mso-padding-right-alt\":case\"mso-padding-bottom-alt\":case\"mso-padding-left-alt\":case\"mso-margin-alt\":case\"mso-margin-top-alt\":case\"mso-margin-right-alt\":case\"mso-margin-bottom-alt\":case\"mso-margin-left-alt\":case\"mso-height\":case\"mso-width\":case\"mso-vertical-align-alt\":if(!/<table/.test(tag))n[i]=name.replace(/^mso-|-alt$/g,\"\")+\":\"+transUnit(value);continue;case\"horiz-align\":n[i]=\"text-align:\"+value;continue;case\"vert-align\":n[i]=\"vertical-align:\"+value;continue;case\"font-color\":case\"mso-foreground\":n[i]=\"color:\"+value;continue;case\"mso-background\":case\"mso-highlight\":n[i]=\"background:\"+value;continue;case\"mso-default-height\":n[i]=\"min-height:\"+transUnit(value);continue;case\"mso-default-width\":n[i]=\"min-width:\"+transUnit(value);continue;case\"mso-padding-between-alt\":n[i]=\"border-collapse:separate;border-spacing:\"+transUnit(value);continue;case\"text-line-through\":if(value==\"single\"||value==\"double\"){n[i]=\"text-decoration:line-through\"}continue;case\"mso-zero-height\":if(value==\"yes\"){n[i]=\"display:none\"}continue;case\"margin\":if(!/[1-9]/.test(value)){continue}}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(name)||/text\\-indent|padding|margin/.test(name)&&/\\-[\\d.]+/.test(value)){continue}n[i]=name+\":\"+parts[1]}}return tag+(n.length?' style=\"'+n.join(\";\").replace(/;{2,}/g,\";\")+'\"':\"\")})}return function(html){return isWordDocument(html)?filterPasteWord(html):html}}();(function(){var uNode=UE.uNode=function(obj){this.type=obj.type;this.data=obj.data;this.tagName=obj.tagName;this.parentNode=obj.parentNode;this.attrs=obj.attrs||{};this.children=obj.children};var notTransAttrs={href:1,src:1,_src:1,_href:1,cdata_data:1};var notTransTagName={style:1,script:1};var indentChar=\"    \",breakChar=\"\\n\";function insertLine(arr,current,begin){arr.push(breakChar);return current+(begin?1:-1)}function insertIndent(arr,current){for(var i=0;i<current;i++){arr.push(indentChar)}}uNode.createElement=function(html){if(/[<>]/.test(html)){return UE.htmlparser(html).children[0]}else{return new uNode({type:\"element\",children:[],tagName:html})}};uNode.createText=function(data,noTrans){return new UE.uNode({type:\"text\",data:noTrans?data:utils.unhtml(data||\"\")})};function nodeToHtml(node,arr,formatter,current){switch(node.type){case\"root\":for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current,true);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}break;case\"text\":isText(node,arr);break;case\"element\":isElement(node,arr,formatter,current);break;case\"comment\":isComment(node,arr,formatter)}return arr}function isText(node,arr){if(node.parentNode.tagName==\"pre\"){arr.push(node.data)}else{arr.push(notTransTagName[node.parentNode.tagName]?utils.html(node.data):node.data.replace(/[ ]{2}/g,\" &nbsp;\"))}}function isElement(node,arr,formatter,current){var attrhtml=\"\";if(node.attrs){attrhtml=[];var attrs=node.attrs;for(var a in attrs){attrhtml.push(a+(attrs[a]!==undefined?'=\"'+(notTransAttrs[a]?utils.html(attrs[a]).replace(/[\"]/g,function(a){return\"&quot;\"}):utils.unhtml(attrs[a]))+'\"':\"\"))}attrhtml=attrhtml.join(\" \")}arr.push(\"<\"+node.tagName+(attrhtml?\" \"+attrhtml:\"\")+(dtd.$empty[node.tagName]?\"/\":\"\")+\">\");if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current,true);insertIndent(arr,current)}}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}}if(!dtd.$empty[node.tagName]){if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current);insertIndent(arr,current)}}arr.push(\"</\"+node.tagName+\">\")}}function isComment(node,arr){arr.push(\"\\x3c!--\"+node.data+\"--\\x3e\")}function getNodeById(root,id){var node;if(root.type==\"element\"&&root.getAttr(\"id\")==id){return root}if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i++];){if(node=getNodeById(ci,id)){return node}}}}function getNodesByTagName(node,tagName,arr){if(node.type==\"element\"&&node.tagName==tagName){arr.push(node)}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){getNodesByTagName(ci,tagName,arr)}}}function nodeTraversal(root,fn){if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i];){nodeTraversal(ci,fn);if(ci.parentNode){if(ci.children&&ci.children.length){fn(ci)}if(ci.parentNode)i++}}}else{fn(root)}}uNode.prototype={toHtml:function(formatter){var arr=[];nodeToHtml(this,arr,formatter,0);return arr.join(\"\")},innerHTML:function(htmlstr){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(utils.isString(htmlstr)){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];var tmpRoot=UE.htmlparser(htmlstr);for(var i=0,ci;ci=tmpRoot.children[i++];){this.children.push(ci);ci.parentNode=this}return this}else{var tmpRoot=new UE.uNode({type:\"root\",children:this.children});return tmpRoot.toHtml()}},innerText:function(textStr,noTrans){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(textStr){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];this.appendChild(uNode.createText(textStr,noTrans));return this}else{return this.toHtml().replace(/<[^>]+>/g,\"\")}},getData:function(){if(this.type==\"element\")return\"\";return this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i==0?null:parent.children[i-1]}}},nextSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i++];){if(ci===this){return parent.children[i]}}},replaceChild:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,1,target);source.parentNode=null;target.parentNode=this;return target}}}},appendChild:function(node){if(this.type==\"root\"||this.type==\"element\"&&!dtd.$empty[this.tagName]){if(!this.children){this.children=[]}if(node.parentNode){node.parentNode.removeChild(node)}for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);break}}this.children.push(node);node.parentNode=this;return node}},insertBefore:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,0,target);target.parentNode=this;return target}}}},insertAfter:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i+1,0,target);target.parentNode=this;return target}}}},removeChild:function(node,keepChildren){if(this.children){for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);ci.parentNode=null;if(keepChildren&&ci.children&&ci.children.length){for(var j=0,cj;cj=ci.children[j];j++){this.children.splice(i+j,0,cj);cj.parentNode=this}}return ci}}}},getAttr:function(attrName){return this.attrs&&this.attrs[attrName.toLowerCase()]},setAttr:function(attrName,attrVal){if(!attrName){delete this.attrs;return}if(!this.attrs){this.attrs={}}if(utils.isObject(attrName)){for(var a in attrName){if(!attrName[a]){delete this.attrs[a]}else{this.attrs[a.toLowerCase()]=attrName[a]}}}else{if(!attrVal){delete this.attrs[attrName]}else{this.attrs[attrName.toLowerCase()]=attrVal}}},getIndex:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i}}return-1},getNodeById:function(id){var node;if(this.children&&this.children.length){for(var i=0,ci;ci=this.children[i++];){if(node=getNodeById(ci,id)){return node}}}},getNodesByTagName:function(tagNames){tagNames=utils.trim(tagNames).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[],me=this;utils.each(tagNames,function(tagName){if(me.children&&me.children.length){for(var i=0,ci;ci=me.children[i++];){getNodesByTagName(ci,tagName,arr)}}});return arr},getStyle:function(name){var cssStyle=this.getAttr(\"style\");if(!cssStyle){return\"\"}var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+)\",\"i\");var match=cssStyle.match(reg);if(match&&match[0]){return match[2]}return\"\"},setStyle:function(name,val){function exec(name,val){var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+;?)\",\"gi\");cssStyle=cssStyle.replace(reg,\"$1\");if(val){cssStyle=name+\":\"+utils.unhtml(val)+\";\"+cssStyle}}var cssStyle=this.getAttr(\"style\");if(!cssStyle){cssStyle=\"\"}if(utils.isObject(name)){for(var a in name){exec(a,name[a])}}else{exec(name,val)}this.setAttr(\"style\",utils.trim(cssStyle))},traversal:function(fn){if(this.children&&this.children.length){nodeTraversal(this,fn)}return this}}})();var htmlparser=UE.htmlparser=function(htmlstr,ignoreBlank){var re_tag=/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,re_attr=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g;var allowEmptyTags={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};htmlstr=htmlstr.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(!ignoreBlank){htmlstr=htmlstr.replace(new RegExp(\"[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*\",\"g\"),function(a,b){if(b&&allowEmptyTags[b.toLowerCase()]){return a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g,\"\")}return a.replace(new RegExp(\"^[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+\"),\"\").replace(new RegExp(\"[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+$\"),\"\")})}var notTransAttrs={href:1,src:1};var uNode=UE.uNode,needParentNode={td:\"tr\",tr:[\"tbody\",\"thead\",\"tfoot\"],tbody:\"table\",th:\"tr\",thead:\"table\",tfoot:\"table\",caption:\"table\",li:[\"ul\",\"ol\"],dt:\"dl\",dd:\"dl\",option:\"select\"},needChild={ol:\"li\",ul:\"li\"};function text(parent,data){if(needChild[parent.tagName]){var tmpNode=uNode.createElement(needChild[parent.tagName]);parent.appendChild(tmpNode);tmpNode.appendChild(uNode.createText(data));parent=tmpNode}else{parent.appendChild(uNode.createText(data))}}function element(parent,tagName,htmlattr){var needParentTag;if(needParentTag=needParentNode[tagName]){var tmpParent=parent,hasParent;while(tmpParent.type!=\"root\"){if(utils.isArray(needParentTag)?utils.indexOf(needParentTag,tmpParent.tagName)!=-1:needParentTag==tmpParent.tagName){parent=tmpParent;hasParent=true;break}tmpParent=tmpParent.parentNode}if(!hasParent){parent=element(parent,utils.isArray(needParentTag)?needParentTag[0]:needParentTag)}}var elm=new uNode({parentNode:parent,type:\"element\",tagName:tagName.toLowerCase(),children:dtd.$empty[tagName]?null:[]});if(htmlattr){var attrs={},match;while(match=re_attr.exec(htmlattr)){attrs[match[1].toLowerCase()]=notTransAttrs[match[1].toLowerCase()]?match[2]||match[3]||match[4]:utils.unhtml(match[2]||match[3]||match[4])}elm.attrs=attrs}parent.children.push(elm);return dtd.$empty[tagName]?parent:elm}function comment(parent,data){parent.children.push(new uNode({type:\"comment\",data:data,parentNode:parent}))}var match,currentIndex=0,nextIndex=0;var root=new uNode({type:\"root\",children:[]});var currentParent=root;while(match=re_tag.exec(htmlstr)){currentIndex=match.index;try{if(currentIndex>nextIndex){text(currentParent,htmlstr.slice(nextIndex,currentIndex))}if(match[3]){if(dtd.$cdata[currentParent.tagName]){text(currentParent,match[0])}else{currentParent=element(currentParent,match[3].toLowerCase(),match[4])}}else if(match[1]){if(currentParent.type!=\"root\"){if(dtd.$cdata[currentParent.tagName]&&!dtd.$cdata[match[1]]){text(currentParent,match[0])}else{var tmpParent=currentParent;while(currentParent.type==\"element\"&&currentParent.tagName!=match[1].toLowerCase()){currentParent=currentParent.parentNode;if(currentParent.type==\"root\"){currentParent=tmpParent;throw\"break\"}}currentParent=currentParent.parentNode}}}else if(match[2]){comment(currentParent,match[2])}}catch(e){}nextIndex=re_tag.lastIndex}if(nextIndex<htmlstr.length){text(currentParent,htmlstr.slice(nextIndex))}return root};var filterNode=UE.filterNode=function(){function filterNode(node,rules){switch(node.type){case\"text\":break;case\"element\":var val;if(val=rules[node.tagName]){if(val===\"-\"){node.parentNode.removeChild(node)}else if(utils.isFunction(val)){var parentNode=node.parentNode,index=node.getIndex();val(node);if(node.parentNode){if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{var attrs=val[\"$\"];if(attrs&&node.attrs){var tmpAttrs={},tmpVal;for(var a in attrs){tmpVal=node.getAttr(a);if(a==\"style\"&&utils.isArray(attrs[a])){var tmpCssStyle=[];utils.each(attrs[a],function(v){var tmp;if(tmp=node.getStyle(v)){tmpCssStyle.push(v+\":\"+tmp)}});tmpVal=tmpCssStyle.join(\";\")}if(tmpVal){tmpAttrs[a]=tmpVal}}node.attrs=tmpAttrs}if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}}else{if(dtd.$cdata[node.tagName]){node.parentNode.removeChild(node)}else{var parentNode=node.parentNode,index=node.getIndex();node.parentNode.removeChild(node,true);for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}break;case\"comment\":node.parentNode.removeChild(node)}}return function(root,rules){if(utils.isEmptyObject(rules)){return root}var val;if(val=rules[\"-\"]){utils.each(val.split(\" \"),function(k){rules[k]=\"-\"})}for(var i=0,ci;ci=root.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}return root}}();UE.plugin=function(){var _plugins={};return{register:function(pluginName,fn,oldOptionName,afterDisabled){if(oldOptionName&&utils.isFunction(oldOptionName)){afterDisabled=oldOptionName;oldOptionName=null}_plugins[pluginName]={optionName:oldOptionName||pluginName,execFn:fn,afterDisabled:afterDisabled}},load:function(editor){utils.each(_plugins,function(plugin){var _export=plugin.execFn.call(editor);if(editor.options[plugin.optionName]!==false){if(_export){utils.each(_export,function(v,k){switch(k.toLowerCase()){case\"shortcutkey\":editor.addshortcutkey(v);break;case\"bindevents\":utils.each(v,function(fn,eventName){editor.addListener(eventName,fn)});break;case\"bindmultievents\":utils.each(utils.isArray(v)?v:[v],function(event){var types=utils.trim(event.type).split(/\\s+/);utils.each(types,function(eventName){editor.addListener(eventName,event.handler)})});break;case\"commands\":utils.each(v,function(execFn,execName){editor.commands[execName]=execFn});break;case\"outputrule\":editor.addOutputRule(v);break;case\"inputrule\":editor.addInputRule(v);break;case\"defaultoptions\":editor.setOpt(v)}})}}else if(plugin.afterDisabled){plugin.afterDisabled.call(editor)}});utils.each(UE.plugins,function(plugin){plugin.call(editor)})},run:function(pluginName,editor){var plugin=_plugins[pluginName];if(plugin){plugin.exeFn.call(editor)}}}}();var keymap=UE.keymap={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,CapsLock:20,Esc:27,Spacebar:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Del:46,NumLock:144,Cmd:91,\"=\":187,\"-\":189,b:66,i:73,z:90,y:89,v:86,x:88,s:83,n:78};var LocalStorage=UE.LocalStorage=function(){var storage=window.localStorage;return{saveLocalData:function(key,data){if(!storage){return false}storage.setItem(key,data);return true},getLocalData:function(key){if(!storage){return null}return storage.getItem(key)||null},removeItem:function(key){storage&&storage.removeItem(key)}}}();(function(){var ROOT_KEY=\"UEditorPlusPref\";UE.Editor.prototype.setPreferences=function(key,value){var obj={};if(utils.isString(key)){obj[key]=value}else{obj=key}var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){utils.extend(data,obj)}else{data=obj}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))};UE.Editor.prototype.getPreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){return key?data[key]:data}return null};UE.Editor.prototype.removePreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){data[key]=undefined;delete data[key]}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))}})();UE.plugins[\"defaultfilter\"]=function(){var me=this;me.setOpt({allowDivTransToP:true,disabledTableInTable:true,rgb2Hex:true});me.addInputRule(function(root){var allowDivTransToP=this.options.allowDivTransToP;var val;function tdParent(node){while(node&&node.type==\"element\"){if(node.tagName==\"td\"){return true}node=node.parentNode}return false}root.traversal(function(node){if(node.type==\"element\"){if(!dtd.$cdata[node.tagName]&&me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"style\":case\"script\":node.setAttr({cdata_tag:node.tagName,cdata_data:node.innerHTML()||\"\",_ue_custom_node_:\"true\"});node.tagName=\"div\";node.innerHTML(\"\");break;case\"a\":if(val=node.getAttr(\"href\")){node.setAttr(\"_href\",val)}break;case\"img\":if(val=node.getAttr(\"src\")){if(/^data:/.test(val)){node.parentNode.removeChild(node);break}}node.setAttr(\"_src\",node.getAttr(\"src\"));break;case\"span\":if(browser.webkit&&(val=node.getStyle(\"white-space\"))){if(/nowrap|normal/.test(val)){node.setStyle(\"white-space\",\"\");if(me.options.autoClearEmptyNode&&utils.isEmptyObject(node.attrs)){node.parentNode.removeChild(node,true)}}}val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}break;case\"p\":if(val=node.getAttr(\"align\")){node.setAttr(\"align\");node.setStyle(\"text-align\",val)}utils.each(node.children,function(n){if(n.type==\"element\"&&n.tagName==\"p\"){var next=n.nextSibling();node.parentNode.insertAfter(n,node);var last=n;while(next){var tmp=next.nextSibling();node.parentNode.insertAfter(next,last);last=next;next=tmp}return false}});if(!node.firstChild()){node.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}break;case\"div\":if(node.getAttr(\"cdata_tag\")){break}val=node.getAttr(\"class\");if(val&&/^line number\\d+/.test(val)){break}if(!allowDivTransToP){break}var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node);break;case\"dl\":node.tagName=\"ul\";break;case\"dt\":case\"dd\":node.tagName=\"li\";break;case\"li\":var className=node.getAttr(\"class\");if(!className||!/list\\-/.test(className)){node.setAttr()}var tmpNodes=node.getNodesByTagName(\"ol ul\");UE.utils.each(tmpNodes,function(n){node.parentNode.insertAfter(n,node)});break;case\"td\":case\"th\":case\"caption\":if(!node.children||!node.children.length){node.appendChild(browser.ie11below?UE.uNode.createText(\" \"):UE.uNode.createElement(\"br\"))}break;case\"table\":if(me.options.disabledTableInTable&&tdParent(node)){node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node);node.parentNode.removeChild(node)}}}})});me.addOutputRule(function(root){var val;root.traversal(function(node){if(node.type==\"element\"){if(me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"div\":if(val=node.getAttr(\"cdata_tag\")){node.tagName=val;node.appendChild(UE.uNode.createText(node.getAttr(\"cdata_data\")));node.setAttr({cdata_tag:\"\",cdata_data:\"\",_ue_custom_node_:\"\"})}break;case\"a\":if(val=node.getAttr(\"_href\")){node.setAttr({href:utils.html(val),_href:\"\"})}break;break;case\"span\":val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}if(me.getOpt(\"rgb2Hex\")){var cssStyle=node.getAttr(\"style\");if(cssStyle){node.setAttr(\"style\",cssStyle.replace(/rgba?\\(([\\d,\\s]+)\\)/g,function(a,value){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}return value.toUpperCase()}))}}break;case\"img\":if(val=node.getAttr(\"_src\")){node.setAttr({src:node.getAttr(\"_src\"),_src:\"\"})}}}})})};UE.commands[\"inserthtml\"]={execCommand:function(command,html,notNeedFilter){var me=this,range,div;if(!html){return}if(me.fireEvent(\"beforeinserthtml\",html)===true){return}range=me.selection.getRange();div=range.document.createElement(\"div\");div.style.display=\"inline\";if(!notNeedFilter){var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);html=root.toHtml()}div.innerHTML=utils.trim(html);if(!range.collapsed){var tmpNode=range.startContainer;if(domUtils.isFillChar(tmpNode)){range.setStartBefore(tmpNode)}tmpNode=range.endContainer;if(domUtils.isFillChar(tmpNode)){range.setEndAfter(tmpNode)}range.txtToElmBoundary();if(range.endContainer&&range.endContainer.nodeType==1){tmpNode=range.endContainer.childNodes[range.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){range.setEndAfter(tmpNode)}}if(range.startOffset==0){tmpNode=range.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=range.endContainer;if(range.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).collapse(true)}}}!range.collapsed&&range.deleteContents();if(range.startContainer.nodeType==1){var child=range.startContainer.childNodes[range.startOffset],pre;if(child&&domUtils.isBlockElm(child)&&(pre=child.previousSibling)&&domUtils.isBlockElm(pre)){range.setEnd(pre,pre.childNodes.length).collapse();while(child.firstChild){pre.appendChild(child.firstChild)}domUtils.remove(child)}}}var child,parent,pre,tmp,hadBreak=0,nextNode;if(range.inFillChar()){child=range.startContainer;if(domUtils.isFillChar(child)){range.setStartBefore(child).collapse(true);domUtils.remove(child)}else if(domUtils.isFillChar(child,true)){child.nodeValue=child.nodeValue.replace(fillCharReg,\"\");range.startOffset--;range.collapsed&&range.collapse(true)}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var next,last;while(child=div.firstChild){while(child&&(child.nodeType==3||!domUtils.isBlockElm(child)||child.tagName==\"HR\")){next=child.nextSibling;range.insertNode(child).collapse();last=child;child=next}if(child){if(/^(ol|ul)$/i.test(child.tagName)){while(child.firstChild){last=child.firstChild;domUtils.insertAfter(li,child.firstChild);li=li.nextSibling}domUtils.remove(child)}else{var tmpLi;next=child.nextSibling;tmpLi=me.document.createElement(\"li\");domUtils.insertAfter(li,tmpLi);tmpLi.appendChild(child);last=child;child=next;li=tmpLi}}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(domUtils.isEmptyBlock(li)){domUtils.remove(li)}if(last){range.setStartAfter(last).collapse(true).select(true)}}else{while(child=div.firstChild){if(hadBreak){var p=me.document.createElement(\"p\");while(child&&(child.nodeType==3||!dtd.$block[child.tagName])){nextNode=child.nextSibling;p.appendChild(child);child=nextNode}if(p.firstChild){child=p}}range.insertNode(child);nextNode=child.nextSibling;if(!hadBreak&&child.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(child)){parent=domUtils.findParent(child,function(node){return domUtils.isBlockElm(node)});if(parent&&parent.tagName.toLowerCase()!=\"body\"&&!(dtd[parent.tagName][child.nodeName]&&child.parentNode===parent)){if(!dtd[parent.tagName][child.nodeName]){pre=parent}else{tmp=child.parentNode;while(tmp!==parent){pre=tmp;tmp=tmp.parentNode}}domUtils.breakParent(child,pre||tmp);var pre=child.previousSibling;domUtils.trimWhiteTextNode(pre);if(!pre.childNodes.length){domUtils.remove(pre)}if(!browser.ie&&(next=child.nextSibling)&&domUtils.isBlockElm(next)&&next.lastChild&&!domUtils.isBr(next.lastChild)){next.appendChild(me.document.createElement(\"br\"))}hadBreak=1}}var next=child.nextSibling;if(!div.firstChild&&next&&domUtils.isBlockElm(next)){range.setStart(next,0).collapse(true);break}range.setEndAfter(child).collapse()}child=range.startContainer;if(nextNode&&domUtils.isBr(nextNode)){domUtils.remove(nextNode)}if(domUtils.isBlockElm(child)&&domUtils.isEmptyNode(child)){if(nextNode=child.nextSibling){domUtils.remove(child);if(nextNode.nodeType==1&&dtd.$block[nextNode.tagName]){range.setStart(nextNode,0).collapse(true).shrinkBoundary()}}else{try{child.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\"}catch(e){range.setStartBefore(child);domUtils.remove(child)}}}try{range.select(true)}catch(e){}}setTimeout(function(){range=me.selection.getRange();range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled?domUtils.getXY(me.iframe).y:0);me.fireEvent(\"afterinserthtml\",html)},200)}};UE.plugins[\"autotypeset\"]=function(){this.setOpt({autotypeset:{mergeEmptyline:true,removeClass:true,removeEmptyline:false,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:false,clearFontSize:false,clearFontFamily:false,removeEmptyNode:false,removeTagNames:utils.extend({div:1},dtd.$removeEmpty),indent:false,indentValue:\"2em\",bdc2sb:false,tobdc:false}});var me=this,opt=me.options.autotypeset,remainClass={selectTdClass:1,pagebreak:1,anchorclass:1},remainTag={li:1},tags={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1},highlightCont;if(!opt){return}readLocalOpts();function isLine(node,notEmpty){if(!node||node.nodeType==3)return 0;if(domUtils.isBr(node))return 1;if(node&&node.parentNode&&tags[node.tagName.toLowerCase()]){if(highlightCont&&highlightCont.contains(node)||node.getAttribute(\"pagebreak\")){return 0}return notEmpty?!domUtils.isEmptyBlock(node):domUtils.isEmptyBlock(node,new RegExp(\"[\\\\s\"+domUtils.fillChar+\"]\",\"g\"))}}function removeNotAttributeSpan(node){if(!node.style.cssText){domUtils.removeAttributes(node,[\"style\"]);if(node.tagName.toLowerCase()==\"span\"&&domUtils.hasNoAttributes(node)){domUtils.remove(node,true)}}}function autotype(type,html){var me=this,cont;if(html){if(!opt.pasteFilter){return}cont=me.document.createElement(\"div\");cont.innerHTML=html.html}else{cont=me.document.body}var nodes=domUtils.getElementsByTagName(cont,\"*\");for(var i=0,ci;ci=nodes[i++];){if(me.fireEvent(\"excludeNodeinautotype\",ci)===true){continue}if(opt.clearFontSize&&ci.style.fontSize){domUtils.removeStyle(ci,\"font-size\");removeNotAttributeSpan(ci)}if(opt.clearFontFamily&&ci.style.fontFamily){domUtils.removeStyle(ci,\"font-family\");removeNotAttributeSpan(ci)}if(isLine(ci)){if(opt.mergeEmptyline){var next=ci.nextSibling,tmpNode,isBr=domUtils.isBr(ci);while(isLine(next)){tmpNode=next;next=tmpNode.nextSibling;if(isBr&&(!next||next&&!domUtils.isBr(next))){break}domUtils.remove(tmpNode)}}if(opt.removeEmptyline&&domUtils.inDoc(ci,cont)&&!remainTag[ci.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(ci)){next=ci.nextSibling;if(next&&!domUtils.isBr(next)){continue}}domUtils.remove(ci);continue}}if(isLine(ci,true)&&ci.tagName!=\"SPAN\"){if(opt.indent){ci.style.textIndent=opt.indentValue}if(opt.textAlign){ci.style.textAlign=opt.textAlign}}if(opt.removeClass&&ci.className&&!remainClass[ci.className.toLowerCase()]){if(highlightCont&&highlightCont.contains(ci)){continue}domUtils.removeAttributes(ci,[\"class\"])}if(opt.imageBlockLine&&ci.tagName.toLowerCase()==\"img\"&&!ci.getAttribute(\"emotion\")){if(html){var img=ci;switch(opt.imageBlockLine){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}}domUtils.setStyle(img,\"float\",opt.imageBlockLine);break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"none\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}var pNode=me.document.createElement(\"p\");domUtils.setAttributes(pNode,{style:\"text-align:center\"});tmpNode.parentNode.insertBefore(pNode,tmpNode);pNode.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\")}}}else{var range=me.selection.getRange();range.selectNode(ci).select();me.execCommand(\"imagefloat\",opt.imageBlockLine)}}if(opt.removeEmptyNode){if(opt.removeTagNames[ci.tagName.toLowerCase()]&&domUtils.hasNoAttributes(ci)&&domUtils.isEmptyBlock(ci)){domUtils.remove(ci)}}}if(opt.tobdc){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=ToDBC(node.data)}});cont.innerHTML=root.toHtml()}if(opt.bdc2sb){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=DBC2SB(node.data)}});cont.innerHTML=root.toHtml()}if(html){html.html=cont.innerHTML}}if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}function DBC2SB(str){var result=\"\";for(var i=0;i<str.length;i++){var code=str.charCodeAt(i);if(code>=65281&&code<=65373){result+=String.fromCharCode(str.charCodeAt(i)-65248)}else if(code==12288){result+=String.fromCharCode(str.charCodeAt(i)-12288+32)}else{result+=str.charAt(i)}}return result}function ToDBC(txtstring){txtstring=utils.html(txtstring);var tmp=\"\";var mark=\"\";for(var i=0;i<txtstring.length;i++){if(txtstring.charCodeAt(i)==32){tmp=tmp+String.fromCharCode(12288)}else if(txtstring.charCodeAt(i)<127){tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248)}else{tmp+=txtstring.charAt(i)}}return tmp}function readLocalOpts(){var cookieOpt=me.getPreferences(\"autotypeset\");utils.extend(me.options.autotypeset,cookieOpt)}me.commands[\"autotypeset\"]={execCommand:function(){me.removeListener(\"beforepaste\",autotype);if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}autotype.call(me)}}};UE.plugin.register(\"autosubmit\",function(){return{shortcutkey:{autosubmit:\"ctrl+13\"},commands:{autosubmit:{execCommand:function(){var me=this,form=domUtils.findParentByTagName(me.iframe,\"form\",false);if(form){if(me.fireEvent(\"beforesubmit\")===false){return}me.sync();form.submit()}}}}}});UE.plugin.register(\"background\",function(){var me=this,cssRuleId=\"editor_background\",isSetColored,reg=new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\",\"i\");function stringToObj(str){var obj={},styles=str.split(\";\");utils.each(styles,function(v){var index=v.indexOf(\":\"),key=utils.trim(v.substr(0,index)).toLowerCase();key&&(obj[key]=utils.trim(v.substr(index+1)||\"\"))});return obj}function setBackground(obj){if(obj){var styles=[];for(var name in obj){if(obj.hasOwnProperty(name)){styles.push(name+\":\"+obj[name]+\"; \")}}utils.cssRule(cssRuleId,styles.length?\"body{\"+styles.join(\"\")+\"}\":\"\",me.document)}else{utils.cssRule(cssRuleId,\"\",me.document)}}var orgFn=me.hasContents;me.hasContents=function(){if(me.queryCommandValue(\"background\")){return true}return orgFn.apply(me,arguments)};return{bindEvents:{getAllHtml:function(type,headHtml){var body=this.body,su=domUtils.getComputedStyle(body,\"background-image\"),url=\"\";if(su.indexOf(me.options.imagePath)>0){url=su.substring(su.indexOf(me.options.imagePath),su.length-1).replace(/\"|\\(|\\)/gi,\"\")}else{url=su!=\"none\"?su.replace(/url\\(\"?|\"?\\)/gi,\"\"):\"\"}var html='<style type=\"text/css\">body{';var bgObj={\"background-color\":domUtils.getComputedStyle(body,\"background-color\")||\"#ffffff\",\"background-image\":url?\"url(\"+url+\")\":\"\",\"background-repeat\":domUtils.getComputedStyle(body,\"background-repeat\")||\"\",\"background-position\":browser.ie?domUtils.getComputedStyle(body,\"background-position-x\")+\" \"+domUtils.getComputedStyle(body,\"background-position-y\"):domUtils.getComputedStyle(body,\"background-position\"),height:domUtils.getComputedStyle(body,\"height\")};for(var name in bgObj){if(bgObj.hasOwnProperty(name)){html+=name+\":\"+bgObj[name]+\"; \"}}html+=\"}</style> \";headHtml.push(html)},aftersetcontent:function(){if(isSetColored==false)setBackground()}},inputRule:function(root){isSetColored=false;utils.each(root.getNodesByTagName(\"p\"),function(p){var styles=p.getAttr(\"data-background\");if(styles){isSetColored=true;setBackground(stringToObj(styles));p.parentNode.removeChild(p)}})},outputRule:function(root){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);if(styles){root.appendChild(UE.uNode.createElement('<p style=\"display:none;\" data-background=\"'+utils.trim(styles[1].replace(/\"/g,\"\").replace(/[\\s]+/g,\" \"))+'\"><br/></p>'))}},commands:{background:{execCommand:function(cmd,obj){setBackground(obj)},queryCommandValue:function(){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);return styles?stringToObj(styles[1]):null},notNeedUndo:true}}}});UE.commands[\"imagefloat\"]={execCommand:function(cmd,align){var me=this,range=me.selection.getRange();if(!range.collapsed){var img=range.getClosedNode();if(img&&img.tagName===\"IMG\"){switch(align){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}range.selectNode(img).select()}domUtils.setStyle(img,\"float\",align==\"none\"?\"\":align);if(align==\"none\"){domUtils.removeAttributes(img,\"align\")}break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"\");domUtils.removeAttributes(img,\"align\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}range.setStartBefore(tmpNode).setCursor(false);pN=me.document.createElement(\"div\");pN.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\");me.execCommand(\"insertHtml\",'<p id=\"_img_parent_tmp\" style=\"text-align:center\">'+pN.innerHTML+\"</p>\");tmpNode=me.document.getElementById(\"_img_parent_tmp\");tmpNode.removeAttribute(\"id\");tmpNode=tmpNode.firstChild;range.selectNode(tmpNode).select();next=tmpNode.parentNode.nextSibling;if(next&&domUtils.isEmptyNode(next)){domUtils.remove(next)}}break}}}},queryCommandValue:function(){var range=this.selection.getRange(),startNode,floatStyle;if(range.collapsed){return\"none\"}startNode=range.getClosedNode();if(startNode&&startNode.nodeType==1&&startNode.tagName==\"IMG\"){floatStyle=domUtils.getComputedStyle(startNode,\"float\")||startNode.getAttribute(\"align\");if(floatStyle==\"none\"){floatStyle=domUtils.getComputedStyle(startNode.parentNode,\"text-align\")==\"center\"?\"center\":floatStyle}return{left:1,right:1,center:1}[floatStyle]?floatStyle:\"none\"}return\"none\"},queryCommandState:function(){var range=this.selection.getRange(),startNode;if(range.collapsed)return-1;startNode=range.getClosedNode();if(startNode&&startNode.nodeType===1&&startNode.tagName===\"IMG\"){return 0}return-1}};UE.commands[\"insertimage\"]={execCommand:function(cmd,opt){opt=utils.isArray(opt)?opt:[opt];if(!opt.length){return}var me=this,range=me.selection.getRange(),img=range.getClosedNode();if(me.fireEvent(\"beforeinsertimage\",opt)===true){return}if(img&&/img/i.test(img.tagName)&&(img.className!=\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1)&&!img.getAttribute(\"data-word-image\")){var first=opt.shift();var floatStyle=first[\"floatStyle\"];delete first[\"floatStyle\"];domUtils.setAttributes(img,first);me.execCommand(\"imagefloat\",floatStyle);if(opt.length>0){range.setStartAfter(img).setCursor(false,true);me.execCommand(\"insertimage\",opt)}}else{var html=[],str=\"\",ci;ci=opt[0];if(opt.length==1){str='<img src=\"'+ci.src+'\" '+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+(ci[\"floatStyle\"]==\"left\"||ci[\"floatStyle\"]==\"right\"?' style=\"float:'+ci[\"floatStyle\"]+';\"':\"\")+(ci.title&&ci.title!=\"\"?' title=\"'+ci.title+'\"':\"\")+(ci.border&&ci.border!=\"0\"?' border=\"'+ci.border+'\"':\"\")+(ci.alt&&ci.alt!=\"\"?' alt=\"'+ci.alt+'\"':\"\")+(ci.hspace&&ci.hspace!=\"0\"?' hspace = \"'+ci.hspace+'\"':\"\")+(ci.vspace&&ci.vspace!=\"0\"?' vspace = \"'+ci.vspace+'\"':\"\")+\"/>\";if(ci[\"floatStyle\"]==\"center\"){str='<p style=\"text-align: center\">'+str+\"</p>\"}html.push(str)}else{for(var i=0;ci=opt[i++];){str=\"<p \"+(ci[\"floatStyle\"]==\"center\"?'style=\"text-align: center\" ':\"\")+'><img src=\"'+ci.src+'\" '+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+' style=\"'+(ci[\"floatStyle\"]&&ci[\"floatStyle\"]!=\"center\"?\"float:\"+ci[\"floatStyle\"]+\";\":\"\")+(ci.border||\"\")+'\" '+(ci.title?' title=\"'+ci.title+'\"':\"\")+\" /></p>\";html.push(str)}}me.execCommand(\"insertHtml\",html.join(\"\"))}me.fireEvent(\"afterinsertimage\",opt)}};UE.plugins[\"justify\"]=function(){var me=this,block=domUtils.isBlockElm,defaultValue={left:1,right:1,center:1,justify:1},doJustify=function(range,style){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)};range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){domUtils.setStyles(common,utils.isString(style)?{\"text-align\":style}:style);current=common}else{var p=range.document.createElement(\"p\");domUtils.setStyles(p,utils.isString(style)?{\"text-align\":style}:style);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"justify\"]={execCommand:function(cmdName,align){var range=this.selection.getRange(),txt;if(range.collapsed){txt=this.document.createTextNode(\"p\");range.insertNode(txt)}doJustify(range,align);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var startNode=this.selection.getStart(),value=domUtils.getComputedStyle(startNode,\"text-align\");return defaultValue[value]?value:\"left\"},queryCommandState:function(){var start=this.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);return cell?-1:0}}};UE.plugins[\"font\"]=function(){var me=this,fonts={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\",underline:\"text-decoration\",strikethrough:\"text-decoration\",fontborder:\"border\"},lang=me.getLang(),needCmd={underline:1,strikethrough:1,fontborder:1},needSetChild={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\"};me.setOpt({fontfamily:[{name:\"default\",val:\"default\"},{name:\"songti\",val:\"宋体,SimSun\"},{name:\"yahei\",val:\"微软雅黑,Microsoft YaHei\"},{name:\"kaiti\",val:\"楷体,楷体_GB2312,SimKai\"},{name:\"heiti\",val:\"黑体,SimHei\"},{name:\"lishu\",val:\"隶书,SimLi\"},{name:\"arial\",val:\"arial,helvetica,sans-serif\"},{name:\"timesNewRoman\",val:\"times new roman\"}],fontsize:[10,11,12,14,16,18,20,24,36]});function mergeWithParent(node){var parent;while(parent=node.parentNode){if(parent.tagName==\"SPAN\"&&domUtils.getChildCount(parent,function(child){return!domUtils.isBookmarkNode(child)&&!domUtils.isBr(child)})==1){parent.style.cssText+=node.style.cssText;domUtils.remove(node,true);node=parent}else{break}}}function mergeChild(rng,cmdName,value){if(needSetChild[cmdName]){rng.adjustmentBoundary();if(!rng.collapsed&&rng.startContainer.nodeType==1){var start=rng.startContainer.childNodes[rng.startOffset];if(start&&domUtils.isTagNode(start,\"span\")){var bk=rng.createBookmark();utils.each(domUtils.getElementsByTagName(start,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(cmdName==\"backcolor\"&&domUtils.getComputedStyle(span,\"background-color\").toLowerCase()===value){return}domUtils.removeStyle(span,needSetChild[cmdName]);if(span.style.cssText.replace(/^\\s+$/,\"\").length==0){domUtils.remove(span,true)}});rng.moveToBookmark(bk)}}}}function mergesibling(rng,cmdName,value){var collapsed=rng.collapsed,bk=rng.createBookmark(),common;if(collapsed){common=bk.start.parentNode;while(dtd.$inline[common.tagName]){common=common.parentNode}}else{common=domUtils.getCommonAncestor(bk.start,bk.end)}utils.each(domUtils.getElementsByTagName(common,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(/\\s*border\\s*:\\s*none;?\\s*/i.test(span.style.cssText)){if(/^\\s*border\\s*:\\s*none;?\\s*$/.test(span.style.cssText)){domUtils.remove(span,true)}else{domUtils.removeStyle(span,\"border\")}return}if(/border/i.test(span.style.cssText)&&span.parentNode.tagName==\"SPAN\"&&/border/i.test(span.parentNode.style.cssText)){span.style.cssText=span.style.cssText.replace(/border[^:]*:[^;]+;?/gi,\"\")}if(!(cmdName==\"fontborder\"&&value==\"none\")){var next=span.nextSibling;while(next&&next.nodeType==1&&next.tagName==\"SPAN\"){if(domUtils.isBookmarkNode(next)&&cmdName==\"fontborder\"){span.appendChild(next);next=span.nextSibling;continue}if(next.style.cssText==span.style.cssText){domUtils.moveChild(next,span);domUtils.remove(next)}if(span.nextSibling===next)break;next=span.nextSibling}}mergeWithParent(span);if(browser.ie&&browser.version>8){var parent=domUtils.findParent(span,function(n){return n.tagName==\"SPAN\"&&/background-color/.test(n.style.cssText)});if(parent&&!/background-color/.test(span.style.cssText)){span.style.backgroundColor=parent.style.backgroundColor}}});rng.moveToBookmark(bk);mergeChild(rng,cmdName,value)}me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"u s del font strike\"),function(node){if(node.tagName==\"font\"){var cssStyle=[];for(var p in node.attrs){switch(p){case\"size\":cssStyle.push(\"font-size:\"+({1:\"10\",2:\"12\",3:\"16\",4:\"18\",5:\"24\",6:\"32\",7:\"48\"}[node.attrs[p]]||node.attrs[p])+\"px\");break;case\"color\":cssStyle.push(\"color:\"+node.attrs[p]);break;case\"face\":cssStyle.push(\"font-family:\"+node.attrs[p]);break;case\"style\":cssStyle.push(node.attrs[p])}}node.attrs={style:cssStyle.join(\";\")}}else{var val=node.tagName==\"u\"?\"underline\":\"line-through\";node.attrs={style:(node.getAttr(\"style\")||\"\")+\"text-decoration:\"+val+\";\"}}node.tagName=\"span\"})});for(var p in fonts){(function(cmd,style){UE.commands[cmd]={execCommand:function(cmdName,value){value=value||(this.queryCommandState(cmdName)?\"none\":cmdName===\"underline\"?\"underline\":cmdName===\"fontborder\"?\"1px solid #000\":\"line-through\");var me=this,range=this.selection.getRange(),text;if(value===\"default\"){if(range.collapsed){text=me.document.createTextNode(\"font\");range.insertNode(text).select()}me.execCommand(\"removeFormat\",\"span,a\",style);if(text){range.setStartBefore(text).collapse(true);domUtils.remove(text)}mergesibling(range,cmdName,value);range.select()}else{if(!range.collapsed){if(needCmd[cmd]&&me.queryCommandValue(cmd)){me.execCommand(\"removeFormat\",\"span,a\",style)}range=me.selection.getRange();range.applyInlineStyle(\"span\",{style:style+\":\"+value});mergesibling(range,cmdName,value);range.select()}else{var span=domUtils.findParentByTagName(range.startContainer,\"span\",true);text=me.document.createTextNode(\"font\");if(span&&!span.children.length&&!span[browser.ie?\"innerText\":\"textContent\"].replace(fillCharReg,\"\").length){range.insertNode(text);if(needCmd[cmd]){range.selectNode(text).select();me.execCommand(\"removeFormat\",\"span,a\",style,null);span=domUtils.findParentByTagName(text,\"span\",true);range.setStartBefore(text)}span&&(span.style.cssText+=\";\"+style+\":\"+value);range.collapse(true).select()}else{range.insertNode(text);range.selectNode(text).select();span=range.document.createElement(\"span\");if(needCmd[cmd]){if(domUtils.findParentByTagName(text,\"a\",true)){range.setStartBefore(text).setCursor();domUtils.remove(text);return}me.execCommand(\"removeFormat\",\"span,a\",style)}span.style.cssText=style+\":\"+value;text.parentNode.insertBefore(span,text);if(!browser.ie||browser.ie&&browser.version===9){var spanParent=span.parentNode;while(!domUtils.isBlockElm(spanParent)){if(spanParent.tagName===\"SPAN\"){span.style.cssText=spanParent.style.cssText+\";\"+span.style.cssText}spanParent=spanParent.parentNode}}if(opera){setTimeout(function(){range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()})}else{range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()}}domUtils.remove(text)}}return true},queryCommandValue:function(cmdName){var startNode=this.selection.getStart();var styleVal;if(cmdName===\"underline\"||cmdName===\"strikethrough\"){var tmpNode=startNode,value;while(tmpNode&&!domUtils.isBlockElm(tmpNode)&&!domUtils.isBody(tmpNode)){if(tmpNode.nodeType===1){value=domUtils.getComputedStyle(tmpNode,style);if(value!==\"none\"){return value}}tmpNode=tmpNode.parentNode}return\"none\"}else if(cmdName===\"fontborder\"){var tmp=startNode,val;while(tmp&&dtd.$inline[tmp.tagName]){if(val=domUtils.getComputedStyle(tmp,\"border\")){if(/1px/.test(val)&&/solid/.test(val)){return val}}tmp=tmp.parentNode}return\"\"}else if(cmdName===\"FontSize\"){styleVal=domUtils.getComputedStyle(startNode,style);tmp=/^([\\d\\.]+)(\\w+)$/.exec(styleVal);if(tmp){return Math.floor(tmp[1])+tmp[2]}return styleVal}else if(cmdName===\"FontFamily\"){styleVal=domUtils.getComputedStyle(startNode,style);styleVal=styleVal.replace(/['\"]/g,\"\");styleVal=styleVal.replace(/\\s*,\\s*/g,\",\");var fontFamily=lang.fontfamily.default;var fontList=me.options[\"fontfamily\"]||[];for(var i=0;i<fontList.length;i++){var v=fontList[i];if(v.val===styleVal){fontFamily=styleVal;break}}return fontFamily}value=domUtils.getComputedStyle(startNode,style);return value},queryCommandState:function(cmdName){if(!needCmd[cmdName])return 0;var val=this.queryCommandValue(cmdName);if(cmdName===\"fontborder\"){return/1px/.test(val)&&/solid/.test(val)}else{return cmdName===\"underline\"?/underline/.test(val):/line\\-through/.test(val)}}}})(p,fonts[p])}};UE.plugins[\"link\"]=function(){function optimize(range){var start=range.startContainer,end=range.endContainer;if(start=domUtils.findParentByTagName(start,\"a\",true)){range.setStartBefore(start)}if(end=domUtils.findParentByTagName(end,\"a\",true)){range.setEndAfter(end)}}UE.commands[\"unlink\"]={execCommand:function(){var range=this.selection.getRange(),bookmark;if(range.collapsed&&!domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}bookmark=range.createBookmark();optimize(range);range.removeInlineStyle(\"a\").moveToBookmark(bookmark).select()},queryCommandState:function(){return!this.highlight&&this.queryCommandValue(\"link\")?0:-1}};function doLink(range,opt,me){var rngClone=range.cloneRange(),link=me.queryCommandValue(\"link\");optimize(range=range.adjustmentBoundary());var start=range.startContainer;if(start.nodeType==1&&link){start=start.childNodes[range.startOffset];if(start&&start.nodeType==1&&start.tagName==\"A\"&&/^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(start[browser.ie?\"innerText\":\"textContent\"])){start[browser.ie?\"innerText\":\"textContent\"]=utils.html(opt.textValue||opt.href)}}if(!rngClone.collapsed||link){range.removeInlineStyle(\"a\");rngClone=range.cloneRange()}if(rngClone.collapsed){var a=range.document.createElement(\"a\"),text=\"\";if(opt.textValue){text=utils.html(opt.textValue);delete opt.textValue}else{text=utils.html(opt.href)}domUtils.setAttributes(a,opt);start=domUtils.findParentByTagName(rngClone.startContainer,\"a\",true);if(start&&domUtils.isInNodeEndBoundary(rngClone,start)){range.setStartAfter(start).collapse(true)}a[browser.ie?\"innerText\":\"textContent\"]=text;range.insertNode(a).selectNode(a)}else{range.applyInlineStyle(\"a\",opt)}}UE.commands[\"link\"]={execCommand:function(cmdName,opt){var range;opt._href&&(opt._href=utils.unhtml(opt._href,/[<\">]/g));opt.href&&(opt.href=utils.unhtml(opt.href,/[<\">]/g));opt.textValue&&(opt.textValue=utils.unhtml(opt.textValue,/[<\">]/g));doLink(range=this.selection.getRange(),opt,this);range.collapse().select(true)},queryCommandValue:function(){var range=this.selection.getRange(),node;if(range.collapsed){node=range.startContainer;node=node.nodeType==1?node:node.parentNode;if(node&&(node=domUtils.findParentByTagName(node,\"a\",true))&&!domUtils.isInNodeEndBoundary(range,node)){return node}}else{range.shrinkBoundary();var start=range.startContainer.nodeType==3||!range.startContainer.childNodes[range.startOffset]?range.startContainer:range.startContainer.childNodes[range.startOffset],end=range.endContainer.nodeType==3||range.endOffset==0?range.endContainer:range.endContainer.childNodes[range.endOffset-1],common=range.getCommonAncestor();node=domUtils.findParentByTagName(common,\"a\",true);if(!node&&common.nodeType==1){var as=common.getElementsByTagName(\"a\"),ps,pe;for(var i=0,ci;ci=as[i++];){ps=domUtils.getPosition(ci,start),pe=domUtils.getPosition(ci,end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS)){node=ci;break}}}return node}},queryCommandState:function(){var img=this.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1);return flag?-1:0}}};UE.plugins[\"insertframe\"]=function(){var me=this;function deleteIframe(){me._iframe&&delete me._iframe}me.addListener(\"selectionchange\",function(){deleteIframe()})};UE.commands[\"scrawl\"]={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}};UE.plugins[\"removeformat\"]=function(){var me=this;me.setOpt({removeFormatTags:\"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",removeFormatAttributes:\"class,style,lang,width,height,align,hspace,valign\"});me.commands[\"removeformat\"]={execCommand:function(cmdName,tags,style,attrs,notIncludeA){var tagReg=new RegExp(\"^(?:\"+(tags||this.options.removeFormatTags).replace(/,/g,\"|\")+\")$\",\"i\"),removeFormatAttributes=style?[]:(attrs||this.options.removeFormatAttributes).split(\",\"),range=new dom.Range(this.document),bookmark,node,parent,filter=function(node){return node.nodeType==1};function isRedundantSpan(node){if(node.nodeType==3||node.tagName.toLowerCase()!=\"span\"){return 0}if(browser.ie){var attrs=node.attributes;if(attrs.length){for(var i=0,l=attrs.length;i<l;i++){if(attrs[i].specified){return 0}}return 1}}return!node.attributes.length}function doRemove(range){var bookmark1=range.createBookmark();if(range.collapsed){range.enlarge(true)}if(!notIncludeA){var aNode=domUtils.findParentByTagName(range.startContainer,\"a\",true);if(aNode){range.setStartBefore(aNode)}aNode=domUtils.findParentByTagName(range.endContainer,\"a\",true);if(aNode){range.setEndAfter(aNode)}}bookmark=range.createBookmark();node=bookmark.start;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}if(bookmark.end){node=bookmark.end;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}var current=domUtils.getNextDomNode(bookmark.start,false,filter),next;while(current){if(current==bookmark.end){break}next=domUtils.getNextDomNode(current,true,filter);if(!dtd.$empty[current.tagName.toLowerCase()]&&!domUtils.isBookmarkNode(current)){if(tagReg.test(current.tagName)){if(style){domUtils.removeStyle(current,style);if(isRedundantSpan(current)&&style!=\"text-decoration\"){domUtils.remove(current,true)}}else{domUtils.remove(current,true)}}else{if(true){domUtils.removeAttributes(current,removeFormatAttributes);if(isRedundantSpan(current)){domUtils.remove(current,true)}}else{}}}current=next}}var pN=bookmark.start.parentNode;if(domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}pN=bookmark.end.parentNode;if(bookmark.end&&domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}range.moveToBookmark(bookmark).moveToBookmark(bookmark1);var node=range.startContainer,tmp,collapsed=range.collapsed;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setStartBefore(node);if(range.startContainer===range.endContainer){range.endOffset--}domUtils.remove(node);node=tmp}if(!collapsed){node=range.endContainer;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setEndBefore(node);domUtils.remove(node);node=tmp}}}range=this.selection.getRange();doRemove(range);range.select()}}};UE.plugins[\"blockquote\"]=function(){var me=this;function getObj(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),\"blockquote\")}me.commands[\"blockquote\"]={execCommand:function(cmdName,attrs){var range=this.selection.getRange(),obj=getObj(this),blockquote=dtd.blockquote,bookmark=range.createBookmark();if(obj){var start=range.startContainer,startBlock=domUtils.isBlockElm(start)?start:domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}),end=range.endContainer,endBlock=domUtils.isBlockElm(end)?end:domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)});startBlock=domUtils.findParentByTagName(startBlock,\"li\",true)||startBlock;endBlock=domUtils.findParentByTagName(endBlock,\"li\",true)||endBlock;if(startBlock.tagName==\"LI\"||startBlock.tagName==\"TD\"||startBlock===obj||domUtils.isBody(startBlock)){domUtils.remove(obj,true)}else{domUtils.breakParent(startBlock,obj)}if(startBlock!==endBlock){obj=domUtils.findParentByTagName(endBlock,\"blockquote\");if(obj){if(endBlock.tagName==\"LI\"||endBlock.tagName==\"TD\"||domUtils.isBody(endBlock)){obj.parentNode&&domUtils.remove(obj,true)}else{domUtils.breakParent(endBlock,obj)}}}var blockquotes=domUtils.getElementsByTagName(this.document,\"blockquote\");for(var i=0,bi;bi=blockquotes[i++];){if(!bi.childNodes.length){domUtils.remove(bi)}else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING&&domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){domUtils.remove(bi,true)}}}else{var tmpRange=range.cloneRange(),node=tmpRange.startContainer.nodeType==1?tmpRange.startContainer:tmpRange.startContainer.parentNode,preNode=node,doEnd=1;while(1){if(domUtils.isBody(node)){if(preNode!==node){if(range.collapsed){tmpRange.selectNode(preNode);doEnd=0}else{tmpRange.setStartBefore(preNode)}}else{tmpRange.setStart(node,0)}break}if(!blockquote[node.tagName]){if(range.collapsed){tmpRange.selectNode(preNode)}else{tmpRange.setStartBefore(preNode)}break}preNode=node;node=node.parentNode}if(doEnd){preNode=node=node=tmpRange.endContainer.nodeType==1?tmpRange.endContainer:tmpRange.endContainer.parentNode;while(1){if(domUtils.isBody(node)){if(preNode!==node){tmpRange.setEndAfter(preNode)}else{tmpRange.setEnd(node,node.childNodes.length)}break}if(!blockquote[node.tagName]){tmpRange.setEndAfter(preNode);break}preNode=node;node=node.parentNode}}node=range.document.createElement(\"blockquote\");domUtils.setAttributes(node,attrs);node.appendChild(tmpRange.extractContents());tmpRange.insertNode(node);var childs=domUtils.getElementsByTagName(node,\"blockquote\");for(var i=0,ci;ci=childs[i++];){if(ci.parentNode){domUtils.remove(ci,true)}}}range.moveToBookmark(bookmark).select()},queryCommandState:function(){return getObj(this)?1:0}}};UE.commands[\"touppercase\"]=UE.commands[\"tolowercase\"]={execCommand:function(cmd){var me=this;var rng=me.selection.getRange();if(rng.collapsed){return rng}var bk=rng.createBookmark(),bkEnd=bk.end,filterFn=function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)},curNode=domUtils.getNextDomNode(bk.start,false,filterFn);while(curNode&&domUtils.getPosition(curNode,bkEnd)&domUtils.POSITION_PRECEDING){if(curNode.nodeType==3){curNode.nodeValue=curNode.nodeValue[cmd==\"touppercase\"?\"toUpperCase\":\"toLowerCase\"]()}curNode=domUtils.getNextDomNode(curNode,true,filterFn);if(curNode===bkEnd){break}}rng.moveToBookmark(bk).select()}};UE.commands[\"indent\"]={execCommand:function(){var me=this,value=me.queryCommandState(\"indent\")?\"0em\":me.options.indentValue||\"2em\";me.execCommand(\"Paragraph\",\"p\",{style:\"text-indent:\"+value})},queryCommandState:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return pN&&pN.style.textIndent&&parseInt(pN.style.textIndent)?1:0}};UE.commands[\"print\"]={execCommand:function(){this.window.print()},notNeedUndo:1};UE.commands[\"preview\"]={execCommand:function(){var w=window.open(\"\",\"_blank\",\"\"),d=w.document;d.open();d.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"'+this.options.UEDITOR_HOME_URL+'ueditor.parse.js\"><\\/script><script>'+\"setTimeout(function(){uParse('div',{rootPath: '\"+this.options.UEDITOR_HOME_URL+\"'})},300)\"+\"<\\/script></head><body><div>\"+this.getContent(null,null,true)+\"</div></body></html>\");d.close()},notNeedUndo:1};UE.plugins[\"selectall\"]=function(){var me=this;me.commands[\"selectall\"]={execCommand:function(){var me=this,body=me.body,range=me.selection.getRange();range.selectNodeContents(body);if(domUtils.isEmptyBlock(body)){if(browser.opera&&body.firstChild&&body.firstChild.nodeType==1){range.setStartAtFirst(body.firstChild)}range.collapse(true)}range.select(true)},notNeedUndo:1};me.addshortcutkey({selectAll:\"ctrl+65\"})};UE.plugins[\"paragraph\"]=function(){var me=this,block=domUtils.isBlockElm,notExchange=[\"TD\",\"LI\",\"PRE\"],doParagraph=function(range,style,attrs,sourceCmdName){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},para;range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType===3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);para=range.document.createElement(style);if(attrs){domUtils.setAttributes(para,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){para.style.cssText=attrs.style}}para.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(para)){domUtils.fillChar(range.document,para)}tmpRange.insertNode(para);var parent=para.parentNode;if(block(parent)&&!domUtils.isBody(para.parentNode)&&utils.indexOf(notExchange,parent.tagName)===-1){if(!(sourceCmdName&&sourceCmdName===\"customstyle\")){parent.getAttribute(\"dir\")&&para.setAttribute(\"dir\",parent.getAttribute(\"dir\"));parent.style.cssText&&(para.style.cssText=parent.style.cssText+\";\"+para.style.cssText);parent.style.textAlign&&!para.style.textAlign&&(para.style.textAlign=parent.style.textAlign);parent.style.textIndent&&!para.style.textIndent&&(para.style.textIndent=parent.style.textIndent);parent.style.padding&&!para.style.padding&&(para.style.padding=parent.style.padding)}if(attrs&&/h\\d/i.test(parent.tagName)&&!/h\\d/i.test(para.tagName)){domUtils.setAttributes(parent,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){parent.style.cssText=attrs.style}domUtils.remove(para.parentNode,true);para=parent}else{domUtils.remove(para.parentNode,true)}}if(utils.indexOf(notExchange,parent.tagName)!==-1){current=parent}else{current=para}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};me.setOpt(\"paragraph\",{p:\"\",h1:\"\",h2:\"\",h3:\"\",h4:\"\",h5:\"\",h6:\"\"});me.commands[\"paragraph\"]={execCommand:function(cmdName,style,attrs,sourceCmdName){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"p\");range.insertNode(txt);if(browser.ie){var node=txt.previousSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}node=txt.nextSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}}}range=doParagraph(range,style,attrs,sourceCmdName);if(txt){range.setStartBefore(txt).collapse(true);pN=txt.parentNode;domUtils.remove(txt);if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){domUtils.fillNode(this.document,pN)}}if(browser.gecko&&range.collapsed&&range.startContainer.nodeType===1){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&child.tagName.toLowerCase()===style){range.setStart(child,0).collapse(true)}}range.select();return true},queryCommandValue:function(){var node=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return node?node.tagName.toLowerCase():\"\"}}};(function(){var block=domUtils.isBlockElm,getObj=function(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n&&n.nodeType==1&&n.getAttribute(\"dir\")})},doDirectionality=function(range,editor,forward){var bookmark,filterFn=function(node){return node.nodeType==1?!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},obj=getObj(editor);if(obj&&range.collapsed){obj.setAttribute(\"dir\",forward);return range}bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){common.setAttribute(\"dir\",forward);current=common}else{var p=range.document.createElement(\"p\");p.setAttribute(\"dir\",forward);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"directionality\"]={execCommand:function(cmdName,forward){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"d\");range.insertNode(txt)}doDirectionality(range,this,forward);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var node=getObj(this);return node?node.getAttribute(\"dir\"):\"ltr\"}}})();UE.plugins[\"horizontal\"]=function(){var me=this;me.commands[\"horizontal\"]={execCommand:function(cmdName){var me=this;if(me.queryCommandState(cmdName)!==-1){me.execCommand(\"insertHtml\",\"<hr>\");var range=me.selection.getRange(),start=range.startContainer;if(start.nodeType==1&&!start.childNodes[range.startOffset]){var tmp;if(tmp=start.childNodes[range.startOffset-1]){if(tmp.nodeType==1&&tmp.tagName==\"HR\"){if(me.options.enterTag==\"p\"){tmp=me.document.createElement(\"p\");range.insertNode(tmp);range.setStart(tmp,0).setCursor()}else{tmp=me.document.createElement(\"br\");range.insertNode(tmp);range.setStartBefore(tmp).setCursor()}}}}return true}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),\"table\")?-1:0}};me.addListener(\"delkeydown\",function(name,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);if(domUtils.isStartInblock(rng)){var tmpNode=rng.startContainer;var pre=tmpNode.previousSibling;if(pre&&domUtils.isTagNode(pre,\"hr\")){domUtils.remove(pre);rng.select();domUtils.preventDefault(evt);return true}}})};UE.commands[\"time\"]=UE.commands[\"date\"]={execCommand:function(cmd,format){var date=new Date;function formatTime(date,format){var hh=(\"0\"+date.getHours()).slice(-2),ii=(\"0\"+date.getMinutes()).slice(-2),ss=(\"0\"+date.getSeconds()).slice(-2);format=format||\"hh:ii:ss\";return format.replace(/hh/gi,hh).replace(/ii/gi,ii).replace(/ss/gi,ss)}function formatDate(date,format){var yyyy=(\"000\"+date.getFullYear()).slice(-4),yy=yyyy.slice(-2),mm=(\"0\"+(date.getMonth()+1)).slice(-2),dd=(\"0\"+date.getDate()).slice(-2);format=format||\"yyyy-mm-dd\";return format.replace(/yyyy/gi,yyyy).replace(/yy/gi,yy).replace(/mm/gi,mm).replace(/dd/gi,dd)}this.execCommand(\"insertHtml\",cmd==\"time\"?formatTime(date,format):formatDate(date,format))}};UE.plugins[\"rowspacing\"]=function(){var me=this;me.setOpt({rowspacingtop:[\"5\",\"10\",\"15\",\"20\",\"25\"],rowspacingbottom:[\"5\",\"10\",\"15\",\"20\",\"25\"]});me.commands[\"rowspacing\"]={execCommand:function(cmdName,value,dir){this.execCommand(\"paragraph\",\"p\",{style:\"margin-\"+dir+\":\"+value+\"px\"});return true},queryCommandValue:function(cmdName,dir){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)}),value;if(pN){value=domUtils.getComputedStyle(pN,\"margin-\"+dir).replace(/[^\\d]/g,\"\");return!value?0:value}return 0}}};UE.plugins[\"lineheight\"]=function(){var me=this;me.setOpt({lineheight:[\"1\",\"1.5\",\"1.75\",\"2\",\"3\",\"4\",\"5\"]});me.commands[\"lineheight\"]={execCommand:function(cmdName,value){this.execCommand(\"paragraph\",\"p\",{style:\"line-height:\"+(value==\"1\"?\"normal\":value+\"em\")});return true},queryCommandValue:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)});if(pN){var value=domUtils.getComputedStyle(pN,\"line-height\");return value==\"normal\"?1:value.replace(/[^\\d.]*/gi,\"\")}}}};UE.plugins[\"insertcode\"]=function(){var me=this;me.setOpt(\"insertcode\",{as3:\"ActionScript3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"Css\",\"c#\":\"C#\",delphi:\"Delphi\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"Html\",java:\"Java\",js:\"Javascript\",pl:\"Perl\",php:\"PHP\",plain:\"Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"VB\",xml:\"XML\",mind:\"Mind\"});me.commands[\"insertcode\"]={execCommand:function(cmd,lang){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){pre.className=\"brush:\"+lang+\";toolbar:false;\"}else{var code=\"\";if(rng.collapsed){code=browser.ie&&browser.ie11below?browser.version<=8?\"&nbsp;\":\"\":\"<br/>\"}else{var frag=rng.extractContents();var div=me.document.createElement(\"div\");div.appendChild(frag);utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\\r\\t]/g,\"\")),me.options.filterTxtRules).children,function(node){if(browser.ie&&browser.ie11below&&browser.version>8){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/\\n$/.test(code)){code+=\"\\n\"}}}else{code+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(code)){code=code.replace(/\\n$/,\"\")}}else{if(browser.ie&&browser.ie11below){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/br>$/.test(code)){code+=\"<br>\"}}}else{code+=node.data+\"<br>\"}if(!node.nextSibling()&&/<br>$/.test(code)){code=code.replace(/<br>$/,\"\")}}else{code+=node.type==\"element\"?dtd.$empty[node.tagName]?\"\":node.innerText():node.data;if(!/br\\/?\\s*>$/.test(code)){if(!node.nextSibling())return;code+=\"<br>\"}}}})}me.execCommand(\"inserthtml\",'<pre id=\"coder\"class=\"brush:'+lang+';toolbar:false\">'+code+\"</pre>\",true);pre=me.document.getElementById(\"coder\");domUtils.removeAttributes(pre,\"id\");var tmpNode=pre.previousSibling;if(tmpNode&&(tmpNode.nodeType==3&&tmpNode.nodeValue.length==1&&browser.ie&&browser.version==6||domUtils.isEmptyBlock(tmpNode))){domUtils.remove(tmpNode)}var rng=me.selection.getRange();if(domUtils.isEmptyBlock(pre)){rng.setStart(pre,0).setCursor(false,true)}else{rng.selectNodeContents(pre).select()}}},queryCommandValue:function(){var path=this.selection.getStartElementPath();var lang=\"\";utils.each(path,function(node){if(node.nodeName==\"PRE\"){var match=node.className.match(/brush:([^;]+)/);lang=match&&match[1]?match[1]:\"\";return false}});return lang}};me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var brs=pre.getNodesByTagName(\"br\");if(brs.length){browser.ie&&browser.ie11below&&browser.version>8&&utils.each(brs,function(br){var txt=UE.uNode.createText(\"\\n\");br.parentNode.insertBefore(txt,br);br.parentNode.removeChild(br)});return}if(browser.ie&&browser.ie11below&&browser.version>8)return;var code=pre.innerText().split(/\\n/);pre.innerHTML(\"\");utils.each(code,function(c){if(c.length){pre.appendChild(UE.uNode.createText(c))}pre.appendChild(UE.uNode.createElement(\"br\"))})})});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var code=\"\";utils.each(pre.children,function(n){if(n.type==\"text\"){code+=n.data.replace(/[ ]/g,\"&nbsp;\").replace(/\\n$/,\"\")}else{if(n.tagName==\"br\"){code+=\"\\n\"}else{code+=!dtd.$empty[n.tagName]?\"\":n.innerText()}}});pre.innerText(code.replace(/(&nbsp;|\\n)+$/,\"\"))})});me.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};var orgQuery=me.queryCommandState;me.queryCommandState=function(cmd){var me=this;if(!me.notNeedCodeQuery[cmd.toLowerCase()]&&me.selection&&me.queryCommandValue(\"insertcode\")){return-1}return UE.Editor.prototype.queryCommandState.apply(this,arguments)};me.addListener(\"beforeenterkeydown\",function(){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(!rng.collapsed){rng.deleteContents()}if(!browser.ie||browser.ie9above){var tmpNode=me.document.createElement(\"br\"),pre;rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true);var next=tmpNode.nextSibling;if(!next&&(!browser.ie||browser.version>10)){rng.insertNode(tmpNode.cloneNode(false))}else{rng.setStartAfter(tmpNode)}pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[\\\\s\"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([\\\\s\"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}if(str){str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}}rng.collapse(true).select(true)}else{if(browser.version>8){var txt=me.document.createTextNode(\"\\n\");var start=rng.startContainer;if(rng.startOffset==0){var preNode=start.previousSibling;if(preNode){rng.insertNode(txt);var fillchar=me.document.createTextNode(\" \");rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{rng.insertNode(txt).setStartAfter(txt);var fillchar=me.document.createTextNode(\" \");start=rng.startContainer.childNodes[rng.startOffset];if(start&&!/^\\n/.test(start.nodeValue)){rng.setStartBefore(txt)}rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{var tmpNode=me.document.createElement(\"br\");rng.insertNode(tmpNode);rng.insertNode(me.document.createTextNode(domUtils.fillChar));rng.setStartAfter(tmpNode);pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[ \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([ \"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}rng.collapse(true).select()}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"tabkeydown\",function(cmd,evt){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(evt.shiftKey){}else{if(!rng.collapsed){var bk=rng.createBookmark();var start=bk.start.previousSibling;while(start){if(pre.firstChild===start&&!domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start);break}if(domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling);break}start=start.previousSibling}var end=bk.end;start=bk.start.nextSibling;if(pre.firstChild===bk.start){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}while(start&&start!==end){if(domUtils.isBr(start)&&start.nextSibling){if(start.nextSibling===end){break}pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}start=start.nextSibling}rng.moveToBookmark(bk).select()}else{var tmpNode=me.document.createTextNode(\"    \");rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true)}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"beforeinserthtml\",function(evtName,html){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){if(!rng.collapsed){rng.deleteContents()}var htmlstr=\"\";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){htmlstr+=cn.innerText()}}else{htmlstr+=cn.data}});if(!/\\n$/.test(htmlstr)){htmlstr+=\"\\n\"}}}else{htmlstr+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(htmlstr)){htmlstr=htmlstr.replace(/\\n$/,\"\")}});var tmpNode=me.document.createTextNode(utils.html(htmlstr.replace(/&nbsp;/g,\" \")));rng.insertNode(tmpNode).selectNode(tmpNode).select()}else{var frag=me.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/&nbsp;/g,\" \"))))}}else{frag.appendChild(me.document.createTextNode(utils.html(cn.data.replace(/&nbsp;/g,\" \"))))}});if(frag.lastChild.nodeName!=\"BR\"){frag.appendChild(me.document.createElement(\"br\"))}}}else{frag.appendChild(me.document.createTextNode(utils.html(node.data.replace(/&nbsp;/g,\" \"))))}if(!node.nextSibling()&&frag.lastChild.nodeName==\"BR\"){frag.removeChild(frag.lastChild)}});rng.insertNode(frag).select()}return true}});me.addListener(\"keydown\",function(cmd,evt){var me=this,keyCode=evt.keyCode||evt.which;if(keyCode==40){var rng=me.selection.getRange(),pre,start=rng.startContainer;if(rng.collapsed&&(pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true))&&!pre.nextSibling){var last=pre.lastChild;while(last&&last.nodeName==\"BR\"){last=last.previousSibling}if(last===start||rng.startContainer===pre&&rng.startOffset==pre.childNodes.length){me.execCommand(\"insertparagraph\");domUtils.preventDefault(evt)}}}});me.addListener(\"delkeydown\",function(type,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);var start=rng.startContainer;if(domUtils.isTagNode(start,\"pre\")&&rng.collapsed&&domUtils.isStartInblock(rng)){var p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);start.parentNode.insertBefore(p,start);domUtils.remove(start);rng.setStart(p,0).setCursor(false,true);domUtils.preventDefault(evt);return true}})};UE.commands[\"cleardoc\"]={execCommand:function(cmdName){var me=this,enterTag=me.options.enterTag,range=me.selection.getRange();if(enterTag==\"br\"){me.body.innerHTML=\"<br/>\";range.setStart(me.body,0).setCursor()}else{me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).setCursor(false,true)}setTimeout(function(){me.fireEvent(\"clearDoc\")},0)}};UE.plugin.register(\"anchor\",function(){return{bindEvents:{ready:function(){utils.cssRule(\"anchor\",\".anchorclass{background: url('\"+this.options.themePath+this.options.theme+\"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",this.document)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(a){var val;if(val=a.getAttr(\"anchorname\")){a.tagName=\"a\";a.setAttr({anchorname:\"\",name:val,class:\"\"})}})},inputRule:function(root){utils.each(root.getNodesByTagName(\"a\"),function(a){var val;if((val=a.getAttr(\"name\"))&&!a.getAttr(\"href\")){if(/^\\_Toc\\d+$/.test(val)){a.parentNode.removeChild(a);return}a.tagName=\"img\";a.setAttr({anchorname:a.getAttr(\"name\"),class:\"anchorclass\"});a.setAttr(\"name\")}})},commands:{anchor:{execCommand:function(cmd,name){var range=this.selection.getRange(),img=range.getClosedNode();if(img&&img.getAttribute(\"anchorname\")){if(name){img.setAttribute(\"anchorname\",name)}else{range.setStartBefore(img).setCursor();domUtils.remove(img)}}else{if(name){var anchor=this.document.createElement(\"img\");range.collapse(true);domUtils.setAttributes(anchor,{anchorname:name,class:\"anchorclass\"});range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true)}}}}}}});UE.plugins[\"wordcount\"]=function(){var me=this;me.setOpt(\"wordCount\",true);me.addListener(\"contentchange\",function(){me.fireEvent(\"wordcount\")});var timer;me.addListener(\"ready\",function(){var me=this;domUtils.on(me.body,\"keyup\",function(evt){var code=evt.keyCode||evt.which,ignores={16:1,18:1,20:1,37:1,38:1,39:1,40:1};if(code in ignores)return;clearTimeout(timer);timer=setTimeout(function(){me.fireEvent(\"wordcount\")},200)})})};UE.plugins[\"pagebreak\"]=function(){var me=this,notBreakTags=[\"td\"];me.setOpt(\"pageBreakTag\",\"_ueditor_page_break_tag_\");function fillNode(node){if(domUtils.isEmptyBlock(node)){var firstChild=node.firstChild,tmpNode;while(firstChild&&firstChild.nodeType==1&&domUtils.isEmptyBlock(firstChild)){tmpNode=firstChild;firstChild=firstChild.firstChild}!tmpNode&&(tmpNode=node);domUtils.fillNode(me.document,tmpNode)}}me.ready(function(){utils.cssRule(\"pagebreak\",\".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",me.document)});function isHr(node){return node&&node.nodeType==1&&node.tagName==\"HR\"&&node.className==\"pagebreak\"}me.addInputRule(function(root){root.traversal(function(node){if(node.type==\"text\"&&node.data==me.options.pageBreakTag){var hr=UE.uNode.createElement('<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">');node.parentNode.insertBefore(hr,node);node.parentNode.removeChild(node)}})});me.addOutputRule(function(node){utils.each(node.getNodesByTagName(\"hr\"),function(n){if(n.getAttr(\"class\")==\"pagebreak\"){var txt=UE.uNode.createText(me.options.pageBreakTag);n.parentNode.insertBefore(txt,n);n.parentNode.removeChild(n)}})});me.commands[\"pagebreak\"]={execCommand:function(){var range=me.selection.getRange(),hr=me.document.createElement(\"hr\");domUtils.setAttributes(hr,{class:\"pagebreak\",noshade:\"noshade\",size:\"5\"});domUtils.unSelectable(hr);var node=domUtils.findParentByTagName(range.startContainer,notBreakTags,true),parents=[],pN;if(node){switch(node.tagName){case\"TD\":pN=node.parentNode;if(!pN.previousSibling){var table=domUtils.findParentByTagName(pN,\"table\");table.parentNode.insertBefore(hr,table);parents=domUtils.findParents(hr,true)}else{pN.parentNode.insertBefore(hr,pN);parents=domUtils.findParents(hr)}pN=parents[1];if(hr!==pN){domUtils.breakParent(hr,pN)}me.fireEvent(\"afteradjusttable\",me.document)}}else{if(!range.collapsed){range.deleteContents();var start=range.startContainer;while(!domUtils.isBody(start)&&domUtils.isBlockElm(start)&&domUtils.isEmptyNode(start)){range.setStartBefore(start).collapse(true);domUtils.remove(start);start=range.startContainer}}range.insertNode(hr);var pN=hr.parentNode,nextNode;while(!domUtils.isBody(pN)){domUtils.breakParent(hr,pN);nextNode=hr.nextSibling;if(nextNode&&domUtils.isEmptyBlock(nextNode)){domUtils.remove(nextNode)}pN=hr.parentNode}nextNode=hr.nextSibling;var pre=hr.previousSibling;if(isHr(pre)){domUtils.remove(pre)}else{pre&&fillNode(pre)}if(!nextNode){var p=me.document.createElement(\"p\");hr.parentNode.appendChild(p);domUtils.fillNode(me.document,p);range.setStart(p,0).collapse(true)}else{if(isHr(nextNode)){domUtils.remove(nextNode)}else{fillNode(nextNode)}range.setEndAfter(hr).collapse(false)}range.select(true)}}}};UE.plugin.register(\"wordimage\",function(){var me=this,images=[];this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement;if(\"IMG\"==el.tagName&&el.getAttribute(\"data-word-image\")){me.ui._dialogs.wordimageDialog&&me.ui._dialogs.wordimageDialog.open()}});return{commands:{wordimage:{execCommand:function(){var images=domUtils.getElementsByTagName(me.body,\"img\");var urlList=[];for(var i=0,ci;ci=images[i++];){var url=ci.getAttribute(\"data-word-image\");url&&urlList.push(url)}return urlList},queryCommandState:function(){images=domUtils.getElementsByTagName(me.body,\"img\");for(var i=0,ci;ci=images[i++];){if(ci.getAttribute(\"data-word-image\")){return 1}}return-1},notNeedUndo:true}},inputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(img){var attrs=img.attrs,flag=parseInt(attrs.width)<128||parseInt(attrs.height)<43,opt=me.options,src=opt.UEDITOR_HOME_URL+\"themes/default/images/spacer.gif\";if(attrs[\"src\"]&&/^(?:(file:\\/+))/.test(attrs[\"src\"])){img.setAttr({width:attrs.width,height:attrs.height,alt:attrs.alt,\"data-word-image\":attrs.src,src:src,style:\"background:url(\"+(flag?opt.themePath+opt.theme+\"/images/word.gif\":opt.langPath+opt.lang+\"/images/localimage.png\")+\") no-repeat center center;border:1px solid #ddd\"})}})}}});UE.plugin.register(\"autosave\",function(){var me=this,saveKey=null;function save(editor){var saveData;if(!editor.hasContents()){saveKey&&me.removePreferences(saveKey);return}editor._autoSaveTimer=null;saveData=me.body.innerHTML;if(editor.fireEvent(\"beforeautosave\",{content:saveData})===false){return}me.setPreferences(saveKey,saveData);editor.fireEvent(\"afterautosave\",{content:saveData})}return{defaultOptions:{autoSaveEnable:true,autoSaveRestore:false,autoSaveKey:null},bindEvents:{ready:function(){saveKey=me.getOpt(\"autoSaveKey\");if(!saveKey){var _suffix=\"_DraftsData\",key=null;if(me.key){key=me.key+_suffix}else{key=(me.container.parentNode.id||\"ue-common\")+_suffix}saveKey=(location.protocol+location.host+location.pathname).replace(/[.:\\/]/g,\"_\")+key}if(me.getOpt(\"autoSaveRestore\")){var data=me.getPreferences(saveKey);if(data){me.body.innerHTML=data;me.fireEvent(\"showmessage\",{type:\"info\",content:me.getLang(\"autosave\").autoRestoreTip})}}},beforesubmit:function(){if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}me.execCommand(\"clear_auto_save_content\")},contentchange:function(){if(!me.isReady){return}if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}if(me._autoSaveTimer){window.clearTimeout(me._autoSaveTimer)}me._autoSaveTimer=window.setTimeout(function(){save(me)},1e3)}},commands:{clear_auto_save_content:{execCommand:function(cmd,name){if(saveKey&&me.getPreferences(saveKey)){me.removePreferences(saveKey)}},notNeedUndo:true,ignoreContentChange:true},set_auto_save_content:{execCommand:function(cmd,name){save(me)},notNeedUndo:true,ignoreContentChange:true},get_auto_save_content:{execCommand:function(cmd,name){return me.getPreferences(saveKey)||\"\"},notNeedUndo:true,ignoreContentChange:true},auto_save_restore:{execCommand:function(cmd,name){if(saveKey){me.body.innerHTML=me.getPreferences(saveKey)||\"<p>\"+domUtils.fillHtml+\"</p>\";me.focus(true)}},queryCommandState:function(){return saveKey?me.getPreferences(saveKey)===null?-1:0:-1},notNeedUndo:true,ignoreContentChange:true}}}});UE.plugin.register(\"formula\",function(){var me=this,images=[];return{commands:{formula:{execCommand:function(cmdName,value){var range=me.selection.getRange(),img=range.getClosedNode();value=encodeURIComponent(value);var formulaConfig=me.getOpt(\"formulaConfig\");var src=formulaConfig.imageUrlTemplate.replace(/\\{\\}/,value);if(img){img.setAttribute(\"src\",src)}else{me.execCommand(\"insertHtml\",'<img src=\"'+src+'\" data-formula-image=\"'+value+'\" />')}}}}}});UE.plugins[\"dragdrop\"]=function(){var me=this;me.ready(function(){domUtils.on(this.body,\"dragend\",function(){var rng=me.selection.getRange();var node=rng.getClosedNode()||me.selection.getStart();if(node&&node.tagName==\"IMG\"){var pre=node.previousSibling,next;while(next=node.nextSibling){if(next.nodeType==1&&next.tagName==\"SPAN\"&&!next.firstChild){domUtils.remove(next)}else{break}}if((pre&&pre.nodeType==1&&!domUtils.isEmptyBlock(pre)||!pre)&&(!next||next&&!domUtils.isEmptyBlock(next))){if(pre&&pre.tagName==\"P\"&&!domUtils.isEmptyBlock(pre)){pre.appendChild(node);domUtils.moveChild(next,pre);domUtils.remove(next)}else if(next&&next.tagName==\"P\"&&!domUtils.isEmptyBlock(next)){next.insertBefore(node,next.firstChild)}if(pre&&pre.tagName==\"P\"&&domUtils.isEmptyBlock(pre)){domUtils.remove(pre)}if(next&&next.tagName==\"P\"&&domUtils.isEmptyBlock(next)){domUtils.remove(next)}rng.selectNode(node).select();me.fireEvent(\"saveScene\")}}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var rng=me.selection.getRange(),node;if(node=domUtils.findParentByTagName(rng.startContainer,\"p\",true)){if(domUtils.getComputedStyle(node,\"text-align\")==\"center\"){domUtils.removeStyle(node,\"text-align\")}}}})};UE.plugins[\"undo\"]=function(){var saveSceneTimer;var me=this,maxUndoCount=me.options.maxUndoCount||20,maxInputCount=me.options.maxInputCount||20,fillchar=new RegExp(domUtils.fillChar+\"|</hr>\",\"gi\");var noNeedFillCharTags={ol:1,ul:1,table:1,tbody:1,tr:1,body:1};var orgState=me.options.autoClearEmptyNode;function compareAddr(indexA,indexB){if(indexA.length!=indexB.length)return 0;for(var i=0,l=indexA.length;i<l;i++){if(indexA[i]!=indexB[i])return 0}return 1}function compareRangeAddress(rngAddrA,rngAddrB){if(rngAddrA.collapsed!=rngAddrB.collapsed){return 0}if(!compareAddr(rngAddrA.startAddress,rngAddrB.startAddress)||!compareAddr(rngAddrA.endAddress,rngAddrB.endAddress)){return 0}return 1}function UndoManager(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.undo=function(){if(this.hasUndo){if(!this.list[this.index-1]&&this.list.length==1){this.reset();return}while(this.list[this.index].content==this.list[this.index-1].content){this.index--;if(this.index==0){return this.restore(0)}}this.restore(--this.index)}};this.redo=function(){if(this.hasRedo){while(this.list[this.index].content==this.list[this.index+1].content){this.index++;if(this.index==this.list.length-1){return this.restore(this.index)}}this.restore(++this.index)}};this.restore=function(){var me=this.editor;var scene=this.list[this.index];var root=UE.htmlparser(scene.content.replace(fillchar,\"\"));me.options.autoClearEmptyNode=false;me.filterInputRule(root);me.options.autoClearEmptyNode=orgState;me.document.body.innerHTML=root.toHtml();me.fireEvent(\"afterscencerestore\");if(browser.ie){utils.each(domUtils.getElementsByTagName(me.document,\"td th caption p\"),function(node){if(domUtils.isEmptyNode(node)){domUtils.fillNode(me.document,node)}})}try{var rng=new dom.Range(me.document).moveToAddress(scene.address);rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()])}catch(e){}this.update();this.clearKey();me.fireEvent(\"reset\",true)};this.getScene=function(){var me=this.editor;var rng=me.selection.getRange(),rngAddress=rng.createAddress(false,true);me.fireEvent(\"beforegetscene\");var root=UE.htmlparser(me.body.innerHTML);me.options.autoClearEmptyNode=false;me.filterOutputRule(root);me.options.autoClearEmptyNode=orgState;var cont=root.toHtml();me.fireEvent(\"aftergetscene\");return{address:rngAddress,content:cont}};this.save=function(notCompareRange,notSetCursor){clearTimeout(saveSceneTimer);var currentScene=this.getScene(notSetCursor),lastScene=this.list[this.index];if(!lastScene||lastScene&&lastScene.content!=currentScene.content){setTimeout(function(){me.trigger(\"contentchange\")},0)}if(lastScene&&lastScene.content==currentScene.content&&(notCompareRange?1:compareRangeAddress(lastScene.address,currentScene.address))){return}this.list=this.list.slice(0,this.index+1);this.list.push(currentScene);if(this.list.length>maxUndoCount){this.list.shift()}this.index=this.list.length-1;this.clearKey();this.update()};this.update=function(){this.hasRedo=!!this.list[this.index+1];this.hasUndo=!!this.list[this.index-1]};this.reset=function(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.clearKey()};this.clearKey=function(){keycont=0;lastKeyCode=null}}me.undoManger=new UndoManager;me.undoManger.editor=me;function saveScene(){this.undoManger.save()}me.addListener(\"saveScene\",function(){var args=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,args)});me.addListener(\"reset\",function(type,exclude){if(!exclude){this.undoManger.reset()}});me.commands[\"redo\"]=me.commands[\"undo\"]={execCommand:function(cmdName){this.undoManger[cmdName]()},queryCommandState:function(cmdName){return this.undoManger[\"has\"+(cmdName.toLowerCase()==\"undo\"?\"Undo\":\"Redo\")]?0:-1},notNeedUndo:1};var keys={16:1,17:1,18:1,37:1,38:1,39:1,40:1},keycont=0,lastKeyCode;var inputType=false;me.addListener(\"ready\",function(){domUtils.on(this.body,\"compositionstart\",function(){inputType=true});domUtils.on(this.body,\"compositionend\",function(){inputType=false})});me.addshortcutkey({Undo:\"ctrl+90\",Redo:\"ctrl+89\"});var isCollapsed=true;me.addListener(\"keyup\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!me.selection.getRange().collapsed){me.undoManger.save(false,true);isCollapsed=false;return}if(me.undoManger.list.length===0){me.undoManger.save(true)}clearTimeout(saveSceneTimer);function save(cont){cont.undoManger.save(false,true);cont.fireEvent(\"selectionchange\")}saveSceneTimer=setTimeout(function(){if(inputType){var intervalTimer=setInterval(function(){if(!inputType){save(me);clearInterval(intervalTimer)}},300);return}save(me)},200);lastKeyCode=keyCode;keycont++;if(keycont>=maxInputCount){save(me)}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!isCollapsed){this.undoManger.save(false,true);isCollapsed=true}}});me.stopCmdUndo=function(){me.__hasEnterExecCommand=true};me.startCmdUndo=function(){me.__hasEnterExecCommand=false}};UE.plugin.register(\"copy\",function(){var me=this;function initZeroClipboard(){ZeroClipboard.config({debug:false,swfPath:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.swf\"});var client=me.zeroclipboard=new ZeroClipboard;client.on(\"copy\",function(e){var client=e.client,rng=me.selection.getRange(),div=document.createElement(\"div\");div.appendChild(rng.cloneContents());client.setText(div.innerText||div.textContent);client.setHtml(div.innerHTML);rng.select()});client.on(\"mouseover mouseout\",function(e){var target=e.target;if(target){if(e.type==\"mouseover\"){domUtils.addClass(target,\"edui-state-hover\")}else if(e.type==\"mouseout\"){domUtils.removeClasses(target,\"edui-state-hover\")}}});client.on(\"wrongflash noflash\",function(){ZeroClipboard.destroy()});me.fireEvent(\"zeroclipboardready\",client)}return{bindEvents:{ready:function(){if(!browser.ie){if(window.ZeroClipboard){initZeroClipboard()}else{utils.loadFile(document,{src:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){initZeroClipboard()})}}}},commands:{copy:{execCommand:function(cmd){if(!me.document.execCommand(\"copy\")){alert(me.getLang(\"copymsg\"))}}}}}});UE.plugins[\"paste\"]=function(){function getClipboardData(callback){var doc=this.document;if(doc.getElementById(\"baidu_pastebin\")){return}var range=this.selection.getRange(),bk=range.createBookmark(),pastebin=doc.createElement(\"div\");pastebin.id=\"baidu_pastebin\";browser.webkit&&pastebin.appendChild(doc.createTextNode(domUtils.fillChar+domUtils.fillChar));doc.body.appendChild(pastebin);bk.start.style.display=\"\";pastebin.style.cssText=\"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\"+domUtils.getXY(bk.start).y+\"px\";range.selectNodeContents(pastebin).select(true);setTimeout(function(){if(browser.webkit){for(var i=0,pastebins=doc.querySelectorAll(\"#baidu_pastebin\"),pi;pi=pastebins[i++];){if(domUtils.isEmptyNode(pi)){domUtils.remove(pi)}else{pastebin=pi;break}}}try{pastebin.parentNode.removeChild(pastebin)}catch(e){}range.moveToBookmark(bk).select(true);callback(pastebin)},0)}var me=this;me.setOpt({retainOnlyLabelPasted:false});var txtContent,htmlContent,address;function getPureHtml(html){return html.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi,function(a,b,tagName,attrs){tagName=tagName.toLowerCase();if({img:1}[tagName]){return a}attrs=attrs.replace(/([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,function(str,atr,val){if({src:1,href:1,name:1}[atr.toLowerCase()]){return atr+\"=\"+val+\" \"}return\"\"});if({span:1,div:1}[tagName]){return\"\"}else{return\"<\"+b+tagName+\" \"+utils.trim(attrs)+\">\"}})}function filter(div){var html;if(div.firstChild){var nodes=domUtils.getElementsByTagName(div,\"span\");for(var i=0,ni;ni=nodes[i++];){if(ni.id==\"_baidu_cut_start\"||ni.id==\"_baidu_cut_end\"){domUtils.remove(ni)}}if(browser.webkit){var brs=div.querySelectorAll(\"div br\");for(var i=0,bi;bi=brs[i++];){var pN=bi.parentNode;if(pN.tagName==\"DIV\"&&pN.childNodes.length==1){pN.innerHTML=\"<p><br/></p>\";domUtils.remove(pN)}}var divs=div.querySelectorAll(\"#baidu_pastebin\");for(var i=0,di;di=divs[i++];){var tmpP=me.document.createElement(\"p\");di.parentNode.insertBefore(tmpP,di);while(di.firstChild){tmpP.appendChild(di.firstChild)}domUtils.remove(di)}var metas=div.querySelectorAll(\"meta\");for(var i=0,ci;ci=metas[i++];){domUtils.remove(ci)}var brs=div.querySelectorAll(\"br\");for(i=0;ci=brs[i++];){if(/^apple-/i.test(ci.className)){domUtils.remove(ci)}}}if(browser.gecko){var dirtyNodes=div.querySelectorAll(\"[_moz_dirty]\");for(i=0;ci=dirtyNodes[i++];){ci.removeAttribute(\"_moz_dirty\")}}if(!browser.ie){var spans=div.querySelectorAll(\"span.Apple-style-span\");for(var i=0,ci;ci=spans[i++];){domUtils.remove(ci,true)}}html=div.innerHTML;html=UE.filterWord(html);var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);if(browser.webkit){var br=root.lastChild();if(br&&br.type==\"element\"&&br.tagName==\"br\"){root.removeChild(br)}utils.each(me.body.querySelectorAll(\"div\"),function(node){if(domUtils.isEmptyBlock(node)){domUtils.remove(node,true)}})}html={html:root.toHtml()};me.fireEvent(\"beforepaste\",html,root);if(!html.html){return}root=UE.htmlparser(html.html,true);if(me.queryCommandState(\"pasteplain\")===1){me.execCommand(\"insertHtml\",UE.filterNode(root,me.options.filterTxtRules).toHtml(),true)}else{UE.filterNode(root,me.options.filterTxtRules);txtContent=root.toHtml();htmlContent=html.html;address=me.selection.getRange().createAddress(true);me.execCommand(\"insertHtml\",me.getOpt(\"retainOnlyLabelPasted\")===true?getPureHtml(htmlContent):htmlContent,true)}me.fireEvent(\"afterpaste\",html)}}me.addListener(\"pasteTransfer\",function(cmd,plainType){if(address&&txtContent&&htmlContent&&txtContent!=htmlContent){var range=me.selection.getRange();range.moveToAddress(address,true);if(!range.collapsed){while(!domUtils.isBody(range.startContainer)){var start=range.startContainer;if(start.nodeType==1){start=start.childNodes[range.startOffset];if(!start){range.setStartBefore(range.startContainer);continue}var pre=start.previousSibling;if(pre&&pre.nodeType==3&&new RegExp(\"^[\\n\\r\\t \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){range.setStartBefore(pre)}}if(range.startOffset==0){range.setStartBefore(range.startContainer)}else{break}}while(!domUtils.isBody(range.endContainer)){var end=range.endContainer;if(end.nodeType==1){end=end.childNodes[range.endOffset];if(!end){range.setEndAfter(range.endContainer);continue}var next=end.nextSibling;if(next&&next.nodeType==3&&new RegExp(\"^[\\n\\r\\t\"+domUtils.fillChar+\"]*$\").test(next.nodeValue)){range.setEndAfter(next)}}if(range.endOffset==range.endContainer[range.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){range.setEndAfter(range.endContainer)}else{break}}}range.deleteContents();range.select(true);me.__hasEnterExecCommand=true;var html=htmlContent;if(plainType===2){html=getPureHtml(html)}else if(plainType){html=txtContent}me.execCommand(\"inserthtml\",html,true);me.__hasEnterExecCommand=false;var rng=me.selection.getRange();while(!domUtils.isBody(rng.startContainer)&&!rng.startOffset&&rng.startContainer[rng.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){rng.setStartBefore(rng.startContainer)}var tmpAddress=rng.createAddress(true);address.endAddress=tmpAddress.startAddress}});me.addListener(\"ready\",function(){domUtils.on(me.body,\"cut\",function(){var range=me.selection.getRange();if(!range.collapsed&&me.undoManger){me.undoManger.save()}});domUtils.on(me.body,browser.ie||browser.opera?\"keydown\":\"paste\",function(e){if((browser.ie||browser.opera)&&(!e.ctrlKey&&!e.metaKey||e.keyCode!=\"86\")){return}getClipboardData.call(me,function(div){filter(div)})})});me.commands[\"paste\"]={execCommand:function(cmd){if(browser.ie){getClipboardData.call(me,function(div){filter(div)});me.document.execCommand(\"paste\")}else{alert(me.getLang(\"pastemsg\"))}}}};UE.plugins[\"pasteplain\"]=function(){var me=this;me.setOpt({pasteplain:false,filterTxtRules:function(){function transP(node){node.tagName=\"p\";node.setStyle()}function removeNode(node){node.parentNode.removeChild(node,true)}return{\"-\":\"script style object iframe embed input select\",p:{$:{}},br:{$:{}},div:function(node){var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node)},ol:removeNode,ul:removeNode,dl:removeNode,dt:removeNode,dd:removeNode,li:removeNode,caption:transP,th:transP,tr:transP,h1:transP,h2:transP,h3:transP,h4:transP,h5:transP,h6:transP,td:function(node){var txt=!!node.innerText();if(txt){node.parentNode.insertAfter(UE.uNode.createText(\" &nbsp; &nbsp;\"),node)}node.parentNode.removeChild(node,node.innerText())}}}()});var pasteplain=me.options.pasteplain;me.commands[\"pasteplain\"]={queryCommandState:function(){return pasteplain?1:0},execCommand:function(){pasteplain=!pasteplain|0},notNeedUndo:1}};UE.plugins[\"list\"]=function(){var me=this,notExchange={TD:1,PRE:1,BLOCKQUOTE:1};me.setOpt({autoTransWordToList:false,insertorderedlist:{decimal:\"\",\"lower-alpha\":\"\",\"lower-roman\":\"\",\"upper-alpha\":\"\",\"upper-roman\":\"\"},insertunorderedlist:{circle:\"\",disc:\"\",square:\"\"},listDefaultPaddingLeft:\"30\",listiconpath:\"http://bs.baidu.com/listicon/\",maxListLevel:-1,disablePInList:false});function listToArray(list){var arr=[];for(var p in list){arr.push(p)}return arr}var listStyle={OL:listToArray(me.options.insertorderedlist),UL:listToArray(me.options.insertunorderedlist)};var liiconpath=me.options.listiconpath;me.ready(function(){var customCss=[];customCss.push(\".list-paddingleft-1{padding-left:0}\");customCss.push(\".list-paddingleft-2{padding-left:\"+me.options.listDefaultPaddingLeft+\"px}\");customCss.push(\".list-paddingleft-3{padding-left:\"+me.options.listDefaultPaddingLeft*2+\"px}\");utils.cssRule(\"list\",\"ol,ul{margin:0;pading:0;\"+(browser.ie?\"\":\"width:95%\")+\"}li{clear:both;}\"+customCss.join(\"\\n\"),me.document)});me.ready(function(){domUtils.on(me.body,\"cut\",function(){setTimeout(function(){var rng=me.selection.getRange(),li;if(!rng.collapsed){if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){if(!li.nextSibling&&domUtils.isEmptyBlock(li)){var pn=li.parentNode,node;if(node=pn.previousSibling){domUtils.remove(pn);rng.setStartAtLast(node).collapse(true);rng.select(true)}else if(node=pn.nextSibling){domUtils.remove(pn);rng.setStartAtFirst(node).collapse(true);rng.select(true)}else{var tmpNode=me.document.createElement(\"p\");domUtils.fillNode(me.document,tmpNode);pn.parentNode.insertBefore(tmpNode,pn);domUtils.remove(pn);rng.setStart(tmpNode,0).collapse(true);rng.select(true)}}}}})})});function getStyle(node){var cls=node.className;if(domUtils.hasClass(node,/custom_/)){return cls.match(/custom_(\\w+)/)[1]}return domUtils.getStyle(node,\"list-style-type\")}me.addListener(\"beforepaste\",function(type,html){var me=this,rng=me.selection.getRange(),li;var root=UE.htmlparser(html.html,true);if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){var list=li.parentNode,tagName=list.tagName===\"OL\"?\"ul\":\"ol\";utils.each(root.getNodesByTagName(tagName),function(n){n.tagName=list.tagName;n.setAttr();if(n.parentNode===root){type=getStyle(list)||(list.tagName==\"OL\"?\"decimal\":\"disc\")}else{var className=n.parentNode.getAttr(\"class\");if(className&&/custom_/.test(className)){type=className.match(/custom_(\\w+)/)[1]}else{type=n.parentNode.getStyle(\"list-style-type\")}if(!type){type=list.tagName===\"OL\"?\"decimal\":\"disc\"}}var index=utils.indexOf(listStyle[list.tagName],type);if(n.parentNode!==root)index=index+1===listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];n.setStyle(\"list-style-type\",currentStyle)})}html.html=root.toHtml()});me.getOpt(\"disablePInList\")===true&&me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var newChildrens=[],index=0;utils.each(li.children,function(n){if(n.tagName==\"p\"){var tmpNode;while(tmpNode=n.children.pop()){newChildrens.splice(index,0,tmpNode);tmpNode.parentNode=li;lastNode=tmpNode}tmpNode=newChildrens[newChildrens.length-1];if(!tmpNode||tmpNode.type!==\"element\"||tmpNode.tagName!==\"br\"){var br=UE.uNode.createElement(\"br\");br.parentNode=li;newChildrens.push(br)}index=newChildrens.length}});if(newChildrens.length){li.children=newChildrens}})});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var tmpP=UE.uNode.createElement(\"p\");for(var i=0,ci;ci=li.children[i];){if(ci.type===\"text\"||dtd.p[ci.tagName]){tmpP.appendChild(ci)}else{if(tmpP.firstChild()){li.insertBefore(tmpP,ci);tmpP=UE.uNode.createElement(\"p\");i=i+2}else{i++}}}if(tmpP.firstChild()&&!tmpP.parentNode||!li.firstChild()){li.appendChild(tmpP)}if(!tmpP.firstChild()){tmpP.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}var p=li.firstChild();var lastChild=p.lastChild();if(lastChild&&lastChild.type===\"text\"&&/^\\s*$/.test(lastChild.data)){p.removeChild(lastChild)}});if(me.options.autoTransWordToList){var orderlisttype={num1:/^\\d+\\)/,decimal:/^\\d+\\./,\"lower-alpha\":/^[a-z]+\\)/,\"upper-alpha\":/^[A-Z]+\\./,cn:/^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,cn2:/^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/},unorderlisttype={square:\"n\"};function checkListType(content,container){var span=container.firstChild();if(span&&span.type===\"element\"&&span.tagName===\"span\"&&/Wingdings|Symbol/.test(span.getStyle(\"font-family\"))){for(var p in unorderlisttype){if(unorderlisttype[p]==span.data){return p}}return\"disc\"}for(var p in orderlisttype){if(orderlisttype[p].test(content)){return p}}}utils.each(root.getNodesByTagName(\"p\"),function(node){if(node.getAttr(\"class\")!==\"MsoListParagraph\"){return}node.setStyle(\"margin\",\"\");node.setStyle(\"margin-left\",\"\");node.setAttr(\"class\",\"\");function appendLi(list,p,type){if(list.tagName===\"ol\"){if(browser.ie){var first=p.firstChild();if(first.type===\"element\"&&first.tagName===\"span\"&&orderlisttype[type].test(first.innerText())){p.removeChild(first)}}else{p.innerHTML(p.innerHTML().replace(orderlisttype[type],\"\"))}}else{p.removeChild(p.firstChild())}var li=UE.uNode.createElement(\"li\");li.appendChild(p);list.appendChild(li)}var tmp=node,type,cacheNode=node;if(node.parentNode.tagName!==\"li\"&&(type=checkListType(node.innerText(),node))){var list=UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type)?\"ol\":\"ul\");list.setStyle(\"list-style-type\",type);while(node&&node.parentNode.tagName!==\"li\"&&checkListType(node.innerText(),node)){tmp=node.nextSibling();if(!tmp){node.parentNode.insertBefore(list,node)}appendLi(list,node,type);node=tmp}if(!list.parentNode&&node&&node.parentNode){node.parentNode.insertBefore(list,node)}}var span=cacheNode.firstChild();if(span&&span.type==\"element\"&&span.tagName==\"span\"&&/^\\s*(&nbsp;)+\\s*$/.test(span.innerText())){span.parentNode.removeChild(span)}})}});me.addListener(\"contentchange\",function(){adjustListStyle(me.document)});function adjustListStyle(doc,ignore){utils.each(domUtils.getElementsByTagName(doc,\"ol ul\"),function(node){if(!domUtils.inDoc(node,doc))return;var parent=node.parentNode;if(parent.tagName===node.tagName){var nodeStyleType=getStyle(node)||(node.tagName===\"OL\"?\"decimal\":\"disc\"),parentStyleType=getStyle(parent)||(parent.tagName===\"OL\"?\"decimal\":\"disc\");if(nodeStyleType===parentStyleType){var styleIndex=utils.indexOf(listStyle[node.tagName],nodeStyleType);styleIndex=styleIndex+1===listStyle[node.tagName].length?0:styleIndex+1;setListStyle(node,listStyle[node.tagName][styleIndex])}}var index=0,type=2;if(domUtils.hasClass(node,/custom_/)){if(!(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/))){type=1}}else{if(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/)){type=3}}var style=domUtils.getStyle(node,\"list-style-type\");style&&(node.style.cssText=\"list-style-type:\"+style);node.className=utils.trim(node.className.replace(/list-paddingleft-\\w+/,\"\"))+\" list-paddingleft-\"+type;utils.each(domUtils.getElementsByTagName(node,\"li\"),function(li){li.style.cssText&&(li.style.cssText=\"\");if(!li.firstChild){domUtils.remove(li);return}if(li.parentNode!==node){return}index++;if(domUtils.hasClass(node,/custom_/)){var paddingLeft=1,currentStyle=getStyle(node);if(node.tagName===\"OL\"){if(currentStyle){switch(currentStyle){case\"cn\":case\"cn1\":case\"cn2\":if(index>10&&(index%10===0||index>10&&index<20)){paddingLeft=2}else if(index>20){paddingLeft=3}break;case\"num2\":if(index>9){paddingLeft=2}}}li.className=\"list-\"+currentStyle+\"-paddingleft-\"+paddingLeft}else{li.className=\"list-\"+currentStyle+\"-paddingleft\"}}else{li.className=li.className.replace(/list-[\\w\\-]+/gi,\"\")}var className=li.getAttribute(\"class\");if(className!==null&&!className.replace(/\\s/g,\"\")){domUtils.removeAttributes(li,\"class\")}});!ignore&&adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node,\"list-style-type\"),true)})}function adjustList(list,tag,style,ignoreEmpty){var nextList=list.nextSibling;if(nextList&&nextList.nodeType===1&&nextList.tagName.toLowerCase()===tag&&(getStyle(nextList)||domUtils.getStyle(nextList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))==style){domUtils.moveChild(nextList,list);if(nextList.childNodes.length===0){domUtils.remove(nextList)}}if(nextList&&domUtils.isFillChar(nextList)){domUtils.remove(nextList)}var preList=list.previousSibling;if(preList&&preList.nodeType===1&&preList.tagName.toLowerCase()==tag&&(getStyle(preList)||domUtils.getStyle(preList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))===style){domUtils.moveChild(list,preList)}if(preList&&domUtils.isFillChar(preList)){domUtils.remove(preList)}!ignoreEmpty&&domUtils.isEmptyBlock(list)&&domUtils.remove(list);if(getStyle(list)){adjustListStyle(list.ownerDocument,true)}}function setListStyle(list,style){try{domUtils.setStyle(list,\"list-style-type\",style)}catch(e){}}function clearEmptySibling(node){var tmpNode=node.previousSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}tmpNode=node.nextSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}}me.addListener(\"keydown\",function(type,evt){function preventAndSave(){evt.preventDefault?evt.preventDefault():evt.returnValue=false;me.fireEvent(\"contentchange\");me.undoManger&&me.undoManger.save()}function findList(node,filterFn){while(node&&!domUtils.isBody(node)){if(filterFn(node)){return null}if(node.nodeType===1&&/[ou]l/i.test(node.tagName)){return node}node=node.parentNode}return null}var keyCode=evt.keyCode||evt.which;if(keyCode===13&&!evt.shiftKey){var rng=me.selection.getRange(),parent=domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true),li=domUtils.findParentByTagName(rng.startContainer,\"li\",true);if(parent&&parent.tagName!==\"PRE\"&&!li){var html=parent.innerHTML.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(/^\\s*1\\s*\\.[^\\d]/.test(html)){parent.innerHTML=html.replace(/^\\s*1\\s*\\./,\"\");rng.setStartAtLast(parent).collapse(true).select();me.__hasEnterExecCommand=true;me.execCommand(\"insertorderedlist\");me.__hasEnterExecCommand=false}}var range=me.selection.getRange(),start=findList(range.startContainer,function(node){return node.tagName===\"TABLE\"}),end=range.collapsed?start:findList(range.endContainer,function(node){return node.tagName===\"TABLE\"});if(start&&end&&start===end){if(!range.collapsed){start=domUtils.findParentByTagName(range.startContainer,\"li\",true);end=domUtils.findParentByTagName(range.endContainer,\"li\",true);if(start&&end&&start===end){range.deleteContents();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isEmptyBlock(li)){pre=li.previousSibling;next=li.nextSibling;p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);parentList=li.parentNode;if(pre&&next){range.setStart(next,0).collapse(true).select(true);domUtils.remove(li)}else{if(!pre&&!next||!pre){parentList.parentNode.insertBefore(p,parentList)}else{li.parentNode.parentNode.insertBefore(p,parentList.nextSibling)}domUtils.remove(li);if(!parentList.firstChild){domUtils.remove(parentList)}range.setStart(p,0).setCursor()}preventAndSave();return}}else{var tmpRange=range.cloneRange(),bk=tmpRange.collapse(false).createBookmark();range.deleteContents();tmpRange.moveToBookmark(bk);var li=domUtils.findParentByTagName(tmpRange.startContainer,\"li\",true);clearEmptySibling(li);tmpRange.select();preventAndSave();return}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){if(domUtils.isEmptyBlock(li)){bk=range.createBookmark();var parentList=li.parentNode;if(li!==parentList.lastChild){domUtils.breakParent(li,parentList);clearEmptySibling(li)}else{parentList.parentNode.insertBefore(li,parentList.nextSibling);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}if(!dtd.$list[li.parentNode.tagName]){if(!domUtils.isBlockElm(li.firstChild)){p=me.document.createElement(\"p\");li.parentNode.insertBefore(p,li);while(li.firstChild){p.appendChild(li.firstChild)}domUtils.remove(li)}else{domUtils.remove(li,true)}}range.moveToBookmark(bk).select()}else{var first=li.firstChild;if(!first||!domUtils.isBlockElm(first)){var p=me.document.createElement(\"p\");!li.firstChild&&domUtils.fillNode(me.document,p);while(li.firstChild){p.appendChild(li.firstChild)}li.appendChild(p);first=p}var span=me.document.createElement(\"span\");range.insertNode(span);domUtils.breakParent(span,li);var nextLi=span.nextSibling;first=nextLi.firstChild;if(!first){p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);nextLi.appendChild(p);first=p}if(domUtils.isEmptyNode(first)){first.innerHTML=\"\";domUtils.fillNode(me.document,first)}range.setStart(first,0).collapse(true).shrinkBoundary().select();domUtils.remove(span);var pre=nextLi.previousSibling;if(pre&&domUtils.isEmptyBlock(pre)){pre.innerHTML=\"<p></p>\";domUtils.fillNode(me.document,pre.firstChild)}}preventAndSave()}}}if(keyCode===8){range=me.selection.getRange();if(range.collapsed&&domUtils.isStartInblock(range)){tmpRange=range.cloneRange().trimBoundary();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isStartInblock(tmpRange)){start=domUtils.findParentByTagName(range.startContainer,\"p\",true);if(start&&start!==li.firstChild){var parentList=domUtils.findParentByTagName(start,[\"ol\",\"ul\"]);domUtils.breakParent(start,parentList);clearEmptySibling(start);me.fireEvent(\"contentchange\");range.setStart(start,0).setCursor(false,true);me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&(pre=li.previousSibling)){if(keyCode===46&&li.childNodes.length){return}if(dtd.$list[pre.tagName]){pre=pre.lastChild}me.undoManger&&me.undoManger.save();first=li.firstChild;if(domUtils.isBlockElm(first)){if(domUtils.isEmptyNode(first)){pre.appendChild(first);range.setStart(first,0).setCursor(false,true);while(li.firstChild){pre.appendChild(li.firstChild)}}else{span=me.document.createElement(\"span\");range.insertNode(span);if(domUtils.isEmptyBlock(pre)){pre.innerHTML=\"\"}domUtils.moveChild(li,pre);range.setStartBefore(span).collapse(true).select(true);domUtils.remove(span)}}else{if(domUtils.isEmptyNode(li)){var p=me.document.createElement(\"p\");pre.appendChild(p);range.setStart(p,0).setCursor()}else{range.setEnd(pre,pre.childNodes.length).collapse().select(true);while(li.firstChild){pre.appendChild(li.firstChild)}}}domUtils.remove(li);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&!li.previousSibling){var parentList=li.parentNode;var bk=range.createBookmark();if(domUtils.isTagNode(parentList.parentNode,\"ol ul\")){parentList.parentNode.insertBefore(li,parentList);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}else{while(li.firstChild){parentList.parentNode.insertBefore(li.firstChild,parentList)}domUtils.remove(li);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}range.moveToBookmark(bk).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}}}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==8){var rng=me.selection.getRange(),list;if(list=domUtils.findParentByTagName(rng.startContainer,[\"ol\",\"ul\"],true)){adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,\"list-style-type\"),true)}}});me.addListener(\"tabkeydown\",function(){var range=me.selection.getRange();function checkLevel(li){if(me.options.maxListLevel!=-1){var level=li.parentNode,levelNum=0;while(/[ou]l/i.test(level.tagName)){levelNum++;level=level.parentNode}if(levelNum>=me.options.maxListLevel){return true}}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var bk;if(range.collapsed){if(checkLevel(li))return true;var parentLi=li.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));index=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];setListStyle(list,currentStyle);if(domUtils.isStartInblock(range)){me.fireEvent(\"saveScene\");bk=range.createBookmark();parentLi.insertBefore(list,li);list.appendChild(li);adjustList(list,list.tagName.toLowerCase(),currentStyle);me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select(true);return true}}else{me.fireEvent(\"saveScene\");bk=range.createBookmark();for(var i=0,closeList,parents=domUtils.findParents(li),ci;ci=parents[i++];){if(domUtils.isTagNode(ci,\"ol ul\")){closeList=ci;break}}var current=li;if(bk.end){while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){if(checkLevel(current)){current=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList});continue}var parentLi=current.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));var currentIndex=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][currentIndex];setListStyle(list,currentStyle);parentLi.insertBefore(list,current);while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){li=current.nextSibling;list.appendChild(current);if(!li||domUtils.isTagNode(li,\"ol ul\")){if(li){while(li=li.firstChild){if(li.tagName==\"LI\"){break}}}else{li=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList})}break}current=li}adjustList(list,list.tagName.toLowerCase(),currentStyle);current=li}}me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select();return true}}});function getLi(start){while(start&&!domUtils.isBody(start)){if(start.nodeName==\"TABLE\"){return null}if(start.nodeName==\"LI\"){return start}start=start.parentNode}}me.commands[\"insertorderedlist\"]=me.commands[\"insertunorderedlist\"]={execCommand:function(command,style){if(!style){style=command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\"}var me=this,range=this.selection.getRange(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\",frag=me.document.createDocumentFragment();range.adjustmentBoundary().shrinkBoundary();var bko=range.createBookmark(true),start=getLi(me.document.getElementById(bko.start)),modifyStart=0,end=getLi(me.document.getElementById(bko.end)),modifyEnd=0,startParent,endParent,list,tmp;if(start||end){start&&(startParent=start.parentNode);if(!bko.end){end=start}end&&(endParent=end.parentNode);if(startParent===endParent){while(start!==end){tmp=start;start=start.nextSibling;if(!domUtils.isBlockElm(tmp.firstChild)){var p=me.document.createElement(\"p\");while(tmp.firstChild){p.appendChild(tmp.firstChild)}tmp.appendChild(p)}frag.appendChild(tmp)}tmp=me.document.createElement(\"span\");startParent.insertBefore(tmp,end);if(!domUtils.isBlockElm(end.firstChild)){p=me.document.createElement(\"p\");while(end.firstChild){p.appendChild(end.firstChild)}end.appendChild(p)}frag.appendChild(end);domUtils.breakParent(tmp,startParent);if(domUtils.isEmptyNode(tmp.previousSibling)){domUtils.remove(tmp.previousSibling)}if(domUtils.isEmptyNode(tmp.nextSibling)){domUtils.remove(tmp.nextSibling)}var nodeStyle=getStyle(startParent)||domUtils.getComputedStyle(startParent,\"list-style-type\")||(command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\");if(startParent.tagName.toLowerCase()==tag&&nodeStyle==style){for(var i=0,ci,tmpFrag=me.document.createDocumentFragment();ci=frag.firstChild;){if(domUtils.isTagNode(ci,\"ol ul\")){tmpFrag.appendChild(ci)}else{while(ci.firstChild){tmpFrag.appendChild(ci.firstChild);domUtils.remove(ci)}}}tmp.parentNode.insertBefore(tmpFrag,tmp)}else{list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);tmp.parentNode.insertBefore(list,tmp)}domUtils.remove(tmp);list&&adjustList(list,tag,style);range.moveToBookmark(bko).select();return}if(start){while(start){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{var tmpfrag=me.document.createDocumentFragment(),hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){var tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}startParent.parentNode.insertBefore(frag,startParent.nextSibling);if(domUtils.isEmptyNode(startParent)){range.setStartBefore(startParent);domUtils.remove(startParent)}else{range.setStartAfter(startParent)}modifyStart=1}if(end&&domUtils.inDoc(endParent,me.document)){start=endParent.firstChild;while(start&&start!==end){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{tmpfrag=me.document.createDocumentFragment();hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}var tmpDiv=domUtils.createElement(me.document,\"div\",{tmpDiv:1});domUtils.moveChild(end,tmpDiv);frag.appendChild(tmpDiv);domUtils.remove(end);endParent.parentNode.insertBefore(frag,endParent);range.setEndBefore(endParent);if(domUtils.isEmptyNode(endParent)){domUtils.remove(endParent)}modifyEnd=1}}if(!modifyStart){range.setStartBefore(me.document.getElementById(bko.start))}if(bko.end&&!modifyEnd){range.setEndAfter(me.document.getElementById(bko.end))}range.enlarge(true,function(node){return notExchange[node.tagName]});frag=me.document.createDocumentFragment();var bk=range.createBookmark(),current=domUtils.getNextDomNode(bk.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode,block=domUtils.isBlockElm;while(current&&current!==bk.end&&domUtils.getPosition(current,bk.end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd.li[current.tagName]){if(current.nodeType==1&&dtd.$list[current.tagName]){while(current.firstChild){frag.appendChild(current.firstChild)}tmpNode=domUtils.getNextDomNode(current,false,filterFn);domUtils.remove(current);current=tmpNode;continue}tmpNode=current;tmpRange.setStartBefore(current);while(current&&current!==bk.end&&(!block(current)||domUtils.isBookmarkNode(current))){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!notExchange[node.tagName]})}if(current&&block(current)){tmp=domUtils.getNextDomNode(tmpNode,false,filterFn);if(tmp&&domUtils.isBookmarkNode(tmp)){current=domUtils.getNextDomNode(tmp,false,filterFn);tmpNode=tmp}}tmpRange.setEndAfter(tmpNode);current=domUtils.getNextDomNode(tmpNode,false,filterFn);var li=range.document.createElement(\"li\");li.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(li)){var tmpNode=range.document.createElement(\"p\");while(li.firstChild){tmpNode.appendChild(li.firstChild)}li.appendChild(tmpNode)}frag.appendChild(li)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}range.moveToBookmark(bk).collapse(true);list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);range.insertNode(list);adjustList(list,tag,style);for(var i=0,ci,tmpDivs=domUtils.getElementsByTagName(list,\"div\");ci=tmpDivs[i++];){if(ci.getAttribute(\"tmpDiv\")){domUtils.remove(ci,true)}}range.moveToBookmark(bko).select()},queryCommandState:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath();for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){return 0}if(tag==ci.nodeName.toLowerCase()){return 1}}return 0},queryCommandValue:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath(),node;for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){node=null;break}if(tag==ci.nodeName.toLowerCase()){node=ci;break}}return node?getStyle(node)||domUtils.getComputedStyle(node,\"list-style-type\"):null}}};(function(){var sourceEditors={textarea:function(editor,holder){var textarea=holder.ownerDocument.createElement(\"textarea\");textarea.style.cssText=\"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\";if(browser.ie&&browser.version<8){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\";holder.onresize=function(){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\"}}holder.appendChild(textarea);return{setContent:function(content){textarea.value=content},getContent:function(){return textarea.value},select:function(){var range;if(browser.ie){range=textarea.createTextRange();range.collapse(true);range.select()}else{textarea.setSelectionRange(0,0);textarea.focus()}},dispose:function(){holder.removeChild(textarea);holder.onresize=null;textarea=null;holder=null},focus:function(){textarea.focus()},blur:function(){textarea.blur()}}},codemirror:function(editor,holder){var codeEditor=window.CodeMirror(holder,{mode:\"text/html\",tabMode:\"indent\",lineNumbers:true,lineWrapping:true,onChange:function(v){editor.sync();editor.fireEvent(\"contentchange\")}});var dom=codeEditor.getWrapperElement();dom.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;';codeEditor.getScrollerElement().style.cssText=\"position:absolute;left:0;top:0;width:100%;height:100%;\";codeEditor.refresh();return{getCodeMirror:function(){return codeEditor},setContent:function(content){codeEditor.setValue(content)},getContent:function(){return codeEditor.getValue()},select:function(){codeEditor.focus()},dispose:function(){holder.removeChild(dom);dom=null;codeEditor=null},focus:function(){codeEditor.focus()},blur:function(){codeEditor.setOption(\"readOnly\",true);codeEditor.setOption(\"readOnly\",false)}}}};UE.plugins[\"source\"]=function(){var me=this;var opt=this.options;var sourceMode=false;var sourceEditor;var orgSetContent;var orgFocus;var orgBlur;opt.sourceEditor=browser.ie?\"textarea\":opt.sourceEditor||\"codemirror\";me.setOpt({sourceEditorFirst:false});function createSourceEditor(holder){return sourceEditors[opt.sourceEditor==\"codemirror\"&&window.CodeMirror?\"codemirror\":\"textarea\"](me,holder)}var bakCssText;var oldGetContent,bakAddress;me.commands[\"source\"]={execCommand:function(){sourceMode=!sourceMode;if(sourceMode){bakAddress=me.selection.getRange().createAddress(false,true);me.undoManger&&me.undoManger.save(true);if(browser.gecko){me.body.contentEditable=false}bakCssText=me.iframe.style.cssText;me.iframe.style.cssText+=\"position:absolute;left:-32768px;top:-32768px;\";me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML);me.filterOutputRule(root);root.traversal(function(node){if(node.type==\"element\"){switch(node.tagName){case\"td\":case\"th\":case\"caption\":if(node.children&&node.children.length==1){if(node.firstChild().tagName==\"br\"){node.removeChild(node.firstChild())}}break;case\"pre\":node.innerText(node.innerText().replace(/&nbsp;/g,\" \"))}}});me.fireEvent(\"aftergetcontent\");var content=root.toHtml(true);sourceEditor=createSourceEditor(me.iframe.parentNode);sourceEditor.setContent(content);orgSetContent=me.setContent;me.setContent=function(html){var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();sourceEditor.setContent(html)};setTimeout(function(){sourceEditor.select();me.addListener(\"fullscreenchanged\",function(){try{sourceEditor.getCodeMirror().refresh()}catch(e){}})});oldGetContent=me.getContent;me.getContent=function(){return sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"};orgFocus=me.focus;orgBlur=me.blur;me.focus=function(){sourceEditor.focus()};me.blur=function(){orgBlur.call(me);sourceEditor.blur()}}else{me.iframe.style.cssText=bakCssText;var cont=sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";cont=cont.replace(new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\",\"g\"),function(a,b){if(b&&!dtd.$inlineWithA[b.toLowerCase()]){return a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g,\"\")}return a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g,\"\")});me.setContent=orgSetContent;me.setContent(cont);sourceEditor.dispose();sourceEditor=null;me.getContent=oldGetContent;me.focus=orgFocus;me.blur=orgBlur;var first=me.body.firstChild;if(!first){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";first=me.body.firstChild}me.undoManger&&me.undoManger.save(true);if(browser.gecko){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;left:0;top:-32768px\";document.body.appendChild(input);me.body.contentEditable=false;setTimeout(function(){domUtils.setViewportOffset(input,{left:-32768,top:0});input.focus();setTimeout(function(){me.body.contentEditable=true;me.selection.getRange().moveToAddress(bakAddress).select(true);domUtils.remove(input)})})}else{try{me.selection.getRange().moveToAddress(bakAddress).select(true)}catch(e){}}}this.fireEvent(\"sourcemodechanged\",sourceMode)},queryCommandState:function(){return sourceMode|0},notNeedUndo:1};var oldQueryCommandState=me.queryCommandState;me.queryCommandState=function(cmdName){cmdName=cmdName.toLowerCase();if(sourceMode){return cmdName in{source:1,fullscreen:1}?1:-1}return oldQueryCommandState.apply(this,arguments)};if(opt.sourceEditor==\"codemirror\"){me.addListener(\"ready\",function(){utils.loadFile(document,{src:opt.codeMirrorJsUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){if(opt.sourceEditorFirst){setTimeout(function(){me.execCommand(\"source\")},0)}});utils.loadFile(document,{tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:opt.codeMirrorCssUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.css?221123\"})})}}})();UE.plugins[\"enterkey\"]=function(){var hTag,me=this,tag=me.options.enterTag;me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var range=me.selection.getRange(),start=range.startContainer,doSave;if(!browser.ie){if(/h\\d/i.test(hTag)){if(browser.gecko){var h=domUtils.findParentByTagName(start,[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\",\"table\"],true);if(!h){me.document.execCommand(\"formatBlock\",false,\"<p>\");doSave=1}}else{if(start.nodeType==1){var tmp=me.document.createTextNode(\"\"),div;range.insertNode(tmp);div=domUtils.findParentByTagName(tmp,\"div\",true);if(div){var p=me.document.createElement(\"p\");while(div.firstChild){p.appendChild(div.firstChild)}div.parentNode.insertBefore(p,div);domUtils.remove(div);range.setStartBefore(tmp).setCursor();doSave=1}domUtils.remove(tmp)}}if(me.undoManger&&doSave){me.undoManger.save()}}browser.opera&&range.select()}else{me.fireEvent(\"saveScene\",true,true)}}});me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){if(me.fireEvent(\"beforeenterkeydown\")){domUtils.preventDefault(evt);return}me.fireEvent(\"saveScene\",true,true);hTag=\"\";var range=me.selection.getRange();if(!range.collapsed){var start=range.startContainer,end=range.endContainer,startTd=domUtils.findParentByTagName(start,\"td\",true),endTd=domUtils.findParentByTagName(end,\"td\",true);if(startTd&&endTd&&startTd!==endTd||!startTd&&endTd||startTd&&!endTd){evt.preventDefault?evt.preventDefault():evt.returnValue=false;return}}if(tag==\"p\"){if(!browser.ie){start=domUtils.findParentByTagName(range.startContainer,[\"ol\",\"ul\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\"],true);if(!start&&!browser.opera){me.document.execCommand(\"formatBlock\",false,\"<p>\");if(browser.gecko){range=me.selection.getRange();start=domUtils.findParentByTagName(range.startContainer,\"p\",true);start&&domUtils.removeDirtyAttr(start)}}else{hTag=start.tagName;start.tagName.toLowerCase()==\"p\"&&browser.gecko&&domUtils.removeDirtyAttr(start)}}}else{evt.preventDefault?evt.preventDefault():evt.returnValue=false;if(!range.collapsed){range.deleteContents();start=range.startContainer;if(start.nodeType==1&&(start=start.childNodes[range.startOffset])){while(start.nodeType==1){if(dtd.$empty[start.tagName]){range.setStartBefore(start).setCursor();if(me.undoManger){me.undoManger.save()}return false}if(!start.firstChild){var br=range.document.createElement(\"br\");start.appendChild(br);range.setStart(start,0).setCursor();if(me.undoManger){me.undoManger.save()}return false}start=start.firstChild}if(start===range.startContainer.childNodes[range.startOffset]){br=range.document.createElement(\"br\");range.insertNode(br).setCursor()}else{range.setStart(start,0).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br).setStartAfter(br).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br);var parent=br.parentNode;if(parent.lastChild===br){br.parentNode.insertBefore(br.cloneNode(true),br);range.setStartBefore(br)}else{range.setStartAfter(br)}range.setCursor()}}}})};UE.plugins[\"keystrokes\"]=function(){var me=this;var collapsed=true;me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng=me.selection.getRange();if(!rng.collapsed&&!(evt.ctrlKey||evt.shiftKey||evt.altKey||evt.metaKey)&&(keyCode>=65&&keyCode<=90||keyCode>=48&&keyCode<=57||keyCode>=96&&keyCode<=111||{13:1,8:1,46:1}[keyCode])){var tmpNode=rng.startContainer;if(domUtils.isFillChar(tmpNode)){rng.setStartBefore(tmpNode)}tmpNode=rng.endContainer;if(domUtils.isFillChar(tmpNode)){rng.setEndAfter(tmpNode)}rng.txtToElmBoundary();if(rng.endContainer&&rng.endContainer.nodeType==1){tmpNode=rng.endContainer.childNodes[rng.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){rng.setEndAfter(tmpNode)}}if(rng.startOffset==0){tmpNode=rng.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=rng.endContainer;if(rng.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.fireEvent(\"saveScene\");me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";rng.setStart(me.body.firstChild,0).setCursor(false,true);me._selectionChange();return}}}}if(keyCode==keymap.Backspace){rng=me.selection.getRange();collapsed=rng.collapsed;if(me.fireEvent(\"delkeydown\",evt)){return}var start,end;if(rng.collapsed&&rng.inFillChar()){start=rng.startContainer;if(domUtils.isFillChar(start)){rng.setStartBefore(start).shrinkBoundary(true).collapse(true);domUtils.remove(start)}else{start.nodeValue=start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\");rng.startOffset--;rng.collapse(true).select(true)}}if(start=rng.getClosedNode()){me.fireEvent(\"saveScene\");rng.setStartBefore(start);domUtils.remove(start);rng.setCursor();me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(!browser.ie){start=domUtils.findParentByTagName(rng.startContainer,\"table\",true);end=domUtils.findParentByTagName(rng.endContainer,\"table\",true);if(start&&!end||!start&&end||start!==end){evt.preventDefault();return}}}if(keyCode==keymap.Tab){var excludeTagNameForTabKey={ol:1,ul:1,table:1};if(me.fireEvent(\"tabkeydown\",evt)){domUtils.preventDefault(evt);return}var range=me.selection.getRange();me.fireEvent(\"saveScene\");for(var i=0,txt=\"\",tabSize=me.options.tabSize||4,tabNode=me.options.tabNode||\"&nbsp;\";i<tabSize;i++){txt+=tabNode}var span=me.document.createElement(\"span\");span.innerHTML=txt+domUtils.fillChar;if(range.collapsed){range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var filterFn=function(node){return domUtils.isBlockElm(node)&&!excludeTagNameForTabKey[node.tagName.toLowerCase()]};start=domUtils.findParent(range.startContainer,filterFn,true);end=domUtils.findParent(range.endContainer,filterFn,true);if(start&&end&&start===end){range.deleteContents();range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn);while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){current.insertBefore(span.cloneNode(true).firstChild,current.firstChild);current=domUtils.getNextDomNode(current,false,filterFn)}range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select()}}domUtils.preventDefault(evt)}if(browser.gecko&&keyCode==46){range=me.selection.getRange();if(range.collapsed){start=range.startContainer;if(domUtils.isEmptyBlock(start)){var parent=start.parentNode;while(domUtils.getChildCount(parent)==1&&!domUtils.isBody(parent)){start=parent;parent=parent.parentNode}if(start===parent.lastChild)evt.preventDefault();return}}}browser.chrome&&me.on(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;if((e.metaKey&&e.altKey||e.ctrlKey&&e.shiftKey)&&keyCode==73){return true}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng,me=this;if(keyCode==keymap.Backspace){if(me.fireEvent(\"delkeyup\")){return}rng=me.selection.getRange();if(rng.collapsed){var tmpNode,autoClearTagName=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];if(tmpNode=domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){if(domUtils.isEmptyBlock(tmpNode)){var pre=tmpNode.previousSibling;if(pre&&pre.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtLast(pre).setCursor(false,true);return}else{var next=tmpNode.nextSibling;if(next&&next.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtFirst(next).setCursor(false,true);return}}}}if(domUtils.isBody(rng.startContainer)){var tmpNode=domUtils.createElement(me.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true)}}if(!collapsed&&(rng.startContainer.nodeType==3||rng.startContainer.nodeType==1&&domUtils.isEmptyBlock(rng.startContainer))){if(browser.ie){var span=rng.document.createElement(\"span\");rng.insertNode(span).setStartBefore(span).collapse(true);rng.select();domUtils.remove(span)}else{rng.select()}}}})};UE.plugins[\"fiximgclick\"]=function(){var elementUpdated=false;function Scale(){this.editor=null;this.resizer=null;this.cover=null;this.doc=document;this.prePos={x:0,y:0};this.startPos={x:0,y:0}}(function(){var rect=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];Scale.prototype={init:function(editor){var me=this;me.editor=editor;me.startPos=this.prePos={x:0,y:0};me.dragId=-1;var hands=[],cover=me.cover=document.createElement(\"div\"),resizer=me.resizer=document.createElement(\"div\");cover.id=me.editor.ui.id+\"_imagescale_cover\";cover.style.cssText=\"position:absolute;display:none;z-index:\"+me.editor.options.zIndex+\";filter:alpha(opacity=0); opacity:0;background:#CCC;\";domUtils.on(cover,\"mousedown\",function(e){me.hide()});for(var i=0;i<8;i++){hands.push('<span class=\"edui-editor-imagescale-hand'+i+'\"></span>')}resizer.id=me.editor.ui.id+\"_imagescale\";resizer.className=\"edui-editor-imagescale\";resizer.innerHTML=hands.join(\"\");resizer.style.cssText+=\";display:none;border:1px solid #3b77ff;z-index:\"+me.editor.options.zIndex+\";\";me.editor.ui.getDom().appendChild(cover);me.editor.ui.getDom().appendChild(resizer);me.initStyle();me.initEvents()},initStyle:function(){utils.cssRule(\"imagescale\",\".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}\"+\".edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\")},initEvents:function(){var me=this;me.startPos.x=me.startPos.y=0;me.isDraging=false},_eventHandler:function(e){var me=this;switch(e.type){case\"mousedown\":var hand=e.target||e.srcElement,hand;if(hand.className.indexOf(\"edui-editor-imagescale-hand\")!==-1&&me.dragId===-1){me.dragId=hand.className.slice(-1);me.startPos.x=me.prePos.x=e.clientX;me.startPos.y=me.prePos.y=e.clientY;domUtils.on(me.doc,\"mousemove\",me.proxy(me._eventHandler,me))}break;case\"mousemove\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.prePos.x=e.clientX;me.prePos.y=e.clientY;elementUpdated=true;me.updateTargetElement()}break;case\"mouseup\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.updateTargetElement();if(me.target.parentNode){me.attachTo(me.target)}me.dragId=-1}domUtils.un(me.doc,\"mousemove\",me.proxy(me._eventHandler,me));if(elementUpdated){elementUpdated=false;me.editor.fireEvent(\"contentchange\")}break;default:break}},updateTargetElement:function(){var me=this;domUtils.setStyles(me.target,{width:me.resizer.style.width,height:me.resizer.style.height});me.target.width=parseInt(me.resizer.style.width);me.target.height=parseInt(me.resizer.style.height);me.attachTo(me.target)},updateContainerStyle:function(dir,offset){var me=this,dom=me.resizer,tmp;if(rect[dir][0]!=0){tmp=parseInt(dom.style.left)+offset.x;dom.style.left=me._validScaledProp(\"left\",tmp)+\"px\"}if(rect[dir][1]!=0){tmp=parseInt(dom.style.top)+offset.y;dom.style.top=me._validScaledProp(\"top\",tmp)+\"px\"}if(rect[dir][2]!=0){tmp=dom.clientWidth+rect[dir][2]*offset.x;dom.style.width=me._validScaledProp(\"width\",tmp)+\"px\"}if(rect[dir][3]!=0){tmp=dom.clientHeight+rect[dir][3]*offset.y;dom.style.height=me._validScaledProp(\"height\",tmp)+\"px\"}},_validScaledProp:function(prop,value){var ele=this.resizer,wrap=document;value=isNaN(value)?0:value;switch(prop){case\"left\":return value<0?0:value+ele.clientWidth>wrap.clientWidth?wrap.clientWidth-ele.clientWidth:value;case\"top\":return value<0?0:value+ele.clientHeight>wrap.clientHeight?wrap.clientHeight-ele.clientHeight:value;case\"width\":return value<=0?1:value+ele.offsetLeft>wrap.clientWidth?wrap.clientWidth-ele.offsetLeft:value;case\"height\":return value<=0?1:value+ele.offsetTop>wrap.clientHeight?wrap.clientHeight-ele.offsetTop:value}},hideCover:function(){this.cover.style.display=\"none\"},showCover:function(){var me=this,editorPos=domUtils.getXY(me.editor.ui.getDom()),iframePos=domUtils.getXY(me.editor.iframe);domUtils.setStyles(me.cover,{width:me.editor.iframe.offsetWidth+\"px\",height:me.editor.iframe.offsetHeight+\"px\",top:iframePos.y-editorPos.y+\"px\",left:iframePos.x-editorPos.x+\"px\",position:\"absolute\",display:\"\"})},show:function(targetObj){var me=this;me.resizer.style.display=\"block\";if(targetObj){me.attachTo(targetObj)}domUtils.on(this.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.on(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.showCover();me.editor.fireEvent(\"afterscaleshow\",me);me.editor.fireEvent(\"saveScene\")},hide:function(){var me=this;me.hideCover();me.resizer.style.display=\"none\";domUtils.un(me.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.un(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.editor.fireEvent(\"afterscalehide\",me)},proxy:function(fn,context){return function(e){return fn.apply(context||this,arguments)}},attachTo:function(targetObj){var me=this,target=me.target=targetObj,resizer=this.resizer,imgPos=domUtils.getXY(target),iframePos=domUtils.getXY(me.editor.iframe),editorPos=domUtils.getXY(resizer.parentNode);domUtils.setStyles(resizer,{width:target.width+\"px\",height:target.height+\"px\",left:iframePos.x+imgPos.x-me.editor.getScrollLeft()-editorPos.x-parseInt(resizer.style.borderLeftWidth)+\"px\",top:iframePos.y+imgPos.y-me.editor.getScrollTop()-editorPos.y-parseInt(resizer.style.borderTopWidth)+\"px\"})}}})();return function(){var me=this,imageScale;me.setOpt(\"imageScaleEnabled\",true);if(!browser.ie&&me.options.imageScaleEnabled){me.addListener(\"click\",function(type,e){var range=me.selection.getRange(),img=range.getClosedNode();if(img&&img.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"&&img===e.target){if(img.getAttribute(\"anchorname\")||domUtils.hasClass(img,\"uep-loading\")||domUtils.hasClass(img,\"uep-loading-error\")){return}if(!imageScale){imageScale=new Scale;imageScale.init(me);me.ui.getDom().appendChild(imageScale.resizer);var _keyDownHandler=function(e){imageScale.hide();if(imageScale.target){me.selection.getRange().selectNode(imageScale.target).select()}},_mouseDownHandler=function(e){var ele=e.target||e.srcElement;if(ele&&(ele.className===undefined||ele.className.indexOf(\"edui-editor-imagescale\")===-1)){_keyDownHandler(e)}},timer;me.addListener(\"afterscaleshow\",function(e){me.addListener(\"beforekeydown\",_keyDownHandler);me.addListener(\"beforemousedown\",_mouseDownHandler);domUtils.on(document,\"keydown\",_keyDownHandler);domUtils.on(document,\"mousedown\",_mouseDownHandler);me.selection.getNative().removeAllRanges()});me.addListener(\"afterscalehide\",function(e){me.removeListener(\"beforekeydown\",_keyDownHandler);me.removeListener(\"beforemousedown\",_mouseDownHandler);domUtils.un(document,\"keydown\",_keyDownHandler);domUtils.un(document,\"mousedown\",_mouseDownHandler);var target=imageScale.target;if(target.parentNode){me.selection.getRange().selectNode(target).select()}});domUtils.on(imageScale.resizer,\"mousedown\",function(e){me.selection.getNative().removeAllRanges();var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){timer=setTimeout(function(){imageScale.hide();if(imageScale.target)me.selection.getRange().selectNode(ele).select()},200)}});domUtils.on(imageScale.resizer,\"mouseup\",function(e){var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){clearTimeout(timer)}})}imageScale.show(img)}else{if(imageScale&&imageScale.resizer.style.display!==\"none\"){imageScale.hide()}}})}if(browser.webkit){me.addListener(\"click\",function(type,e){if(e.target.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"){var range=new dom.Range(me.document);range.selectNode(e.target).select()}})}}}();UE.plugin.register(\"autolink\",function(){var cont=0;return!browser.ie?{bindEvents:{reset:function(){cont=0},keydown:function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var sel=me.selection.getNative(),range=sel.getRangeAt(0).cloneRange(),offset,charCode;var start=range.startContainer;while(start.nodeType==1&&range.startOffset>0){start=range.startContainer.childNodes[range.startOffset-1];if(!start){break}range.setStart(start,start.nodeType==1?start.childNodes.length:start.nodeValue.length);range.collapse(true);start=range.startContainer}do{if(range.startOffset==0){start=range.startContainer.previousSibling;while(start&&start.nodeType==1){start=start.lastChild}if(!start||domUtils.isFillChar(start)){break}offset=start.nodeValue.length}else{start=range.startContainer;offset=range.startOffset}range.setStart(start,offset-1);charCode=range.toString().charCodeAt(0)}while(charCode!=160&&charCode!=32);if(range.toString().replace(new RegExp(domUtils.fillChar,\"g\"),\"\").match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)){while(range.toString().length){if(/^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(range.toString())){break}try{range.setStart(range.startContainer,range.startOffset+1)}catch(e){var start=range.startContainer;while(!(next=start.nextSibling)){if(domUtils.isBody(start)){return}start=start.parentNode}range.setStart(next,0)}}if(domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}var a=me.document.createElement(\"a\"),text=me.document.createTextNode(\" \"),href;me.undoManger&&me.undoManger.save();a.appendChild(range.extractContents());a.href=a.innerHTML=a.innerHTML.replace(/<[^>]+>/g,\"\");href=a.getAttribute(\"href\").replace(new RegExp(domUtils.fillChar,\"g\"),\"\");href=/^(?:https?:\\/\\/)/gi.test(href)?href:\"http://\"+href;a.setAttribute(\"_src\",utils.html(href));a.href=utils.html(href);range.insertNode(a);a.parentNode.insertBefore(text,a.nextSibling);range.setStart(text,0);range.collapse(true);sel.removeAllRanges();sel.addRange(range);me.undoManger&&me.undoManger.save()}}}}}:{}},function(){var keyCodes={37:1,38:1,39:1,40:1,13:1,32:1};function checkIsCludeLink(node){if(node.nodeType==3){return null}if(node.nodeName==\"A\"){return node}var lastChild=node.lastChild;while(lastChild){if(lastChild.nodeName==\"A\"){return lastChild}if(lastChild.nodeType==3){if(domUtils.isWhitespace(lastChild)){lastChild=lastChild.previousSibling;continue}return null}lastChild=lastChild.lastChild}}browser.ie&&this.addListener(\"keyup\",function(cmd,evt){var me=this,keyCode=evt.keyCode;if(keyCodes[keyCode]){var rng=me.selection.getRange();var start=rng.startContainer;if(keyCode==13){while(start&&!domUtils.isBody(start)&&!domUtils.isBlockElm(start)){start=start.parentNode}if(start&&!domUtils.isBody(start)&&start.nodeName==\"P\"){var pre=start.previousSibling;if(pre&&pre.nodeType==1){var pre=checkIsCludeLink(pre);if(pre&&!pre.getAttribute(\"_href\")){domUtils.remove(pre,true)}}}}else if(keyCode==32){if(start.nodeType==3&&/^\\s$/.test(start.nodeValue)){start=start.previousSibling;if(start&&start.nodeName==\"A\"&&!start.getAttribute(\"_href\")){domUtils.remove(start,true)}}}else{start=domUtils.findParentByTagName(start,\"a\",true);if(start&&!start.getAttribute(\"_href\")){var bk=rng.createBookmark();domUtils.remove(start,true);rng.moveToBookmark(bk).select(true)}}}})});UE.plugins[\"autoheight\"]=function(){var me=this;me.autoHeightEnabled=me.options.autoHeightEnabled!==false;if(!me.autoHeightEnabled){return}var bakOverflow,lastHeight=0,options=me.options,currentHeight,timer;function adjustHeight(){var me=this;clearTimeout(timer);if(isFullscreen)return;if(!me.queryCommandState||me.queryCommandState&&me.queryCommandState(\"source\")!=1){timer=setTimeout(function(){var node=me.body.lastChild;while(node&&node.nodeType!=1){node=node.previousSibling}if(node&&node.nodeType==1){node.style.clear=\"both\";currentHeight=Math.max(domUtils.getXY(node).y+node.offsetHeight+25,Math.max(options.minFrameHeight,options.initialFrameHeight));if(currentHeight!==lastHeight){me.iframe.parentNode.style.transition=\"width 0.3s, height 0.3s, easy-in-out\";if(currentHeight!==parseInt(me.iframe.parentNode.style.height)){me.iframe.parentNode.style.height=currentHeight+\"px\"}me.body.style.height=currentHeight+\"px\";lastHeight=currentHeight}domUtils.removeStyle(node,\"clear\")}},50)}}var isFullscreen;me.addListener(\"fullscreenchanged\",function(cmd,f){isFullscreen=f});me.addListener(\"destroy\",function(){domUtils.un(me.window,\"scroll\",fixedScrollTop);me.removeListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight)});me.enableAutoHeight=function(){var me=this;if(!me.autoHeightEnabled){return}var doc=me.document;me.autoHeightEnabled=true;bakOverflow=doc.body.style.overflowY;doc.body.style.overflowY=\"hidden\";me.addListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight);setTimeout(function(){adjustHeight.call(me)},browser.gecko?100:0);me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.disableAutoHeight=function(){me.body.style.overflowY=bakOverflow||\"\";me.removeListener(\"contentchange\",adjustHeight);me.removeListener(\"keyup\",adjustHeight);me.removeListener(\"mouseup\",adjustHeight);me.autoHeightEnabled=false;me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.on(\"setHeight\",function(){me.disableAutoHeight()});me.addListener(\"ready\",function(){me.enableAutoHeight();var timer;domUtils.on(browser.ie?me.body:me.document,browser.webkit?\"dragover\":\"drop\",function(){clearTimeout(timer);timer=setTimeout(function(){adjustHeight.call(me)},100)});domUtils.on(me.window,\"scroll\",fixedScrollTop)});var lastScrollY;function fixedScrollTop(){if(!me.window)return;if(lastScrollY===null){lastScrollY=me.window.scrollY}else if(me.window.scrollY==0&&lastScrollY!=0){me.window.scrollTo(0,0);lastScrollY=null}}};UE.plugins[\"autofloat\"]=function(){var me=this,lang=me.getLang();me.setOpt({topOffset:0});var optsAutoFloatEnabled=me.options.autoFloatEnabled!==false,topOffset=me.options.topOffset;if(!optsAutoFloatEnabled){return}var uiUtils=UE.ui.uiUtils,LteIE6=browser.ie&&browser.version<=6,quirks=browser.quirks;function checkHasUI(){if(!UE.ui){alert(lang.autofloatMsg);return 0}return 1}function fixIE6FixedPos(){var docStyle=document.body.style;docStyle.backgroundImage='url(\"about:blank\")';docStyle.backgroundAttachment=\"fixed\"}var bakCssText,placeHolder=document.createElement(\"div\"),toolbarBox,orgTop,getPosition,flag=true;function setFloating(){var toobarBoxPos=domUtils.getXY(toolbarBox),origalFloat=domUtils.getComputedStyle(toolbarBox,\"position\"),origalLeft=domUtils.getComputedStyle(toolbarBox,\"left\");toolbarBox.style.width=toolbarBox.offsetWidth+\"px\";toolbarBox.style.zIndex=me.options.zIndex*1+1;toolbarBox.parentNode.insertBefore(placeHolder,toolbarBox);if(LteIE6||quirks&&browser.ie){if(toolbarBox.style.position!=\"absolute\"){toolbarBox.style.position=\"absolute\"}toolbarBox.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-orgTop+topOffset+\"px\"}else{if(browser.ie7Compat&&flag){flag=false;toolbarBox.style.left=domUtils.getXY(toolbarBox).x-document.documentElement.getBoundingClientRect().left+2+\"px\"}if(toolbarBox.style.position!=\"fixed\"){toolbarBox.style.position=\"fixed\";toolbarBox.style.top=topOffset+\"px\";(origalFloat==\"absolute\"||origalFloat==\"relative\")&&parseFloat(origalLeft)&&(toolbarBox.style.left=toobarBoxPos.x+\"px\")}}}function unsetFloating(){flag=true;if(placeHolder.parentNode){placeHolder.parentNode.removeChild(placeHolder)}toolbarBox.style.cssText=bakCssText}me.unsetFloating=unsetFloating;function updateFloating(){var rect3=getPosition(me.container);var offset=me.options.toolbarTopOffset||0;if(rect3.top<0&&rect3.bottom-toolbarBox.offsetHeight>offset){setFloating()}else{unsetFloating()}}var defer_updateFloating=utils.defer(function(){updateFloating()},browser.ie?200:100,true);me.addListener(\"destroy\",function(){domUtils.un(window,[\"scroll\",\"resize\"],updateFloating);me.removeListener(\"keydown\",defer_updateFloating)});me.addListener(\"ready\",function(){if(checkHasUI(me)){if(!me.ui){return}getPosition=uiUtils.getClientRect;toolbarBox=me.ui.getDom(\"toolbarbox\");orgTop=getPosition(toolbarBox).top;bakCssText=toolbarBox.style.cssText;placeHolder.style.height=toolbarBox.offsetHeight+\"px\";if(LteIE6){fixIE6FixedPos()}domUtils.on(window,[\"scroll\",\"resize\"],updateFloating);me.addListener(\"keydown\",defer_updateFloating);me.addListener(\"beforefullscreenchange\",function(t,enabled){if(enabled){unsetFloating()}});me.addListener(\"fullscreenchanged\",function(t,enabled){if(!enabled){updateFloating()}});me.addListener(\"sourcemodechanged\",function(t,enabled){setTimeout(function(){updateFloating()},0)});me.addListener(\"clearDoc\",function(){setTimeout(function(){updateFloating()},0)})}})};UE.plugins[\"video\"]=function(){var me=this;function creatInsertStr(url,width,height,id,align,classname,type){var str;switch(type){case\"iframe\":str='<iframe class=\"'+classname+'\" '+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+\" frameborder=0 allowfullscreen>\";break;case\"image\":str=\"<img \"+(id?'id=\"'+id+'\"':\"\")+' width=\"'+width+'\" height=\"'+height+'\" _url=\"'+url+'\" class=\"'+'\"'+' src=\"'+me.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" style=\"background:url('+me.options.UEDITOR_HOME_URL+\"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\"+(align?\"float:\"+align+\";\":\"\")+'\" />';break;case\"embed\":str='<embed type=\"application/x-shockwave-flash\" class=\"'+classname+'\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"'+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+(align?' style=\"float:'+align+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';break;case\"video\":var ext=url.substr(url.lastIndexOf(\".\")+1);if(ext==\"ogv\")ext=\"ogg\";str=\"<video\"+(id?' id=\"'+id+'\"':\"\")+' class=\"'+classname+'\" '+(align?' style=\"float:'+align+'\"':\"\")+' controls preload=\"none\" width=\"'+width+'\" height=\"'+height+'\" src=\"'+url+'\" data-setup=\"{}\">'+'<source src=\"'+url+'\" type=\"video/'+ext+'\" /></video>';break}return str}function switchImgAndVideo(root,img2video){utils.each(root.getNodesByTagName(img2video?\"img\":\"embed video\"),function(node){var className=node.getAttr(\"class\");if(className&&className.indexOf(\"edui-faked-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"embed\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}if(className&&className.indexOf(\"edui-upload-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"video\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}})}me.addOutputRule(function(root){switchImgAndVideo(root,true)});me.addInputRule(function(root){switchImgAndVideo(root)});me.commands[\"insertvideo\"]={execCommand:function(cmd,videoObjs,type){videoObjs=utils.isArray(videoObjs)?videoObjs:[videoObjs];if(me.fireEvent(\"beforeinsertvideo\",videoObjs)===true){return}var html=[],id=\"tmpVideo\",cl;for(var i=0,vi,len=videoObjs.length;i<len;i++){vi=videoObjs[i];var videoType=\"iframe\";if(vi.url.match(/.mp4$/)){videoType=\"video\"}cl=videoType==\"iframe\"?\"edui-video-iframe\":\"edui-video-video\";html.push(creatInsertStr(vi.url,vi.width||420,vi.height||280,id+i,null,cl,videoType))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertvideo\",videoObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-video-iframe\"||img.className.indexOf(\"edui-video-iframe\")!=-1||img.className==\"edui-video-video\"||img.className.indexOf(\"edui-video-video\")!=-1);return flag?1:0}}};UE.plugins[\"audio\"]=function(){var me=this;function createAudioHtml(url,param){param=param||{};var str=[\"<audio\",param.id?' id=\"'+param.id+'\"':\"\",param.cls?' class=\"'+param.cls+'\"':\"\",\" controls >\",'<source src=\"'+url+'\" type=\"audio/mpeg'+'\" />',\"</audio>\"];return str.join(\"\")}function switchImgAndAudio(root,img2audio){}me.addOutputRule(function(root){switchImgAndAudio(root,true)});me.addInputRule(function(root){switchImgAndAudio(root)});me.commands[\"insertaudio\"]={execCommand:function(cmd,audioObjs,type){audioObjs=utils.isArray(audioObjs)?audioObjs:[audioObjs];if(me.fireEvent(\"beforeinsertaudio\",audioObjs)===true){return}var html=[];for(var i=0,vi,len=audioObjs.length;i<len;i++){vi=audioObjs[i];html.push(createAudioHtml(vi.url,{cls:\"edui-audio-audio\"}))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertaudio\",audioObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-audio-audio\"||img.className.indexOf(\"edui-audio-audio\")!=-1);return flag?1:0}}};(function(){var UETable=UE.UETable=function(table){this.table=table;this.indexTable=[];this.selectedTds=[];this.cellsRange={};this.update(table)};UETable.removeSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.removeClasses(cell,\"selectTdClass\")})};UETable.addSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.addClass(cell,\"selectTdClass\")})};UETable.isEmptyBlock=function(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var i in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(i)){if(node.getElementsByTagName(i).length){return 0}}return 1};UETable.getWidth=function(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)};UETable.getTableCellAlignState=function(cells){!utils.isArray(cells)&&(cells=[cells]);var result={},status=[\"align\",\"valign\"],tempStatus=null,isSame=true;utils.each(cells,function(cellNode){utils.each(status,function(currentState){tempStatus=cellNode.getAttribute(currentState);if(!result[currentState]&&tempStatus){result[currentState]=tempStatus}else if(!result[currentState]||tempStatus!==result[currentState]){isSame=false;return false}});return isSame});return isSame?result:null};UETable.getTableItemsByRange=function(editor){var start=editor.selection.getStart();if(start&&start.id&&start.id.indexOf(\"_baidu_bookmark_start_\")===0&&start.nextSibling){start=start.nextSibling}var cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\"],true),tr=cell&&cell.parentNode,table=tr&&domUtils.findParentByTagName(tr,[\"table\"]),caption=table&&table.getElementsByTagName(\"caption\")[0];return{cell:cell,tr:tr,table:table,caption:caption}};UETable.getUETableBySelected=function(editor){var table=UETable.getTableItemsByRange(editor).table;if(table&&table.ueTable&&table.ueTable.selectedTds.length){return table.ueTable}return null};UETable.getDefaultValue=function(editor,table){var borderMap={thin:\"0px\",medium:\"1px\",thick:\"2px\"},tableBorder,tdPadding,tdBorder,tmpValue;if(!table){table=editor.document.createElement(\"table\");table.insertRow(0).insertCell(0).innerHTML=\"xxx\";editor.body.appendChild(table);var td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);domUtils.remove(table);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}else{td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}};UETable.getUETable=function(tdOrTable){var tag=tdOrTable.tagName.toLowerCase();tdOrTable=tag==\"td\"||tag==\"th\"||tag==\"caption\"?domUtils.findParentByTagName(tdOrTable,\"table\",true):tdOrTable;if(!tdOrTable.ueTable){tdOrTable.ueTable=new UETable(tdOrTable)}return tdOrTable.ueTable};UETable.cloneCell=function(cell,ignoreMerge,keepPro){if(!cell||utils.isString(cell)){return this.table.ownerDocument.createElement(cell||\"td\")}var flag=domUtils.hasClass(cell,\"selectTdClass\");flag&&domUtils.removeClasses(cell,\"selectTdClass\");var tmpCell=cell.cloneNode(true);if(ignoreMerge){tmpCell.rowSpan=tmpCell.colSpan=1}!keepPro&&domUtils.removeAttributes(tmpCell,\"width height\");!keepPro&&domUtils.removeAttributes(tmpCell,\"style\");tmpCell.style.borderLeftStyle=\"\";tmpCell.style.borderTopStyle=\"\";tmpCell.style.borderLeftColor=cell.style.borderRightColor;tmpCell.style.borderLeftWidth=cell.style.borderRightWidth;tmpCell.style.borderTopColor=cell.style.borderBottomColor;tmpCell.style.borderTopWidth=cell.style.borderBottomWidth;flag&&domUtils.addClass(cell,\"selectTdClass\");return tmpCell};UETable.prototype={getMaxRows:function(){var rows=this.table.rows,maxLen=1;for(var i=0,row;row=rows[i];i++){var currentMax=1;for(var j=0,cj;cj=row.cells[j++];){currentMax=Math.max(cj.rowSpan||1,currentMax)}maxLen=Math.max(currentMax+i,maxLen)}return maxLen},getMaxCols:function(){var rows=this.table.rows,maxLen=0,cellRows={};for(var i=0,row;row=rows[i];i++){var cellsNum=0;for(var j=0,cj;cj=row.cells[j++];){cellsNum+=cj.colSpan||1;if(cj.rowSpan&&cj.rowSpan>1){for(var k=1;k<cj.rowSpan;k++){if(!cellRows[\"row_\"+(i+k)]){cellRows[\"row_\"+(i+k)]=cj.colSpan||1}else{cellRows[\"row_\"+(i+k)]++}}}}cellsNum+=cellRows[\"row_\"+i]||0;maxLen=Math.max(cellsNum,maxLen)}return maxLen},getCellColIndex:function(cell){},getHSideCell:function(cell,right){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!right&&(!len?!cellInfo.colIndex:!range.beginColIndex)||right&&(!len?cellInfo.colIndex==this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!len?cellInfo.rowIndex:range.beginRowIndex;previewColIndex=!right?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex+1:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},getTabNextCell:function(cell,preRowIndex){var cellInfo=this.getCellInfo(cell),rowIndex=preRowIndex||cellInfo.rowIndex,colIndex=cellInfo.colIndex+1+(cellInfo.colSpan-1),nextCell;try{nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){try{rowIndex=rowIndex*1+1;colIndex=0;nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){}}return nextCell},getVSideCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getSameEndPosCells:function(cell,xOrY){try{var flag=xOrY.toLowerCase()===\"x\",end=domUtils.getXY(cell)[flag?\"x\":\"y\"]+cell[\"offset\"+(flag?\"Width\":\"Height\")],rows=this.table.rows,cells=null,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpEnd=domUtils.getXY(tmpCell)[flag?\"x\":\"y\"]+tmpCell[\"offset\"+(flag?\"Width\":\"Height\")];if(tmpEnd>end&&flag)break;if(cell==tmpCell||end==tmpEnd){if(tmpCell[flag?\"colSpan\":\"rowSpan\"]==1){returns.push(tmpCell)}if(flag)break}}}return returns}catch(e){showError(e)}},setCellContent:function(cell,content){cell.innerHTML=content||(browser.ie?domUtils.fillChar:\"<br />\")},cloneCell:UETable.cloneCell,getSameStartPosXCells:function(cell){try{var start=domUtils.getXY(cell).x+cell.offsetWidth,rows=this.table.rows,cells,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpStart=domUtils.getXY(tmpCell).x;if(tmpStart>start)break;if(tmpStart==start&&tmpCell.colSpan==1){returns.push(tmpCell);break}}}return returns}catch(e){showError(e)}},update:function(table){this.table=table||this.table;this.selectedTds=[];this.cellsRange={};this.indexTable=[];var rows=this.table.rows,rowsNum=this.getMaxRows(),dNum=rowsNum-rows.length,colsNum=this.getMaxCols();while(dNum--){this.table.insertRow(rows.length)}this.rowsNum=rowsNum;this.colsNum=colsNum;for(var i=0,len=rows.length;i<len;i++){this.indexTable[i]=new Array(colsNum)}for(var rowIndex=0,row;row=rows[rowIndex];rowIndex++){for(var cellIndex=0,cell,cells=row.cells;cell=cells[cellIndex];cellIndex++){if(cell.rowSpan>rowsNum){cell.rowSpan=rowsNum}var colIndex=cellIndex,rowSpan=cell.rowSpan||1,colSpan=cell.colSpan||1;while(this.indexTable[rowIndex][colIndex])colIndex++;for(var j=0;j<rowSpan;j++){for(var k=0;k<colSpan;k++){this.indexTable[rowIndex+j][colIndex+k]={rowIndex:rowIndex,cellIndex:cellIndex,colIndex:colIndex,rowSpan:rowSpan,colSpan:colSpan}}}}}for(j=0;j<rowsNum;j++){for(k=0;k<colsNum;k++){if(this.indexTable[j][k]===undefined){row=rows[j];cell=row.cells[row.cells.length-1];cell=cell?cell.cloneNode(true):this.table.ownerDocument.createElement(\"td\");this.setCellContent(cell);if(cell.colSpan!==1)cell.colSpan=1;if(cell.rowSpan!==1)cell.rowSpan=1;row.appendChild(cell);this.indexTable[j][k]={rowIndex:j,cellIndex:cell.cellIndex,colIndex:k,rowSpan:1,colSpan:1}}}}var tds=domUtils.getElementsByTagName(this.table,\"td\"),selectTds=[];utils.each(tds,function(td){if(domUtils.hasClass(td,\"selectTdClass\")){selectTds.push(td)}});if(selectTds.length){var start=selectTds[0],end=selectTds[selectTds.length-1],startInfo=this.getCellInfo(start),endInfo=this.getCellInfo(end);this.selectedTds=selectTds;this.cellsRange={beginRowIndex:startInfo.rowIndex,beginColIndex:startInfo.colIndex,endRowIndex:endInfo.rowIndex+endInfo.rowSpan-1,endColIndex:endInfo.colIndex+endInfo.colSpan-1}}if(!domUtils.hasClass(this.table.rows[0],\"firstRow\")){domUtils.addClass(this.table.rows[0],\"firstRow\");for(var i=1;i<this.table.rows.length;i++){domUtils.removeClasses(this.table.rows[i],\"firstRow\")}}},getCellInfo:function(cell){if(!cell)return;var cellIndex=cell.cellIndex,rowIndex=cell.parentNode.rowIndex,rowInfo=this.indexTable[rowIndex],numCols=this.colsNum;for(var colIndex=cellIndex;colIndex<numCols;colIndex++){var cellInfo=rowInfo[colIndex];if(cellInfo.rowIndex===rowIndex&&cellInfo.cellIndex===cellIndex){return cellInfo}}},getCell:function(rowIndex,cellIndex){return rowIndex<this.rowsNum&&this.table.rows[rowIndex].cells[cellIndex]||null},deleteCell:function(cell,rowIndex){rowIndex=typeof rowIndex==\"number\"?rowIndex:cell.parentNode.rowIndex;var row=this.table.rows[rowIndex];row.deleteCell(cell.cellIndex)},getCellsRange:function(cellA,cellB){function checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex){var tmpBeginRowIndex=beginRowIndex,tmpBeginColIndex=beginColIndex,tmpEndRowIndex=endRowIndex,tmpEndColIndex=endColIndex,cellInfo,colIndex,rowIndex;if(beginRowIndex>0){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[beginRowIndex][colIndex];rowIndex=cellInfo.rowIndex;if(rowIndex<beginRowIndex){tmpBeginRowIndex=Math.min(rowIndex,tmpBeginRowIndex)}}}if(endColIndex<me.colsNum){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][endColIndex];colIndex=cellInfo.colIndex+cellInfo.colSpan-1;if(colIndex>endColIndex){tmpEndColIndex=Math.max(colIndex,tmpEndColIndex)}}}if(endRowIndex<me.rowsNum){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[endRowIndex][colIndex];rowIndex=cellInfo.rowIndex+cellInfo.rowSpan-1;if(rowIndex>endRowIndex){tmpEndRowIndex=Math.max(rowIndex,tmpEndRowIndex)}}}if(beginColIndex>0){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][beginColIndex];colIndex=cellInfo.colIndex;if(colIndex<beginColIndex){tmpBeginColIndex=Math.min(cellInfo.colIndex,tmpBeginColIndex)}}}if(tmpBeginRowIndex!=beginRowIndex||tmpBeginColIndex!=beginColIndex||tmpEndRowIndex!=endRowIndex||tmpEndColIndex!=endColIndex){return checkRange(tmpBeginRowIndex,tmpBeginColIndex,tmpEndRowIndex,tmpEndColIndex)}else{return{beginRowIndex:beginRowIndex,beginColIndex:beginColIndex,endRowIndex:endRowIndex,endColIndex:endColIndex}}}try{var me=this,cellAInfo=me.getCellInfo(cellA);if(cellA===cellB){return{beginRowIndex:cellAInfo.rowIndex,beginColIndex:cellAInfo.colIndex,endRowIndex:cellAInfo.rowIndex+cellAInfo.rowSpan-1,endColIndex:cellAInfo.colIndex+cellAInfo.colSpan-1}}var cellBInfo=me.getCellInfo(cellB);var beginRowIndex=Math.min(cellAInfo.rowIndex,cellBInfo.rowIndex),beginColIndex=Math.min(cellAInfo.colIndex,cellBInfo.colIndex),endRowIndex=Math.max(cellAInfo.rowIndex+cellAInfo.rowSpan-1,cellBInfo.rowIndex+cellBInfo.rowSpan-1),endColIndex=Math.max(cellAInfo.colIndex+cellAInfo.colSpan-1,cellBInfo.colIndex+cellBInfo.colSpan-1);return checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex)}catch(e){}},getCells:function(range){this.clearSelected();var beginRowIndex=range.beginRowIndex,beginColIndex=range.beginColIndex,endRowIndex=range.endRowIndex,endColIndex=range.endColIndex,cellInfo,rowIndex,colIndex,tdHash={},returnTds=[];for(var i=beginRowIndex;i<=endRowIndex;i++){for(var j=beginColIndex;j<=endColIndex;j++){cellInfo=this.indexTable[i][j];rowIndex=cellInfo.rowIndex;colIndex=cellInfo.colIndex;var key=rowIndex+\"|\"+colIndex;if(tdHash[key])continue;tdHash[key]=1;if(rowIndex<i||colIndex<j||rowIndex+cellInfo.rowSpan-1>endRowIndex||colIndex+cellInfo.colSpan-1>endColIndex){return null}returnTds.push(this.getCell(rowIndex,cellInfo.cellIndex))}}return returnTds},clearSelected:function(){UETable.removeSelectedClass(this.selectedTds);this.selectedTds=[];this.cellsRange={}},setSelected:function(range){var cells=this.getCells(range);UETable.addSelectedClass(cells);this.selectedTds=cells;this.cellsRange=range},isFullRow:function(){var range=this.cellsRange;return range.endColIndex-range.beginColIndex+1==this.colsNum},isFullCol:function(){var range=this.cellsRange,table=this.table,ths=table.getElementsByTagName(\"th\"),rows=range.endRowIndex-range.beginRowIndex+1;return!ths.length?rows==this.rowsNum:rows==this.rowsNum||rows==this.rowsNum-1},getNextCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getPreviewCell:function(cell,top){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!top&&(!len?!cellInfo.colIndex:!range.beginColIndex)||top&&(!len?cellInfo.rowIndex>this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!top?!len?cellInfo.rowIndex:range.beginRowIndex:!len?cellInfo.rowIndex<1?0:cellInfo.rowIndex-1:range.beginRowIndex;previewColIndex=!top?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},moveContent:function(cellTo,cellFrom){if(UETable.isEmptyBlock(cellFrom))return;if(UETable.isEmptyBlock(cellTo)){cellTo.innerHTML=cellFrom.innerHTML;return}var child=cellTo.lastChild;if(child.nodeType==3||!dtd.$block[child.tagName]){cellTo.appendChild(cellTo.ownerDocument.createElement(\"br\"))}while(child=cellFrom.firstChild){cellTo.appendChild(child)}},mergeRight:function(cell){var cellInfo=this.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan,rightCellInfo=this.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=this.getCell(rightCellInfo.rowIndex,rightCellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+rightCellInfo.colSpan;cell.removeAttribute(\"width\");this.moveContent(cell,rightCell);this.deleteCell(rightCell,rightCellInfo.rowIndex);this.update()},mergeDown:function(cell){var cellInfo=this.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan,downCellInfo=this.indexTable[downRowIndex][cellInfo.colIndex],downCell=this.getCell(downCellInfo.rowIndex,downCellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+downCellInfo.rowSpan;cell.removeAttribute(\"height\");this.moveContent(cell,downCell);this.deleteCell(downCell,downCellInfo.rowIndex);this.update()},mergeRange:function(){var range=this.cellsRange,leftTopCell=this.getCell(range.beginRowIndex,this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex);var cells=this.getCells(range);for(var i=0,ci;ci=cells[i++];){if(ci!==leftTopCell){this.moveContent(leftTopCell,ci);this.deleteCell(ci)}}leftTopCell.rowSpan=range.endRowIndex-range.beginRowIndex+1;leftTopCell.rowSpan>1&&leftTopCell.removeAttribute(\"height\");leftTopCell.colSpan=range.endColIndex-range.beginColIndex+1;leftTopCell.colSpan>1&&leftTopCell.removeAttribute(\"width\");if(leftTopCell.rowSpan==this.rowsNum&&leftTopCell.colSpan!=1){leftTopCell.colSpan=1}if(leftTopCell.colSpan==this.colsNum&&leftTopCell.rowSpan!=1){var rowIndex=leftTopCell.parentNode.rowIndex;if(this.table.deleteRow){for(var i=rowIndex+1,curIndex=rowIndex+1,len=leftTopCell.rowSpan;i<len;i++){this.table.deleteRow(curIndex)}}else{for(var i=0,len=leftTopCell.rowSpan-1;i<len;i++){var row=this.table.rows[rowIndex+1];row.parentNode.removeChild(row)}}leftTopCell.rowSpan=1}this.update()},insertRow:function(rowIndex,sourceCell){var numCols=this.colsNum,table=this.table,row=table.insertRow(rowIndex),cell,thead=null,isInsertTitle=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(colIndex,cell,tableRow){if(colIndex==0){var tr=tableRow.nextSibling||tableRow.previousSibling,th=tr.cells[colIndex];if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}if(rowIndex==0||rowIndex==this.rowsNum){for(var colIndex=0;colIndex<numCols;colIndex++){cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));row.appendChild(cell);if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}if(isInsertTitle){thead=table.createTHead();thead.insertBefore(row,thead.firstChild)}}else{var infoRow=this.indexTable[rowIndex],cellIndex=0;for(colIndex=0;colIndex<numCols;colIndex++){var cellInfo=infoRow[colIndex];if(cellInfo.rowIndex<rowIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+1}else{cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);row.appendChild(cell)}if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}}this.update();return row},deleteRow:function(rowIndex){var row=this.table.rows[rowIndex],infoRow=this.indexTable[rowIndex],colsNum=this.colsNum,count=0;for(var colIndex=0;colIndex<colsNum;){var cellInfo=infoRow[colIndex],cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(cell.rowSpan>1){if(cellInfo.rowIndex==rowIndex){var clone=cell.cloneNode(true);clone.rowSpan=cell.rowSpan-1;clone.innerHTML=\"\";cell.rowSpan=1;var nextRowIndex=rowIndex+1,nextRow=this.table.rows[nextRowIndex],insertCellIndex,preMerged=this.getPreviewMergedCellsNum(nextRowIndex,colIndex)-count;if(preMerged<colIndex){insertCellIndex=colIndex-preMerged-1;domUtils.insertAfter(nextRow.cells[insertCellIndex],clone)}else{if(nextRow.cells.length)nextRow.insertBefore(clone,nextRow.cells[0])}count+=1}}colIndex+=cell.colSpan||1}var deleteTds=[],cacheMap={};for(colIndex=0;colIndex<colsNum;colIndex++){var tmpRowIndex=infoRow[colIndex].rowIndex,tmpCellIndex=infoRow[colIndex].cellIndex,key=tmpRowIndex+\"_\"+tmpCellIndex;if(cacheMap[key])continue;cacheMap[key]=1;cell=this.getCell(tmpRowIndex,tmpCellIndex);deleteTds.push(cell)}var mergeTds=[];utils.each(deleteTds,function(td){if(td.rowSpan==1){td.parentNode.removeChild(td)}else{mergeTds.push(td)}});utils.each(mergeTds,function(td){td.rowSpan--});row.parentNode.removeChild(row);this.update()},insertCol:function(colIndex,sourceCell,defaultValue){var rowsNum=this.rowsNum,rowIndex=0,tableRow,cell,backWidth=parseInt((this.table.offsetWidth-(this.colsNum+1)*20-(this.colsNum+1))/(this.colsNum+1),10),isInsertTitleCol=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(rowIndex,cell,tableRow){if(rowIndex==0){var th=cell.nextSibling||cell.previousSibling;if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}var preCell;if(colIndex==0||colIndex==this.colsNum){for(;rowIndex<rowsNum;rowIndex++){tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[colIndex==0?colIndex:tableRow.cells.length];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));if(!colIndex){tableRow.insertBefore(cell,tableRow.cells[0])}else{domUtils.insertAfter(tableRow.cells[tableRow.cells.length-1],cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}else{for(;rowIndex<rowsNum;rowIndex++){var cellInfo=this.indexTable[rowIndex][colIndex];if(cellInfo.colIndex<colIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+1}else{tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[cellInfo.cellIndex];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));preCell?tableRow.insertBefore(cell,preCell):tableRow.appendChild(cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}this.update();this.updateWidth(backWidth,defaultValue||{tdPadding:10,tdBorder:1})},updateWidth:function(width,defaultValue){var table=this.table,tmpWidth=UETable.getWidth(table)-defaultValue.tdPadding*2-defaultValue.tdBorder+width;if(tmpWidth<table.ownerDocument.body.offsetWidth){table.setAttribute(\"width\",tmpWidth);return}var tds=domUtils.getElementsByTagName(this.table,\"td th\");utils.each(tds,function(td){td.setAttribute(\"width\",width)})},deleteCol:function(colIndex){var indexTable=this.indexTable,tableRows=this.table.rows,backTableWidth=this.table.getAttribute(\"width\"),backTdWidth=0,rowsNum=this.rowsNum,cacheMap={};for(var rowIndex=0;rowIndex<rowsNum;){var infoRow=indexTable[rowIndex],cellInfo=infoRow[colIndex],key=cellInfo.rowIndex+\"_\"+cellInfo.colIndex;if(cacheMap[key])continue;cacheMap[key]=1;var cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(!backTdWidth)backTdWidth=cell&&parseInt(cell.offsetWidth/cell.colSpan,10).toFixed(0);if(cell.colSpan>1){cell.colSpan--}else{tableRows[rowIndex].deleteCell(cellInfo.cellIndex)}rowIndex+=cellInfo.rowSpan||1}this.table.setAttribute(\"width\",backTableWidth-backTdWidth);this.update()},splitToCells:function(cell){var me=this,cells=this.splitToRows(cell);utils.each(cells,function(cell){me.splitToCols(cell)})},splitToRows:function(cell){var cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.rowSpan=1;results.push(cell);for(var i=rowIndex,endRow=rowIndex+cellInfo.rowSpan;i<endRow;i++){if(i==rowIndex)continue;var tableRow=this.table.rows[i],tmpCell=tableRow.insertCell(colIndex-this.getPreviewMergedCellsNum(i,colIndex));tmpCell.colSpan=cellInfo.colSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}results.push(tmpCell)}this.update();return results},getPreviewMergedCellsNum:function(rowIndex,colIndex){var indexRow=this.indexTable[rowIndex],num=0;for(var i=0;i<colIndex;){var colSpan=indexRow[i].colSpan,tmpRowIndex=indexRow[i].rowIndex;num+=colSpan-(tmpRowIndex==rowIndex?1:0);i+=colSpan}return num},splitToCols:function(cell){var backWidth=(cell.offsetWidth/cell.colSpan-22).toFixed(0),cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.colSpan=1;cell.setAttribute(\"width\",backWidth);results.push(cell);for(var j=colIndex,endCol=colIndex+cellInfo.colSpan;j<endCol;j++){if(j==colIndex)continue;var tableRow=this.table.rows[rowIndex],tmpCell=tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex+1);tmpCell.rowSpan=cellInfo.rowSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));tmpCell.setAttribute(\"width\",backWidth);if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}if(cell.tagName==\"TH\"){var th=cell.ownerDocument.createElement(\"th\");th.appendChild(tmpCell.firstChild);th.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));th.rowSpan=tmpCell.rowSpan;tableRow.insertBefore(th,tmpCell);domUtils.remove(tmpCell)}results.push(tmpCell)}this.update();return results},isLastCell:function(cell,rowsNum,colsNum){rowsNum=rowsNum||this.rowsNum;colsNum=colsNum||this.colsNum;var cellInfo=this.getCellInfo(cell);return cellInfo.rowIndex+cellInfo.rowSpan==rowsNum&&cellInfo.colIndex+cellInfo.colSpan==colsNum},getLastCell:function(cells){cells=cells||this.table.getElementsByTagName(\"td\");var firstInfo=this.getCellInfo(cells[0]);var me=this,last=cells[0],tr=last.parentNode,cellsNum=0,cols=0,rows;utils.each(cells,function(cell){if(cell.parentNode==tr)cols+=cell.colSpan||1;cellsNum+=cell.rowSpan*cell.colSpan||1});rows=cellsNum/cols;utils.each(cells,function(cell){if(me.isLastCell(cell,rows,cols)){last=cell;return false}});return last},selectRow:function(rowIndex){var indexRow=this.indexTable[rowIndex],start=this.getCell(indexRow[0].rowIndex,indexRow[0].cellIndex),end=this.getCell(indexRow[this.colsNum-1].rowIndex,indexRow[this.colsNum-1].cellIndex),range=this.getCellsRange(start,end);this.setSelected(range)},selectTable:function(){var tds=this.table.getElementsByTagName(\"td\"),range=this.getCellsRange(tds[0],tds[tds.length-1]);this.setSelected(range)},setBackground:function(cells,value){if(typeof value===\"string\"){utils.each(cells,function(cell){cell.style.backgroundColor=value})}else if(typeof value===\"object\"){value=utils.extend({repeat:true,colorList:[\"#ddd\",\"#fff\"]},value);var rowIndex=this.getCellInfo(cells[0]).rowIndex,count=0,colors=value.colorList,getColor=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0,cell;cell=cells[i++];){var cellInfo=this.getCellInfo(cell);cell.style.backgroundColor=getColor(colors,rowIndex+count==cellInfo.rowIndex?count:++count,value.repeat)}}},removeBackground:function(cells){utils.each(cells,function(cell){cell.style.backgroundColor=\"\"})}};function showError(e){}})();(function(){var UT=UE.UETable,getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)};UE.commands[\"inserttable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?-1:0},execCommand:function(cmd,opt){function createTable(opt,tdWidth){var html=[],rowsNum=opt.numRows,colsNum=opt.numCols;for(var r=0;r<rowsNum;r++){html.push(\"<tr\"+(r==0?' class=\"firstRow\"':\"\")+\">\");for(var c=0;c<colsNum;c++){html.push('<td width=\"'+tdWidth+'\"  vAlign=\"'+opt.tdvalign+'\" >'+(browser.ie&&browser.version<11?domUtils.fillChar:\"<br/>\")+\"</td>\")}html.push(\"</tr>\")}return\"<table><tbody>\"+html.join(\"\")+\"</tbody></table>\"}if(!opt){opt=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign})}var me=this;var range=this.selection.getRange(),start=range.startContainer,firstParentBlock=domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)},true)||me.body;var defaultValue=getDefaultValue(me),tableWidth=firstParentBlock.offsetWidth,tdWidth=Math.floor(tableWidth/opt.numCols-defaultValue.tdPadding*2-defaultValue.tdBorder);!opt.tdvalign&&(opt.tdvalign=me.options.tdvalign);me.execCommand(\"inserthtml\",createTable(opt,tdWidth))}};UE.commands[\"insertparagraphbeforetable\"]={queryCommandState:function(){return getTableItemsByRange(this).cell?0:-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var p=this.document.createElement(\"p\");p.innerHTML=browser.ie?\"&nbsp;\":\"<br />\";table.parentNode.insertBefore(p,table);this.selection.getRange().setStart(p,0).setCursor()}}};UE.commands[\"deletetable\"]={queryCommandState:function(){var rng=this.selection.getRange();return domUtils.findParentByTagName(rng.startContainer,\"table\",true)?0:-1},execCommand:function(cmd,table){var rng=this.selection.getRange();table=table||domUtils.findParentByTagName(rng.startContainer,\"table\",true);if(table){var next=table.nextSibling;if(!next){next=domUtils.createElement(this.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});table.parentNode.insertBefore(next,table)}domUtils.remove(table);rng=this.selection.getRange();if(next.nodeType==3){rng.setStartBefore(next)}else{rng.setStart(next,0)}rng.setCursor(false,true);this.fireEvent(\"tablehasdeleted\")}}};UE.commands[\"cellalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,align){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"align\",align)}}}};UE.commands[\"cellvalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,valign){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"vAlign\",valign)}}}};UE.commands[\"insertcaption\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){return table.getElementsByTagName(\"caption\").length==0?1:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var caption=this.document.createElement(\"caption\");caption.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\";table.insertBefore(caption,table.firstChild);var range=this.selection.getRange();range.setStart(caption,0).setCursor()}}};UE.commands[\"deletecaption\"]={queryCommandState:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){return table.getElementsByTagName(\"caption\").length==0?-1:1}return-1},execCommand:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){domUtils.remove(table.getElementsByTagName(\"caption\")[0]);var range=this.selection.getRange();range.setStart(table.rows[0].cells[0],0).setCursor()}}};UE.commands[\"inserttitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()!=\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertRow(0,\"th\")}var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()==\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){domUtils.remove(table.rows[0])}var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"inserttitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?-1:0}return-1},execCommand:function(cmd){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertCol(0,\"th\")}resetTdWidth(table,this);var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){for(var i=0;i<table.rows.length;i++){domUtils.remove(table.rows[i].children[0])}}resetTdWidth(table,this);var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"mergeright\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan;if(rightColIndex>=ut.colsNum)return-1;var rightCellInfo=ut.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex];if(!rightCell||cell.tagName!=rightCell.tagName)return-1;return rightCellInfo.rowIndex==cellInfo.rowIndex&&rightCellInfo.rowSpan==cellInfo.rowSpan?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeRight(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergedown\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan;if(downRowIndex>=ut.rowsNum)return-1;var downCellInfo=ut.indexTable[downRowIndex][cellInfo.colIndex],downCell=table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex];if(!downCell||cell.tagName!=downCell.tagName)return-1;return downCellInfo.colIndex==cellInfo.colIndex&&downCellInfo.colSpan==cellInfo.colSpan?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeDown(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergecells\"]={queryCommandState:function(){return getUETableBySelected(this)?0:-1},execCommand:function(){var ut=getUETableBySelected(this);if(ut&&ut.selectedTds.length){var cell=ut.selectedTds[0];ut.mergeRange();var rng=this.selection.getRange();if(domUtils.isEmptyBlock(cell)){rng.setStart(cell,0).collapse(true)}else{rng.selectNodeContents(cell)}rng.select()}}};UE.commands[\"insertrow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&tableItems.tr!==tableItems.table.rows[0])&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.beginRowIndex,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertrownext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&cell.tagName==\"TD\"&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex+cellInfo.rowSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.endRowIndex+1,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"deleterow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellsRange=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getVSideCell(cell),nextCell=ut.getVSideCell(cell,true),rng=this.selection.getRange();if(utils.isEmptyObject(cellsRange)){ut.deleteRow(cellInfo.rowIndex)}else{for(var i=cellsRange.beginRowIndex;i<cellsRange.endRowIndex+1;i++){ut.deleteRow(cellsRange.beginRowIndex)}}var table=ut.table;if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(cellInfo.rowSpan==1||cellInfo.rowSpan==cellsRange.endRowIndex-cellsRange.beginRowIndex+1){if(nextCell||preCell)rng.selectNodeContents(nextCell||preCell).setCursor(false,true)}else{var newCell=ut.getCell(cellInfo.rowIndex,ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex);if(newCell)rng.selectNodeContents(newCell).setCursor(false,true)}}if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertcol\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&cell!==tableItems.tr.cells[0])&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);if(this.queryCommandState(cmd)==-1)return;var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.beginColIndex,cell)}}rng.moveToBookmark(bk).select(true)}};UE.commands[\"insertcolnext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex+cellInfo.colSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.endColIndex+1,cell)}}rng.moveToBookmark(bk).select()}};UE.commands[\"deletecol\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),range=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getHSideCell(cell),nextCell=ut.getHSideCell(cell,true);if(utils.isEmptyObject(range)){ut.deleteCol(cellInfo.colIndex)}else{for(var i=range.beginColIndex;i<range.endColIndex+1;i++){ut.deleteCol(range.beginColIndex)}}var table=ut.table,rng=this.selection.getRange();if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(domUtils.inDoc(cell,this.document)){rng.setStart(cell,0).setCursor(false,true)}else{if(nextCell&&domUtils.inDoc(nextCell,this.document)){rng.selectNodeContents(nextCell).setCursor(false,true)}else{if(preCell&&domUtils.inDoc(preCell,this.document)){rng.selectNodeContents(preCell).setCursor(true,true)}}}}}};UE.commands[\"splittocells\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&(cell.colSpan>1||cell.rowSpan>1)?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCells(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittorows\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.rowSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToRows(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittocols\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.colSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCols(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"adaptbytext\"]=UE.commands[\"adaptbywindow\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table;if(table){if(cmd==\"adaptbywindow\"){resetTdWidth(table,this)}else{var cells=domUtils.getElementsByTagName(table,\"td th\");utils.each(cells,function(cell){cell.removeAttribute(\"width\")});table.removeAttribute(\"width\")}}}};UE.commands[\"averagedistributecol\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageWidth(){var tb=ut.table,averageWidth,sumWidth=0,colsNum=0,tbAttr=getDefaultValue(me,tb);if(ut.isFullRow()){sumWidth=tb.offsetWidth;colsNum=ut.colsNum}else{var begin=ut.cellsRange.beginColIndex,end=ut.cellsRange.endColIndex,node;for(var i=begin;i<=end;){node=ut.selectedTds[i];sumWidth+=node.offsetWidth;i+=node.colSpan;colsNum+=1}}averageWidth=Math.ceil(sumWidth/colsNum)-tbAttr.tdBorder*2-tbAttr.tdPadding*2;return averageWidth}function setAverageWidth(averageWidth){utils.each(domUtils.getElementsByTagName(ut.table,\"th\"),function(node){node.setAttribute(\"width\",\"\")});var cells=ut.isFullRow()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.colSpan==1){node.setAttribute(\"width\",averageWidth)}})}if(ut&&ut.selectedTds.length){setAverageWidth(getAverageWidth())}}};UE.commands[\"averagedistributerow\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;if(ut.selectedTds&&/th/gi.test(ut.selectedTds[0].tagName))return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageHeight(){var averageHeight,rowNum,sumHeight=0,tb=ut.table,tbAttr=getDefaultValue(me,tb),tdpadding=parseInt(domUtils.getComputedStyle(tb.getElementsByTagName(\"td\")[0],\"padding-top\"));if(ut.isFullCol()){var captionArr=domUtils.getElementsByTagName(tb,\"caption\"),thArr=domUtils.getElementsByTagName(tb,\"th\"),captionHeight,thHeight;if(captionArr.length>0){captionHeight=captionArr[0].offsetHeight}if(thArr.length>0){thHeight=thArr[0].offsetHeight}sumHeight=tb.offsetHeight-(captionHeight||0)-(thHeight||0);rowNum=thArr.length==0?ut.rowsNum:ut.rowsNum-1}else{var begin=ut.cellsRange.beginRowIndex,end=ut.cellsRange.endRowIndex,count=0,trs=domUtils.getElementsByTagName(tb,\"tr\");for(var i=begin;i<=end;i++){sumHeight+=trs[i].offsetHeight;count+=1}rowNum=count}if(browser.ie&&browser.version<9){averageHeight=Math.ceil(sumHeight/rowNum)}else{averageHeight=Math.ceil(sumHeight/rowNum)-tbAttr.tdBorder*2-tdpadding*2}return averageHeight}function setAverageHeight(averageHeight){var cells=ut.isFullCol()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.rowSpan==1){node.setAttribute(\"height\",averageHeight)}})}if(ut&&ut.selectedTds.length){setAverageHeight(getAverageHeight())}}};UE.commands[\"cellalignment\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,data){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(!/caption/gi.test(cell.tagName)){domUtils.setAttributes(cell,data)}else{cell.style.textAlign=data.align;cell.style.verticalAlign=data.vAlign}me.selection.getRange().setCursor(true)}else{utils.each(ut.selectedTds,function(cell){domUtils.setAttributes(cell,data)})}},queryCommandValue:function(cmd){var activeMenuCell=getTableItemsByRange(this).cell;if(!activeMenuCell){activeMenuCell=getSelectedArr(this)[0]}if(!activeMenuCell){return null}else{var cells=UE.UETable.getUETable(activeMenuCell).selectedTds;!cells.length&&(cells=activeMenuCell);return UE.UETable.getTableCellAlignState(cells)}}};UE.commands[\"tablealignment\"]={queryCommandState:function(){if(browser.ie&&browser.version<8){return-1}return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,value){var me=this,start=me.selection.getStart(),table=start&&domUtils.findParentByTagName(start,[\"table\"],true);if(table){table.setAttribute(\"align\",value)}}};UE.commands[\"edittable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,color){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var arr=domUtils.getElementsByTagName(table,\"td\").concat(domUtils.getElementsByTagName(table,\"th\"),domUtils.getElementsByTagName(table,\"caption\"));utils.each(arr,function(node){node.style.borderColor=color})}}};UE.commands[\"edittd\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,bkColor){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(cell){cell.style.backgroundColor=bkColor}}else{utils.each(ut.selectedTds,function(cell){cell.style.backgroundColor=bkColor})}}};UE.commands[\"settablebackground\"]={queryCommandState:function(){return getSelectedArr(this).length>1?0:-1},execCommand:function(cmd,value){var cells,ut;cells=getSelectedArr(this);ut=getUETable(cells[0]);ut.setBackground(cells,value)}};UE.commands[\"cleartablebackground\"]={queryCommandState:function(){var cells=getSelectedArr(this);if(!cells.length)return-1;for(var i=0,cell;cell=cells[i++];){if(cell.style.backgroundColor!==\"\")return 0}return-1},execCommand:function(){var cells=getSelectedArr(this),ut=getUETable(cells[0]);ut.removeBackground(cells)}};UE.commands[\"interlacetable\"]=UE.commands[\"uninterlacetable\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;var interlaced=table.getAttribute(\"interlaced\");if(cmd==\"interlacetable\"){return interlaced===\"enabled\"?-1:0}else{return!interlaced||interlaced===\"disabled\"?-1:0}},execCommand:function(cmd,classList){var table=getTableItemsByRange(this).table;if(cmd==\"interlacetable\"){table.setAttribute(\"interlaced\",\"enabled\");this.fireEvent(\"interlacetable\",table,classList)}else{table.setAttribute(\"interlaced\",\"disabled\");this.fireEvent(\"uninterlacetable\",table)}}};UE.commands[\"setbordervisible\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;return 0},execCommand:function(){var table=getTableItemsByRange(this).table;utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){td.style.borderWidth=\"1px\";td.style.borderStyle=\"solid\"})}};function resetTdWidth(table,editor){var tds=domUtils.getElementsByTagName(table,\"td th\");utils.each(tds,function(td){td.removeAttribute(\"width\")});table.setAttribute(\"width\",getTableWidth(editor,true,getDefaultValue(editor,table)));var tdsWidths=[];setTimeout(function(){utils.each(tds,function(td){td.colSpan==1&&tdsWidths.push(td.offsetWidth)});utils.each(tds,function(td,i){td.colSpan==1&&td.setAttribute(\"width\",tdsWidths[i]+\"\")})},0)}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getSelectedArr(editor){var cell=getTableItemsByRange(editor).cell;if(cell){var ut=getUETable(cell);return ut.selectedTds.length?ut.selectedTds:[cell]}else{return[]}}})();UE.plugins[\"table\"]=function(){var me=this,tabTimer=null,tableDragTimer=null,tableResizeTimer=null,cellMinWidth=5,isInResizeBuffer=false,cellBorderWidth=5,offsetOfTableCell=10,singleClickState=0,userActionStatus=null,dblclickTime=200,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},removeSelectedClass=function(cells){return UT.removeSelectedClass(cells)};function showError(e){}me.ready(function(){var me=this;var orgGetText=me.selection.getText;me.selection.getText=function(){var table=getUETableBySelected(me);if(table){var str=\"\";utils.each(table.selectedTds,function(td){str+=td[browser.ie?\"innerText\":\"textContent\"]});return str}else{return orgGetText.call(me.selection)}}});var startTd=null,currentTd=null,onDrag=\"\",onBorder=false,dragButton=null,dragOver=false,dragLine=null,dragTd=null;var mousedown=false,needIEHack=true;me.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:\"top\",cursorpath:me.options.UEDITOR_HOME_URL+\"themes/default/images/cursor_\",tableDragable:false,classList:[\"ue-table-interlace-color-single\",\"ue-table-interlace-color-double\"]});me.getUETable=getUETable;var commands={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};me.ready(function(){utils.cssRule(\"table\",\".selectTdClass{background-color:#edf5fa !important}\"+\"table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}\"+\"table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+\"td,th{padding: 5px 10px;border: 1px solid #DDD;}\"+\"caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+\"th{border-top:1px solid #BBB;background-color:#F7F7F7;}\"+\"table tr.firstRow th{border-top-width:2px;}\"+\".ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }\"+\"td p{margin:0;padding:0;}\",me.document);var tableCopyList,isFullCol,isFullRow;me.addListener(\"keydown\",function(cmd,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8){var ut=getUETableBySelected(me);if(ut&&ut.selectedTds.length){if(ut.isFullCol()){me.execCommand(\"deletecol\")}else if(ut.isFullRow()){me.execCommand(\"deleterow\")}else{me.fireEvent(\"delcells\")}domUtils.preventDefault(evt)}var caption=domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true),range=me.selection.getRange();if(range.collapsed&&caption&&isEmptyBlock(caption)){me.fireEvent(\"saveScene\");var table=caption.parentNode;domUtils.remove(caption);if(table){range.setStart(table.rows[0].cells[0],0).setCursor(false,true)}me.fireEvent(\"saveScene\")}}if(keyCode==46){ut=getUETableBySelected(me);if(ut){me.fireEvent(\"saveScene\");for(var i=0,ci;ci=ut.selectedTds[i++];){domUtils.fillNode(me.document,ci)}me.fireEvent(\"saveScene\");domUtils.preventDefault(evt)}}if(keyCode==13){var rng=me.selection.getRange(),caption=domUtils.findParentByTagName(rng.startContainer,\"caption\",true);if(caption){var table=domUtils.findParentByTagName(caption,\"table\");if(!rng.collapsed){rng.deleteContents();me.fireEvent(\"saveScene\")}else{if(caption){rng.setStart(table.rows[0].cells[0],0).setCursor(false,true)}}domUtils.preventDefault(evt);return}if(rng.collapsed){var table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var cell=table.rows[0].cells[0],start=domUtils.findParentByTagName(me.selection.getStart(),[\"td\",\"th\"],true),preNode=table.previousSibling;if(cell===start&&(!preNode||preNode.nodeType==1&&preNode.tagName==\"TABLE\")&&domUtils.isStartInblock(rng)){var first=domUtils.findParent(me.selection.getStart(),function(n){return domUtils.isBlockElm(n)},true);if(first&&(/t(h|d)/i.test(first.tagName)||first===start.firstChild)){me.execCommand(\"insertparagraphbeforetable\");domUtils.preventDefault(evt)}}}}}if((evt.ctrlKey||evt.metaKey)&&evt.keyCode==\"67\"){tableCopyList=null;var ut=getUETableBySelected(me);if(ut){var tds=ut.selectedTds;isFullCol=ut.isFullCol();isFullRow=ut.isFullRow();tableCopyList=[[ut.cloneCell(tds[0],null,true)]];for(var i=1,ci;ci=tds[i];i++){if(ci.parentNode!==tds[i-1].parentNode){tableCopyList.push([ut.cloneCell(ci,null,true)])}else{tableCopyList[tableCopyList.length-1].push(ut.cloneCell(ci,null,true))}}}}});me.addListener(\"tablehasdeleted\",function(){toggleDraggableState(this,false,\"\",null);if(dragButton)domUtils.remove(dragButton)});me.addListener(\"beforepaste\",function(cmd,html){var me=this;var rng=me.selection.getRange();if(domUtils.findParentByTagName(rng.startContainer,\"caption\",true)){var div=me.document.createElement(\"div\");div.innerHTML=html.html;html.html=div[browser.ie9below?\"innerText\":\"textContent\"];return}var table=getUETableBySelected(me);if(tableCopyList){me.fireEvent(\"saveScene\");var rng=me.selection.getRange();var td=domUtils.findParentByTagName(rng.startContainer,[\"td\",\"th\"],true),tmpNode,preNode;if(td){var ut=getUETable(td);if(isFullRow){var rowIndex=ut.getCellInfo(td).rowIndex;if(td.tagName==\"TH\"){rowIndex++}for(var i=0,ci;ci=tableCopyList[i++];){var tr=ut.insertRow(rowIndex++,\"td\");for(var j=0,cj;cj=ci[j];j++){var cell=tr.cells[j];if(!cell){cell=tr.insertCell(j)}cell.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&cell.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&cell.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(cell.style.cssText=cj.style.cssText)}for(var j=0,cj;cj=tr.cells[j];j++){if(!ci[j])break;cj.innerHTML=ci[j].innerHTML;ci[j].getAttribute(\"width\")&&cj.setAttribute(\"width\",ci[j].getAttribute(\"width\"));ci[j].getAttribute(\"vAlign\")&&cj.setAttribute(\"vAlign\",ci[j].getAttribute(\"vAlign\"));ci[j].getAttribute(\"align\")&&cj.setAttribute(\"align\",ci[j].getAttribute(\"align\"));ci[j].style.cssText&&(cj.style.cssText=ci[j].style.cssText)}}}else{if(isFullCol){cellInfo=ut.getCellInfo(td);var maxColNum=0;for(var j=0,ci=tableCopyList[0],cj;cj=ci[j++];){maxColNum+=cj.colSpan||1}me.__hasEnterExecCommand=true;for(i=0;i<maxColNum;i++){me.execCommand(\"insertcol\")}me.__hasEnterExecCommand=false;td=ut.table.rows[0].cells[cellInfo.cellIndex];if(td.tagName==\"TH\"){td=ut.table.rows[1].cells[cellInfo.cellIndex]}}for(var i=0,ci;ci=tableCopyList[i++];){tmpNode=td;for(var j=0,cj;cj=ci[j++];){if(td){td.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&td.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&td.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&td.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(td.style.cssText=cj.style.cssText);preNode=td;td=td.nextSibling}else{var cloneTd=cj.cloneNode(true);domUtils.removeAttributes(cloneTd,[\"class\",\"rowSpan\",\"colSpan\"]);preNode.parentNode.appendChild(cloneTd)}}td=ut.getNextCell(tmpNode,true,true);if(!tableCopyList[i])break;if(!td){var cellInfo=ut.getCellInfo(tmpNode);ut.table.insertRow(ut.table.rows.length);ut.update();td=ut.getVSideCell(tmpNode,true)}}}ut.update()}else{table=me.document.createElement(\"table\");for(var i=0,ci;ci=tableCopyList[i++];){var tr=table.insertRow(table.rows.length);for(var j=0,cj;cj=ci[j++];){cloneTd=UT.cloneCell(cj,null,true);domUtils.removeAttributes(cloneTd,[\"class\"]);tr.appendChild(cloneTd)}if(j==2&&cloneTd.rowSpan>1){cloneTd.rowSpan=1}}var defaultValue=getDefaultValue(me),width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0);me.execCommand(\"insertHTML\",\"<table  \"+(isFullCol&&isFullRow?'width=\"'+width+'\"':\"\")+\">\"+table.innerHTML.replace(/>\\s*</g,\"><\").replace(/\\bth\\b/gi,\"td\")+\"</table>\")}me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");html.html=\"\";return true}else{var div=me.document.createElement(\"div\"),tables;div.innerHTML=html.html;tables=div.getElementsByTagName(\"table\");if(domUtils.findParentByTagName(me.selection.getStart(),\"table\")){utils.each(tables,function(t){domUtils.remove(t)});if(domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true)){div.innerHTML=div[browser.ie?\"innerText\":\"textContent\"]}}else{utils.each(tables,function(table){removeStyleSize(table,true);domUtils.removeAttributes(table,[\"style\",\"border\"]);utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){if(isEmptyBlock(td)){domUtils.fillNode(me.document,td)}removeStyleSize(td,true)})})}html.html=div.innerHTML}});me.addListener(\"afterpaste\",function(){utils.each(domUtils.getElementsByTagName(me.body,\"table\"),function(table){if(table.offsetWidth>me.body.offsetWidth){var defaultValue=getDefaultValue(me,table);table.style.width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0)+\"px\"}})});me.addListener(\"blur\",function(){tableCopyList=null});var timer;me.addListener(\"keydown\",function(){clearTimeout(timer);timer=setTimeout(function(){var rng=me.selection.getRange(),cell=domUtils.findParentByTagName(rng.startContainer,[\"th\",\"td\"],true);if(cell){var table=cell.parentNode.parentNode.parentNode;if(table.offsetWidth>table.getAttribute(\"width\")){cell.style.wordBreak=\"break-all\"}}},100)});me.addListener(\"selectionchange\",function(){toggleDraggableState(me,false,\"\",null)});me.addListener(\"contentchange\",function(){var me=this;hideDragLine(me);if(getUETableBySelected(me))return;var rng=me.selection.getRange();var start=rng.startContainer;start=domUtils.findParentByTagName(start,[\"td\",\"th\"],true);utils.each(domUtils.getElementsByTagName(me.document,\"table\"),function(table){if(me.fireEvent(\"excludetable\",table)===true)return;table.ueTable=new UT(table);table.onmouseover=function(){me.fireEvent(\"tablemouseover\",table)};table.onmousemove=function(){me.fireEvent(\"tablemousemove\",table);me.options.tableDragable&&toggleDragButton(true,this,me);utils.defer(function(){me.fireEvent(\"contentchange\",50)},true)};table.onmouseout=function(){me.fireEvent(\"tablemouseout\",table);toggleDraggableState(me,false,\"\",null);hideDragLine(me)};table.onclick=function(evt){evt=me.window.event||evt;var target=getParentTdOrTh(evt.target||evt.srcElement);if(!target)return;var ut=getUETable(target),table=ut.table,cellInfo=ut.getCellInfo(target),cellsRange,rng=me.selection.getRange();if(inTableSide(table,target,evt,true)){var endTdCol=ut.getCell(ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].rowIndex,ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdCol){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}else{if(target!==endTdCol){cellsRange=ut.getCellsRange(target,endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}return}if(inTableSide(table,target,evt)){var endTdRow=ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].rowIndex,ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdRow){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}else{if(target!==endTdRow){cellsRange=ut.getCellsRange(target,endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}}}});switchBorderColor(me,true)});domUtils.on(me.document,\"mousemove\",mouseMoveEvent);domUtils.on(me.document,\"mouseout\",function(evt){var target=evt.target||evt.srcElement;if(target.tagName==\"TABLE\"){toggleDraggableState(me,false,\"\",null)}});me.addListener(\"interlacetable\",function(type,table,classList){if(!table)return;var me=this,rows=table.rows,len=rows.length,getClass=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0;i<len;i++){rows[i].className=getClass(classList||me.options.classList,i,true)}});me.addListener(\"uninterlacetable\",function(type,table){if(!table)return;var me=this,rows=table.rows,classList=me.options.classList,len=rows.length;for(var i=0;i<len;i++){domUtils.removeClasses(rows[i],classList)}});me.addListener(\"mousedown\",mouseDownEvent);me.addListener(\"mouseup\",mouseUpEvent);domUtils.on(me.body,\"dragstart\",function(evt){mouseUpEvent.call(me,\"dragstart\",evt)});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"div\"),function(n){if(n.getAttr(\"id\")==\"ue_tableDragLine\"){n.parentNode.removeChild(n)}})});var currentRowIndex=0;me.addListener(\"mousedown\",function(){currentRowIndex=0});me.addListener(\"tabkeydown\",function(){var range=this.selection.getRange(),common=range.getCommonAncestor(true,true),table=domUtils.findParentByTagName(common,\"table\");if(table){if(domUtils.findParentByTagName(common,\"caption\",true)){var cell=domUtils.getElementsByTagName(table,\"th td\");if(cell&&cell.length){range.setStart(cell[0],0).setCursor(false,true)}}else{var cell=domUtils.findParentByTagName(common,[\"td\",\"th\"],true),ua=getUETable(cell);currentRowIndex=cell.rowSpan>1?currentRowIndex:ua.getCellInfo(cell).rowIndex;var nextCell=ua.getTabNextCell(cell,currentRowIndex);if(nextCell){if(isEmptyBlock(nextCell)){range.setStart(nextCell,0).setCursor(false,true)}else{range.selectNodeContents(nextCell).select()}}else{me.fireEvent(\"saveScene\");me.__hasEnterExecCommand=true;this.execCommand(\"insertrownext\");me.__hasEnterExecCommand=false;range=this.selection.getRange();range.setStart(table.rows[table.rows.length-1].cells[0],0).setCursor();me.fireEvent(\"saveScene\")}}return true}});browser.ie&&me.addListener(\"selectionchange\",function(){toggleDraggableState(this,false,\"\",null)});me.addListener(\"keydown\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8||keyCode==46){return}var notCtrlKey=!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey;notCtrlKey&&removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td\"));var ut=getUETableBySelected(me);if(!ut)return;notCtrlKey&&ut.clearSelected()});me.addListener(\"beforegetcontent\",function(){switchBorderColor(this,false);browser.ie&&utils.each(this.document.getElementsByTagName(\"caption\"),function(ci){if(domUtils.isEmptyNode(ci)){ci.innerHTML=\"&nbsp;\"}})});me.addListener(\"aftergetcontent\",function(){switchBorderColor(this,true)});me.addListener(\"getAllHtml\",function(){removeSelectedClass(me.document.getElementsByTagName(\"td\"))});me.addListener(\"fullscreenchanged\",function(type,fullscreen){if(!fullscreen){var ratio=this.body.offsetWidth/document.body.offsetWidth,tables=domUtils.getElementsByTagName(this.body,\"table\");utils.each(tables,function(table){if(table.offsetWidth<me.body.offsetWidth)return false;var tds=domUtils.getElementsByTagName(table,\"td\"),backWidths=[];utils.each(tds,function(td){backWidths.push(td.offsetWidth)});for(var i=0,td;td=tds[i];i++){td.setAttribute(\"width\",Math.floor(backWidths[i]*ratio))}table.setAttribute(\"width\",Math.floor(getTableWidth(me,needIEHack,getDefaultValue(me))))})}});var oldExecCommand=me.execCommand;me.execCommand=function(cmd,datatat){var me=this,args=arguments;cmd=cmd.toLowerCase();var ut=getUETableBySelected(me),tds,range=new dom.Range(me.document),cmdFun=me.commands[cmd]||UE.commands[cmd],result;if(!cmdFun)return;if(ut&&!commands[cmd]&&!cmdFun.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;me.fireEvent(\"beforeexeccommand\",cmd);tds=ut.selectedTds;var lastState=-2,lastValue=-2,value,state;for(var i=0,td;td=tds[i];i++){if(isEmptyBlock(td)){range.setStart(td,0).setCursor(false,true)}else{range.selectNode(td).select(true)}state=me.queryCommandState(cmd);value=me.queryCommandValue(cmd);if(state!=-1){if(lastState!==state||lastValue!==value){me._ignoreContentChange=true;result=oldExecCommand.apply(me,arguments);me._ignoreContentChange=false}lastState=me.queryCommandState(cmd);lastValue=me.queryCommandValue(cmd);if(domUtils.isEmptyBlock(td)){domUtils.fillNode(me.document,td)}}}range.setStart(tds[0],0).shrinkBoundary(true).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"afterexeccommand\",cmd);me.__hasEnterExecCommand=false;me._selectionChange()}else{result=oldExecCommand.apply(me,arguments)}return result}});function removeStyleSize(obj,replaceToProperty){removeStyle(obj,\"width\",true);removeStyle(obj,\"height\",true)}function removeStyle(obj,styleName,replaceToProperty){if(obj.style[styleName]){replaceToProperty&&obj.setAttribute(styleName,parseInt(obj.style[styleName],10));obj.style[styleName]=\"\"}}function getParentTdOrTh(ele){if(ele.tagName==\"TD\"||ele.tagName==\"TH\")return ele;var td;if(td=domUtils.findParentByTagName(ele,\"td\",true)||domUtils.findParentByTagName(ele,\"th\",true))return td;return null}function isEmptyBlock(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1}function mouseCoords(evt){if(evt.pageX||evt.pageY){return{x:evt.pageX,y:evt.pageY}}return{x:evt.clientX+me.document.body.scrollLeft-me.document.body.clientLeft,y:evt.clientY+me.document.body.scrollTop-me.document.body.clientTop}}function mouseMoveEvent(evt){if(isEditorDisabled()){return}try{var target=getParentTdOrTh(evt.target||evt.srcElement),pos;if(isInResizeBuffer){me.body.style.webkitUserSelect=\"none\";if(Math.abs(userActionStatus.x-evt.clientX)>offsetOfTableCell||Math.abs(userActionStatus.y-evt.clientY)>offsetOfTableCell){clearTableDragTimer();isInResizeBuffer=false;singleClickState=0;tableBorderDrag(evt)}}if(onDrag&&dragTd){singleClickState=0;me.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();pos=mouseCoords(evt);toggleDraggableState(me,true,onDrag,pos,target);if(onDrag==\"h\"){dragLine.style.left=getPermissionX(dragTd,evt)+\"px\"}else if(onDrag==\"v\"){dragLine.style.top=getPermissionY(dragTd,evt)+\"px\"}return}if(target){if(me.fireEvent(\"excludetable\",target)===true)return;pos=mouseCoords(evt);var state=getRelation(target,pos),table=domUtils.findParentByTagName(target,\"table\",true);if(inTableSide(table,target,evt,true)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"h.png),pointer\"}else if(inTableSide(table,target,evt)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"v.png),pointer\"}else{me.body.style.cursor=\"text\";var curCell=target;if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");target=getUETable(target).getPreviewCell(target,state==\"v\")}toggleDraggableState(me,target?!!state:false,target?state:\"\",pos,target)}}else{toggleDragButton(false,table,me)}}catch(e){showError(e)}}var dragButtonTimer;function toggleDragButton(show,table,editor){if(!show){if(dragOver)return;dragButtonTimer=setTimeout(function(){!dragOver&&dragButton&&dragButton.parentNode&&dragButton.parentNode.removeChild(dragButton)},2e3)}else{createDragButton(table,editor)}}function createDragButton(table,editor){var pos=domUtils.getXY(table),doc=table.ownerDocument;if(dragButton&&dragButton.parentNode)return dragButton;dragButton=doc.createElement(\"div\");dragButton.contentEditable=false;dragButton.innerHTML=\"\";dragButton.style.cssText=\"width:15px;height:15px;background-image:url(\"+editor.options.UEDITOR_HOME_URL+\"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\"+(pos.y-15)+\"px;left:\"+pos.x+\"px;\";domUtils.unSelectable(dragButton);dragButton.onmouseover=function(evt){dragOver=true};dragButton.onmouseout=function(evt){dragOver=false};domUtils.on(dragButton,\"click\",function(type,evt){doClick(evt,this)});domUtils.on(dragButton,\"dblclick\",function(type,evt){doDblClick(evt)});domUtils.on(dragButton,\"dragstart\",function(type,evt){domUtils.preventDefault(evt)});var timer;function doClick(evt,button){clearTimeout(timer);timer=setTimeout(function(){editor.fireEvent(\"tableClicked\",table,button)},300)}function doDblClick(evt){clearTimeout(timer);var ut=getUETable(table),start=table.rows[0].cells[0],end=ut.getLastCell(),range=ut.getCellsRange(start,end);editor.selection.getRange().setStart(start,0).setCursor(false,true);ut.setSelected(range)}doc.body.appendChild(dragButton)}function inTableSide(table,cell,evt,top){var pos=mouseCoords(evt),state=getRelation(cell,pos);if(top){var caption=table.getElementsByTagName(\"caption\")[0],capHeight=caption?caption.offsetHeight:0;return state==\"v1\"&&pos.y-domUtils.getXY(table).y-capHeight<8}else{return state==\"h1\"&&pos.x-domUtils.getXY(table).x<8}}function getPermissionX(dragTd,evt){var ut=getUETable(dragTd);if(ut){var preTd=ut.getSameEndPosCells(dragTd,\"x\")[0],nextTd=ut.getSameStartPosXCells(dragTd)[0],mouseX=mouseCoords(evt).x,left=(preTd?domUtils.getXY(preTd).x:domUtils.getXY(ut.table).x)+20,right=nextTd?domUtils.getXY(nextTd).x+nextTd.offsetWidth-20:me.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(me.body,\"width\"),10);left+=cellMinWidth;right-=cellMinWidth;return mouseX<left?left:mouseX>right?right:mouseX}}function getPermissionY(dragTd,evt){try{var top=domUtils.getXY(dragTd).y,mousePosY=mouseCoords(evt).y;return mousePosY<top?top:mousePosY}catch(e){showError(e)}}function toggleDraggableState(editor,draggable,dir,mousePos,cell){try{editor.body.style.cursor=dir==\"h\"?\"col-resize\":dir==\"v\"?\"row-resize\":\"text\";if(browser.ie){if(dir&&!mousedown&&!getUETableBySelected(editor)){getDragLine(editor,editor.document);showDragLineAt(dir,cell)}else{hideDragLine(editor)}}onBorder=draggable}catch(e){showError(e)}}function getResizeLineByUETable(){var lineId=\"_UETableResizeLine\",line=this.document.getElementById(lineId);if(!line){line=this.document.createElement(\"div\");line.id=lineId;line.contnetEditable=false;line.setAttribute(\"unselectable\",\"on\");var styles={width:2*cellBorderWidth+1+\"px\",position:\"absolute\",\"z-index\":1e5,cursor:\"col-resize\",background:\"red\",display:\"none\"};line.onmouseout=function(){this.style.display=\"none\"};utils.extend(line.style,styles);this.document.body.appendChild(line)}return line}function updateResizeLine(cell,uetable){var line=getResizeLineByUETable.call(this),table=uetable.table,styles={top:domUtils.getXY(table).y+\"px\",left:domUtils.getXY(cell).x+cell.offsetWidth-cellBorderWidth+\"px\",display:\"block\",height:table.offsetHeight+\"px\"};utils.extend(line.style,styles)}function showResizeLine(cell){var uetable=getUETable(cell);updateResizeLine.call(this,cell,uetable)}function getRelation(ele,mousePos){var elePos=domUtils.getXY(ele);if(!elePos){return\"\"}if(elePos.x+ele.offsetWidth-mousePos.x<cellBorderWidth){return\"h\"}if(mousePos.x-elePos.x<cellBorderWidth){return\"h1\"}if(elePos.y+ele.offsetHeight-mousePos.y<cellBorderWidth){return\"v\"}if(mousePos.y-elePos.y<cellBorderWidth){return\"v1\"}return\"\"}function mouseDownEvent(type,evt){if(isEditorDisabled()){return}userActionStatus={x:evt.clientX,y:evt.clientY};if(evt.button==2){var ut=getUETableBySelected(me),flag=false;if(ut){var td=getTargetTd(me,evt);utils.each(ut.selectedTds,function(ti){if(ti===td){flag=true}});if(!flag){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"th td\"));ut.clearSelected()}else{td=ut.selectedTds[0];setTimeout(function(){me.selection.getRange().setStart(td,0).setCursor(false,true)},0)}}}else{tableClickHander(evt)}}function clearTableTimer(){tabTimer&&clearTimeout(tabTimer);tabTimer=null}function tableDbclickHandler(evt){singleClickState=0;evt=evt||me.window.event;var target=getParentTdOrTh(evt.target||evt.srcElement);if(target){var h;if(h=getRelation(target,mouseCoords(evt))){hideDragLine(me);if(h==\"h1\"){h=\"h\";if(inTableSide(domUtils.findParentByTagName(target,\"table\"),target,evt)){me.execCommand(\"adaptbywindow\")}else{target=getUETable(target).getPreviewCell(target);if(target){var rng=me.selection.getRange();rng.selectNodeContents(target).setCursor(true,true)}}}if(h==\"h\"){var ut=getUETable(target),table=ut.table,cells=getCellsByMoveBorder(target,table,true);cells=extractArray(cells,\"left\");ut.width=ut.offsetWidth;var oldWidth=[],newWidth=[];utils.each(cells,function(cell){oldWidth.push(cell.offsetWidth)});utils.each(cells,function(cell){cell.removeAttribute(\"width\")});window.setTimeout(function(){var changeable=true;utils.each(cells,function(cell,index){var width=cell.offsetWidth;if(width>oldWidth[index]){changeable=false;return false}newWidth.push(width)});var change=changeable?newWidth:oldWidth;utils.each(cells,function(cell,index){cell.width=change[index]-getTabcellSpace()})},0)}}}}function tableClickHander(evt){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td th\"));utils.each(me.document.getElementsByTagName(\"table\"),function(t){t.ueTable=null});startTd=getTargetTd(me,evt);if(!startTd)return;var table=domUtils.findParentByTagName(startTd,\"table\",true);ut=getUETable(table);ut&&ut.clearSelected();if(!onBorder){me.document.body.style.webkitUserSelect=\"\";mousedown=true;me.addListener(\"mouseover\",mouseOverEvent)}else{borderActionHandler(evt)}}function borderActionHandler(evt){if(browser.ie){evt=reconstruct(evt)}clearTableDragTimer();isInResizeBuffer=true;tableDragTimer=setTimeout(function(){tableBorderDrag(evt)},dblclickTime)}function extractArray(originArr,key){var result=[],tmp=null;for(var i=0,len=originArr.length;i<len;i++){tmp=originArr[i][key];if(tmp){result.push(tmp)}}return result}function clearTableDragTimer(){tableDragTimer&&clearTimeout(tableDragTimer);tableDragTimer=null}function reconstruct(obj){var attrs=[\"pageX\",\"pageY\",\"clientX\",\"clientY\",\"srcElement\",\"target\"],newObj={};if(obj){for(var i=0,key,val;key=attrs[i];i++){val=obj[key];val&&(newObj[key]=val)}}return newObj}function tableBorderDrag(evt){isInResizeBuffer=false;startTd=evt.target||evt.srcElement;if(!startTd)return;var state=getRelation(startTd,mouseCoords(evt));if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");startTd=getUETable(startTd).getPreviewCell(startTd,state==\"v\")}hideDragLine(me);getDragLine(me,me.document);me.fireEvent(\"saveScene\");showDragLineAt(state,startTd);mousedown=true;onDrag=state;dragTd=startTd}function mouseUpEvent(type,evt){if(isEditorDisabled()){return}clearTableDragTimer();isInResizeBuffer=false;if(onBorder){singleClickState=++singleClickState%3;userActionStatus={x:evt.clientX,y:evt.clientY};tableResizeTimer=setTimeout(function(){singleClickState>0&&singleClickState--},dblclickTime);if(singleClickState===2){singleClickState=0;tableDbclickHandler(evt);return}}if(evt.button==2)return;var me=this;var range=me.selection.getRange(),start=domUtils.findParentByTagName(range.startContainer,\"table\",true),end=domUtils.findParentByTagName(range.endContainer,\"table\",true);if(start||end){if(start===end){start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\",\"caption\"],true);end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\",\"caption\"],true);if(start!==end){me.selection.clearRange()}}else{me.selection.clearRange()}}mousedown=false;me.document.body.style.webkitUserSelect=\"\";if(onDrag&&dragTd){me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();singleClickState=0;dragLine=me.document.getElementById(\"ue_tableDragLine\");if(dragLine){var dragTdPos=domUtils.getXY(dragTd),dragLinePos=domUtils.getXY(dragLine);switch(onDrag){case\"h\":changeColWidth(dragTd,dragLinePos.x-dragTdPos.x);break;case\"v\":changeRowHeight(dragTd,dragLinePos.y-dragTdPos.y-dragTd.offsetHeight);break;default:}onDrag=\"\";dragTd=null;hideDragLine(me);me.fireEvent(\"saveScene\");return}}if(!startTd){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"td\",true);if(!target)target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"th\",true);if(target&&(target.tagName==\"TD\"||target.tagName==\"TH\")){if(me.fireEvent(\"excludetable\",target)===true)return;range=new dom.Range(me.document);range.setStart(target,0).setCursor(false,true)}}else{var ut=getUETable(startTd),cell=ut?ut.selectedTds[0]:null;if(cell){range=new dom.Range(me.document);if(domUtils.isEmptyBlock(cell)){range.setStart(cell,0).setCursor(false,true)}else{range.selectNodeContents(cell).shrinkBoundary().setCursor(false,true)}}else{range=me.selection.getRange().shrinkBoundary();if(!range.collapsed){var start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\"],true),end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\"],true);if(start&&!end||!start&&end||start&&end&&start!==end){range.setCursor(false,true)}}}startTd=null;me.removeListener(\"mouseover\",mouseOverEvent)}me._selectionChange(250,evt)}function mouseOverEvent(type,evt){if(isEditorDisabled()){return}var me=this,tar=evt.target||evt.srcElement;currentTd=domUtils.findParentByTagName(tar,\"td\",true)||domUtils.findParentByTagName(tar,\"th\",true);if(startTd&&currentTd&&(startTd.tagName==\"TD\"&&currentTd.tagName==\"TD\"||startTd.tagName==\"TH\"&&currentTd.tagName==\"TH\")&&domUtils.findParentByTagName(startTd,\"table\")==domUtils.findParentByTagName(currentTd,\"table\")){var ut=getUETable(currentTd);if(startTd!=currentTd){me.document.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();var range=ut.getCellsRange(startTd,currentTd);ut.setSelected(range)}else{me.document.body.style.webkitUserSelect=\"\";ut.clearSelected()}}evt.preventDefault?evt.preventDefault():evt.returnValue=false}function setCellHeight(cell,height,backHeight){var lineHight=parseInt(domUtils.getComputedStyle(cell,\"line-height\"),10),tmpHeight=backHeight+height;height=tmpHeight<lineHight?lineHight:tmpHeight;if(cell.style.height)cell.style.height=\"\";cell.rowSpan==1?cell.setAttribute(\"height\",height):cell.removeAttribute&&cell.removeAttribute(\"height\")}function getWidth(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)}function changeColWidth(cell,changeValue){var ut=getUETable(cell);if(ut){var table=ut.table,cells=getCellsByMoveBorder(cell,table);table.style.width=\"\";table.removeAttribute(\"width\");changeValue=correctChangeValue(changeValue,cell,cells);if(cell.nextSibling){var i=0;utils.each(cells,function(cellGroup){cellGroup.left.width=+cellGroup.left.width+changeValue;cellGroup.right&&(cellGroup.right.width=+cellGroup.right.width-changeValue)})}else{utils.each(cells,function(cellGroup){cellGroup.left.width-=-changeValue})}}}function isEditorDisabled(){return me.body.contentEditable===\"false\"}function changeRowHeight(td,changeValue){if(Math.abs(changeValue)<10)return;var ut=getUETable(td);if(ut){var cells=ut.getSameEndPosCells(td,\"y\"),backHeight=cells[0]?cells[0].offsetHeight:0;for(var i=0,cell;cell=cells[i++];){setCellHeight(cell,changeValue,backHeight)}}}function getCellsByMoveBorder(cell,table,isContainMergeCell){if(!table){table=domUtils.findParentByTagName(cell,\"table\")}if(!table){return null}var index=domUtils.getNodeIndex(cell),temp=cell,rows=table.rows,colIndex=0;while(temp){if(temp.nodeType===1){colIndex+=temp.colSpan||1}temp=temp.previousSibling}temp=null;var borderCells=[];utils.each(rows,function(tabRow){var cells=tabRow.cells,currIndex=0;utils.each(cells,function(tabCell){currIndex+=tabCell.colSpan||1;if(currIndex===colIndex){borderCells.push({left:tabCell,right:tabCell.nextSibling||null});return false}else if(currIndex>colIndex){if(isContainMergeCell){borderCells.push({left:tabCell})}return false}})});return borderCells}function getMinWidthByTableCells(cells){var minWidth=Number.MAX_VALUE;for(var i=0,curCell;curCell=cells[i];i++){minWidth=Math.min(minWidth,curCell.width||getTableCellWidth(curCell))}return minWidth}function correctChangeValue(changeValue,relatedCell,cells){changeValue-=getTabcellSpace();if(changeValue<0){return 0}changeValue-=getTableCellWidth(relatedCell);var direction=changeValue<0?\"left\":\"right\";changeValue=Math.abs(changeValue);utils.each(cells,function(cellGroup){var curCell=cellGroup[direction];if(curCell){changeValue=Math.min(changeValue,getTableCellWidth(curCell)-cellMinWidth)}});changeValue=changeValue<0?0:changeValue;return direction===\"left\"?-changeValue:changeValue}function getTableCellWidth(cell){var width=0,offset=0,width=cell.offsetWidth-getTabcellSpace();if(!cell.nextSibling){width-=getTableCellOffset(cell)}width=width<0?0:width;try{cell.width=width}catch(e){}return width}function getTableCellOffset(cell){tab=domUtils.findParentByTagName(cell,\"table\",false);if(tab.offsetVal===undefined){var prev=cell.previousSibling;if(prev){tab.offsetVal=cell.offsetWidth-prev.offsetWidth===UT.borderWidth?UT.borderWidth:0}else{tab.offsetVal=0}}return tab.offsetVal}function getTabcellSpace(){if(UT.tabcellSpace===undefined){var cell=null,tab=me.document.createElement(\"table\"),tbody=me.document.createElement(\"tbody\"),trow=me.document.createElement(\"tr\"),tabcell=me.document.createElement(\"td\"),mirror=null;tabcell.style.cssText=\"border: 0;\";tabcell.width=1;trow.appendChild(tabcell);trow.appendChild(mirror=tabcell.cloneNode(false));tbody.appendChild(trow);tab.appendChild(tbody);tab.style.cssText=\"visibility: hidden;\";me.body.appendChild(tab);UT.paddingSpace=tabcell.offsetWidth-1;var tmpTabWidth=tab.offsetWidth;tabcell.style.cssText=\"\";mirror.style.cssText=\"\";UT.borderWidth=(tab.offsetWidth-tmpTabWidth)/3;UT.tabcellSpace=UT.paddingSpace+UT.borderWidth;me.body.removeChild(tab)}getTabcellSpace=function(){return UT.tabcellSpace};return UT.tabcellSpace}function getDragLine(editor,doc){if(mousedown)return;dragLine=editor.document.createElement(\"div\");domUtils.setAttributes(dragLine,{id:\"ue_tableDragLine\",unselectable:\"on\",contenteditable:false,onresizestart:\"return false\",ondragstart:\"return false\",onselectstart:\"return false\",style:\"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"});editor.body.appendChild(dragLine)}function hideDragLine(editor){if(mousedown)return;var line;while(line=editor.document.getElementById(\"ue_tableDragLine\")){domUtils.remove(line)}}function showDragLineAt(state,cell){if(!cell)return;var table=domUtils.findParentByTagName(cell,\"table\"),caption=table.getElementsByTagName(\"caption\"),width=table.offsetWidth,height=table.offsetHeight-(caption.length>0?caption[0].offsetHeight:0),tablePos=domUtils.getXY(table),cellPos=domUtils.getXY(cell),css;switch(state){case\"h\":css=\"height:\"+height+\"px;top:\"+(tablePos.y+(caption.length>0?caption[0].offsetHeight:0))+\"px;left:\"+(cellPos.x+cell.offsetWidth);dragLine.style.cssText=css+\"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";break;case\"v\":css=\"width:\"+width+\"px;left:\"+tablePos.x+\"px;top:\"+(cellPos.y+cell.offsetHeight);dragLine.style.cssText=css+\"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\";break;default:}}function switchBorderColor(editor,flag){var tableArr=domUtils.getElementsByTagName(editor.body,\"table\"),color;for(var i=0,node;node=tableArr[i++];){var td=domUtils.getElementsByTagName(node,\"td\");if(td[0]){if(flag){color=td[0].style.borderColor.replace(/\\s/g,\"\");if(/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(color))domUtils.addClass(node,\"noBorderTable\")}else{domUtils.removeClasses(node,\"noBorderTable\")}}}}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getTargetTd(editor,evt){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,[\"td\",\"th\"],true),dir=null;if(!target){return null}dir=getRelation(target,mouseCoords(evt));if(!target){return null}if(dir===\"h1\"&&target.previousSibling){var position=domUtils.getXY(target),cellWidth=target.offsetWidth;if(Math.abs(position.x+cellWidth-evt.clientX)>cellWidth/3){target=target.previousSibling}}else if(dir===\"v1\"&&target.parentNode.previousSibling){var position=domUtils.getXY(target),cellHeight=target.offsetHeight;if(Math.abs(position.y+cellHeight-evt.clientY)>cellHeight/3){target=target.parentNode.previousSibling.firstChild}}return target&&!(editor.fireEvent(\"excludetable\",target)===true)?target:null}};UE.UETable.prototype.sortTable=function(sortByCellIndex,compareFn){var table=this.table,rows=table.rows,trArray=[],flag=rows[0].cells[0].tagName===\"TH\",lastRowIndex=0;if(this.selectedTds.length){var range=this.cellsRange,len=range.endRowIndex+1;for(var i=range.beginRowIndex;i<len;i++){trArray[i]=rows[i]}trArray.splice(0,range.beginRowIndex);lastRowIndex=range.endRowIndex+1===this.rowsNum?0:range.endRowIndex+1}else{for(var i=0,len=rows.length;i<len;i++){trArray[i]=rows[i]}}var Fn={reversecurrent:function(td1,td2){return 1},orderbyasc:function(td1,td2){var value1=td1.innerText||td1.textContent,value2=td2.innerText||td2.textContent;return value1.localeCompare(value2)},reversebyasc:function(td1,td2){var value1=td1.innerHTML,value2=td2.innerHTML;return value2.localeCompare(value1)},orderbynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value1||0)-(value2||0)},reversebynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value2||0)-(value1||0)}};table.setAttribute(\"data-sort-type\",compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]?compareFn:\"\");flag&&trArray.splice(0,1);trArray=utils.sort(trArray,function(tr1,tr2){var result;if(compareFn&&typeof compareFn===\"function\"){result=compareFn.call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else if(compareFn&&typeof compareFn===\"number\"){result=1}else if(compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]){result=Fn[compareFn].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else{result=Fn[\"orderbyasc\"].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}return result});var fragment=table.ownerDocument.createDocumentFragment();for(var j=0,len=trArray.length;j<len;j++){fragment.appendChild(trArray[j])}var tbody=table.getElementsByTagName(\"tbody\")[0];if(!lastRowIndex){tbody.appendChild(fragment)}else{tbody.insertBefore(fragment,rows[lastRowIndex-range.endRowIndex+range.beginRowIndex-1])}};UE.plugins[\"tablesort\"]=function(){var me=this,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)};me.ready(function(){utils.cssRule(\"tablesort\",\"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;\"+\"   background-image:url(\"+me.options.themePath+me.options.theme+\"/images/sortable.png);}\",me.document);me.addListener(\"afterexeccommand\",function(type,cmd){if(cmd==\"mergeright\"||cmd==\"mergedown\"||cmd==\"mergecells\"){this.execCommand(\"disablesort\")}})});UE.commands[\"sorttable\"]={queryCommandState:function(){var me=this,tableItems=getTableItemsByRange(me);if(!tableItems.cell)return-1;var table=tableItems.table,cells=table.getElementsByTagName(\"td\");for(var i=0,cell;cell=cells[i++];){if(cell.rowSpan!=1||cell.colSpan!=1)return-1}return 0},execCommand:function(cmd,fn){var me=this,range=me.selection.getRange(),bk=range.createBookmark(true),tableItems=getTableItemsByRange(me),cell=tableItems.cell,ut=getUETable(tableItems.table),cellInfo=ut.getCellInfo(cell);ut.sortTable(cellInfo.cellIndex,fn);range.moveToBookmark(bk);try{range.select()}catch(e){}}};UE.commands[\"enablesort\"]=UE.commands[\"disablesort\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(table&&cmd==\"enablesort\"){var cells=domUtils.getElementsByTagName(table,\"th td\");for(var i=0;i<cells.length;i++){if(cells[i].getAttribute(\"colspan\")>1||cells[i].getAttribute(\"rowspan\")>1)return-1}}return!table?-1:cmd==\"enablesort\"^table.getAttribute(\"data-sort\")!=\"sortEnabled\"?-1:0},execCommand:function(cmd){var table=getTableItemsByRange(this).table;table.setAttribute(\"data-sort\",cmd==\"enablesort\"?\"sortEnabled\":\"sortDisabled\");cmd==\"enablesort\"?domUtils.addClass(table,\"sortEnabled\"):domUtils.removeClasses(table,\"sortEnabled\")}}};UE.plugins[\"contextmenu\"]=function(){var me=this;me.setOpt(\"enableContextMenu\",me.getOpt(\"enableContextMenu\")||true);if(me.getOpt(\"enableContextMenu\")===false){return}var lang=me.getLang(\"contextMenu\"),menu,items=me.options.contextMenu||[{label:lang[\"selectall\"],cmdName:\"selectall\"},{label:lang.cleardoc,cmdName:\"cleardoc\",exec:function(){if(confirm(lang.confirmclear)){this.execCommand(\"cleardoc\")}}},\"-\",{label:lang.unlink,cmdName:\"unlink\"},\"-\",{group:lang.paragraph,icon:\"justifyjustify\",subMenu:[{label:lang.justifyleft,cmdName:\"justify\",value:\"left\"},{label:lang.justifyright,cmdName:\"justify\",value:\"right\"},{label:lang.justifycenter,cmdName:\"justify\",value:\"center\"},{label:lang.justifyjustify,cmdName:\"justify\",value:\"justify\"}]},\"-\",{group:lang.table,icon:\"table\",subMenu:[{label:lang.inserttable,cmdName:\"inserttable\"},{label:lang.deletetable,cmdName:\"deletetable\"},\"-\",{label:lang.deleterow,cmdName:\"deleterow\"},{label:lang.deletecol,cmdName:\"deletecol\"},{label:lang.insertcol,cmdName:\"insertcol\"},{label:lang.insertcolnext,cmdName:\"insertcolnext\"},{label:lang.insertrow,cmdName:\"insertrow\"},{label:lang.insertrownext,cmdName:\"insertrownext\"},\"-\",{label:lang.insertcaption,cmdName:\"insertcaption\"},{label:lang.deletecaption,cmdName:\"deletecaption\"},{label:lang.inserttitle,cmdName:\"inserttitle\"},{label:lang.deletetitle,cmdName:\"deletetitle\"},{label:lang.inserttitlecol,cmdName:\"inserttitlecol\"},{label:lang.deletetitlecol,cmdName:\"deletetitlecol\"},\"-\",{label:lang.mergecells,cmdName:\"mergecells\"},{label:lang.mergeright,cmdName:\"mergeright\"},{label:lang.mergedown,cmdName:\"mergedown\"},\"-\",{label:lang.splittorows,cmdName:\"splittorows\"},{label:lang.splittocols,cmdName:\"splittocols\"},{label:lang.splittocells,cmdName:\"splittocells\"},\"-\",{label:lang.averageDiseRow,cmdName:\"averagedistributerow\"},{label:lang.averageDisCol,cmdName:\"averagedistributecol\"},\"-\",{label:lang.edittd,cmdName:\"edittd\",exec:function(){if(UE.ui[\"edittd\"]){new UE.ui[\"edittd\"](this)}this.getDialog(\"edittd\").open()}},{label:lang.edittable,cmdName:\"edittable\",exec:function(){if(UE.ui[\"edittable\"]){new UE.ui[\"edittable\"](this)}this.getDialog(\"edittable\").open()}},{label:lang.setbordervisible,cmdName:\"setbordervisible\"}]},{group:lang.tablesort,icon:\"tablesort\",subMenu:[{label:lang.enablesort,cmdName:\"enablesort\"},{label:lang.disablesort,cmdName:\"disablesort\"},\"-\",{label:lang.reversecurrent,cmdName:\"sorttable\",value:\"reversecurrent\"},{label:lang.orderbyasc,cmdName:\"sorttable\",value:\"orderbyasc\"},{label:lang.reversebyasc,cmdName:\"sorttable\",value:\"reversebyasc\"},{label:lang.orderbynum,cmdName:\"sorttable\",value:\"orderbynum\"},{label:lang.reversebynum,cmdName:\"sorttable\",value:\"reversebynum\"}]},{group:lang.borderbk,icon:\"borderBack\",subMenu:[{label:lang.setcolor,cmdName:\"interlacetable\",exec:function(){this.execCommand(\"interlacetable\")}},{label:lang.unsetcolor,cmdName:\"uninterlacetable\",exec:function(){this.execCommand(\"uninterlacetable\")}},{label:lang.setbackground,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#bbb\",\"#ccc\"]})}},{label:lang.unsetbackground,cmdName:\"cleartablebackground\",exec:function(){this.execCommand(\"cleartablebackground\")}},{label:lang.redandblue,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"red\",\"blue\"]})}},{label:lang.threecolorgradient,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#aaa\",\"#bbb\",\"#ccc\"]})}}]},{group:lang.aligntd,icon:\"aligntd\",subMenu:[{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"bottom\"}}]},{group:lang.aligntable,icon:\"aligntable\",subMenu:[{cmdName:\"tablealignment\",className:\"left\",label:lang.tableleft,value:\"left\"},{cmdName:\"tablealignment\",className:\"center\",label:lang.tablecenter,value:\"center\"},{cmdName:\"tablealignment\",className:\"right\",label:lang.tableright,value:\"right\"}]},\"-\",{label:lang.insertparagraphbefore,cmdName:\"insertparagraph\",value:true},{label:lang.insertparagraphafter,cmdName:\"insertparagraph\"},{label:lang[\"copy\"],cmdName:\"copy\"},{label:lang[\"paste\"],cmdName:\"paste\"}];if(!items.length){return}var uiUtils=UE.ui.uiUtils;me.addListener(\"contextmenu\",function(type,evt){var offset=uiUtils.getViewportOffsetByEvent(evt);me.fireEvent(\"beforeselectionchange\");if(menu){menu.destroy()}for(var i=0,ti,contextItems=[];ti=items[i];i++){var last;(function(item){if(item==\"-\"){if((last=contextItems[contextItems.length-1])&&last!==\"-\"){contextItems.push(\"-\")}}else if(item.hasOwnProperty(\"group\")){for(var j=0,cj,subMenu=[];cj=item.subMenu[j];j++){(function(subItem){if(subItem==\"-\"){if((last=subMenu[subMenu.length-1])&&last!==\"-\"){subMenu.push(\"-\")}else{subMenu.splice(subMenu.length-1)}}else{if((me.commands[subItem.cmdName]||UE.commands[subItem.cmdName]||subItem.query)&&(subItem.query?subItem.query():me.queryCommandState(subItem.cmdName))>-1){subMenu.push({label:subItem.label||me.getLang(\"contextMenu.\"+subItem.cmdName+(subItem.value||\"\"))||\"\",className:\"edui-for-\"+subItem.cmdName+(subItem.className?\" edui-for-\"+subItem.cmdName+\"-\"+subItem.className:\"\"),onclick:subItem.exec?function(){subItem.exec.call(me)}:function(){me.execCommand(subItem.cmdName,subItem.value)}})}}})(cj)}if(subMenu.length){function getLabel(){switch(item.icon){case\"table\":return me.getLang(\"contextMenu.table\");case\"justifyjustify\":return me.getLang(\"contextMenu.paragraph\");case\"aligntd\":return me.getLang(\"contextMenu.aligntd\");case\"aligntable\":return me.getLang(\"contextMenu.aligntable\");case\"tablesort\":return lang.tablesort;case\"borderBack\":return lang.borderbk;default:return\"\"}}contextItems.push({label:getLabel(),className:\"edui-for-\"+item.icon,subMenu:{items:subMenu,editor:me}})}}else{if((me.commands[item.cmdName]||UE.commands[item.cmdName]||item.query)&&(item.query?item.query.call(me):me.queryCommandState(item.cmdName))>-1){contextItems.push({label:item.label||me.getLang(\"contextMenu.\"+item.cmdName),className:\"edui-for-\"+(item.icon?item.icon:item.cmdName+(item.value||\"\")),onclick:item.exec?function(){item.exec.call(me)}:function(){me.execCommand(item.cmdName,item.value)}})}}})(ti)}if(contextItems[contextItems.length-1]==\"-\"){contextItems.pop()}menu=new UE.ui.Menu({items:contextItems,className:\"edui-contextmenu\",editor:me});menu.render();menu.showAt(offset);me.fireEvent(\"aftershowcontextmenu\",menu);domUtils.preventDefault(evt);if(browser.ie){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}});me.addListener(\"aftershowcontextmenu\",function(type,menu){if(me.zeroclipboard){var items=menu.items;for(var key in items){if(items[key].className==\"edui-for-copy\"){me.zeroclipboard.clip(items[key].getDom())}}}})};UE.plugins[\"shortcutmenu\"]=function(){var me=this,menu,items=me.options.shortcutMenu||[];if(!items.length){return}me.addListener(\"mouseup\",function(type,e){var me=this,customEvt={type:type,target:e.target||e.srcElement,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY};setTimeout(function(){if(!menu){menu=new baidu.editor.ui.ShortCutMenu({editor:me,items:items.concat([]),theme:me.options.theme,className:\"edui-shortcutmenu\"});menu.render();me.fireEvent(\"afterrendershortcutmenu\",menu)}menu.show(customEvt,!!UE.plugins[\"contextmenu\"])});if(type===\"contextmenu\"){domUtils.preventDefault(e);if(browser.ie9below){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}}});me.addListener(\"keydown\",function(type){if(type===\"keydown\"){menu&&!menu.isHidden&&menu.hide()}})};UE.plugins[\"basestyle\"]=function(){var basestyles={bold:[\"strong\",\"b\"],italic:[\"em\",\"i\"],subscript:[\"sub\"],superscript:[\"sup\"]},getObj=function(editor,tagNames){return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames)},me=this;me.addshortcutkey({Bold:\"ctrl+66\",Italic:\"ctrl+73\",Underline:\"ctrl+85\"});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"b i\"),function(node){switch(node.tagName){case\"b\":node.tagName=\"strong\";break;case\"i\":node.tagName=\"em\"}})});for(var style in basestyles){(function(cmd,tagNames){me.commands[cmd]={execCommand:function(cmdName){var range=me.selection.getRange(),obj=getObj(this,tagNames);if(range.collapsed){if(obj){var tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle(tagNames);range.setStartBefore(tmpText);domUtils.remove(tmpText)}else{var tmpNode=range.document.createElement(tagNames[0]);if(cmdName==\"superscript\"||cmdName==\"subscript\"){tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle([\"sub\",\"sup\"]).setStartBefore(tmpText).collapse(true)}range.insertNode(tmpNode).setStart(tmpNode,0)}range.collapse(true)}else{if(cmdName==\"superscript\"||cmdName==\"subscript\"){if(!obj||obj.tagName.toLowerCase()!=cmdName){range.removeInlineStyle([\"sub\",\"sup\"])}}obj?range.removeInlineStyle(tagNames):range.applyInlineStyle(tagNames[0])}range.select()},queryCommandState:function(){return getObj(this,tagNames)?1:0}}})(style,basestyles[style])}};UE.plugins[\"elementpath\"]=function(){var currentLevel,tagNames,me=this;me.setOpt(\"elementPathEnabled\",true);if(!me.options.elementPathEnabled){return}me.commands[\"elementpath\"]={execCommand:function(cmdName,level){var start=tagNames[level],range=me.selection.getRange();currentLevel=level*1;range.selectNode(start).select()},queryCommandValue:function(){var parents=[].concat(this.selection.getStartElementPath()).reverse(),names=[];tagNames=parents;for(var i=0,ci;ci=parents[i];i++){if(ci.nodeType==3){continue}var name=ci.tagName.toLowerCase();if(name==\"img\"&&ci.getAttribute(\"anchorname\")){name=\"anchor\"}names[i]=name;if(currentLevel==i){currentLevel=-1;break}}return names}}};UE.plugins[\"formatmatch\"]=function(){var me=this,list=[],img,flag=0;me.addListener(\"reset\",function(){list=[];flag=0});function addList(type,evt){if(browser.webkit){var target=evt.target.tagName==\"IMG\"?evt.target:null}function addFormat(range){if(text){range.selectNode(text)}return range.applyInlineStyle(list[list.length-1].tagName,null,list)}me.undoManger&&me.undoManger.save();var range=me.selection.getRange(),imgT=target||range.getClosedNode();if(img&&imgT&&imgT.tagName==\"IMG\"){imgT.style.cssText+=\";float:\"+(img.style.cssFloat||img.style.styleFloat||\"none\")+\";display:\"+(img.style.display||\"inline\");img=null}else{if(!img){var collapsed=range.collapsed;if(collapsed){var text=me.document.createTextNode(\"match\");range.insertNode(text).select()}me.__hasEnterExecCommand=true;var removeFormatAttributes=me.options.removeFormatAttributes;me.options.removeFormatAttributes=\"\";me.execCommand(\"removeformat\");me.options.removeFormatAttributes=removeFormatAttributes;me.__hasEnterExecCommand=false;range=me.selection.getRange();if(list.length){addFormat(range)}if(text){range.setStartBefore(text).collapse(true)}range.select();text&&domUtils.remove(text)}}me.undoManger&&me.undoManger.save();me.removeListener(\"mouseup\",addList);flag=0}me.commands[\"formatmatch\"]={execCommand:function(cmdName){if(flag){flag=0;list=[];me.removeListener(\"mouseup\",addList);return}var range=me.selection.getRange();img=range.getClosedNode();if(!img||img.tagName!=\"IMG\"){range.collapse(true).shrinkBoundary();var start=range.startContainer;list=domUtils.findParents(start,true,function(node){return!domUtils.isBlockElm(node)&&node.nodeType==1});for(var i=0,ci;ci=list[i];i++){if(ci.tagName==\"A\"){list.splice(i,1);break}}}me.addListener(\"mouseup\",addList);flag=1},queryCommandState:function(){return flag},notNeedUndo:1}};UE.plugin.register(\"searchreplace\",function(){var me=this;var _blockElm={table:1,tbody:1,tr:1,ol:1,ul:1};var lastRng=null;function getText(node){var text=node.nodeType==3?node.nodeValue:node[browser.ie?\"innerText\":\"textContent\"];return text.replace(domUtils.fillChar,\"\")}function findTextInString(textContent,opt,currentIndex){var str=opt.searchStr;var reg=new RegExp(str,\"g\"+(opt.casesensitive?\"\":\"i\")),match;if(opt.dir==-1){textContent=textContent.substr(0,currentIndex);textContent=textContent.split(\"\").reverse().join(\"\");str=str.split(\"\").reverse().join(\"\");match=reg.exec(textContent);if(match){return currentIndex-match.index-str.length}}else{textContent=textContent.substr(currentIndex);match=reg.exec(textContent);if(match){return match.index+currentIndex}}return-1}function findTextBlockElm(node,currentIndex,opt){var textContent,index,methodName=opt.all||opt.dir==1?\"getNextDomNode\":\"getPreDomNode\";if(domUtils.isBody(node)){node=node.firstChild}var first=1;while(node){textContent=getText(node);index=findTextInString(textContent,opt,currentIndex);first=0;if(index!=-1){return{node:node,index:index}}node=domUtils[methodName](node);while(node&&_blockElm[node.nodeName.toLowerCase()]){node=domUtils[methodName](node,true)}if(node){currentIndex=opt.dir==-1?getText(node).length:0}}}function findNTextInBlockElm(node,index,str){var currentIndex=0,currentNode=node.firstChild,currentNodeLength=0,result;while(currentNode){if(currentNode.nodeType==3){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){return{node:currentNode,index:currentNodeLength-(currentIndex-index)}}}else if(!dtd.$empty[currentNode.tagName]){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){result=findNTextInBlockElm(currentNode,currentNodeLength-(currentIndex-index),str);if(result){return result}}}currentNode=domUtils.getNextDomNode(currentNode)}}function searchReplace(me,opt){var rng=lastRng||me.selection.getRange(),startBlockNode,searchStr=opt.searchStr,span=me.document.createElement(\"span\");span.innerHTML=\"$$ueditor_searchreplace_key$$\";rng.shrinkBoundary(true);if(!rng.collapsed){rng.select();var rngText=me.selection.getText();if(new RegExp(\"^\"+opt.searchStr+\"$\",opt.casesensitive?\"\":\"i\").test(rngText)){if(opt.replaceStr!=undefined){replaceText(rng,opt.replaceStr);rng.select();return true}else{rng.collapse(opt.dir==-1)}}}rng.insertNode(span);rng.enlargeToBlockElm(true);startBlockNode=rng.startContainer;var currentIndex=getText(startBlockNode).indexOf(\"$$ueditor_searchreplace_key$$\");rng.setStartBefore(span);domUtils.remove(span);var result=findTextBlockElm(startBlockNode,currentIndex,opt);if(result){var rngStart=findNTextInBlockElm(result.node,result.index,searchStr);var rngEnd=findNTextInBlockElm(result.node,result.index+searchStr.length,searchStr);rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index);if(opt.replaceStr!==undefined){replaceText(rng,opt.replaceStr)}rng.select();return true}else{rng.setCursor()}}function replaceText(rng,str){str=me.document.createTextNode(str);rng.deleteContents().insertNode(str)}return{commands:{searchreplace:{execCommand:function(cmdName,opt){utils.extend(opt,{all:false,casesensitive:false,dir:1},true);var num=0;if(opt.all){lastRng=null;var rng=me.selection.getRange(),first=me.body.firstChild;if(first&&first.nodeType==1){rng.setStart(first,0);rng.shrinkBoundary(true)}else if(first.nodeType==3){rng.setStartBefore(first)}rng.collapse(true).select(true);if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}while(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}else{if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}if(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}return num},notNeedUndo:1}},bindEvents:{clearlastSearchResult:function(){lastRng=null}}}});UE.plugins[\"customstyle\"]=function(){var me=this;me.setOpt({customstyle:[{tag:\"h1\",name:\"tc\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;\"},{tag:\"h1\",name:\"tl\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;\"},{tag:\"span\",name:\"im\",style:\"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"},{tag:\"span\",name:\"hi\",style:\"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"}]});me.commands[\"customstyle\"]={execCommand:function(cmdName,obj){var me=this,tagName=obj.tag,node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true),range,bk,tmpObj={};for(var p in obj){if(obj[p]!==undefined)tmpObj[p]=obj[p]}delete tmpObj.tag;if(node&&node.getAttribute(\"label\")==obj.label){range=this.selection.getRange();bk=range.createBookmark();if(range.collapsed){if(dtd.$block[node.tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(node,fillNode);node.parentNode.insertBefore(fillNode,node);domUtils.remove(node)}else{domUtils.remove(node,true)}}else{var common=domUtils.getCommonAncestor(bk.start,bk.end),nodes=domUtils.getElementsByTagName(common,tagName);if(new RegExp(tagName,\"i\").test(common.tagName)){nodes.push(common)}for(var i=0,ni;ni=nodes[i++];){if(ni.getAttribute(\"label\")==obj.label){var ps=domUtils.getPosition(ni,bk.start),pe=domUtils.getPosition(ni,bk.end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS))if(dtd.$block[tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(ni,fillNode);ni.parentNode.insertBefore(fillNode,ni)}domUtils.remove(ni,true)}}node=domUtils.findParent(common,function(node){return node.getAttribute(\"label\")==obj.label},true);if(node){domUtils.remove(node,true)}}range.moveToBookmark(bk).select()}else{if(dtd.$block[tagName]){this.execCommand(\"paragraph\",tagName,tmpObj,\"customstyle\");range=me.selection.getRange();if(!range.collapsed){range.collapse();node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")==obj.label},true);var pNode=me.document.createElement(\"p\");domUtils.insertAfter(node,pNode);domUtils.fillNode(me.document,pNode);range.setStart(pNode,0).setCursor()}}else{range=me.selection.getRange();if(range.collapsed){node=me.document.createElement(tagName);domUtils.setAttributes(node,tmpObj);range.insertNode(node).setStart(node,0).setCursor();return}bk=range.createBookmark();range.applyInlineStyle(tagName,tmpObj).moveToBookmark(bk).select()}}},queryCommandValue:function(){var parent=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return node.getAttribute(\"label\")});return parent?parent.getAttribute(\"label\"):\"\"}};me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var range=me.selection.getRange();if(range.collapsed){var node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true);if(node&&dtd.$block[node.tagName]&&domUtils.isEmptyNode(node)){var p=me.document.createElement(\"p\");domUtils.insertAfter(node,p);domUtils.fillNode(me.document,p);domUtils.remove(node);range.setStart(p,0).setCursor()}}}})};UE.plugins[\"catchremoteimage\"]=function(){var me=this,ajax=UE.ajax;if(me.options.catchRemoteImageEnable===false){return}me.setOpt({catchRemoteImageEnable:false});var catcherLocalDomain=me.getOpt(\"catcherLocalDomain\"),catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\")),catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\"),catcherFieldName=me.getOpt(\"catcherFieldName\");me.addListener(\"serverConfigLoaded\",function(){catcherLocalDomain=me.getOpt(\"catcherLocalDomain\");catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\"));catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\");catcherFieldName=me.getOpt(\"catcherFieldName\")});me.addListener(\"afterpaste\",function(){me.fireEvent(\"catchremoteimage\")});var catchRemoteImageCatching=false;function sendApi(imgs,callbacks){var params=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf(\"?\")===-1?\"?\":\"&\")+params),isJsonp=utils.isCrossDomainUrl(url),opt={method:\"POST\",dataType:isJsonp?\"jsonp\":\"\",timeout:6e4,headers:me.options.serverHeaders||{},onsuccess:callbacks[\"success\"],onerror:callbacks[\"error\"]};opt[catcherFieldName]=imgs;ajax.request(url,opt)}function catchElement(type,ele,imageUrl){sendApi([imageUrl],{success:function(r){try{var info=r.state!==undefined?r:eval(\"(\"+r.responseText+\")\")}catch(e){return}var oldSrc,newSrc,oldBgIMG,newBgIMG,list=info.list;var catchFailList=[];var catchSuccessList=[];var failIMG=me.options.themePath+me.options.theme+\"/images/img-cracked.png\";var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\";var cj=list[0];switch(type){case\"image\":oldSrc=ele.getAttribute(\"_src\")||ele.src||\"\";if(cj.state===\"SUCCESS\"){newSrc=catcherUrlPrefix+cj.url;domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:newSrc,_src:newSrc,\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:failIMG,_src:failIMG,\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break;case\"background\":oldBgIMG=ele.getAttribute(\"data-background\")||\"\";if(cj.state===\"SUCCESS\"){newBgIMG=catcherUrlPrefix+cj.url;ele.style.cssText=ele.style.cssText.replace(loadingIMG,newBgIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{ele.style.cssText=ele.style.cssText.replace(loadingIMG,failIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break}me.fireEvent(\"catchremotesuccess\",catchSuccessList,catchFailList);catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)},error:function(){me.fireEvent(\"catchremoteerror\");catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)}})}function catchRemoteImage(){if(catchRemoteImageCatching){return}catchRemoteImageCatching=true;var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\",imgs=me.document.querySelectorAll('[style*=\"url\"],img'),test=function(src,urls){if(src.indexOf(location.host)!==-1||/(^\\.)|(^\\/)/.test(src)){return true}if(urls){for(var j=0,url;url=urls[j++];){if(src.indexOf(url)!==-1){return true}}}return false};for(var i=0,ci;ci=imgs[i++];){if(ci.getAttribute(\"data-word-image\")||ci.getAttribute(\"data-catch-result\")){continue}if(ci.nodeName===\"IMG\"){var src=ci.getAttribute(\"_src\")||ci.src||\"\";if(/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)){catchElement(\"image\",ci,src);domUtils.setAttributes(ci,{class:\"loadingclass\",_src:src,src:loadingIMG});return}}else{var backgroundImageurl=ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/,\"\").replace(/[\\'\\\"]?\\).*/,\"\");if(/^(https?|ftp):/i.test(backgroundImageurl)&&!test(backgroundImageurl,catcherLocalDomain)){catchElement(\"background\",ci,backgroundImageurl);ci.style.cssText=ci.style.cssText.replace(backgroundImageurl,loadingIMG);domUtils.setAttributes(ci,{\"data-background\":backgroundImageurl});return}}}}me.addListener(\"catchremoteimage\",function(){catchRemoteImage()})};UE.commands[\"insertparagraph\"]={execCommand:function(cmdName,front){var me=this,range=me.selection.getRange(),start=range.startContainer,tmpNode;while(start){if(domUtils.isBody(start)){break}tmpNode=start;start=start.parentNode}if(tmpNode){var p=me.document.createElement(\"p\");if(front){tmpNode.parentNode.insertBefore(p,tmpNode)}else{tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling)}domUtils.fillNode(me.document,p);range.setStart(p,0).setCursor(false,true)}}};UE.plugins[\"template\"]=function(){UE.commands[\"template\"]={execCommand:function(cmd,obj){obj.html&&this.execCommand(\"inserthtml\",obj.html)}};this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement,range=this.selection.getRange();var tnode=domUtils.findParent(el,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);tnode&&range.selectNode(tnode).shrinkBoundary().select()});this.addListener(\"keydown\",function(type,evt){var range=this.selection.getRange();if(!range.collapsed){if(!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){var tnode=domUtils.findParent(range.startContainer,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);if(tnode){domUtils.removeClasses(tnode,[\"ue_t\"])}}}})};UE.plugin.register(\"autoupload\",function(){function sendAndInsertFile(file,editor){var me=editor;var fieldName,urlPrefix,maxSize,allowFiles,actionUrl,loadingHtml,errorHandler,successHandler,filetype=/image\\/\\w+/i.test(file.type)?\"image\":\"file\",loadingId=\"loading_\"+(+new Date).toString(36);fieldName=me.getOpt(filetype+\"FieldName\");urlPrefix=me.getOpt(filetype+\"UrlPrefix\");maxSize=me.getOpt(filetype+\"MaxSize\");allowFiles=me.getOpt(filetype+\"AllowFiles\");actionUrl=me.getActionUrl(me.getOpt(filetype+\"ActionName\"));errorHandler=function(title){var loader=me.document.getElementById(loadingId);loader&&domUtils.remove(loader);me.fireEvent(\"showmessage\",{id:loadingId,content:title,type:\"error\",timeout:4e3})};if(filetype===\"image\"){loadingHtml='<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">';successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);if(loader){domUtils.removeClasses(loader,\"uep-loading\");loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",data.original||\"\");loader.removeAttribute(\"id\");me.trigger(\"contentchange\",loader)}}}else{loadingHtml=\"<p>\"+'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">'+\"</p>\";successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);var rng=me.selection.getRange(),bk=rng.createBookmark();rng.selectNode(loader).select();me.execCommand(\"insertfile\",{url:link});rng.moveToBookmark(bk).select()}}me.execCommand(\"inserthtml\",loadingHtml);if(!me.getOpt(filetype+\"ActionName\")){errorHandler(me.getLang(\"autoupload.errorLoadConfig\"));return}if(file.size>maxSize){errorHandler(me.getLang(\"autoupload.exceedSizeError\"));return}var fileext=file.name?file.name.substr(file.name.lastIndexOf(\".\")):\"\";if(fileext&&filetype!=\"image\"||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")==-1){errorHandler(me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(fieldName,file,file.name);UE.api.requestAction(me,me.getOpt(filetype+\"ActionName\"),{data:formData}).then(function(res){successHandler(res.data)}).catch(function(err){errorHandler(me.getLang(\"autoupload.loadError\"))})};var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(\"image\"===filetype&&imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"AutoUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"AutoUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}}function getPasteImage(e){return e.clipboardData&&e.clipboardData.items&&e.clipboardData.items.length==1&&/^image\\//.test(e.clipboardData.items[0].type)?e.clipboardData.items:null}function getDropImage(e){return e.dataTransfer&&e.dataTransfer.files?e.dataTransfer.files:null}return{outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}});utils.each(root.getNodesByTagName(\"p\"),function(n){if(/\\bloadpara\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},bindEvents:{defaultOptions:{enableDragUpload:true,enablePasteUpload:true},ready:function(e){var me=this;if(window.FormData&&window.FileReader){var handler=function(e){var hasImg=false,items;items=e.type==\"paste\"?getPasteImage(e):getDropImage(e);if(items){var len=items.length,file;while(len--){file=items[len];if(file.getAsFile)file=file.getAsFile();if(file&&file.size>0){sendAndInsertFile(file,me);hasImg=true}}hasImg&&e.preventDefault()}};if(me.getOpt(\"enablePasteUpload\")!==false){domUtils.on(me.body,\"paste \",handler)}if(me.getOpt(\"enableDragUpload\")!==false){domUtils.on(me.body,\"drop\",handler);domUtils.on(me.body,\"dragover\",function(e){if(e.dataTransfer.types[0]==\"Files\"){e.preventDefault()}})}else{if(browser.gecko){domUtils.on(me.body,\"drop\",function(e){if(getDropImage(e)){e.preventDefault()}})}}utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-left:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)}}}}});UE.plugin.register(\"section\",function(){function Section(option){this.tag=\"\";this.level=-1,this.dom=null;this.nextSection=null;this.previousSection=null;this.parentSection=null;this.startAddress=[];this.endAddress=[];this.children=[]}function getSection(option){var section=new Section;return utils.extend(section,option)}function getNodeFromAddress(startAddress,root){var current=root;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var me=this;return{bindMultiEvents:{type:\"aftersetcontent afterscencerestore\",handler:function(){me.fireEvent(\"updateSections\")}},bindEvents:{ready:function(){me.fireEvent(\"updateSections\");domUtils.on(me.body,\"drop paste\",function(){me.fireEvent(\"updateSections\")})},afterexeccommand:function(type,cmd){if(cmd==\"paragraph\"){me.fireEvent(\"updateSections\")}},keyup:function(type,e){var me=this,range=me.selection.getRange();if(range.collapsed!=true){me.fireEvent(\"updateSections\")}else{var keyCode=e.keyCode||e.which;if(keyCode==13||keyCode==8||keyCode==46){me.fireEvent(\"updateSections\")}}}},commands:{getsections:{execCommand:function(cmd,levels){var levelFn=levels||[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];for(var i=0;i<levelFn.length;i++){if(typeof levelFn[i]==\"string\"){levelFn[i]=function(fn){return function(node){return node.tagName==fn.toUpperCase()}}(levelFn[i])}else if(typeof levelFn[i]!=\"function\"){levelFn[i]=function(node){return null}}}function getSectionLevel(node){for(var i=0;i<levelFn.length;i++){if(levelFn[i](node))return i}return-1}var me=this,Directory=getSection({level:-1,title:\"root\"}),previous=Directory;function traversal(node,Directory){var level,tmpSection=null,parent,child,children=node.childNodes;for(var i=0,len=children.length;i<len;i++){child=children[i];level=getSectionLevel(child);if(level>=0){var address=me.selection.getRange().selectNode(child).createAddress(true).startAddress,current=getSection({tag:child.tagName,title:child.innerText||child.textContent||\"\",level:level,dom:child,startAddress:utils.clone(address,[]),endAddress:utils.clone(address,[]),children:[]});previous.nextSection=current;current.previousSection=previous;parent=previous;while(level<=parent.level){parent=parent.parentSection}current.parentSection=parent;parent.children.push(current);tmpSection=previous=current}else{child.nodeType===1&&traversal(child,Directory);tmpSection&&tmpSection.endAddress[tmpSection.endAddress.length-1]++}}}traversal(me.body,Directory);return Directory},notNeedUndo:true},movesection:{execCommand:function(cmd,sourceSection,targetSection,isAfter){var me=this,targetAddress,target;if(!sourceSection||!targetSection||targetSection.level==-1)return;targetAddress=isAfter?targetSection.endAddress:targetSection.startAddress;target=getNodeFromAddress(targetAddress,me.body);if(!targetAddress||!target||isContainsAddress(sourceSection.startAddress,sourceSection.endAddress,targetAddress))return;var startNode=getNodeFromAddress(sourceSection.startAddress,me.body),endNode=getNodeFromAddress(sourceSection.endAddress,me.body),current,nextNode;if(isAfter){current=endNode;while(current&&!(domUtils.getPosition(startNode,current)&domUtils.POSITION_FOLLOWING)){nextNode=current.previousSibling;domUtils.insertAfter(target,current);if(current==startNode)break;current=nextNode}}else{current=startNode;while(current&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;target.parentNode.insertBefore(current,target);if(current==endNode)break;current=nextNode}}me.fireEvent(\"updateSections\");function isContainsAddress(startAddress,endAddress,addressTarget){var isAfterStartAddress=false,isBeforeEndAddress=false;for(var i=0;i<startAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]>startAddress[i]){isAfterStartAddress=true;break}else if(addressTarget[i]<startAddress[i]){break}}for(var i=0;i<endAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]<startAddress[i]){isBeforeEndAddress=true;break}else if(addressTarget[i]>startAddress[i]){break}}return isAfterStartAddress&&isBeforeEndAddress}}},deletesection:{execCommand:function(cmd,section,keepChildren){var me=this;if(!section)return;function getNodeFromAddress(startAddress){var current=me.body;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var startNode=getNodeFromAddress(section.startAddress),endNode=getNodeFromAddress(section.endAddress),current=startNode,nextNode;if(!keepChildren){while(current&&domUtils.inDoc(endNode,me.document)&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;domUtils.remove(current);current=nextNode}}else{domUtils.remove(current)}me.fireEvent(\"updateSections\")}},selectsection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:utils.clone(section.startAddress,[]),endAddress:utils.clone(section.endAddress,[])};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).select().scrollToView();return true},notNeedUndo:true},scrolltosection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:section.startAddress,endAddress:section.endAddress};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).scrollToView();return true},notNeedUndo:true}}}});UE.plugin.register(\"simpleupload\",function(){var me=this,isLoaded=false,containerBtn;function initUploadBtn(){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer;font-size:0;opacity:0;\";input.type=\"file\";containerBtn.appendChild(input);domUtils.on(input,\"click\",function(e){var toolbarCallback=me.getOpt(\"toolbarCallback\");if(toolbarCallback){if(true===toolbarCallback(\"simpleupload\",me)){e.stopPropagation();e.preventDefault()}}});domUtils.on(input,\"change\",function(e){var state=me.queryCommandState(\"simpleupload\");if(state===-1){return}if(!input.value){return}var loadingId=UE.dialog.loadingPlaceholder(me);if(!me.getOpt(\"imageActionName\")){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.errorLoadConfig\"));return}var allowFiles=me.getOpt(\"imageAllowFiles\");var filename=input.value,fileext=filename?filename.substr(filename.lastIndexOf(\".\")):\"\";if(!fileext||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")===-1){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(me.getOpt(\"imageFieldName\"),file,file.name);UE.api.requestAction(me,me.getOpt(\"imageActionName\"),{data:formData}).then(function(res){if(\"SUCCESS\"===res.data.state&&res.data.url){const loader=me.document.getElementById(loadingId);domUtils.removeClasses(loader,\"uep-loading\");const link=me.options.imageUrlPrefix+res.data.url;loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",res.data.original||\"\");loader.removeAttribute(\"id\");me.fireEvent(\"contentchange\");me.fireEvent(\"uploadsuccess\",{res:res.data,type:\"image\"})}else{UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,res.data.state)}}).catch(function(err){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,err)})};var file=input.files[0];var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"SimpleUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"SimpleUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}});var stateTimer;me.addListener(\"selectionchange\",function(){clearTimeout(stateTimer);stateTimer=setTimeout(function(){var state=me.queryCommandState(\"simpleupload\");if(state===-1){input.disabled=\"disabled\"}else{input.disabled=false}},400)});isLoaded=true}return{bindEvents:{ready:function(){utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)},simpleuploadbtnready:function(type,container){containerBtn=container;me.afterConfigReady(initUploadBtn)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},commands:{simpleupload:{queryCommandState:function(){return isLoaded?0:-1}}}}});UE.plugin.register(\"serverparam\",function(){var me=this,serverParam={};return{commands:{serverparam:{execCommand:function(cmd,key,value){if(key===undefined||key===null){serverParam={}}else if(utils.isString(key)){if(value===undefined||value===null){delete serverParam[key]}else{serverParam[key]=value}}else if(utils.isObject(key)){utils.extend(serverParam,key,false)}else if(utils.isFunction(key)){utils.extend(serverParam,key(),false)}},queryCommandValue:function(){return serverParam||{}}}}}});UE.plugin.register(\"insertfile\",function(){var me=this;function getFileIcon(url){var ext=url.substr(url.lastIndexOf(\".\")+1).toLowerCase(),maps={ai:\"ai.svg\",apk:\"apk.svg\",chm:\"chm.svg\",css:\"css.svg\",doc:\"doc.svg\",docx:\"docx.svg\",dwg:\"dwg.svg\",gif:\"gif.svg\",html:\"html.svg\",jpeg:\"jpeg.svg\",jpg:\"jpg.svg\",log:\"log.svg\",mp3:\"mp3.svg\",mp4:\"mp4.svg\",pdf:\"pdf.svg\",png:\"png.svg\",ppt:\"ppt.svg\",pptx:\"pptx.svg\",psd:\"psd.svg\",rar:\"rar.svg\",svg:\"svg.svg\",torrent:\"torrent.svg\",txt:\"txt.svg\",unknown:\"unknown.svg\",xls:\"xls.svg\",xlsx:\"xlsx.svg\",zip:\"zip.svg\"};return maps[ext]?maps[ext]:maps[\"unknown\"]}return{commands:{insertfile:{execCommand:function(command,filelist){filelist=utils.isArray(filelist)?filelist:[filelist];if(me.fireEvent(\"beforeinsertfile\",filelist)===true){return}var i,item,icon,title,html=\"\",URL=me.getOpt(\"UEDITOR_HOME_URL\"),iconDir=me.options.themePath+me.options.theme+\"/exts/\";for(i=0;i<filelist.length;i++){item=filelist[i];icon=iconDir+getFileIcon(item.url);title=item.title||item.url.substr(item.url.lastIndexOf(\"/\")+1);html+=\"<p>\"+'<a style=\"background:#EEE;padding:10px;border-radius:5px;line-height:1.5em;display:inline-flex;align-items:center;\" href=\"'+item.url+'\" title=\"'+title+'\" target=\"_blank\">'+'<img style=\"vertical-align:middle;margin-right:0.5em;height:1.5em;\" src=\"'+icon+'\" _src=\"'+icon+'\" />'+'<span style=\"color:#111111;line-height:1.5em;flex-grow:1;\">'+title+\"</span>\"+\"</a>\"+\"</p>\"}me.execCommand(\"insertHtml\",html);me.fireEvent(\"afterinsertfile\",filelist)}}}}});UE.plugins[\"markdown-shortcut\"]=function(){if(!UE.browser.chrome){return}const me=this;const getCleanHtml=function(node){let html=node.innerHTML;html=html.replace(/[\\u200b]*/g,\"\");return html};let shortCuts=[];for(let i=1;i<=6;i++){const regExp=new RegExp(\"^\\\\t?\"+Array(i+1).join(\"#\")+\"(\\\\s|&nbsp;)\");(function(command){shortCuts.push({name:\"Head\"+i,tagName:[\"P\"],key:[\" \"],offset:[i+1,i+2],match:[regExp],callback:function(param){me.__hasEnterExecCommand=true;me.execCommand(\"paragraph\",command);let range=me.selection.getRange();let node=range.startContainer;let html=getCleanHtml(node);html=html.replace(regExp,\"\");if(!html){html=domUtils.fillChar}node.innerHTML=html;me.__hasEnterExecCommand=false}})})(\"h\"+i)}me.on(\"ready\",function(){domUtils.on(me.body,\"keyup\",function(e){let range=me.selection.getRange();if(range.endOffset!==range.startOffset){return}let key=e.key;let offset=range.startOffset;const node=range.startContainer.parentNode;let html=getCleanHtml(node);let tagName=node.tagName;for(let s of shortCuts){if(!s.tagName.includes(tagName)){continue}if(!s.key.includes(key)){continue}if(!s.offset.includes(offset)){continue}for(let m of s.match){let match=html.match(m);if(match){s.callback({node:node});break}}}})})};UE.plugins[\"quick-operate\"]=function(){if(!UE.browser.chrome){return}return;let me=this;const uiUtils=UE.ui.uiUtils;me.on(\"ready\",function(){let quickOperate=new UE.ui.QuickOperate({className:\"edui-quick-operate\",editor:me});quickOperate.render();let quickOperateNode={root:null,target:null};domUtils.on(quickOperate.el,\"mouseenter\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.add(\"edui-quick-operate-active\")});domUtils.on(quickOperate.el,\"mouseleave\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.remove(\"edui-quick-operate-active\")});domUtils.on(me.body,\"mouseout\",function(evt){});domUtils.on(me.body,\"mouseover\",function(evt){const node=evt.target;let rootNode=node;for(;rootNode.parentNode&&rootNode.parentNode.tagName!==\"BODY\";){rootNode=rootNode.parentNode}quickOperateNode.root=rootNode;quickOperateNode.target=node;const rect=node.getBoundingClientRect();const offset=uiUtils.getClientRect(node);offset.left=offset.left-55;quickOperate.showAt(offset)})})};var baidu=baidu||{};baidu.editor=baidu.editor||{};UE.ui=baidu.editor.ui={};(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils;var magic=\"$EDITORUI\";var root=window[magic]={};var uidMagic=\"ID\"+magic;var uidCount=0;var uiUtils=baidu.editor.ui.uiUtils={uid:function(obj){return obj?obj[uidMagic]||(obj[uidMagic]=++uidCount):++uidCount},hook:function(fn,callback){var dg;if(fn&&fn._callbacks){dg=fn}else{dg=function(){var q;if(fn){q=fn.apply(this,arguments)}var callbacks=dg._callbacks;var k=callbacks.length;while(k--){var r=callbacks[k].apply(this,arguments);if(q===undefined){q=r}}return q};dg._callbacks=[]}dg._callbacks.push(callback);return dg},createElementByHtml:function(html){var el=document.createElement(\"div\");el.innerHTML=html;el=el.firstChild;el.parentNode.removeChild(el);return el},getViewportElement:function(){return browser.ie&&browser.quirks?document.body:document.documentElement},getClientRect:function(element){var bcr;try{bcr=element.getBoundingClientRect()}catch(e){bcr={left:0,top:0,height:0,width:0}}var rect={left:Math.round(bcr.left),top:Math.round(bcr.top),height:Math.round(bcr.bottom-bcr.top),width:Math.round(bcr.right-bcr.left)};var doc;while((doc=element.ownerDocument)!==document&&(element=domUtils.getWindow(doc).frameElement)){bcr=element.getBoundingClientRect();rect.left+=bcr.left;rect.top+=bcr.top}rect.bottom=rect.top+rect.height;rect.right=rect.left+rect.width;return rect},getViewportRect:function(){var viewportEl=uiUtils.getViewportElement();var width=(window.innerWidth||viewportEl.clientWidth)|0;var height=(window.innerHeight||viewportEl.clientHeight)|0;return{left:0,top:0,height:height,width:width,bottom:height,right:width}},setViewportOffset:function(element,offset){var rect;var fixedLayer=uiUtils.getFixedLayer();if(element.parentNode===fixedLayer){element.style.left=offset.left+\"px\";element.style.top=offset.top+\"px\"}else{domUtils.setViewportOffset(element,offset)}},getEventOffset:function(evt){var el=evt.target||evt.srcElement;var rect=uiUtils.getClientRect(el);var offset=uiUtils.getViewportOffsetByEvent(evt);return{left:offset.left-rect.left,top:offset.top-rect.top}},getViewportOffsetByEvent:function(evt){var el=evt.target||evt.srcElement;var frameEl=domUtils.getWindow(el).frameElement;var offset={left:evt.clientX,top:evt.clientY};if(frameEl&&el.ownerDocument!==document){var rect=uiUtils.getClientRect(frameEl);offset.left+=rect.left;offset.top+=rect.top}return offset},setGlobal:function(id,obj){root[id]=obj;return magic+'[\"'+id+'\"]'},unsetGlobal:function(id){delete root[id]},copyAttributes:function(tgt,src){var attributes=src.attributes;var k=attributes.length;while(k--){var attrNode=attributes[k];if(attrNode.nodeName!=\"style\"&&attrNode.nodeName!=\"class\"&&(!browser.ie||attrNode.specified)){tgt.setAttribute(attrNode.nodeName,attrNode.nodeValue)}}if(src.className){domUtils.addClass(tgt,src.className)}if(src.style.cssText){tgt.style.cssText+=\";\"+src.style.cssText}},removeStyle:function(el,styleName){if(el.style.removeProperty){el.style.removeProperty(styleName)}else if(el.style.removeAttribute){el.style.removeAttribute(styleName)}else throw\"\"},contains:function(elA,elB){return elA&&elB&&(elA===elB?false:elA.contains?elA.contains(elB):elA.compareDocumentPosition(elB)&16)},startDrag:function(evt,callbacks,doc){var doc=doc||document;var startX=evt.clientX;var startY=evt.clientY;function handleMouseMove(evt){var x=evt.clientX-startX;var y=evt.clientY-startY;callbacks.ondragmove(x,y,evt);if(evt.stopPropagation){evt.stopPropagation()}else{evt.cancelBubble=true}}if(doc.addEventListener){function handleMouseUp(evt){doc.removeEventListener(\"mousemove\",handleMouseMove,true);doc.removeEventListener(\"mouseup\",handleMouseUp,true);window.removeEventListener(\"mouseup\",handleMouseUp,true);callbacks.ondragstop()}doc.addEventListener(\"mousemove\",handleMouseMove,true);doc.addEventListener(\"mouseup\",handleMouseUp,true);window.addEventListener(\"mouseup\",handleMouseUp,true);evt.preventDefault()}else{var elm=evt.srcElement;elm.setCapture();function releaseCaptrue(){elm.releaseCapture();elm.detachEvent(\"onmousemove\",handleMouseMove);elm.detachEvent(\"onmouseup\",releaseCaptrue);elm.detachEvent(\"onlosecaptrue\",releaseCaptrue);callbacks.ondragstop()}elm.attachEvent(\"onmousemove\",handleMouseMove);elm.attachEvent(\"onmouseup\",releaseCaptrue);elm.attachEvent(\"onlosecaptrue\",releaseCaptrue);evt.returnValue=false}callbacks.ondragstart()},getFixedLayer:function(){var layer=document.getElementById(\"edui_fixedlayer\");if(layer==null){layer=document.createElement(\"div\");layer.id=\"edui_fixedlayer\";document.body.appendChild(layer);if(browser.ie&&browser.version<=8){layer.style.position=\"absolute\";bindFixedLayer();setTimeout(updateFixedOffset)}else{layer.style.position=\"fixed\"}layer.style.left=\"0\";layer.style.top=\"0\";layer.style.width=\"0\";layer.style.height=\"0\";layer.style.margin=\"0\"}return layer},makeUnselectable:function(element){if(browser.opera||browser.ie&&browser.version<9){element.unselectable=\"on\";if(element.hasChildNodes()){for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeType===1){uiUtils.makeUnselectable(element.childNodes[i])}}}}else{if(element.style.MozUserSelect!==undefined){element.style.MozUserSelect=\"none\"}else if(element.style.WebkitUserSelect!==undefined){element.style.WebkitUserSelect=\"none\"}else if(element.style.KhtmlUserSelect!==undefined){element.style.KhtmlUserSelect=\"none\"}}}};function updateFixedOffset(){var layer=document.getElementById(\"edui_fixedlayer\");uiUtils.setViewportOffset(layer,{left:0,top:0})}function bindFixedLayer(adjOffset){domUtils.on(window,\"scroll\",updateFixedOffset);domUtils.on(window,\"resize\",baidu.editor.utils.defer(updateFixedOffset,0,true))}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,EventBase=baidu.editor.EventBase,UIBase=baidu.editor.ui.UIBase=function(){};UIBase.prototype={el:null,className:\"\",uiName:\"\",initOptions:function(options){var me=this;for(var k in options){me[k]=options[k]}this.id=this.id||\"edui\"+uiUtils.uid()},initUIBase:function(){this._globalKey=utils.unhtml(uiUtils.setGlobal(this.id,this))},render:function(holder){var html=this.renderHtml();var el=uiUtils.createElementByHtml(html);var list=domUtils.getElementsByTagName(el,\"*\");var theme=\"edui-\"+(this.theme||this.editor.options.theme);var layer=document.getElementById(\"edui_fixedlayer\");for(var i=0,node;node=list[i++];){domUtils.addClass(node,theme)}domUtils.addClass(el,theme);if(layer){layer.className=\"\";domUtils.addClass(layer,theme)}var seatEl=this.getDom();if(seatEl!=null){seatEl.parentNode.replaceChild(el,seatEl);uiUtils.copyAttributes(el,seatEl)}else{if(typeof holder==\"string\"){holder=document.getElementById(holder)}holder=holder||uiUtils.getFixedLayer();domUtils.addClass(holder,theme);holder.appendChild(el)}this.el=el;this.postRender()},getDom:function(name){if(!name){return document.getElementById(this.id)}else{return document.getElementById(this.id+\"_\"+name)}},postRender:function(){this.fireEvent(\"postrender\")},getHtmlTpl:function(){return\"\"},formatHtml:function(tpl){var prefix=\"edui-\"+this.uiName;return tpl.replace(/##/g,this.id).replace(/%%-/g,this.uiName?prefix+\"-\":\"\").replace(/%%/g,(this.uiName?prefix:\"\")+\" \"+this.className).replace(/\\$\\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var box=this.getDom();if(box)baidu.editor.dom.domUtils.remove(box);uiUtils.unsetGlobal(this.id)},uiIsShow:true,uiShowStyleBackupValue:null,uiShow:function(enable){if(enable){if(this.uiIsShow){return}this.getDom().style.display=this.uiShowStyleBackupValue;this.uiIsShow=true}else{if(!this.uiIsShow){return}this.uiShowStyleBackupValue=this.getDom().style.display;this.getDom().style.display=\"none\";this.uiIsShow=false}}};utils.inherits(UIBase,EventBase)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Separator=baidu.editor.ui.Separator=function(options){this.initOptions(options);this.initSeparator()};Separator.prototype={uiName:\"separator\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"></div>'}};utils.inherits(Separator,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,uiUtils=baidu.editor.ui.uiUtils;var Mask=baidu.editor.ui.Mask=function(options){this.initOptions(options);this.initUIBase()};Mask.prototype={getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>'},postRender:function(){var me=this;domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me._fill()}})})},show:function(zIndex){this._fill();this.getDom().style.display=\"\";this.getDom().style.zIndex=zIndex},hide:function(){this.getDom().style.display=\"none\";this.getDom().style.zIndex=\"\"},isHidden:function(){return this.getDom().style.display==\"none\"},_onMouseDown:function(){return false},_onClick:function(e,target){this.fireEvent(\"click\",e,target)},_fill:function(){var el=this.getDom();var vpRect=uiUtils.getViewportRect();el.style.width=vpRect.width+\"px\";el.style.height=vpRect.height+\"px\"}};utils.inherits(Mask,UIBase)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup=function(options){this.initOptions(options);this.initPopup()};var allPopups=[];function closeAllPopup(evt,el){for(var i=0;i<allPopups.length;i++){var pop=allPopups[i];if(!pop.isHidden()){if(pop.queryAutoHide(el)!==false){if(evt&&/scroll/gi.test(evt.type)&&pop.className===\"edui-wordpastepop\")return;pop.hide()}}}if(allPopups.length)pop.editor.fireEvent(\"afterhidepop\")}Popup.postHide=closeAllPopup;var ANCHOR_CLASSES=[\"edui-anchor-topleft\",\"edui-anchor-topright\",\"edui-anchor-bottomleft\",\"edui-anchor-bottomright\"];Popup.prototype={SHADOW_RADIUS:5,content:null,_hidden:false,autoRender:true,canSideLeft:true,canSideUp:true,initPopup:function(){this.initUIBase();allPopups.push(this)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\">'+' <div id=\"##_body\" class=\"edui-popup-body\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-popup-content\">'+this.getContentHtmlTpl()+\"  </div>\"+\" </div>\"+\"</div>\"},getContentHtmlTpl:function(){if(this.content){if(typeof this.content==\"string\"){return this.content}return this.content.renderHtml()}else{return\"\"}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){if(this.content instanceof UIBase){this.content.postRender()}if(this.captureWheel&&!this.captured){this.captured=true;var winHeight=(document.documentElement.clientHeight||document.body.clientHeight)-80,_height=this.getDom().offsetHeight,_top=uiUtils.getClientRect(this.combox.getDom()).top,content=this.getDom(\"content\"),ifr=this.getDom(\"body\").getElementsByTagName(\"iframe\"),me=this;ifr.length&&(ifr=ifr[0]);while(_top+_height>winHeight){_height-=30}content.style.height=_height+\"px\";ifr&&(ifr.style.height=_height+\"px\");domUtils.on(content,\"onmousewheel\"in document.body?\"mousewheel\":\"DOMMouseScroll\",function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}if(e.wheelDelta){content.scrollTop-=e.wheelDelta/120*60}else{content.scrollTop-=e.detail/-3*60}})}this.fireEvent(\"postRenderAfter\");this.hide(true);this._UIBase_postRender()},_doAutoRender:function(){if(!this.getDom()&&this.autoRender){this.render()}},mesureSize:function(){var box=this.getDom(\"content\");return uiUtils.getClientRect(box)},fitSize:function(){if(this.captureWheel&&this.sized){return this.__size}this.sized=true;var popBodyEl=this.getDom(\"body\");popBodyEl.style.width=\"\";popBodyEl.style.height=\"\";var size=this.mesureSize();if(this.captureWheel){popBodyEl.style.width=-(-20-size.width)+\"px\";var height=parseInt(this.getDom(\"content\").style.height,10);!window.isNaN(height)&&(size.height=height)}else{popBodyEl.style.width=size.width+\"px\"}popBodyEl.style.height=size.height+\"px\";this.__size=size;this.captureWheel&&(this.getDom(\"content\").style.overflow=\"auto\");return size},showAnchor:function(element,hoz){this.showAnchorRect(uiUtils.getClientRect(element),hoz)},showAnchorRect:function(rect,hoz,adj){this._doAutoRender();var vpRect=uiUtils.getViewportRect();this.getDom().style.visibility=\"hidden\";this._show();var popSize=this.fitSize();var sideLeft,sideUp,left,top;if(hoz){sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.left-popSize.width:rect.right;top=sideUp?rect.bottom-popSize.height:rect.top}else{sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.right-popSize.width:rect.left;top=sideUp?rect.top-popSize.height:rect.bottom}if(!sideUp){if(top+popSize.height>vpRect.bottom){top=vpRect.bottom-popSize.height}}var popEl=this.getDom();uiUtils.setViewportOffset(popEl,{left:left,top:top});domUtils.removeClasses(popEl,ANCHOR_CLASSES);popEl.className+=\" \"+ANCHOR_CLASSES[(sideUp?1:0)*2+(sideLeft?1:0)];if(this.editor){popEl.style.zIndex=this.editor.container.style.zIndex*1+10;baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=popEl.style.zIndex-1}this.getDom().style.visibility=\"visible\"},showAt:function(offset){var left=offset.left;var top=offset.top;var rect={left:left,top:top,right:left,bottom:top,height:0,width:0};this.showAnchorRect(rect,false,true)},_show:function(){if(this._hidden){var box=this.getDom();box.style.display=\"\";this._hidden=false;this.fireEvent(\"show\")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender();this._show()},hide:function(notNofity){if(!this._hidden&&this.getDom()){this.getDom().style.display=\"none\";this._hidden=true;if(!notNofity){this.fireEvent(\"hide\")}}},queryAutoHide:function(el){return!el||!uiUtils.contains(this.getDom(),el)}};utils.inherits(Popup,UIBase);domUtils.on(document,\"mousedown\",function(evt){var el=evt.target||evt.srcElement;closeAllPopup(evt,el)});domUtils.on(window,\"scroll\",function(evt,el){closeAllPopup(evt,el)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,ColorPicker=baidu.editor.ui.ColorPicker=function(options){this.initOptions(options);this.noColorText=this.noColorText||this.editor.getLang(\"clearColor\");this.initUIBase()};ColorPicker.prototype={getHtmlTpl:function(){return genColorPicker(this.noColorText,this.editor)},_onTableClick:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.fireEvent(\"pickcolor\",color)}},_onTableOver:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.getDom(\"preview\").style.backgroundColor=color}},_onTableOut:function(){this.getDom(\"preview\").style.backgroundColor=\"\"},_onPickNoColor:function(){this.fireEvent(\"picknocolor\")},_onColorSelect:function(evt){var input=evt.target||evt.srcElement;var color=input.value;if(color){this.fireEvent(\"pickcolor\",color)}}};utils.inherits(ColorPicker,UIBase);var COLORS=(\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,\"+\"f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,\"+\"d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,\"+\"bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,\"+\"a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,\"+\"7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,\"+\"c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\").split(\",\");function genColorPicker(noColorText,editor){var html='<div id=\"##\" class=\"edui-colorpicker %%\">'+'<div class=\"edui-colorpicker-topbar edui-clearfix\">'+'<div id=\"##_preview\" class=\"edui-colorpicker-preview\"><input type=\"color\" id=\"##_input\" onchange=\"$$._onColorSelect(event,this);\" /></div>'+'<div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">'+noColorText+\"</div>\"+\"</div>\"+'<table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\">'+'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">'+editor.getLang(\"themeColor\")+\"</td> </tr>\"+'<tr class=\"edui-colorpicker-tablefirstrow\" >';for(var i=0;i<COLORS.length;i++){if(i&&i%10===0){html+=\"</tr>\"+(i==60?'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">'+editor.getLang(\"standardColor\")+\"</td></tr>\":\"\")+\"<tr\"+(i==60?' class=\"edui-colorpicker-tablefirstrow\"':\"\")+\">\"}html+=i<70?'<td style=\"padding:2px 2px;\"><a hidefocus title=\"'+COLORS[i]+'\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\"'+' data-color=\"#'+COLORS[i]+'\"'+' style=\"background-color:#'+COLORS[i]+\";border:solid #ccc 1px;\"+'\"'+\"></a></td>\":\"\"}html+=\"</tr>\";html+=\"</table></div>\";return html}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var TablePicker=baidu.editor.ui.TablePicker=function(options){this.initOptions(options);this.initTablePicker()};TablePicker.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this;return'<div id=\"##\" class=\"edui-tablepicker %%\">'+'<div class=\"edui-tablepicker-body\">'+'<div class=\"edui-infoarea\">'+'<span id=\"##_label\" class=\"edui-label\"></span>'+\"</div>\"+'<div class=\"edui-pickarea\"'+' onmousemove=\"$$._onMouseMove(event, this);\"'+' onmouseover=\"$$._onMouseOver(event, this);\"'+' onmouseout=\"$$._onMouseOut(event, this);\"'+' onclick=\"$$._onClick(event, this);\"'+\">\"+'<div id=\"##_overlay\" class=\"edui-overlay\"></div>'+\"</div>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render,render:function(holder){this._UIBase_render(holder);this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_row\")+\" x 0\"+this.editor.getLang(\"t_col\")},_track:function(numCols,numRows){var style=this.getDom(\"overlay\").style;var sideLen=this.lengthOfCellSide;style.width=numCols*sideLen+\"px\";style.height=numRows*sideLen+\"px\";var label=this.getDom(\"label\");label.innerHTML=numCols+this.editor.getLang(\"t_col\")+\" x \"+numRows+this.editor.getLang(\"t_row\");this.numCols=numCols;this.numRows=numRows},_onMouseOver:function(evt,el){var rel=evt.relatedTarget||evt.fromElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"\"}},_onMouseOut:function(evt,el){var rel=evt.relatedTarget||evt.toElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"hidden\"}},_onMouseMove:function(evt,el){var style=this.getDom(\"overlay\").style;var offset=uiUtils.getEventOffset(evt);var sideLen=this.lengthOfCellSide;var numCols=Math.ceil(offset.left/sideLen);var numRows=Math.ceil(offset.top/sideLen);this._track(numCols,numRows)},_onClick:function(){this.fireEvent(\"picktable\",this.numCols,this.numRows)}};utils.inherits(TablePicker,UIBase)})();(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils;var TPL_STATEFUL='onmousedown=\"$$.Stateful_onMouseDown(event, this);\"'+' onmouseup=\"$$.Stateful_onMouseUp(event, this);\"'+(browser.ie?' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\"'+' onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"':' onmouseover=\"$$.Stateful_onMouseOver(event, this);\"'+' onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');baidu.editor.ui.Stateful={alwalysHoverable:false,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl;this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var tpl=this._Stateful_dGetHtmlTpl();return tpl.replace(/stateful/g,function(){return TPL_STATEFUL})},Stateful_onMouseEnter:function(evt,el){this.target=el;if(!this.isDisabled()||this.alwalysHoverable){this.addState(\"hover\");this.fireEvent(\"over\")}},Stateful_onMouseLeave:function(evt,el){if(!this.isDisabled()||this.alwalysHoverable){this.removeState(\"hover\");this.removeState(\"active\");this.fireEvent(\"out\")}},Stateful_onMouseOver:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseEnter(evt,el)}},Stateful_onMouseOut:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseLeave(evt,el)}},Stateful_onMouseDown:function(evt,el){if(!this.isDisabled()){this.addState(\"active\")}},Stateful_onMouseUp:function(evt,el){if(!this.isDisabled()){this.removeState(\"active\")}},Stateful_postRender:function(){if(this.disabled&&!this.hasState(\"disabled\")){this.addState(\"disabled\")}},hasState:function(state){return domUtils.hasClass(this.getStateDom(),\"edui-state-\"+state)},addState:function(state){if(!this.hasState(state)){this.getStateDom().className+=\" edui-state-\"+state}},removeState:function(state){if(this.hasState(state)){domUtils.removeClasses(this.getStateDom(),[\"edui-state-\"+state])}},getStateDom:function(){return this.getDom(\"state\")},isChecked:function(){return this.hasState(\"checked\")},setChecked:function(checked){if(!this.isDisabled()&&checked){this.addState(\"checked\")}else{this.removeState(\"checked\")}},isDisabled:function(){return this.hasState(\"disabled\")},setDisabled:function(disabled){if(disabled){this.removeState(\"hover\");this.removeState(\"checked\");this.removeState(\"active\");this.addState(\"disabled\")}else{this.removeState(\"disabled\")}}}})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,Button=baidu.editor.ui.Button=function(options){if(options.name){var btnName=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+btnName}options.cssRules=\".edui-\"+(options.theme||\"default\")+\" .edui-toolbar .edui-button.edui-for-\"+btnName+\" .edui-icon {\"+cssRules+\"}\"}this.initOptions(options);this.initButton()};Button.prototype={uiName:\"button\",label:\"\",title:\"\",showIcon:true,showText:true,cssRules:\"\",initButton:function(){this.initUIBase();this.Stateful_init();if(this.cssRules){utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+'<div id=\"##_state\" stateful>'+'<div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" '+(this.title?'title=\"'+this.title+'\"':\"\")+' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">'+(this.showIcon?'<div class=\"edui-box edui-icon\"></div>':\"\")+(this.showText?'<div class=\"edui-box edui-label\">'+this.label+\"</div>\":\"\")+\"</div>\"+\"</div>\"+\"</div></div>\"},postRender:function(){this.Stateful_postRender();this.setDisabled(this.disabled)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}},_onClick:function(){if(!this.isDisabled()){this.fireEvent(\"click\")}},setTitle:function(text){var label=this.getDom(\"label\");label.innerHTML=text}};utils.inherits(Button,UIBase);utils.extend(Button.prototype,Stateful)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,SplitButton=baidu.editor.ui.SplitButton=function(options){this.initOptions(options);this.initSplitButton()};SplitButton.prototype={popup:null,uiName:\"splitbutton\",title:\"\",initSplitButton:function(){this.initUIBase();this.Stateful_init();var me=this;if(this.popup!=null){var popup=this.popup;this.popup=null;this.setPopup(popup)}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){this.Stateful_postRender();this._UIBase_postRender()},setPopup:function(popup){if(this.popup===popup)return;if(this.popup!=null){this.popup.dispose()}popup.addListener(\"show\",utils.bind(this._onPopupShow,this));popup.addListener(\"hide\",utils.bind(this._onPopupHide,this));popup.addListener(\"postrender\",utils.bind(function(){popup.getDom(\"body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.popup.id+'_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:'+(uiUtils.getClientRect(this.getDom()).width+20)+'px\"></div>'));popup.getDom().className+=\" \"+this.className},this));this.popup=popup},_onPopupShow:function(){this.addState(\"opened\")},_onPopupHide:function(){this.removeState(\"opened\")},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+\"<div \"+(this.title?'title=\"'+this.title+'\"':\"\")+' id=\"##_state\" stateful><div class=\"%%-body\">'+'<div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\">'+'<div class=\"edui-box edui-icon\"></div>'+\"</div>\"+'<div class=\"edui-box edui-splitborder\"></div>'+'<div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div>'+\"</div></div></div>\"},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top-=this.popup.SHADOW_RADIUS;rect.height+=this.popup.SHADOW_RADIUS;this.popup.showAnchorRect(rect)},_onArrowClick:function(event,el){if(!this.isDisabled()){this.showPopup()}},_onButtonClick:function(){if(!this.isDisabled()){this.fireEvent(\"buttonclick\")}}};utils.inherits(SplitButton,UIBase);utils.extend(SplitButton.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,ColorPicker=baidu.editor.ui.ColorPicker,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,ColorButton=baidu.editor.ui.ColorButton=function(options){this.initOptions(options);this.initColorButton()};ColorButton.prototype={initColorButton:function(){var me=this;this.popup=new Popup({content:new ColorPicker({noColorText:me.editor.getLang(\"clearColor\"),editor:me.editor,onpickcolor:function(t,color){me._onPickColor(color)},onpicknocolor:function(t,color){me._onPickNoColor(color)}}),editor:me.editor});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.getDom(\"button_body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.id+'_colorlump\" class=\"edui-colorlump\"></div>'));this.getDom().className+=\" edui-colorbutton\"},setColor:function(color){this.getDom(\"colorlump\").style.backgroundColor=color;this.color=color},_onPickColor:function(color){if(this.fireEvent(\"pickcolor\",color)!==false){this.setColor(color);this.popup.hide()}},_onPickNoColor:function(color){if(this.fireEvent(\"picknocolor\")!==false){this.popup.hide()}}};utils.inherits(ColorButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,TablePicker=baidu.editor.ui.TablePicker,SplitButton=baidu.editor.ui.SplitButton,TableButton=baidu.editor.ui.TableButton=function(options){this.initOptions(options);this.initTableButton()};TableButton.prototype={initTableButton:function(){var me=this;this.popup=new Popup({content:new TablePicker({editor:me.editor,onpicktable:function(t,numCols,numRows){me._onPickTable(numCols,numRows)}}),editor:me.editor});this.initSplitButton()},_onPickTable:function(numCols,numRows){if(this.fireEvent(\"picktable\",numCols,numRows)!==false){this.popup.hide()}}};utils.inherits(TableButton,SplitButton)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase;var AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker=function(options){this.initOptions(options);this.initAutoTypeSetPicker()};AutoTypeSetPicker.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this.editor,opt=me.options.autotypeset,lang=me.getLang(\"autoTypeSet\");var textAlignInputName=\"textAlignValue\"+me.uid,imageBlockInputName=\"imageBlockLineValue\"+me.uid,symbolConverInputName=\"symbolConverValue\"+me.uid;return'<div id=\"##\" class=\"edui-autotypesetpicker %%\">'+'<div class=\"edui-autotypesetpicker-body\">'+\"<table >\"+'<tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" '+(opt[\"mergeEmptyline\"]?\"checked\":\"\")+\">\"+lang.mergeLine+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" '+(opt[\"removeEmptyline\"]?\"checked\":\"\")+\">\"+lang.delLine+\"</td></tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" '+(opt[\"removeClass\"]?\"checked\":\"\")+\">\"+lang.removeFormat+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" '+(opt[\"indent\"]?\"checked\":\"\")+\">\"+lang.indent+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"textAlign\" '+(opt[\"textAlign\"]?\"checked\":\"\")+\">\"+lang.alignment+\"</td>\"+'<td colspan=\"2\" id=\"'+textAlignInputName+'\">'+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"left\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"center\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"right\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" '+(opt[\"imageBlockLine\"]?\"checked\":\"\")+\">\"+lang.imageFloat+\"</td>\"+'<td nowrap id=\"'+imageBlockInputName+'\">'+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"none\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"none\"?\"checked\":\"\")+\">\"+me.getLang(\"default\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"left\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"center\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"right\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" '+(opt[\"clearFontSize\"]?\"checked\":\"\")+\">\"+lang.removeFontsize+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" '+(opt[\"clearFontFamily\"]?\"checked\":\"\")+\">\"+lang.removeFontFamily+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" '+(opt[\"removeEmptyNode\"]?\"checked\":\"\")+\">\"+lang.removeHtml+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" '+(opt[\"pasteFilter\"]?\"checked\":\"\")+\">\"+lang.pasteFilter+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"symbolConver\" '+(opt[\"bdc2sb\"]||opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.symbol+\"</td>\"+'<td id=\"'+symbolConverInputName+'\">'+'<input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" '+(opt[\"bdc2sb\"]?\"checked\":\"\")+\">\"+lang.bdc2sb+'<input type=\"radio\" name=\"bdc\" value=\"tobdc\" '+(opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.tobdc+\"\"+\"</td>\"+'<td nowrap align=\"right\"><button >'+lang.run+\"</button></td>\"+\"</tr>\"+\"</table>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render};utils.inherits(AutoTypeSetPicker,UIBase)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker,SplitButton=baidu.editor.ui.SplitButton,AutoTypeSetButton=baidu.editor.ui.AutoTypeSetButton=function(options){this.initOptions(options);this.initAutoTypeSetButton()};function getPara(me){var opt={},cont=me.getDom(),editorId=me.editor.uid,inputType=null,attrName=null,ipts=domUtils.getElementsByTagName(cont,\"input\");for(var i=ipts.length-1,ipt;ipt=ipts[i--];){inputType=ipt.getAttribute(\"type\");if(inputType==\"checkbox\"){attrName=ipt.getAttribute(\"name\");opt[attrName]&&delete opt[attrName];if(ipt.checked){var attrValue=document.getElementById(attrName+\"Value\"+editorId);if(attrValue){if(/input/gi.test(attrValue.tagName)){opt[attrName]=attrValue.value}else{var iptChilds=attrValue.getElementsByTagName(\"input\");for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){if(iptchild.checked){opt[attrName]=iptchild.value;break}}}}else{opt[attrName]=true}}else{opt[attrName]=false}}else{opt[ipt.getAttribute(\"value\")]=ipt.checked}}var selects=domUtils.getElementsByTagName(cont,\"select\");for(var i=0,si;si=selects[i++];){var attr=si.getAttribute(\"name\");opt[attr]=opt[attr]?si.value:\"\"}utils.extend(me.editor.options.autotypeset,opt);me.editor.setPreferences(\"autotypeset\",opt)}AutoTypeSetButton.prototype={initAutoTypeSetButton:function(){var me=this;this.popup=new Popup({content:new AutoTypeSetPicker({editor:me.editor}),editor:me.editor,hide:function(){if(!this._hidden&&this.getDom()){getPara(this);this.getDom().style.display=\"none\";this._hidden=true;this.fireEvent(\"hide\")}}});var flag=0;this.popup.addListener(\"postRenderAfter\",function(){var popupUI=this;if(flag)return;var cont=this.getDom(),btn=cont.getElementsByTagName(\"button\")[0];btn.onclick=function(){getPara(popupUI);me.editor.execCommand(\"autotypeset\");popupUI.hide()};domUtils.on(cont,\"click\",function(e){var target=e.target||e.srcElement,editorId=me.editor.uid;if(target&&target.tagName==\"INPUT\"){if(target.name==\"imageBlockLine\"||target.name==\"textAlign\"||target.name==\"symbolConver\"){var checked=target.checked,radioTd=document.getElementById(target.name+\"Value\"+editorId),radios=radioTd.getElementsByTagName(\"input\"),defalutSelect={imageBlockLine:\"none\",textAlign:\"left\",symbolConver:\"tobdc\"};for(var i=0;i<radios.length;i++){if(checked){if(radios[i].value==defalutSelect[target.name]){radios[i].checked=\"checked\"}}else{radios[i].checked=false}}}if(target.name==\"imageBlockLineValue\"+editorId||target.name==\"textAlignValue\"+editorId||target.name==\"bdc\"){var checkboxs=target.parentNode.previousSibling.getElementsByTagName(\"input\");checkboxs&&(checkboxs[0].checked=true)}getPara(popupUI)}});flag=1});this.initSplitButton()}};utils.inherits(AutoTypeSetButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,UIBase=baidu.editor.ui.UIBase;var CellAlignPicker=baidu.editor.ui.CellAlignPicker=function(options){this.initOptions(options);this.initSelected();this.initCellAlignPicker()};CellAlignPicker.prototype={initSelected:function(){var status={valign:{top:0,middle:1,bottom:2},align:{left:0,center:1,right:2},count:3},result=-1;if(this.selected){this.selectedIndex=status.valign[this.selected.valign]*status.count+status.align[this.selected.align]}},initCellAlignPicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){var alignType=[\"left\",\"center\",\"right\"],COUNT=9,tempClassName=null,tempIndex=-1,tmpl=[];for(var i=0;i<COUNT;i++){tempClassName=this.selectedIndex===i?' class=\"edui-cellalign-selected\" ':\"\";tempIndex=i%3;tempIndex===0&&tmpl.push(\"<tr>\");tmpl.push('<td index=\"'+i+'\" '+tempClassName+' stateful><div class=\"edui-icon edui-'+alignType[tempIndex]+'\"></div></td>');tempIndex===2&&tmpl.push(\"</tr>\")}return'<div id=\"##\" class=\"edui-cellalignpicker %%\">'+'<div class=\"edui-cellalignpicker-body\">'+'<table onclick=\"$$._onClick(event);\">'+tmpl.join(\"\")+\"</table>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},_onClick:function(evt){var target=evt.target||evt.srcElement;if(/icon/.test(target.className)){this.items[target.parentNode.getAttribute(\"index\")].onclick();Popup.postHide(evt)}},_UIBase_render:UIBase.prototype.render};utils.inherits(CellAlignPicker,UIBase);utils.extend(CellAlignPicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,Stateful=baidu.editor.ui.Stateful,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var PastePicker=baidu.editor.ui.PastePicker=function(options){this.initOptions(options);this.initPastePicker()};PastePicker.prototype={initPastePicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div>'+'<div class=\"edui-pastecontainer\">'+'<div class=\"edui-title\">'+this.editor.getLang(\"pasteOpt\")+\"</div>\"+'<div class=\"edui-button\">'+'<div title=\"'+this.editor.getLang(\"pasteSourceFormat\")+'\" onclick=\"$$.format(false)\" stateful>'+'<div class=\"edui-richtxticon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"tagFormat\")+'\" onclick=\"$$.format(2)\" stateful>'+'<div class=\"edui-tagicon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"pasteTextFormat\")+'\" onclick=\"$$.format(true)\" stateful>'+'<div class=\"edui-plaintxticon\"></div></div>'+\"</div>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},format:function(param){this.editor.ui._isTransfer=true;this.editor.fireEvent(\"pasteTransfer\",param)},_onClick:function(cur){var node=domUtils.getNextDomNode(cur),screenHt=uiUtils.getViewportRect().height,subPop=uiUtils.getClientRect(node);if(subPop.top+subPop.height>screenHt)node.style.top=-subPop.height-cur.offsetHeight+\"px\";else node.style.top=\"\";if(/hidden/gi.test(domUtils.getComputedStyle(node,\"visibility\"))){node.style.visibility=\"visible\";domUtils.addClass(cur,\"edui-state-opened\")}else{node.style.visibility=\"hidden\";domUtils.removeClasses(cur,\"edui-state-opened\")}},_UIBase_render:UIBase.prototype.render};utils.inherits(PastePicker,UIBase);utils.extend(PastePicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Toolbar=baidu.editor.ui.Toolbar=function(options){this.initOptions(options);this.initToolbar()};Toolbar.prototype={items:null,initToolbar:function(){this.items=this.items||[];this.initUIBase()},add:function(item,index){if(index===undefined){this.items.push(item)}else{this.items.splice(index,0,item)}},getHtmlTpl:function(){var buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}return'<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">'+buff.join(\"\")+\"</div>\"},postRender:function(){var box=this.getDom();for(var i=0;i<this.items.length;i++){this.items[i].postRender()}uiUtils.makeUnselectable(box)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}}};utils.inherits(Toolbar,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,QuickOperate=baidu.editor.ui.QuickOperate=function(options){this.initOptions(options)};QuickOperate.prototype={uiName:\"quick-operate\",_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){return['<div class=\"edui-quick-operate\">',' <div class=\"edui-quick-operate-status\">','   <div class=\"edui-quick-operate-icon\"><i class=\"icon icon-image\"></i></div>','   <div class=\"edui-quick-operate-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" data-icon=\"DragOutlined\"><path d=\"M8.25 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm0 7.25a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm1.75 5.5a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0ZM14.753 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5ZM16.5 12a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0Zm-1.747 9a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Z\" fill=\"currentColor\"></path></svg></div>',\" </div>\",' <div class=\"edui-quick-operate-menu\">','   <div class=\"item\"><i class=\"icon icon-image\"></i> 删除</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 左对齐</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 右对齐</div>',\" </div>\",\"</div>\"].join(\"\")},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}},dispose:function(){this.destroy()}};utils.inherits(QuickOperate,Popup)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,Menu=baidu.editor.ui.Menu=function(options){this.initOptions(options);this.initMenu()};var menuSeparator={renderHtml:function(){return'<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>'},postRender:function(){},queryAutoHide:function(){return true}};Menu.prototype={items:null,uiName:\"menu\",initMenu:function(){this.items=this.items||[];this.initPopup();this.initItems()},initItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item==\"-\"){this.items[i]=this.getSeparator()}else if(!(item instanceof MenuItem)){item.editor=this.editor;item.theme=this.editor.options.theme;this.items[i]=this.createItem(item)}}},getSeparator:function(){return menuSeparator},createItem:function(item){item.menu=this;return new MenuItem(item)},_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(this.items.length==0){return this._Popup_getContentHtmlTpl()}var buff=[];for(var i=0;i<this.items.length;i++){var item=this.items[i];buff[i]=item.renderHtml()}return'<div class=\"%%-body\">'+buff.join(\"\")+\"</div>\"},_Popup_postRender:Popup.prototype.postRender,postRender:function(){var me=this;for(var i=0;i<this.items.length;i++){var item=this.items[i];item.ownerMenu=this;item.postRender()}domUtils.on(this.getDom(),\"mouseover\",function(evt){evt=evt||event;var rel=evt.relatedTarget||evt.fromElement;var el=me.getDom();if(!uiUtils.contains(el,rel)&&el!==rel){me.fireEvent(\"over\")}});this._Popup_postRender()},queryAutoHide:function(el){if(el){if(uiUtils.contains(this.getDom(),el)){return false}for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item.queryAutoHide(el)===false){return false}}}},clearItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];clearTimeout(item._showingTimer);clearTimeout(item._closingTimer);if(item.subMenu){item.subMenu.destroy()}}this.items=[]},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}this.clearItems()},dispose:function(){this.destroy()}};utils.inherits(Menu,Popup);var MenuItem=baidu.editor.ui.MenuItem=function(options){this.initOptions(options);this.initUIBase();this.Stateful_init();if(this.subMenu&&!(this.subMenu instanceof Menu)){if(options.className&&options.className.indexOf(\"aligntd\")!=-1){var me=this;this.subMenu.selected=this.editor.queryCommandValue(\"cellalignment\");this.subMenu=new Popup({content:new CellAlignPicker(this.subMenu),parentMenu:me,editor:me.editor,destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}}});this.subMenu.addListener(\"postRenderAfter\",function(){domUtils.on(this.getDom(),\"mouseover\",function(){me.addState(\"opened\")})})}else{this.subMenu=new Menu(this.subMenu)}}};MenuItem.prototype={label:\"\",subMenu:null,ownerMenu:null,uiName:\"menuitem\",alwalysHoverable:true,getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\">'+'<div class=\"%%-body\">'+this.renderLabelHtml()+\"</div>\"+\"</div>\"},postRender:function(){var me=this;this.addListener(\"over\",function(){me.ownerMenu.fireEvent(\"submenuover\",me);if(me.subMenu){me.delayShowSubMenu()}});if(this.subMenu){this.getDom().className+=\" edui-hassubmenu\";this.subMenu.render();this.addListener(\"out\",function(){me.delayHideSubMenu()});this.subMenu.addListener(\"over\",function(){clearTimeout(me._closingTimer);me._closingTimer=null;me.addState(\"opened\")});this.ownerMenu.addListener(\"hide\",function(){me.hideSubMenu()});this.ownerMenu.addListener(\"submenuover\",function(t,subMenu){if(subMenu!==me){me.delayHideSubMenu()}});this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide;this.subMenu.queryAutoHide=function(el){if(el&&uiUtils.contains(me.getDom(),el)){return false}return this._bakQueryAutoHide(el)}}this.getDom().style.tabIndex=\"-1\";uiUtils.makeUnselectable(this.getDom());this.Stateful_postRender()},delayShowSubMenu:function(){var me=this;if(!me.isDisabled()){me.addState(\"opened\");clearTimeout(me._showingTimer);clearTimeout(me._closingTimer);me._closingTimer=null;me._showingTimer=setTimeout(function(){me.showSubMenu()},250)}},delayHideSubMenu:function(){var me=this;if(!me.isDisabled()){me.removeState(\"opened\");clearTimeout(me._showingTimer);if(!me._closingTimer){me._closingTimer=setTimeout(function(){if(!me.hasState(\"opened\")){me.hideSubMenu()}me._closingTimer=null},400)}}},renderLabelHtml:function(){return'<div class=\"edui-arrow\"></div>'+'<div class=\"edui-box edui-icon\"></div>'+'<div class=\"edui-box edui-label %%-label\">'+(this.label||\"\")+\"</div>\"},getStateDom:function(){return this.getDom()},queryAutoHide:function(el){if(this.subMenu&&this.hasState(\"opened\")){return this.subMenu.queryAutoHide(el)}},_onClick:function(event,this_){if(this.hasState(\"disabled\"))return;if(this.fireEvent(\"click\",event,this_)!==false){if(this.subMenu){this.showSubMenu()}else{Popup.postHide(event)}}},showSubMenu:function(){var rect=uiUtils.getClientRect(this.getDom());rect.right-=5;rect.left+=2;rect.width-=7;rect.top-=4;rect.bottom+=4;rect.height+=8;this.subMenu.showAnchorRect(rect,true,true)},hideSubMenu:function(){this.subMenu.hide()}};utils.inherits(MenuItem,UIBase);utils.extend(MenuItem.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,Combox=baidu.editor.ui.Combox=function(options){this.initOptions(options);this.initCombox()};Combox.prototype={uiName:\"combox\",onbuttonclick:function(){this.showPopup()},initCombox:function(){var me=this;this.items=this.items||[];for(var i=0;i<this.items.length;i++){var item=this.items[i];item.uiName=\"listitem\";item.index=i;item.onclick=function(){me.selectByIndex(this.index)}}this.popup=new Menu({items:this.items,uiName:\"list\",editor:this.editor,captureWheel:true,combox:this});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.setLabel(this.label||\"\");this.setValue(this.initValue||\"\")},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top+=1;rect.bottom-=1;rect.height-=2;this.popup.showAnchorRect(rect)},getValue:function(){return this.value},setValue:function(value){var index=this.indexByValue(value);if(index!=-1){this.selectedIndex=index;this.setLabel(this.items[index].label);this.value=this.items[index].value}else{this.selectedIndex=-1;this.setLabel(this.getLabelForUnknowValue(value));this.value=value}},setLabel:function(label){this.getDom(\"button_body\").innerHTML=label;this.label=label},getLabelForUnknowValue:function(value){return value},indexByValue:function(value){for(var i=0;i<this.items.length;i++){if(value==this.items[i].value){return i}}return-1},getItem:function(index){return this.items[index]},selectByIndex:function(index){if(index<this.items.length&&this.fireEvent(\"select\",index)!==false){this.selectedIndex=index;this.value=this.items[index].value;this.setLabel(this.items[index].label)}}};utils.inherits(Combox,SplitButton)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,Mask=baidu.editor.ui.Mask,UIBase=baidu.editor.ui.UIBase,Button=baidu.editor.ui.Button,Dialog=baidu.editor.ui.Dialog=function(options){if(options.name){var name=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+name}if(cssRules){options.cssRules=\".edui-for-\"+name+\" .edui-dialog-content  {\"+cssRules+\"}\"}}this.initOptions(utils.extend({autoReset:true,draggable:true,onok:function(){},oncancel:function(){},onclose:function(t,ok){return ok?this.onok():this.oncancel()},holdScroll:false},options));this.initDialog()};var modalMask;var dragMask;var activeDialog;Dialog.prototype={draggable:false,uiName:\"dialog\",initDialog:function(){var me=this,theme=this.editor.options.theme;if(this.cssRules){this.cssRules=\".edui-\"+theme+\" \"+this.cssRules;utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}this.initUIBase();this.modalMask=modalMask||(modalMask=new Mask({className:\"edui-dialog-modalmask\",theme:theme,onclick:function(){activeDialog&&activeDialog.close(false)}}));this.dragMask=dragMask||(dragMask=new Mask({className:\"edui-dialog-dragmask\",theme:theme}));this.closeButton=new Button({className:\"edui-dialog-closebutton\",title:me.closeDialog,theme:theme,onclick:function(){me.close(false)}});this.fullscreen&&this.initResizeEvent();if(this.buttons){for(var i=0;i<this.buttons.length;i++){if(!(this.buttons[i]instanceof Button)){this.buttons[i]=new Button(utils.extend(this.buttons[i],{editor:this.editor},true))}}}},initResizeEvent:function(){var me=this;domUtils.on(window,\"resize\",function(){if(me._hidden||me._hidden===undefined){return}if(me.__resizeTimer){window.clearTimeout(me.__resizeTimer)}me.__resizeTimer=window.setTimeout(function(){me.__resizeTimer=null;var dialogWrapNode=me.getDom(),contentNode=me.getDom(\"content\"),wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode),vpRect=uiUtils.getViewportRect();contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";me.fireEvent(\"resize\")},100)})},fitSize:function(){var popBodyEl=this.getDom(\"body\");var $foot=popBodyEl.querySelector(\".edui-dialog-foot\");var heightWithoutBody=70;if(!$foot){heightWithoutBody=30}var size=this.mesureSize();var winSize=uiUtils.getViewportRect();var width=size.width;var height=size.height-heightWithoutBody;var maxWidth=winSize.width-2;var maxHeight=winSize.height-heightWithoutBody-2;if(width>maxWidth){height=height*maxWidth/width;width=maxWidth}if(height>maxHeight){width=width*maxHeight/height;height=maxHeight}var scale=width/size.width;var $content=popBodyEl.querySelector(\".edui-dialog-content\");if(!$content.dataset.dialogScaled){$content.dataset.dialogScaled=true;$content.style.width=width+\"px\";$content.style.height=height+\"px\";var $iframe=popBodyEl.querySelector(\".edui-dialog-content iframe\");$iframe.style.width=size.width+\"px\";$iframe.style.height=size.height-heightWithoutBody+\"px\";$iframe.style.transformOrigin=\"0 0\";$iframe.style.transform=\"scale(\"+scale+\")\";size.width=width;size.height=height+heightWithoutBody}popBodyEl.style.width=size.width+\"px\";popBodyEl.style.height=size.height+\"px\";return size},safeSetOffset:function(offset){var me=this;var el=me.getDom();var vpRect=uiUtils.getViewportRect();var rect=uiUtils.getClientRect(el);var left=offset.left;if(left+rect.width>vpRect.right){left=vpRect.right-rect.width}var top=offset.top;if(top+rect.height>vpRect.bottom){top=vpRect.bottom-rect.height}el.style.left=Math.max(left,0)+\"px\";el.style.top=Math.max(top,0)+\"px\"},showAtCenter:function(){var vpRect=uiUtils.getViewportRect();if(!this.fullscreen){this.getDom().style.display=\"\";var popSize=this.fitSize();var titleHeight=this.getDom(\"titlebar\").offsetHeight|0;var left=vpRect.width/2-popSize.width/2;var top=vpRect.height/2-(popSize.height-titleHeight)/2-titleHeight;var popEl=this.getDom();this.safeSetOffset({left:Math.max(left|0,0),top:Math.max(top|0,0)});if(!domUtils.hasClass(popEl,\"edui-state-centered\")){popEl.className+=\" edui-state-centered\"}}else{var dialogWrapNode=this.getDom(),contentNode=this.getDom(\"content\");dialogWrapNode.style.display=\"block\";var wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode);dialogWrapNode.style.left=\"-100000px\";contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";dialogWrapNode.style.left=0;this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}};document.documentElement.style.overflowX=\"hidden\";document.documentElement.style.overflowY=\"hidden\";document.body.style.overflowX=\"hidden\";document.body.style.overflowY=\"hidden\"}this._show()},getContentHtml:function(){var contentHtml=\"\";if(typeof this.content==\"string\"){contentHtml=this.content}else if(this.iframeUrl){contentHtml='<span id=\"'+this.id+'_contmask\" class=\"dialogcontmask\"></span><iframe id=\"'+this.id+'_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"'+this.iframeUrl+'\"></iframe>'}return contentHtml},getHtmlTpl:function(){var footHtml=\"\";if(this.buttons){var buff=[];for(var i=0;i<this.buttons.length;i++){buff[i]=this.buttons[i].renderHtml()}footHtml='<div class=\"%%-foot\">'+'<div id=\"##_buttons\" class=\"%%-buttons\">'+buff.join(\"\")+\"</div>\"+\"</div>\"}return'<div id=\"##\" class=\"%%\"><div '+(!this.fullscreen?'class=\"%%\"':'class=\"%%-wrap edui-dialog-fullscreen-flag\"')+'><div id=\"##_body\" class=\"%%-body\">'+'<div class=\"%%-shadow\"></div>'+'<div id=\"##_titlebar\" class=\"%%-titlebar\">'+'<div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\">'+'<span class=\"%%-caption\">'+(this.title||\"\")+\"</span>\"+\"</div>\"+this.closeButton.renderHtml()+\"</div>\"+'<div id=\"##_content\" class=\"%%-content\">'+(this.autoReset?\"\":this.getContentHtml())+\"</div>\"+footHtml+\"</div></div></div>\"},postRender:function(){if(!this.modalMask.getDom()){this.modalMask.render();this.modalMask.hide()}if(!this.dragMask.getDom()){this.dragMask.render();this.dragMask.hide()}var me=this;this.addListener(\"show\",function(){me.modalMask.show(this.getDom().style.zIndex-2)});this.addListener(\"hide\",function(){me.modalMask.hide()});if(this.buttons){for(var i=0;i<this.buttons.length;i++){this.buttons[i].postRender()}}domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me.safeSetOffset(uiUtils.getClientRect(me.getDom()))}})});this._hide()},mesureSize:function(){var body=this.getDom(\"body\");var width=uiUtils.getClientRect(this.getDom(\"content\")).width;var dialogBodyStyle=body.style;dialogBodyStyle.width=width;return uiUtils.getClientRect(body)},_onTitlebarMouseDown:function(evt,el){if(this.draggable){var rect;var vpRect=uiUtils.getViewportRect();var me=this;uiUtils.startDrag(evt,{ondragstart:function(){rect=uiUtils.getClientRect(me.getDom());me.getDom(\"contmask\").style.visibility=\"visible\";me.dragMask.show(me.getDom().style.zIndex-1)},ondragmove:function(x,y){var left=rect.left+x;var top=rect.top+y;me.safeSetOffset({left:left,top:top})},ondragstop:function(){me.getDom(\"contmask\").style.visibility=\"hidden\";domUtils.removeClasses(me.getDom(),[\"edui-state-centered\"]);me.dragMask.hide()}})}},reset:function(){this.getDom(\"content\").innerHTML=this.getContentHtml();this.fireEvent(\"dialogafterreset\")},_show:function(){if(this._hidden){this.getDom().style.display=\"\";this.editor.container.style.zIndex&&(this.getDom().style.zIndex=this.editor.container.style.zIndex*1+10);this._hidden=false;this.fireEvent(\"show\");baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4}},isHidden:function(){return this._hidden},_hide:function(){if(!this._hidden){var wrapNode=this.getDom();wrapNode.style.display=\"none\";wrapNode.style.zIndex=\"\";wrapNode.style.width=\"\";wrapNode.style.height=\"\";this._hidden=true;this.fireEvent(\"hide\")}},open:function(){if(this.autoReset){try{this.reset()}catch(e){this.render();this.open()}}this.showAtCenter();if(this.iframeUrl){try{this.getDom(\"iframe\").focus()}catch(ex){}}activeDialog=this},_onCloseButtonClick:function(evt,el){this.close(false)},close:function(ok){if(this.fireEvent(\"close\",ok)!==false){if(this.fullscreen){document.documentElement.style.overflowX=this._originalContext.html.overflowX;document.documentElement.style.overflowY=this._originalContext.html.overflowY;document.body.style.overflowX=this._originalContext.body.overflowX;document.body.style.overflowY=this._originalContext.body.overflowY;delete this._originalContext}this._hide();var content=this.getDom(\"content\");var iframe=this.getDom(\"iframe\");if(content&&iframe){var doc=iframe.contentDocument||iframe.contentWindow.document;doc&&(doc.body.innerHTML=\"\");domUtils.remove(content)}}}};utils.inherits(Dialog,UIBase)})();(function(){var utils=baidu.editor.utils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,MenuButton=baidu.editor.ui.MenuButton=function(options){this.initOptions(options);this.initMenuButton()};MenuButton.prototype={initMenuButton:function(){var me=this;this.uiName=\"menubutton\";this.popup=new Menu({items:me.items,className:me.className,editor:me.editor});this.popup.addListener(\"show\",function(){var list=this;for(var i=0;i<list.items.length;i++){list.items[i].removeState(\"checked\");if(list.items[i].value==me._value){list.items[i].addState(\"checked\");this.value=me._value}}});this.initSplitButton()},setValue:function(value){this._value=value}};utils.inherits(MenuButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,MultiMenuPop=baidu.editor.ui.MultiMenuPop=function(options){this.initOptions(options);this.initMultiMenu()};MultiMenuPop.prototype={initMultiMenu:function(){var me=this;this.popup=new Popup({content:\"\",editor:me.editor,iframe_rendered:false,onshow:function(){if(!this.iframe_rendered){this.iframe_rendered=true;this.getDom(\"content\").innerHTML='<iframe id=\"'+me.id+'_iframe\" src=\"'+me.iframeUrl+'\" frameborder=\"0\"></iframe>';me.editor.container.style.zIndex&&(this.getDom().style.zIndex=me.editor.container.style.zIndex*1+1)}}});this.onbuttonclick=function(){this.showPopup()};this.initSplitButton()}};utils.inherits(MultiMenuPop,SplitButton)})();(function(){var UI=baidu.editor.ui,UIBase=UI.UIBase,uiUtils=UI.uiUtils,utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils;var allMenus=[],timeID,isSubMenuShow=false;var ShortCutMenu=UI.ShortCutMenu=function(options){this.initOptions(options);this.initShortCutMenu()};ShortCutMenu.postHide=hideAllMenu;ShortCutMenu.prototype={isHidden:true,SPACE:5,initShortCutMenu:function(){this.items=this.items||[];this.initUIBase();this.initItems();this.initEvent();allMenus.push(this)},initEvent:function(){var me=this,doc=me.editor.document;me.editor.addListener(\"afterhidepop\",function(){if(!me.isHidden){isSubMenuShow=true}})},initItems:function(){if(utils.isArray(this.items)){for(var i=0,len=this.items.length;i<len;i++){if(\"string\"!==typeof this.items[i]){continue}var item=this.items[i].toLowerCase();if(UI[item]){this.items[i]=new UI[item](this.editor);this.items[i].className+=\" edui-short-cut-sub-menu \"}}}},setOpacity:function(el,value){if(browser.ie&&browser.version<9){el.style.filter=\"alpha(opacity = \"+parseFloat(value)*100+\");\"}else{el.style.opacity=value}},getSubMenuMark:function(){isSubMenuShow=false;var layerEle=uiUtils.getFixedLayer();var list=domUtils.getElementsByTagName(layerEle,\"div\",function(node){return domUtils.hasClass(node,\"edui-short-cut-sub-menu edui-popup\")});for(var i=0,node;node=list[i++];){if(node.style.display!==\"none\"){isSubMenuShow=true}}return isSubMenuShow},show:function(e,hasContextmenu){var me=this,offset={},el=this.getDom(),fixedlayer=uiUtils.getFixedLayer();for(let item of this.items){if(\"shouldUiShow\"in item){item.uiShow(item.shouldUiShow())}}function setPos(offset){if(offset.left<0){offset.left=0}if(offset.top<0){offset.top=0}el.style.cssText=\"position:absolute;left:\"+offset.left+\"px;top:\"+offset.top+\"px;\"}function setPosByCxtMenu(menu){if(!menu.tagName){menu=menu.getDom()}offset.left=parseInt(menu.style.left);offset.top=parseInt(menu.style.top);offset.top-=el.offsetHeight+15;setPos(offset)}me.eventType=e.type;el.style.cssText=\"display:block;left:-9999px\";offset=uiUtils.getViewportOffsetByEvent(e);offset.top-=el.offsetHeight+me.SPACE;offset.left+=me.SPACE+20;setPos(offset);me.setOpacity(el,1);me.isHidden=false;me.left=e.screenX+el.offsetWidth/2-me.SPACE;me.top=e.screenY-el.offsetHeight/2-me.SPACE;if(me.editor){el.style.zIndex=me.editor.container.style.zIndex*1+10;fixedlayer.style.zIndex=el.style.zIndex-1}},hide:function(){if(this.getDom()){this.getDom().style.display=\"none\"}this.isHidden=true},postRender:function(){if(utils.isArray(this.items)){for(var i=0,item;item=this.items[i++];){item.postRender()}}},getHtmlTpl:function(){var buff;if(utils.isArray(this.items)){buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}buff=buff.join(\"\")}else{buff=this.items}return'<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >'+buff+\"</div>\"}};utils.inherits(ShortCutMenu,UIBase);function hideAllMenu(e){var tgt=e.target||e.srcElement,cur=domUtils.findParent(tgt,function(node){return domUtils.hasClass(node,\"edui-shortcutmenu\")||domUtils.hasClass(node,\"edui-popup\")},true);if(!cur){for(var i=0,menu;menu=allMenus[i++];){menu.hide()}}}domUtils.on(document,\"mousedown\",function(e){hideAllMenu(e)});domUtils.on(window,\"scroll\",function(e){hideAllMenu(e)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Breakline=baidu.editor.ui.Breakline=function(options){this.initOptions(options);this.initSeparator()};Breakline.prototype={uiName:\"Breakline\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return\"<br/>\"}};utils.inherits(Breakline,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Message=baidu.editor.ui.Message=function(options){this.initOptions(options);this.initMessage()};Message.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-message %%\">'+' <div id=\"##_closer\" class=\"edui-message-closer\">×</div>'+' <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-message-content\">'+\"  </div>\"+\" </div>\"+\"</div>\"},reset:function(opt){var me=this;if(!opt.keepshow){clearTimeout(this.timer);me.timer=setTimeout(function(){me.hide()},opt.timeout||4e3)}opt.content!==undefined&&me.setContent(opt.content);opt.type!==undefined&&me.setType(opt.type);me.show()},postRender:function(){var me=this,closer=this.getDom(\"closer\");closer&&domUtils.on(closer,\"click\",function(){me.hide()})},setContent:function(content){this.getDom(\"content\").innerHTML=content},setType:function(type){type=type||\"info\";var body=this.getDom(\"body\");body.className=body.className.replace(/edui-message-type-[\\w-]+/,\"edui-message-type-\"+type)},getContent:function(){return this.getDom(\"content\").innerHTML},getType:function(){var arr=this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);return arr?arr[1]:\"\"},show:function(){this.getDom().style.display=\"block\"},hide:function(){var dom=this.getDom();if(dom){dom.style.display=\"none\";dom.parentNode&&dom.parentNode.removeChild(dom)}}};utils.inherits(Message,UIBase)})();(function(){var utils=baidu.editor.utils;var editorui=baidu.editor.ui;var _Dialog=editorui.Dialog;editorui.buttons={};editorui.Dialog=function(options){var dialog=new _Dialog(options);dialog.addListener(\"hide\",function(){if(dialog.editor){var editor=dialog.editor;try{if(browser.gecko){var y=editor.window.scrollY,x=editor.window.scrollX;editor.body.focus();editor.window.scrollTo(x,y)}else{editor.focus()}}catch(ex){}}});return dialog};var btnCmds=[\"undo\",\"redo\",\"formatmatch\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"touppercase\",\"tolowercase\",\"strikethrough\",\"subscript\",\"superscript\",\"source\",\"indent\",\"outdent\",\"blockquote\",\"pasteplain\",\"pagebreak\",\"selectall\",\"print\",\"horizontal\",\"removeformat\",\"time\",\"date\",\"unlink\",\"insertparagraphbeforetable\",\"insertrow\",\"insertcol\",\"mergeright\",\"mergedown\",\"deleterow\",\"deletecol\",\"splittorows\",\"splittocols\",\"splittocells\",\"mergecells\",\"deletetable\"];for(var i=0,ci;ci=btnCmds[i++];){ci=ci.toLowerCase();editorui[ci]=function(cmd){return function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",onclick:function(){editor.execCommand(cmd)},theme:editor.options.theme,showText:false});switch(cmd){case\"bold\":case\"italic\":case\"underline\":case\"strikethrough\":case\"fontborder\":ui.shouldUiShow=function(cmdInternal){return function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmdInternal)!==UE.constants.STATEFUL.DISABLED}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(cmd);if(state===-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}}(ci)}editorui.cleardoc=function(editor){var ui=new editorui.Button({className:\"edui-for-cleardoc\",title:editor.options.labelMap.cleardoc||editor.getLang(\"labelMap.cleardoc\")||\"\",theme:editor.options.theme,onclick:function(){if(confirm(editor.getLang(\"confirmClear\"))){editor.execCommand(\"cleardoc\")}}});editorui.buttons[\"cleardoc\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"cleardoc\")==-1)});return ui};var imageTypeSet=[\"none\",\"left\",\"center\",\"right\"];for(let value of imageTypeSet){(function(value){editorui[\"image\"+value]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+\"image\"+value,title:editor.options.labelMap[\"image\"+value]||editor.getLang(\"labelMap.\"+\"image\"+value)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(\"imagefloat\",value)},shouldUiShow:function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){return false}return editor.queryCommandState(\"imagefloat\")!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[\"image\"+value]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(\"imagefloat\")===UE.constants.STATEFUL.DISABLED);ui.setChecked(editor.queryCommandValue(\"imagefloat\")===value&&!uiReady)});return ui}})(value)}var typeset={justify:[\"left\",\"right\",\"center\",\"justify\"],directionality:[\"ltr\",\"rtl\"]};for(var p in typeset){(function(cmd,val){for(var i=0,ci;ci=val[i++];){(function(cmd2){editorui[cmd.replace(\"float\",\"\")+cmd2]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd.replace(\"float\",\"\")+cmd2,title:editor.options.labelMap[cmd.replace(\"float\",\"\")+cmd2]||editor.getLang(\"labelMap.\"+cmd.replace(\"float\",\"\")+cmd2)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(cmd,cmd2)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(cmd)==-1);ui.setChecked(editor.queryCommandValue(cmd)==cmd2&&!uiReady)});return ui}})(ci)}})(p,typeset[p])}for(var i=0,ci;ci=[\"backcolor\",\"forecolor\"][i++];){editorui[ci]=function(cmd){return function(editor){var ui=new editorui.ColorButton({className:\"edui-for-\"+cmd,color:\"default\",title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",editor:editor,onpickcolor:function(t,color){editor.execCommand(cmd,color)},onpicknocolor:function(){editor.execCommand(cmd,\"default\");this.setColor(\"transparent\");this.color=\"default\"},onbuttonclick:function(){editor.execCommand(cmd,this.color)},shouldUiShow:function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmd)!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui}}(ci)}var dialogIframeUrlMap={anchor:\"~/dialogs/anchor/anchor.html?2f10d082\",insertimage:\"~/dialogs/image/image.html?33811fba\",link:\"~/dialogs/link/link.html?ccbfcf18\",spechars:\"~/dialogs/spechars/spechars.html?3bbeb696\",searchreplace:\"~/dialogs/searchreplace/searchreplace.html?2cb782d2\",insertvideo:\"~/dialogs/video/video.html?918640f8\",insertaudio:\"~/dialogs/audio/audio.html?d1beccf5\",help:\"~/dialogs/help/help.html?05c0c8bf\",preview:\"~/dialogs/preview/preview.html?5d9a0847\",emotion:\"~/dialogs/emotion/emotion.html?a7bc0989\",wordimage:\"~/dialogs/wordimage/wordimage.html?c29fcf85\",formula:\"~/dialogs/formula/formula.html?9a5a1511\",attachment:\"~/dialogs/attachment/attachment.html?abf97d51\",insertframe:\"~/dialogs/insertframe/insertframe.html?807119a5\",edittip:\"~/dialogs/table/edittip.html?fa0ea189\",edittable:\"~/dialogs/table/edittable.html?134e2f06\",edittd:\"~/dialogs/table/edittd.html?9fe1a06e\",scrawl:\"~/dialogs/scrawl/scrawl.html?81bccab9\",template:\"~/dialogs/template/template.html?3c8090b7\",background:\"~/dialogs/background/background.html?c2bb8b05\",contentimport:\"~/dialogs/contentimport/contentimport.html?e298f77b\"};var dialogBtns={noOk:[\"searchreplace\",\"help\",\"spechars\",\"preview\"],ok:[\"attachment\",\"anchor\",\"link\",\"insertimage\",\"insertframe\",\"wordimage\",\"insertvideo\",\"insertaudio\",\"edittip\",\"edittable\",\"edittd\",\"scrawl\",\"template\",\"formula\",\"background\",\"contentimport\"]};for(var p in dialogBtns){(function(type,vals){for(var i=0,ci;ci=vals[i++];){if(browser.opera&&ci===\"searchreplace\"){continue}(function(cmd){editorui[cmd]=function(editor,iframeUrl,title){iframeUrl=iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd];title=editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\";var dialog;if(iframeUrl){dialog=new editorui.Dialog(utils.extend({iframeUrl:editor.ui.mapUrl(iframeUrl),editor:editor,className:\"edui-for-\"+cmd,title:title,holdScroll:cmd===\"insertimage\",fullscreen:/preview/.test(cmd),closeDialog:editor.getLang(\"closeDialog\")},type===\"ok\"?{buttons:[{className:\"edui-okbutton\",label:editor.getLang(\"ok\"),editor:editor,onclick:function(){dialog.close(true)}},{className:\"edui-cancelbutton\",label:editor.getLang(\"cancel\"),editor:editor,onclick:function(){dialog.close(false)}}]}:{}));editor.ui._dialogs[cmd+\"Dialog\"]=dialog}var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:title,onclick:function(){if(editor.options.toolbarCallback){if(true===editor.options.toolbarCallback(cmd,editor)){return}}if(dialog){switch(cmd){case\"wordimage\":var images=editor.execCommand(\"wordimage\");if(images&&images.length){dialog.render();dialog.open()}break;case\"scrawl\":if(editor.queryCommandState(\"scrawl\")!==-1){dialog.render();dialog.open()}break;default:dialog.render();dialog.open()}}},theme:editor.options.theme,disabled:cmd===\"scrawl\"&&editor.queryCommandState(\"scrawl\")===-1});switch(cmd){case\"insertimage\":case\"formula\":ui.shouldUiShow=function(cmd){return function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(\"formula\"===cmd&&closedNode.getAttribute(\"data-formula-image\")!==null){return true}if(\"insertimage\"===cmd){return true}return false}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var unNeedCheckState={edittable:1};if(cmd in unNeedCheckState)return;var state=editor.queryCommandState(cmd);if(ui.getDom()){ui.setDisabled(state===-1);ui.setChecked(state)}});return ui}})(ci.toLowerCase())}})(p,dialogBtns[p])}editorui.insertcode=function(editor,list,title){list=editor.options[\"insertcode\"]||[];title=editor.options.labelMap[\"insertcode\"]||editor.getLang(\"labelMap.insertcode\")||\"\";var items=[];utils.each(list,function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" >'+(this.label||\"\")+\"</div>\"}})});var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"insertcode\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-insertcode\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"insertcode\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"insertcode\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"insertcode\");if(!value){ui.setValue(title);return}value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontfamily=function(editor,list,title){list=editor.options[\"fontfamily\"]||[];title=editor.options.labelMap[\"fontfamily\"]||editor.getLang(\"labelMap.fontfamily\")||\"\";if(!list.length)return;for(var i=0,ci,items=[];ci=list[i];i++){var langLabel=editor.getLang(\"fontfamily\")[ci.name]||\"\";(function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"font-family:'+utils.unhtml(this.value)+'\">'+(this.label||\"\")+\"</div>\"}})})(ci.label||langLabel,ci.val)}var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"FontFamily\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-fontfamily\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"fontfamily\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontFamily\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"FontFamily\");value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontsize=function(editor,list,title){title=editor.options.labelMap[\"fontsize\"]||editor.getLang(\"labelMap.fontsize\")||\"\";list=list||editor.options[\"fontsize\"]||[];if(!list.length)return;var items=[];for(var i=0;i<list.length;i++){var size=list[i]+\"px\";items.push({label:size,value:size,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:'+this.value+'\">'+(this.label||\"\")+\"</div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,onselect:function(t,index){editor.execCommand(\"FontSize\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},className:\"edui-for-fontsize\"});editorui.buttons[\"fontsize\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontSize\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);ui.setValue(editor.queryCommandValue(\"FontSize\"))}}});return ui};editorui.paragraph=function(editor,list,title){title=editor.options.labelMap[\"paragraph\"]||editor.getLang(\"labelMap.paragraph\")||\"\";list=editor.options[\"paragraph\"]||[];if(utils.isEmptyObject(list))return;var items=[];for(var i in list){items.push({value:i,label:list[i]||editor.getLang(\"paragraph\")[i],theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><span class=\"edui-for-'+this.value+'\">'+(this.label||\"\")+\"</span></div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-paragraph\",onselect:function(t,index){editor.execCommand(\"Paragraph\",this.items[index].value)},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"paragraph\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"Paragraph\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"Paragraph\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.customstyle=function(editor){var list=editor.options[\"customstyle\"]||[],title=editor.options.labelMap[\"customstyle\"]||editor.getLang(\"labelMap.customstyle\")||\"\";if(!list.length)return;var langCs=editor.getLang(\"customstyle\");for(var i=0,items=[],t;t=list[i++];){(function(t){var ck={};ck.label=t.label?t.label:langCs[t.name];ck.style=t.style;ck.className=t.className;ck.tag=t.tag;items.push({label:ck.label,value:ck,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\">'+\"<\"+ck.tag+\" \"+(ck.className?' class=\"'+ck.className+'\"':\"\")+(ck.style?' style=\"'+ck.style+'\"':\"\")+\">\"+ck.label+\"</\"+ck.tag+\">\"+\"</div>\"}})})(t)}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-customstyle\",onselect:function(t,index){editor.execCommand(\"customstyle\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(value){for(var i=0,ti;ti=this.items[i++];){if(ti.label==value){return i-1}}return-1}});editorui.buttons[\"customstyle\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"customstyle\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"customstyle\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.inserttable=function(editor,iframeUrl,title){title=editor.options.labelMap[\"inserttable\"]||editor.getLang(\"labelMap.inserttable\")||\"\";var ui=new editorui.TableButton({editor:editor,title:title,className:\"edui-for-inserttable\",onpicktable:function(t,numCols,numRows){editor.execCommand(\"InsertTable\",{numRows:numRows,numCols:numCols,border:1})},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"inserttable\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"inserttable\")==-1)});return ui};editorui.lineheight=function(editor){var val=editor.options.lineheight||[];if(!val.length)return;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"lineheight\",this.value)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-lineheight\",title:editor.options.labelMap[\"lineheight\"]||editor.getLang(\"labelMap.lineheight\")||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"LineHeight\")||this.value;editor.execCommand(\"LineHeight\",value)}});editorui.buttons[\"lineheight\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"LineHeight\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"LineHeight\");value&&ui.setValue((value+\"\").replace(/cm/,\"\"));ui.setChecked(state)}});return ui};var rowspacings=[\"top\",\"bottom\"];for(var r=0,ri;ri=rowspacings[r++];){(function(cmd){editorui[\"rowspacing\"+cmd]=function(editor){var val=editor.options[\"rowspacing\"+cmd]||[];if(!val.length)return null;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"rowspacing\",this.value,cmd)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-rowspacing\"+cmd,title:editor.options.labelMap[\"rowspacing\"+cmd]||editor.getLang(\"labelMap.rowspacing\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"rowspacing\",cmd)||this.value;editor.execCommand(\"rowspacing\",value,cmd)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"rowspacing\",cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"rowspacing\",cmd);value&&ui.setValue((value+\"\").replace(/%/,\"\"));ui.setChecked(state)}});return ui}})(ri)}var lists=[\"insertorderedlist\",\"insertunorderedlist\"];for(var l=0,cl;cl=lists[l++];){(function(cmd){editorui[cmd]=function(editor){var vals=editor.options[cmd],_onMenuClick=function(){editor.execCommand(cmd,this.value)},items=[];for(var i in vals){items.push({label:vals[i]||editor.getLang()[cmd][i]||\"\",value:i,theme:editor.options.theme,onclick:_onMenuClick})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-\"+cmd,title:editor.getLang(\"labelMap.\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(cmd)||this.value;editor.execCommand(cmd,value)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(cmd);ui.setValue(value);ui.setChecked(state)}});return ui}})(cl)}editorui.fullscreen=function(editor,title){title=editor.options.labelMap[\"fullscreen\"]||editor.getLang(\"labelMap.fullscreen\")||\"\";var ui=new editorui.Button({className:\"edui-for-fullscreen\",title:title,theme:editor.options.theme,onclick:function(){if(editor.ui){editor.ui.setFullScreen(!editor.ui.isFullScreen())}this.setChecked(editor.ui.isFullScreen())}});editorui.buttons[\"fullscreen\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"fullscreen\");ui.setDisabled(state==-1);ui.setChecked(editor.ui.isFullScreen())});return ui};editorui[\"emotion\"]=function(editor,iframeUrl){var cmd=\"emotion\";var ui=new editorui.MultiMenuPop({title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd+\"\")||\"\",editor:editor,className:\"edui-for-\"+cmd,iframeUrl:editor.ui.mapUrl(iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd])});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui};editorui[\"autotypeset\"]=function(editor){var ui=new editorui.AutoTypeSetButton({editor:editor,title:editor.options.labelMap[\"autotypeset\"]||editor.getLang(\"labelMap.autotypeset\")||\"\",className:\"edui-for-autotypeset\",onbuttonclick:function(){editor.execCommand(\"autotypeset\")}});editorui.buttons[\"autotypeset\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"autotypeset\")==-1)});return ui};editorui[\"simpleupload\"]=function(editor){var name=\"simpleupload\",ui=new editorui.Button({className:\"edui-for-\"+name,title:editor.options.labelMap[name]||editor.getLang(\"labelMap.\"+name)||\"\",onclick:function(){},theme:editor.options.theme,showText:false});editorui.buttons[name]=ui;editor.addListener(\"ready\",function(){var b=ui.getDom(\"body\"),iconSpan=b.children[0];editor.fireEvent(\"simpleuploadbtnready\",iconSpan)});editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(name);if(state==-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,domUtils=baidu.editor.dom.domUtils;var nodeStack=[];function EditorUI(options){this.initOptions(options);this.initEditorUI()}EditorUI.prototype={uiName:\"editor\",initEditorUI:function(){this.editor.ui=this;this._dialogs={};this.initUIBase();this._initToolbars();var editor=this.editor,me=this;editor.addListener(\"ready\",function(){editor.getDialog=function(name){return editor.ui._dialogs[name+\"Dialog\"]};domUtils.on(editor.window,\"scroll\",function(evt){baidu.editor.ui.Popup.postHide(evt)});editor.ui._actualFrameWidth=editor.options.initialFrameWidth;UE.browser.ie&&UE.browser.version===6&&editor.container.ownerDocument.execCommand(\"BackgroundImageCache\",false,true);if(editor.options.elementPathEnabled){editor.ui.getDom(\"elementpath\").innerHTML='<div class=\"edui-editor-breadcrumb\">'+editor.getLang(\"elementPathTip\")+\":</div>\"}if(editor.options.wordCount){function countFn(){setCount(editor,me);domUtils.un(editor.document,\"click\",arguments.callee)}domUtils.on(editor.document,\"click\",countFn);editor.ui.getDom(\"wordcount\").innerHTML=editor.getLang(\"wordCountTip\")}editor.ui._scale();if(editor.options.scaleEnabled){if(editor.autoHeightEnabled){editor.disableAutoHeight()}me.enableScale()}else{me.disableScale()}if(!editor.options.elementPathEnabled&&!editor.options.wordCount&&!editor.options.scaleEnabled){editor.ui.getDom(\"elementpath\").style.display=\"none\";editor.ui.getDom(\"wordcount\").style.display=\"none\";editor.ui.getDom(\"scale\").style.display=\"none\"}if(!editor.selection.isFocus())return;editor.fireEvent(\"selectionchange\",false,true)});editor.addListener(\"mousedown\",function(t,evt){var el=evt.target||evt.srcElement;baidu.editor.ui.Popup.postHide(evt,el);baidu.editor.ui.ShortCutMenu.postHide(evt)});editor.addListener(\"delcells\",function(){if(UE.ui[\"edittip\"]){new UE.ui[\"edittip\"](editor)}editor.getDialog(\"edittip\").open()});var pastePop,isPaste=false,timer;editor.addListener(\"afterpaste\",function(){if(editor.queryCommandState(\"pasteplain\"))return;if(baidu.editor.ui.PastePicker){pastePop=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:editor}),editor:editor,className:\"edui-wordpastepop\"});pastePop.render()}isPaste=true});editor.addListener(\"afterinserthtml\",function(){clearTimeout(timer);timer=setTimeout(function(){if(pastePop&&(isPaste||editor.ui._isTransfer)){if(pastePop.isHidden()){var span=domUtils.createElement(editor.document,\"span\",{style:\"line-height:0px;\",innerHTML:\"\\ufeff\"}),range=editor.selection.getRange();range.insertNode(span);var tmp=getDomNode(span,\"firstChild\",\"previousSibling\");tmp&&pastePop.showAnchor(tmp.nodeType==3?tmp.parentNode:tmp);domUtils.remove(span)}else{pastePop.show()}delete editor.ui._isTransfer;isPaste=false}},200)});editor.addListener(\"contextmenu\",function(t,evt){baidu.editor.ui.Popup.postHide(evt)});editor.addListener(\"keydown\",function(t,evt){if(pastePop)pastePop.dispose(evt);var keyCode=evt.keyCode||evt.which;if(evt.altKey&&keyCode==90){UE.ui.buttons[\"fullscreen\"].onclick()}});editor.addListener(\"wordcount\",function(type){setCount(this,me)});function setCount(editor,ui){editor.setOpt({wordCount:true,maximumWords:1e4,wordCountMsg:editor.options.wordCountMsg||editor.getLang(\"wordCountMsg\"),wordOverFlowMsg:editor.options.wordOverFlowMsg||editor.getLang(\"wordOverFlowMsg\")});var opt=editor.options,max=opt.maximumWords,msg=opt.wordCountMsg,errMsg=opt.wordOverFlowMsg,countDom=ui.getDom(\"wordcount\");if(!opt.wordCount){return}var count=editor.getContentLength(true);if(count>max){countDom.innerHTML=errMsg;editor.fireEvent(\"wordcountoverflow\")}else{countDom.innerHTML=msg.replace(\"{#leave}\",max-count).replace(\"{#count}\",count)}}editor.addListener(\"selectionchange\",function(){if(editor.options.elementPathEnabled){me[(editor.queryCommandState(\"elementpath\")==-1?\"dis\":\"en\")+\"ableElementPath\"]()}if(editor.options.scaleEnabled){me[(editor.queryCommandState(\"scale\")==-1?\"dis\":\"en\")+\"ableScale\"]()}});var popup=new baidu.editor.ui.Popup({editor:editor,content:\"\",className:\"edui-bubble\",_onEditButtonClick:function(){this.hide();editor.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(name){this.hide();editor.ui._dialogs[name]&&editor.ui._dialogs[name].open()},_onImgSetFloat:function(value){this.hide();editor.execCommand(\"imagefloat\",value)},_setIframeAlign:function(value){var frame=popup.anchorEl;var newFrame=frame.cloneNode(true);switch(value){case-2:newFrame.setAttribute(\"align\",\"\");break;case-1:newFrame.setAttribute(\"align\",\"left\");break;case 1:newFrame.setAttribute(\"align\",\"right\");break}frame.parentNode.insertBefore(newFrame,frame);domUtils.remove(frame);popup.anchorEl=newFrame;popup.showAnchor(popup.anchorEl)},_updateIframe:function(){var frame=editor._iframe=popup.anchorEl;if(domUtils.hasClass(frame,\"ueditor_baidumap\")){editor.selection.getRange().selectNode(frame).select();editor.ui._dialogs.mapDialog.open();popup.hide()}else{editor.ui._dialogs.insertframeDialog.open();popup.hide()}},_onRemoveButtonClick:function(cmdName){editor.execCommand(cmdName);this.hide()},queryAutoHide:function(el){if(el&&el.ownerDocument==editor.document){if(el.tagName.toLowerCase()==\"img\"||domUtils.findParentByTagName(el,\"a\",true)){return el!==popup.anchorEl}}return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,el)}});popup.render();if(editor.options.imagePopup){editor.addListener(\"mouseover\",function(t,evt){evt=evt||window.event;var el=evt.target||evt.srcElement;if(editor.ui._dialogs.insertframeDialog&&/iframe/gi.test(el.tagName)){var html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">'+editor.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">'+editor.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">'+editor.getLang(\"justifyright\")+\"</span>&nbsp;&nbsp;\"+' <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span></nobr>\");if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=el;popup.showAnchor(popup.anchorEl)}else{popup.hide()}}});editor.addListener(\"selectionchange\",function(t,causeByUi){if(!causeByUi){return}var html=\"\",str=\"\",closedNode=editor.selection.getRange().getClosedNode(),dialogs=editor.ui._dialogs;if(closedNode&&closedNode.tagName===\"IMG\"){var dialogName=\"insertimageDialog\";if(closedNode.className.indexOf(\"edui-faked-video\")!==-1||closedNode.className.indexOf(\"edui-upload-video\")!==-1){dialogName=\"insertvideoDialog\"}if(closedNode.className.indexOf(\"edui-faked-audio\")!==-1||closedNode.className.indexOf(\"edui-upload-audio\")!==-1){dialogName=\"insertaudioDialog\"}if(closedNode.getAttribute(\"anchorname\")){dialogName=\"anchorDialog\";html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span>&nbsp;&nbsp;\"+\"<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\"+editor.getLang(\"delete\")+\"</span></nobr>\")}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){dialogName=\"\"}if(!dialogs[dialogName]){return}var actions=[];if(closedNode.getAttribute(\"data-word-image\")){actions.push(\"<span onclick=\\\"$$._onImgEditButtonClick('wordimageDialog');\\\" class='edui-clickable edui-popup-action-item'>\"+editor.getLang(\"save\")+\"</span>\")}else{}if(actions.length>0){actions.unshift(\"<nobr>\");actions.push(\"</nobr>\")}!html&&(html=popup.formatHtml(actions.join(\"\")))}if(editor.ui._dialogs.linkDialog){var link=editor.queryCommandValue(\"link\");var url;if(link&&(url=link.getAttribute(\"_href\")||link.getAttribute(\"href\",2))){var txt=url;if(url.length>30){txt=url.substring(0,20)+\"...\"}if(html){html+='<div style=\"height:5px;\"></div>'}html+=popup.formatHtml(\"<nobr>\"+editor.getLang(\"anchorMsg\")+': <a target=\"_blank\" href=\"'+url+'\" title=\"'+url+'\" >'+txt+\"</a>\"+' <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">'+editor.getLang(\"modify\")+\"</span>\"+' <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> '+editor.getLang(\"clear\")+\"</span></nobr>\");popup.showAnchor(link)}}if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=closedNode||link;popup.showAnchor(popup.anchorEl)}else{popup.hide()}})}},_initToolbars:function(){var editor=this.editor;var toolbars=this.toolbars||[];if(toolbars[0]){toolbars[0].unshift(\"message\")}var toolbarUis=[];var extraUIs=[];for(var i=0;i<toolbars.length;i++){var toolbar=toolbars[i];var toolbarUi=new baidu.editor.ui.Toolbar({theme:editor.options.theme});for(var j=0;j<toolbar.length;j++){var toolbarItem=toolbar[j];var toolbarItemUi=null;if(typeof toolbarItem==\"string\"){toolbarItem=toolbarItem.toLowerCase();if(toolbarItem===\"|\"){toolbarItem=\"Separator\"}if(toolbarItem===\"||\"){toolbarItem=\"Breakline\"}var ui=baidu.editor.ui[toolbarItem];if(ui){if(utils.isFunction(ui)){toolbarItemUi=new baidu.editor.ui[toolbarItem](editor)}else{if(ui.id&&ui.id!==editor.key){continue}var itemUI=ui.execFn.call(editor,editor,toolbarItem);if(itemUI){if(ui.index===undefined){toolbarUi.add(itemUI);continue}else{extraUIs.push({index:ui.index,itemUI:itemUI})}}}}if(toolbarItem===\"fullscreen\"){if(toolbarUis&&toolbarUis[0]){toolbarUis[0].items.splice(0,0,toolbarItemUi)}else{toolbarItemUi&&toolbarUi.items.splice(0,0,toolbarItemUi)}continue}}else{toolbarItemUi=toolbarItem}if(toolbarItemUi&&toolbarItemUi.id){toolbarUi.add(toolbarItemUi)}}toolbarUis[i]=toolbarUi}utils.each(extraUIs,function(obj){toolbarUi.add(obj.itemUI,obj.index)});this.toolbars=toolbarUis},getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\">'+'<div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">'+(this.toolbars.length?'<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">'+this.renderToolbarBoxHtml()+\"</div></div>\":\"\")+'<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\">'+'<div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">'+this.editor.getLang(\"clickToUpload\")+\"</div>\"+'<div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div>'+'<div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div>'+'<div style=\"height:0;overflow:hidden;clear:both;\"></div>'+\"</div>\"+'<div id=\"##_message_holder\" class=\"%%-messageholder\"></div>'+\"</div>\"+'<div id=\"##_iframeholder\" class=\"%%-iframeholder\">'+\"</div>\"+'<div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr>'+'<td id=\"##_elementpath\" class=\"%%-bottombar\"></td>'+'<td id=\"##_wordcount\" class=\"%%-wordcount\"></td>'+'<td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td>'+\"</tr></table></div>\"+'<div id=\"##_scalelayer\"></div>'+\"</div>\"},showWordImageDialog:function(){this._dialogs[\"wordimageDialog\"].open()},renderToolbarBoxHtml:function(){var buff=[];for(var i=0;i<this.toolbars.length;i++){buff.push(this.toolbars[i].renderHtml())}return buff.join(\"\")},setFullScreen:function(fullscreen){var editor=this.editor,container=editor.container.parentNode.parentNode;if(this._fullscreen!=fullscreen){this._fullscreen=fullscreen;this.editor.fireEvent(\"beforefullscreenchange\",fullscreen);if(baidu.editor.browser.gecko){var bk=editor.selection.getRange().createBookmark()}if(fullscreen){this._bakEditorContaninerWidth=editor.iframe.parentNode.style.width;while(container.tagName!==\"BODY\"){var position=baidu.editor.dom.domUtils.getComputedStyle(container,\"position\");nodeStack.push(position);container.style.position=\"static\";container=container.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow;this._bakBodyOverflow=document.body.style.overflow;this._bakAutoHeight=this.editor.autoHeightEnabled;this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);if(this._bakAutoHeight){editor.autoHeightEnabled=false;this.editor.disableAutoHeight()}document.documentElement.style.overflow=\"hidden\";window.scrollTo(0,window.scrollY);this._bakCssText=this.getDom().style.cssText;this._bakCssText1=this.getDom(\"iframeholder\").style.cssText;editor.iframe.parentNode.style.width=\"\";this._updateFullScreen()}else{while(container.tagName!==\"BODY\"){container.style.position=nodeStack.shift();container=container.parentNode}this.getDom().style.cssText=this._bakCssText;this.getDom(\"iframeholder\").style.cssText=this._bakCssText1;if(this._bakAutoHeight){editor.autoHeightEnabled=true;this.editor.enableAutoHeight()}document.documentElement.style.overflow=this._bakHtmlOverflow;document.body.style.overflow=this._bakBodyOverflow;editor.iframe.parentNode.style.width=this._bakEditorContaninerWidth;window.scrollTo(0,this._bakScrollTop)}if(browser.gecko&&editor.body.contentEditable===\"true\"){var input=document.createElement(\"input\");document.body.appendChild(input);editor.body.contentEditable=false;setTimeout(function(){input.focus();setTimeout(function(){editor.body.contentEditable=true;editor.fireEvent(\"fullscreenchanged\",fullscreen);editor.selection.getRange().moveToBookmark(bk).select(true);baidu.editor.dom.domUtils.remove(input);fullscreen&&window.scroll(0,0)},0)},0)}if(editor.body.contentEditable===\"true\"){this.editor.fireEvent(\"fullscreenchanged\",fullscreen);this.triggerLayout()}}},_updateFullScreen:function(){if(this._fullscreen){var vpRect=uiUtils.getViewportRect();this.getDom().style.cssText=\"border:0;position:absolute;left:0;top:var(--ueditor-top-offset,\"+(this.editor.options.topOffset||0)+\"px);width:\"+vpRect.width+\"px;height:\"+vpRect.height+\"px;z-index:\"+(this.getDom().style.zIndex*1+100);uiUtils.setViewportOffset(this.getDom(),{left:0});this.editor.setHeight(vpRect.height-this.getDom(\"toolbarbox\").offsetHeight-this.getDom(\"bottombar\").offsetHeight-(this.editor.options.topOffset||0),true);if(browser.gecko){try{window.onresize()}catch(e){}}}},_updateElementPath:function(){var bottom=this.getDom(\"elementpath\"),list;if(this.elementPathEnabled&&(list=this.editor.queryCommandValue(\"elementpath\"))){var buff=[];for(var i=0,ci;ci=list[i];i++){buff[i]=this.formatHtml('<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+i+'&quot;);\">'+ci+\"</span>\")}bottom.innerHTML='<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">'+this.editor.getLang(\"elementPathTip\")+\": \"+buff.join(\" &gt; \")+\"</div>\"}else{bottom.style.display=\"none\"}},disableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.innerHTML=\"\";bottom.style.display=\"none\";this.elementPathEnabled=false},enableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.style.display=\"\";this.elementPathEnabled=true;this._updateElementPath()},_scale:function(){var doc=document,editor=this.editor,editorHolder=editor.container,editorDocument=editor.document,toolbarBox=this.getDom(\"toolbarbox\"),bottombar=this.getDom(\"bottombar\"),scale=this.getDom(\"scale\"),scalelayer=this.getDom(\"scalelayer\");var isMouseMove=false,position=null,minEditorHeight=0,minEditorWidth=editor.options.minFrameWidth,pageX=0,pageY=0,scaleWidth=0,scaleHeight=0;function down(){position=domUtils.getXY(editorHolder);if(!minEditorHeight){minEditorHeight=editor.options.minFrameHeight+toolbarBox.offsetHeight+bottombar.offsetHeight}scalelayer.style.cssText=\"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\"+editorHolder.offsetWidth+\"px;height:\"+editorHolder.offsetHeight+\"px;z-index:\"+(editor.options.zIndex+1);domUtils.on(doc,\"mousemove\",move);domUtils.on(editorDocument,\"mouseup\",up);domUtils.on(doc,\"mouseup\",up)}var me=this;this.editor.addListener(\"fullscreenchanged\",function(e,fullScreen){if(fullScreen){me.disableScale()}else{if(me.editor.options.scaleEnabled){me.enableScale();var tmpNode=me.editor.document.createElement(\"span\");me.editor.body.appendChild(tmpNode);me.editor.body.style.height=Math.max(domUtils.getXY(tmpNode).y,me.editor.iframe.offsetHeight-20)+\"px\";domUtils.remove(tmpNode)}}});function move(event){clearSelection();var e=event||window.event;pageX=e.pageX||doc.documentElement.scrollLeft+e.clientX;pageY=e.pageY||doc.documentElement.scrollTop+e.clientY;scaleWidth=pageX-position.x;scaleHeight=pageY-position.y;if(scaleWidth>=minEditorWidth){isMouseMove=true;scalelayer.style.width=scaleWidth+\"px\"}if(scaleHeight>=minEditorHeight){isMouseMove=true;scalelayer.style.height=scaleHeight+\"px\"}}function up(){if(isMouseMove){isMouseMove=false;editor.ui._actualFrameWidth=scalelayer.offsetWidth-2;editorHolder.style.width=editor.ui._actualFrameWidth+\"px\";editor.setHeight(scalelayer.offsetHeight-bottombar.offsetHeight-toolbarBox.offsetHeight-2,true)}if(scalelayer){scalelayer.style.display=\"none\"}clearSelection();domUtils.un(doc,\"mousemove\",move);domUtils.un(editorDocument,\"mouseup\",up);domUtils.un(doc,\"mouseup\",up)}function clearSelection(){if(browser.ie)doc.selection.clear();else window.getSelection().removeAllRanges()}this.enableScale=function(){if(editor.queryCommandState(\"source\")==1)return;scale.style.display=\"\";this.scaleEnabled=true;domUtils.on(scale,\"mousedown\",down)};this.disableScale=function(){scale.style.display=\"none\";this.scaleEnabled=false;domUtils.un(scale,\"mousedown\",down)}},isFullScreen:function(){return this._fullscreen},postRender:function(){UIBase.prototype.postRender.call(this);for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].postRender()}var me=this;var timerId,domUtils=baidu.editor.dom.domUtils,updateFullScreenTime=function(){clearTimeout(timerId);timerId=setTimeout(function(){me._updateFullScreen()})};domUtils.on(window,\"resize\",updateFullScreenTime);me.addListener(\"destroy\",function(){domUtils.un(window,\"resize\",updateFullScreenTime);clearTimeout(timerId)})},showToolbarMsg:function(msg,flag){this.getDom(\"toolbarmsg_label\").innerHTML=msg;this.getDom(\"toolbarmsg\").style.display=\"\";if(!flag){var w=this.getDom(\"upload_dialog\");w.style.display=\"none\"}},hideToolbarMsg:function(){this.getDom(\"toolbarmsg\").style.display=\"none\"},mapUrl:function(url){return url?url.replace(\"~/\",this.editor.options.UEDITOR_CORS_URL||\"\"):\"\"},triggerLayout:function(){var dom=this.getDom();if(dom.style.zoom==\"1\"){dom.style.zoom=\"100%\"}else{dom.style.zoom=\"1\"}}};utils.inherits(EditorUI,baidu.editor.ui.UIBase);var instances={};UE.ui.Editor=function(options){var editor=new UE.Editor(options);editor.options.editor=editor;utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/css/ueditor.css?98125a73\",tag:\"link\",type:\"text/css\",rel:\"stylesheet\"});var oldRender=editor.render;editor.render=function(holder){if(holder.constructor===String){editor.key=holder;instances[holder]=editor}utils.domReady(function(){editor.langIsReady?renderUI():editor.addListener(\"langReady\",renderUI);function renderUI(){editor.setOpt({labelMap:editor.options.labelMap||editor.getLang(\"labelMap\")});new EditorUI(editor.options);if(holder){if(holder.constructor===String){holder=document.getElementById(holder)}holder&&holder.getAttribute(\"name\")&&(editor.options.textarea=holder.getAttribute(\"name\"));if(holder&&/script|textarea/gi.test(holder.tagName)){var newDiv=document.createElement(\"div\");holder.parentNode.insertBefore(newDiv,holder);var cont=holder.value||holder.innerHTML;editor.options.initialContent=/^[\\t\\r\\n ]*$/.test(cont)?editor.options.initialContent:cont.replace(/>[\\n\\r\\t]+([ ]{4})+/g,\">\").replace(/[\\n\\r\\t]+([ ]{4})+</g,\"<\").replace(/>[\\n\\r\\t]+</g,\"><\");holder.className&&(newDiv.className=holder.className);holder.style.cssText&&(newDiv.style.cssText=holder.style.cssText);if(/textarea/i.test(holder.tagName)){editor.textarea=holder;editor.textarea.style.display=\"none\"}else{holder.parentNode.removeChild(holder)}if(holder.id){newDiv.id=holder.id;domUtils.removeAttributes(holder,\"id\")}holder=newDiv;holder.innerHTML=\"\"}}domUtils.addClass(holder,\"edui-\"+editor.options.theme);editor.ui.render(holder);var opt=editor.options;editor.container=editor.ui.getDom();var parents=domUtils.findParents(holder,true);var displays=[];for(var i=0,ci;ci=parents[i];i++){displays[i]=ci.style.display;ci.style.display=\"block\"}if(opt.initialFrameWidth){opt.minFrameWidth=opt.initialFrameWidth}else{opt.minFrameWidth=opt.initialFrameWidth=holder.offsetWidth;var styleWidth=holder.style.width;if(/%$/.test(styleWidth)){opt.initialFrameWidth=styleWidth}}if(opt.initialFrameHeight){opt.minFrameHeight=opt.initialFrameHeight}else{opt.initialFrameHeight=opt.minFrameHeight=holder.offsetHeight}for(var i=0,ci;ci=parents[i];i++){ci.style.display=displays[i]}if(holder.style.height){holder.style.height=\"\"}editor.container.style.width=opt.initialFrameWidth+(/%$/.test(opt.initialFrameWidth)?\"\":\"px\");editor.container.style.zIndex=opt.zIndex;oldRender.call(editor,editor.ui.getDom(\"iframeholder\"));editor.fireEvent(\"afteruiready\")}})};return editor};UE.getEditor=function(id,opt){var editor=instances[id];if(!editor){editor=instances[id]=new UE.ui.Editor(opt);editor.render(id)}return editor};UE.delEditor=function(id){var editor;if(editor=instances[id]){editor.key&&editor.destroy();delete instances[id]}};UE.registerUI=function(uiName,fn,index,editorId){utils.each(uiName.split(/\\s+/),function(name){baidu.editor.ui[name]={id:editorId,execFn:fn,index:index}})}})();UE.registerUI(\"message\",function(editor){var editorui=baidu.editor.ui;var Message=editorui.Message;var holder;var _messageItems=[];var me=editor;me.setOpt(\"enableMessageShow\",true);if(me.getOpt(\"enableMessageShow\")===false){return}me.addListener(\"ready\",function(){holder=document.getElementById(me.ui.id+\"_message_holder\");updateHolderPos();setTimeout(function(){updateHolderPos()},500)});me.addListener(\"showmessage\",function(type,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=new Message({timeout:opt.timeout,type:opt.type,content:opt.content,keepshow:opt.keepshow,editor:me}),mid=opt.id||\"msg_\"+(+new Date).toString(36);message.render(holder);_messageItems[mid]=message;message.reset(opt);updateHolderPos();return mid});me.addListener(\"updatemessage\",function(type,id,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=_messageItems[id];message.render(holder);message&&message.reset(opt)});me.addListener(\"hidemessage\",function(type,id){var message=_messageItems[id];message&&message.hide()});function updateHolderPos(){if(!holder||!me.ui)return;var toolbarbox=me.ui.getDom(\"toolbarbox\");if(toolbarbox){holder.style.top=toolbarbox.offsetHeight+3+\"px\"}holder.style.zIndex=Math.max(me.options.zIndex,me.iframe.style.zIndex)+1}})})();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/ueditor.config.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(a,d){return c(a||self.document.URL||self.location.href,d||b())}function b(){var a=document.getElementsByTagName(\"script\");return a[a.length-1].src}function c(a,b){var c=b;return/^(\\/|\\\\\\\\)/.test(b)?c=/^.+?\\w(\\/|\\\\\\\\)/.exec(a)[0]+b.replace(/^(\\/|\\\\\\\\)/,\"\"):/^[a-z]+:/i.test(b)||(a=a.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/,\"\"),c=a+\"\"+b),d(c)}function d(a){var b=/^[a-z]+:\\/\\//.exec(a)[0],c=null,d=[];for(a=a.replace(b,\"\").split(\"?\")[0].split(\"#\")[0],a=a.replace(/\\\\/g,\"/\").split(/\\//),a[a.length-1]=\"\";a.length;)\"..\"===(c=a.shift())?d.pop():\".\"!==c&&d.push(c);return b+d.join(\"/\")}var e,f;e=window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:window.__msCDN?window.__msCDN+\"asset/vendor/ueditor/\":window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":a(),f=window.UEDITOR_CORS_URL?window.UEDITOR_CORS_URL:window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:a(),window.UEDITOR_CONFIG={UEDITOR_HOME_URL:e,UEDITOR_CORS_URL:f,debug:!1,serverUrl:\"/ueditor-plus/_demo_server/handle.php\",serverHeaders:{},toolbars:[[\"fullscreen\",\"source\",\"|\",\"undo\",\"redo\",\"|\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"strikethrough\",\"superscript\",\"subscript\",\"removeformat\",\"formatmatch\",\"autotypeset\",\"blockquote\",\"pasteplain\",\"|\",\"forecolor\",\"backcolor\",\"insertorderedlist\",\"insertunorderedlist\",\"selectall\",\"cleardoc\",\"|\",\"rowspacingtop\",\"rowspacingbottom\",\"lineheight\",\"|\",\"customstyle\",\"paragraph\",\"fontfamily\",\"fontsize\",\"|\",\"directionalityltr\",\"directionalityrtl\",\"indent\",\"|\",\"justifyleft\",\"justifycenter\",\"justifyright\",\"justifyjustify\",\"|\",\"touppercase\",\"tolowercase\",\"|\",\"link\",\"unlink\",\"anchor\",\"|\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"|\",\"simpleupload\",\"insertimage\",\"emotion\",\"scrawl\",\"insertvideo\",\"insertaudio\",\"attachment\",\"insertframe\",\"insertcode\",\"pagebreak\",\"template\",\"background\",\"formula\",\"|\",\"horizontal\",\"date\",\"time\",\"spechars\",\"wordimage\",\"|\",\"inserttable\",\"deletetable\",\"insertparagraphbeforetable\",\"insertrow\",\"deleterow\",\"insertcol\",\"deletecol\",\"mergecells\",\"mergeright\",\"mergedown\",\"splittocells\",\"splittorows\",\"splittocols\",\"|\",\"print\",\"preview\",\"searchreplace\",\"|\",\"contentimport\",\"help\"]],toolbarCallback:function(a,b){},imageConfig:{disableUpload:!1,disableOnline:!1,selectCallback:null},videoConfig:{disableUpload:!1,selectCallback:null},audioConfig:{disableUpload:!1,selectCallback:null},formulaConfig:{imageUrlTemplate:\"https://r.latexeasy.com/image.svg?{}\",editorMode:\"live\",editorLiveServer:\"https://latexeasy.com\"},autoSaveEnable:!0,autoSaveRestore:!1,autoSaveKey:null,initialContent:\"\",focus:!1,initialStyle:\"\",indentValue:\"2em\",readonly:!1,autoClearEmptyNode:!0,fullscreen:!1,allHtmlEnabled:!1,enableContextMenu:!0,shortcutMenu:[\"bold\",\"italic\",\"underline\",\"strikethrough\",\"fontborder\",\"forecolor\",\"backcolor\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"insertimage\",\"formula\"],elementPathEnabled:!0,wordCount:!0,maximumWords:1e4,maxUndoCount:20,maxInputCount:1,autoHeightEnabled:!0,catchRemoteImageEnable:!0,autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:{div:1},indent:!1,indentValue:\"2em\",bdc2sb:!1,tobdc:!1},allowDivTransToP:!0,rgb2Hex:!0},window.UE={getUEBasePath:a}}();"
  },
  {
    "path": "_examples-integrate/vue2/public/static/UEditorPlus/ueditor.parse.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){!function(){UE=window.UE||{};var a=!!window.ActiveXObject,b={removeLastbs:function(a){return a.replace(/\\/$/,\"\")},extend:function(a,b){for(var c=arguments,d=!!this.isBoolean(c[c.length-1])&&c[c.length-1],e=this.isBoolean(c[c.length-1])?c.length-1:c.length,f=1;f<e;f++){var g=c[f];for(var h in g)d&&a.hasOwnProperty(h)||(a[h]=g[h])}return a},isIE:a,cssRule:a?function(a,b,c){var d,e;c=c||document,d=c.indexList?c.indexList:c.indexList={};var f;if(d[a])f=c.styleSheets[d[a]];else{if(void 0===b)return\"\";f=c.createStyleSheet(\"\",e=c.styleSheets.length),d[a]=e}return void 0===b?f.cssText:void(f.cssText=f.cssText+\"\\n\"+(b||\"\"))}:function(a,b,c){c=c||document;var d,e=c.getElementsByTagName(\"head\")[0];if(!(d=c.getElementById(a))){if(void 0===b)return\"\";d=c.createElement(\"style\"),d.id=a,e.appendChild(d)}return void 0===b?d.innerHTML:void(\"\"!==b?d.innerHTML=d.innerHTML+\"\\n\"+b:e.removeChild(d))},domReady:function(b){var c=window.document;\"complete\"===c.readyState?b():a?(!function(){if(!c.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){return void setTimeout(arguments.callee,0)}b()}}(),window.attachEvent(\"onload\",function(){b()})):(c.addEventListener(\"DOMContentLoaded\",function(){c.removeEventListener(\"DOMContentLoaded\",arguments.callee,!1),b()},!1),window.addEventListener(\"load\",function(){b()},!1))},each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return!1}else for(var f in a)if(a.hasOwnProperty(f)&&b.call(c,a[f],f,a)===!1)return!1},inArray:function(a,b){var c=-1;return this.each(a,function(a,d){if(a===b)return c=d,!1}),c},pushItem:function(a,b){this.inArray(a,b)==-1&&a.push(b)},trim:function(a){return a.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},indexOf:function(a,b,c){var d=-1;return c=this.isNumber(c)?c:0,this.each(a,function(a,e){if(e>=c&&a===b)return d=e,!1}),d},hasClass:function(a,b){b=b.replace(/(^[ ]+)|([ ]+$)/g,\"\").replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp(\"\\\\b\"+c+\"\\\\b\",\"i\").test(e))return!1;return d-1==b.length},addClass:function(a,c){if(a){c=this.trim(c).replace(/[ ]{2,}/g,\" \").split(\" \");for(var d,e=0,f=a.className;d=c[e++];)new RegExp(\"\\\\b\"+d+\"\\\\b\").test(f)||(f+=\" \"+d);a.className=b.trim(f)}},removeClass:function(a,b){b=this.isArray(b)?b:this.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp(\"\\\\b\"+c+\"\\\\b\"),\"\");e=this.trim(e).replace(/[ ]{2,}/g,\" \"),a.className=e,!e&&a.removeAttribute(\"className\")},on:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.addEventListener)a.addEventListener(c,d,!1);else{d._d||(d._d={els:[]});var g=c+d.toString(),h=b.indexOf(d._d.els,a);d._d[g]&&h!=-1||(h==-1&&d._d.els.push(a),d._d[g]||(d._d[g]=function(a){return d.call(a.srcElement,a||window.event)}),a.attachEvent(\"on\"+c,d._d[g]))}a=null},off:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.removeEventListener)a.removeEventListener(c,d,!1);else{var g=c+d.toString();try{a.detachEvent(\"on\"+c,d._d?d._d[g]:d)}catch(h){}if(d._d&&d._d[g]){var i=b.indexOf(d._d.els,a);i!=-1&&d._d.els.splice(i,1),0==d._d.els.length&&delete d._d[g]}}},loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)\"tag\"!=h&&g.push(h+'=\"'+d[h]+'\"');return void c.write(\"<\"+d.tag+\" \"+g.join(\" \")+\" ></\"+d.tag+\">\")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error(\"The load \"+(d.href||d.src)+\" fails,check the url\")},c.getElementsByTagName(\"head\")[0].appendChild(i)}}}()};b.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Boolean\"],function(a){b[\"is\"+a]=function(b){return Object.prototype.toString.apply(b)==\"[object \"+a+\"]\"}});var c={};UE.parse={register:function(a,b){c[a]=b},load:function(a){b.each(c,function(c){c.call(a,b)})}},uParse=function(a,c){b.domReady(function(){var d;if(document.querySelectorAll)d=document.querySelectorAll(a);else if(/^#/.test(a))d=[document.getElementById(a.replace(/^#/,\"\"))];else if(/^\\./.test(a)){var d=[];b.each(document.getElementsByTagName(\"*\"),function(b){b.className&&new RegExp(\"\\\\b\"+a.replace(/^\\./,\"\")+\"\\\\b\",\"i\").test(b.className)&&d.push(b)})}else d=document.getElementsByTagName(a);b.each(d,function(d){UE.parse.load(b.extend({root:d,selector:a},c))})})}}(),UE.parse.register(\"insertcode\",function(a){var b=this.root.getElementsByTagName(\"pre\");if(b.length)if(\"undefined\"==typeof XRegExp){var c,d;void 0!==this.rootPath?(c=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCore.js\",d=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCoreDefault.css\"):(c=this.highlightJsUrl,d=this.highlightCssUrl),a.loadFile(document,{id:\"syntaxhighlighter_css\",tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:d}),a.loadFile(document,{id:\"syntaxhighlighter_js\",src:c,tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})})}else a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})}),UE.parse.register(\"table\",function(a){function b(b,c){var d,e=b;for(c=a.isArray(c)?c:[c];e;){for(d=0;d<c.length;d++)if(e.tagName==c[d].toUpperCase())return e;e=e.parentNode}return null}function c(b,c,e){for(var f=b.rows,g=[],h=\"TH\"===f[0].cells[0].tagName,i=0,j=0,k=f.length;j<k;j++)g[j]=f[j];var l={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){var c=a.innerText||a.textContent,d=b.innerText||b.textContent;return c.localeCompare(d)},reversebyasc:function(a,b){var c=a.innerHTML,d=b.innerHTML;return d.localeCompare(c)},orderbynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(d||0)-(e||0)},reversebynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(e||0)-(d||0)}};b.setAttribute(\"data-sort-type\",e&&\"string\"==typeof e&&l[e]?e:\"\"),h&&g.splice(0,1),g=d(g,function(a,b){var d;return d=e&&\"function\"==typeof e?e.call(this,a.cells[c],b.cells[c]):e&&\"number\"==typeof e?1:e&&\"string\"==typeof e&&l[e]?l[e].call(this,a.cells[c],b.cells[c]):l.orderbyasc.call(this,a.cells[c],b.cells[c])});for(var m=b.ownerDocument.createDocumentFragment(),n=0,k=g.length;n<k;n++)m.appendChild(g[n]);var o=b.getElementsByTagName(\"tbody\")[0];i?o.insertBefore(m,f[i-range.endRowIndex+range.beginRowIndex-1]):o.appendChild(m)}function d(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c<d;c++)for(var e=c,f=a.length;e<f;e++)if(b(a[c],a[e])>0){var g=a[c];a[c]=a[e],a[e]=g}return a}function e(b){if(!a.hasClass(b.rows[0],\"firstRow\")){for(var c=1;c<b.rows.length;c++)a.removeClass(b.rows[c],\"firstRow\");a.addClass(b.rows[0],\"firstRow\")}}var f=this,g=this.root,h=g.getElementsByTagName(\"table\");if(h.length){var i=this.selector;a.cssRule(\"table\",i+\" table.noBorderTable td,\"+i+\" table.noBorderTable th,\"+i+\" table.noBorderTable caption{border:1px dashed #ddd !important}\"+i+\" table.sortEnabled tr.firstRow th,\"+i+\" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;background-position: center right; background-image:url(\"+this.rootPath+\"themes/default/images/sortable.png);}\"+i+\" table.sortEnabled tr.firstRow th:hover,\"+i+\" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\"+i+\" table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+i+\" td,\"+i+\" th{padding: 5px 10px;border: 1px solid #DDD;}\"+i+\" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+i+\" th{border-top:1px solid #BBB;background:#F7F7F7;}\"+i+\" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\"+i+\" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\"+i+\" tr.ue-table-interlace-color-double td{ background: #f7faff; }\"+i+\" td p{margin:0;padding:0;width:auto;height:auto;}\",document),a.each(\"td th caption\".split(\" \"),function(b){var c=g.getElementsByTagName(b);c.length&&a.each(c,function(a){a.firstChild||(a.innerHTML=\"&nbsp;\")})});var h=g.getElementsByTagName(\"table\");a.each(h,function(d){/\\bsortEnabled\\b/.test(d.className)&&a.on(d,\"click\",function(d){var g=d.target||d.srcElement,h=b(g,[\"td\",\"th\"]),i=b(g,\"table\"),j=a.indexOf(i.rows[0].cells,h),k=i.getAttribute(\"data-sort-type\");j!=-1&&(c(i,j,f.tableSortCompareFn||k),e(i))})})}}),UE.parse.register(\"background\",function(a){for(var b,c,d=this,e=d.root,f=e.getElementsByTagName(\"p\"),g=0;c=f[g++];)b=c.getAttribute(\"data-background\"),b&&c.parentNode.removeChild(c);b&&a.cssRule(\"ueditor_background\",d.selector+\"{\"+b+\"}\",document)}),UE.parse.register(\"list\",function(a){function b(b){var e=this;a.each(b,function(b){if(b.className&&/custom_/i.test(b.className)){var f=b.className.match(/custom_(\\w+)/)[1];if(\"dash\"==f||\"dot\"==f)a.pushItem(c,h+\" li.list-\"+d[f]+\"{background-image:url(\"+e.liiconpath+d[f]+\".gif)}\"),a.pushItem(c,h+\" ul.custom_\"+f+\"{list-style:none;} \"+h+\" ul.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\");else{var g=1;a.each(b.childNodes,function(b){\"LI\"==b.tagName&&(a.pushItem(c,h+\" li.list-\"+d[f]+g+\"{background-image:url(\"+e.liiconpath+\"list-\"+d[f]+g+\".gif)}\"),g++)}),a.pushItem(c,h+\" ol.custom_\"+f+\"{list-style:none;}\"+h+\" ol.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\")}switch(f){case\"cn\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:30px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:55px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:68px}\");break;case\"num\":case\"num1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\");break;case\"num2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:35px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\");break;case\"dash\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:35px}\");break;case\"dot\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:20px}\")}}})}var c=[],d={cn:\"cn-1-\",cn1:\"cn-2-\",cn2:\"cn-3-\",num:\"num-1-\",num1:\"num-2-\",num2:\"num-3-\",dash:\"dash\",dot:\"dot\"};a.extend(this,{liiconpath:\"http://bs.baidu.com/listicon/\",listDefaultPaddingLeft:\"20\"});var e=this.root,f=e.getElementsByTagName(\"ol\"),g=e.getElementsByTagName(\"ul\"),h=this.selector;f.length&&b.call(this,f),g.length&&b.call(this,g),(f.length||g.length)&&(c.push(h+\" .list-paddingleft-1{padding-left:0}\"),c.push(h+\" .list-paddingleft-2{padding-left:\"+this.listDefaultPaddingLeft+\"px}\"),c.push(h+\" .list-paddingleft-3{padding-left:\"+2*this.listDefaultPaddingLeft+\"px}\"),a.cssRule(\"list\",h+\" ol,\"+h+\" ul{margin:0;padding:0;}\\n\"+h+\" li{clear:both;}\\n\"+c.join(\"\\n\"),document))})}();"
  },
  {
    "path": "_examples-integrate/vue2/src/App.vue",
    "content": "<template>\n    <div id=\"app\">\n        <img alt=\"Vue logo\" src=\"./assets/logo.png\">\n        <div style=\"max-width:800px;margin:0 auto;\">\n            <h2>UEditor Plus Vue2 集成示例</h2>\n            <div>\n                <vue-ueditor-wrap v-model=\"content\"\n                                  editor-id=\"editor\"\n                                  :config=\"editorConfig\"\n                                  :editorDependencies=\"['ueditor.config.js','ueditor.all.js']\"\n                                  style=\"height:500px;\"/>\n            </div>\n        </div>\n    </div>\n</template>\n\n<script>\nimport VueUeditorWrap from 'vue-ueditor-wrap'\n\nexport default {\n    name: 'App',\n    components: {\n        VueUeditorWrap\n    },\n    data() {\n        return {\n            content: '<p>Hello UEditorPlus</p>',\n            editorConfig: {\n                // 后端服务地址，后端处理参考\n                // https://open.modstart.com/ueditor-plus/backend.html\n                serverUrl: '/api/path/to/server',\n                UEDITOR_HOME_URL: '/static/UEditorPlus/',\n                UEDITOR_CORS_URL: '/static/UEditorPlus/',\n            }\n        }\n    }\n}\n</script>\n\n<style>\n#app {\n    font-family: Avenir, Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-align: center;\n    color: #2c3e50;\n    margin-top: 60px;\n}\n</style>\n"
  },
  {
    "path": "_examples-integrate/vue2/src/main.js",
    "content": "import Vue from 'vue'\nimport App from './App.vue'\n\nVue.config.productionTip = false\n\nnew Vue({\n  render: h => h(App),\n}).$mount('#app')\n"
  },
  {
    "path": "_examples-integrate/vue2/vue.config.js",
    "content": "const { defineConfig } = require('@vue/cli-service')\nmodule.exports = defineConfig({\n  transpileDependencies: true\n})\n"
  },
  {
    "path": "_examples-integrate/vue3/.gitignore",
    "content": ".DS_Store\nnode_modules\n/dist\n\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "_examples-integrate/vue3/README.md",
    "content": "# vue3\n\n## Project setup\n```\nnpm install\n```\n\n### Compiles and hot-reloads for development\n```\nnpm run serve\n```\n\n### Compiles and minifies for production\n```\nnpm run build\n```\n\n### Lints and fixes files\n```\nnpm run lint\n```\n\n### Customize configuration\nSee [Configuration Reference](https://cli.vuejs.org/config/).\n"
  },
  {
    "path": "_examples-integrate/vue3/babel.config.js",
    "content": "module.exports = {\n  presets: [\n    '@vue/cli-plugin-babel/preset'\n  ]\n}\n"
  },
  {
    "path": "_examples-integrate/vue3/jsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"esnext\",\n    \"baseUrl\": \"./\",\n    \"moduleResolution\": \"node\",\n    \"paths\": {\n      \"@/*\": [\n        \"src/*\"\n      ]\n    },\n    \"lib\": [\n      \"esnext\",\n      \"dom\",\n      \"dom.iterable\",\n      \"scripthost\"\n    ]\n  }\n}\n"
  },
  {
    "path": "_examples-integrate/vue3/package.json",
    "content": "{\n  \"name\": \"vue3\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve\",\n    \"build\": \"vue-cli-service build\",\n    \"lint\": \"vue-cli-service lint\"\n  },\n  \"dependencies\": {\n    \"core-js\": \"^3.8.3\",\n    \"vue\": \"^3.2.13\",\n    \"vue-ueditor-wrap\": \"^3.0.8\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.16\",\n    \"@babel/eslint-parser\": \"^7.12.16\",\n    \"@vue/cli-plugin-babel\": \"~5.0.0\",\n    \"@vue/cli-plugin-eslint\": \"~5.0.0\",\n    \"@vue/cli-service\": \"~5.0.0\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-plugin-vue\": \"^8.0.3\"\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"env\": {\n      \"node\": true\n    },\n    \"extends\": [\n      \"plugin:vue/vue3-essential\",\n      \"eslint:recommended\"\n    ],\n    \"parserOptions\": {\n      \"parser\": \"@babel/eslint-parser\"\n    },\n    \"rules\": {}\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not dead\",\n    \"not ie 11\"\n  ]\n}\n"
  },
  {
    "path": "_examples-integrate/vue3/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <link rel=\"icon\" href=\"<%= BASE_URL %>favicon.ico\">\n    <title><%= htmlWebpackPlugin.options.title %></title>\n  </head>\n  <body>\n    <noscript>\n      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <style type=\"text/css\">\n        * {\n            color: #838383;\n            margin: 0;\n            padding: 0\n        }\n\n        html, body {\n            font-size: 12px;\n            overflow: hidden;\n        }\n\n        .content {\n            padding: 5px 0 0 15px;\n        }\n\n        input {\n            margin-left: 4px;\n            box-sizing: border-box;\n            width: 210px;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\" value=\"\"/>\n</div>\n<script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n<script type=\"text/javascript\">\n    var anchorInput = $G('anchorName'),\n        node = editor.selection.getRange().getClosedNode();\n    if (node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))) {\n        anchorInput.value = node;\n    }\n    anchorInput.onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            editor.execCommand('anchor', anchorInput.value);\n            dialog.close();\n            domUtils.preventDefault(evt)\n        }\n    };\n    dialog.onok = function () {\n        editor.execCommand('anchor', anchorInput.value);\n        dialog.close();\n    };\n    $focus(anchorInput);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/attachment/attachment.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #fileList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li div.file-wrapper{cursor:pointer;position:absolute;display:block;width:111px;height:111px;border:1px solid #eee;background:url(./images/bg.png) repeat}#online li div span.file-title{display:block;padding:0 3px;margin:3px 0 0;font-size:12px;height:15px;color:#555;text-align:center;width:107px;white-space:nowrap;word-break:break-all;overflow:hidden;text-overflow:ellipsis}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css?32c6a90a\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"attachment.js?1598cea7\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/attachment/attachment.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});setTabFocus(\"upload\")}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"upload\":uploadFile=uploadFile||new UploadFile(\"queueList\");break;case\"online\":onlineFile=onlineFile||new OnlineFile(\"fileList\")}}}function initButtons(){dialog.onok=function(){for(var a,b=[],c=$G(\"tabhead\").children,d=0;d<c.length;d++)if(domUtils.hasClass(c[d],\"focus\")){a=c[d].getAttribute(\"data-content-id\");break}switch(a){case\"upload\":b=uploadFile.getInsertList();var e=uploadFile.getQueueCount();if(e)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,e)+\"</span>\"),!1;break;case\"online\":b=onlineFile.getInsertList()}editor.execCommand(\"insertfile\",b)}}function UploadFile(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineFile(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var uploadFile,onlineFile;window.onload=function(){initTabs(),initButtons()},UploadFile.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\" title=\"'+a.name+'\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&A.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"fileActionName\")),z=editor.getOpt(\"fileMaxSize\"),A=(editor.getOpt(\"fileAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"fileActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"fileFieldName\"),duplicate:!0,fileSingleSizeLimit:z,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){b.ext&&A.indexOf(b.ext.toLowerCase())!=-1&&b.size<=z&&(q++,r+=b.size),1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&A.indexOf(a.ext.toLowerCase())!=-1&&a.size<=z&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.fileList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"file\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},getInsertList:function(){var a,b,c,d=[],e=editor.getOpt(\"fileUrlPrefix\");for(a=0;a<this.fileList.length;a++)c=this.fileList[a],b=c.url,d.push({title:c.original||b.substr(b.lastIndexOf(\"/\")+1),url:e+b});return d}},OnlineFile.prototype={init:function(){this.initContainer(),this.initEvents(),this.initData()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"fileList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getFileData()}),domUtils.on(this.list,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"fileManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getFileData()},getFileData:function(){var _this=this;_this.listEnd||this.isLoadingData||(this.isLoadingData=!0,ajax.request(editor.getActionUrl(editor.getOpt(\"fileManagerActionName\")),{timeout:1e5,data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}}))},pushData:function(a){var b,c,d,e,f,g=this,h=editor.getOpt(\"fileManagerUrlPrefix\");for(b=0;b<a.length;b++)if(a[b]&&a[b].url){if(c=document.createElement(\"li\"),f=document.createElement(\"span\"),d=a[b].url.substr(a[b].url.lastIndexOf(\".\")+1),\"png|jpg|jpeg|gif|bmp\".indexOf(d)!=-1)e=document.createElement(\"img\"),domUtils.on(e,\"load\",function(a){return function(){g.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(e)),e.width=113,e.setAttribute(\"src\",h+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36));else{var i=document.createElement(\"i\"),j=document.createElement(\"span\");j.innerHTML=a[b].original||a[b].url.substr(a[b].url.lastIndexOf(\"/\")+1),e=document.createElement(\"div\"),e.appendChild(i),e.appendChild(j),domUtils.addClass(e,\"file-wrapper\"),domUtils.addClass(j,\"file-title\"),domUtils.addClass(i,\"file-type-\"+d),domUtils.addClass(i,\"file-preview\")}domUtils.addClass(f,\"icon\"),c.setAttribute(\"data-url\",h+a[b].url),a[b].original&&c.setAttribute(\"data-title\",a[b].original),c.appendChild(e),c.appendChild(f),this.list.insertBefore(c,this.clearFloat)}},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[];for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var d=b[a].getAttribute(\"data-url\"),e=b[a].getAttribute(\"data-title\")||d.substr(d.lastIndexOf(\"/\")+1);c.push({title:e,url:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/audio/audio.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#audioUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#audioSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#audioSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#audioType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#audioSearchBtn,#audioSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewaudio{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-audio-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#audioInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#audioFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#audioFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadaudioInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/audio/audio.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"audio.css?622512f6\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"audioTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"audio\" class=\"focus\" data-content-id=\"audio\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"audio\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"audioUrl\" class=\"url\"><var id=\"lang_audio_url\"></var></label></td>\n                        <td><input id=\"audioUrl\" type=\"text\"><a href=\"javascript:;\" id=\"audioSelect\"\n                                                                style=\"display:none;\">选择音频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链音频支持MP3格式\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"audioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"audioFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadaudioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- audio -->\n<script type=\"text/javascript\" src=\"audio.js?d76559eb\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/audio/audio.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});r.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),r.selectCallback&&($G(\"audioSelect\").style.display=\"inline-block\",domUtils.on($G(\"audioSelect\"),\"click\",function(a){r.selectCallback(editor,function(a){a&&($G(\"audioUrl\").value=a.path,k(a.path))})}))}function b(){g([\"audioFloat\",\"upload_alignment\"]),i($G(\"audioUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-audio\"==b.className,e=b.className.indexOf(\"edui-upload-audio\")!=-1;if(c||e){$G(\"audioUrl\").value=a=b.getAttribute(\"_url\");var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(q=!0)}k(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=f(\"tabHeads\",\"tabSrc\");switch(a){case\"audio\":return e();case\"upload\":return l()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"audioFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"audioUrl\").value;f(\"audioFloat\",\"name\");return!!a&&void editor.execCommand(\"insertaudio\",{url:a},q?\"upload\":null)}function f(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function g(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}h(b)}}function h(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function i(a){browser.ie?a.onpropertychange=function(){k(this.value)}:a.addEventListener(\"input\",function(){k(this.value)},!1)}function j(a,b){b=b||{};var c=[\"<audio\",b.id?' id=\"'+b.id+'\"':\"\",b.cls?' class=\"'+b.cls+'\"':\"\",\" controls >\",'<source src=\"'+a+'\" type=\"audio/mpeg\" />',\"</audio>\"];return c.join(\"\")}function k(a){a&&($G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><div style=\"position: absolute; inset: 0; background: #FFF; text-align: center; display: flex; justify-items: center; align-items: center;\"><div style=\"text-align:center;flex-grow:1;\">'+j(a)+\"</div></div>\")}function l(){var a=[],b=editor.getOpt(\"audioUrlPrefix\"),c=f(\"upload_alignment\",\"name\")||\"none\";for(var d in p){var e=p[d];a.push({url:b+e.url,align:c})}var g=o.getQueueCount();return g?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,g)+\"</span>\"),!1):void editor.execCommand(\"insertaudio\",a,\"upload\")}function m(){o=new n(\"queueList\")}function n(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var o,p=[],q=!1,r={};window.onload=function(){r=editor.getOpt(\"audioConfig\"),$focus($G(\"audioUrl\")),a(),b(),m()},n.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=q.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),q.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),q.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":q.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":q.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(q.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":q.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",r).replace(\"_KB\",WebUploader.formatSize(s)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),q=k.find(\".progress\").hide(),r=0,s=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"audioActionName\")),A=editor.getOpt(\"audioMaxSize\"),B=(editor.getOpt(\"audioAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"audioActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"audioFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){r++,s+=b.size,1===r&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){r--,s-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(p.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>')):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/background/background.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:424px;margin:10px auto;zoom:1;position:relative}.tabbody{height:225px}.tabbody .panel{position:absolute;width:100%;height:100%;background:#fff;display:none}.tabbody .focus{display:block}body{font-size:12px;color:#888;overflow:hidden}input,label{vertical-align:middle}.clear{clear:both}.pl{padding-left:18px;padding-left:23px \\9}#imageList{width:420px;height:215px;margin-top:10px;overflow:hidden;overflow-y:auto}#imageList div{float:left;width:100px;height:95px;margin:5px 10px}#imageList img{cursor:pointer;border:2px solid #fff}.bgarea{margin:10px;padding:5px;height:84%;border:1px solid #A8A297}.content div{margin:10px 0 10px 5px}.content .iptradio{margin:0 5px 5px 0}.txt{width:280px}.wrapcolor{height:19px}div.color{float:left;margin:0}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA;margin:0;float:left}div.alignment,#custom{margin-left:23px;margin-left:28px \\9}#custom input{height:15px;min-height:15px;width:20px}#repeatType{width:100px}#imgManager{width:100%;height:225px}#imgManager #imageList{width:100%;overflow-x:hidden;overflow-y:auto}#imgManager ul{display:block;list-style:none;margin:0;padding:0}#imgManager li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:9px 0 0 19px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#imgManager li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#imgManager li img{cursor:pointer}#imgManager li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#imgManager li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#imgManager li.selected .icon{background-image:url(images/success.png);background-position:75px 75px}#imgManager li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css?982ee6c2\">\n</head>\n<body>\n<div id=\"bg_container\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"normal\" class=\"panel focus\">\n            <fieldset class=\"bgarea\">\n                <legend><var id=\"lang_background_set\"></var></legend>\n                <div class=\"content\">\n                    <div>\n                        <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\"\n                                      checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                        <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var\n                            id=\"lang_background_colored\"></var></label>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <div class=\"color\">\n                            <var id=\"lang_background_color\"></var>:\n                        </div>\n                        <div id=\"colorPicker\"></div>\n                        <div class=\"clear\"></div>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                    </div>\n                    <div id=\"alignment\" class=\"alignment\">\n                        <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                        <option value=\"center\"></option>\n                        <option value=\"repeat-x\"></option>\n                        <option value=\"repeat-y\"></option>\n                        <option value=\"repeat\"></option>\n                        <option value=\"self\"></option>\n                    </select>\n                    </div>\n                    <div id=\"custom\">\n                        <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\"\n                                                                           value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\"\n                                                                                                            size=\"1\"\n                                                                                                            id=\"y\"\n                                                                                                            maxlength=\"4\"\n                                                                                                            value=\"0\">px\n                    </div>\n                </div>\n            </fieldset>\n\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"background.js?e67eb657\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/background/background.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){for(var c=b.target||b.srcElement,d=0;d<a.length;d++)if(a[d]==c){a[d].className=\"focus\";var e=a[d].getAttribute(\"data-content-id\");$G(e).style.display=\"block\"}else a[d].className=\"\",$G(a[d].getAttribute(\"data-content-id\")).style.display=\"none\"})}function initColorSelector(){var a=editor.queryCommandValue(\"background\");if(a){var b=a[\"background-color\"],c=a[\"background-repeat\"]||\"repeat\",d=a[\"background-image\"]||\"\",e=a[\"background-position\"]||\"center center\",f=e.split(\" \"),g=parseInt(f[0])||0,h=parseInt(f[1])||0;\"no-repeat\"==c&&(g||h)&&(c=\"self\"),d=d.match(/url[\\s]*\\(([^\\)]*)\\)/),d=d?d[1]:\"\",updateFormState(\"colored\",b,d,c,g,h)}else updateFormState();var i=function(){updateFormState(),updateBackground()};domUtils.on($G(\"nocolorRadio\"),\"click\",updateBackground),domUtils.on($G(\"coloredRadio\"),\"click\",i),domUtils.on($G(\"url\"),\"keyup\",function(){$G(\"url\").value&&\"none\"==$G(\"alignment\").style.display&&utils.each($G(\"repeatType\").children,function(a){a.selected=\"repeat\"==a.getAttribute(\"value\")&&\"selected\"}),i()}),domUtils.on($G(\"repeatType\"),\"change\",i),domUtils.on($G(\"x\"),\"keyup\",updateBackground),domUtils.on($G(\"y\"),\"keyup\",updateBackground),initColorPicker()}function initColorPicker(){var a=editor,b=$G(\"colorPicker\"),c=new UE.ui.Popup({content:new UE.ui.ColorPicker({noColorText:a.getLang(\"clearColor\"),editor:a,onpickcolor:function(a,b){updateFormState(\"colored\",b),updateBackground(),UE.ui.Popup.postHide()},onpicknocolor:function(a,b){updateFormState(\"colored\",\"transparent\"),updateBackground(),UE.ui.Popup.postHide()}}),editor:a,onhide:function(){}});domUtils.on(b,\"click\",function(){c.showAnchor(this)}),domUtils.on(document,\"mousedown\",function(a){var b=a.target||a.srcElement;UE.ui.Popup.postHide(b)}),domUtils.on(window,\"scroll\",function(){UE.ui.Popup.postHide()})}function updateFormState(a,b,c,d,e,f){var g=$G(\"nocolorRadio\"),h=$G(\"coloredRadio\");if(a&&(g.checked=\"colored\"!=a&&\"checked\",h.checked=\"colored\"==a&&\"checked\"),b&&domUtils.setStyle($G(\"colorPicker\"),\"background-color\",b),c&&/^\\//.test(c)){var i=document.createElement(\"a\");i.href=c,browser.ie&&(i.href=i.href),c=browser.ie?i.href:i.protocol+\"//\"+i.host+i.pathname+i.search+i.hash}(c||\"\"===c)&&($G(\"url\").value=c),d&&utils.each($G(\"repeatType\").children,function(a){a.selected=d==a.getAttribute(\"value\")&&\"selected\"}),(e||f)&&($G(\"x\").value=parseInt(e)||0,$G(\"y\").value=parseInt(f)||0),$G(\"alignment\").style.display=h.checked&&$G(\"url\").value?\"\":\"none\",$G(\"custom\").style.display=h.checked&&$G(\"url\").value&&\"self\"==$G(\"repeatType\").value?\"\":\"none\"}function updateBackground(){if($G(\"coloredRadio\").checked){var a=domUtils.getStyle($G(\"colorPicker\"),\"background-color\"),b=$G(\"url\").value,c=$G(\"repeatType\").value,d={\"background-repeat\":\"no-repeat\",\"background-position\":\"center center\"};a&&(d[\"background-color\"]=a),b&&(d[\"background-image\"]=\"url(\"+b+\")\"),\"self\"==c?d[\"background-position\"]=$G(\"x\").value+\"px \"+$G(\"y\").value+\"px\":\"repeat-x\"!=c&&\"repeat-y\"!=c&&\"repeat\"!=c||(d[\"background-repeat\"]=c),editor.execCommand(\"background\",d)}else editor.execCommand(\"background\",null)}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var onlineImage,backupStyle=editor.queryCommandValue(\"background\");window.onload=function(){initTabs(),initColorSelector()},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.id=\"imageListUl\",this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode,d=$G(\"imageListUl\").childNodes;if(\"li\"==c.tagName.toLowerCase()){updateFormState(\"nocolor\",null,\"\");for(var e,f=0;e=d[f++];)e!=c||domUtils.hasClass(e,\"selected\")?domUtils.removeClasses(e,\"selected\"):(domUtils.addClass(e,\"selected\"),updateFormState(\"colored\",null,c.firstChild.getAttribute(\"_src\"),\"repeat\"));updateBackground()}})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),headers:editor.options.serverHeaders||{},method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"==json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,floatStyle:d})}return c}},dialog.onok=function(){updateBackground(),editor.fireEvent(\"saveScene\")},dialog.oncancel=function(){editor.execCommand(\"background\",backupStyle)}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/contentimport/contentimport.html",
    "content": "<!DOCTYPE html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7;\n        }\n\n        .wrapper .file-upload {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .file-upload .file-tip {\n            color: #999;\n            font-size: 12px;\n            padding-left: 10px;\n            flex-grow: 1;\n        }\n\n        .wrapper .file-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .file-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .file-manual .body {\n        }\n\n        .wrapper .file-manual .body li {\n            list-style: disc;\n            margin-left: 20px;\n        }\n\n        .wrapper .upload-button {\n            width: 100px;\n            height: 30px;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n            border-radius: 4px;\n            text-align: center;\n            line-height: 28px;\n            cursor: pointer;\n            position: relative;\n            flex-shrink: 0;\n            margin-right: 5px;\n        }\n\n        .wrapper .upload-button .text {\n            display: inline-block;\n            vertical-align: middle;\n        }\n\n        .wrapper .upload-button input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n            height: 100%;\n            width: 100%;\n        }\n\n        .wrapper .file-result {\n            border: 1px solid #333;\n            padding: 10px;\n            border-radius: 5px;\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #FFF;\n            bottom: 10px;\n            overflow: auto;\n            display: none;\n        }\n        .wrapper .file-input{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #EEE;\n            bottom: 10px;\n            border-radius: 5px;\n            display:none;\n        }\n        .wrapper .file-input textarea{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            bottom: 10px;\n            border: none;\n            resize: none;\n            border-radius: 5px;\n            padding: 5px;\n            outline: none;\n            top: 30px;\n        }\n        .wrapper .file-input .tool{\n            text-align: right;\n            padding: 5px 10px;\n        }\n        .wrapper .file-input .tool a{\n            display: inline-block;\n            text-decoration: none;\n            color: #333;\n            background: #FFF;\n            padding: 0 10px;\n            line-height: 20px;\n            border-radius: 3px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"file-upload\">\n        <div class=\"upload-button\">\n            <div class=\"text\">选择本地文件</div>\n            <input type=\"file\" id=\"contentImport\"/>\n        </div>\n        <div class=\"upload-button\">\n            <div class=\"text\" onclick=\"$('.file-input').show();\">粘贴Markdown</div>\n        </div>\n        <div class=\"file-tip\"></div>\n    </div>\n    <div class=\"file-manual\">\n        <div class=\"title\">\n            支持文档格式\n        </div>\n        <div class=\"body\">\n            <ul>\n                <li><b>Word</b>：docx</li>\n                <li><b>Markdown</b>：md</li>\n            </ul>\n        </div>\n    </div>\n    <div class=\"file-result\"></div>\n    <div class=\"file-input\">\n        <textarea id=\"fileInputContent\"></textarea>\n        <div class=\"tool\">\n            <a href=\"javascript:;\" id=\"fileInputConfirm\">\n                确定\n            </a>\n            <a href=\"javascript:;\" onclick=\"$(this).closest('.file-input').hide();\">\n                关闭\n            </a>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"mammoth.browser.min.js?109831e5\"></script>\n<script src=\"showdown.min.js?a1c1e879\"></script>\n<script type=\"text/javascript\" src=\"contentimport.js?100d2e1a\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        contentImport.init(options, callbacks);\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/contentimport/contentimport.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction processWord(a){$(\".file-tip\").html(\"正在转换Word文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){mammoth.convertToHtml({arrayBuffer:a.target.result}).then(function(a){$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=a.value,$(\".file-result\").html(a.value).show()},function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)})},b.onerror=function(a){$(\".file-tip\").html(\"Word文件转换失败:\"+a)},b.readAsArrayBuffer(a)}function processMarkdown(a){var b=new showdown.Converter,c=b.makeHtml(a);$(\".file-tip\").html(\"转换成功\"),contentImport.data.result=c,$(\".file-result\").html(c).show()}function processMarkdownFile(a){$(\".file-tip\").html(\"正在转换Markdown文件，请稍后...\"),$(\".file-result\").html(\"\").hide();var b=new FileReader;b.onload=function(a){processMarkdown(a.target.result)},b.onerror=function(a){$(\".file-tip\").html(\"Markdown文件转换失败:\"+a)},b.readAsText(a,\"UTF-8\")}function addUploadButtonListener(){g(\"contentImport\").addEventListener(\"change\",function(){const a=this.files[0],b=a.name,c=b.substring(b.lastIndexOf(\".\")+1).toLowerCase();switch(c){case\"docx\":case\"doc\":processWord(a);break;case\"md\":processMarkdownFile(a);break;default:$(\".file-tip\").html(\"不支持的文件格式:\"+c)}}),g(\"fileInputConfirm\").addEventListener(\"click\",function(){processMarkdown(g(\"fileInputContent\").value),$(\".file-input\").hide()})}function addOkListener(){dialog.onok=function(){return contentImport.data.result?(editor.fireEvent(\"saveScene\"),editor.execCommand(\"inserthtml\",contentImport.data.result),void editor.fireEvent(\"saveScene\")):(alert(\"请先上传文件识别内容\"),!1)},dialog.oncancel=function(){}}var contentImport={},g=$G;contentImport.data={result:null},contentImport.init=function(a,b){addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/emotion/emotion.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.jd img{background:transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.pp img{background:transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:25px;height:25px;display:block}.ldw img{background:transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.tsj img{background:transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.cat img{background:transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.bb img{background:transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.youa img{background:transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;cursor:pointer;width:35px;height:35px;display:block}.smileytable td{height:37px}#tabPanel{margin-left:5px;overflow:hidden}#tabContent{float:left;background:#FFF}#tabContent div{display:none;width:480px;overflow:hidden}#tabIconReview.show{left:17px;display:block}.menuFocus{background:#ACCD3C}.menuDefault{background:#FFF}#tabIconReview{position:absolute;left:406px;left:398px \\9;top:41px;z-index:65533;width:90px;height:76px}img.review{width:90px;height:76px;border:2px solid #9cb945;background:#FFF;background-position:center;background-repeat:no-repeat}.wrapper .tabbody{position:relative;float:left;clear:both;padding:10px;width:95%}.tabbody table{width:100%}.tabbody td{border:1px solid #BAC498}.tabbody td span{display:block;zoom:1;padding:0 4px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css?f71063c6\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js?cb3216b7\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum: 7, //切换面板数量\n        SmilmgName: {\n            tab0: ['j_00', 84],\n            tab1: ['t_00', 40],\n            tab2: ['w_00', 52],\n            tab3: ['B_00', 63],\n            tab4: ['C_00', 20],\n            tab5: ['i_f', 50],\n            tab6: ['y_00', 40]\n        }, //图片前缀名\n        imageFolders: {\n            tab0: 'jx2/',\n            tab1: 'tsj/',\n            tab2: 'ldw/',\n            tab3: 'bobo/',\n            tab4: 'babycat/',\n            tab5: 'face/',\n            tab6: 'youa/'\n        }, //图片对应文件夹路径\n        imageCss: {tab0: 'jd', tab1: 'tsj', tab2: 'ldw', tab3: 'bb', tab4: 'cat', tab5: 'pp', tab6: 'youa'}, //图片css类名\n        imageCssOffset: {tab0: 35, tab1: 35, tab2: 35, tab3: 35, tab4: 35, tab5: 25, tab6: 35}, //图片偏移\n        SmileyInfor: {\n            tab0: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2: ['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3: ['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4: ['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5: ['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6: ['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/emotion/emotion.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction initImgName(){for(var a in emotion.SmilmgName){var b=emotion.SmilmgName[a],c=emotion.SmileyBox[a],d=\"\";if(c.length)return;for(var e=1;e<=b[1];e++)d=b[0],e<10&&(d+=\"0\"),d=d+e+\".gif\",c.push(d)}}function initEvtHandler(a){for(var b=$G(a),c=0,d=0;c<b.childNodes.length;c++){var e=b.childNodes[c];1==e.nodeType&&(domUtils.on(e,\"click\",function(a){return function(){switchTab(a)}}(d)),d++)}switchTab(0),$G(\"tabIconReview\").style.display=\"none\"}function InsertSmiley(a,b){var c={src:editor.options.emotionLocalization?editor.options.UEDITOR_HOME_URL+\"dialogs/emotion/\"+a:a};c._src=c.src,editor.execCommand(\"insertimage\",c),b.ctrlKey||dialog.popup.hide()}function switchTab(a){autoHeight(a),0==emotion.tabExist[a]&&(emotion.tabExist[a]=1,createTab(\"tab\"+a));for(var b=$G(\"tabHeads\").getElementsByTagName(\"span\"),c=$G(\"tabBodys\").getElementsByTagName(\"div\"),d=0,e=b.length;d<e;d++)b[d].className=\"\",c[d].style.display=\"none\";b[a].className=\"focus\",c[a].style.display=\"block\"}function autoHeight(a){var b=dialog.getDom(\"iframe\"),c=b.parentNode.parentNode;switch(a){case 0:b.style.height=\"380px\",c.style.height=\"392px\";break;case 1:b.style.height=\"220px\",c.style.height=\"232px\";break;case 2:b.style.height=\"260px\",c.style.height=\"272px\";break;case 3:b.style.height=\"300px\",c.style.height=\"312px\";break;case 4:b.style.height=\"140px\",c.style.height=\"152px\";break;case 5:b.style.height=\"260px\",c.style.height=\"272px\";break;case 6:b.style.height=\"230px\",c.style.height=\"242px\"}}function createTab(a){for(var b,c,d,e,f,g,h=\"?v=1.1\",i=$G(a),j=emotion.SmileyPath+emotion.imageFolders[a],k=5.5,l=iHeight=35,m=3,n=emotion.imageCss[a],o=emotion.imageCssOffset[a],p=['<table class=\"smileytable\">'],q=0,r=emotion.SmileyBox[a].length,s=11;q<r;){p.push(\"<tr>\");for(var t=0;t<s;t++,q++)b=emotion.SmileyBox[a][q],b?(c=j+b+h,d=j+b,e=t<k?0:1,f=o*q*-1-1,g=emotion.SmileyInfor[a][q],p.push('<td  class=\"'+n+'\"   border=\"1\" width=\"'+m+'%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\''+d.replace(/'/g,\"\\\\'\")+\"',event)\\\" onmouseover=\\\"over(this,'\"+c+\"','\"+e+'\\')\" onmouseout=\"out(this)\">'),p.push(\"<span>\"),p.push('<img  style=\"background-position:left '+f+'px;\" title=\"'+g+'\" src=\"'+emotion.SmileyPath+(editor.options.emotionLocalization?'0.gif\" width=\"':'default/0.gif\" width=\"')+l+'\" height=\"'+iHeight+'\"></img>'),p.push(\"</span>\")):p.push('<td width=\"'+m+'%\"   bgcolor=\"#FFFFFF\">'),p.push(\"</td>\");p.push(\"</tr>\")}p.push(\"</table>\"),p=p.join(\"\"),i.innerHTML=p}function over(a,b,c){a.style.backgroundColor=\"#ACCD3C\",$G(\"faceReview\").style.backgroundImage=\"url(\"+b+\")\",1==c&&($G(\"tabIconReview\").className=\"show\"),$G(\"tabIconReview\").style.display=\"block\"}function out(a){a.style.backgroundColor=\"transparent\";var b=$G(\"tabIconReview\");b.className=\"\",b.style.display=\"none\"}function createTabList(a){for(var b={},c=0;c<a;c++)b[\"tab\"+c]=[];return b}function createArr(a){for(var b=[],c=0;c<a;c++)b[c]=0;return b}window.onload=function(){editor.setOpt({emotionLocalization:!1}),emotion.SmileyPath=editor.options.emotionLocalization===!0?\"images/\":\"http://img.baidu.com/hi/\",emotion.SmileyBox=createTabList(emotion.tabNum),emotion.tabExist=createArr(emotion.tabNum),initImgName(),initEvtHandler(\"tabHeads\")};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/formula/formula.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            box-sizing: border-box;\n            width: 800px;\n            height: 390px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .editor-wrap {\n            display: flex;\n            margin: 10px;\n        }\n\n        .editor-wrap #editor {\n            width: 0;\n            flex-grow: 1;\n            border: 1px solid #CCC;\n            border-radius: 3px;\n            padding: 5px;\n            height: 100px;\n            outline: none;\n        }\n\n        .input-tip {\n            margin: 10px;\n        }\n\n        .input-tip a {\n            color: #0f0d0d;\n        }\n\n        .editor-preview {\n            background: #FFF;\n            border-radius: 3px;\n            border: 1px solid #EEE;\n            display: none;\n            margin: 10px;\n        }\n\n        .editor-preview .title {\n            padding: 5px;\n        }\n\n        .editor-preview .body {\n            padding: 5px 5px 15px 5px;\n            text-align: center;\n        }\n\n        .editor-preview .body .image {\n            max-width: 100%;\n            max-height: 100px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n\n    <div id=\"modeLive\" style=\"display:none;\">\n        <iframe id=\"liveEditor\"\n                frameborder=\"0\"\n                style=\"width:800px;height:390px;border: 0;outline: none;\"\n        ></iframe>\n    </div>\n\n    <div id=\"modePlain\" style=\"display:none;\">\n        <div class=\"editor-wrap\">\n            <textarea id=\"editor\"></textarea>\n        </div>\n        <div class=\"input-tip\">\n            基于 latex 语法，<a href=\"javascript:;\" id=\"inputDemo\">点击输入示例</a>。\n        </div>\n        <div class=\"editor-preview\" id=\"preview\">\n            <div class=\"title\">预览</div>\n            <div class=\"body\">\n                <img class=\"image\" id=\"previewImage\"/>\n            </div>\n        </div>\n    </div>\n\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"formula.js?3e957a67\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        Formula.init();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/formula/formula.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction preg_quote(a,b){return(a+\"\").replace(new RegExp(\"[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\\"+(b||\"\")+\"-]\",\"g\"),\"\\\\$&\")}function loadScript(a,b){var c;c=document.createElement(\"script\"),c.src=a,c.onload=function(){b&&b({isNew:!0})},document.getElementsByTagName(\"head\")[0].appendChild(c)}var Formula={mode:\"plain\",latexeasy:null,init:function(){Formula.initMode(),Formula.initEvent(),Formula.initSubmit()},renderPlain:function(){var a=$(\"#preview\"),b=$(\"#editor\").val();if(!b)return void a.hide();b=encodeURIComponent(b);var c=editor.getOpt(\"formulaConfig\"),d=c.imageUrlTemplate.replace(/\\{\\}/,b);$(\"#previewImage\").attr(\"src\",d),a.show()},setValuePlain:function(a){$(\"#editor\").val(a),Formula.renderPlain()},setValueLive:function(a){return Formula.latexeasy?void Formula.latexeasy.call(\"set.latex\",{latex:a}):void setTimeout(function(){Formula.setValueLive(a)},100)},initMode:function(){var a=editor.getOpt(\"formulaConfig\");\"live\"===a.editorMode?($(\"#liveEditor\").attr(\"src\",a.editorLiveServer+\"/editor\"),$(\"#modeLive\").show(),Formula.mode=\"live\"):($(\"#modePlain\").show(),Formula.mode=\"plain\");var b=editor.selection.getRange().getClosedNode();if(b&&null!==b.getAttribute(\"data-formula-image\")){var c=b.getAttribute(\"data-formula-image\");c&&Formula.setValue(decodeURIComponent(c))}},setValue:function(a){switch(Formula.mode){case\"plain\":Formula.setValuePlain(a);break;case\"live\":Formula.setValueLive(a)}},getValue:function(a){switch(Formula.mode){case\"plain\":a($.trim($(\"#editor\").val()));break;case\"live\":Formula.latexeasy.call(\"get.latex\",{},function(b){a(b.latex)})}},initEvent:function(){var a,b=null;switch(Formula.mode){case\"plain\":$(\"#editor\").on(\"change keypress\",function(){b&&clearTimeout(b),b=setTimeout(function(){Formula.renderPlain()},1e3)}),$(\"#inputDemo\").on(\"click\",function(){$(\"#editor\").val(\"f(a) = \\\\frac{1}{2\\\\pi i} \\\\oint\\\\frac{f(z)}{z-a}dz\"),Formula.renderPlain()});break;case\"live\":var c=editor.getOpt(\"formulaConfig\");loadScript(c.editorLiveServer+\"/vendor/LatexEasyEditor/editor/sdk.js\",function(){a=new window.LatexEasy(document.getElementById(\"liveEditor\")),a.on(\"ready\",function(){Formula.latexeasy=a}),a.init()})}},initSubmit:function(){dialog.onclose=function(a,b){return!b||(Formula.getValue(function(a){editor.execCommand(\"formula\",a),editor.fireEvent(\"saveScene\"),dialog.close(!1)}),!1)}}};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/help/help.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrapper{width:370px;margin:10px auto;zoom:1}.tabbody{height:360px}.tabbody .panel{width:100%;height:360px;position:absolute;background:#fff}.tabbody .panel h1{font-size:26px;margin:5px 0 0 5px}.tabbody .panel p{font-size:12px;margin:5px 0 0 5px}.tabbody table{width:90%;line-height:20px;margin:5px 0 0 5px}.tabbody table thead{font-weight:700;line-height:25px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css?94b325b2\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor Plus</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js?cf43351e\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/help/help.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");i.onclick=function(){this.style.zoom=1},j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}switchTab(\"helptab\"),document.getElementById(\"version\").innerHTML=parent.UE.version;"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/image/image.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{zoom:1;width:630px;*width:626px;height:380px;margin:0 auto;padding:10px;position:relative;font-family:sans-serif}.tabhead{float:left}.tabbody{width:100%;height:346px;position:relative;clear:both}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:346px;display:block}.alignBar{float:right;margin-top:5px;position:relative}.alignBar .algnLabel{float:left;height:20px;line-height:20px}.alignBar #alignIcon{zoom:1;_display:inline;display:inline-block;position:relative}.alignBar #alignIcon span{float:left;cursor:pointer;display:block;width:19px;height:17px;margin-right:3px;margin-left:3px;background-image:url(./images/alignicon.jpg)}.alignBar #alignIcon .none-align{background-position:0 -18px}.alignBar #alignIcon .left-align{background-position:-20px -18px}.alignBar #alignIcon .right-align{background-position:-40px -18px}.alignBar #alignIcon .center-align{background-position:-60px -18px}.alignBar #alignIcon .none-align.focus{background-position:0 0}.alignBar #alignIcon .left-align.focus{background-position:-20px 0}.alignBar #alignIcon .right-align.focus{background-position:-40px 0}.alignBar #alignIcon .center-align.focus{background-position:-60px 0}#remote{z-index:200}#remote .top{width:100%;margin-top:25px}#remote .left{display:block;float:left;width:300px;height:10px}#remote .right{display:block;float:right;width:300px;height:10px}#remote .row{margin-left:20px;clear:both;height:40px}#remote .row label{text-align:center;width:50px;zoom:1;_display:inline;display:inline-block;vertical-align:middle}#remote .row label.algnLabel{float:left}#remote input.text{width:150px;padding:3px 6px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}#remote input.text:focus{outline:0}#remote #url{width:400px;margin-bottom:2px}#remote #imageSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:top}#remote #width,#remote #height{width:30px;margin-left:2px;margin-right:2px;text-align:center}#remote #border,#remote #vhSpace,#remote #title{width:180px;margin-right:5px}#remote #lock{display:inline-block;vertical-align:middle}#remote #lockicon{zoom:1;_display:inline;display:inline-block;width:20px;height:20px;background:url(../../themes/default/images/lock.gif) -13px -13px no-repeat;vertical-align:middle}#remote #preview{clear:both;width:260px;height:240px;z-index:9999;margin-top:10px;background-color:#eee;overflow:hidden}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:346px;display:block;clip:auto}#upload .queueList{margin:0;width:100%;height:100%;position:absolute;overflow:hidden}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:172px;padding-top:150px;text-align:center;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*top:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:300px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both;position:relative}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:9px 0 0 9px;*margin:6px 0 0 6px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background:url(./images/success.gif) no-repeat right bottom \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}#online{width:100%;height:336px;padding:10px 0 0}#online #imageList{width:100%;height:100%;overflow-x:hidden;overflow-y:auto;position:relative}#online ul{display:block;list-style:none;margin:0;padding:0}#online li{float:left;display:block;list-style:none;padding:0;width:113px;height:113px;margin:0 0 9px 9px;*margin:0 0 6px 6px;background-color:#eee;overflow:hidden;cursor:pointer;position:relative}#online li.clearFloat{float:none;clear:both;display:block;width:0;height:0;margin:0;padding:0}#online li img{cursor:pointer}#online li .icon{cursor:pointer;width:113px;height:113px;position:absolute;top:0;left:0;z-index:2;border:0;background-repeat:no-repeat}#online li .icon:hover{width:107px;height:107px;border:3px solid #1094fa}#online li.selected .icon{background-image:url(images/success.png);background-image:url(images/success.gif) \\9;background-position:75px 75px}#online li.selected .icon:hover{width:107px;height:107px;border:3px solid #1094fa;background-position:72px 72px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/image/image.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css?4cbad164\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"remote\"><var id=\"lang_tab_remote\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n                        <span id=\"noneAlign\" class=\"none-align focus\" data-align=\"none\"></span>\n                        <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n                        <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n                        <span id=\"centerAlign\" class=\"center-align\" data-align=\"center\"></span>\n                    </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\"/>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n            <div class=\"top\">\n                <div class=\"row\">\n                    <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n                    <span><input class=\"text\" id=\"url\" type=\"text\"/></span>\n                    <a href=\"javascript:;\" id=\"imageSelect\" style=\"display:none;\">选择图片</a>\n                </div>\n            </div>\n            <div class=\"left\">\n                <div class=\"row\">\n                    <label><var id=\"lang_input_size\"></var></label>\n                    <span><var id=\"lang_input_width\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\"\n                                                                              id=\"width\"/>px </span>\n                    <span><var id=\"lang_input_height\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"height\"/>px </span>\n                    <span><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\"><span id=\"lockicon\"></span></span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_border\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"border\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_vhspace\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"vhSpace\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_title\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"title\"/></span>\n                </div>\n            </div>\n            <div class=\"right\">\n                <div id=\"preview\"></div>\n            </div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n            <div class=\"searchBar\">\n                <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\"/>\n                <select id=\"searchType\" class=\"searchType\">\n                    <option value=\"&s=4&z=0\"></option>\n                    <option value=\"&s=1&z=19\"></option>\n                    <option value=\"&s=2&z=0\"></option>\n                    <option value=\"&s=3&z=0\"></option>\n                </select>\n                <input id=\"searchReset\" type=\"button\"/>\n                <input id=\"searchBtn\" type=\"button\"/>\n            </div>\n            <div id=\"searchList\" class=\"searchList\">\n                <ul id=\"searchListUl\"></ul>\n            </div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"image.js?2137df65\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/image/image.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function initTabs(){for(var a=$G(\"tabhead\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(a){var b=a.target||a.srcElement;setTabFocus(b.getAttribute(\"data-content-id\"))});editorOpt.disableUpload||($G(\"tabhead\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),editorOpt.disableOnline||($G(\"tabhead\").querySelector('[data-content-id=\"online\"]').style.display=\"inline-block\"),editorOpt.selectCallback&&($G(\"imageSelect\").style.display=\"inline-block\",domUtils.on($G(\"imageSelect\"),\"click\",function(a){editorOpt.selectCallback(editor,function(a){if(a){$G(\"url\").value=a.path,$G(\"title\").value=a.name;var b=new Image;b.onload=function(){$G(\"width\").value=b.width,$G(\"height\").value=b.height,remoteImage.setPreview()},b.onerror=function(){remoteImage.setPreview()},b.src=a.path}})}));var c=editor.selection.getRange().getClosedNode();setTabFocus((c&&c.tagName&&\"img\"==c.tagName.toLowerCase(),\"remote\"))}function setTabFocus(a){if(a){var b,c,d=$G(\"tabhead\").children;for(b=0;b<d.length;b++)c=d[b].getAttribute(\"data-content-id\"),c==a?(domUtils.addClass(d[b],\"focus\"),domUtils.addClass($G(c),\"focus\")):(domUtils.removeClasses(d[b],\"focus\"),domUtils.removeClasses($G(c),\"focus\"));switch(a){case\"remote\":remoteImage=remoteImage||new RemoteImage;break;case\"upload\":setAlign(editor.getOpt(\"imageInsertAlign\")),uploadImage=uploadImage||new UploadImage(\"queueList\");break;case\"online\":setAlign(editor.getOpt(\"imageManagerInsertAlign\")),onlineImage=onlineImage||new OnlineImage(\"imageList\"),onlineImage.reset()}}}function initButtons(){dialog.onok=function(){for(var a,b=!1,c=[],d=$G(\"tabhead\").children,e=0;e<d.length;e++)if(domUtils.hasClass(d[e],\"focus\")){a=d[e].getAttribute(\"data-content-id\");break}switch(a){case\"remote\":c=remoteImage.getInsertList();break;case\"upload\":c=uploadImage.getInsertList();var f=uploadImage.getQueueCount();if(f)return $(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,f)+\"</span>\"),!1;break;case\"online\":c=onlineImage.getInsertList()}c&&(editor.execCommand(\"insertimage\",c),b&&editor.fireEvent(\"catchRemoteImage\"))}}function initAlign(){domUtils.on($G(\"alignIcon\"),\"click\",function(a){var b=a.target||a.srcElement;b.className&&b.className.indexOf(\"-align\")!=-1&&setAlign(b.getAttribute(\"data-align\"))})}function setAlign(a){a=a||\"none\";var b=$G(\"alignIcon\").children;for(i=0;i<b.length;i++)b[i].getAttribute(\"data-align\")==a?(domUtils.addClass(b[i],\"focus\"),$G(\"align\").value=b[i].getAttribute(\"data-align\")):domUtils.removeClasses(b[i],\"focus\")}function getAlign(){var a=$G(\"align\").value||\"none\";return\"none\"==a?\"\":a}function RemoteImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}function UploadImage(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}function OnlineImage(a){this.container=utils.isString(a)?document.getElementById(a):a,this.init()}var remoteImage,uploadImage,onlineImage,editorOpt={};window.onload=function(){editorOpt=editor.getOpt(\"imageConfig\"),initTabs(),initAlign(),initButtons()},RemoteImage.prototype={init:function(){this.initContainer(),this.initEvents()},initContainer:function(){this.dom={url:$G(\"url\"),width:$G(\"width\"),height:$G(\"height\"),border:$G(\"border\"),vhSpace:$G(\"vhSpace\"),title:$G(\"title\"),align:$G(\"align\")};var a=editor.selection.getRange().getClosedNode();a&&this.setImage(a)},initEvents:function(){function a(){b.setPreview()}var b=this,c=$G(\"lock\");domUtils.on($G(\"url\"),\"keyup\",a),domUtils.on($G(\"border\"),\"keyup\",a),domUtils.on($G(\"title\"),\"keyup\",a),domUtils.on($G(\"width\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"height\").value=Math.round(this.value/d)}else b.updateLocker();a()}),domUtils.on($G(\"height\"),\"keyup\",function(){if(c.checked){var d=c.getAttribute(\"data-proportion\");$G(\"width\").value=Math.round(this.value*d)}else b.updateLocker();a()}),domUtils.on($G(\"lock\"),\"change\",function(){var a=parseInt($G(\"width\").value)/parseInt($G(\"height\").value);c.setAttribute(\"data-proportion\",a)})},updateLocker:function(){var a=$G(\"width\").value,b=$G(\"height\").value,c=$G(\"lock\");a&&b&&a==parseInt(a)&&b==parseInt(b)?(c.disabled=!1,c.title=\"\"):(c.checked=!1,c.disabled=\"disabled\",c.title=lang.remoteLockError)},setImage:function(a){if(a.tagName&&(\"img\"==a.tagName.toLowerCase()||a.getAttribute(\"src\"))&&a.src){var b=a.getAttribute(\"data-word-image\"),c=b?b.replace(\"&amp;\",\"&\"):a.getAttribute(\"_src\")||a.getAttribute(\"src\",2).replace(\"&amp;\",\"&\"),d=editor.queryCommandValue(\"imageFloat\");c!==$G(\"url\").value&&($G(\"url\").value=c),c&&($G(\"width\").value=a.width||\"\",$G(\"height\").value=a.height||\"\",$G(\"border\").value=a.getAttribute(\"border\")||\"0\",$G(\"vhSpace\").value=a.getAttribute(\"vspace\")||\"0\",$G(\"title\").value=a.title||a.alt||\"\",setAlign(d),this.setPreview(),this.updateLocker())}},getData:function(){var a={};for(var b in this.dom)a[b]=this.dom[b].value;return a},setPreview:function(){var a,b,c=$G(\"url\").value,d=$G(\"width\").value,e=$G(\"height\").value,f=$G(\"border\").value,g=$G(\"title\").value,h=$G(\"preview\");a=d&&e?Math.min(d,h.offsetWidth):h.offsetWidth,a=a+2*f>h.offsetWidth?a:h.offsetWidth-2*f,b=d&&e?a*e/d:\"\",c&&(h.innerHTML='<img src=\"'+c+'\" width=\"'+a+'\" height=\"'+b+'\" border=\"'+f+'px solid #000\" title=\"'+g+'\" />')},getInsertList:function(){var a=this.getData();if(a.url){var b={src:a.url,_src:a.url};return b._propertyDelete=[],b.style=[],a.width?(b.width=a.width,b.style.push(\"width:\"+a.width+\"px\")):b._propertyDelete.push(\"width\"),a.height?(b.height=a.height,b.style.push(\"height:\"+a.height+\"px\")):b._propertyDelete.push(\"height\"),a.border?b.border=a.border:b._propertyDelete.push(\"border\"),a.align?b.floatStyle=a.align:b._propertyDelete.push(\"floatStyle\"),a.vhSpace?b.vspace=a.vhSpace:b._propertyDelete.push(\"vspace\"),a.title?b.alt=a.title:b._propertyDelete.push(\"alt\"),b.style.length>0?b.style=b.style.join(\";\"):b._propertyDelete.push(\"style\"),[b]}return[]}},UploadImage.prototype={init:function(){this.imageList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},t,u),w[a.id]=[a.size,0],a.rotation=0,a.ext&&z.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),w[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?w[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}x?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete w[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(w,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!==v){var c=f.getStats();switch(m.removeClass(\"state-\"+v),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}v=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===v?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===v?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,s=window.devicePixelRatio||1,t=113*s,u=113*s,v=\"\",w={},x=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),y=editor.getActionUrl(editor.getOpt(\"imageActionName\")),z=(editor.getOpt(\"imageAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\"),A=editor.getOpt(\"imageMaxSize\"),B=editor.getOpt(\"imageCompressBorder\");return WebUploader.Uploader.support()?editor.getOpt(\"imageActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},accept:{title:\"Images\",extensions:z,mimeTypes:\"image/*\"},swf:\"../../third-party/webuploader/Uploader.swf\",server:y,fileVal:editor.getOpt(\"imageFieldName\"),duplicate:!0,fileSingleSizeLimit:A,threads:1,headers:editor.getOpt(\"serverHeaders\")||{},compress:!!editor.getOpt(\"imageCompressEnable\")&&{enable:editor.getOpt(\"imageCompressEnable\"),maxWidthOrHeight:B,maxSize:A}}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){a.ext&&z.indexOf(a.ext.toLowerCase())!=-1&&a.size<=A&&(q--,r-=a.size),b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=v&&\"finish\"!=v&&\"confirm\"!=v&&\"ready\"!=v||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(y+(y.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){y.toLowerCase().indexOf(\"jsp\")!=-1&&(c[\"X-Requested-With\"]=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),w[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(g.imageList.push(e),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"image\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===v?f.upload():\"paused\"===v?f.upload():\"uploading\"===v&&f.stop())}),m.addClass(\"state-\"+v),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},destroy:function(){this.$wrap.remove()},getInsertList:function(){var a,b,c=[],d=getAlign(),e=editor.getOpt(\"imageUrlPrefix\");for(a=0;a<this.imageList.length;a++)b=this.imageList[a],c.push({src:e+b.url,_src:e+b.url,alt:b.original,floatStyle:d});return c}},OnlineImage.prototype={init:function(){this.reset(),this.initEvents()},initContainer:function(){this.container.innerHTML=\"\",this.list=document.createElement(\"ul\"),this.clearFloat=document.createElement(\"li\"),domUtils.addClass(this.list,\"list\"),domUtils.addClass(this.clearFloat,\"clearFloat\"),this.list.appendChild(this.clearFloat),this.container.appendChild(this.list)},initEvents:function(){var a=this;domUtils.on($G(\"imageList\"),\"scroll\",function(b){var c=this;c.scrollHeight-(c.offsetHeight+c.scrollTop)<10&&a.getImageData()}),domUtils.on(this.container,\"click\",function(a){var b=a.target||a.srcElement,c=b.parentNode;\"li\"==c.tagName.toLowerCase()&&(domUtils.hasClass(c,\"selected\")?domUtils.removeClasses(c,\"selected\"):domUtils.addClass(c,\"selected\"))})},initData:function(){this.state=0,this.listSize=editor.getOpt(\"imageManagerListSize\"),this.listIndex=0,this.listEnd=!1,this.getImageData()},reset:function(){this.initContainer(),this.initData()},getImageData:function(){var _this=this;if(!_this.listEnd&&!this.isLoadingData){this.isLoadingData=!0;var url=editor.getActionUrl(editor.getOpt(\"imageManagerActionName\")),isJsonp=utils.isCrossDomainUrl(url);ajax.request(url,{timeout:1e5,dataType:isJsonp?\"jsonp\":\"\",headers:editor.options.serverHeaders||{},data:utils.extend({start:this.listIndex,size:this.listSize},editor.queryCommandValue(\"serverparam\")),method:\"get\",onsuccess:function(r){try{var json=isJsonp?r:eval(\"(\"+r.responseText+\")\");\"SUCCESS\"===json.state&&(_this.pushData(json.list),_this.listIndex=parseInt(json.start)+parseInt(json.list.length),_this.listIndex>=json.total&&(_this.listEnd=!0),_this.isLoadingData=!1)}catch(e){if(r.responseText.indexOf(\"ue_separate_ue\")!=-1){var list=r.responseText.split(r.responseText);_this.pushData(list),_this.listIndex=parseInt(list.length),_this.listEnd=!0,_this.isLoadingData=!1}}},onerror:function(){_this.isLoadingData=!1}})}},pushData:function(a){var b,c,d,e,f=this,g=editor.getOpt(\"imageManagerUrlPrefix\");for(b=0;b<a.length;b++)a[b]&&a[b].url&&(c=document.createElement(\"li\"),d=document.createElement(\"img\"),e=document.createElement(\"span\"),domUtils.on(d,\"load\",function(a){return function(){f.scale(a,a.parentNode.offsetWidth,a.parentNode.offsetHeight)}}(d)),d.width=113,d.setAttribute(\"src\",g+a[b].url+(a[b].url.indexOf(\"?\")==-1?\"?noCache=\":\"&noCache=\")+(+new Date).toString(36)),d.setAttribute(\"_src\",g+a[b].url),domUtils.addClass(e,\"icon\"),c.appendChild(d),c.appendChild(e),this.list.insertBefore(c,this.clearFloat))},scale:function(a,b,c,d){var e=a.width,f=a.height;\"justify\"==d?e>=f?(a.width=b,a.height=c*f/e,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b*e/f,a.height=c,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\"):e>=f?(a.width=b*e/f,a.height=c,a.style.marginLeft=\"-\"+parseInt((a.width-b)/2)+\"px\"):(a.width=b,a.height=c*f/e,a.style.marginTop=\"-\"+parseInt((a.height-c)/2)+\"px\")},getInsertList:function(){var a,b=this.list.children,c=[],d=getAlign();for(a=0;a<b.length;a++)if(domUtils.hasClass(b[a],\"selected\")){var e=b[a].firstChild,f=e.getAttribute(\"_src\");c.push({src:f,_src:f,alt:f.substr(f.lastIndexOf(\"/\")+1),floatStyle:d})}return c}}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" href=\"../../themes/default/dialog.css?c473027a\">\n    <style type=\"text/css\">\n        .warp {\n            width: 320px;\n            height: 200px;\n            margin-left: 5px;\n            padding: 20px 0 0 15px;\n            position: relative;\n        }\n\n        #url {\n            width: 290px;\n            margin-bottom: 2px;\n            margin-left: -6px;\n            margin-left: -2px \\9;\n            *margin-left: 0;\n            _margin-left: 0;\n        }\n\n        .format span {\n            display: inline-block;\n            width: 58px;\n            text-align: left;\n            zoom: 1;\n        }\n\n        table td {\n            padding: 5px 0;\n        }\n\n        #align {\n            width: 65px;\n            height: 23px;\n            line-height: 22px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n    <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td colspan=\"2\" class=\"format\">\n                <span><var id=\"lang_input_address\"></var></span>\n                <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\"\n                                                                                                type=\"text\" id=\"width\"/>\n                px\n            </td>\n\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\"\n                                                                                                 type=\"text\"\n                                                                                                 id=\"height\"/> px\n            </td>\n        </tr>\n        <tr>\n            <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/></td>\n            <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/></td>\n        </tr>\n\n        <tr>\n            <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                <select id=\"align\">\n                    <option value=\"\"></option>\n                    <option value=\"left\"></option>\n                    <option value=\"right\"></option>\n                </select>\n            </td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if (iframe) {\n        $G(\"url\").value = iframe.getAttribute(\"src\") || \"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\") || iframe.style.width.replace(\"px\", \"\") || \"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\", \"\") || \"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n\n    function queding() {\n        var url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig, \"\"),\n            width = $G(\"width\").value,\n            height = $G(\"height\").value,\n            scroll = $G(\"scroll\"),\n            frameborder = $G(\"frameborder\"),\n            float = $G(\"align\").value,\n            newIframe = editor.document.createElement(\"iframe\"),\n            div;\n        if (!url) {\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\", /http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\" + url);\n        /^[1-9]+[.]?\\d*$/g.test(width) ? newIframe.setAttribute(\"width\", width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test(height) ? newIframe.setAttribute(\"height\", height) : \"\";\n        scroll.checked ? newIframe.setAttribute(\"scrolling\", \"yes\") : newIframe.setAttribute(\"scrolling\", \"no\");\n        frameborder.checked ? newIframe.setAttribute(\"frameborder\", \"1\", 0) : newIframe.setAttribute(\"frameborder\", \"0\", 0);\n        float ? newIframe.setAttribute(\"align\", float) : newIframe.setAttribute(\"align\", \"\");\n        if (iframe) {\n            iframe.parentNode.insertBefore(newIframe, iframe);\n            domUtils.remove(iframe);\n        } else {\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\", div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function (evt) {\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            queding();\n        }\n    };\n    $focus($G(\"url\"));\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/internal.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a=window.parent;dialog=a.$EDITORUI[window.frameElement.id.replace(/_iframe$/,\"\")],editor=dialog.editor,UE=a.UE,domUtils=UE.dom.domUtils,utils=UE.utils,browser=UE.browser,ajax=UE.ajax,$G=function(a){return document.getElementById(a)},$focus=function(a){setTimeout(function(){if(browser.ie){var b=a.createTextRange();b.collapse(!1),b.select()}else a.focus()},0)},utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/dialogbase.css?cache=\"+Math.random(),tag:\"link\",type:\"text/css\",rel:\"stylesheet\"}),lang=editor.getLang(dialog.className.split(\"-\")[2]),lang&&domUtils.on(window,\"load\",function(){var a=editor.options.langPath+editor.options.lang+\"/images/\";for(var b in lang[\"static\"]){var c=$G(b);if(c){var d=c.tagName,e=lang[\"static\"][b];switch(e.src&&(e=utils.extend({},e,!1),e.src=a+e.src),e.style&&(e=utils.extend({},e,!1),e.style=e.style.replace(/url\\s*\\(/g,\"url(\"+a)),d.toLowerCase()){case\"var\":c.parentNode.replaceChild(document.createTextNode(e),c);break;case\"select\":for(var f,g=c.options,h=0;f=g[h];)f.innerHTML=e.options[h++];for(var i in e)\"options\"!=i&&c.setAttribute(i,e[i]);break;default:domUtils.setAttributes(c,e)}}}})}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        * {\n            margin: 0;\n            padding: 0;\n            color: #838383;\n        }\n\n        table {\n            font-size: 12px;\n            margin: 10px;\n            line-height: 36px;\n            width: 100%;\n        }\n\n        .txt {\n            box-sizing: border-box;\n            width: 90%;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #d7d7d7;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div style=\"padding:10px;\">\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                <input id=\"target\" type=\"checkbox\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue(\"link\") : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(), 'a', true),\n        orgText;\n\n    link = domUtils.findParentByTagName(link, \"a\", true);\n\n    if (link) {\n        url = utils.html(link.getAttribute('_href') || link.getAttribute('href', 2));\n\n        if (rangeLink === link && !link.getElementsByTagName('img').length) {\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText' : 'textContent'];\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    } else {\n        if (range.collapsed) {\n            text.removeAttribute('disabled');\n            text.value = '';\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url : '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true : false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk() {\n        var href = $G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if (href) {\n            if (!hrefStartWith(href, allowLinkProtocols)) {\n                href = \"http://\" + href;\n            }\n            var obj = {\n                'href': href,\n                'target': $G(\"target\").checked ? \"_blank\" : '_self',\n                'title': $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href': href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if (orgText && text.value != orgText) {\n                link[browser.ie ? 'innerText' : 'textContent'] = obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if (range.collapsed) {\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link', utils.clearEmptyAttrs(obj));\n            dialog.close();\n        }\n    }\n\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function () {\n        if (!hrefStartWith(this.value, allowLinkProtocols)) {\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\" + lang.httpPrompt + \"</span>\";\n        } else {\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href, arr) {\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for (var i = 0, ai; ai = arr[i++];) {\n            if (href.indexOf(ai) == 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <style>\n        html, body {\n            height: 100%;\n            width: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview {\n            width: 100%;\n            height: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview * {\n            font-family: sans-serif;\n            font-size: 16px;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <script src=\"../../ueditor.parse.js?63488b91\"></script>\n    <title></title>\n</head>\n<body class=\"view\">\n<div id=\"preview\" style=\"margin:8px\">\n\n</div>\n</body>\n<script>\n    document.getElementById('preview').innerHTML = editor.getContent();\n    uParse('#preview', {\n        rootPath: '../../',\n        chartContainerHeight: 500\n    })\n    dialog.oncancel = function () {\n        document.getElementById('preview').innerHTML = '';\n    }\n</script>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/scrawl/scrawl.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{margin:0}table{width:100%}table td{padding:2px 4px;vertical-align:middle}a{text-decoration:none}em{font-style:normal}.border_style1{border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}.main{margin:8px;overflow:hidden}.hot{float:left;height:335px}.drawBoard{position:relative;cursor:crosshair}.brushBorad{position:absolute;left:0;top:0;z-index:998}.picBoard{border:0;text-align:center;line-height:300px;cursor:default}.operateBar{margin-top:10px;font-size:12px;text-align:center}.operateBar span{margin-left:10px}.drawToolbar{float:right;width:110px;height:300px;overflow:hidden}.colorBar{margin-top:10px;font-size:12px;text-align:center}.colorBar a{display:block;width:10px;height:10px;border:1px solid #1006F1;border-radius:3px;box-shadow:2px 2px 5px #d3d6da;opacity:.3}.sectionBar{margin-top:15px;font-size:12px;text-align:center}.sectionBar a{display:inline-block;width:10px;height:12px;color:#888;text-indent:-999px;opacity:.3}.size1{background:url(images/size.png) 1px center no-repeat}.size2{background:url(images/size.png) -10px center no-repeat}.size3{background:url(images/size.png) -22px center no-repeat}.size4{background:url(images/size.png) -35px center no-repeat}.addImgH{position:relative}.addImgH_form{position:absolute;left:18px;top:-1px;width:75px;height:21px;opacity:0;cursor:pointer}.addImgH_form input{width:100%}.maskLayerNull{display:none}.maskLayer{position:absolute;top:0;left:0;width:100%;height:100%;opacity:.7;background-color:#fff;text-align:center;font-weight:700;line-height:300px;z-index:1000}.previousStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undoH.png);cursor:pointer}.previousStepH .text{color:#888;cursor:pointer}.previousStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/undo.png);cursor:default}.previousStep .text{color:#ccc;cursor:default}.nextStepH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redoH.png);cursor:pointer}.nextStepH .text{color:#888;cursor:pointer}.nextStep .icon{display:inline-block;width:16px;height:16px;background-image:url(images/redo.png);cursor:default}.nextStep .text{color:#ccc;cursor:default}.clearBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/emptyH.png);cursor:pointer}.clearBoardH .text{color:#888;cursor:pointer}.clearBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/empty.png);cursor:default}.clearBoard .text{color:#ccc;cursor:default}.scaleBoardH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scaleH.png);cursor:pointer}.scaleBoardH .text{color:#888;cursor:pointer}.scaleBoard .icon{display:inline-block;width:16px;height:16px;background-image:url(images/scale.png);cursor:default}.scaleBoard .text{color:#ccc;cursor:default}.removeImgH .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimgH.png);cursor:pointer}.removeImgH .text{color:#888;cursor:pointer}.removeImg .icon{display:inline-block;width:16px;height:16px;background-image:url(images/delimg.png);cursor:default}.removeImg .text{color:#ccc;cursor:default}.addImgH .icon{vertical-align:top;display:inline-block;width:16px;height:16px;background-image:url(images/addimg.png)}.addImgH .text{color:#888;cursor:pointer}.brushIcon{display:inline-block;width:16px;height:16px;background-image:url(images/brush.png)}.eraserIcon{display:inline-block;width:16px;height:16px;background-image:url(images/eraser.png)}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css?dce615c7\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js?eb98629c\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize: 3, //画笔初始大小\n        drawBrushColor: \"#4bacc6\", //画笔初始颜色\n        colorList: ['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum: 10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl(settings);\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec(scrawlObj);\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/scrawl/scrawl.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction ue_callback(a,b){function c(a,b,c,d){var e,f=0,g=0,h=a.width||c,i=a.height||d;(h>b||i>b)&&(h>=i?(f=h-b)&&(e=(f/h).toFixed(2),a.height=i-i*e,a.width=b):(g=i-b)&&(e=(g/i).toFixed(2),a.width=h-h*e,a.height=b))}var d=document,e=$G(\"J_picBoard\"),f=d.createElement(\"img\");removeMaskLayer(),\"SUCCESS\"==b?(e.innerHTML=\"\",f.onload=function(){c(this,300),e.appendChild(f);var a=new scrawl;a.btn2Highlight(\"J_removeImg\"),a.btn2Highlight(\"J_sacleBoard\")},f.src=a):alert(b)}function removeMaskLayer(){var a=$G(\"J_maskLayer\");a.className=\"maskLayerNull\",a.innerHTML=\"\",dialog.buttons[0].setDisabled(!1)}function addMaskLayer(a){var b=$G(\"J_maskLayer\");dialog.buttons[0].setDisabled(!0),b.className=\"maskLayer\",b.innerHTML=a}function exec(scrawlObj){if(scrawlObj.isScrawl){addMaskLayer(lang.scrawlUpLoading);var base64=scrawlObj.getCanvasData();if(base64){var options={timeout:1e5,headers:editor.options.serverHeaders||{},onsuccess:function(xhr){if(!scrawlObj.isCancelScrawl){var responseObj;if(responseObj=eval(\"(\"+xhr.responseText+\")\"),\"SUCCESS\"===responseObj.state){var imgObj={},url=editor.options.scrawlUrlPrefix+responseObj.url;imgObj.src=url,imgObj._src=url,imgObj.alt=responseObj.original||\"\",editor.execCommand(\"insertImage\",imgObj),dialog.close(),editor.fireEvent(\"uploadsuccess\",{res:responseObj,type:\"scrawl\"})}else alert(responseObj.state)}},onerror:function(){alert(lang.imageError),dialog.close()}};options[editor.getOpt(\"scrawlFieldName\")]=base64;var actionUrl=editor.getActionUrl(editor.getOpt(\"scrawlActionName\")),params=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(actionUrl+(actionUrl.indexOf(\"?\")==-1?\"?\":\"&\")+params);ajax.request(url,options)}}else addMaskLayer(lang.noScarwl+\"&nbsp;&nbsp;&nbsp;<input type='button' value='\"+lang.continueBtn+\"'  onclick='removeMaskLayer()'/>\")}var scrawl=function(a){a&&this.initOptions(a)};!function(){var a=$G(\"J_brushBoard\"),b=a.getContext(\"2d\"),c=[],d=0;scrawl.prototype={isScrawl:!1,brushWidth:-1,brushColor:\"\",initOptions:function(a){var b=this;b.originalState(a),b._buildToolbarColor(a.colorList),b._addBoardListener(a.saveNum),b._addOPerateListener(a.saveNum),b._addColorBarListener(),b._addBrushBarListener(),b._addEraserBarListener(),b._addAddImgListener(),b._addRemoveImgListenter(),b._addScalePicListenter(),b._addClearSelectionListenter(),b._originalColorSelect(a.drawBrushColor),b._originalBrushSelect(a.drawBrushSize),b._clearSelection()},originalState:function(a){var c=this;c.brushWidth=a.drawBrushSize,c.brushColor=a.drawBrushColor,b.lineWidth=c.brushWidth,b.strokeStyle=c.brushColor,b.fillStyle=\"transparent\",b.lineCap=\"round\",b.fill()},_buildToolbarColor:function(a){var b=null,c=[];c.push(\"<table id='J_colorList'>\");for(var d,e=0;d=a[e++];)(e-1)%5==0&&(1!=e&&c.push(\"</tr>\"),c.push(\"<tr>\")),b=\"#\"+d,c.push(\"<td><a title='\"+b+\"' href='javascript:void(0)' style='background-color:\"+b+\"'></a></td>\");c.push(\"</tr></table>\"),$G(\"J_colorBar\").innerHTML=c.join(\"\")},_addBoardListener:function(e){var f,g=this,h=0,i=-1,j=-1,k=!1,l=!1,m=!1,n=0,o=\"\";h=parseInt(domUtils.getComputedStyle($G(\"J_wrap\"),\"margin-left\")),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d+=1,domUtils.on(a,[\"mousedown\",\"mousemove\",\"mouseup\",\"mouseout\"],function(a){switch(f=browser.webkit?a.which:n,a.type){case\"mousedown\":n=1,o=1,k=!0,m=!1,l=!1,g.isScrawl=!0,i=a.clientX-h,j=a.clientY-h,b.beginPath();break;case\"mousemove\":if(!o&&0==f)return;if(!o&&f&&(i=a.clientX-h,j=a.clientY-h,b.beginPath(),o=1),m||!k)return;var c=a.clientX-h,d=a.clientY-h;b.moveTo(i,j),b.lineTo(c,d),b.stroke(),i=c,j=d,l=!0;break;case\"mouseup\":if(n=0,!k)return;l||(b.arc(i,j,b.lineWidth,0,2*Math.PI,!1),b.fillStyle=b.strokeStyle,b.fill()),b.closePath(),g._saveOPerate(e),k=!1,l=!1,m=!0,i=-1,j=-1;break;case\"mouseout\":if(o=\"\",n=0,1==f)return;b.closePath()}})},_addOPerateListener:function(a){var e=this;domUtils.on($G(\"J_previousStep\"),\"click\",function(){d>1&&(d-=1,b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d-1],0,0),e.btn2Highlight(\"J_nextStep\"),1==d&&e.btn2disable(\"J_previousStep\"))}),domUtils.on($G(\"J_nextStep\"),\"click\",function(){d>0&&d<c.length&&(b.clearRect(0,0,b.canvas.width,b.canvas.height),b.putImageData(c[d],0,0),d+=1,e.btn2Highlight(\"J_previousStep\"),d==c.length&&e.btn2disable(\"J_nextStep\"))}),domUtils.on($G(\"J_clearBoard\"),\"click\",function(){b.clearRect(0,0,b.canvas.width,b.canvas.height),c=[],e._saveOPerate(a),d=1,e.isScrawl=!1,e.btn2disable(\"J_previousStep\"),e.btn2disable(\"J_nextStep\"),e.btn2disable(\"J_clearBoard\")})},_addColorBarListener:function(){var a=this;domUtils.on($G(\"J_colorBar\"),\"click\",function(c){var d=a.getTarget(c),e=d.title;e&&(a._addColorSelect(d),a.brushColor=e,b.globalCompositeOperation=\"source-over\",b.lineWidth=a.brushWidth,b.strokeStyle=e)})},_addBrushBarListener:function(){var a=this;domUtils.on($G(\"J_brushBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.globalCompositeOperation=\"source-over\",b.lineWidth=parseInt(e),b.strokeStyle=a.brushColor,a.brushWidth=b.lineWidth)})},_addEraserBarListener:function(){var a=this;domUtils.on($G(\"J_eraserBar\"),\"click\",function(c){var d=a.getTarget(c),e=browser.ie?d.innerText:d.text;e&&(a._addBESelect(d),b.lineWidth=parseInt(e),b.globalCompositeOperation=\"destination-out\",b.strokeStyle=\"#FFF\")})},_addAddImgListener:function(){var a=$G(\"J_imgTxt\");window.FileReader||($G(\"J_addImg\").style.display=\"none\",$G(\"J_removeImg\").style.display=\"none\",$G(\"J_sacleBoard\").style.display=\"none\"),domUtils.on(a,\"change\",function(b){var c=a.parentNode;addMaskLayer(lang.backgroundUploading);var d=b.target||b.srcElement,e=new FileReader;e.onload=function(a){var b=a.target||a.srcElement;ue_callback(b.result,\"SUCCESS\")},e.readAsDataURL(d.files[0]),c.reset()})},_addRemoveImgListenter:function(){var a=this;domUtils.on($G(\"J_removeImg\"),\"click\",function(){$G(\"J_picBoard\").innerHTML=\"\",a.btn2disable(\"J_removeImg\"),a.btn2disable(\"J_sacleBoard\")})},_addScalePicListenter:function(){domUtils.on($G(\"J_sacleBoard\"),\"click\",function(){var b=$G(\"J_picBoard\"),c=$G(\"J_scaleCon\"),d=b.children[0];if(d)if(c)\"visible\"==c.style.visibility?(c.style.visibility=\"hidden\",b.style.position=\"\",b.style.zIndex=\"\"):(c.style.visibility=\"visible\",b.style.cssText+=\"position:relative;z-index:999\");else{b.style.cssText=\"position:relative;z-index:999;\"+b.style.cssText,d.style.cssText=\"position: absolute;top:\"+(a.height-d.height)/2+\"px;left:\"+(a.width-d.width)/2+\"px;\";var e=new ScaleBoy;b.appendChild(e.init()),e.startScale(d)}})},_addClearSelectionListenter:function(){var a=document;domUtils.on(a,\"mousemove\",function(b){browser.ie&&browser.version<11?a.selection.clear():window.getSelection().removeAllRanges()})},_clearSelection:function(){for(var a,b=[\"J_operateBar\",\"J_colorBar\",\"J_brushBar\",\"J_eraserBar\",\"J_picBoard\"],c=0;a=b[c++];)domUtils.unSelectable($G(a))},_saveOPerate:function(a){var e=this;c.length<=a?(d<c.length&&(e.btn2disable(\"J_nextStep\"),c.splice(d)),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length):(c.shift(),c.push(b.getImageData(0,0,b.canvas.width,b.canvas.height)),d=c.length),e.btn2Highlight(\"J_previousStep\"),e.btn2Highlight(\"J_clearBoard\")},_originalColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=0;b=c[d++];)b.children[0].title.toLowerCase()==a&&(b.children[0].style.opacity=1)},_originalBrushSelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=0;b=c[d++];)if(\"a\"==b.tagName.toLowerCase()){var e=browser.ie?b.innerText:b.text;e.toLowerCase()==a&&(b.style.opacity=1)}},_addColorSelect:function(a){for(var b,c=$G(\"J_colorList\").getElementsByTagName(\"td\"),d=$G(\"J_eraserBar\").children,e=$G(\"J_brushBar\").children,f=0;b=c[f++];)b.children[0].style.opacity=.3;for(var g,h=0;g=e[h++];)if(\"a\"==g.tagName.toLowerCase()){g.style.opacity=.3;var i=browser.ie?g.innerText:g.text;i.toLowerCase()==this.brushWidth&&(g.style.opacity=1)}for(var j,k=0;j=d[k++];)\"a\"==j.tagName.toLowerCase()&&(j.style.opacity=.3);a.style.opacity=1,a.blur()},_addBESelect:function(a){for(var b,c=$G(\"J_brushBar\").children,d=$G(\"J_eraserBar\").children,e=0;b=c[e++];)\"a\"==b.tagName.toLowerCase()&&(b.style.opacity=.3);for(var f,g=0;f=d[g++];)\"a\"==f.tagName.toLowerCase()&&(f.style.opacity=.3);a.style.opacity=1,a.blur()},getCanvasData:function(){var c=$G(\"J_picBoard\"),d=c.children[0];if(d){var e,f;\"absolute\"==d.style.position?(e=parseInt(d.style.left),f=parseInt(d.style.top)):(e=(c.offsetWidth-d.width)/2,f=(c.offsetHeight-d.height)/2),b.globalCompositeOperation=\"destination-over\",b.drawImage(d,e,f,d.width,d.height)}else b.globalCompositeOperation=\"destination-atop\",b.fillStyle=\"#fff\",b.fillRect(0,0,a.width,a.height);try{return a.toDataURL(\"image/png\").substring(22)}catch(g){return\"\"}},btn2Highlight:function(a){var b=$G(a);b.className.indexOf(\"H\")==-1&&(b.className+=\"H\")},btn2disable:function(a){var b=$G(a);b.className.indexOf(\"H\")!=-1&&(b.className=b.className.replace(\"H\",\"\"))},getTarget:function(a){return a.target||a.srcElement}}}();var ScaleBoy=function(){this.dom=null,this.scalingElement=null};!function(){function a(){var a=document,b=a.getElementsByTagName(\"head\")[0],c=a.createElement(\"style\"),d=\".scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}.scale .hand0, .scale .hand7{cursor:nw-resize;}.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}.scale .hand2, .scale .hand5{cursor:ne-resize;}\";c.type=\"text/css\";try{c.appendChild(a.createTextNode(d))}catch(e){c.styleSheet.cssText=d}b.appendChild(c)}function b(){var a=document,b=[],c=a.createElement(\"div\");c.id=\"J_scaleCon\",c.className=\"scale\";for(var d=0;d<8;d++)b.push(\"<span class='hand\"+d+\"'></span>\");return c.innerHTML=b.join(\"\"),c}var c=[[1,1,-1,-1],[0,1,0,-1],[0,1,1,-1],[1,0,-1,0],[0,0,1,0],[1,0,-1,1],[0,0,0,1],[0,0,1,1]];ScaleBoy.prototype={init:function(){a();var c=this,d=c.dom=b();return c.scaleMousemove.fp=c,domUtils.on(d,\"mousedown\",function(a){var b=a.target||a.srcElement;c.start={x:a.clientX,y:a.clientY},b.className.indexOf(\"hand\")!=-1&&(c.dir=b.className.replace(\"hand\",\"\")),domUtils.on(document.body,\"mousemove\",c.scaleMousemove),a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}),domUtils.on(document.body,\"mouseup\",function(a){c.start&&(domUtils.un(document.body,\"mousemove\",c.scaleMousemove),c.moved&&c.updateScaledElement({position:{x:d.style.left,y:d.style.top},size:{w:d.style.width,h:d.style.height}}),delete c.start,delete c.moved,delete c.dir)}),d},startScale:function(a){var b=this,c=b.dom;c.style.cssText=\"visibility:visible;top:\"+a.style.top+\";left:\"+a.style.left+\";width:\"+a.offsetWidth+\"px;height:\"+a.offsetHeight+\"px;\",b.scalingElement=a},updateScaledElement:function(a){var b=this.scalingElement,c=a.position,d=a.size;c&&(\"undefined\"!=typeof c.x&&(b.style.left=c.x),\"undefined\"!=typeof c.y&&(b.style.top=c.y)),d&&(d.w&&(b.style.width=d.w),d.h&&(b.style.height=d.h))},updateStyleByDir:function(a,b){var d,e=this,f=e.dom;c.def=[1,1,0,0],0!=c[a][0]&&(d=parseInt(f.style.left)+b.x,f.style.left=e._validScaledProp(\"left\",d)+\"px\"),0!=c[a][1]&&(d=parseInt(f.style.top)+b.y,f.style.top=e._validScaledProp(\"top\",d)+\"px\"),0!=c[a][2]&&(d=f.clientWidth+c[a][2]*b.x,f.style.width=e._validScaledProp(\"width\",d)+\"px\"),0!=c[a][3]&&(d=f.clientHeight+c[a][3]*b.y,f.style.height=e._validScaledProp(\"height\",d)+\"px\"),\"def\"===a&&e.updateScaledElement({position:{x:f.style.left,y:f.style.top}})},scaleMousemove:function(a){var b=arguments.callee.fp,c=b.start,d=b.dir||\"def\",e={x:a.clientX-c.x,y:a.clientY-c.y};b.updateStyleByDir(d,e),arguments.callee.fp.start={x:a.clientX,y:a.clientY},arguments.callee.fp.moved=1},_validScaledProp:function(a,b){var c=this.dom,d=$G(\"J_picBoard\");switch(b=isNaN(b)?0:b,a){case\"left\":return b<0?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case\"top\":return b<0?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case\"width\":return b<=0?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case\"height\":return b<=0?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}}}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .warpper {\n            position: relative;\n            width: 380px;\n            height: 100%;\n            margin: 10px auto;\n        }\n\n        .tabbody {\n            height: 160px;\n        }\n\n        .tabbody table {\n            width: 100%;\n            border-collapse: separate;\n            border-spacing: 3px;\n            line-height: 36px;\n        }\n\n        .tabbody .panel {\n            width: 373px;\n            height: 100%;\n            padding-left: 5px;\n            position: absolute;\n            background-color: #fff;\n        }\n\n        .tabbody input.int {\n            width: 190px;\n            height: 30px;\n            border: 1px solid #d7d7d7;\n            line-height: 21px;\n            border-radius: 3px;\n            outline: none;\n            padding: 0 5px;\n        }\n\n        .tabbody input.btn {\n            text-align: center;\n            line-height: 28px;\n            text-decoration: none;\n            height: 30px;\n            border: 1px solid #ccc;\n            background: #FFF;\n            border-radius: 3px;\n            padding: 0 5px;\n            font-size: 12px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span tabsrc=\"replace\"><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>:</td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>:</td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>:</td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js?54c26e9a\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/searchreplace/searchreplace.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction clickHandler(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d].className=\"\";c.className=\"focus\";for(var f=c.getAttribute(\"tabSrc\"),g=0,h=b.length;g<h;g++){var i=b[g],j=i.getAttribute(\"id\");j!=f?i.style.zIndex=1:i.style.zIndex=200}}function switchTab(a){for(var b=$G(a).children,c=b[0].children,d=b[1].children,e=0,f=c.length;e<f;e++){var g=c[e];\"focus\"===g.className&&clickHandler(c,d,g),g.onclick=function(){clickHandler(c,d,this)}}}function getMatchCase(a){return!!$G(a).checked}editor.firstForSR=0,editor.currentRangeForSR=null,$G(\"searchtab\").onmousedown=function(){$G(\"search-msg\").innerHTML=\"\",$G(\"replace-msg\").innerHTML=\"\"},$G(\"nextFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;if(!e)return!1;if(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase\")},!frCommond(d)){var f=editor.selection.getRange().createBookmark();$G(\"search-msg\").innerHTML=lang.getEnd,editor.selection.getRange().moveToBookmark(f).select()}},$G(\"nextReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"preFindBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase\")},void(frCommond(d)||($G(\"search-msg\").innerHTML=lang.getStart)))},$G(\"preReplaceBtn\").onclick=function(a,b,c){var d,e=$G(\"findtxt1\").value;return!!e&&(d={searchStr:e,dir:-1,casesensitive:getMatchCase(\"matchCase1\")},void frCommond(d))},$G(\"repalceBtn\").onclick=function(){editor.trigger(\"clearLastSearchResult\");var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");return!!b&&(!(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())&&(a={searchStr:b,dir:1,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c},void frCommond(a)))},$G(\"repalceAllBtn\").onclick=function(){var a,b=$G(\"findtxt1\").value.replace(/^\\s|\\s$/g,\"\"),c=$G(\"replacetxt\").value.replace(/^\\s|\\s$/g,\"\");if(!b)return!1;if(b==c||!getMatchCase(\"matchCase1\")&&b.toLowerCase()==c.toLowerCase())return!1;a={searchStr:b,casesensitive:getMatchCase(\"matchCase1\"),replaceStr:c,all:!0};var d=frCommond(a);d&&($G(\"replace-msg\").innerHTML=lang.countMsg.replace(\"{#count}\",d))};var frCommond=function(a){return editor.execCommand(\"searchreplace\",a)};switchTab(\"searchtab\"),dialog.onclose=function(){editor.trigger(\"clearLastSearchResult\")};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        html, body {\n            overflow: hidden;\n        }\n\n        #specharsTab {\n            width: 97%;\n            margin: 10px auto;\n            zoom: 1;\n            position: relative\n        }\n\n        .tabbody {\n            height: 447px;\n        }\n\n        .tabbody span {\n            margin: 5px 3px;\n            text-align: center;\n            display: inline-block;\n            width: 40px;\n            height: 16px;\n            line-height: 16px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div id=\"specharsTab\">\n    <div id=\"tabHeads\" class=\"tabhead\"></div>\n    <div id=\"tabBodys\" class=\"tabbody\"></div>\n</div>\n<script type=\"text/javascript\" src=\"spechars.js?78a9bbd0\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/spechars/spechars.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction toArray(a){return a.split(\",\")}var charsContent=[{name:\"tsfh\",title:lang.tsfh,content:toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")},{name:\"lmsz\",title:lang.lmsz,content:toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},{name:\"szfh\",title:lang.szfh,content:toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")},{name:\"rwfh\",title:lang.rwfh,content:toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")},{name:\"xlzm\",title:lang.xlzm,content:toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")},{name:\"ewzm\",title:lang.ewzm,content:toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")},{name:\"pyzm\",title:lang.pyzm,content:toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},{name:\"yyyb\",title:lang.yyyb,content:toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")},{name:\"zyzf\",title:lang.zyzf,content:toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")}];!function(a){for(var b,c=0;b=a[c++];){var d=document.createElement(\"span\");d.setAttribute(\"tabSrc\",b.name),d.innerHTML=b.title,1==c&&(d.className=\"focus\"),domUtils.on(d,\"click\",function(){for(var a,b=$G(\"tabHeads\").children,c=0;a=b[c++];)a.className=\"\";b=$G(\"tabBodys\").children;for(var a,c=0;a=b[c++];)a.style.display=\"none\";this.className=\"focus\",$G(this.getAttribute(\"tabSrc\")).style.display=\"\"}),$G(\"tabHeads\").appendChild(d),domUtils.insertAfter(d,document.createTextNode(\"\\n\"));var e=document.createElement(\"div\");e.id=b.name,e.style.display=1==c?\"\":\"none\";for(var f,g=b.content,h=0;f=g[h++];){var i=document.createElement(\"span\");i.innerHTML=f,domUtils.on(i,\"click\",function(){editor.execCommand(\"insertHTML\",this.innerHTML),dialog.close()}),e.appendChild(i)}$G(\"tabBodys\").appendChild(e)}}(charsContent);"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/table/edittable.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{overflow:hidden;width:540px}.wrapper{margin:10px auto 0;font-size:12px;overflow:hidden;width:520px;height:315px}.clear{clear:both}.wrapper .left{float:left;margin-left:10px}.wrapper .right{float:right;border-left:2px dotted #EDEDED;padding-left:15px}.section{margin-bottom:15px;width:240px;overflow:hidden}.section h3{font-weight:700;padding:5px 0;margin-bottom:10px;border-bottom:1px solid #EDEDED;font-size:12px}.section ul{list-style:none;overflow:hidden;clear:both}.section li{float:left;width:120px}.section .tone{width:80px}.section .preview{width:220px}.section .preview table{text-align:center;vertical-align:middle;color:#666}.section .preview caption{font-weight:700}.section .preview td{border-width:1px;border-style:solid;height:22px}.section .preview th{border-style:solid;border-color:#DDD;border-width:2px 1px 1px;height:22px;background-color:#F7F7F7}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css?97f6eb5f\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var\n                        id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var\n                        id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var\n                        id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var\n                        id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var\n                        id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly'/>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js?69ed0ec5\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/table/edittable.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=$G(\"J_title\"),c=$G(\"J_titleCol\"),d=$G(\"J_caption\"),e=$G(\"J_sorttable\"),f=$G(\"J_autoSizeContent\"),g=$G(\"J_autoSizePage\"),h=$G(\"J_tone\"),i=$G(\"J_preview\"),j=function(){a=this,a.init()};j.prototype={init:function(){var i=new UE.ui.ColorPicker({editor:editor}),j=new UE.ui.Popup({editor:editor,content:i});b.checked=editor.queryCommandState(\"inserttitle\")==-1,c.checked=editor.queryCommandState(\"inserttitlecol\")==-1,d.checked=editor.queryCommandState(\"insertcaption\")==-1,e.checked=1==editor.queryCommandState(\"enablesort\");var k=editor.queryCommandState(\"enablesort\"),l=editor.queryCommandState(\"disablesort\");e.checked=!!(k<0&&l>=0),e.disabled=!!(k<0&&l<0),e.title=k<0&&l<0?lang.errorMsg:\"\",a.createTable(b.checked,c.checked,d.checked),a.setAutoSize(),a.setColor(a.getColor()),domUtils.on(b,\"click\",a.titleHanler),domUtils.on(c,\"click\",a.titleColHanler),domUtils.on(d,\"click\",a.captionHanler),domUtils.on(e,\"click\",a.sorttableHanler),domUtils.on(f,\"click\",a.autoSizeContentHanler),domUtils.on(g,\"click\",a.autoSizePageHanler),domUtils.on(h,\"click\",function(){j.showAnchor(h)}),domUtils.on(document,\"mousedown\",function(){j.hide()}),i.addListener(\"pickcolor\",function(){a.setColor(arguments[1]),j.hide()}),i.addListener(\"picknocolor\",function(){a.setColor(\"\"),j.hide()})},createTable:function(a,b,c){var d=[];if(d.push(\"<table id='J_example'>\"),c&&d.push(\"<caption>\"+lang.captionName+\"</caption>\"),a){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var e=0;e<5;e++)d.push(\"<th>\"+lang.titleName+\"</th>\");d.push(\"</tr>\")}for(var f=0;f<6;f++){d.push(\"<tr>\"),b&&d.push(\"<th>\"+lang.titleName+\"</th>\");for(var g=0;g<5;g++)d.push(\"<td>\"+lang.cellsName+\"</td>\");d.push(\"</tr>\")}d.push(\"</table>\"),i.innerHTML=d.join(\"\"),this.updateSortSpan()},titleHanler:function(){var c=$G(\"J_example\"),d=document.createDocumentFragment(),e=domUtils.getComputedStyle(domUtils.getElementsByTagName(c,\"td\")[0],\"border-color\"),f=c.rows[0].children.length;if(b.checked){c.insertRow(0);for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,d.appendChild(g);c.rows[0].appendChild(d)}else domUtils.remove(c.rows[0]);a.setColor(e),a.updateSortSpan()},titleColHanler:function(){var b=$G(\"J_example\"),d=domUtils.getComputedStyle(domUtils.getElementsByTagName(b,\"td\")[0],\"border-color\"),e=b.rows,f=e.length;if(c.checked)for(var g,h=0;h<f;h++)g=document.createElement(\"th\"),g.innerHTML=lang.titleName,e[h].insertBefore(g,e[h].children[0]);else for(var h=0;h<f;h++)domUtils.remove(e[h].children[0]);a.setColor(d),a.updateSortSpan()},captionHanler:function(){var a=$G(\"J_example\");if(d.checked){var b=document.createElement(\"caption\");b.innerHTML=lang.captionName,a.insertBefore(b,a.firstChild)}else domUtils.remove(domUtils.getElementsByTagName(a,\"caption\")[0])},sorttableHanler:function(){a.updateSortSpan()},autoSizeContentHanler:function(){var a=$G(\"J_example\");a.removeAttribute(\"width\")},autoSizePageHanler:function(){var a=$G(\"J_example\"),b=a.getElementsByTagName(a,\"td\");utils.each(b,function(a){a.removeAttribute(\"width\")}),a.setAttribute(\"width\",\"100%\")},updateSortSpan:function(){var a=$G(\"J_example\"),b=a.rows[0],c=domUtils.getElementsByTagName(a,\"span\");utils.each(c,function(a){a.parentNode.removeChild(a)}),e.checked&&utils.each(b.cells,function(a,b){var c=document.createElement(\"span\");c.innerHTML=\"^\",a.appendChild(c)})},getColor:function(){var a,b=editor.selection.getStart(),c=domUtils.findParentByTagName(b,[\"td\",\"th\",\"caption\"],!0);return a=c&&domUtils.getComputedStyle(c,\"border-color\"),a||(a=\"#DDDDDD\"),a},setColor:function(a){var b=$G(\"J_example\"),c=domUtils.getElementsByTagName(b,\"td\").concat(domUtils.getElementsByTagName(b,\"th\"),domUtils.getElementsByTagName(b,\"caption\"));h.value=a,utils.each(c,function(b){b.style.borderColor=a})},setAutoSize:function(){var a=this;g.checked=!0,a.autoSizePageHanler()}},new j,dialog.onok=function(){editor.__hasEnterExecCommand=!0;var a={title:\"inserttitle deletetitle\",titleCol:\"inserttitlecol deletetitlecol\",caption:\"insertcaption deletecaption\",sorttable:\"enablesort disablesort\"};editor.fireEvent(\"saveScene\");for(var b in a){var c=a[b].split(\" \"),d=$G(\"J_\"+b);d.checked?editor.queryCommandState(c[0])!=-1&&editor.execCommand(c[0]):editor.queryCommandState(c[1])!=-1&&editor.execCommand(c[1])}editor.execCommand(\"edittable\",h.value),f.checked?editor.execCommand(\"adaptbytext\"):\"\",g.checked?editor.execCommand(\"adaptbywindow\"):\"\",editor.fireEvent(\"saveScene\"),editor.__hasEnterExecCommand=!1}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n        colorPiker = new UE.ui.ColorPicker({\n            editor: editor\n        }),\n        colorPop = new UE.ui.Popup({\n            editor: editor,\n            content: colorPiker\n        });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value = \"\";\n        colorPop.hide();\n    });\n    dialog.onok = function () {\n        editor.execCommand(\"edittd\", tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if (cell) {\n        var color = domUtils.getComputedStyle(cell, 'background-color');\n        if (/^#/.test(color)) {\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/template/config.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar templates=[{pre:\"pre0.png\",title:lang.blank,preHtml:'<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',html:'<p class=\"ue_t\">欢迎使用UEditor！</p>'},{pre:\"pre1.png\",title:lang.blog,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',html:'<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'},{pre:\"pre2.png\",title:lang.resume,preHtml:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',html:'<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">\\ufeff</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'},{pre:\"pre3.png\",title:lang.richText,preHtml:'<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',html:'<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'},{pre:\"pre4.png\",title:lang.sciPapers,preHtml:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',html:'<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'}];"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/template/template.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.wrap{padding:5px;font-size:14px}.left{width:425px;float:left}.right{width:160px;border:1px solid #ccc;float:right;padding:5px;margin-right:5px}.right .pre{height:332px;overflow-y:auto}.right .preitem{border:#fff 1px solid;margin:5px 0;padding:2px 0}.right .preitem:hover{background-color:#fffacd;cursor:pointer;border:#ccc 1px solid}.right .preitem img{display:block;margin:0 auto;width:100px}.clear{clear:both}.top{height:26px;line-height:26px;padding:5px}.bottom{height:320px;width:100%;margin:0 auto}.transparent{background:url(images/bg.gif) repeat}.bottom table tr td{border:1px dashed #ccc}#colorPicker{width:17px;height:17px;border:1px solid #CCC;display:inline-block;border-radius:3px;box-shadow:2px 2px 5px #D3D6DA}.border_style1{padding:2px;border:1px solid #ccc;border-radius:5px;box-shadow:2px 2px 5px #d3d6da}p{margin:5px 0}table{clear:both;margin-bottom:10px;border-collapse:collapse;word-break:break-all}li{clear:both}ol{padding-left:40px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css?65b4074c\">\n</head>\n<body>\n<div class=\"wrap\">\n    <div class=\"left\">\n        <div class=\"top\">\n            <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n        </div>\n        <div class=\"bottom border_style1\" id=\"preview\"></div>\n    </div>\n    <fieldset class=\"right border_style1\">\n        <legend><var id=\"lang_template_select\"></var></legend>\n        <div class=\"pre\" id=\"preitem\"></div>\n    </fieldset>\n    <div class=\"clear\"></div>\n</div>\n<script type=\"text/javascript\" src=\"config.js?5c9539a4\"></script>\n<script type=\"text/javascript\" src=\"template.js?08eb5fca\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/template/template.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){var a,b=editor,c=$G(\"preview\"),d=$G(\"preitem\"),e=templates,f=function(){for(var a,b=\"\",c=0;a=e[c++];)b+='<div class=\"preitem\" onclick=\"pre('+c+')\"><img src=\"images/'+a.pre+'\" '+(a.title?\"alt=\"+a.title+\" title=\"+a.title:\"\")+\"></div>\";d.innerHTML=b},g=function(b){var f=e[b-1];a=f,h(),domUtils.setStyles(d.childNodes[b-1],{\"background-color\":\"lemonChiffon\",border:\"#ccc 1px solid\"}),c.innerHTML=f.preHtml?f.preHtml:\"\"},h=function(){for(var a,b=d.children,c=0;a=b[c++];)domUtils.setStyles(a,{\"background-color\":\"\",border:\"white 1px solid\"})};dialog.onok=function(){$G(\"issave\").checked||b.execCommand(\"cleardoc\");var c={html:a&&a.html};b.execCommand(\"template\",c)},f(),window.pre=g,g(2)}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/video/video.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n@charset \"utf-8\";.wrapper{width:570px;_width:575px;margin:10px auto;zoom:1;position:relative}.tabbody{height:355px}.tabbody .panel{position:absolute;width:0;height:0;background:#fff;overflow:hidden;display:none}.tabbody .panel.focus{width:100%;height:355px;display:block}.tabbody .panel table td{vertical-align:middle}#videoUrl{width:380px;height:26px;line-height:26px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7;outline:0;border-radius:3px;padding:0 5px}#videoSelect{width:100px;display:inline-block;background:#FFF;border:1px solid #EEE;line-height:26px;text-align:center;color:#333;text-decoration:none;border-radius:3px;vertical-align:middle}#videoSearchTxt{margin-left:15px;background:#FFF;width:200px;height:21px;line-height:21px;border:1px solid #d7d7d7}#searchList{width:570px;overflow:auto;zoom:1;height:270px}#searchList div{float:left;width:120px;height:135px;margin:5px 15px}#searchList img{margin:2px 8px;cursor:pointer;border:2px solid #fff}#searchList p{margin-left:10px}#videoType{width:65px;height:23px;line-height:22px;border:1px solid #d7d7d7}#videoSearchBtn,#videoSearchReset{height:25px;line-height:25px;background:#eee;border:1px solid #d7d7d7;cursor:pointer;padding:0 5px}#preview{position:relative;width:420px;padding:0;overflow:hidden;margin-left:10px;_margin-left:5px;height:280px;background-color:#ddd;float:left}#preview .previewMsg{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%;background-color:#666}#preview .previewMsg span{display:block;margin:125px auto 0;text-align:center;font-size:18px;color:#fff}#preview .previewVideo{position:absolute;top:0;margin:0;padding:0;height:280px;width:100%}.edui-video-wrapper fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}#videoInfo{width:120px;float:left;margin-left:10px;_margin-left:7px}fieldset{border:1px solid #ddd;padding-left:5px;margin-bottom:20px;padding-bottom:5px;width:115px}fieldset legend{font-weight:700}fieldset p{line-height:30px}fieldset input.txt{width:65px;height:21px;line-height:21px;margin:8px 5px;background:#FFF;border:1px solid #d7d7d7}label.url{font-weight:700;margin-left:5px}#videoFloat div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#videoFloat .focus{opacity:1;filter:alpha(opacity=100)}span.view{display:inline-block;width:30px;float:right;cursor:pointer;color:#00f}.tabbody #upload.panel{width:0;height:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px);background:#fff;display:block}.tabbody #upload.panel.focus{width:100%;height:335px;display:block;clip:auto}#upload_alignment div{cursor:pointer;opacity:.5;filter:alpha(opacity=50);margin:9px;_margin:5px;width:38px;height:36px;float:left}#upload_alignment .focus{opacity:1;filter:alpha(opacity=100)}#upload_left{width:427px;float:left}#upload_left .controller{height:30px;clear:both}#uploadVideoInfo{margin-top:10px;float:right;padding-right:8px}#upload .queueList{margin:0}#upload p{margin:0}.element-invisible{width:0!important;height:0!important;border:0;padding:0;margin:0;overflow:hidden;position:absolute!important;clip:rect(1px,1px,1px,1px)}#upload .placeholder{margin:10px;margin-right:0;border:2px dashed #e6e6e6;*border:0 dashed #e6e6e6;height:161px;padding-top:150px;text-align:center;width:97%;float:left;background:url(./images/image.png) center 70px no-repeat;color:#ccc;font-size:18px;position:relative;top:0;*margin-left:0;*left:10px}#upload .placeholder .webuploader-pick{font-size:18px;background:#00b7ee;border-radius:3px;line-height:44px;padding:0 30px;*width:120px;color:#fff;display:inline-block;margin:0 auto 20px;cursor:pointer;box-shadow:0 1px 1px rgba(0,0,0,.1)}#upload .placeholder .webuploader-pick-hover{background:#00a2d4}#filePickerContainer{text-align:center}#upload .placeholder .flashTip{color:#666;font-size:12px;position:absolute;width:100%;text-align:center;bottom:20px}#upload .placeholder .flashTip a{color:#0785d1;text-decoration:none}#upload .placeholder .flashTip a:hover{text-decoration:underline}#upload .placeholder.webuploader-dnd-over{border-color:#999}#upload .filelist{list-style:none;margin:0;padding:0;overflow-x:hidden;overflow-y:auto;position:relative;height:285px}#upload .filelist:after{content:'';display:block;width:0;height:0;overflow:hidden;clear:both}#upload .filelist li{width:113px;height:113px;background:url(./images/bg.png);text-align:center;margin:15px 0 0 20px;*margin:15px 0 0 15px;position:relative;display:block;float:left;overflow:hidden;font-size:12px}#upload .filelist li p.log{position:relative;top:-45px}#upload .filelist li p.title{position:absolute;top:0;left:0;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;top:5px;text-indent:5px;text-align:left}#upload .filelist li p.progress{position:absolute;width:100%;bottom:0;left:0;height:8px;overflow:hidden;z-index:50;margin:0;border-radius:0;background:0 0;-webkit-box-shadow:0 0 0}#upload .filelist li p.progress span{display:none;overflow:hidden;width:0;height:100%;background:#1483d8 url(./images/progress.png) repeat-x;-webit-transition:width 200ms linear;-moz-transition:width 200ms linear;-o-transition:width 200ms linear;-ms-transition:width 200ms linear;transition:width 200ms linear;-webkit-animation:progressmove 2s linear infinite;-moz-animation:progressmove 2s linear infinite;-o-animation:progressmove 2s linear infinite;-ms-animation:progressmove 2s linear infinite;animation:progressmove 2s linear infinite;-webkit-transform:translateZ(0)}@-webkit-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@-moz-keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}@keyframes progressmove{0%{background-position:0 0}100%{background-position:17px 0}}#upload .filelist li p.imgWrap{position:relative;z-index:2;line-height:113px;vertical-align:middle;overflow:hidden;width:113px;height:113px;-webkit-transform-origin:50% 50%;-moz-transform-origin:50% 50%;-o-transform-origin:50% 50%;-ms-transform-origin:50% 50%;transform-origin:50% 50%;-webit-transition:200ms ease-out;-moz-transition:200ms ease-out;-o-transition:200ms ease-out;-ms-transition:200ms ease-out;transition:200ms ease-out}#upload .filelist li p.imgWrap.notimage{margin-top:0;width:111px;height:111px;border:1px #eee solid}#upload .filelist li p.imgWrap.notimage i.file-preview{margin-top:15px}#upload .filelist li img{width:100%}#upload .filelist li p.error{background:#f43838;color:#fff;position:absolute;bottom:0;left:0;height:28px;line-height:28px;width:100%;z-index:100;display:none}#upload .filelist li .success{display:block;position:absolute;left:0;bottom:0;height:40px;width:100%;z-index:200;background:url(./images/success.png) no-repeat right bottom;background-image:url(./images/success.gif) \\9}#upload .filelist li.filePickerBlock{width:113px;height:113px;background:url(./images/image.png) no-repeat center 12px;border:1px solid #eee;border-radius:0}#upload .filelist li.filePickerBlock div.webuploader-pick{width:100%;height:100%;margin:0;padding:0;opacity:0;background:0 0;font-size:0}#upload .filelist div.file-panel{position:absolute;height:0;filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;background:rgba(0,0,0,.5);width:100%;top:0;left:0;overflow:hidden;z-index:300}#upload .filelist div.file-panel span{width:24px;height:24px;display:inline;float:right;text-indent:-9999px;overflow:hidden;background:url(./images/icons.png) no-repeat;background:url(./images/icons.gif) no-repeat \\9;margin:5px 1px 1px;cursor:pointer;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .filelist div.file-panel span.rotateLeft{display:none;background-position:0 -24px}#upload .filelist div.file-panel span.rotateLeft:hover{background-position:0 0}#upload .filelist div.file-panel span.rotateRight{display:none;background-position:-24px -24px}#upload .filelist div.file-panel span.rotateRight:hover{background-position:-24px 0}#upload .filelist div.file-panel span.cancel{background-position:-48px -24px}#upload .filelist div.file-panel span.cancel:hover{background-position:-48px 0}#upload .statusBar{height:45px;border-bottom:1px solid #dadada;margin:0 10px;padding:0;line-height:45px;vertical-align:middle;position:relative}#upload .statusBar .progress{border:1px solid #1483d8;width:198px;background:#fff;height:18px;position:absolute;top:12px;display:none;text-align:center;line-height:18px;color:#6dbfff;margin:0 10px 0 0}#upload .statusBar .progress span.percentage{width:0;height:100%;left:0;top:0;background:#1483d8;position:absolute}#upload .statusBar .progress span.text{position:relative;z-index:10}#upload .statusBar .info{display:inline-block;font-size:14px;color:#666}#upload .statusBar .btns{position:absolute;top:7px;right:0;line-height:30px}#filePickerBtn{display:inline-block;float:left}#upload .statusBar .btns .webuploader-pick,#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-uploading,#upload .statusBar .btns .uploadBtn.state-paused{background:#fff;border:1px solid #cfcfcf;color:#565656;padding:0 18px;display:inline-block;border-radius:3px;margin-left:10px;cursor:pointer;font-size:14px;float:left;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#upload .statusBar .btns .webuploader-pick-hover,#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-uploading:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#f0f0f0}#upload .statusBar .btns .uploadBtn,#upload .statusBar .btns .uploadBtn.state-paused{background:#00b7ee;color:#fff;border-color:transparent}#upload .statusBar .btns .uploadBtn:hover,#upload .statusBar .btns .uploadBtn.state-paused:hover{background:#00a2d4}#upload .statusBar .btns .uploadBtn.disabled{pointer-events:none;filter:alpha(opacity=60);-moz-opacity:.6;-khtml-opacity:.6;opacity:.6}i.file-preview{display:block;margin:10px auto;width:70px;height:70px;background-image:url(./images/file-icons.png);background-image:url(./images/file-icons.gif) \\9;background-position:-140px center;background-repeat:no-repeat}i.file-preview.file-type-dir{background-position:0 center}i.file-preview.file-type-file{background-position:-140px center}i.file-preview.file-type-filelist{background-position:-210px center}i.file-preview.file-type-zip,i.file-preview.file-type-rar,i.file-preview.file-type-7z,i.file-preview.file-type-tar,i.file-preview.file-type-gz,i.file-preview.file-type-bz2{background-position:-280px center}i.file-preview.file-type-xls,i.file-preview.file-type-xlsx{background-position:-350px center}i.file-preview.file-type-doc,i.file-preview.file-type-docx{background-position:-420px center}i.file-preview.file-type-ppt,i.file-preview.file-type-pptx{background-position:-490px center}i.file-preview.file-type-vsd{background-position:-560px center}i.file-preview.file-type-pdf{background-position:-630px center}i.file-preview.file-type-txt,i.file-preview.file-type-md,i.file-preview.file-type-json,i.file-preview.file-type-htm,i.file-preview.file-type-xml,i.file-preview.file-type-html,i.file-preview.file-type-js,i.file-preview.file-type-css,i.file-preview.file-type-php,i.file-preview.file-type-jsp,i.file-preview.file-type-asp{background-position:-700px center}i.file-preview.file-type-apk{background-position:-770px center}i.file-preview.file-type-exe{background-position:-840px center}i.file-preview.file-type-ipa{background-position:-910px center}i.file-preview.file-type-mp4,i.file-preview.file-type-swf,i.file-preview.file-type-mkv,i.file-preview.file-type-avi,i.file-preview.file-type-flv,i.file-preview.file-type-mov,i.file-preview.file-type-mpg,i.file-preview.file-type-mpeg,i.file-preview.file-type-ogv,i.file-preview.file-type-webm,i.file-preview.file-type-rm,i.file-preview.file-type-rmvb{background-position:-980px center}i.file-preview.file-type-ogg,i.file-preview.file-type-wav,i.file-preview.file-type-wmv,i.file-preview.file-type-mid,i.file-preview.file-type-mp3{background-position:-1050px center}i.file-preview.file-type-jpg,i.file-preview.file-type-jpeg,i.file-preview.file-type-gif,i.file-preview.file-type-bmp,i.file-preview.file-type-png,i.file-preview.file-type-psd{background-position:-140px center}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css?0043553c\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td>\n                        <td><input id=\"videoUrl\" type=\"text\"><a href=\"javascript:;\" id=\"videoSelect\"\n                                                                style=\"display:none;\">选择视频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链视频支持：优酷、腾讯视频、哔哩哔哩\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"videoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_video_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"videoFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label><var id=\"lang_upload_width\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label><var id=\"lang_upload_height\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?b8f06036\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js?ce575232\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/video/video.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(){for(var a=$G(\"tabHeads\").children,b=0;b<a.length;b++)domUtils.on(a[b],\"click\",function(b){var c,d,e=b.target||b.srcElement;for(c=0;c<a.length;c++)d=a[c].getAttribute(\"data-content-id\"),a[c]==e?(domUtils.addClass(a[c],\"focus\"),domUtils.addClass($G(d),\"focus\")):(domUtils.removeClasses(a[c],\"focus\"),domUtils.removeClasses($G(d),\"focus\"))});u.disableUpload||($G(\"tabHeads\").querySelector('[data-content-id=\"upload\"]').style.display=\"inline-block\"),u.selectCallback&&($G(\"videoSelect\").style.display=\"inline-block\",domUtils.on($G(\"videoSelect\"),\"click\",function(a){u.selectCallback(editor,function(a){a&&($G(\"videoUrl\").value=a.path,n(a.path))})}))}function b(){k([\"videoFloat\",\"upload_alignment\"]),m($G(\"videoUrl\")),c(),function(){var a,b=editor.selection.getRange().getClosedNode();if(b&&b.className){var c=\"edui-faked-video\"==b.className,e=b.className.indexOf(\"edui-upload-video\")!=-1;if(c||e){$G(\"videoUrl\").value=a=b.getAttribute(\"_url\"),$G(\"videoWidth\").value=b.width,$G(\"videoHeight\").value=b.height;var f=domUtils.getComputedStyle(b,\"float\"),g=domUtils.getComputedStyle(b.parentNode,\"text-align\");d(\"center\"===g?\"center\":f)}e&&(t=!0)}n(a)}()}function c(){dialog.onok=function(){$G(\"preview\").innerHTML=\"\";var a=g(\"tabHeads\",\"tabSrc\");switch(a){case\"video\":return e();case\"videoSearch\":return f(\"searchList\");case\"upload\":return o()}},dialog.oncancel=function(){$G(\"preview\").innerHTML=\"\"}}function d(a){for(var b,c=$G(\"videoFloat\").children,d=0;b=c[d++];)b.getAttribute(\"name\")==a?\"focus\"!=b.className&&(b.className=\"focus\"):\"focus\"==b.className&&(b.className=\"\")}function e(){var a=$G(\"videoWidth\"),b=$G(\"videoHeight\"),c=$G(\"videoUrl\").value,d=g(\"videoFloat\",\"name\");return!!c&&(!!i([a,b])&&void editor.execCommand(\"insertvideo\",{url:h(c),width:a.value,height:b.value,align:d},t?\"upload\":null))}function f(a){for(var b,c=domUtils.getElementsByTagName($G(a),\"img\"),d=[],e=0;b=c[e++];)b.getAttribute(\"selected\")&&d.push({url:b.getAttribute(\"ue_video_url\"),width:420,height:280,align:\"none\"});editor.execCommand(\"insertvideo\",d)}function g(a,b){for(var c,d,e=$G(a).children,f=0;d=e[f++];)if(\"focus\"==d.className){c=d.getAttribute(b);break}return c}function h(a){return a?a=utils.trim(a).replace(/v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i,\"player.youku.com/embed/$1\").replace(/v\\.qq\\.com\\/x\\/cover\\/[\\w]+\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/v\\.qq\\.com\\/x\\/page\\/([\\w]+)\\.html/i,\"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\").replace(/www\\.bilibili\\.com\\/video\\/([a-zA-Z0-9]+)\\/?.*$/i,\"player.bilibili.com/player.html?bvid=$1\"):\"\"}function i(a){for(var b,c=0;b=a[c++];){var d=b.value;if(!j(d)&&d)return alert(lang.numError),b.value=\"\",b.focus(),!1}return!0}function j(a){return/(0|^[1-9]\\d*$)/.test(a)}function k(a){for(var b,c=0;b=a[c++];){var d=$G(b),e={none:lang[\"default\"],left:lang.floatLeft,right:lang.floatRight,center:lang.block};for(var f in e){var g=document.createElement(\"div\");g.setAttribute(\"name\",f),\"none\"==f&&(g.className=\"focus\"),g.style.cssText=\"background:url(images/\"+f+\"_focus.jpg);\",g.setAttribute(\"title\",e[f]),d.appendChild(g)}l(b)}}function l(a){for(var b,c=$G(a).children,d=0;b=c[d++];)domUtils.on(b,\"click\",function(){for(var a,b=0;a=c[b++];)a.className=\"\",a.removeAttribute&&a.removeAttribute(\"class\");this.className=\"focus\"})}function m(a){browser.ie?a.onpropertychange=function(){n(this.value)}:a.addEventListener(\"input\",function(){n(this.value)},!1)}function n(a){if(a){var b=h(a);b=utils.unhtml(b),$G(\"preview\").innerHTML='<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div><iframe class=\"previewVideo\"  src=\"'+b+'\" width=\"420\" height=\"280\" frameborder=0 allowfullscreen></iframe>'}}function o(){var a=[],b=editor.getOpt(\"videoUrlPrefix\"),c=$G(\"upload_width\").value||420,d=$G(\"upload_height\").value||280,e=g(\"upload_alignment\",\"name\")||\"none\";for(var f in s){var h=s[f];a.push({url:b+h.url,width:c,height:d,align:e})}var i=r.getQueueCount();return i?($(\".info\",\"#queueList\").html('<span style=\"color:red;\">'+\"还有2个未上传文件\".replace(/[\\d]/,i)+\"</span>\"),!1):void editor.execCommand(\"insertvideo\",a,\"upload\")}function p(){r=new q(\"queueList\")}function q(a){this.$wrap=a.constructor==String?$(\"#\"+a):$(a),this.init()}var r,s=[],t=!1,u={};window.onload=function(){u=editor.getOpt(\"videoConfig\"),$focus($G(\"videoUrl\")),a(),b(),p()},q.prototype={init:function(){this.fileList=[],this.initContainer(),this.initUploader()},initContainer:function(){this.$queue=this.$wrap.find(\".filelist\")},initUploader:function(){function a(a){var b=h('<li id=\"'+a.id+'\"><p class=\"title\">'+a.name+'</p><p class=\"imgWrap\"></p><p class=\"progress\"><span></span></p></li>'),c=h('<div class=\"file-panel\"><span class=\"cancel\">'+lang.uploadDelete+'</span><span class=\"rotateRight\">'+lang.uploadTurnRight+'</span><span class=\"rotateLeft\">'+lang.uploadTurnLeft+\"</span></div>\").appendTo(b),d=b.find(\"p.progress span\"),e=b.find(\"p.imgWrap\"),g=h('<p class=\"error\"></p>').hide().appendTo(b),i=function(a){switch(a){case\"exceed_size\":text=lang.errorExceedSize;break;case\"interrupt\":text=lang.errorInterrupt;break;case\"http\":text=lang.errorHttp;break;case\"not_allow_type\":text=lang.errorFileType;break;default:text=lang.errorUploadRetry}g.text(text).show()};\"invalid\"===a.getStatus()?i(a.statusText):(e.text(lang.uploadPreview),\"|png|jpg|jpeg|bmp|gif|\".indexOf(\"|\"+a.ext.toLowerCase()+\"|\")==-1?e.empty().addClass(\"notimage\").append('<i class=\"file-preview file-type-'+a.ext.toLowerCase()+'\"></i><span class=\"file-title\">'+a.name+\"</span>\"):browser.ie&&browser.version<=7?e.text(lang.uploadNoPreview):f.makeThumb(a,function(a,b){if(a||!b||/^data:/.test(b)&&browser.ie&&browser.version<=7)e.text(lang.uploadNoPreview);else{var c=h('<img src=\"'+b+'\">');e.empty().append(c),c.on(\"error\",function(){e.text(lang.uploadNoPreview)})}},u,v),x[a.id]=[a.size,0],a.rotation=0,a.ext&&B.indexOf(a.ext.toLowerCase())!=-1||(i(\"not_allow_type\"),f.removeFile(a))),a.on(\"statuschange\",function(e,f){\"progress\"===f?d.hide().width(0):\"queued\"===f&&(b.off(\"mouseenter mouseleave\"),c.remove()),\"error\"===e||\"invalid\"===e?(i(a.statusText),x[a.id][1]=1):\"interrupt\"===e?i(\"interrupt\"):\"queued\"===e?x[a.id][1]=0:\"progress\"===e&&(g.hide(),d.css(\"display\",\"block\")),b.removeClass(\"state-\"+f).addClass(\"state-\"+e)}),b.on(\"mouseenter\",function(){c.stop().animate({height:30})}),b.on(\"mouseleave\",function(){c.stop().animate({height:0})}),c.on(\"click\",\"span\",function(){var b,c=h(this).index();switch(c){case 0:return void f.removeFile(a);case 1:a.rotation+=90;break;case 2:a.rotation-=90}y?(b=\"rotate(\"+a.rotation+\"deg)\",e.css({\"-webkit-transform\":b,\"-mos-transform\":b,\"-o-transform\":b,transform:b})):e.css(\"filter\",\"progid:DXImageTransform.Microsoft.BasicImage(rotation=\"+~~(a.rotation/90%4+4)%4+\")\")}),b.insertBefore(n)}function b(a){var b=h(\"#\"+a.id);delete x[a.id],c(),b.off().find(\".file-panel\").off().end().remove()}function c(){var a,b=0,c=0,d=p.children();h.each(x,function(a,d){c+=d[0],b+=d[0]*d[1]}),a=c?b/c:0,d.eq(0).text(Math.round(100*a)+\"%\"),d.eq(1).css(\"width\",Math.round(100*a)+\"%\"),e()}function d(a,b){if(a!=w){var c=f.getStats();switch(m.removeClass(\"state-\"+w),m.addClass(\"state-\"+a),a){case\"pedding\":j.addClass(\"element-invisible\"),k.addClass(\"element-invisible\"),o.removeClass(\"element-invisible\"),p.hide(),l.hide(),f.refresh();break;case\"ready\":o.addClass(\"element-invisible\"),j.removeClass(\"element-invisible\"),k.removeClass(\"element-invisible\"),p.hide(),l.show(),m.text(lang.uploadStart),f.refresh();break;case\"uploading\":p.show(),l.hide(),m.text(lang.uploadPause);break;case\"paused\":p.show(),l.hide(),m.text(lang.uploadContinue);break;case\"confirm\":if(p.show(),l.hide(),m.text(lang.uploadStart),c=f.getStats(),c.successNum&&!c.uploadFailNum)return void d(\"finish\");break;case\"finish\":p.hide(),l.show(),c.uploadFailNum?m.text(lang.uploadRetry):m.text(lang.uploadStart)}w=a,e()}g.getQueueCount()?m.removeClass(\"disabled\"):m.addClass(\"disabled\")}function e(){var a,b=\"\";\"ready\"===w?b=lang.updateStatusReady.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)):\"confirm\"===w?(a=f.getStats(),a.uploadFailNum&&(b=lang.updateStatusConfirm.replace(\"_\",a.successNum).replace(\"_\",a.successNum))):(a=f.getStats(),b=lang.updateStatusFinish.replace(\"_\",q).replace(\"_KB\",WebUploader.formatSize(r)).replace(\"_\",a.successNum),a.uploadFailNum&&(b+=lang.updateStatusError.replace(\"_\",a.uploadFailNum))),l.html(b)}var f,g=this,h=jQuery,i=g.$wrap,j=i.find(\".filelist\"),k=i.find(\".statusBar\"),l=k.find(\".info\"),m=i.find(\".uploadBtn\"),n=(i.find(\".filePickerBtn\"),i.find(\".filePickerBlock\")),o=i.find(\".placeholder\"),p=k.find(\".progress\").hide(),q=0,r=0,t=window.devicePixelRatio||1,u=113*t,v=113*t,w=\"\",x={},y=function(){var a=document.createElement(\"p\").style,b=\"transition\"in a||\"WebkitTransition\"in a||\"MozTransition\"in a||\"msTransition\"in a||\"OTransition\"in a;return a=null,b}(),z=editor.getActionUrl(editor.getOpt(\"videoActionName\")),A=editor.getOpt(\"videoMaxSize\"),B=(editor.getOpt(\"videoAllowFiles\")||[]).join(\"\").replace(/\\./g,\",\").replace(/^[,]/,\"\");return WebUploader.Uploader.support()?editor.getOpt(\"videoActionName\")?(f=g.uploader=WebUploader.create({pick:{id:\"#filePickerReady\",label:lang.uploadSelectFile},swf:\"../../third-party/webuploader/Uploader.swf\",server:z,fileVal:editor.getOpt(\"videoFieldName\"),duplicate:!0,fileSingleSizeLimit:A,headers:editor.getOpt(\"serverHeaders\")||{},compress:!1}),f.addButton({id:\"#filePickerBlock\"}),f.addButton({id:\"#filePickerBtn\",label:lang.uploadAddFile}),d(\"pedding\"),f.on(\"fileQueued\",function(b){q++,r+=b.size,1===q&&(o.addClass(\"element-invisible\"),k.show()),a(b)}),f.on(\"fileDequeued\",function(a){q--,r-=a.size,b(a),c()}),f.on(\"filesQueued\",function(a){f.isInProgress()||\"pedding\"!=w&&\"finish\"!=w&&\"confirm\"!=w&&\"ready\"!=w||d(\"ready\"),c()}),f.on(\"all\",function(a,b){switch(a){case\"uploadFinished\":d(\"confirm\",b);break;case\"startUpload\":var c=utils.serializeParam(editor.queryCommandValue(\"serverparam\"))||\"\",e=utils.formatUrl(z+(z.indexOf(\"?\")==-1?\"?\":\"&\")+\"encode=utf-8&\"+c);f.option(\"server\",e),d(\"uploading\",b);break;case\"stopUpload\":d(\"paused\",b)}}),f.on(\"uploadBeforeSend\",function(a,b,c){z.toLowerCase().indexOf(\"jsp\")!=-1&&(c.X_Requested_With=\"XMLHttpRequest\")}),f.on(\"uploadProgress\",function(a,b){var d=h(\"#\"+a.id),e=d.find(\".progress span\");e.css(\"width\",100*b+\"%\"),x[a.id][1]=b,c()}),f.on(\"uploadSuccess\",function(a,b){var c=h(\"#\"+a.id);try{var d=b._raw||b,e=utils.str2json(d);\"SUCCESS\"==e.state?(s.push({url:e.url,type:e.type,original:e.original}),c.append('<span class=\"success\"></span>'),editor.fireEvent(\"uploadsuccess\",{res:e,type:\"video\"})):c.find(\".error\").text(e.state).show()}catch(f){c.find(\".error\").text(lang.errorServerUpload).show()}}),f.on(\"uploadError\",function(a,b){}),f.on(\"error\",function(b,c){\"Q_TYPE_DENIED\"!=b&&\"F_EXCEED_SIZE\"!=b||a(c)}),f.on(\"uploadComplete\",function(a,b){}),m.on(\"click\",function(){return!h(this).hasClass(\"disabled\")&&void(\"ready\"===w?f.upload():\"paused\"===w?f.upload():\"uploading\"===w&&f.stop())}),m.addClass(\"state-\"+w),void c()):void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorLoadConfig)).hide():void h(\"#filePickerReady\").after(h(\"<div>\").html(lang.errorNotSupport)).hide()},getQueueCount:function(){var a,b,c,d=0,e=this.uploader.getFiles();for(b=0;a=e[b++];)c=a.getStatus(),\"queued\"!=c&&\"uploading\"!=c&&\"progress\"!=c||d++;return d},refresh:function(){this.uploader.refresh()}}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?04dbe7f0\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #d7d7d7\n        }\n\n        .wrapper .image-info {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .image-info .input {\n            flex-grow: 1;\n            display: flex;\n        }\n\n        .wrapper .image-info .input input {\n            display: block;\n            border: 1px solid #CCC;\n            height: 23px;\n            border-radius: 3px;\n            flex-grow: 1;\n            outline: none;\n        }\n\n        .wrapper .image-info .copy {\n            width: 60px;\n            cursor: pointer;\n            margin: 0 5px;\n        }\n\n        .wrapper .image-info .copy div {\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action {\n            width: 100px;\n            cursor: pointer;\n        }\n\n        .wrapper .image-info .action .save-from-local {\n            position: relative;\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action .save-from-local input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n        }\n\n        .wrapper .image-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .image-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .image-manual .body {\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"image-info\">\n        <div class=\"input\">\n            <input type=\"text\" id=\"fileUrl\"/>\n        </div>\n        <div class=\"copy\">\n            <div id=\"copyButton\">复制路径</div>\n        </div>\n        <div class=\"action\">\n            <div class=\"save-from-local\">\n                <div>本地选择保存</div>\n                <input type=\"file\" id=\"saveFile\" multiple=true/>\n            </div>\n        </div>\n    </div>\n    <div class=\"image-tip\"></div>\n    <div class=\"image-manual\">\n        <div class=\"title\">\n            Windows使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n        <div class=\"title\">\n            Mac使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，按快捷 Command+Shift+G ，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?25f4b625\"></script>\n<script src=\"../../third-party/webuploader/webuploader.js?2e7e9092\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?bae63983\"></script>\n<script type=\"text/javascript\" src=\"wordimage.js?94055851\"></script>\n<script type=\"text/javascript\">\n    editor.setOpt({\n        wordImageFieldName: \"upfile\",\n        compressSide: 0,\n        maxImageSideLength: 900\n    });\n    //全局变量\n    var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n        selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n        optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        optImageFieldName = editor.getOpt('imageFieldName'),\n        optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder') : null,\n        maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n        extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n    /* 添加额外的GET参数 */\n    var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n        urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?' : '&') + params;\n\n    var uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder');\n    uploader = WebUploader.create({\n        accept: {\n            title: 'Images',\n            extensions: acceptExtensions,\n            mimeTypes: 'image/*'\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n        threads: 1,\n        compress: editor.getOpt('imageCompressEnable') ? {\n            width: imageCompressBorder,\n            height: imageCompressBorder,\n            // 图片质量，只有type为`image/jpeg`的时候才有效。\n            quality: 90,\n            // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n            allowMagnify: false,\n            // 是否允许裁剪。\n            crop: false,\n            // 是否保留头部meta信息。\n            preserveHeaders: true\n        } : false\n    });\n    uploader.on('uploadSuccess', function (file, res) {\n        if ('state' in res) {\n            if (res.state === 'SUCCESS') {\n                if (res.url) {\n                    imageUrls.push({\n                        name: file.name,\n                        url: res.url,\n                        title: '',\n                    });\n                    $('.image-tip').html('<span style=\"color:#139213;\">图片' + imageUrls.length + '(' + file.name + ')' + '转存成功</span>');\n                } else {\n                    $('.image-tip').html('上传失败:' + JSON.stringify(res))\n                }\n                // 触发上传附件事件\n                editor.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'image'\n                });\n            } else {\n                $('.image-tip').html('上传失败:' + JSON.stringify(res))\n            }\n        } else {\n            $('.image-tip').html('上传失败:' + JSON.stringify(res))\n        }\n    });\n    uploader.on('uploadFinished', function () {\n        $('.image-tip').html('<span style=\"color:#139213;\">转存成功，请提交确认</span>');\n    });\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        wordImage.init(options, callbacks);\n    });\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/dialogs/wordimage/wordimage.js",
    "content": "/*! UEditorPlus v2.0.0*/\nfunction addUploadButtonListener(){g(\"saveFile\").addEventListener(\"change\",function(){$(\".image-tip\").html(\"正在转存，请稍后...\"),uploader.addFile(this.files),uploader.upload()})}function addOkListener(){dialog.onok=function(){if(imageUrls.length){var a=editor.getOpt(\"imageUrlPrefix\"),b=domUtils.getElementsByTagName(editor.document,\"img\");editor.fireEvent(\"saveScene\");for(var c,d=0;c=b[d++];){var e=c.getAttribute(\"data-word-image\");if(e)for(var f,g=0;f=imageUrls[g++];)if(e.indexOf(f.name.replace(\" \",\"\"))!=-1){c.src=a+f.url,c.setAttribute(\"_src\",a+f.url),c.setAttribute(\"title\",f.title),domUtils.removeAttributes(c,[\"data-word-image\",\"style\",\"width\",\"height\"]),editor.fireEvent(\"selectionchange\");break}}editor.fireEvent(\"saveScene\")}},dialog.oncancel=function(){}}function showLocalPath(a){var b=editor.selection.getRange().getClosedNode(),c=editor.execCommand(\"wordimage\");if(1==c.length||b&&\"IMG\"==b.tagName)return void(g(a).value=c[0]);var d=c[0],e=d.lastIndexOf(\"/\")||0,f=d.lastIndexOf(\"\\\\\")||0,h=e>f?\"/\":\"\\\\\";d=d.substring(0,d.lastIndexOf(h)+1),g(a).value=d;for(var i=[],j=0,k=c.length;j<k;j++){var b=c[j];i.push(b.substring(b.lastIndexOf(h)+1,b.length))}$(\".image-tip\").html('<span style=\"color:#ff0000;\">请选择:'+i.join(\"、\")+\"共\"+c.length+\"个文件</span>\")}function createCopyButton(a,b){var c=g(b).value;c.startsWith(\"file:////\")&&(c=c.substring(8)),c=decodeURI(c),g(a).setAttribute(\"data-clipboard-text\",c);var d=new Clipboard(\"[data-clipboard-text]\");d.on(\"success\",function(a){g(\"copyButton\").innerHTML=\"复制成功\"})}var wordImage={},g=$G,flashObj,flashContainer;wordImage.init=function(a,b){showLocalPath(\"fileUrl\"),createCopyButton(\"copyButton\",\"fileUrl\"),addUploadButtonListener(),addOkListener()};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/index.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <title>UEditorPlus 完整演示</title>\n    <meta name=\"viewport\" content=\"width=device-width, minimum-scale=0.5, maximum-scale=5, user-scalable=no\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\">\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.config.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"ueditor.all.js\"></script>\n    <script type=\"text/javascript\" charset=\"utf-8\" src=\"lang/zh-cn/zh-cn.js?49010875\"></script>\n    <script src=\"./plugins/demo/demo.js\"></script>\n    <script>\n        // window.UEDITOR_CONFIG.toolbars[0].push('undo');\n    </script>\n    <script>var __grow = __grow || [];\n(function() {\n  var g = document.createElement(\"script\");\n  g.src = \"https://g.tecmz.com/grow/page.js?open\";\n  var s = document.getElementsByTagName(\"script\")[0];\n  s.parentNode.insertBefore(g, s);\n})();\n</script>\n    <style>\n        :root {\n            /*--ueditor-top-offset: 20px;*/\n        }\n    </style>\n    <link rel=\"stylesheet\" href=\"./style.css\"/>\n</head>\n<body class=\"demo-editor-page\">\n<div>\n    <h1>完整示例</h1>\n    <div>\n        <script id=\"editor\" type=\"text/plain\" style=\"height:300px;\">\n<h1>\n    你好 UEditorPlus\n</h1>\n<p>\n    UEditorPlus 是基于 UEditor 二次开发的富文本编辑器，让 UEditor <span style=\"color: #E36C09;\">焕<span style=\"color: #0070C0;\">然</span><span style=\"color: #31859B;\"><span style=\"color: #00B050;\">一</span><span style=\"color: #FF0000;\">新</span></span></span>\n</p>\n\n<table data-sort=\"sortDisabled\">\n    <tbody>\n        <tr class=\"firstRow\">\n            <td valign=\"top\" style=\"word-break: break-all;\" rowspan=\"1\" colspan=\"3\">\n                我是表格\n            </td>\n        </tr>\n        <tr>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                如果\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                有一天\n            </td>\n            <td width=\"273\" valign=\"top\" style=\"word-break: break-all;\">\n                我离开了\n            </td>\n        </tr>\n        <tr>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                怎么才能\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                证明我\n            </td>\n            <td valign=\"top\" colspan=\"1\" rowspan=\"1\" style=\"word-break: break-all;\">\n                曾经来过\n            </td>\n        </tr>\n    </tbody>\n</table>\n<pre class=\"brush:html;toolbar:false\">&lt;div&gt;\n  &lt;span&gt;这里是HTML标签&lt;/span&gt;\n&lt;/div&gt;</pre>\n<h2>\n公式支持\n</h2>\n<p>\n    <img src=\"https://r.latexeasy.com/image.svg?%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"\n      data-formula-image=\"%5Cint%20%5Cfrac%7B1%7D%7Bx%7D%20dx%20%3D%20%5Cln%20%5Cleft%7C%20x%20%5Cright%7C%20%2B%20C\"/>\n</p>\n<p>\n    <br/>\n</p>\n\n        </script>\n    </div>\n    <div id=\"btns\" style=\"margin-top:20px;\">\n        <div>\n\n            <button onclick=\"alert(UE.getEditor('editor').getAllHtml())\">获得整个html的内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContent())\">获得内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', false)\">写入内容</button>\n            <button onclick=\"UE.getEditor('editor').setContent('<p>欢迎使用 UEditorPlus</p>', true)\">追加内容</button>\n            <button onclick=\"alert(UE.getEditor('editor').getContentTxt())\">获得纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').getPlainTxt())\">获得带格式的纯文本</button>\n            <button onclick=\"alert(UE.getEditor('editor').hasContents())\">判断是否有内容</button>\n            <button onclick=\"UE.getEditor('editor').focus()\">使编辑器获得焦点</button>\n            <button onmousedown=\"isFocus()\">编辑器是否获得焦点</button>\n            <button onmousedown=\"setBlur()\">编辑器失去焦点</button>\n            <button onclick=\"getSelectText()\">获得当前选中的文本</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('insertHtml', '插入的内容')\">插入内容</button>\n            <button onclick=\"UE.getEditor('editor').setEnabled()\">设定可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setDisabled('fullscreen')\">设定不可编辑</button>\n            <button onclick=\"UE.getEditor('editor').setHide()\">隐藏编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setShow()\">显示编辑器</button>\n            <button onclick=\"UE.getEditor('editor').setHeight(300)\">设置固定高度</button>\n            <button onclick=\"UE.getEditor('editor')\">创建编辑器</button>\n            <button onclick=\"UE.getEditor('editor').destroy()\">销毁编辑器</button>\n            <button onclick=\"alert( UE.getEditor('editor').execCommand('get_auto_save_content') )\">草稿箱-获取</button>\n            <button onclick=\"UE.getEditor('editor').execCommand('clear_auto_save_content'); alert('已清空草稿箱')\">草稿箱-清空\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('set_auto_save_content'); alert('已保存')\">草稿箱-立即保存\n            </button>\n            <button onclick=\"UE.getEditor('editor').execCommand('auto_save_restore')\">草稿箱-恢复到编辑器</button>\n        </div>\n    </div>\n\n    <script type=\"text/javascript\">\n        var ue = UE.getEditor('editor',{\n            // autoHeightEnabled: false,\n        });\n        ue.on('contentchange', function () {\n            // console.log('contentchange', ue.getContent());\n        });\n\n        function isFocus(e) {\n            alert(UE.getEditor('editor').isFocus());\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function setBlur(e) {\n            UE.getEditor('editor').blur();\n            UE.dom.domUtils.preventDefault(e)\n        }\n\n        function getSelectText() {\n            var range = UE.getEditor('editor').selection.getRange();\n            range.select();\n            var txt = UE.getEditor('editor').selection.getText();\n            alert(txt)\n        }\n    </script>\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/lang/en/en.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N.en={labelMap:{anchor:\"Anchor\",undo:\"Undo\",redo:\"Redo\",bold:\"Bold\",indent:\"Indent\",italic:\"Italic\",underline:\"Underline\",strikethrough:\"Strikethrough\",subscript:\"SubScript\",fontborder:\"text border\",superscript:\"SuperScript\",formatmatch:\"Format Match\",source:\"Source\",blockquote:\"BlockQuote\",pasteplain:\"PastePlain\",selectall:\"SelectAll\",print:\"Print\",preview:\"Preview\",horizontal:\"Horizontal\",removeformat:\"RemoveFormat\",time:\"Time\",date:\"Date\",unlink:\"Unlink\",insertrow:\"InsertRow\",insertcol:\"InsertCol\",mergeright:\"MergeRight\",mergedown:\"MergeDown\",deleterow:\"DeleteRow\",deletecol:\"DeleteCol\",splittorows:\"SplitToRows\",insertcode:\"insert code\",splittocols:\"SplitToCols\",splittocells:\"SplitToCells\",deletecaption:\"DeleteCaption\",inserttitle:\"InsertTitle\",mergecells:\"MergeCells\",deletetable:\"DeleteTable\",cleardoc:\"Clear\",contentimport:\"Content Import\",insertparagraphbeforetable:\"InsertParagraphBeforeTable\",fontfamily:\"FontFamily\",fontsize:\"FontSize\",paragraph:\"Paragraph\",simpleupload:\"Single Image\",insertimage:\"Multi Image\",edittable:\"Edit Table\",edittd:\"Edit Td\",link:\"Link\",emotion:\"Emotion\",spechars:\"Spechars\",searchreplace:\"SearchReplace\",insertvideo:\"Video\",help:\"Help\",justifyleft:\"JustifyLeft\",justifyright:\"JustifyRight\",justifycenter:\"JustifyCenter\",justifyjustify:\"Justify\",forecolor:\"FontColor\",backcolor:\"BackColor\",insertorderedlist:\"OL\",insertunorderedlist:\"UL\",fullscreen:\"FullScreen\",directionalityltr:\"EnterFromLeft\",directionalityrtl:\"EnterFromRight\",rowspacingtop:\"RowSpacingTop\",rowspacingbottom:\"RowSpacingBottom\",pagebreak:\"PageBreak\",insertframe:\"Iframe\",imagenone:\"Default\",imageleft:\"ImageLeft\",imageright:\"ImageRight\",attachment:\"Attachment\",imagecenter:\"ImageCenter\",wordimage:\"WordImage\",formula:\"Formula\",lineheight:\"LineHeight\",edittip:\"EditTip\",customstyle:\"CustomStyle\",scrawl:\"Scrawl\",autotypeset:\"AutoTypeset\",touppercase:\"UpperCase\",tolowercase:\"LowerCase\",template:\"Template\",background:\"Background\",inserttable:\"InsertTable\"},autosave:{autoRestoreTip:\"Has been recovered from draft\"},insertorderedlist:{num:\"1,2,3...\",num1:\"1),2),3)...\",num2:\"(1),(2),(3)...\",cn:\"一,二,三....\",cn1:\"一),二),三)....\",cn2:\"(一),(二),(三)....\",decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ Circle\",disc:\"● Circle dot\",square:\"■ Rectangle \",dash:\"－ Dash\",dot:\"。dot\"},paragraph:{p:\"Paragraph\",h1:\"Title 1\",h2:\"Title 2\",h3:\"Title 3\",h4:\"Title 4\",h5:\"Title 5\",h6:\"Title 6\"},fontfamily:{\"default\":\"Default\",songti:\"Sim Sun\",kaiti:\"Sim Kai\",heiti:\"Sim Hei\",lishu:\"Sim Li\",yahei:\"Microsoft YaHei\",arial:\"Arial\",timesNewRoman:\"Times New Roman\"},customstyle:{tc:\"Title center\",tl:\"Title left\",im:\"Important\",hi:\"Highlight\"},autoupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},simpleupload:{exceedSizeError:\"File Size Exceed\",exceedTypeError:\"File Type Not Allow\",jsonEncodeError:\"Server Return Format Error\",loading:\"loading...\",loadError:\"load error\",errorLoadConfig:\"Server config not loaded, upload can not work.\"},elementPathTip:\"Path\",wordCountTip:\"Word Count\",wordCountMsg:\"{#count} characters entered,{#leave} left. \",wordOverFlowMsg:'<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',ok:\"OK\",cancel:\"Cancel\",closeDialog:\"closeDialog\",tableDrag:\"You must import the file uiUtils.js before drag! \",autofloatMsg:\"The plugin AutoFloat depends on EditorUI!\",loadconfigError:\"Get server config error.\",loadconfigFormatError:\"Server config format error.\",loadconfigHttpError:\"Get server config http error.\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"Do you confirm to clear the Document?\",contextMenu:{\"delete\":\"Delete\",selectall:\"Select all\",deletecode:\"Delete Code\",cleardoc:\"Clear Document\",confirmclear:\"Do you confirm to clear the Document?\",unlink:\"Unlink\",paragraph:\"Paragraph\",edittable:\"Table property\",aligncell:\"Align cell\",aligntable:\"Table alignment\",tableleft:\"Left float\",tablecenter:\"Center\",tableright:\"Right float\",aligntd:\"Cell alignment\",edittd:\"Cell property\",setbordervisible:\"set table edge visible\",table:\"Table\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justifyjustify:\"Default\",deletetable:\"Delete table\",insertparagraphbefore:\"InsertedBeforeLine\",insertparagraphafter:\"InsertedAfterLine\",inserttable:\"Insert table\",insertcaption:\"Insert caption\",deletecaption:\"Delete Caption\",inserttitle:\"Insert Title\",deletetitle:\"Delete Title\",inserttitlecol:\"Insert Title Col\",deletetitlecol:\"Delete Title Col\",averageDiseRow:\"AverageDise Row\",averageDisCol:\"AverageDis Col\",deleterow:\"Delete row\",deletecol:\"Delete col\",insertrow:\"Insert row\",insertcol:\"Insert col\",insertrownext:\"Insert Row Next\",insertcolnext:\"Insert Col Next\",mergeright:\"Merge right\",mergeleft:\"Merge left\",mergedown:\"Merge down\",mergecells:\"Merge cells\",splittocells:\"Split to cells\",splittocols:\"Split to Cols\",splittorows:\"Split to Rows\",tablesort:\"Table sorting\",enablesort:\"Sorting Enable\",disablesort:\"Sorting Disable\",reversecurrent:\"Reverse current\",orderbyasc:\"Order By ASCII\",reversebyasc:\"Reverse By ASCII\",orderbynum:\"Order By Num\",reversebynum:\"Reverse By Num\",borderbk:\"Border shading\",setcolor:\"interlaced color\",unsetcolor:\"Cancel interlacedcolor\",setbackground:\"Background interlaced\",unsetbackground:\"Cancel Bk interlaced\",redandblue:\"Blue and red\",threecolorgradient:\"Three-color gradient\",copy:\"Copy(Ctrl + c)\",copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",paste:\"Paste(Ctrl + v)\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\"},copymsg:\"Browser does not support. Please use 'Ctrl + c' instead!\",pastemsg:\"Browser does not support. Please use 'Ctrl + v' instead!\",anchorMsg:\"Link\",clearColor:\"Clear\",standardColor:\"Standard color\",themeColor:\"Theme color\",property:\"Property\",\"default\":\"Default\",modify:\"Modify\",save:\"Save\",justifyleft:\"Justify Left\",justifyright:\"Justify Right\",justifycenter:\"Justify Center\",justify:\"Default\",clear:\"Clear\",\"delete\":\"Delete\",clickToUpload:\"Click to upload\",unset:\"Language hasn't been set!\",t_row:\"row\",t_col:\"col\",pasteOpt:\"Paste Option\",pasteSourceFormat:\"Keep Source Formatting\",tagFormat:\"Keep tag\",pasteTextFormat:\"Keep Text only\",more:\"More\",autoTypeSet:{mergeLine:\"Merge empty line\",delLine:\"Del empty line\",removeFormat:\"Remove format\",indent:\"Indent\",alignment:\"Alignment\",imageFloat:\"Image float\",removeFontsize:\"Remove font size\",removeFontFamily:\"Remove fontFamily\",removeHtml:\"Remove redundant HTML code\",pasteFilter:\"Paste filter\",run:\"Done\",symbol:\"Symbol Conversion\",bdc2sb:\"Full-width to Half-width\",tobdc:\"Half-width to Full-width\"},background:{\"static\":{lang_background_normal:\"Normal\",lang_background_local:\"Online\",lang_background_set:\"Background Set\",lang_background_none:\"No Background\",lang_background_colored:\"Colored Background\",lang_background_color:\"Color Set\",lang_background_netimg:\"Net-Image\",lang_background_align:\"Align Type\",lang_background_position:\"Position\",repeatType:{options:[\"Center\",\"Repeat-x\",\"Repeat-y\",\"Tile\",\"Custom\"]}},noUploadImage:\"No pictures has been uploaded！\",toggleSelect:\"Change the active state by click!\\n Image Size: \"},insertimage:{\"static\":{lang_tab_remote:\"Insert\",lang_tab_upload:\"Local\",lang_tab_online:\"Manager\",lang_tab_search:\"Search\",lang_input_url:\"Address:\",lang_input_size:\"Size:\",lang_input_width:\"Width\",lang_input_height:\"Height\",lang_input_border:\"Border:\",lang_input_vhspace:\"Margins:\",lang_input_title:\"Title:\",lang_input_align:\"Image Float Style:\",lang_imgLoading:\"Loading...\",lang_start_upload:\"Start Upload\",lock:{title:\"Lock rate\"},searchType:{title:\"ImageType\",options:[\"News\",\"Wallpaper\",\"emotions\",\"photo\"]},searchTxt:{value:\"Enter the search keyword!\"},searchBtn:{value:\"Search\"},searchReset:{value:\"Clear\"},noneAlign:{title:\"None Float\"},leftAlign:{title:\"Left Float\"},rightAlign:{title:\"Right Float\"},centerAlign:{title:\"Center In A Line\"}},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",uploadNoPreview:\"Can Not Preview\",updateStatusReady:\"Selected _ pictures, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ pictures (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\",remoteLockError:\"Cannot Lock the Proportion between width and height\",numError:\"Please enter the correct Num. e.g 123,400\",imageUrlError:\"The image format may be wrong!\",imageLoadError:\"Error,please check the network or URL！\",searchRemind:\"Enter the search keyword!\",searchLoading:\"Image is loading,please wait...\",searchRetry:\" Sorry,can't find the image,please try again!\"},attachment:{\"static\":{lang_tab_upload:\"Upload\",lang_tab_online:\"Online\",lang_start_upload:\"Start upload\",lang_drop_remind:\"You can drop files here, a single maximum of 300 files\"},uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},insertvideo:{\"static\":{lang_tab_insertV:\"Video\",lang_tab_searchV:\"Search\",lang_tab_uploadV:\"Upload\",lang_video_url:\" URL \",lang_video_size:\"Video Size\",lang_videoW:\"Width\",lang_videoH:\"Height\",lang_alignment:\"Alignment\",videoSearchTxt:{value:\"Enter the search keyword!\"},videoType:{options:[\"All\",\"Hot\",\"Entertainment\",\"Funny\",\"Sports\",\"Science\",\"variety\"]},videoSearchBtn:{value:\"Search in Baidu\"},videoSearchReset:{value:\"Clear result\"},lang_input_fileStatus:\" No file uploaded!\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"Video Size\",lang_upload_width:\"Width\",lang_upload_height:\"Height\",lang_upload_alignment:\"Alignment\",lang_format_advice:\"Recommends mp4 format.\"},numError:\"Please enter the correct Num. e.g 123,400\",floatLeft:\"Float left\",floatRight:\"Float right\",\"default\":\"Default\",block:\"Display in block\",urlError:\"The video url format may be wrong!\",loading:\" &nbsp;The video is loading, please wait…\",clickToSelect:\"Click to select\",goToSource:\"Visit source video \",noVideo:\" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",browseFiles:\"Open files\",uploadSuccess:\"Upload Successful!\",delSuccessFile:\"Remove from the success of the queue\",delFailSaveFile:\"Remove the save failed file\",statusPrompt:\" file(s) uploaded! \",flashVersionError:\"The current Flash version is too low, please update FlashPlayer,then try again!\",flashLoadingError:\"The Flash failed loading! Please check the path or network state\",fileUploadReady:\"Wait for uploading...\",delUploadQueue:\"Remove from the uploading queue \",limitPrompt1:\"Can not choose more than single\",limitPrompt2:\"file(s)！Please choose again！\",delFailFile:\"Remove failure file\",fileSizeLimit:\"File size exceeds the limit！\",emptyFile:\"Can not upload an empty file！\",fileTypeError:\"File type error！\",unknownError:\"Unknown error！\",fileUploading:\"Uploading,please wait...\",cancelUpload:\"Cancel upload\",netError:\"Network error\",failUpload:\"Upload failed\",serverIOError:\"Server IO error！\",noAuthority:\"No Permission！\",fileNumLimit:\"Upload limit to the number\",failCheck:\"Authentication fails, the upload is skipped!\",fileCanceling:\"Cancel, please wait...\",stopUploading:\"Upload has stopped...\",uploadSelectFile:\"Select File\",uploadAddFile:\"Add File\",uploadStart:\"Start Upload\",uploadPause:\"Pause Upload\",uploadContinue:\"Continue Upload\",uploadRetry:\"Retry Upload\",uploadDelete:\"Delete\",uploadTurnLeft:\"Turn Left\",uploadTurnRight:\"Turn Right\",uploadPreview:\"Doing Preview\",updateStatusReady:\"Selected _ files, total _KB.\",updateStatusConfirm:\"_ uploaded successfully and _ upload failed\",updateStatusFinish:\"Total _ files (_KB), _  uploaded successfully\",updateStatusError:\" and _ upload failed\",errorNotSupport:\"WebUploader does not support the browser you are using. Please upgrade your browser or flash player\",errorLoadConfig:\"Server config not loaded, upload can not work.\",errorExceedSize:\"File Size Exceed\",errorFileType:\"File Type Not Allow\",errorInterrupt:\"File Upload Interrupted\",errorUploadRetry:\"Upload Error, Please Retry.\",errorHttp:\"Http Error\",errorServerUpload:\"Server Result Error.\"},template:{\"static\":{lang_template_bkcolor:\"Background Color\",lang_template_clear:\"Keep Content\",lang_template_select:\"Select Template\"},blank:\"Blank\",blog:\"Blog\",resume:\"Resume\",richText:\"Rich Text\",scrPapers:\"Scientific Papers\"},scrawl:{\"static\":{lang_input_previousStep:\"Previous\",lang_input_nextsStep:\"Next\",lang_input_clear:\"Clear\",lang_input_addPic:\"AddImage\",lang_input_ScalePic:\"ScaleImage\",lang_input_removePic:\"RemoveImage\",J_imgTxt:{title:\"Add background image\"}},noScarwl:\"No paint, a white paper...\",scrawlUpLoading:\"Image is uploading, please wait...\",continueBtn:\"Try again\",imageError:\"Image failed to load!\",backgroundUploading:\"Image is uploading,please wait...\"},anchor:{\"static\":{lang_input_anchorName:\"Anchor Name:\"}},emotion:{\"static\":{lang_input_choice:\"Choice\",lang_input_Tuzki:\"Tuzki\",lang_input_lvdouwa:\"LvDouWa\",lang_input_BOBO:\"BOBO\",lang_input_babyCat:\"BabyCat\",lang_input_bubble:\"Bubble\",lang_input_youa:\"YouA\"}},help:{\"static\":{lang_input_about:\"About UEditor Plus\",lang_input_shortcuts:\"Shortcuts\",lang_input_introduction:\"UEditor Plus is based on UEditor.\",lang_Txt_shortcuts:\"Shortcuts\",lang_Txt_func:\"Function\",lang_Txt_bold:\"Bold\",lang_Txt_copy:\"Copy\",lang_Txt_cut:\"Cut\",lang_Txt_Paste:\"Paste\",lang_Txt_undo:\"Undo\",lang_Txt_redo:\"Redo\",lang_Txt_italic:\"Italic\",lang_Txt_underline:\"Underline\",lang_Txt_selectAll:\"Select All\",lang_Txt_visualEnter:\"Submit\",lang_Txt_fullscreen:\"Fullscreen\"}},insertframe:{\"static\":{lang_input_address:\"Address：\",lang_input_width:\"Width：\",lang_input_height:\"height：\",lang_input_isScroll:\"Enable scrollbars：\",lang_input_frameborder:\"Show frame border：\",lang_input_alignMode:\"Alignment：\",align:{title:\"Alignment\",options:[\"Default\",\"Left\",\"Right\",\"Center\"]}},enterAddress:\"Please enter an address!\"},link:{\"static\":{lang_input_text:\"Text：\",lang_input_url:\"URL：\",lang_input_title:\"Title：\",lang_input_target:\"open in new window：\"},validLink:\"Supports only effective when a link is selected\",httpPrompt:'The hyperlink you enter should start with \"http|https|ftp://\"!'},searchreplace:{\"static\":{lang_tab_search:\"Search\",lang_tab_replace:\"Replace\",lang_search1:\"Search\",lang_search2:\"Search\",lang_replace:\"Replace\",lang_searchReg:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_searchReg1:'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',lang_case_sensitive1:\"Case sense\",lang_case_sensitive2:\"Case sense\",nextFindBtn:{value:\"Next\"},preFindBtn:{value:\"Preview\"},nextReplaceBtn:{value:\"Next\"},preReplaceBtn:{value:\"Preview\"},repalceBtn:{value:\"Replace\"},repalceAllBtn:{value:\"Replace all\"}},getEnd:\"Has the search to the bottom!\",getStart:\"Has the search to the top!\",countMsg:\"Altogether replaced {#count} character(s)!\"},spechars:{\"static\":{},tsfh:\"Special\",lmsz:\"Roman\",szfh:\"Numeral\",rwfh:\"Japanese\",xlzm:\"The Greek\",ewzm:\"Russian\",pyzm:\"Phonetic\",yyyb:\"English\",zyzf:\"Others\"},edittable:{\"static\":{lang_tableStyle:\"Table style\",lang_insertCaption:\"Add table header row\",lang_insertTitle:\"Add table title row\",lang_insertTitleCol:\"Add table title col\",lang_tableSize:\"Automatically adjust table size\",lang_autoSizeContent:\"Adaptive by form text\",lang_orderbycontent:\"Table of contents sortable\",lang_autoSizePage:\"Page width adaptive\",lang_example:\"Example\",lang_borderStyle:\"Table Border\",lang_color:\"Color:\"},captionName:\"Caption\",titleName:\"Title\",cellsName:\"text\",errorMsg:\"There are merged cells, can not sort.\"},edittip:{\"static\":{lang_delRow:\"Delete entire row\",lang_delCol:\"Delete entire col\"}},edittd:{\"static\":{lang_tdBkColor:\"Background Color:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"The re-save step\",uploadBtn:{src:\"upload.png\",alt:\"Upload\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"},fileType:\"Image\",flashError:\"Flash initialization failed!\",netError:\"Network error! Please try again!\",copySuccess:\"URL has been copied!\",flashI18n:{lang:encodeURI('{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}'),uploadingTF:encodeURI('{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}'),imageTF:encodeURI('{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}'),textEncoding:\"utf-8\",addImageSkinURL:\"addImage.png\",allDeleteBtnUpSkinURL:\"allDeleteBtnUpSkin.png\",allDeleteBtnHoverSkinURL:\"allDeleteBtnHoverSkin.png\",rotateLeftBtnEnableSkinURL:\"rotateLeftEnable.png\",rotateLeftBtnDisableSkinURL:\"rotateLeftDisable.png\",rotateRightBtnEnableSkinURL:\"rotateRightEnable.png\",rotateRightBtnDisableSkinURL:\"rotateRightDisable.png\",deleteBtnEnableSkinURL:\"deleteEnable.png\",deleteBtnDisableSkinURL:\"deleteDisable.png\",backgroundURL:\"\",listBackgroundURL:\"\",buttonURL:\"button.png\"}}};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/lang/zh-cn/zh-cn.js",
    "content": "/*! UEditorPlus v2.0.0*/\nUE.I18N[\"zh-cn\"]={labelMap:{anchor:\"锚点\",undo:\"撤销\",redo:\"重做\",bold:\"加粗\",indent:\"首行缩进\",italic:\"斜体\",underline:\"下划线\",strikethrough:\"删除线\",subscript:\"下标\",fontborder:\"字符边框\",superscript:\"上标\",formatmatch:\"格式刷\",source:\"源代码\",blockquote:\"引用\",pasteplain:\"纯文本粘贴模式\",selectall:\"全选\",print:\"打印\",preview:\"预览\",horizontal:\"分隔线\",removeformat:\"清除格式\",time:\"时间\",date:\"日期\",unlink:\"取消链接\",insertrow:\"前插入行\",insertcol:\"前插入列\",mergeright:\"右合并单元格\",mergedown:\"下合并单元格\",deleterow:\"删除行\",deletecol:\"删除列\",splittorows:\"拆分成行\",splittocols:\"拆分成列\",splittocells:\"完全拆分单元格\",deletecaption:\"删除表格标题\",inserttitle:\"插入标题\",mergecells:\"合并多个单元格\",deletetable:\"删除表格\",cleardoc:\"清空文档\",contentimport:\"导入内容\",insertparagraphbeforetable:\"表格前插入行\",insertcode:\"代码语言\",fontfamily:\"字体\",fontsize:\"字号\",paragraph:\"段落格式\",simpleupload:\"单图上传\",insertimage:\"插入图片\",edittable:\"表格属性\",edittd:\"单元格属性\",link:\"超链接\",emotion:\"表情\",spechars:\"特殊字符\",searchreplace:\"查询替换\",insertvideo:\"视频\",insertaudio:\"音频\",help:\"帮助\",justifyleft:\"居左对齐\",justifyright:\"居右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",forecolor:\"字体颜色\",backcolor:\"背景色\",insertorderedlist:\"有序列表\",insertunorderedlist:\"无序列表\",fullscreen:\"全屏\",directionalityltr:\"从左向右输入\",directionalityrtl:\"从右向左输入\",rowspacingtop:\"段前距\",rowspacingbottom:\"段后距\",pagebreak:\"分页\",insertframe:\"插入Iframe\",imagenone:\"默认\",imageleft:\"左浮动\",imageright:\"右浮动\",attachment:\"附件\",imagecenter:\"居中\",wordimage:\"图片转存\",formula:\"公式\",lineheight:\"行间距\",edittip:\"编辑提示\",customstyle:\"自定义标题\",autotypeset:\"自动排版\",touppercase:\"字母大写\",tolowercase:\"字母小写\",background:\"背景\",template:\"模板\",scrawl:\"涂鸦\",inserttable:\"插入表格\"},autosave:{autoRestoreTip:\"已自动从草稿箱恢复\"},insertorderedlist:{decimal:\"1,2,3...\",\"lower-alpha\":\"a,b,c...\",\"lower-roman\":\"i,ii,iii...\",\"upper-alpha\":\"A,B,C...\",\"upper-roman\":\"I,II,III...\"},insertunorderedlist:{circle:\"○ 大圆圈\",disc:\"● 小黑点\",square:\"■ 小方块 \"},paragraph:{p:\"段落\",h1:\"标题 1\",h2:\"标题 2\",h3:\"标题 3\",h4:\"标题 4\",h5:\"标题 5\",h6:\"标题 6\"},fontfamily:{\"default\":\"默认\",songti:\"宋体\",kaiti:\"楷体\",heiti:\"黑体\",lishu:\"隶书\",yahei:\"微软雅黑\",arial:\"arial\",timesNewRoman:\"times new roman\"},customstyle:{tc:\"标题居中\",tl:\"标题居左\",im:\"强调\",hi:\"明显强调\"},autoupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},simpleupload:{exceedSizeError:\"文件大小超出限制\",exceedTypeError:\"文件格式不允许\",jsonEncodeError:\"服务器返回格式错误\",loading:\"正在上传...\",loadError:\"上传错误\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\"},elementPathTip:\"元素路径\",wordCountTip:\"字数统计\",wordCountMsg:\"{#count} / {#leave}\",wordOverFlowMsg:'<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',ok:\"确认\",cancel:\"取消\",closeDialog:\"关闭对话框\",tableDrag:\"表格拖动必须引入uiUtils.js文件！\",autofloatMsg:\"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",loadconfigError:\"获取后台配置项请求出错，上传功能将不能正常使用！\",loadconfigFormatError:\"后台配置项返回格式出错，上传功能将不能正常使用！\",loadconfigHttpError:\"请求后台配置项http错误，上传功能将不能正常使用！\",insertcode:{as3:\"ActionScript 3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"CSS\",cf:\"ColdFusion\",\"c#\":\"C#\",delphi:\"Delphi\",diff:\"Diff\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"HTML\",java:\"Java\",jfx:\"JavaFX\",js:\"JavaScript\",pl:\"Perl\",php:\"PHP\",plain:\"Plain Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"Visual Basic\",xml:\"XML\"},confirmClear:\"确定清空当前文档么？\",contextMenu:{\"delete\":\"删除\",selectall:\"全选\",deletecode:\"删除代码\",cleardoc:\"清空文档\",confirmclear:\"确定清空当前文档么？\",unlink:\"删除超链接\",paragraph:\"段落格式\",edittable:\"表格属性\",aligntd:\"单元格对齐方式\",aligntable:\"表格对齐方式\",tableleft:\"左浮动\",tablecenter:\"居中显示\",tableright:\"右浮动\",edittd:\"单元格属性\",setbordervisible:\"设置表格边线可见\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中对齐\",justifyjustify:\"两端对齐\",table:\"表格\",inserttable:\"插入表格\",deletetable:\"删除表格\",insertparagraphbefore:\"前插入段落\",insertparagraphafter:\"后插入段落\",deleterow:\"删除当前行\",deletecol:\"删除当前列\",insertrow:\"前插入行\",insertcol:\"左插入列\",insertrownext:\"后插入行\",insertcolnext:\"右插入列\",insertcaption:\"插入表格名称\",deletecaption:\"删除表格名称\",inserttitle:\"插入表格标题行\",deletetitle:\"删除表格标题行\",inserttitlecol:\"插入表格标题列\",deletetitlecol:\"删除表格标题列\",averageDiseRow:\"平均分布各行\",averageDisCol:\"平均分布各列\",mergeright:\"向右合并\",mergeleft:\"向左合并\",mergedown:\"向下合并\",mergecells:\"合并单元格\",splittocells:\"完全拆分单元格\",splittocols:\"拆分成列\",splittorows:\"拆分成行\",tablesort:\"表格排序\",enablesort:\"设置表格可排序\",disablesort:\"取消表格可排序\",reversecurrent:\"逆序当前\",orderbyasc:\"按ASCII字符升序\",reversebyasc:\"按ASCII字符降序\",orderbynum:\"按数值大小升序\",reversebynum:\"按数值大小降序\",borderbk:\"边框底纹\",setcolor:\"表格隔行变色\",unsetcolor:\"取消表格隔行变色\",setbackground:\"选区背景隔行\",unsetbackground:\"取消选区背景\",redandblue:\"红蓝相间\",threecolorgradient:\"三色渐变\",copy:\"复制(Ctrl + c)\",copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",paste:\"粘贴(Ctrl + v)\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\"},copymsg:\"浏览器不支持,请使用 'Ctrl + c'\",pastemsg:\"浏览器不支持,请使用 'Ctrl + v'\",anchorMsg:\"链接\",clearColor:\"清空颜色\",standardColor:\"标准颜色\",themeColor:\"主题颜色\",property:\"属性\",\"default\":\"默认\",modify:\"修改\",save:\"保存\",justifyleft:\"左对齐\",justifyright:\"右对齐\",justifycenter:\"居中\",justify:\"默认\",clear:\"清除\",\"delete\":\"删除\",clickToUpload:\"点击上传\",unset:\"尚未设置语言文件\",t_row:\"行\",t_col:\"列\",more:\"更多\",pasteOpt:\"粘贴选项\",pasteSourceFormat:\"保留源格式\",tagFormat:\"只保留标签\",pasteTextFormat:\"只保留文本\",autoTypeSet:{mergeLine:\"合并空行\",delLine:\"清除空行\",removeFormat:\"清除格式\",indent:\"首行缩进\",alignment:\"对齐方式\",imageFloat:\"图片浮动\",removeFontsize:\"清除字号\",removeFontFamily:\"清除字体\",removeHtml:\"清除冗余HTML代码\",pasteFilter:\"粘贴过滤\",run:\"执行\",symbol:\"符号转换\",bdc2sb:\"全角转半角\",tobdc:\"半角转全角\"},background:{\"static\":{lang_background_normal:\"背景设置\",lang_background_local:\"在线图片\",lang_background_set:\"选项\",lang_background_none:\"无背景色\",lang_background_colored:\"有背景色\",lang_background_color:\"颜色设置\",lang_background_netimg:\"网络图片\",lang_background_align:\"对齐方式\",lang_background_position:\"精确定位\",repeatType:{options:[\"居中\",\"横向重复\",\"纵向重复\",\"平铺\",\"自定义\"]}},noUploadImage:\"当前未上传过任何图片！\",toggleSelect:\"单击可切换选中状态\\n原图尺寸: \"},insertimage:{\"static\":{lang_tab_remote:\"插入图片\",lang_tab_upload:\"本地上传\",lang_tab_online:\"在线管理\",lang_input_url:\"地 址：\",lang_input_size:\"大 小：\",lang_input_width:\"宽度\",lang_input_height:\"高度\",lang_input_border:\"边 框：\",lang_input_vhspace:\"边 距：\",lang_input_title:\"描 述：\",lang_input_align:\"图片浮动方式：\",lang_imgLoading:\"　图片加载中……\",lang_start_upload:\"开始上传\",lock:{title:\"锁定宽高比例\"},searchType:{title:\"图片类型\",options:[\"新闻\",\"壁纸\",\"表情\",\"头像\"]},searchTxt:{value:\"请输入搜索关键词\"},searchBtn:{value:\"百度一下\"},searchReset:{value:\"清空搜索\"},noneAlign:{title:\"无浮动\"},leftAlign:{title:\"左浮动\"},rightAlign:{title:\"右浮动\"},centerAlign:{title:\"居中独占一行\"}},uploadSelectFile:\"点击选择图片\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",uploadNoPreview:\"不能预览\",updateStatusReady:\"选中_张图片，共_KB。\",updateStatusConfirm:\"已成功上传_张照片，_张照片上传失败\",updateStatusFinish:\"共_张（_KB），_张上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\",remoteLockError:\"宽高不正确,不能所定比例\",numError:\"请输入正确的长度或者宽度值！例如：123，400\",imageUrlError:\"不允许的图片格式或者图片域！\",imageLoadError:\"图片加载失败！请检查链接地址或网络状态！\",searchRemind:\"请输入搜索关键词\",searchLoading:\"图片加载中，请稍后……\",searchRetry:\" :( ，抱歉，没有找到图片！请重试一次！\"},attachment:{\"static\":{lang_tab_upload:\"上传附件\",lang_tab_online:\"在线附件\",lang_start_upload:\"开始上传\",lang_drop_remind:\"可以将文件拖到这里，单次最多可选100个文件\"},uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"已成功上传_个文件，_个文件上传失败\",updateStatusFinish:\"共_个（_KB），_个上传成功\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertvideo:{\"static\":{lang_tab_insertV:\"插入视频\",lang_tab_searchV:\"搜索视频\",lang_tab_uploadV:\"上传视频\",lang_video_url:\"视频网址\",lang_video_size:\"视频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"视频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的视频地址有误，请检查后再试！\",loading:\" &nbsp;视频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源视频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},insertaudio:{\"static\":{lang_tab_insertV:\"插入音频\",lang_tab_searchV:\"搜索音频\",lang_tab_uploadV:\"上传音频\",lang_video_url:\"音频网址\",lang_video_size:\"音频尺寸\",lang_videoW:\"宽度\",lang_videoH:\"高度\",lang_alignment:\"对齐方式\",videoSearchTxt:{value:\"请输入搜索关键字！\"},videoType:{options:[\"全部\",\"热门\",\"娱乐\",\"搞笑\",\"体育\",\"科技\",\"综艺\"]},videoSearchBtn:{value:\"百度一下\"},videoSearchReset:{value:\"清空结果\"},lang_input_fileStatus:\" 当前未上传文件\",startUpload:{style:\"background:url(upload.png) no-repeat;\"},lang_upload_size:\"音频尺寸\",lang_upload_width:\"宽度\",lang_upload_height:\"高度\",lang_upload_alignment:\"对齐方式\",lang_format_advice:\"建议使用mp4格式.\"},numError:\"请输入正确的数值，如123,400\",floatLeft:\"左浮动\",floatRight:\"右浮动\",\"default\":\"默认\",block:\"独占一行\",urlError:\"输入的音频地址有误，请检查后再试！\",loading:\" &nbsp;音频加载中，请等待……\",clickToSelect:\"点击选中\",goToSource:\"访问源音频\",noVideo:\" &nbsp; &nbsp;抱歉，找不到对应的音频，请重试！\",browseFiles:\"浏览文件\",uploadSuccess:\"上传成功!\",delSuccessFile:\"从成功队列中移除\",delFailSaveFile:\"移除保存失败文件\",statusPrompt:\" 个文件已上传！ \",flashVersionError:\"当前Flash版本过低，请更新FlashPlayer后重试！\",flashLoadingError:\"Flash加载失败!请检查路径或网络状态\",fileUploadReady:\"等待上传……\",delUploadQueue:\"从上传队列中移除\",limitPrompt1:\"单次不能选择超过\",limitPrompt2:\"个文件！请重新选择！\",delFailFile:\"移除失败文件\",fileSizeLimit:\"文件大小超出限制！\",emptyFile:\"空文件无法上传！\",fileTypeError:\"文件类型不允许！\",unknownError:\"未知错误！\",fileUploading:\"上传中，请等待……\",cancelUpload:\"取消上传\",netError:\"网络错误\",failUpload:\"上传失败!\",serverIOError:\"服务器IO错误！\",noAuthority:\"无权限！\",fileNumLimit:\"上传个数限制\",failCheck:\"验证失败，本次上传被跳过！\",fileCanceling:\"取消中，请等待……\",stopUploading:\"上传已停止……\",uploadSelectFile:\"点击选择文件\",uploadAddFile:\"继续添加\",uploadStart:\"开始上传\",uploadPause:\"暂停上传\",uploadContinue:\"继续上传\",uploadRetry:\"重试上传\",uploadDelete:\"删除\",uploadTurnLeft:\"向左旋转\",uploadTurnRight:\"向右旋转\",uploadPreview:\"预览中\",updateStatusReady:\"选中_个文件，共_KB。\",updateStatusConfirm:\"成功上传_个，_个失败\",updateStatusFinish:\"共_个(_KB)，_个成功上传\",updateStatusError:\"，_张上传失败。\",errorNotSupport:\"WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。\",errorLoadConfig:\"后端配置项没有正常加载，上传插件不能正常使用！\",errorExceedSize:\"文件大小超出\",errorFileType:\"文件格式不允许\",errorInterrupt:\"文件传输中断\",errorUploadRetry:\"上传失败，请重试\",errorHttp:\"http请求错误\",errorServerUpload:\"服务器返回出错\"},template:{\"static\":{lang_template_bkcolor:\"背景颜色\",lang_template_clear:\"保留原有内容\",lang_template_select:\"选择模板\"},blank:\"空白文档\",blog:\"博客文章\",resume:\"个人简历\",richText:\"图文混排\",sciPapers:\"科技论文\"},scrawl:{\"static\":{lang_input_previousStep:\"上一步\",lang_input_nextsStep:\"下一步\",lang_input_clear:\"清空\",lang_input_addPic:\"添加背景\",lang_input_ScalePic:\"缩放背景\",lang_input_removePic:\"删除背景\",J_imgTxt:{title:\"添加背景图片\"}},noScarwl:\"尚未作画，白纸一张~\",scrawlUpLoading:\"涂鸦上传中,别急哦~\",continueBtn:\"继续\",imageError:\"糟糕，图片读取失败了！\",backgroundUploading:\"背景图片上传中,别急哦~\"},anchor:{\"static\":{lang_input_anchorName:\"锚点名字：\"}},emotion:{\"static\":{lang_input_choice:\"精选\",lang_input_Tuzki:\"兔斯基\",lang_input_BOBO:\"BOBO\",lang_input_lvdouwa:\"绿豆蛙\",lang_input_babyCat:\"baby猫\",lang_input_bubble:\"泡泡\",lang_input_youa:\"有啊\"}},help:{\"static\":{lang_input_about:\"关于 UEditor Plus\",lang_input_shortcuts:\"快捷键\",lang_input_introduction:\"UEditor Plus 是基于百度UEditor二次开发的所见即所得富文本web编辑器，主要丰富也界面样式，注重用户体验等特点。基于Apache 2.0协议开源，允许自由使用和修改代码。\",lang_Txt_shortcuts:\"快捷键\",lang_Txt_func:\"功能\",lang_Txt_bold:\"给选中字设置为加粗\",lang_Txt_copy:\"复制选中内容\",lang_Txt_cut:\"剪切选中内容\",lang_Txt_Paste:\"粘贴\",lang_Txt_undo:\"重新执行上次操作\",lang_Txt_redo:\"撤销上一次操作\",lang_Txt_italic:\"给选中字设置为斜体\",lang_Txt_underline:\"给选中字加下划线\",lang_Txt_selectAll:\"全部选中\",lang_Txt_visualEnter:\"软回车\",lang_Txt_fullscreen:\"全屏\"}},insertframe:{\"static\":{lang_input_address:\"地址：\",lang_input_width:\"宽度：\",lang_input_height:\"高度：\",lang_input_isScroll:\"允许滚动条：\",lang_input_frameborder:\"显示框架边框：\",lang_input_alignMode:\"对齐方式：\",align:{title:\"对齐方式\",options:[\"默认\",\"左对齐\",\"右对齐\",\"居中\"]}},enterAddress:\"请输入地址!\"},link:{\"static\":{lang_input_text:\"文本内容：\",lang_input_url:\"链接地址：\",lang_input_title:\"标题：\",lang_input_target:\"是否在新窗口打开：\"},validLink:\"只支持选中一个链接时生效\",httpPrompt:\"您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀\"},searchreplace:{\"static\":{lang_tab_search:\"查找\",lang_tab_replace:\"替换\",lang_search1:\"查找\",lang_search2:\"查找\",lang_replace:\"替换\",lang_searchReg:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_searchReg1:\"支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”\",lang_case_sensitive1:\"区分大小写\",lang_case_sensitive2:\"区分大小写\",nextFindBtn:{value:\"下一个\"},preFindBtn:{value:\"上一个\"},nextReplaceBtn:{value:\"下一个\"},preReplaceBtn:{value:\"上一个\"},repalceBtn:{value:\"替换\"},repalceAllBtn:{value:\"全部替换\"}},getEnd:\"已经搜索到文章末尾！\",getStart:\"已经搜索到文章头部\",countMsg:\"总共替换了{#count}处！\"},spechars:{\"static\":{},tsfh:\"特殊字符\",lmsz:\"罗马字符\",szfh:\"数学字符\",rwfh:\"日文字符\",xlzm:\"希腊字母\",ewzm:\"俄文字符\",pyzm:\"拼音字母\",yyyb:\"英语音标\",zyzf:\"其他\"},edittable:{\"static\":{lang_tableStyle:\"表格样式\",lang_insertCaption:\"添加表格名称行\",lang_insertTitle:\"添加表格标题行\",lang_insertTitleCol:\"添加表格标题列\",lang_orderbycontent:\"使表格内容可排序\",lang_tableSize:\"自动调整表格尺寸\",lang_autoSizeContent:\"按表格文字自适应\",lang_autoSizePage:\"按页面宽度自适应\",lang_example:\"示例\",lang_borderStyle:\"表格边框\",lang_color:\"颜色:\"},captionName:\"表格名称\",titleName:\"标题\",cellsName:\"内容\",errorMsg:\"有合并单元格，不可排序\"},edittip:{\"static\":{lang_delRow:\"删除整行\",lang_delCol:\"删除整列\"}},edittd:{\"static\":{lang_tdBkColor:\"背景颜色:\"}},formula:{\"static\":{}},wordimage:{\"static\":{lang_resave:\"转存步骤\",uploadBtn:{src:\"upload.png\",alt:\"上传\"},clipboard:{style:\"background: url(copy.png) -153px -1px no-repeat;\"},lang_step:\"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"},fileType:\"图片\",flashError:\"FLASH初始化失败，请检查FLASH插件是否正确安装！\",netError:\"网络连接错误，请重试！\",copySuccess:\"图片地址已经复制！\",flashI18n:{}}};"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/plugins/demo/demo.js",
    "content": "/*! UEditorPlus v2.0.0*/\n"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/themes/default/css/ueditor.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--edui-color-active-bg:rgba(200,200,200,.3);--edui-color-border:#EEE;--edui-bg-toolbar:#FFF;--edui-color-muted:#CCC}@font-face{font-family:edui-iconfont;src:url(\"data:font/woff2;base64,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\") format('woff2'),url(\"data:font/woff;base64,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\") format('woff'),url(\"data:font/ttf;base64,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b2plY3QuaHR0cDovL2ZvbnRlbGxvLmNvbQBDAHIAZQBhAHQAZQBkACAAYgB5ACAAaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAUgBlAGcAdQBsAGEAcgBlAGQAdQBpAC0AaQBjAG8AbgBmAG8AbgB0AGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAACAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGMBAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbARwBHQEeAR8BIAEhASIBIwEkASUBJgEnASgBKQEqASsBLAEtAS4BLwEwATEBMgEzATQBNQE2ATcBOAE5AToBOwE8AT0BPgE/AUABQQFCAUMBRAFFAUYBRwFIAUkBSgFLAUwBTQFOAU8BUAFRAVIBUwFUAVUBVgFXAVgBWQFaAVsBXAFdAV4BXwFgAWEBYgFjAWQADmNvbnRlbnQtaW1wb3J0BXNvdW5kBXJpZ2h0D2ljX2ltYWdlX3VwbG9hZAVjaGVjawZpZnJhbWUQQmFja2dyb3VuZEVmZmVjdANsdHIDcnRsC2ZpbmRyZXBsYWNlCWljcHJldmlldwVyaXFpMgtldXJvLXN5bWJvbAVtdXNpYwRoZWxwCWhhbmRfZHJhdwVwcmludAR0aW1lBWJhaWR1C0dvb2dsZS1NYXBzCmltYWdlLW5vbmUMaW1hZ2UtY2VudGVyCmltYWdlLWxlZnQLaW1hZ2UtcmlnaHQJY2xlYXItZG9jCnBhZ2UtYnJlYWsGYXV0aG9yCndvcmQtaW1hZ2ULdG91cHBlcmNhc2ULdG9sb3dlcmNhc2UKaG9yaXpvbnRhbA9tZXJnZS1kb3duLWNlbGwLbWVyZ2UtY2VsbHMQbWVyZ2UtcmlnaHQtY2VsbA1zcGxpdC10by1yb3dzDXNwbGl0LXRvLWNvbHMOc3BsaXQtdG8tY2VsbHMOaW5zZXJ0cm93YWJvdmUaMjRnbC1wYXJhZ3JhcGhNYXJnaW5Cb3R0b20XMjRnbC1wYXJhZ3JhcGhNYXJnaW5Ub3ANdW5vcmRlcmVkbGlzdAxsaXN0LW9yZGVyZWQUc3BsaXQtY2VsbHMtdmVydGljYWwWc3BsaXQtY2VsbHMtaG9yaXpvbnRhbAphdHRhY2htZW50CXN1YnNjcmlwdAlzZWxlY3RhbGwLc3VwZXJzY3JpcHQDbWFwCWJnLWNvbG9ycw1hZGRfY29sX2FmdGVyDmFkZF9jb2xfYmVmb3JlDWFkZF9yb3dfYWZ0ZXIOYWRkX3Jvd19iZWZvcmUKZGVsZXRlX2NvbA1jb21iaW5lX2NlbGxzAm9sCmRlbGV0ZV9yb3cMZGVsZXRlX3RhYmxlAnVsBHJlZG8FdGFibGUEdW5kbwVwYXN0ZQZ1cGxvYWQFYnJ1c2gKdGV4dF9xdW90ZRFpbnNlcnQtcm93LWJvdHRvbRFmdWxsc2NyZWVuLWV4cGFuZA5pbnNlcnQtcm93LXRvcAh0ZW1wbGF0ZRJmb3JtYXQtaW1hZ2UtcmlnaHQRZm9ybWF0LWltYWdlLWxlZnQTZm9ybWF0LWltYWdlLWNlbnRlcgtsaW5lLWhlaWdodBdBZnRlcmNsYXNzVGV4dC1PdXRsaW5lZAVzbWlsZQ1hbGlnbi1qdXN0aWZ5B2Zvcm11bGEKYW5nbGUtZG93bgVjbG9zZQptYWdpYy13YW5kBmVyYXNlcgRodG1sBnVubGluawZpbmRlbnQLYWxpZ24tcmlnaHQMYWxpZ24tY2VudGVyCmFsaWduLWxlZnQLZm9udC1jb2xvcnMEcGxheQl1bmRlcmxpbmUFaW1hZ2UGaXRhbGljBGxpbmsGc3RyaWtlBGNvZGUEYm9sZAAAAAAA\") format('truetype')}.edui-default{accent-color:#333}.edui-default .edui-box{border:0;padding:0;margin:0;overflow:hidden;line-height:30px}.edui-default a.edui-box{display:block;text-decoration:none;color:#000}.edui-default a.edui-box:hover{text-decoration:none}.edui-default a.edui-box:active{text-decoration:none}.edui-default table.edui-box{border-collapse:collapse}.edui-default ul.edui-box{list-style-type:none}div.edui-box{position:relative;display:inline-block;vertical-align:middle}.edui-default .edui-clearfix{zoom:1}.edui-default .edui-clearfix:after{content:'\\20';display:block;clear:both}* html div.edui-box{display:inline!important}:first-child+html div.edui-box{display:inline!important}.edui-default .edui-button-body,.edui-splitbutton-body,.edui-menubutton-body,.edui-combox-body{position:relative}.edui-default .edui-popup{position:absolute;-webkit-user-select:none;-moz-user-select:none}.edui-default .edui-popup .edui-shadow{position:absolute;z-index:-1}.edui-default .edui-popup .edui-bordereraser{position:absolute;overflow:hidden}.edui-default .edui-tablepicker .edui-canvas{position:relative}.edui-default .edui-tablepicker .edui-canvas .edui-overlay{position:absolute}.edui-default .edui-dialog-modalmask,.edui-dialog-dragmask{position:absolute;left:0;top:0;width:100%;height:100%}.edui-default .edui-toolbar{position:relative}.edui-default .edui-label{cursor:pointer}.edui-default span.edui-clickable{color:#666;cursor:pointer;text-decoration:none}.edui-default span.edui-clickable:hover{color:#333}.edui-default span.edui-unclickable{color:gray;cursor:default}.edui-default span.edui-popup-action-item{margin-right:5px}.edui-default span.edui-popup-action-item:last-child{margin-right:0}.edui-default .edui-toolbar{cursor:default;-webkit-user-select:none;-moz-user-select:none;padding:1px;overflow:hidden;zoom:1;width:auto;height:auto}.edui-default .edui-toolbar .edui-button,.edui-default .edui-toolbar .edui-splitbutton,.edui-default .edui-toolbar .edui-menubutton,.edui-default .edui-toolbar .edui-combox{margin:1px}.edui-default .edui-editor{border:1px solid var(--edui-color-border);background-color:#fff;position:relative;overflow:visible;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.edui-editor div{width:auto;height:auto}.edui-default .edui-editor-toolbarbox{position:relative;zoom:1;border-top-left-radius:2px;border-top-right-radius:2px}.edui-default .edui-editor-toolbarboxouter{border-bottom:1px solid var(--edui-color-border);background-color:var(--edui-bg-toolbar);-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0}.edui-default .edui-editor-toolbarboxinner{padding:2px}.edui-default .edui-editor-iframeholder{position:relative}.edui-default .edui-editor-bottomContainer{overflow:hidden}.edui-default .edui-editor-bottomContainer table{width:100%;height:0;overflow:hidden;border-spacing:0}.edui-default .edui-editor-bottomContainer td{white-space:nowrap;border-top:1px solid var(--edui-color-border);line-height:20px;font-size:12px;font-family:Arial,Helvetica,Tahoma,Verdana,Sans-Serif;padding:0 5px;color:var(--edui-color-muted)}.edui-default .edui-editor-wordcount{text-align:right;margin-right:5px;color:#aaa}.edui-default .edui-editor-scale{width:12px}.edui-default .edui-editor-scale .edui-editor-icon{float:right;width:100%;height:12px;margin-top:10px;background:url(../images/scale.png) no-repeat;cursor:se-resize}.edui-default .edui-editor-breadcrumb{margin:2px 0 0 3px;color:var(--edui-color-muted)}.edui-default .edui-editor-breadcrumb span{cursor:pointer;color:var(--edui-color-muted);line-height:16px;display:inline-block}.edui-default .edui-toolbar .edui-for-fullscreen{float:right}.edui-default .edui-bubble .edui-popup-content{font-size:13px;box-shadow:0 0 10px #0001f;transition:.25s;color:#666;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-bubble .edui-shadow{}.edui-default .edui-editor-toolbarmsg{background-color:#FFF6D9;border-bottom:1px solid #ccc;position:absolute;bottom:-25px;left:0;z-index:1009;width:99.9%}.edui-default .edui-editor-toolbarmsg-upload{font-size:14px;color:#00f;width:100px;height:16px;line-height:16px;cursor:pointer;position:absolute;top:5px;left:350px}.edui-default .edui-editor-toolbarmsg-label{font-size:12px;line-height:16px;padding:4px}.edui-default .edui-editor-toolbarmsg-close{float:right;width:20px;height:16px;line-height:16px;cursor:pointer;color:red}.edui-default .edui-list .edui-bordereraser{display:none}.edui-default .edui-listitem{padding:1px;white-space:nowrap;cursor:pointer}.edui-default .edui-list .edui-state-hover{position:relative;background-color:#EEE;border:1px solid #EEE;padding:0;border-radius:3px}.edui-default .edui-for-fontfamily .edui-listitem-label{min-width:130px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-insertcode .edui-listitem-label{min-width:120px;_width:120px;font-size:12px;height:22px;line-height:22px;padding-left:5px}.edui-default .edui-for-underline .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;font-size:12px}.edui-default .edui-for-fontsize .edui-listitem-label{min-width:120px;_width:120px;padding:3px 5px;cursor:pointer}.edui-default .edui-for-paragraph .edui-listitem-label{min-width:200px;_width:200px;padding:2px 5px}.edui-default .edui-for-rowspacingtop .edui-listitem-label,.edui-default .edui-for-rowspacingbottom .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-lineheight .edui-listitem-label{min-width:53px;_width:53px;padding:2px 5px}.edui-default .edui-for-customstyle .edui-listitem-label{min-width:200px;_width:200px;width:200px!important;padding:2px 5px}.edui-default .edui-menu{z-index:3000}.edui-default .edui-menu .edui-popup-content{padding:3px}.edui-default .edui-menu-body{_width:150px;min-width:170px;background:url(../images/sparator_v.png) repeat-y 25px}.edui-default .edui-menuitem-body{}.edui-default .edui-menuitem{height:24px;line-height:22px;cursor:default;vertical-align:top}.edui-default .edui-menuitem .edui-icon{width:20px!important;height:20px!important;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-menuitem .edui-menuitem-body .edui-icon:before{display:none}.edui-default .edui-contextmenu .edui-popup-content .edui-menuitem-body .edui-icon:before{display:inline-block}.edui-default .edui-menuitem .edui-label{font-size:12px;line-height:20px;height:20px;padding-left:10px}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon{line-height:20px;text-align:center}.edui-default .edui-state-checked .edui-menuitem-body .edui-icon:before{content:\"\\e7fc\";font-size:10px;display:inline-block}.edui-default .edui-state-disabled .edui-menuitem-label{color:gray}.edui-default .edui-toolbar .edui-combox-body .edui-button-body{width:60px;font-size:12px;height:30px;line-height:30px;padding-left:5px;white-space:nowrap;margin:0 3px 0 0;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-combox-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px}.edui-default .edui-toolbar .edui-combox .edui-combox-body{border:1px solid var(--edui-color-border);background-color:#fff;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-combox .edui-combox-body>div{vertical-align:top}.edui-default .edui-toolbar .edui-combox-body .edui-splitborder{display:none}.edui-default .edui-toolbar .edui-combox-body .edui-arrow{border-left:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body{}.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow{}.edui-default .edui-toolbar .edui-state-checked .edui-combox-body{background-color:#FFE69F;border:1px solid #DCAC6C}.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow{border-left:1px solid #DCAC6C}.edui-toolbar .edui-state-disabled .edui-combox-body{background-color:#F0F0EE;opacity:.3}.edui-toolbar .edui-state-opened .edui-combox-body{background-color:#fff;border:1px solid gray}.edui-default .edui-toolbar .edui-button .edui-icon,.edui-default .edui-toolbar .edui-menubutton .edui-icon,.edui-default .edui-toolbar .edui-splitbutton .edui-icon{height:30px!important;width:30px!important;background-position:center;background-repeat:no-repeat;font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;text-align:center;cursor:pointer}.edui-default .edui-toolbar .edui-button .edui-button-wrap{padding:1px;position:relative;border-radius:3px}.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid #EEE;border-radius:2px;-webkit-border-radius:2px;-moz-border-radius:2px}.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap{background-color:#F0F0EE;padding:0;border:1px solid var(--edui-color-border)}.edui-default .edui-toolbar .edui-state-disabled .edui-label{color:#ccc}.edui-default .edui-toolbar .edui-state-disabled .edui-icon{opacity:.3;filter:alpha(opacity=30)}.edui-default .edui-toolbar-button-custom{display:inline-block!important;line-height:30px;vertical-align:middle;padding:0 10px;border-radius:3px;margin:0 5px}.edui-default .edui-toolbar-button-custom:hover{background:#EEE}.edui-default .edui-for-undo .edui-icon:before{content:\"\\e60f\"}.edui-default .edui-for-redo .edui-icon:before{content:\"\\e60c\"}.edui-default .edui-for-bold .edui-icon:before{content:\"\\e628\"}.edui-default .edui-for-italic .edui-icon:before{content:\"\\e62a\"}.edui-default .edui-for-fontborder .edui-icon:before{content:'\\e62d'}.edui-default .edui-for-underline .edui-icon:before{content:\"\\e63e\"}.edui-default .edui-for-strikethrough .edui-icon:before{content:\"\\e64a\"}.edui-default .edui-for-subscript .edui-icon:before{content:\"\\ece9\"}.edui-default .edui-for-superscript .edui-icon:before{content:\"\\e83e\"}.edui-default .edui-for-blockquote .edui-icon:before{content:\"\\e6d8\"}.edui-default .edui-for-forecolor .edui-icon:before{content:\"\\e7f8\"}.edui-default .edui-for-backcolor .edui-icon:before{content:\"\\e71a\"}.edui-default .edui-for-inserttable .edui-icon:before{content:\"\\e60d\"}.edui-default .edui-for-autotypeset .edui-icon:before{content:\"\\e662\"}.edui-default .edui-for-justifyleft .edui-icon:before{content:\"\\e7f7\"}.edui-default .edui-for-justifycenter .edui-icon:before{content:\"\\e7f6\"}.edui-default .edui-for-justifyright .edui-icon:before{content:\"\\e7f5\"}.edui-default .edui-for-justifyjustify .edui-icon:before{content:\"\\e87c\"}.edui-default .edui-for-insertorderedlist .edui-icon:before{content:\"\\e737\"}.edui-default .edui-for-insertunorderedlist .edui-icon:before{content:\"\\e7f4\"}.edui-default .edui-for-lineheight .edui-icon:before{content:\"\\e638\"}.edui-default .edui-for-rowspacingbottom .edui-icon:before{content:'\\eb09'}.edui-default .edui-for-rowspacingtop .edui-icon:before{content:'\\eb0a'}.edui-default .edui-for-horizontal .edui-icon:before{content:\"\\e617\"}.edui-default .edui-for-link .edui-icon:before{content:\"\\e648\"}.edui-default .edui-for-code .edui-icon:before{background-position:-440px -40px}.edui-default .edui-for-insertimage .edui-icon:before{content:\"\\e605\"}.edui-default .edui-for-insertframe .edui-icon:before{content:\"\\e6c0\"}.edui-default .edui-for-emoticon .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-spechars .edui-icon:before{content:\"\\e891\"}.edui-default .edui-for-help .edui-icon:before{content:\"\\e752\"}.edui-default .edui-for-print .edui-icon:before{content:\"\\e67a\"}.edui-default .edui-for-preview .edui-icon:before{content:\"\\e644\"}.edui-default .edui-for-selectall .edui-icon:before{content:'\\e62f'}.edui-default .edui-for-searchreplace .edui-icon:before{content:\"\\eb6c\"}.edui-default .edui-for-contentimport .edui-icon:before{content:\"\\e6f1\"}.edui-default .edui-for-map .edui-icon:before{content:\"\\e649\"}.edui-default .edui-for-insertvideo .edui-icon:before{content:\"\\e636\"}.edui-default .edui-for-insertaudio .edui-icon:before{content:\"\\e77b\"}.edui-default .edui-for-time .edui-icon:before{content:\"\\e680\"}.edui-default .edui-for-date .edui-icon:before{content:\"\\e697\"}.edui-default .edui-for-cut .edui-icon:before{background-position:-680px 0}.edui-default .edui-for-copy .edui-icon:before{background-position:-700px 0}.edui-default .edui-for-paste .edui-icon:before{background-position:-560px 0}.edui-default .edui-for-formatmatch .edui-icon:before{content:\"\\e637\"}.edui-default .edui-for-pasteplain .edui-icon:before{content:'\\edfb'}.edui-default .edui-for-directionalityltr .edui-icon:before{content:\"\\e623\"}.edui-default .edui-for-directionalityrtl .edui-icon:before{content:\"\\e7bc\"}.edui-default .edui-for-source .edui-icon:before{content:\"\\e608\"}.edui-default .edui-for-removeformat .edui-icon:before{content:\"\\e782\"}.edui-default .edui-for-unlink .edui-icon:before{content:\"\\e92b\"}.edui-default .edui-for-touppercase .edui-icon:before{content:\"\\e619\"}.edui-default .edui-for-tolowercase .edui-icon:before{content:\"\\e61a\"}.edui-default .edui-for-insertrow .edui-icon:before{content:\"\\e603\"}.edui-default .edui-for-insertrownext .edui-icon:before{content:\"\\e602\"}.edui-default .edui-for-insertcol .edui-icon:before{content:\"\\e601\"}.edui-default .edui-for-insertcolnext .edui-icon:before{content:\"\\e600\"}.edui-default .edui-for-mergeright .edui-icon:before{content:\"\\e615\"}.edui-default .edui-for-mergedown .edui-icon:before{content:\"\\e613\"}.edui-default .edui-for-splittorows .edui-icon:before{content:\"\\e610\"}.edui-default .edui-for-splittocols .edui-icon:before{content:\"\\e611\"}.edui-default .edui-for-insertparagraphbeforetable .edui-icon:before{content:'\\e901'}.edui-default .edui-for-deleterow .edui-icon:before{content:\"\\e609\"}.edui-default .edui-for-deletecol .edui-icon:before{content:\"\\e604\"}.edui-default .edui-for-splittocells .edui-icon:before{content:\"\\e612\"}.edui-default .edui-for-mergecells .edui-icon:before{content:\"\\e606\"}.edui-default .edui-for-deletetable .edui-icon:before{content:\"\\e60a\"}.edui-default .edui-for-cleardoc .edui-icon:before{content:\"\\e61e\"}.edui-default .edui-for-fullscreen .edui-icon:before{content:\"\\e675\"}.edui-default .edui-for-anchor .edui-icon:before{content:\"\\e61b\"}.edui-default .edui-for-pagebreak .edui-icon:before{content:\"\\e61d\"}.edui-default .edui-for-imagenone .edui-icon:before{content:\"\\e61f\"}.edui-default .edui-for-imageleft .edui-icon:before{content:\"\\e621\"}.edui-default .edui-for-wordimage .edui-icon:before{content:\"\\e618\"}.edui-default .edui-for-imageright .edui-icon:before{content:\"\\e622\"}.edui-default .edui-for-imagecenter .edui-icon:before{content:\"\\e620\"}.edui-default .edui-for-indent .edui-icon:before{content:\"\\e7f3\"}.edui-default .edui-for-outdent .edui-icon:before{background-position:-540px 0}.edui-default .edui-for-table .edui-icon:before{background-position:-580px -20px}.edui-default .edui-for-edittable .edui-icon:before{background-position:-420px -40px}.edui-default .edui-for-template .edui-icon:before{content:\"\\e6ad\"}.edui-default .edui-for-delete .edui-icon:before{background-position:-360px -40px}.edui-default .edui-for-attachment .edui-icon:before{content:\"\\e704\"}.edui-default .edui-for-edittd .edui-icon:before{background-position:-700px -40px}.edui-default .edui-for-scrawl .edui-icon:before{content:\"\\e70b\"}.edui-default .edui-for-background .edui-icon:before{content:\"\\e624\"}.edui-default .edui-for-formula .edui-icon:before{content:\"\\e616\"}.edui-default .edui-for-aligntd .edui-icon:before{background-position:-236px -76px}.edui-default .edui-for-insertparagraphtrue .edui-icon:before{background-position:-625px -76px}.edui-default .edui-for-insertparagraph .edui-icon:before{background-position:-602px -76px}.edui-default .edui-for-insertcaption .edui-icon:before{background-position:-336px -76px}.edui-default .edui-for-deletecaption .edui-icon:before{background-position:-362px -76px}.edui-default .edui-for-inserttitle .edui-icon:before{background-position:-286px -76px}.edui-default .edui-for-deletetitle .edui-icon:before{background-position:-311px -76px}.edui-default .edui-for-aligntable .edui-icon:before{background-position:-440px 0}.edui-default .edui-for-tablealignment-left .edui-icon:before{background-position:-460px 0}.edui-default .edui-for-tablealignment-center .edui-icon:before{background-position:-420px 0}.edui-default .edui-for-tablealignment-right .edui-icon:before{background-position:-480px 0}.edui-default .edui-for-inserttitlecol .edui-icon:before{background-position:-673px -76px}.edui-default .edui-for-deletetitlecol .edui-icon:before{background-position:-698px -76px}.edui-default .edui-for-simpleupload .edui-icon:before{content:\"\\edfc\"}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow{height:30px;width:13px;cursor:pointer}.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow:before,.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow:before{content:\"\\e9f0\";font-family:edui-iconfont;font-size:8px;vertical-align:middle}.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body{padding:1px;border-radius:3px;display:flex}.edui-default .edui-toolbar .edui-splitborder{width:0;height:30px}.edui-default .edui-toolbar .edui-state-hover .edui-splitborder{border-left:0 solid #dcac6c}.edui-default .edui-toolbar .edui-state-active .edui-splitborder{width:0}.edui-default .edui-toolbar .edui-state-opened .edui-splitborder{border:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body{background-color:#EEE;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-state-disabled .edui-arrow{opacity:.3;_filter:alpha(opacity=30)}.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body{background-color:#fff;border:1px solid #EEE;padding:0}.edui-default .edui-for-insertorderedlist .edui-bordereraser,.edui-default .edui-for-lineheight .edui-bordereraser,.edui-default .edui-for-rowspacingtop .edui-bordereraser,.edui-default .edui-for-rowspacingbottom .edui-bordereraser,.edui-default .edui-for-insertunorderedlist .edui-bordereraser{background-color:#fff}.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon{background-image:none}.edui-default .edui-popup{z-index:3000;background-color:#fff;width:auto;height:auto;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;margin-top:1px}.edui-default .edui-popup .edui-shadow{left:0;top:0;width:100%;height:100%}.edui-default .edui-popup-content{font-size:13px;box-shadow:0 0 10px rgba(0,0,0,.2);transition:.25s;color:#333;background-color:#FFF;padding:10px;border-radius:5px}.edui-default .edui-popup .edui-bordereraser{background-color:transparent;height:3px}.edui-default .edui-menu .edui-bordereraser{height:3px}.edui-default .edui-anchor-topleft .edui-bordereraser{left:1px;top:-2px}.edui-default .edui-anchor-topright .edui-bordereraser{right:1px;top:-2px}.edui-default .edui-anchor-bottomleft .edui-bordereraser{left:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-default .edui-anchor-bottomright .edui-bordereraser{right:0;bottom:-6px;height:7px;border-left:1px solid gray;border-right:1px solid gray}.edui-popup div{width:auto;height:auto}.edui-default .edui-editor-messageholder{display:block;width:150px;height:auto;border:0;margin:0;padding:0;position:absolute;top:28px;right:3px}.edui-default .edui-message{min-height:10px;text-shadow:0 1px 0 rgba(255,255,255,.5);padding:0;margin-bottom:3px;position:relative}.edui-default .edui-message-body{border-radius:3px;padding:8px 15px 8px 8px;color:#c09853;background-color:#fcf8e3;border:1px solid #fbeed5}.edui-default .edui-message-type-info{color:#3a87ad;background-color:#d9edf7;border-color:#bce8f1}.edui-default .edui-message-type-success{color:#468847;background-color:#dff0d8;border-color:#d6e9c6}.edui-default .edui-message-type-danger,.edui-default .edui-message-type-error{color:#b94a48;background-color:#f2dede;border-color:#eed3d7}.edui-default .edui-message .edui-message-closer{display:block;width:16px;height:16px;line-height:16px;position:absolute;top:0;right:0;padding:0;cursor:pointer;background:transparent;border:0;float:right;font-size:20px;font-weight:700;color:#999;text-shadow:0 1px 0 #fff;font-family:\"Helvetica Neue\",Helvetica,Arial,sans-serif}.edui-default .edui-message .edui-message-content{font-size:10pt;word-wrap:break-word;word-break:normal}.edui-default .edui-dialog{z-index:2000;position:absolute}.edui-dialog div{width:auto}.edui-default .edui-dialog-wrap{margin-right:6px;margin-bottom:6px}.edui-default .edui-dialog-fullscreen-flag{margin-right:0;margin-bottom:0}.edui-default .edui-dialog-body{position:relative}.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body{padding:0}.edui-default .edui-dialog-shadow{position:absolute;z-index:-1;left:0;top:0;width:100%;height:100%;background-color:#fff;*border-right-width:2px;*border-bottom-width:2px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.edui-default .edui-dialog-foot{background-color:#fff;border-radius:0 0 5px 5px;height:40px}.edui-default .edui-dialog-titlebar{height:30px;background:#FFF;position:relative;cursor:move;border-radius:5px 5px 0 0}.edui-default .edui-dialog-caption{font-weight:700;font-size:14px;line-height:30px;padding-left:5px}.edui-default .edui-dialog-draghandle{height:30px;padding:5px}.edui-default .edui-dialog-closebutton{position:absolute!important;right:10px;top:10px}.edui-default .edui-dialog-closebutton .edui-button-body{height:20px;width:20px;cursor:pointer}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon{width:20px;height:20px;font-family:edui-iconfont;line-height:20px;font-size:20px;text-align:center;color:#999;vertical-align:top}.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon:before{content:\"\\e6a7\"}.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body .edui-icon{color:#333}.edui-default .edui-dialog-buttons{position:absolute;right:0}.edui-default .edui-dialog-buttons .edui-button{margin-right:10px}.edui-default .edui-dialog-buttons .edui-button .edui-button-body .edui-icon{display:none!important}.edui-default .edui-dialog-buttons .edui-button .edui-button-body{height:30px;font-size:12px;line-height:28px;cursor:pointer;border-radius:4px;text-align:center;background-color:#F8F8F8;border:1px solid #EEE;padding:0 15px}.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body{}.edui-default .edui-dialog iframe{border:0;padding:0;margin:0;vertical-align:top}.edui-default .edui-dialog-modalmask{opacity:.3;filter:alpha(opacity=30);background-color:#ccc;position:absolute}.edui-default .edui-dialog-dragmask{position:absolute;background-color:transparent;cursor:move}.edui-default .edui-dialog-content{position:relative}.edui-default .dialogcontmask{cursor:move;visibility:hidden;display:block;position:absolute;width:100%;height:100%;opacity:0;filter:alpha(opacity=0)}.edui-default .edui-for-link .edui-dialog-content{width:420px;height:200px;overflow:hidden}.edui-default .edui-for-background .edui-dialog-content{width:440px;height:280px;overflow:hidden}.edui-default .edui-for-template .edui-dialog-content{width:630px;height:390px;overflow:hidden}.edui-default .edui-for-scrawl .edui-dialog-content{width:515px;*width:506px;height:360px}.edui-default .edui-for-spechars .edui-dialog-content{width:620px;height:500px;*width:630px;*height:570px}.edui-default .edui-for-insertimage .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-insertframe .edui-dialog-content{width:350px;height:230px;overflow:hidden}.edui-default .edui-for-wordimage .edui-dialog-content{width:620px;height:380px;overflow:hidden}.edui-default .edui-for-formula .edui-dialog-content{width:800px;height:400px;overflow:hidden}.edui-default .edui-for-attachment .edui-dialog-content{width:650px;height:400px;overflow:hidden}.edui-default .edui-for-map .edui-dialog-content{width:550px;height:400px}.edui-default .edui-for-insertvideo .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-insertaudio .edui-dialog-content{width:590px;height:420px}.edui-default .edui-for-anchor .edui-dialog-content{width:320px;height:60px;overflow:hidden}.edui-default .edui-for-searchreplace .edui-dialog-content{width:400px;height:220px}.edui-default .edui-for-contentimport .edui-dialog-content{width:620px;height:400px}.edui-default .edui-for-help .edui-dialog-content{width:400px;height:420px}.edui-default .edui-for-edittable .edui-dialog-content{width:540px;_width:590px;height:335px}.edui-default .edui-for-edittip .edui-dialog-content{width:225px;height:60px}.edui-default .edui-for-edittd .edui-dialog-content{width:240px;height:50px}.edui-default .edui-for-paragraph .edui-listitem-label{font-family:Tahoma,Verdana,Arial,Helvetica}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p{font-size:22px;line-height:27px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1{font-weight:bolder;font-size:32px;line-height:36px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2{font-weight:bolder;font-size:27px;line-height:29px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3{font-weight:bolder;font-size:19px;line-height:23px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4{font-weight:bolder;font-size:16px;line-height:19px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5{font-weight:bolder;font-size:13px;line-height:16px}.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6{font-weight:bolder;font-size:12px;line-height:14px}.edui-default .edui-for-inserttable .edui-splitborder{display:none}.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-tablepicker .edui-infoarea{height:14px;line-height:14px;font-size:12px;width:220px;margin-bottom:3px;clear:both}.edui-default .edui-tablepicker .edui-infoarea .edui-label{float:left}.edui-default .edui-dialog-buttons .edui-label{line-height:30px}.edui-default .edui-tablepicker .edui-infoarea .edui-clickable{float:right}.edui-default .edui-tablepicker .edui-pickarea{background:url(../images/unhighlighted.gif) repeat;height:220px;width:220px}.edui-default .edui-tablepicker .edui-pickarea .edui-overlay{background:url(../images/highlighted.gif) repeat}.edui-default .edui-colorpicker-topbar{height:27px;width:200px}.edui-default .edui-colorpicker-preview{height:20px;border:1px inset #000;margin-left:1px;width:128px;float:left;border-radius:3px;position:relative}.edui-default .edui-colorpicker-preview input{padding:0;left:0;border:0;position:absolute;top:0;width:100%;height:100%;border-radius:3px;opacity:0;cursor:pointer}.edui-default .edui-colorpicker-nocolor{float:right;margin-right:1px;font-size:12px;line-height:20px;height:20px;border:1px solid #333;padding:0 5px;cursor:pointer;border-radius:3px;box-sizing:content-box}.edui-default .edui-colorpicker-tablefirstrow{height:30px}.edui-default .edui-colorpicker-colorcell{width:14px;height:14px;display:block;margin:0;cursor:pointer;border-radius:2px}.edui-default .edui-colorpicker-colorcell:hover{width:14px;height:14px;margin:0}.edui-default .edui-colorpicker-advbtn{display:block;text-align:center;cursor:pointer;height:20px}.arrow_down{background:#fff url(../images/arrow_down.png) no-repeat center}.arrow_up{background:#fff url(../images/arrow_up.png) no-repeat center}.edui-colorpicker-adv{position:relative;overflow:hidden;height:180px;display:none}.edui-colorpicker-plant,.edui-colorpicker-hue{border:solid 1px #666}.edui-colorpicker-pad{width:150px;height:150px;left:14px;top:13px;position:absolute;background:red;overflow:hidden;cursor:crosshair}.edui-colorpicker-cover{position:absolute;top:0;left:0;width:150px;height:150px;background:url(../images/tangram-colorpicker.png) -160px -200px}.edui-colorpicker-padDot{position:absolute;top:0;left:0;width:11px;height:11px;overflow:hidden;background:url(../images/tangram-colorpicker.png) 0 -200px repeat-x;z-index:1000}.edui-colorpicker-sliderMain{position:absolute;left:171px;top:13px;width:19px;height:152px;background:url(../images/tangram-colorpicker.png) -179px -12px no-repeat}.edui-colorpicker-slider{width:100%;height:100%;cursor:pointer}.edui-colorpicker-thumb{position:absolute;top:0;cursor:pointer;height:3px;left:-1px;right:-1px;border:1px solid #000;background:#fff;opacity:.8}.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body{font-size:12px;margin-bottom:3px;clear:both}.edui-default .edui-autotypesetpicker-body table{border-collapse:separate;border-spacing:2px}.edui-default .edui-autotypesetpicker-body td{font-size:12px;word-wrap:break-word}.edui-default .edui-autotypesetpicker-body td input{margin:3px 3px 3px 4px;*margin:1px 0 0}.edui-default .edui-autotypesetpicker-body td button{border:0;padding:5px 10px;font-size:13px;line-height:1.5;border-radius:4rem;-webkit-appearance:none;cursor:pointer;margin-bottom:5px;background-color:#EEE}.edui-default .edui-cellalignpicker .edui-cellalignpicker-body{width:70px;font-size:12px;cursor:default}.edui-default .edui-cellalignpicker-body table{border-collapse:separate;border-spacing:0}.edui-default .edui-cellalignpicker-body td{padding:1px}.edui-default .edui-cellalignpicker-body .edui-icon{height:20px;width:20px;padding:1px;background-image:url(../images/table-cell-align.png)}.edui-default .edui-cellalignpicker-body .edui-left{background-position:0 0}.edui-default .edui-cellalignpicker-body .edui-center{background-position:-25px 0}.edui-default .edui-cellalignpicker-body .edui-right{background-position:-51px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left{background-position:-73px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center{background-position:-98px 0}.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right{background-position:-124px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left{background-position:-146px 0;background-color:#f1f4f5}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center{background-position:-245px 0}.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right{background-position:-271px 0}.edui-default .edui-toolbar .edui-separator{width:1px;height:20px;margin:5px;background:var(--edui-color-border)}.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump{position:absolute;overflow:hidden;bottom:1px;left:5px;width:20px;height:4px}.edui-default .edui-for-emotion .edui-icon:before{content:\"\\e60e\"}.edui-default .edui-for-emotion .edui-popup-content iframe{width:514px;height:380px;overflow:hidden}.edui-default .edui-for-emotion .edui-popup-content{position:relative;z-index:555}.edui-default .edui-for-emotion .edui-splitborder{display:none}.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow{width:0}.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder{border-left:1px solid transparent}.edui-default .edui-hassubmenu .edui-arrow{height:20px;width:20px;float:right;font-family:edui-iconfont;font-size:12px;line-height:20px;text-align:center}.edui-default .edui-hassubmenu .edui-arrow:before{content:\"\\e665\"}.edui-default .edui-menu-body .edui-menuitem{padding:1px}.edui-default .edui-menuseparator{margin:2px 0;height:1px;overflow:hidden}.edui-default .edui-menuseparator-inner{border-bottom:1px solid #e2e3e3;margin-left:29px;margin-right:1px}.edui-default .edui-menu-body .edui-state-hover{padding:0!important;background-color:var(--edui-color-active-bg);border-radius:3px;border:1px solid var(--edui-color-active-bg)}.edui-default .edui-shortcutmenu{padding:2px;white-space:nowrap;height:auto;background-color:#fff;border-radius:5px;box-shadow:0 0 10px rgba(0,0,0,.2)}.edui-default .edui-wordpastepop .edui-popup-content{border:0;padding:0;width:54px;height:21px}.edui-default .edui-pasteicon{width:100%;height:100%;background-image:url(../images/wordpaste.png);background-position:0 0}.edui-default .edui-pasteicon.edui-state-opened{background-position:0 -34px}.edui-default .edui-pastecontainer{position:relative;visibility:hidden;width:97px;background:#fff;border:1px solid #ccc}.edui-default .edui-pastecontainer .edui-title{font-weight:700;background:#F8F8FF;height:25px;line-height:25px;font-size:12px;padding-left:5px}.edui-default .edui-pastecontainer .edui-button{overflow:hidden;margin:3px 0}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,.edui-default .edui-pastecontainer .edui-button .edui-tagicon,.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{float:left;cursor:pointer;width:29px;height:29px;margin-left:5px;background-image:url(../images/wordpaste.png);background-repeat:no-repeat}.edui-default .edui-pastecontainer .edui-button .edui-richtxticon{margin-left:0;background-position:-109px 0}.edui-default .edui-pastecontainer .edui-button .edui-tagicon{background-position:-148px 1px}.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon{background-position:-72px 0}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon{background-position:-109px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon{background-position:-148px -34px}.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon{background-position:-72px -34px}.edui-quick-operate{position:relative;margin:-10px;height:40px;background:#FFF;width:50px!important;border-radius:4px}.edui-quick-operate:hover .edui-quick-operate-menu{display:block}.edui-quick-operate-status{display:flex}.edui-quick-operate-icon{display:inline-block;line-height:30px!important;width:30px!important;text-align:center;cursor:pointer;color:#2A57FE}.edui-quick-operate-icon:last-child{width:20px!important;font-size:0;color:#999}.edui-quick-operate-icon:last-child svg{vertical-align:middle}.edui-quick-operate-menu{border:1px solid #CCC;border-radius:5px;box-shadow:0 0 10px #CCC;position:absolute;left:50px;top:0;background:#FFF;width:100px!important;display:none}.edui-quick-operate-menu .item{height:30px;line-height:30px;padding:0 10px;cursor:pointer}.edui-quick-operate-menu .item:hover{background:#F5F5F5}.edui-quick-operate-menu .item i{display:inline-block;width:2em}.edui-quick-operate .icon{font-family:edui-iconfont;font-style:normal;-webkit-font-smoothing:antialiased}.edui-quick-operate .icon.icon-image:before{content:\"\\e605\"}.edui-quick-operate .icon.icon-list:before{content:\"\\e87c\"}.edui-quick-operate .icon.icon-trash:before{content:\"\\e87c\"}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/themes/default/dialog.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\ninput[type=text]{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}select{height:30px;border:1px solid #EEE;border-radius:3px;padding:0 5px;line-height:2px;outline:0}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/themes/default/dialogbase.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nhtml,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,font,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td{margin:0;padding:0;outline:0;font-size:100%}body{line-height:1}ol,ul{list-style:none}blockquote,q{quotes:none}ins{text-decoration:none}del{text-decoration:line-through}table{border-collapse:collapse;border-spacing:0}body{background-color:#fff;font:12px/1.5 sans-serif,\"宋体\",\"Arial Narrow\",HELVETICA;color:#646464}.tabhead{position:relative;z-index:10}.tabhead span{display:inline-block;padding:0 5px;height:30px;border:1px solid #ccc;background:#EEE;text-align:center;line-height:30px;cursor:pointer;*margin-right:5px;border-radius:3px 3px 0 0}.tabhead span.focus{height:31px;border-bottom:0;background:#fff}.tabbody{position:relative;top:-1px;margin:0 auto;border:1px solid #ccc}a.button{display:block;text-align:center;line-height:24px;text-decoration:none;height:24px;width:95px;border:0;color:#838383;background:url(../../themes/default/images/icons-all.gif) no-repeat}a.button:hover{background-position:0 -30px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/themes/iframe.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\nbody{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,'Helvetica Neue',Arial,'Noto Sans',sans-serif,'Apple Color Emoji','Segoe UI Emoji','Segoe UI Symbol','Noto Color Emoji';font-size:14px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}a{color:#09f;text-decoration:none}a:hover,a:focus{color:#09f;text-decoration:none}blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #EEE}img+br{display:block;padding:4px 0;content:' '}body p{margin-bottom:1em}iframe{border:0}img{max-width:100%}img[data-word-image]{cursor:pointer}pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;line-height:1.5}img{cursor:pointer}.edui-quick-operate-active{background:#E6ECFF}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCore.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar XRegExp;if(XRegExp)throw Error(\"can't load XRegExp twice in the same frame\");if(function(a){function b(a,b){if(!XRegExp.isRegExp(a))throw TypeError(\"type RegExp expected\");var d=a._xregexp;return a=XRegExp(a.source,c(a)+(b||\"\")),d&&(a._xregexp={source:d.source,captureNames:d.captureNames?d.captureNames.slice(0):null}),a}function c(a){return(a.global?\"g\":\"\")+(a.ignoreCase?\"i\":\"\")+(a.multiline?\"m\":\"\")+(a.extended?\"x\":\"\")+(a.sticky?\"y\":\"\")}function d(a,b,c,d){var e,f,g,h=j.length;i=!0;try{for(;h--;)if(g=j[h],c&g.scope&&(!g.trigger||g.trigger.call(d))&&(g.pattern.lastIndex=b,f=g.pattern.exec(a),f&&f.index===b)){e={output:g.handler.call(d,f,c),match:f};break}}catch(k){throw k}finally{i=!1}return e}function e(a,b,c){if(Array.prototype.indexOf)return a.indexOf(b,c);for(var d=c||0;d<a.length;d++)if(a[d]===b)return d;return-1}XRegExp=function(c,e){var f,h,j,l,m,n=[],p=XRegExp.OUTSIDE_CLASS,q=0;if(XRegExp.isRegExp(c)){if(e!==a)throw TypeError(\"can't supply flags when constructing one RegExp from another\");return b(c)}if(i)throw Error(\"can't call the XRegExp constructor within token definition functions\");for(e=e||\"\",f={hasNamedCapture:!1,captureNames:[],hasFlag:function(a){return e.indexOf(a)>-1},setFlag:function(a){e+=a}};q<c.length;)h=d(c,q,p,f),h?(n.push(h.output),q+=h.match[0].length||1):(j=k.exec.call(o[p],c.slice(q)))?(n.push(j[0]),q+=j[0].length):(l=c.charAt(q),\"[\"===l?p=XRegExp.INSIDE_CLASS:\"]\"===l&&(p=XRegExp.OUTSIDE_CLASS),n.push(l),q++);return m=RegExp(n.join(\"\"),k.replace.call(e,g,\"\")),m._xregexp={source:c,captureNames:f.hasNamedCapture?f.captureNames:null},m},XRegExp.version=\"1.5.1\",XRegExp.INSIDE_CLASS=1,XRegExp.OUTSIDE_CLASS=2;var f=/\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,g=/[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g,h=/^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,i=!1,j=[],k={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},l=k.exec.call(/()??/,\"\")[1]===a,m=function(){var a=/^/g;return k.test.call(a,\"\"),!a.lastIndex}(),n=RegExp.prototype.sticky!==a,o={};o[XRegExp.INSIDE_CLASS]=/^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/,o[XRegExp.OUTSIDE_CLASS]=/^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/,XRegExp.addToken=function(a,c,d,e){j.push({pattern:b(a,\"g\"+(n?\"y\":\"\")),handler:c,scope:d||XRegExp.OUTSIDE_CLASS,trigger:e||null})},XRegExp.cache=function(a,b){var c=a+\"/\"+(b||\"\");return XRegExp.cache[c]||(XRegExp.cache[c]=XRegExp(a,b))},XRegExp.copyAsGlobal=function(a){return b(a,\"g\")},XRegExp.escape=function(a){return a.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\"\\\\$&\")},XRegExp.execAt=function(a,c,d,e){var f,g=b(c,\"g\"+(e&&n?\"y\":\"\"));return g.lastIndex=d=d||0,f=g.exec(a),e&&f&&f.index!==d&&(f=null),c.global&&(c.lastIndex=f?g.lastIndex:0),f},XRegExp.freezeTokens=function(){XRegExp.addToken=function(){throw Error(\"can't run addToken after freezeTokens\")}},XRegExp.isRegExp=function(a){return\"[object RegExp]\"===Object.prototype.toString.call(a)},XRegExp.iterate=function(a,c,d,e){for(var f,g=b(c,\"g\"),h=-1;f=g.exec(a);)c.global&&(c.lastIndex=g.lastIndex),d.call(e,f,++h,a,c),g.lastIndex===f.index&&g.lastIndex++;c.global&&(c.lastIndex=0)},XRegExp.matchChain=function(a,c){return function d(a,e){var f,g=c[e].regex?c[e]:{regex:c[e]},h=b(g.regex,\"g\"),i=[];for(f=0;f<a.length;f++)XRegExp.iterate(a[f],h,function(a){i.push(g.backref?a[g.backref]||\"\":a[0])});return e!==c.length-1&&i.length?d(i,e+1):i}([a],0)},RegExp.prototype.apply=function(a,b){return this.exec(b[0])},RegExp.prototype.call=function(a,b){return this.exec(b)},RegExp.prototype.exec=function(b){var d,f,g,h;if(this.global||(h=this.lastIndex),d=k.exec.apply(this,arguments)){if(!l&&d.length>1&&e(d,\"\")>-1&&(g=RegExp(this.source,k.replace.call(c(this),\"g\",\"\")),k.replace.call((b+\"\").slice(d.index),g,function(){for(var b=1;b<arguments.length-2;b++)arguments[b]===a&&(d[b]=a)})),this._xregexp&&this._xregexp.captureNames)for(var i=1;i<d.length;i++)f=this._xregexp.captureNames[i-1],f&&(d[f]=d[i]);!m&&this.global&&!d[0].length&&this.lastIndex>d.index&&this.lastIndex--}return this.global||(this.lastIndex=h),d},RegExp.prototype.test=function(a){var b,c;return this.global||(c=this.lastIndex),b=k.exec.call(this,a),b&&!m&&this.global&&!b[0].length&&this.lastIndex>b.index&&this.lastIndex--,this.global||(this.lastIndex=c),!!b},String.prototype.match=function(a){if(XRegExp.isRegExp(a)||(a=RegExp(a)),a.global){var b=k.match.apply(this,arguments);return a.lastIndex=0,b}return a.exec(this)},String.prototype.replace=function(a,b){var c,d,g,h,i=XRegExp.isRegExp(a);return i?(a._xregexp&&(c=a._xregexp.captureNames),a.global||(h=a.lastIndex)):a+=\"\",\"[object Function]\"===Object.prototype.toString.call(b)?d=k.replace.call(this+\"\",a,function(){if(c){arguments[0]=new String(arguments[0]);for(var d=0;d<c.length;d++)c[d]&&(arguments[0][c[d]]=arguments[d+1])}return i&&a.global&&(a.lastIndex=arguments[arguments.length-2]+arguments[0].length),b.apply(null,arguments)}):(g=this+\"\",d=k.replace.call(g,a,function(){var a=arguments;return k.replace.call(b+\"\",f,function(b,d,f){if(!d){var g=+f;return g<=a.length-3?a[g]:(g=c?e(c,f):-1,g>-1?a[g+1]:b)}switch(d){case\"$\":return\"$\";case\"&\":return a[0];case\"`\":return a[a.length-1].slice(0,a[a.length-2]);case\"'\":return a[a.length-1].slice(a[a.length-2]+a[0].length);default:var h=\"\";if(d=+d,!d)return b;for(;d>a.length-3;)h=String.prototype.slice.call(d,-1)+h,d=Math.floor(d/10);return(d?a[d]||\"\":\"$\")+h}})})),i&&(a.global?a.lastIndex=0:a.lastIndex=h),d},String.prototype.split=function(b,c){if(!XRegExp.isRegExp(b))return k.split.apply(this,arguments);var d,e,f=this+\"\",g=[],h=0;if(c===a||+c<0)c=1/0;else if(c=Math.floor(+c),!c)return[];for(b=XRegExp.copyAsGlobal(b);(d=b.exec(f))&&!(b.lastIndex>h&&(g.push(f.slice(h,d.index)),d.length>1&&d.index<f.length&&Array.prototype.push.apply(g,d.slice(1)),e=d[0].length,h=b.lastIndex,g.length>=c));)b.lastIndex===d.index&&b.lastIndex++;return h===f.length?k.test.call(b,\"\")&&!e||g.push(\"\"):g.push(f.slice(h)),g.length>c?g.slice(0,c):g},XRegExp.addToken(/\\(\\?#[^)]*\\)/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"}),XRegExp.addToken(/\\((?!\\?)/,function(){return this.captureNames.push(null),\"(\"}),XRegExp.addToken(/\\(\\?<([$\\w]+)>/,function(a){return this.captureNames.push(a[1]),this.hasNamedCapture=!0,\"(\"}),XRegExp.addToken(/\\\\k<([\\w$]+)>/,function(a){var b=e(this.captureNames,a[1]);return b>-1?\"\\\\\"+(b+1)+(isNaN(a.input.charAt(a.index+a[0].length))?\"\":\"(?:)\"):a[0]}),XRegExp.addToken(/\\[\\^?]/,function(a){return\"[]\"===a[0]?\"\\\\b\\\\B\":\"[\\\\s\\\\S]\"}),XRegExp.addToken(/^\\(\\?([imsx]+)\\)/,function(a){return this.setFlag(a[1]),\"\"}),XRegExp.addToken(/(?:\\s+|#.*)+/,function(a){return k.test.call(h,a.input.slice(a.index+a[0].length))?\"\":\"(?:)\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"x\")}),XRegExp.addToken(/\\./,function(){return\"[\\\\s\\\\S]\"},XRegExp.OUTSIDE_CLASS,function(){return this.hasFlag(\"s\")})}(),\"undefined\"==typeof SyntaxHighlighter)var SyntaxHighlighter=function(){function a(a,b){return a.className.indexOf(b)!=-1}function b(b,c){a(b,c)||(b.className+=\" \"+c)}function c(a,b){a.className=a.className.replace(b,\"\")}function d(a){for(var b=[],c=0;c<a.length;c++)b.push(a[c]);return b}function e(a){return a.split(/\\r?\\n/)}function f(a){var b=\"highlighter_\";return 0==a.indexOf(b)?a:b+a}function g(a){return J.vars.highlighters[f(a)]}function h(a){return document.getElementById(f(a))}function i(a){J.vars.highlighters[f(a.id)]=a}function j(a,b,c){if(null==a)return null;var d,e,f=1!=c?a.childNodes:[a.parentNode],g={\"#\":\"id\",\".\":\"className\"}[b.substr(0,1)]||\"nodeName\";if(d=\"nodeName\"!=g?b.substr(1):b.toUpperCase(),(a[g]||\"\").indexOf(d)!=-1)return a;for(var h=0;f&&h<f.length&&null==e;h++)e=j(f[h],b,c);return e}function k(a,b){return j(a,b,!0)}function l(a,b,c){c=Math.max(c||0,0);for(var d=c;d<a.length;d++)if(a[d]==b)return d;return-1}function m(a){return(a||\"\")+Math.round(1e6*Math.random()).toString()}function n(a,b){var c,d={};for(c in a)d[c]=a[c];for(c in b)d[c]=b[c];return d}function o(a){var b={\"true\":!0,\"false\":!1}[a];return null==b?a:b}function p(a,b,c,d,e){var f=(screen.width-c)/2,g=(screen.height-d)/2;e+=\", left=\"+f+\", top=\"+g+\", width=\"+c+\", height=\"+d,e=e.replace(/^,/,\"\");var h=window.open(a,b,e);return h.focus(),h}function q(a,b,c,d){function e(a){a=a||window.event,a.target||(a.target=a.srcElement,a.preventDefault=function(){this.returnValue=!1}),c.call(d||window,a)}a.attachEvent?a.attachEvent(\"on\"+b,e):a.addEventListener(b,e,!1)}function r(a){window.alert(J.config.strings.alert+a)}function s(a,b){var c=J.vars.discoveredBrushes,d=null;if(null==c){c={};for(var e in J.brushes){var f=J.brushes[e],g=f.aliases;if(null!=g){f.brushName=e.toLowerCase();for(var h=0;h<g.length;h++)c[g[h]]=e}}J.vars.discoveredBrushes=c}return d=J.brushes[c[a]],null==d&&b&&r(J.config.strings.noBrush+a),d}function t(a,b){for(var c=e(a),d=0;d<c.length;d++)c[d]=b(c[d],d);return c.join(\"\\r\\n\")}function u(a){return a.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g,\"\")}function v(a){for(var b,c={},d=new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),e=new XRegExp(\"(?<name>[\\\\w-]+)\\\\s*:\\\\s*(?<value>[\\\\w-%#]+|\\\\[.*?\\\\]|\\\".*?\\\"|'.*?')\\\\s*;?\",\"g\");null!=(b=e.exec(a));){var f=b.value.replace(/^['\"]|['\"]$/g,\"\");if(null!=f&&d.test(f)){var g=d.exec(f);f=g.values.length>0?g.values.split(/\\s*,\\s*/):[]}c[b.name]=f}return c}function w(a,b){return null==a||0==a.length||\"\\n\"==a?a:(a=a.replace(/</g,\"&lt;\"),a=a.replace(/ {2,}/g,function(a){for(var b=\"\",c=0;c<a.length-1;c++)b+=J.config.space;return b+\" \"}),null!=b&&(a=t(a,function(a){if(0==a.length)return\"\";var c=\"\";return a=a.replace(/^(&nbsp;| )+/,function(a){return c=a,\"\"}),0==a.length?c:c+'<code class=\"'+b+'\">'+a+\"</code>\"})),a)}function x(a,b){for(var c=a.toString();c.length<b;)c=\"0\"+c;return c}function y(a,b){for(var c=\"\",d=0;d<b;d++)c+=\" \";return a.replace(/\\t/g,c)}function z(a,b){function c(a,b,c){return a.substr(0,b)+f.substr(0,c)+a.substr(b+1,a.length)}for(var d=(e(a),\"\\t\"),f=\"\",g=0;g<50;g++)f+=\"                    \";return a=t(a,function(a){if(a.indexOf(d)==-1)return a;for(var e=0;(e=a.indexOf(d))!=-1;){var f=b-e%b;a=c(a,e,f)}return a})}function A(a){var b=/<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;return 1==J.config.bloggerMode&&(a=a.replace(b,\"\\n\")),1==J.config.stripBrs&&(a=a.replace(b,\"\")),a}function B(a){return a.replace(/^\\s+|\\s+$/g,\"\")}function C(a){for(var b=e(A(a)),c=(new Array,/^\\s*/),d=1e3,f=0;f<b.length&&d>0;f++){var g=b[f];if(0!=B(g).length){var h=c.exec(g);if(null==h)return a;d=Math.min(h[0].length,d)}}if(d>0)for(var f=0;f<b.length;f++)b[f]=b[f].substr(d);return b.join(\"\\n\")}function D(a,b){return a.index<b.index?-1:a.index>b.index?1:a.length<b.length?-1:a.length>b.length?1:0}function E(a,b){function c(a,b){return a[0]}for(var d=null,e=[],f=b.func?b.func:c;null!=(d=b.regex.exec(a));){var g=f(d,b);\"string\"==typeof g&&(g=[new J.Match(g,d.index,b.css)]),e=e.concat(g)}return e}function F(a){var b=/(.*)((&gt;|&lt;).*)/;return a.replace(J.regexLib.url,function(a){var c=\"\",d=null;return(d=b.exec(a))&&(a=d[1],c=d[2]),'<a href=\"'+a+'\">'+a+\"</a>\"+c})}function G(){for(var a=document.getElementsByTagName(\"script\"),b=[],c=0;c<a.length;c++)\"syntaxhighlighter\"==a[c].type&&b.push(a[c]);return b}function H(a){var b=\"<![CDATA[\",c=\"]]>\",d=B(a),e=!1,f=b.length,g=c.length;0==d.indexOf(b)&&(d=d.substring(f),e=!0);var h=d.length;return d.indexOf(c)==h-g&&(d=d.substring(0,h-g),e=!0),e?d:a}function I(a){var d,e=a.target,f=k(e,\".syntaxhighlighter\"),h=k(e,\".container\"),i=document.createElement(\"textarea\");if(h&&f&&!j(h,\"textarea\")){d=g(f.id),b(f,\"source\");for(var l=h.childNodes,m=[],n=0;n<l.length;n++)m.push(l[n].innerText||l[n].textContent);m=m.join(\"\\r\"),m=m.replace(/\\u00a0/g,\" \"),i.appendChild(document.createTextNode(m)),h.appendChild(i),i.focus(),i.select(),q(i,\"blur\",function(a){i.parentNode.removeChild(i),c(f,\"source\")})}}\"undefined\"!=typeof require&&\"undefined\"==typeof XRegExp&&(XRegExp=require(\"XRegExp\").XRegExp);var J={defaults:{\"class-name\":\"\",\"first-line\":1,\"pad-line-numbers\":!1,highlight:!1,title:null,\"smart-tabs\":!0,\"tab-size\":4,gutter:!0,toolbar:!0,\"quick-code\":!0,collapse:!1,\"auto-links\":!1,light:!1,unindent:!0,\"html-script\":!1},config:{space:\"&nbsp;\",useScriptTags:!0,bloggerMode:!1,stripBrs:!1,tagName:\"pre\",strings:{expandSource:\"expand source\",help:\"?\",alert:\"SyntaxHighlighter\\n\\n\",noBrush:\"Can't find brush for: \",brushNotHtmlScript:\"Brush wasn't configured for html-script option: \",aboutDialog:\"@ABOUT@\"}},vars:{discoveredBrushes:null,highlighters:{}},brushes:{},regexLib:{multiLineCComments:/\\/\\*[\\s\\S]*?\\*\\//gm,singleLineCComments:/\\/\\/.*$/gm,singleLinePerlComments:/#.*$/gm,doubleQuotedString:/\"([^\\\\\"\\n]|\\\\.)*\"/g,singleQuotedString:/'([^\\\\'\\n]|\\\\.)*'/g,multiLineDoubleQuotedString:new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"',\"gs\"),multiLineSingleQuotedString:new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\",\"gs\"),xmlComments:/(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,url:/\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,phpScriptTags:{left:/(&lt;|<)\\?(?:=|php)?/g,right:/\\?(&gt;|>)/g,eof:!0},aspScriptTags:{left:/(&lt;|<)%=?/g,right:/%(&gt;|>)/g},scriptScriptTags:{left:/(&lt;|<)\\s*script.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi}},toolbar:{getHtml:function(a){function b(a,b){return J.toolbar.getButtonHtml(a,b,J.config.strings[b])}for(var c='<div class=\"toolbar\">',d=J.toolbar.items,e=d.list,f=0;f<e.length;f++)c+=(d[e[f]].getHtml||b)(a,e[f]);return c+=\"</div>\"},getButtonHtml:function(a,b,c){return'<span><a href=\"#\" class=\"toolbar_item command_'+b+\" \"+b+'\">'+c+\"</a></span>\"},handler:function(a){function b(a){var b=new RegExp(a+\"_(\\\\w+)\"),c=b.exec(d);return c?c[1]:null}var c=a.target,d=c.className||\"\",e=g(k(c,\".syntaxhighlighter\").id),f=b(\"command\");e&&f&&J.toolbar.items[f].execute(e),a.preventDefault()},items:{list:[\"expandSource\",\"help\"],expandSource:{getHtml:function(a){if(1!=a.getParam(\"collapse\"))return\"\";var b=a.getParam(\"title\");return J.toolbar.getButtonHtml(a,\"expandSource\",b?b:J.config.strings.expandSource)},execute:function(a){var b=h(a.id);c(b,\"collapsed\")}},help:{execute:function(a){var b=p(\"\",\"_blank\",500,250,\"scrollbars=0\"),c=b.document;c.write(J.config.strings.aboutDialog),c.close(),b.focus()}}}},findElements:function(a,b){var c=b?[b]:d(document.getElementsByTagName(J.config.tagName)),e=J.config,f=[];if(e.useScriptTags&&(c=c.concat(G())),0===c.length)return f;for(var g=0;g<c.length;g++){var h={target:c[g],params:n(a,v(c[g].className))};null!=h.params.brush&&f.push(h)}return f},highlight:function(a,b){var c=this.findElements(a,b),d=\"innerHTML\",e=null,f=J.config;if(0!==c.length)for(var g=0;g<c.length;g++){var h,b=c[g],i=b.target,j=b.params,k=j.brush;if(null!=k){if(\"true\"==j[\"html-script\"]||1==J.defaults[\"html-script\"])e=new J.HtmlScript(k),k=\"htmlscript\";else{var l=s(k);if(!l)continue;e=new l}h=i[d],f.useScriptTags&&(h=H(h)),\"\"!=(i.title||\"\")&&(j.title=i.title),j.brush=k,e.init(j),b=e.getDiv(h),\"\"!=(i.id||\"\")&&(b.id=i.id);var m=b.firstChild.firstChild;m.className=b.firstChild.className,i.parentNode.replaceChild(m,i)}}},all:function(a){q(window,\"load\",function(){J.highlight(a)})}};return J.Match=function(a,b,c){this.value=a,this.index=b,this.length=a.length,this.css=c,this.brushName=null},J.Match.prototype.toString=function(){return this.value},J.HtmlScript=function(a){function b(a,b){for(var c=0;c<a.length;c++)a[c].index+=b}function c(a,c){for(var f,g=a.code,h=[],i=d.regexList,j=a.index+a.left.length,k=d.htmlScript,l=0;l<i.length;l++)f=E(g,i[l]),b(f,j),h=h.concat(f);null!=k.left&&null!=a.left&&(f=E(a.left,k.left),b(f,a.index),h=h.concat(f)),null!=k.right&&null!=a.right&&(f=E(a.right,k.right),b(f,a.index+a[0].lastIndexOf(a.right)),h=h.concat(f));for(var m=0;m<h.length;m++)h[m].brushName=e.brushName;return h}var d,e=s(a),f=new J.brushes.Xml,g=this,h=\"getDiv getHtml init\".split(\" \");if(null!=e){d=new e;for(var i=0;i<h.length;i++)(function(){var a=h[i];g[a]=function(){return f[a].apply(f,arguments)}})();return null==d.htmlScript?void r(J.config.strings.brushNotHtmlScript+a):void f.regexList.push({regex:d.htmlScript.code,func:c})}},J.Highlighter=function(){},J.Highlighter.prototype={getParam:function(a,b){var c=this.params[a];return o(null==c?b:c)},create:function(a){return document.createElement(a)},findMatches:function(a,b){var c=[];if(null!=a)for(var d=0;d<a.length;d++)\"object\"==typeof a[d]&&(c=c.concat(E(b,a[d])));return this.removeNestedMatches(c.sort(D))},removeNestedMatches:function(a){for(var b=0;b<a.length;b++)if(null!==a[b])for(var c=a[b],d=c.index+c.length,e=b+1;e<a.length&&null!==a[b];e++){var f=a[e];if(null!==f){if(f.index>d)break;f.index==c.index&&f.length>c.length?a[b]=null:f.index>=c.index&&f.index<d&&(a[e]=null)}}return a},figureOutLineNumbers:function(a){var b=[],c=parseInt(this.getParam(\"first-line\"));return t(a,function(a,d){b.push(d+c)}),b},isLineHighlighted:function(a){var b=this.getParam(\"highlight\",[]);return\"object\"!=typeof b&&null==b.push&&(b=[b]),l(b,a.toString())!=-1},getLineHtml:function(a,b,c){var d=[\"line\",\"number\"+b,\"index\"+a,\"alt\"+(b%2==0?1:2).toString()];return this.isLineHighlighted(b)&&d.push(\"highlighted\"),0==b&&d.push(\"break\"),'<div class=\"'+d.join(\" \")+'\">'+c+\"</div>\"},getLineNumbersHtml:function(a,b){var c=\"\",d=e(a).length,f=parseInt(this.getParam(\"first-line\")),g=this.getParam(\"pad-line-numbers\");1==g?g=(f+d-1).toString().length:1==isNaN(g)&&(g=0);for(var h=0;h<d;h++){var i=b?b[h]:f+h,a=0==i?J.config.space:x(i,g);c+=this.getLineHtml(h,i,a)}return c},getCodeLinesHtml:function(a,b){a=B(a);for(var c=e(a),d=(this.getParam(\"pad-line-numbers\"),parseInt(this.getParam(\"first-line\"))),a=\"\",f=this.getParam(\"brush\"),g=0;g<c.length;g++){var h=c[g],i=/^(&nbsp;|\\s)+/.exec(h),j=null,k=b?b[g]:d+g;null!=i&&(j=i[0].toString(),h=h.substr(j.length),j=j.replace(\" \",J.config.space)),h=B(h),0==h.length&&(h=J.config.space),a+=this.getLineHtml(g,k,(null!=j?'<code class=\"'+f+' spaces\">'+j+\"</code>\":\"\")+h)}return a},getTitleHtml:function(a){return a?\"<caption>\"+a+\"</caption>\":\"\"},getMatchesHtml:function(a,b){function c(a){var b=a?a.brushName||f:f;return b?b+\" \":\"\"}for(var d=0,e=\"\",f=this.getParam(\"brush\",\"\"),g=0;g<b.length;g++){var h,i=b[g];null!==i&&0!==i.length&&(h=c(i),e+=w(a.substr(d,i.index-d),h+\"plain\")+w(i.value,h+i.css),d=i.index+i.length+(i.offset||0))}return e+=w(a.substr(d),c()+\"plain\")},getHtml:function(a){var b,c,d,e=\"\",g=[\"syntaxhighlighter\"];return 1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1),className=\"syntaxhighlighter\",1==this.getParam(\"collapse\")&&g.push(\"collapsed\"),0==(gutter=this.getParam(\"gutter\"))&&g.push(\"nogutter\"),g.push(this.getParam(\"class-name\")),g.push(this.getParam(\"brush\")),a=u(a).replace(/\\r/g,\" \"),b=this.getParam(\"tab-size\"),a=1==this.getParam(\"smart-tabs\")?z(a,b):y(a,b),this.getParam(\"unindent\")&&(a=C(a)),gutter&&(d=this.figureOutLineNumbers(a)),c=this.findMatches(this.regexList,a),e=this.getMatchesHtml(a,c),e=this.getCodeLinesHtml(e,d),this.getParam(\"auto-links\")&&(e=F(e)),\"undefined\"!=typeof navigator&&navigator.userAgent&&navigator.userAgent.match(/MSIE/)&&g.push(\"ie\"),e='<div id=\"'+f(this.id)+'\" class=\"'+g.join(\" \")+'\">'+(this.getParam(\"toolbar\")?J.toolbar.getHtml(this):\"\")+'<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'+this.getTitleHtml(this.getParam(\"title\"))+\"<tbody><tr>\"+(gutter?'<td class=\"gutter\">'+this.getLineNumbersHtml(a)+\"</td>\":\"\")+'<td class=\"code\"><div class=\"container\">'+e+\"</div></td></tr></tbody></table></div>\"},getDiv:function(a){null===a&&(a=\"\"),this.code=a;var b=this.create(\"div\");return b.innerHTML=this.getHtml(a),this.getParam(\"toolbar\")&&q(j(b,\".toolbar\"),\"click\",J.toolbar.handler),this.getParam(\"quick-code\")&&q(j(b,\".code\"),\"dblclick\",I),b},init:function(a){this.id=m(),i(this),this.params=n(J.defaults,a||{}),1==this.getParam(\"light\")&&(this.params.toolbar=this.params.gutter=!1)},getKeywords:function(a){return a=a.replace(/^\\s+|\\s+$/g,\"\").replace(/\\s+/g,\"|\"),\"\\\\b(?:\"+a+\")\\\\b\"},forHtmlScript:function(a){var b={end:a.right.source};a.eof&&(b.end=\"(?:(?:\"+b.end+\")|$)\"),this.htmlScript={left:{regex:a.left,css:\"script\"},right:{regex:a.right,css:\"script\"},code:new XRegExp(\"(?<left>\"+a.left.source+\")(?<code>.*?)(?<right>\"+b.end+\")\",\"sgi\")}}},J}();\"undefined\"!=typeof exports?exports.SyntaxHighlighter=SyntaxHighlighter:null,function(){function a(){var a=\"class interface function package\",b=\"-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape extends false final finally flash_proxy for get if implements import in include Infinity instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null Null Number Object object_proxy override parseFloat parseInt private protected public return set static String super switch this throw true try typeof uint undefined unescape use void while with\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:new RegExp(\"var\",\"gm\"),css:\"variable\"},{regex:new RegExp(\"trace\",\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"actionscript3\",\"as3\"],SyntaxHighlighter.brushes.AS3=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without\",b=\"first second third fourth fifth sixth seventh eighth ninth tenth last front back middle\",c=\"activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes\";this.regexList=[{regex:/(--|#).*$/gm,css:\"comments\"},{regex:/\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/\"[\\s\\S]*?\"/gm,css:\"string\"},{regex:/(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,css:\"color1\"},{regex:/(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g,css:\"color1\"},{regex:/(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,css:\"color2\"},{regex:/\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,css:\"keyword\"},{regex:/\\b\\d+(st|nd|rd|th)\\b/g,css:\"keyword\"},{regex:/\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,css:\"color3\"},{regex:/\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,css:\"color3\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"applescript\"],SyntaxHighlighter.brushes.AppleScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"if fi then elif else for do done until while break continue case esac function return in eq ne ge le\",b=\"alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chrootcksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig import install join kill less let ln local locate logname logout look lpc lpr lprint lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir vi watch wc whereis which who whoami Wget xargs yes\";this.regexList=[{regex:/^#!.*$/gm,css:\"preprocessor bold\"},{regex:/\\/[\\w-\\/]+/gm,css:\"plain\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"functions\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"bash\",\"shell\",\"sh\"],SyntaxHighlighter.brushes.Bash=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform XmlValidate Year YesNoFormat\",b=\"cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx cfwindow cfxml cfzip cfzipparam\",c=\"all and any between cross in join like not null or outer some\";\nthis.regexList=[{regex:new RegExp(\"--(.*)$\",\"gm\"),css:\"comments\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"coldfusion\",\"cf\"],SyntaxHighlighter.brushes.ColdFusion=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t __wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler sig_atomic_t size_t _stat __stat64 _stati64 terminate_function time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf va_list wchar_t wctrans_t wctype_t wint_t signed\",b=\"auto break case catch class const decltype __finally __exception __try const_cast continue private public protected __declspec default delete deprecated dllexport dllimport do dynamic_cast else enum explicit extern if for friend goto inline mutable naked namespace new noinline noreturn nothrow register reinterpret_cast return selectany sizeof static static_cast struct switch template this thread throw true false try typedef typeid typename union using uuid virtual void volatile whcar_t while\",c=\"assert isalnum isalpha iscntrl isdigit isgraph islower isprintispunct isspace isupper isxdigit tolower toupper errno localeconv setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell fwrite getc getchar gets perror printf putc putchar puts remove rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs mbtowc qsort rand realloc srand strtod strtol strtoul system wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr strcmp strcoll strcpy strcspn strerror strlen strncat strncmp strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime clock ctime difftime gmtime localtime mktime strftime time\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^ *#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"color1 bold\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"functions bold\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword bold\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"cpp\",\"c\"],SyntaxHighlighter.brushes.Cpp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=0==a[0].indexOf(\"///\")?\"color1\":\"comments\";return[new SyntaxHighlighter.Match(a[0],a.index,c)]}var b=\"abstract as base bool break byte case catch char checked class const continue decimal default delegate do double else enum event explicit volatile extern false finally fixed float for foreach get goto if implicit in int interface internal is lock long namespace new null object operator out override params private protected public readonly ref return sbyte sealed set short sizeof stackalloc static string struct switch this throw true try typeof uint ulong unchecked unsafe ushort using virtual void while var from group by into select let where orderby join on equals ascending descending\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,func:a},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:/@\"(?:[^\"]|\"\")*\"/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/^\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"},{regex:/\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,css:\"keyword\"},{regex:/\\byield(?=\\s+(?:return|break)\\b)/g,css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"c#\",\"c-sharp\",\"csharp\"],SyntaxHighlighter.brushes.CSharp=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\";this.regexList=[{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,css:\"value\"},{regex:/!important/g,css:\"color3\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}],this.forHtmlScript({left:/(&lt;|<)\\s*style.*?(&gt;|>)/gi,right:/(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"css\"],SyntaxHighlighter.brushes.CSS=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs addr and ansichar ansistring array as asm begin boolean byte cardinal case char class comp const constructor currency destructor div do double downto else end except exports extended false file finalization finally for function goto if implementation in inherited int64 initialization integer interface is label library longint longword mod nil not object of on or packed pansichar pansistring pchar pcurrency pdatetime pextended pint64 pointer private procedure program property pshortstring pstring pvariant pwidechar pwidestring protected public published raise real real48 record repeat set shl shortint shortstring shr single smallint string then threadvar to true try type unit until uses val var varirnt while widechar widestring with word write writeln xor\";this.regexList=[{regex:/\\(\\*[\\s\\S]*?\\*\\)/gm,css:\"comments\"},{regex:/{(?!\\$)[\\s\\S]*?}/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\{\\$[a-zA-Z]+ .+\\}/g,css:\"color1\"},{regex:/\\b[\\d\\.]+\\b/g,css:\"value\"},{regex:/\\$[a-zA-Z0-9]+\\b/g,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"delphi\",\"pascal\",\"pas\"],SyntaxHighlighter.brushes.Delphi=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){this.regexList=[{regex:/^\\+\\+\\+ .*$/gm,css:\"color2\"},{regex:/^\\-\\-\\- .*$/gm,css:\"color2\"},{regex:/^\\s.*$/gm,css:\"color1\"},{regex:/^@@.*@@.*$/gm,css:\"variable\"},{regex:/^\\+.*$/gm,css:\"string\"},{regex:/^\\-.*$/gm,css:\"color3\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"diff\",\"patch\"],SyntaxHighlighter.brushes.Diff=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"after and andalso band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse query receive rem try when xor module export import define\";this.regexList=[{regex:new RegExp(\"[A-Z][A-Za-z0-9_]+\",\"g\"),css:\"constants\"},{regex:new RegExp(\"\\\\%.+\",\"gm\"),css:\"comments\"},{regex:new RegExp(\"\\\\?[A-Za-z0-9_]+\",\"g\"),css:\"preprocessor\"},{regex:new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\",\"g\"),css:\"functions\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"erl\",\"erlang\"],SyntaxHighlighter.brushes.Erland=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"as assert break case catch class continue def default do else extends finally if in implements import instanceof interface new package property return switch throw throws try while public protected private static\",b=\"void boolean byte char short int long float double\",c=\"null\",d=\"allProperties count get size collect each eachProperty eachPropertyName eachWithIndex find findAll findIndexOf grep inject max min reverseEach sort asImmutable asSynchronized flatten intersect join pop reverse subMap toList padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText splitEachLine withReader append encodeBase64 decodeBase64 filterLine transformChar transformLine withOutputStream withPrintWriter withStream withStreams withWriter withWriterAppend write writeLine dump inspect invokeMethod print println step times upto use waitForOrKill getText\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\"\"\".*\"\"\"/g,css:\"string\"},{regex:new RegExp(\"\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b\",\"gi\"),css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(d),\"gm\"),css:\"functions\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"groovy\"],SyntaxHighlighter.brushes.Groovy=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abstract assert boolean break byte case catch char class const continue default do double else enum extends false final finally float for goto if implements import instanceof int interface long native new null package private protected public return short static strictfp super switch synchronized this throw throws true transient try void volatile while\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:/\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,css:\"comments\"},{regex:/\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,css:\"preprocessor\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,css:\"value\"},{regex:/(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,css:\"color1\"},{regex:/\\@interface\\b/g,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript({left:/(&lt;|<)%[@!=]?/g,right:/%(&gt;|>)/g})}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"java\"],SyntaxHighlighter.brushes.Java=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"Boolean Byte Character Double Duration Float Integer Long Number Short String Void\",b=\"abstract after and as assert at before bind bound break catch class continue def delete else exclusive extends false finally first for from function if import in indexof init insert instanceof into inverse last lazy mixin mod nativearray new not null on or override package postinit protected public public-init public-read replace return reverse sizeof step super then this throw true try tween typeof var where while with attribute let private readonly static trigger\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi,css:\"color2\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"variable\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"jfx\",\"javafx\"],SyntaxHighlighter.brushes.JavaFX=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"break case catch continue default delete do else false  for function if in instanceof new null return super switch this throw true try typeof var while with\",b=SyntaxHighlighter.regexLib;this.regexList=[{regex:b.multiLineDoubleQuotedString,css:\"string\"},{regex:b.multiLineSingleQuotedString,css:\"string\"},{regex:b.singleLineCComments,css:\"comments\"},{regex:b.multiLineCComments,css:\"comments\"},{regex:/\\s*#.*/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(b.scriptScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"js\",\"jscript\",\"javascript\"],SyntaxHighlighter.brushes.JScript=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr chroot close closedir connect cos crypt defined delete each endgrent endhostent endnetent endprotoent endpwent endservent eof exec exists exp fcntl fileno flock fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getppid getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt glob gmtime grep hex index int ioctl join keys kill lc lcfirst length link listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd oct open opendir ord pack pipe pop pos print printf prototype push quotemeta rand read readdir readline readlink readpipe recv rename reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat study substr symlink syscall sysopen sysread sysseek system syswrite tell telldir time times tr truncate uc ucfirst umask undef unlink unpack unshift utime values vec wait waitpid warn write say\",b=\"bless caller continue dbmclose dbmopen die do dump else elsif eval exit for foreach goto if import last local my next no our package redo ref require return sub tie tied unless untie until use wantarray while given when default try catch finally has extends with before after around override augment\";this.regexList=[{regex:/(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,css:\"string\"},{regex:/#.*$/gm,css:\"comments\"},{regex:/^#!.*\\n/g,css:\"preprocessor\"},{regex:/-?\\w+(?=\\s*=(>|&gt;))/g,css:\"string\"},{regex:/\\bq[qwxr]?\\([\\s\\S]*?\\)/g,css:\"string\"},{regex:/\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,css:\"string\"},{regex:/\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,css:\"string\"},{regex:/\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,css:\"string\"},{regex:/\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,css:\"string\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,css:\"variable\"},{regex:/\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,css:\"comments\"},{regex:/(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,css:\"comments\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"perl\",\"Perl\",\"pl\"],SyntaxHighlighter.brushes.Perl=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs acos acosh addcslashes addslashes array_change_key_case array_chunk array_combine array_count_values array_diff array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill array_filter array_flip array_intersect array_intersect_assoc array_intersect_key array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map array_merge array_merge_recursive array_multisort array_pad array_pop array_product array_push array_rand array_reduce array_reverse array_search array_shift array_slice array_splice array_sum array_udiff array_udiff_assoc array_udiff_uassoc array_uintersect array_uintersect_assoc array_uintersect_uassoc array_unique array_unshift array_values array_walk array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists closedir closelog copy cos cosh count count_chars date decbin dechex decoct deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime strtoupper strtr strval substr substr_compare\",b=\"abstract and array as break case catch cfunction class clone const continue declare default die do else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach function global goto if implements include include_once interface instanceof insteadof namespace new old_function or private protected public return require require_once static switch trait throw try use var while xor \",c=\"__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"constants\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"php\"],SyntaxHighlighter.brushes.Php=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"text\",\"plain\"],SyntaxHighlighter.brushes.Plain=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"while validateset validaterange validatepattern validatelength validatecount until trap switch return ref process param parameter in if global: function foreach for finally filter end elseif else dynamicparam do default continue cmdletbinding break begin alias \\\\? % #script #private #local #global mandatory parametersetname position valuefrompipeline valuefrompipelinebypropertyname valuefromremainingarguments helpmessage \",b=\" and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle clike clt cmatch cne cnotcontains cnotlike cnotmatch contains creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt imatch ine inotcontains inotlike inotmatch ireplace is isnot le like lt match ne not notcontains notlike notmatch or regex replace wildcard\",c=\"write where wait use update unregister undo trace test tee take suspend stop start split sort skip show set send select scroll resume restore restart resolve resize reset rename remove register receive read push pop ping out new move measure limit join invoke import group get format foreach export expand exit enter enable disconnect disable debug cxnew copy convertto convertfrom convert connect complete compare clear checkpoint aggregate add\",d=\" component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis\";this.regexList=[{regex:new RegExp(\"^\\\\s*#[#\\\\s]*\\\\.(\"+this.getKeywords(d)+\").*$\",\"gim\"),css:\"preprocessor help bold\"},{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,css:\"comments here\"},{regex:new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@',\"gm\"),css:\"script string here\"},{regex:new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\",\"gm\"),css:\"script string single here\"},{regex:new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"',\"g\"),css:\"string\"},{regex:new RegExp(\"'(?:[^']|'')*'\",\"g\"),css:\"string single\"},{regex:new RegExp(\"[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+\",\"gi\"),css:\"variable\"},{regex:new RegExp(\"(?:\\\\b\"+c.replace(/ /g,\"\\\\b|\\\\b\")+\")-[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"keyword\"},{regex:new RegExp(\"-\"+this.getKeywords(b),\"gmi\"),css:\"operator value\"},{regex:new RegExp(\"\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]\",\"gi\"),css:\"constants\"},{regex:new RegExp(\"\\\\s+-(?!\"+this.getKeywords(b)+\")[a-zA-Z_][a-zA-Z0-9_]*\",\"gmi\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"powershell\",\"ps\",\"posh\"],SyntaxHighlighter.brushes.PowerShell=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try yield while\",b=\"__import__ abs all any apply basestring bin bool buffer callable chr classmethod cmp coerce compile complex delattr dict dir divmod enumerate eval execfile file filter float format frozenset getattr globals hasattr hash help hex id input int intern isinstance issubclass iter len list locals long map max min next object oct open ord pow print property range raw_input reduce reload repr reversed round set setattr slice sorted staticmethod str sum super tuple type type unichr unicode vars xrange zip\",c=\"None True False self cls class_\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:/^\\s*@\\w+/gm,css:\"decorator\"},{regex:/(['\\\"]{3})([^\\1])*?\\1/gm,css:\"comments\"},{regex:/\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm,css:\"string\"},{regex:/'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm,css:\"string\"},{regex:/\\+|\\-|\\*|\\/|\\%|=|==/gm,css:\"keyword\"},{regex:/\\b\\d+\\.?\\w*/g,css:\"value\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"functions\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(c),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"py\",\"python\"],SyntaxHighlighter.brushes.Python=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"alias and BEGIN begin break case class def define_method defined do each else elsif END end ensure false for if in module new next nil not or raise redo rescue retry return self super then throw true undef unless until when while yield\",b=\"Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ThreadGroup Thread Time TrueClass\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLinePerlComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/\\b[A-Z0-9_]+\\b/g,css:\"constants\"},{regex:/:[a-z][A-Za-z0-9_]*/g,css:\"color2\"},{regex:/(\\$|@@|@)\\w+/g,css:\"variable bold\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(this.getKeywords(b),\"gm\"),css:\"color1\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),\na.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"ruby\",\"rails\",\"ror\",\"rb\"],SyntaxHighlighter.brushes.Ruby=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a){return\"\\\\b([a-z_]|)\"+a.replace(/ /g,\"(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)\")+\"(?=:)\\\\b\"}function b(a){return\"\\\\b\"+a.replace(/ /g,\"(?!-)(?!:)\\\\b|\\\\b()\")+\":\\\\b\"}var c=\"ascent azimuth background-attachment background-color background-image background-position background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index\",d=\"above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow\",e=\"[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif\",f=\"!important !default\",g=\"@import @extend @debug @warn @if @for @while @mixin @include\",h=SyntaxHighlighter.regexLib;this.regexList=[{regex:h.multiLineCComments,css:\"comments\"},{regex:h.singleLineCComments,css:\"comments\"},{regex:h.doubleQuotedString,css:\"string\"},{regex:h.singleQuotedString,css:\"string\"},{regex:/\\#[a-fA-F0-9]{3,6}/g,css:\"value\"},{regex:/\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,css:\"value\"},{regex:/\\$\\w+/g,css:\"variable\"},{regex:new RegExp(this.getKeywords(f),\"g\"),css:\"color3\"},{regex:new RegExp(this.getKeywords(g),\"g\"),css:\"preprocessor\"},{regex:new RegExp(a(c),\"gm\"),css:\"keyword\"},{regex:new RegExp(b(d),\"g\"),css:\"value\"},{regex:new RegExp(this.getKeywords(e),\"g\"),css:\"color1\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sass\",\"scss\"],SyntaxHighlighter.brushes.Sass=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"val sealed case def true trait implicit forSome import match object null finally super override try lazy for var catch throw type extends class while with new final yield abstract else do if return protected private this package false\",b=\"[_:=><%#@]+\";this.regexList=[{regex:SyntaxHighlighter.regexLib.singleLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineCComments,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.singleQuotedString,css:\"string\"},{regex:/0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,css:\"value\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"},{regex:new RegExp(b,\"gm\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"scala\"],SyntaxHighlighter.brushes.Scala=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"abs avg case cast coalesce convert count current_timestamp current_user day isnull left lower month nullif replace right session_user space substring sum system_user upper user year\",b=\"absolute action add after alter as asc at authorization begin bigint binary bit by cascade char character check checkpoint close collate column commit committed connect connection constraint contains continue create cube current current_date current_time cursor database date deallocate dec decimal declare default delete desc distinct double drop dynamic else end end-exec escape except exec execute false fetch first float for force foreign forward free from full function global goto grant group grouping having hour ignore index inner insensitive insert instead int integer intersect into is isolation key last level load local max min minute modify move name national nchar next no numeric of off on only open option order out output partial password precision prepare primary prior privileges procedure public read real references relative repeatable restrict return returns revoke rollback rollup rows rule schema scroll second section select sequence serializable set size smallint static statistics table temp temporary then time timestamp to top transaction translation trigger true truncate uncommitted union unique update values varchar varying view when where with work\",c=\"all and any between cross in join like not null or outer some\";this.regexList=[{regex:/--(.*)$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,css:\"string\"},{regex:SyntaxHighlighter.regexLib.multiLineSingleQuotedString,css:\"string\"},{regex:new RegExp(this.getKeywords(a),\"gmi\"),css:\"color2\"},{regex:new RegExp(this.getKeywords(c),\"gmi\"),css:\"color1\"},{regex:new RegExp(this.getKeywords(b),\"gmi\"),css:\"keyword\"}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"sql\"],SyntaxHighlighter.brushes.Sql=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){var a=\"AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType Date Decimal Declare Default Delegate Dim DirectCast Do Double Each Else ElseIf End Enum Erase Error Event Exit False Finally For Friend Function Get GetType GoSub GoTo Handles If Implements Imports In Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing NotInheritable NotOverridable Object On Option Optional Or OrElse Overloads Overridable Overrides ParamArray Preserve Private Property Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume Return Select Set Shadows Shared Short Single Static Step Stop String Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until Variant When While With WithEvents WriteOnly Xor\";this.regexList=[{regex:/'.*$/gm,css:\"comments\"},{regex:SyntaxHighlighter.regexLib.doubleQuotedString,css:\"string\"},{regex:/^\\s*#.*$/gm,css:\"preprocessor\"},{regex:new RegExp(this.getKeywords(a),\"gm\"),css:\"keyword\"}],this.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags)}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"vb\",\"vbnet\"],SyntaxHighlighter.brushes.Vb=a,\"undefined\"!=typeof exports?exports.Brush=a:null}(),function(){function a(){function a(a,b){var c=SyntaxHighlighter.Match,d=a[0],e=new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)\",\"xg\").exec(d),f=[];if(null!=a.attributes)for(var g,h=new XRegExp(\"(?<name> [\\\\w:\\\\-\\\\.]+)\\\\s*=\\\\s*(?<value> \\\".*?\\\"|'.*?'|\\\\w+)\",\"xg\");null!=(g=h.exec(d));)f.push(new c(g.name,a.index+g.index,\"color1\")),f.push(new c(g.value,a.index+g.index+g[0].indexOf(g.value),\"string\"));return null!=e&&f.push(new c(e.name,a.index+e[0].indexOf(e.name),\"keyword\")),f}this.regexList=[{regex:new XRegExp(\"(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)\",\"gm\"),css:\"color2\"},{regex:SyntaxHighlighter.regexLib.xmlComments,css:\"comments\"},{regex:new XRegExp(\"(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)\",\"sg\"),func:a}]}SyntaxHighlighter=SyntaxHighlighter||(\"undefined\"!=typeof require?require(\"shCore\").SyntaxHighlighter:null),a.prototype=new SyntaxHighlighter.Highlighter,a.aliases=[\"xml\",\"xhtml\",\"xslt\",\"html\"],SyntaxHighlighter.brushes.Xml=a,\"undefined\"!=typeof exports?exports.Brush=a:null}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0!important;-webkit-border-radius:0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:400!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:700!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:0!important;background:#fff!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:#000!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:#000!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:#00f!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:700!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:700!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:#000!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:#000!important}.syntaxhighlighter caption{color:#000!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:#fff!important}.syntaxhighlighter.printing .line .content{border:0!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:#00f!important;background:#fff!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:#00f!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:#fff!important;background:#6ce26c!important;border:0!important}.syntaxhighlighter .toolbar a{color:#fff!important}.syntaxhighlighter .toolbar a:hover{color:#000!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:#000!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:#00f!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:700!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:700!important}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/clipboard/clipboard.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a){if(\"object\"==typeof exports&&\"undefined\"!=typeof module)module.exports=a();else if(\"function\"==typeof define&&define.amd)define([],a);else{var b;b=\"undefined\"!=typeof window?window:\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:this,b.Clipboard=a()}}(function(){var a;return function b(a,c,d){function e(g,h){if(!c[g]){if(!a[g]){var i=\"function\"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error(\"Cannot find module '\"+g+\"'\");throw j.code=\"MODULE_NOT_FOUND\",j}var k=c[g]={exports:{}};a[g][0].call(k.exports,function(b){var c=a[g][1][b];return e(c?c:b)},k,k.exports,b,a,c,d)}return c[g].exports}for(var f=\"function\"==typeof require&&require,g=0;g<d.length;g++)e(d[g]);return e}({1:[function(a,b,c){function d(a,b){for(;a&&a!==document;){if(a.matches(b))return a;a=a.parentNode}}if(Element&&!Element.prototype.matches){var e=Element.prototype;e.matches=e.matchesSelector||e.mozMatchesSelector||e.msMatchesSelector||e.oMatchesSelector||e.webkitMatchesSelector}b.exports=d},{}],2:[function(a,b,c){function d(a,b,c,d,f){var g=e.apply(this,arguments);return a.addEventListener(c,g,f),{destroy:function(){a.removeEventListener(c,g,f)}}}function e(a,b,c,d){return function(c){c.delegateTarget=f(c.target,b),c.delegateTarget&&d.call(a,c)}}var f=a(\"./closest\");b.exports=d},{\"./closest\":1}],3:[function(a,b,c){c.node=function(a){return void 0!==a&&a instanceof HTMLElement&&1===a.nodeType},c.nodeList=function(a){var b=Object.prototype.toString.call(a);return void 0!==a&&(\"[object NodeList]\"===b||\"[object HTMLCollection]\"===b)&&\"length\"in a&&(0===a.length||c.node(a[0]))},c.string=function(a){return\"string\"==typeof a||a instanceof String},c.fn=function(a){var b=Object.prototype.toString.call(a);return\"[object Function]\"===b}},{}],4:[function(a,b,c){function d(a,b,c){if(!a&&!b&&!c)throw new Error(\"Missing required arguments\");if(!h.string(b))throw new TypeError(\"Second argument must be a String\");if(!h.fn(c))throw new TypeError(\"Third argument must be a Function\");if(h.node(a))return e(a,b,c);if(h.nodeList(a))return f(a,b,c);if(h.string(a))return g(a,b,c);throw new TypeError(\"First argument must be a String, HTMLElement, HTMLCollection, or NodeList\")}function e(a,b,c){return a.addEventListener(b,c),{destroy:function(){a.removeEventListener(b,c)}}}function f(a,b,c){return Array.prototype.forEach.call(a,function(a){a.addEventListener(b,c)}),{destroy:function(){Array.prototype.forEach.call(a,function(a){a.removeEventListener(b,c)})}}}function g(a,b,c){return i(document.body,a,b,c)}var h=a(\"./is\"),i=a(\"delegate\");b.exports=d},{\"./is\":3,delegate:2}],5:[function(a,b,c){function d(a){var b;if(\"SELECT\"===a.nodeName)a.focus(),b=a.value;else if(\"INPUT\"===a.nodeName||\"TEXTAREA\"===a.nodeName)a.focus(),a.setSelectionRange(0,a.value.length),b=a.value;else{a.hasAttribute(\"contenteditable\")&&a.focus();var c=window.getSelection(),d=document.createRange();d.selectNodeContents(a),c.removeAllRanges(),c.addRange(d),b=c.toString()}return b}b.exports=d},{}],6:[function(a,b,c){function d(){}d.prototype={on:function(a,b,c){var d=this.e||(this.e={});return(d[a]||(d[a]=[])).push({fn:b,ctx:c}),this},once:function(a,b,c){function d(){e.off(a,d),b.apply(c,arguments)}var e=this;return d._=b,this.on(a,d,c)},emit:function(a){var b=[].slice.call(arguments,1),c=((this.e||(this.e={}))[a]||[]).slice(),d=0,e=c.length;for(d;d<e;d++)c[d].fn.apply(c[d].ctx,b);return this},off:function(a,b){var c=this.e||(this.e={}),d=c[a],e=[];if(d&&b)for(var f=0,g=d.length;f<g;f++)d[f].fn!==b&&d[f].fn._!==b&&e.push(d[f]);return e.length?c[a]=e:delete c[a],this}},b.exports=d},{}],7:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"select\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"select\"));else{var g={exports:{}};f(g,e.select),e.clipboardAction=g.exports}}(this,function(a,b){\"use strict\";function c(a){return a&&a.__esModule?a:{\"default\":a}}function d(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}var e=c(b),f=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(a){return typeof a}:function(a){return a&&\"function\"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?\"symbol\":typeof a},g=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),h=function(){function a(b){d(this,a),this.resolveOptions(b),this.initSelection()}return g(a,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=a.action,this.emitter=a.emitter,this.target=a.target,this.text=a.text,this.trigger=a.trigger,this.selectedText=\"\"}},{key:\"initSelection\",value:function(){this.text?this.selectFake():this.target&&this.selectTarget()}},{key:\"selectFake\",value:function(){var a=this,b=\"rtl\"==document.documentElement.getAttribute(\"dir\");this.removeFake(),this.fakeHandlerCallback=function(){return a.removeFake()},this.fakeHandler=document.body.addEventListener(\"click\",this.fakeHandlerCallback)||!0,this.fakeElem=document.createElement(\"textarea\"),this.fakeElem.style.fontSize=\"12pt\",this.fakeElem.style.border=\"0\",this.fakeElem.style.padding=\"0\",this.fakeElem.style.margin=\"0\",this.fakeElem.style.position=\"absolute\",this.fakeElem.style[b?\"right\":\"left\"]=\"-9999px\";var c=window.pageYOffset||document.documentElement.scrollTop;this.fakeElem.addEventListener(\"focus\",window.scrollTo(0,c)),this.fakeElem.style.top=c+\"px\",this.fakeElem.setAttribute(\"readonly\",\"\"),this.fakeElem.value=this.text,document.body.appendChild(this.fakeElem),this.selectedText=(0,e[\"default\"])(this.fakeElem),this.copyText()}},{key:\"removeFake\",value:function(){this.fakeHandler&&(document.body.removeEventListener(\"click\",this.fakeHandlerCallback),this.fakeHandler=null,this.fakeHandlerCallback=null),this.fakeElem&&(document.body.removeChild(this.fakeElem),this.fakeElem=null)}},{key:\"selectTarget\",value:function(){this.selectedText=(0,e[\"default\"])(this.target),this.copyText()}},{key:\"copyText\",value:function(){var a=void 0;try{a=document.execCommand(this.action)}catch(b){a=!1}this.handleResult(a)}},{key:\"handleResult\",value:function(a){this.emitter.emit(a?\"success\":\"error\",{action:this.action,text:this.selectedText,trigger:this.trigger,clearSelection:this.clearSelection.bind(this)})}},{key:\"clearSelection\",value:function(){this.target&&this.target.blur(),window.getSelection().removeAllRanges()}},{key:\"destroy\",value:function(){this.removeFake()}},{key:\"action\",set:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:\"copy\";if(this._action=a,\"copy\"!==this._action&&\"cut\"!==this._action)throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"')},get:function(){return this._action}},{key:\"target\",set:function(a){if(void 0!==a){if(!a||\"object\"!==(\"undefined\"==typeof a?\"undefined\":f(a))||1!==a.nodeType)throw new Error('Invalid \"target\" value, use a valid Element');if(\"copy\"===this.action&&a.hasAttribute(\"disabled\"))throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');if(\"cut\"===this.action&&(a.hasAttribute(\"readonly\")||a.hasAttribute(\"disabled\")))throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');this._target=a}},get:function(){return this._target}}]),a}();a.exports=h})},{select:5}],8:[function(b,c,d){!function(e,f){if(\"function\"==typeof a&&a.amd)a([\"module\",\"./clipboard-action\",\"tiny-emitter\",\"good-listener\"],f);else if(\"undefined\"!=typeof d)f(c,b(\"./clipboard-action\"),b(\"tiny-emitter\"),b(\"good-listener\"));else{var g={exports:{}};f(g,e.clipboardAction,e.tinyEmitter,e.goodListener),e.clipboard=g.exports}}(this,function(a,b,c,d){\"use strict\";function e(a){return a&&a.__esModule?a:{\"default\":a}}function f(a,b){if(!(a instanceof b))throw new TypeError(\"Cannot call a class as a function\")}function g(a,b){if(!a)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return!b||\"object\"!=typeof b&&\"function\"!=typeof b?a:b}function h(a,b){if(\"function\"!=typeof b&&null!==b)throw new TypeError(\"Super expression must either be null or a function, not \"+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}function i(a,b){var c=\"data-clipboard-\"+a;if(b.hasAttribute(c))return b.getAttribute(c)}var j=e(b),k=e(c),l=e(d),m=function(){function a(a,b){for(var c=0;c<b.length;c++){var d=b[c];d.enumerable=d.enumerable||!1,d.configurable=!0,\"value\"in d&&(d.writable=!0),Object.defineProperty(a,d.key,d)}}return function(b,c,d){return c&&a(b.prototype,c),d&&a(b,d),b}}(),n=function(a){function b(a,c){f(this,b);var d=g(this,(b.__proto__||Object.getPrototypeOf(b)).call(this));return d.resolveOptions(c),d.listenClick(a),d}return h(b,a),m(b,[{key:\"resolveOptions\",value:function(){var a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};this.action=\"function\"==typeof a.action?a.action:this.defaultAction,this.target=\"function\"==typeof a.target?a.target:this.defaultTarget,this.text=\"function\"==typeof a.text?a.text:this.defaultText}},{key:\"listenClick\",value:function(a){var b=this;this.listener=(0,l[\"default\"])(a,\"click\",function(a){return b.onClick(a)})}},{key:\"onClick\",value:function(a){var b=a.delegateTarget||a.currentTarget;this.clipboardAction&&(this.clipboardAction=null),this.clipboardAction=new j[\"default\"]({action:this.action(b),target:this.target(b),text:this.text(b),trigger:b,emitter:this})}},{key:\"defaultAction\",value:function(a){return i(\"action\",a)}},{key:\"defaultTarget\",value:function(a){var b=i(\"target\",a);if(b)return document.querySelector(b)}},{key:\"defaultText\",value:function(a){return i(\"text\",a)}},{key:\"destroy\",value:function(){this.listener.destroy(),this.clipboardAction&&(this.clipboardAction.destroy(),this.clipboardAction=null)}}]),b}(k[\"default\"]);a.exports=n})},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)});"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/codemirror/codemirror.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n.CodeMirror{line-height:1.5;font-family:monospace}.CodeMirror-scroll{overflow:auto;height:300px;position:relative}.CodeMirror-gutter{position:absolute;left:0;top:0;z-index:10;background-color:#f7f7f7;border-right:1px solid #eee;min-width:2em;height:100%}.CodeMirror-gutter-text{color:#aaa;text-align:right;padding:.4em .2em .4em .4em;white-space:pre!important}.CodeMirror-lines{padding:.4em}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;-o-border-radius:0;border-radius:0;border-width:0;margin:0;padding:0;background:transparent;font-family:inherit;font-size:inherit;padding:0;margin:0;white-space:pre;word-wrap:normal}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;line-height:1.4}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror textarea{outline:0!important}.CodeMirror pre.CodeMirror-cursor{z-index:10;position:absolute;visibility:hidden;border-left:1px solid #000;margin-top:-2px}.CodeMirror-focused pre.CodeMirror-cursor{visibility:visible}span.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused span.CodeMirror-selected{background:#d2dcf8}.CodeMirror-searching{background:#ffa}.cm-s-default span.cm-keyword{color:#708}.cm-s-default span.cm-atom{color:#219}.cm-s-default span.cm-number{color:#164}.cm-s-default span.cm-def{color:#00f}.cm-s-default span.cm-variable{color:#000}.cm-s-default span.cm-variable-2{color:#05a}.cm-s-default span.cm-variable-3{color:#085}.cm-s-default span.cm-property{color:#000}.cm-s-default span.cm-operator{color:#000}.cm-s-default span.cm-comment{color:#a50}.cm-s-default span.cm-string{color:#a11}.cm-s-default span.cm-string-2{color:#f50}.cm-s-default span.cm-meta{color:#555}.cm-s-default span.cm-error{color:red}.cm-s-default span.cm-qualifier{color:#555}.cm-s-default span.cm-builtin{color:#30a}.cm-s-default span.cm-bracket{color:#cc7}.cm-s-default span.cm-tag{color:#170}.cm-s-default span.cm-attribute{color:#00c}.cm-s-default span.cm-header{color:#a0a}.cm-s-default span.cm-quote{color:#090}.cm-s-default span.cm-hr{color:#999}.cm-s-default span.cm-link{color:#00c}span.cm-header,span.cm-strong{font-weight:700}span.cm-em{font-style:italic}span.cm-emstrong{font-style:italic;font-weight:700}span.cm-link{text-decoration:underline}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/codemirror/codemirror.js",
    "content": "/*! UEditorPlus v2.0.0*/\nvar CodeMirror=function(){function a(f,j){function r(a){return a>=0&&a<Yb.size}function u(a){return m(Yb,a)}function A(a,b){hc=!0;for(var c=b-a.height,d=a;d;d=d.parent)d.height+=c}function B(a){var b={line:0,ch:0};ga(b,{line:Yb.size-1,ch:u(Yb.size-1).text.length},X(a),b,b),bc=!0}function M(a){var b=[];return Yb.iter(0,Yb.size,function(a){b.push(a.text)}),b.join(\"\\n\")}function N(a){function b(a){var c=pb(a,!0);if(c&&!E(c,g)){Vb||ea(),g=c,Fa(d,c),bc=!1;var e=ya();(c.line>=e.to||c.line<e.from)&&(f=setTimeout(Ab(function(){b(a)}),150))}}Ea(a.shiftKey);for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Jb&&c!=Kb)return;for(var c=w(a);c!=Fb;c=c.parentNode)if(c.parentNode==Mb)return Bb.onGutterClick&&Bb.onGutterClick(vc,J(Mb.childNodes,c)+oc,a),t(a);var d=pb(a);switch(x(a)){case 3:return void(S&&!L&&qb(a));case 2:return void(d&&Ia(d.line,d.ch,!0))}if(!d)return void(w(a)==Ib&&t(a));Vb||ea();var e=+new Date;if(_b&&_b.time>e-400&&E(_b.pos,d))return t(a),setTimeout(ua,20),Qa(d.line);if($b&&$b.time>e-400&&E($b.pos,d))return _b={time:e,pos:d},t(a),Pa(d);$b={time:e,pos:d};var f,g=d;if(R&&!E(lc.from,lc.to)&&!F(d,lc.from)&&!F(lc.to,d)){U&&(Nb.draggable=!0);var h=y(Eb,\"mouseup\",Ab(function(b){U&&(Nb.draggable=!1),ac=!1,h(),Math.abs(a.clientX-b.clientX)+Math.abs(a.clientY-b.clientY)<10&&(t(b),Ia(d.line,d.ch,!0),ua())}),!0);return void(ac=!0)}t(a),Ia(d.line,d.ch,!0);var i=y(Eb,\"mousemove\",Ab(function(a){clearTimeout(f),t(a),b(a)}),!0),h=y(Eb,\"mouseup\",Ab(function(a){clearTimeout(f);var b=pb(a);b&&Fa(d,b),t(a),ua(),bc=!0,i(),h()}),!0)}function V(a){for(var b=w(a);b!=Fb;b=b.parentNode)if(b.parentNode==Mb)return t(a);var c=pb(a);c&&(_b={time:+new Date,pos:c},t(a),Pa(c))}function $(a){function b(a,b){var d=new FileReader;d.onload=function(){f[b]=d.result,++g==e&&(c=Ka(c),Ab(function(){var a=la(f.join(\"\"),c,c);Fa(c,a)})())},d.readAsText(a)}a.preventDefault();var c=pb(a,!0),d=a.dataTransfer.files;if(c&&!Bb.readOnly)if(d&&d.length&&window.FileReader&&window.File)for(var e=d.length,f=Array(e),g=0,h=0;h<e;++h)b(d[h],h);else try{var f=a.dataTransfer.getData(\"Text\");if(f){var i=la(f,c,c),j=lc.from,k=lc.to;Fa(c,i),ac&&la(\"\",j,k),ua()}}catch(a){}}function _(a){var b=pa();H(b),a.dataTransfer.setDragImage(W,0,0),a.dataTransfer.setData(\"Text\",b)}function aa(a){var d,e,f=Z[a.keyCode],g=Q[Bb.keyMap].auto;if(null==f||a.altGraphKey)return g&&(Bb.keyMap=g),null;if(a.altKey&&(f=\"Alt-\"+f),a.ctrlKey&&(f=\"Ctrl-\"+f),a.metaKey&&(f=\"Cmd-\"+f),a.shiftKey&&(d=b(\"Shift-\"+f,Bb.extraKeys,Bb.keyMap))?e=!0:d=b(f,Bb.extraKeys,Bb.keyMap),\"string\"==typeof d&&(d=P.propertyIsEnumerable(d)?P[d]:null),!g||!d&&c(a)||(Bb.keyMap=g),!d)return!1;if(e){var h=Zb;Zb=null,d(vc),Zb=h}else d(vc);return t(a),!0}function ba(a){Vb||ea();var b=a.keyCode;if(T&&27==b&&(a.returnValue=!1),Ea(16==b||a.shiftKey),!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a))){var c=aa(a);window.opera&&(wc=c?a.keyCode:null,!c&&(L?a.metaKey:a.ctrlKey)&&88==a.keyCode&&ma(\"\"))}}function ca(a){if(window.opera&&a.keyCode==wc)return wc=null,void t(a);if((!Bb.onKeyEvent||!Bb.onKeyEvent(vc,s(a)))&&(!window.opera||a.which||!aa(a))){if(Bb.electricChars&&Tb.electricChars){var b=String.fromCharCode(null==a.charCode?a.keyCode:a.charCode);Tb.electricChars.indexOf(b)>-1&&setTimeout(Ab(function(){Sa(lc.to.line,\"smart\")}),75)}ra()}}function da(a){Bb.onKeyEvent&&Bb.onKeyEvent(vc,s(a))||16==a.keyCode&&(Zb=null)}function ea(){Bb.readOnly||(Vb||(Bb.onFocus&&Bb.onFocus(vc),Vb=!0,Fb.className.search(/\\bCodeMirror-focused\\b/)==-1&&(Fb.className+=\" CodeMirror-focused\"),gc||ta(!0)),qa(),rb())}function fa(){Vb&&(Bb.onBlur&&Bb.onBlur(vc),Vb=!1,Fb.className=Fb.className.replace(\" CodeMirror-focused\",\"\")),clearInterval(Sb),setTimeout(function(){Vb||(Zb=null)},150)}function ga(a,b,c,d,e){if(tc){var f=[];for(Yb.iter(a.line,b.line+1,function(a){f.push(a.text)}),tc.addChange(a.line,c.length,f);tc.done.length>Bb.undoDepth;)tc.done.shift()}ka(a,b,c,d,e)}function ha(a,b){var c=a.pop();if(c){var d=[],e=c.start+c.added;Yb.iter(c.start,e,function(a){d.push(a.text)}),b.push({start:c.start,added:c.old.length,old:d});var f=Ka({line:c.start+c.old.length-1,ch:I(d[d.length-1],c.old[c.old.length-1])});ka({line:c.start,ch:0},{line:e-1,ch:u(e-1).text.length},c.old,f,f),bc=!0}}function ia(){ha(tc.done,tc.undone)}function ja(){ha(tc.undone,tc.done)}function ka(a,b,c,d,e){function f(a){return a<=Math.min(b.line,b.line+s)?a:a+s}var g=!1,h=rc.length;Bb.lineWrapping||Yb.iter(a.line,b.line,function(a){if(a.text.length==h)return g=!0,!0}),(a.line!=b.line||c.length>1)&&(hc=!0);var j=b.line-a.line,k=u(a.line),l=u(b.line);if(0==a.ch&&0==b.ch&&\"\"==c[c.length-1]){var m=[],n=null;a.line?(n=u(a.line-1),n.fixMarkEnds(l)):l.fixMarkStarts();for(var o=0,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],n));j&&Yb.remove(a.line,j,ic),m.length&&Yb.insert(a.line,m)}else if(k==l)if(1==c.length)k.replace(a.ch,b.ch,c[0]);else{l=k.split(b.ch,c[c.length-1]),k.replace(a.ch,null,c[0]),k.fixMarkEnds(l);for(var m=[],o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));m.push(l),Yb.insert(a.line+1,m)}else if(1==c.length)k.replace(a.ch,null,c[0]),l.replace(null,b.ch,\"\"),k.append(l),Yb.remove(a.line+1,j,ic);else{var m=[];k.replace(a.ch,null,c[0]),l.replace(null,b.ch,c[c.length-1]),k.fixMarkEnds(l);for(var o=1,p=c.length-1;o<p;++o)m.push(i.inheritMarks(c[o],k));j>1&&Yb.remove(a.line+1,j-1,ic),Yb.insert(a.line+1,m)}if(Bb.lineWrapping){var q=Ib.clientWidth/mb()-3;Yb.iter(a.line,a.line+c.length,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/q)||1;b!=a.height&&A(a,b)}})}else Yb.iter(a.line,o+c.length,function(a){var b=a.text;b.length>h&&(rc=b,h=b.length,kc=null,g=!1)}),g&&(h=0,rc=\"\",kc=null,Yb.iter(0,Yb.size,function(a){var b=a.text;b.length>h&&(h=b.length,rc=b)}));for(var r=[],s=c.length-j-1,o=0,t=Ub.length;o<t;++o){var v=Ub[o];v<a.line?r.push(v):v>b.line&&r.push(v+s)}var w=a.line+Math.min(c.length,500);vb(a.line,w),r.push(w),Ub=r,xb(100),dc.push({from:a.line,to:b.line+1,diff:s});var x={from:a,to:b,text:c};if(ec){for(var y=ec;y.next;y=y.next);y.next=x}else ec=x;Ga(d,e,f(lc.from.line),f(lc.to.line)),Jb.style.height=Yb.height*lb()+2*nb()+\"px\"}function la(a,b,c){function d(d){if(F(d,b))return d;if(!F(c,d))return e;var f=d.line+a.length-(c.line-b.line)-1,g=d.ch;return d.line==c.line&&(g+=a[a.length-1].length-(c.ch-(c.line==b.line?b.ch:0))),{line:f,ch:g}}b=Ka(b),c=c?Ka(c):b,a=X(a);var e;return na(a,b,c,function(a){return e=a,{from:d(lc.from),to:d(lc.to)}}),e}function ma(a,b){na(X(a),lc.from,lc.to,function(a){return\"end\"==b?{from:a,to:a}:\"start\"==b?{from:lc.from,to:lc.from}:{from:lc.from,to:a}})}function na(a,b,c,d){var e=1==a.length?a[0].length+b.ch:a[a.length-1].length,f=d({line:b.line+a.length-1,ch:e});ga(b,c,a,f.from,f.to)}function oa(a,b){var c=a.line,d=b.line;if(c==d)return u(c).text.slice(a.ch,b.ch);var e=[u(c).text.slice(a.ch)];return Yb.iter(c+1,d,function(a){e.push(a.text)}),e.push(u(d).text.slice(0,b.ch)),e.join(\"\\n\")}function pa(){return oa(lc.from,lc.to)}function qa(){xc||Wb.set(Bb.pollInterval,function(){yb(),sa(),Vb&&qa(),zb()})}function ra(){function a(){yb();var c=sa();c||b?(xc=!1,qa()):(b=!0,Wb.set(60,a)),zb()}var b=!1;xc=!0,Wb.set(20,a)}function sa(){if(gc||!Vb||Y(Hb))return!1;var a=Hb.value;if(a==yc)return!1;Zb=null;for(var b=0,c=Math.min(yc.length,a.length);b<c&&yc[b]==a[b];)++b;return b<yc.length?lc.from={line:lc.from.line,ch:lc.from.ch-(yc.length-b)}:mc&&E(lc.from,lc.to)&&(lc.to={line:lc.to.line,ch:Math.min(u(lc.to.line).text.length,lc.to.ch+(a.length-b))}),ma(a.slice(b),\"end\"),yc=a,!0}function ta(a){E(lc.from,lc.to)?a&&(yc=Hb.value=\"\"):(yc=\"\",Hb.value=pa(),Hb.select())}function ua(){Bb.readOnly||Hb.focus()}function va(){if(Pb.getBoundingClientRect){var a=Pb.getBoundingClientRect();if(!T||a.top!=a.bottom){var b=window.innerHeight||Math.max(document.body.offsetHeight,document.documentElement.offsetHeight);(a.top<0||a.bottom>b)&&Pb.scrollIntoView()}}}function wa(){var a=ib(lc.inverted?lc.from:lc.to),b=Bb.lineWrapping?Math.min(a.x,Nb.offsetWidth):a.x;return xa(b,a.y,b,a.yBot)}function xa(a,b,c,d){var e=ob(),f=nb(),g=lb();b+=f,d+=f,a+=e,c+=e;var h=Ib.clientHeight,i=Ib.scrollTop,j=!1,k=!0;b<i?(Ib.scrollTop=Math.max(0,b-2*g),j=!0):d>i+h&&(Ib.scrollTop=d+g-h,j=!0);var l=Ib.clientWidth,m=Ib.scrollLeft,n=Bb.fixedGutter?Lb.clientWidth:0;return a<m+n?(a<50&&(a=0),Ib.scrollLeft=Math.max(0,a-10-n),j=!0):c>l+m-3&&(Ib.scrollLeft=c+10-l,j=!0,c>Jb.clientWidth&&(k=!1)),j&&Bb.onScroll&&Bb.onScroll(vc),k}function ya(){var a=lb(),b=Ib.scrollTop-nb(),c=Math.max(0,Math.floor(b/a)),d=Math.ceil((b+Ib.clientHeight)/a);return{from:o(Yb,c),to:o(Yb,d)}}function za(a,b){if(!Ib.clientWidth)return void(oc=pc=nc=0);var c=ya();if(!(a!==!0&&0==a.length&&c.from>=oc&&c.to<=pc)){var d=Math.max(c.from-100,0),e=Math.min(Yb.size,c.to+100);oc<d&&d-oc<20&&(d=oc),pc>e&&pc-e<20&&(e=Math.min(Yb.size,pc));for(var f=a===!0?[]:Aa([{from:oc,to:pc,domStart:0}],a),g=0,h=0;h<f.length;++h){var i=f[h];i.from<d&&(i.domStart+=d-i.from,i.from=d),i.to>e&&(i.to=e),i.from>=i.to?f.splice(h--,1):g+=i.to-i.from}if(g!=e-d){f.sort(function(a,b){return a.domStart-b.domStart});var j=lb(),k=Lb.style.display;Qb.style.display=Lb.style.display=\"none\",Ba(d,e,f),Qb.style.display=\"\";var l=d!=oc||e!=pc||qc!=Ib.clientHeight+j;if(l&&(qc=Ib.clientHeight+j),oc=d,pc=e,nc=p(Yb,d),Kb.style.top=nc*j+\"px\",Jb.style.height=Yb.height*j+2*nb()+\"px\",Qb.childNodes.length!=pc-oc)throw new Error(\"BAD PATCH! \"+JSON.stringify(f)+\" size=\"+(pc-oc)+\" nodes=\"+Qb.childNodes.length);if(Bb.lineWrapping){kc=Ib.clientWidth;var m=Qb.firstChild;Yb.iter(oc,pc,function(a){if(!a.hidden){var b=Math.round(m.offsetHeight/j)||1;a.height!=b&&(A(a,b),hc=!0)}m=m.nextSibling})}else null==kc&&(kc=gb(rc)),kc>Ib.clientWidth?(Nb.style.width=kc+\"px\",Jb.style.width=\"\",Jb.style.width=Ib.scrollWidth+\"px\"):Nb.style.width=Jb.style.width=\"\";return Lb.style.display=k,(l||hc)&&Ca(),Da(),!b&&Bb.onUpdate&&Bb.onUpdate(vc),!0}}}function Aa(a,b){for(var c=0,d=b.length||0;c<d;++c){for(var e=b[c],f=[],g=e.diff||0,h=0,i=a.length;h<i;++h){var j=a[h];e.to<=j.from&&e.diff?f.push({from:j.from+g,to:j.to+g,domStart:j.domStart}):e.to<=j.from||e.from>=j.to?f.push(j):(e.from>j.from&&f.push({from:j.from,to:e.from,domStart:j.domStart}),e.to<j.to&&f.push({from:e.to+g,to:j.to+g,domStart:j.domStart+(e.to-j.from)}))}a=f}return a}function Ba(a,b,c){function d(a){var b=a.nextSibling;return a.parentNode.removeChild(a),b}if(c.length){for(var e=0,f=Qb.firstChild,g=0;g<c.length;++g){for(var h=c[g];h.domStart>e;)f=d(f),e++;for(var i=0,j=h.to-h.from;i<j;++i)f=f.nextSibling,e++}for(;f;)f=d(f)}else Qb.innerHTML=\"\";var k=c.shift(),f=Qb.firstChild,i=a,l=lc.from.line,m=lc.to.line,n=l<a&&m>=a,o=Eb.createElement(\"div\");Yb.iter(a,b,function(a){var b=null,d=null;n?(b=0,m==i&&(n=!1,d=lc.to.ch)):l==i&&(m==i?(b=lc.from.ch,d=lc.to.ch):(n=!0,b=lc.from.ch)),k&&k.to==i&&(k=c.shift()),!k||k.from>i?(a.hidden?o.innerHTML=\"<pre></pre>\":o.innerHTML=a.getHTML(b,d,!0,sc),Qb.insertBefore(o.firstChild,f)):f=f.nextSibling,++i})}function Ca(){if(Bb.gutter||Bb.lineNumbers){var a=Kb.offsetHeight,b=Ib.clientHeight;Lb.style.height=(a-b<2?b:a)+\"px\";var c=[],d=oc;Yb.iter(oc,Math.max(pc,oc+1),function(a){if(a.hidden)c.push(\"<pre></pre>\");else{var b=a.gutterMarker,e=Bb.lineNumbers?d+Bb.firstLineNumber:null;b&&b.text?e=b.text.replace(\"%N%\",null!=e?e:\"\"):null==e&&(e=\" \"),c.push(b&&b.style?'<pre class=\"'+b.style+'\">':\"<pre>\",e);for(var f=1;f<a.height;++f)c.push(\"<br/>&#160;\");c.push(\"</pre>\")}++d}),Lb.style.display=\"none\",Mb.innerHTML=c.join(\"\");for(var e=String(Yb.size).length,f=Mb.firstChild,g=D(f),h=\"\";g.length+h.length<e;)h+=\" \";h&&f.insertBefore(Eb.createTextNode(h),f.firstChild),Lb.style.display=\"\",Nb.style.marginLeft=Lb.offsetWidth+\"px\",hc=!1}}function Da(){var a=lc.inverted?lc.from:lc.to,b=(lb(),ib(a,!0)),c=C(Fb),d=C(Qb);Gb.style.top=b.y+d.top-c.top+\"px\",Gb.style.left=b.x+d.left-c.left+\"px\",E(lc.from,lc.to)?(Pb.style.top=b.y+\"px\",Pb.style.left=(Bb.lineWrapping?Math.min(b.x,Nb.offsetWidth):b.x)+\"px\",Pb.style.display=\"\"):Pb.style.display=\"none\"}function Ea(a){Zb=a?Zb||(lc.inverted?lc.to:lc.from):null}function Fa(a,b){var c=Zb&&Ka(Zb);c&&(F(c,a)?a=c:F(b,c)&&(b=c)),Ga(a,b),cc=!0}function Ga(a,b,c,d){if(zc=null,null==c&&(c=lc.from.line,d=lc.to.line),!E(lc.from,a)||!E(lc.to,b)){if(F(b,a)){var e=b;b=a,a=e}a.line!=c&&(a=Ha(a,c,lc.from.ch)),b.line!=d&&(b=Ha(b,d,lc.to.ch)),E(a,b)?lc.inverted=!1:E(a,lc.to)?lc.inverted=!1:E(b,lc.from)&&(lc.inverted=!0),E(a,b)?E(lc.from,lc.to)||dc.push({from:c,to:d+1}):E(lc.from,lc.to)?dc.push({from:a.line,to:b.line+1}):(E(a,lc.from)||(a.line<c?dc.push({from:a.line,to:Math.min(b.line,c)+1}):dc.push({from:c,to:Math.min(d,a.line)+1})),E(b,lc.to)||(b.line<d?dc.push({from:Math.max(c,a.line),to:d+1}):dc.push({from:Math.max(a.line,d),to:b.line+1}))),lc.from=a,lc.to=b,fc=!0}}function Ha(a,b,c){function d(b){for(var d=a.line+b,e=1==b?Yb.size:-1;d!=e;){var f=u(d);if(!f.hidden){var g=a.ch;return(g>c||g>f.text.length)&&(g=f.text.length),{line:d,ch:g}}d+=b}}var e=u(a.line);return e.hidden?a.line>=b?d(1)||d(-1):d(-1)||d(1):a}function Ia(a,b,c){var d=Ka({line:a,ch:b||0});(c?Fa:Ga)(d,d)}function Ja(a){return Math.max(0,Math.min(a,Yb.size-1))}function Ka(a){if(a.line<0)return{line:0,ch:0};if(a.line>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var b=a.ch,c=u(a.line).text.length;return null==b||b>c?{line:a.line,ch:c}:b<0?{line:a.line,ch:0}:a}function La(a,b){function c(){for(var b=f+a,c=a<0?-1:Yb.size;b!=c;b+=a){var d=u(b);if(!d.hidden)return f=b,h=d,!0}}function d(b){if(g==(a<0?0:h.text.length)){if(b||!c())return!1;g=a<0?h.text.length:0}else g+=a;return!0}var e=lc.inverted?lc.from:lc.to,f=e.line,g=e.ch,h=u(f);if(\"char\"==b)d();else if(\"column\"==b)d(!0);else if(\"word\"==b)for(var i=!1;!(a<0)||d();){if(K(h.text.charAt(g)))i=!0;else if(i){a<0&&(a=1,d());break}if(a>0&&!d())break}return{line:f,ch:g}}function Ma(a,b){var c=a<0?lc.from:lc.to;(Zb||E(lc.from,lc.to))&&(c=La(a,b)),Ia(c.line,c.ch,!0)}function Na(a,b){E(lc.from,lc.to)?a<0?la(\"\",La(a,b),lc.to):la(\"\",lc.from,La(a,b)):la(\"\",lc.from,lc.to),cc=!0}function Oa(a,b){var c=0,d=ib(lc.inverted?lc.from:lc.to,!0);null!=zc&&(d.x=zc),\"page\"==b?c=Ib.clientHeight:\"line\"==b&&(c=lb());var e=jb(d.x,d.y+c*a+2);Ia(e.line,e.ch,!0),zc=d.x}function Pa(a){for(var b=u(a.line).text,c=a.ch,d=a.ch;c>0&&K(b.charAt(c-1));)--c;for(;d<b.length&&K(b.charAt(d));)++d;Fa({line:a.line,ch:c},{line:a.line,ch:d})}function Qa(a){Fa({line:a,ch:0},{line:a,ch:u(a).text.length})}function Ra(a){if(E(lc.from,lc.to))return Sa(lc.from.line,a);for(var b=lc.to.line-(lc.to.ch?0:1),c=lc.from.line;c<=b;++c)Sa(c,a)}function Sa(a,b){if(b||(b=\"add\"),\"smart\"==b)if(Tb.indent)var c=ub(a);else b=\"prev\";var d,e=u(a),f=e.indentation(Bb.tabSize),g=e.text.match(/^\\s*/)[0];\"prev\"==b?d=a?u(a-1).indentation(Bb.tabSize):0:\"smart\"==b?d=Tb.indent(c,e.text.slice(g.length),e.text):\"add\"==b?d=f+Bb.indentUnit:\"subtract\"==b&&(d=f-Bb.indentUnit),d=Math.max(0,d);var h=d-f;if(h){var i=\"\",j=0;if(Bb.indentWithTabs)for(var k=Math.floor(d/Bb.tabSize);k;--k)j+=Bb.tabSize,i+=\"\\t\";for(;j<d;)++j,i+=\" \"}else{if(lc.from.line!=a&&lc.to.line!=a)return;var i=g}la(i,{line:a,ch:0},{line:a,ch:g.length})}function Ta(){Tb=a.getMode(Bb,Bb.mode),Yb.iter(0,Yb.size,function(a){a.stateAfter=null}),Ub=[0],xb()}function Ua(){var a=Bb.gutter||Bb.lineNumbers;Lb.style.display=a?\"\":\"none\",a?hc=!0:Qb.parentNode.style.marginLeft=0}function Va(a,b){if(Bb.lineWrapping){Fb.className+=\" CodeMirror-wrap\";var c=Ib.clientWidth/mb()-3;Yb.iter(0,Yb.size,function(a){if(!a.hidden){var b=Math.ceil(a.text.length/c)||1;1!=b&&A(a,b)}}),Nb.style.width=Jb.style.width=\"\"}else Fb.className=Fb.className.replace(\" CodeMirror-wrap\",\"\"),kc=null,rc=\"\",Yb.iter(0,Yb.size,function(a){1==a.height||a.hidden||A(a,1),a.text.length>rc.length&&(rc=a.text)});dc.push({from:0,to:Yb.size})}function Wa(){for(var a='<span class=\"cm-tab\">',b=0;b<Bb.tabSize;++b)a+=\" \";return a+\"</span>\"}function Xa(){sc=Wa(),za(!0)}function Ya(){Ib.className=Ib.className.replace(/\\s*cm-s-\\w+/g,\"\")+Bb.theme.replace(/(^|\\s)\\s*/g,\" cm-s-\")}function Za(){this.set=[]}function $a(a,b,c){function d(a,b,c,d){u(a).addMark(new g(b,c,d,e.set))}a=Ka(a),b=Ka(b);var e=new Za;if(a.line==b.line)d(a.line,a.ch,b.ch,c);else{d(a.line,a.ch,null,c);for(var f=a.line+1,h=b.line;f<h;++f)d(f,null,null,c);d(b.line,null,b.ch,c)}return dc.push({from:a.line,to:b.line+1}),e}function _a(a){a=Ka(a);var b=new h(a.ch);return u(a.line).addMark(b),b}function ab(a,b,c){return\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker={text:b,style:c},hc=!0,a}function bb(a){\"number\"==typeof a&&(a=u(Ja(a))),a.gutterMarker=null,hc=!0}function cb(a,b){var c=a,d=a;return\"number\"==typeof a?d=u(Ja(a)):c=n(a),null==c?null:b(d,c)?(dc.push({from:c,to:c+1}),d):null}function db(a,b){return cb(a,function(a){if(a.className!=b)return a.className=b,!0})}function eb(a,b){return cb(a,function(a,c){if(a.hidden!=b)return a.hidden=b,A(a,b?0:1),!b||lc.from.line!=c&&lc.to.line!=c||Ga(Ha(lc.from,lc.from.line,lc.from.ch),Ha(lc.to,lc.to.line,lc.to.ch)),hc=!0})}function fb(a){if(\"number\"==typeof a){if(!r(a))return null;var b=a;if(a=u(a),!a)return null}else{var b=n(a);if(null==b)return null}var c=a.gutterMarker;return{line:b,handle:a,text:a.text,markerText:c&&c.text,markerClass:c&&c.style,lineClass:a.className}}function gb(a){return Ob.innerHTML=\"<pre><span>x</span></pre>\",Ob.firstChild.firstChild.firstChild.nodeValue=a,Ob.firstChild.firstChild.offsetWidth||10}function hb(a,b){var c=\"\";if(Bb.lineWrapping){var d=a.text.indexOf(\" \",b+2);c=H(a.text.slice(b+1,d<0?a.text.length:d+(T?5:0)))}Ob.innerHTML=\"<pre>\"+a.getHTML(null,null,!1,sc,b)+'<span id=\"CodeMirror-temp-'+Ec+'\">'+H(a.text.charAt(b)||\" \")+\"</span>\"+c+\"</pre>\";var e=document.getElementById(\"CodeMirror-temp-\"+Ec),f=e.offsetTop,g=e.offsetLeft;if(T&&b&&0==f&&0==g){var h=document.createElement(\"span\");h.innerHTML=\"x\",e.parentNode.insertBefore(h,e.nextSibling),f=h.offsetTop}return{top:f,left:g}}function ib(a,b){var c,d=lb(),e=d*(p(Yb,a.line)-(b?nc:0));if(0==a.ch)c=0;else{var f=hb(u(a.line),a.ch);c=f.left,Bb.lineWrapping&&(e+=Math.max(0,f.top))}return{x:c,y:e,yBot:e+d}}function jb(a,b){function c(a){var b=hb(h,a);if(j){var c=Math.round(b.top/d);return Math.max(0,b.left+(c-k)*Ib.clientWidth)}return b.left}b<0&&(b=0);var d=lb(),e=mb(),f=nc+Math.floor(b/d),g=o(Yb,f);if(g>=Yb.size)return{line:Yb.size-1,ch:u(Yb.size-1).text.length};var h=u(g),i=h.text,j=Bb.lineWrapping,k=j?f-p(Yb,g):0;if(a<=0&&0==k)return{line:g,ch:0};for(var l,m=0,n=0,q=i.length,r=Math.min(q,Math.ceil((a+k*Ib.clientWidth*.9)/e));;){var s=c(r);if(!(s<=a&&r<q)){l=s,q=r;break}r=Math.min(q,Math.ceil(1.2*r))}if(a>l)return{line:g,ch:q};for(r=Math.floor(.8*q),s=c(r),s<a&&(m=r,n=s);;){if(q-m<=1)return{line:g,ch:l-a>a-n?m:q};var t=Math.ceil((m+q)/2),v=c(t);v>a?(q=t,l=v):(m=t,n=v)}}function kb(a){var b=ib(a,!0),c=C(Nb);return{x:c.left+b.x,y:c.top+b.y,yBot:c.top+b.yBot}}function lb(){if(null==Cc){Cc=\"<pre>\";for(var a=0;a<49;++a)Cc+=\"x<br/>\";Cc+=\"x</pre>\"}var b=Qb.clientHeight;return b==Bc?Ac:(Bc=b,Ob.innerHTML=Cc,Ac=Ob.firstChild.offsetHeight/50||1,Ob.innerHTML=\"\",Ac)}function mb(){return Ib.clientWidth==Fc?Dc:(Fc=Ib.clientWidth,Dc=gb(\"x\"))}function nb(){return Nb.offsetTop}function ob(){return Nb.offsetLeft}function pb(a,b){var c,d,e=C(Ib,!0);try{c=a.clientX,d=a.clientY}catch(a){return null}if(!b&&(c-e.left>Ib.clientWidth||d-e.top>Ib.clientHeight))return null;var f=C(Nb,!0);return jb(c-f.left,d-f.top)}function qb(a){function b(){var a=X(Hb.value).join(\"\\n\");a!=e&&Ab(ma)(a,\"end\"),Gb.style.position=\"relative\",Hb.style.cssText=d,gc=!1,ta(!0),qa()}var c=pb(a);if(c&&!window.opera){(E(lc.from,lc.to)||F(c,lc.from)||!F(c,lc.to))&&Ab(Ia)(c.line,c.ch);var d=Hb.style.cssText;Gb.style.position=\"absolute\",Hb.style.cssText=\"position: fixed; width: 30px; height: 30px; top: \"+(a.clientY-5)+\"px; left: \"+(a.clientX-5)+\"px; z-index: 1000; background: white; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\",gc=!0;var e=Hb.value=pa();if(ua(),Hb.select(),S){v(a);var f=y(window,\"mouseup\",function(){f(),setTimeout(b,20)},!0)}else setTimeout(b,50)}}function rb(){clearInterval(Sb);var a=!0;Pb.style.visibility=\"\",Sb=setInterval(function(){Pb.style.visibility=(a=!a)?\"\":\"hidden\"},650)}function sb(a){function b(a,b,c){if(a.text)for(var d,e=a.styles,f=g?0:a.text.length-1,i=g?0:e.length-2,j=g?e.length:-2;i!=j;i+=2*h){var k=e[i];if(null==e[i+1]||e[i+1]==m){for(var l=g?0:k.length-1,p=g?k.length:-1;l!=p;l+=h,f+=h)if(f>=b&&f<c&&o.test(d=k.charAt(l))){var q=Gc[d];if(\">\"==q.charAt(1)==g)n.push(d);else{if(n.pop()!=q.charAt(0))return{pos:f,match:!1};if(!n.length)return{pos:f,match:!0}}}}else f+=h*k.length}}var c=lc.inverted?lc.from:lc.to,d=u(c.line),e=c.ch-1,f=e>=0&&Gc[d.text.charAt(e)]||Gc[d.text.charAt(++e)];if(f){for(var g=(f.charAt(0),\">\"==f.charAt(1)),h=g?1:-1,i=d.styles,j=e+1,k=0,l=i.length;k<l;k+=2)if((j-=i[k].length)<=0){var m=i[k+1];break}for(var n=[d.text.charAt(e)],o=/[(){}[\\]]/,k=c.line,l=g?Math.min(k+100,Yb.size):Math.max(-1,k-100);k!=l;k+=h){var d=u(k),p=k==c.line,q=b(d,p&&g?e+1:0,p&&!g?e:d.text.length);if(q)break}q||(q={pos:null,match:!1});var m=q.match?\"CodeMirror-matchingbracket\":\"CodeMirror-nonmatchingbracket\",r=$a({line:c.line,ch:e},{line:c.line,ch:e+1},m),s=null!=q.pos&&$a({line:k,ch:q.pos},{line:k,ch:q.pos+1},m),t=Ab(function(){r.clear(),s&&s.clear()});a?setTimeout(t,800):jc=t}}function tb(a){for(var b,c,d=a,e=a-40;d>e;--d){if(0==d)return 0;var f=u(d-1);if(f.stateAfter)return d;var g=f.indentation(Bb.tabSize);(null==c||b>g)&&(c=d-1,b=g)}return c}function ub(a){var b=tb(a),c=b&&u(b-1).stateAfter;return c=c?d(Tb,c):e(Tb),Yb.iter(b,a,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)}),b<a&&dc.push({from:b,to:a}),a<Yb.size&&!u(a).stateAfter&&Ub.push(a),c}function vb(a,b){var c=ub(a);Yb.iter(a,b,function(a){a.highlight(Tb,c,Bb.tabSize),a.stateAfter=d(Tb,c)})}function wb(){for(var a=+new Date+Bb.workTime,b=Ub.length;Ub.length;){if(u(oc).stateAfter)var c=Ub.pop();else var c=oc;if(!(c>=Yb.size)){var f=tb(c),g=f&&u(f-1).stateAfter;g=g?d(Tb,g):e(Tb);var h=0,i=Tb.compareStates,j=!1,k=f,l=!1;if(Yb.iter(k,Yb.size,function(b){var e=b.stateAfter;if(+new Date>a)return Ub.push(k),xb(Bb.workDelay),j&&dc.push({from:c,to:k+1}),l=!0;var f=b.highlight(Tb,g,Bb.tabSize);if(f&&(j=!0),b.stateAfter=d(Tb,g),i){if(e&&i(e,g))return!0}else if(f===!1&&e){if(++h>3&&(!Tb.indent||Tb.indent(e,\"\")==Tb.indent(g,\"\")))return!0}else h=0;++k}),l)return;j&&dc.push({from:c,to:k+1})}}b&&Bb.onHighlightComplete&&Bb.onHighlightComplete(vc)}function xb(a){Ub.length&&Xb.set(a,Ab(wb))}function yb(){bc=cc=ec=null,dc=[],fc=!1,ic=[]}function zb(){var a,b=!1;fc&&(b=!wa()),dc.length?a=za(dc,!0):(fc&&Da(),hc&&Ca()),b&&wa(),fc&&(va(),rb()),Vb&&!gc&&(bc===!0||bc!==!1&&fc)&&ta(cc),fc&&Bb.matchBrackets&&setTimeout(Ab(function(){jc&&(jc(),jc=null),E(lc.from,lc.to)&&sb(!1)}),20);var c=ec,d=ic;fc&&Bb.onCursorActivity&&Bb.onCursorActivity(vc),c&&Bb.onChange&&vc&&Bb.onChange(vc,c);for(var e=0;e<d.length;++e)d[e](vc);a&&Bb.onUpdate&&Bb.onUpdate(vc)}function Ab(a){return function(){Hc++||yb();try{var b=a.apply(this,arguments)}finally{--Hc||zb()}return b}}var Bb={},Cb=a.defaults;for(var Db in Cb)Cb.hasOwnProperty(Db)&&(Bb[Db]=(j&&j.hasOwnProperty(Db)?j:Cb)[Db]);var Eb=Bb.document,Fb=Eb.createElement(\"div\");Fb.className=\"CodeMirror\"+(Bb.lineWrapping?\" CodeMirror-wrap\":\"\"),Fb.innerHTML='<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\"><textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" autocorrect=\"off\" autocapitalize=\"off\"></textarea></div><div class=\"CodeMirror-scroll\" tabindex=\"-1\"><div style=\"position: relative\"><div style=\"position: relative\"><div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div><div class=\"CodeMirror-lines\"><div style=\"position: relative\"><div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div><pre class=\"CodeMirror-cursor\">&#160;</pre><div></div></div></div></div></div></div>',f.appendChild?f.appendChild(Fb):f(Fb);var Gb=Fb.firstChild,Hb=Gb.firstChild,Ib=Fb.lastChild,Jb=Ib.firstChild,Kb=Jb.firstChild,Lb=Kb.firstChild,Mb=Lb.firstChild,Nb=Lb.nextSibling.firstChild,Ob=Nb.firstChild,Pb=Ob.nextSibling,Qb=Pb.nextSibling;Ya(),/AppleWebKit/.test(navigator.userAgent)&&/Mobile\\/\\w+/.test(navigator.userAgent)&&(Hb.style.width=\"0px\"),U||(Nb.draggable=!0),null!=Bb.tabindex&&(Hb.tabIndex=Bb.tabindex),Bb.gutter||Bb.lineNumbers||(Lb.style.display=\"none\");try{gb(\"x\")}catch(Rb){throw Rb.message.match(/runtime/i)&&(Rb=new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\")),Rb}var Sb,Tb,Ub,Vb,Wb=new z,Xb=new z,Yb=new l([new k([new i(\"\")])]);Ta();var Zb,$b,_b,ac,bc,cc,dc,ec,fc,gc,hc,ic,jc,kc,lc={from:{line:0,ch:0},to:{line:0,ch:0},inverted:!1},mc=!1,nc=0,oc=0,pc=0,qc=0,rc=\"\",sc=Wa();Ab(function(){B(Bb.value||\"\"),bc=!1})();var tc=new q;y(Ib,\"mousedown\",Ab(N)),y(Ib,\"dblclick\",Ab(V)),y(Nb,\"dragstart\",_),y(Nb,\"selectstart\",t),S||y(Ib,\"contextmenu\",qb),y(Ib,\"scroll\",function(){za([]),Bb.fixedGutter&&(Lb.style.left=Ib.scrollLeft+\"px\"),Bb.onScroll&&Bb.onScroll(vc)}),y(window,\"resize\",function(){za(!0)}),y(Hb,\"keyup\",Ab(da)),y(Hb,\"input\",ra),y(Hb,\"keydown\",Ab(ba)),y(Hb,\"keypress\",Ab(ca)),y(Hb,\"focus\",ea),y(Hb,\"blur\",fa),y(Ib,\"dragenter\",v),y(Ib,\"dragover\",v),y(Ib,\"drop\",Ab($)),y(Ib,\"paste\",function(){ua(),ra()}),y(Hb,\"paste\",ra),y(Hb,\"cut\",Ab(function(){ma(\"\")}));var uc;try{uc=Eb.activeElement==Hb}catch(Rb){}uc?setTimeout(ea,20):fa();var vc=Fb.CodeMirror={getValue:M,setValue:Ab(B),getSelection:pa,replaceSelection:Ab(ma),focus:function(){ua(),ea(),ra()},setOption:function(a,b){var c=Bb[a];Bb[a]=b,\"mode\"==a||\"indentUnit\"==a?Ta():\"readOnly\"==a&&b?(fa(),Hb.blur()):\"theme\"==a?Ya():\"lineWrapping\"==a&&c!=b?Ab(Va)():\"tabSize\"==a&&Ab(Xa)(),\"lineNumbers\"!=a&&\"gutter\"!=a&&\"firstLineNumber\"!=a&&\"theme\"!=a||Ab(Ua)()},getOption:function(a){return Bb[a]},undo:Ab(ia),redo:Ab(ja),indentLine:Ab(function(a,b){r(a)&&Sa(a,null==b?\"smart\":b?\"add\":\"subtract\")}),indentSelection:Ab(Ra),historySize:function(){return{undo:tc.done.length,redo:tc.undone.length}},clearHistory:function(){tc=new q},matchBrackets:Ab(function(){sb(!0)}),getTokenAt:Ab(function(a){return a=Ka(a),u(a.line).getTokenAt(Tb,ub(a.line),a.ch)}),getStateAfter:function(a){return a=Ja(null==a?Yb.size-1:a),ub(a+1)},cursorCoords:function(a){return null==a&&(a=lc.inverted),kb(a?lc.from:lc.to)},charCoords:function(a){return kb(Ka(a))},coordsChar:function(a){var b=C(Nb);return jb(a.x-b.left,a.y-b.top)},markText:Ab($a),setBookmark:_a,setMarker:Ab(ab),clearMarker:Ab(bb),setLineClass:Ab(db),hideLine:Ab(function(a){return eb(a,!0)}),showLine:Ab(function(a){return eb(a,!1)}),onDeleteLine:function(a,b){if(\"number\"==typeof a){if(!r(a))return null;a=u(a)}return(a.handlers||(a.handlers=[])).push(b),a},lineInfo:fb,addWidget:function(a,b,c,d,e){a=ib(Ka(a));var f=a.yBot,g=a.x;if(b.style.position=\"absolute\",Jb.appendChild(b),\"over\"==d)f=a.y;else if(\"near\"==d){var h=Math.max(Ib.offsetHeight,Yb.height*lb()),i=Math.max(Jb.clientWidth,Nb.clientWidth)-ob();a.yBot+b.offsetHeight>h&&a.y>b.offsetHeight&&(f=a.y-b.offsetHeight),g+b.offsetWidth>i&&(g=i-b.offsetWidth)}b.style.top=f+nb()+\"px\",b.style.left=b.style.right=\"\",\"right\"==e?(g=Jb.clientWidth-b.offsetWidth,b.style.right=\"0px\"):(\"left\"==e?g=0:\"middle\"==e&&(g=(Jb.clientWidth-b.offsetWidth)/2),b.style.left=g+ob()+\"px\"),c&&xa(g,f,g+b.offsetWidth,f+b.offsetHeight)},lineCount:function(){return Yb.size},clipPos:Ka,getCursor:function(a){return null==a&&(a=lc.inverted),G(a?lc.from:lc.to)},somethingSelected:function(){return!E(lc.from,lc.to)},setCursor:Ab(function(a,b,c){null==b&&\"number\"==typeof a.line?Ia(a.line,a.ch,c):Ia(a,b,c)}),setSelection:Ab(function(a,b,c){(c?Fa:Ga)(Ka(a),Ka(b||a))}),getLine:function(a){if(r(a))return u(a).text},getLineHandle:function(a){if(r(a))return u(a)},setLine:Ab(function(a,b){r(a)&&la(b,{line:a,ch:0},{line:a,ch:u(a).text.length})}),removeLine:Ab(function(a){r(a)&&la(\"\",{line:a,ch:0},Ka({line:a+1,ch:0}))}),replaceRange:Ab(la),getRange:function(a,b){return oa(Ka(a),Ka(b))},execCommand:function(a){return P[a](vc)},moveH:Ab(Ma),deleteH:Ab(Na),moveV:Ab(Oa),toggleOverwrite:function(){mc=!mc},posFromIndex:function(a){var b,c=0;return Yb.iter(0,Yb.size,function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,void++c)}),Ka({line:c,ch:b})},indexFromPos:function(a){if(a.line<0||a.ch<0)return 0;var b=a.ch;return Yb.iter(0,a.line,function(a){b+=a.text.length+1}),b},operation:function(a){return Ab(a)()},refresh:function(){za(!0)},getInputField:function(){return Hb},getWrapperElement:function(){return Fb},getScrollerElement:function(){return Ib},getGutterElement:function(){return Lb}},wc=null,xc=!1,yc=\"\",zc=null;Za.prototype.clear=Ab(function(){for(var a=1/0,b=-(1/0),c=0,d=this.set.length;c<d;++c){var e=this.set[c],f=e.marked;if(f&&e.parent){var g=n(e);a=Math.min(a,g),b=Math.max(b,g);for(var h=0;h<f.length;++h)f[h].set==this.set&&f.splice(h--,1)}}a!=1/0&&dc.push({from:a,to:b+1})}),Za.prototype.find=function(){for(var a,b,c=0,d=this.set.length;c<d;++c)for(var e=this.set[c],f=e.marked,g=0;g<f.length;++g){var h=f[g];if(h.set==this.set&&(null!=h.from||null!=h.to)){var i=n(e);null!=i&&(null!=h.from&&(a={line:i,ch:h.from}),null!=h.to&&(b={line:i,ch:h.to}))}}return{from:a,to:b}};var Ac,Bc,Cc,Dc,Ec=Math.floor(16777215*Math.random()).toString(16),Fc=0,Gc={\"(\":\")>\",\")\":\"(<\",\"[\":\"]>\",\"]\":\"[<\",\"{\":\"}>\",\"}\":\"{<\"},Hc=0;for(var Ic in O)O.propertyIsEnumerable(Ic)&&!vc.propertyIsEnumerable(Ic)&&(vc[Ic]=O[Ic]);return vc}function b(a,b,c){function d(a,b,c){var e=b[a];if(null!=e)return e;if(null==c&&(c=b.fallthrough),null==c)return b.catchall;if(\"string\"==typeof c)return d(a,Q[c]);for(var f=0,g=c.length;f<g;++f)if(e=d(a,Q[c[f]]),null!=e)return e;return null}return b?d(a,b,c):d(a,Q[c])}function c(a){var b=Z[a.keyCode];return\"Ctrl\"==b||\"Alt\"==b||\"Shift\"==b||\"Mod\"==b}function d(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c}function e(a,b,c){return!a.startState||a.startState(b,c)}function f(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8}function g(a,b,c,d){this.from=a,this.to=b,this.style=c,this.set=d}function h(a){this.from=a,this.to=a,this.line=null}function i(a,b){this.styles=b||[a,null],this.text=a,this.height=1,this.marked=this.gutterMarker=this.className=this.handlers=null,this.stateAfter=this.parent=this.hidden=null}function j(a,b,c,d){for(var e=0,f=0,g=0;f<b;e+=2){var h=c[e],i=f+h.length;0==g?(i>a&&d.push(h.slice(a-f,Math.min(h.length,b-f)),c[e+1]),i>=a&&(g=1)):1==g&&(i>b?d.push(h.slice(0,b-f),c[e+1]):d.push(h,c[e+1])),f=i}}function k(a){this.lines=a,this.parent=null;for(var b=0,c=a.length,d=0;b<c;++b)a[b].parent=this,d+=a[b].height;this.height=d}function l(a){this.children=a;for(var b=0,c=0,d=0,e=a.length;d<e;++d){var f=a[d];b+=f.chunkSize(),c+=f.height,f.parent=this}this.size=b,this.height=c,this.parent=null}function m(a,b){for(;!a.lines;)for(var c=0;;++c){var d=a.children[c],e=d.chunkSize();if(b<e){a=d;break}b-=e}return a.lines[b]}function n(a){if(null==a.parent)return null;for(var b=a.parent,c=J(b.lines,a),d=b.parent;d;b=d,d=d.parent){var e=0;for(d.children.length;d.children[e]!=b;++e)c+=d.children[e].chunkSize()}return c}function o(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.height;if(b<g){a=f;continue a}b-=g,c+=f.chunkSize()}return c}while(!a.lines);for(var d=0,e=a.lines.length;d<e;++d){var h=a.lines[d],i=h.height;if(b<i)break;b-=i}return c+d}function p(a,b){var c=0;a:do{for(var d=0,e=a.children.length;d<e;++d){var f=a.children[d],g=f.chunkSize();if(b<g){a=f;continue a}b-=g,c+=f.height}return c}while(!a.lines);for(var d=0;d<b;++d)c+=a.lines[d].height;return c}function q(){this.time=0,this.done=[],this.undone=[]}function r(){v(this)}function s(a){return a.stop||(a.stop=r),a}function t(a){a.preventDefault?a.preventDefault():a.returnValue=!1}function u(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0}function v(a){t(a),u(a)}function w(a){return a.target||a.srcElement}function x(a){return a.which?a.which:1&a.button?1:2&a.button?3:4&a.button?2:void 0}function y(a,b,c,d){\nif(\"function\"==typeof a.addEventListener){if(a.addEventListener(b,c,!1),d)return function(){a.removeEventListener(b,c,!1)}}else{var e=function(a){c(a||window.event)};if(a.attachEvent(\"on\"+b,e),d)return function(){a.detachEvent(\"on\"+b,e)}}}function z(){this.id=null}function A(a,b,c){null==b&&(b=a.search(/[^\\s\\u00a0]/),b==-1&&(b=a.length));for(var d=0,e=0;d<b;++d)\"\\t\"==a.charAt(d)?e+=c-e%c:++e;return e}function B(a){return a.currentStyle?a.currentStyle:window.getComputedStyle(a,null)}function C(a,b){for(var c=a.ownerDocument.body,d=0,e=0,f=!1,g=a;g;g=g.offsetParent){var h=g.offsetLeft,i=g.offsetTop;g==c?(d+=Math.abs(h),e+=Math.abs(i)):(d+=h,e+=i),b&&\"fixed\"==B(g).position&&(f=!0)}for(var j=b&&!f?null:c,g=a.parentNode;g!=j;g=g.parentNode)null!=g.scrollLeft&&(d-=g.scrollLeft,e-=g.scrollTop);return{left:d,top:e}}function D(a){return a.textContent||a.innerText||a.nodeValue||\"\"}function E(a,b){return a.line==b.line&&a.ch==b.ch}function F(a,b){return a.line<b.line||a.line==b.line&&a.ch<b.ch}function G(a){return{line:a.line,ch:a.ch}}function H(a){return W.textContent=a,W.innerHTML}function I(a,b){if(!b)return a?a.length:0;if(!a)return b.length;for(var c=a.length,d=b.length;c>=0&&d>=0&&a.charAt(c)==b.charAt(d);--c,--d);return d+1}function J(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;c<d;++c)if(a[c]==b)return c;return-1}function K(a){return/\\w/.test(a)||a.toUpperCase()!=a.toLowerCase()}a.defaults={value:\"\",mode:null,theme:\"default\",indentUnit:2,indentWithTabs:!1,tabSize:4,keyMap:\"default\",extraKeys:null,electricChars:!0,onKeyEvent:null,lineWrapping:!1,lineNumbers:!1,gutter:!1,fixedGutter:!1,firstLineNumber:1,readOnly:!1,onChange:null,onCursorActivity:null,onGutterClick:null,onHighlightComplete:null,onUpdate:null,onFocus:null,onBlur:null,onScroll:null,matchBrackets:!1,workTime:100,workDelay:200,pollInterval:100,undoDepth:40,tabindex:null,document:window.document};var L=/Mac/.test(navigator.platform),M=(/Win/.test(navigator.platform),{}),N={};a.defineMode=function(b,c){a.defaults.mode||\"null\"==b||(a.defaults.mode=b),M[b]=c},a.defineMIME=function(a,b){N[a]=b},a.getMode=function(b,c){if(\"string\"==typeof c&&N.hasOwnProperty(c)&&(c=N[c]),\"string\"==typeof c)var d=c,e={};else if(null!=c)var d=c.name,e=c;var f=M[d];return f?f(b,e||{}):(window.console&&console.warn(\"No mode \"+d+\" found, falling back to plain text.\"),a.getMode(b,\"text/plain\"))},a.listModes=function(){var a=[];for(var b in M)M.propertyIsEnumerable(b)&&a.push(b);return a},a.listMIMEs=function(){var a=[];for(var b in N)N.propertyIsEnumerable(b)&&a.push({mime:b,mode:N[b]});return a};var O=a.extensions={};a.defineExtension=function(a,b){O[a]=b};var P=a.commands={selectAll:function(a){a.setSelection({line:0,ch:0},{line:a.lineCount()-1})},killLine:function(a){var b=a.getCursor(!0),c=a.getCursor(!1),d=!E(b,c);d||a.getLine(b.line).length!=b.ch?a.replaceRange(\"\",b,d?c:{line:b.line}):a.replaceRange(\"\",b,{line:b.line+1,ch:0})},deleteLine:function(a){var b=a.getCursor().line;a.replaceRange(\"\",{line:b,ch:0},{line:b})},undo:function(a){a.undo()},redo:function(a){a.redo()},goDocStart:function(a){a.setCursor(0,0,!0)},goDocEnd:function(a){a.setSelection({line:a.lineCount()-1},null,!0)},goLineStart:function(a){a.setCursor(a.getCursor().line,0,!0)},goLineStartSmart:function(a){var b=a.getCursor(),c=a.getLine(b.line),d=Math.max(0,c.search(/\\S/));a.setCursor(b.line,b.ch<=d&&b.ch?0:d,!0)},goLineEnd:function(a){a.setSelection({line:a.getCursor().line},null,!0)},goLineUp:function(a){a.moveV(-1,\"line\")},goLineDown:function(a){a.moveV(1,\"line\")},goPageUp:function(a){a.moveV(-1,\"page\")},goPageDown:function(a){a.moveV(1,\"page\")},goCharLeft:function(a){a.moveH(-1,\"char\")},goCharRight:function(a){a.moveH(1,\"char\")},goColumnLeft:function(a){a.moveH(-1,\"column\")},goColumnRight:function(a){a.moveH(1,\"column\")},goWordLeft:function(a){a.moveH(-1,\"word\")},goWordRight:function(a){a.moveH(1,\"word\")},delCharLeft:function(a){a.deleteH(-1,\"char\")},delCharRight:function(a){a.deleteH(1,\"char\")},delWordLeft:function(a){a.deleteH(-1,\"word\")},delWordRight:function(a){a.deleteH(1,\"word\")},indentAuto:function(a){a.indentSelection(\"smart\")},indentMore:function(a){a.indentSelection(\"add\")},indentLess:function(a){a.indentSelection(\"subtract\")},insertTab:function(a){a.replaceSelection(\"\\t\",\"end\")},transposeChars:function(a){var b=a.getCursor(),c=a.getLine(b.line);b.ch>0&&b.ch<c.length-1&&a.replaceRange(c.charAt(b.ch)+c.charAt(b.ch-1),{line:b.line,ch:b.ch-1},{line:b.line,ch:b.ch+1})},newlineAndIndent:function(a){a.replaceSelection(\"\\n\",\"end\"),a.indentLine(a.getCursor().line)},toggleOverwrite:function(a){a.toggleOverwrite()}},Q=a.keyMap={};Q.basic={Left:\"goCharLeft\",Right:\"goCharRight\",Up:\"goLineUp\",Down:\"goLineDown\",End:\"goLineEnd\",Home:\"goLineStartSmart\",PageUp:\"goPageUp\",PageDown:\"goPageDown\",Delete:\"delCharRight\",Backspace:\"delCharLeft\",Tab:\"indentMore\",\"Shift-Tab\":\"indentLess\",Enter:\"newlineAndIndent\",Insert:\"toggleOverwrite\"},Q.pcDefault={\"Ctrl-A\":\"selectAll\",\"Ctrl-D\":\"deleteLine\",\"Ctrl-Z\":\"undo\",\"Shift-Ctrl-Z\":\"redo\",\"Ctrl-Y\":\"redo\",\"Ctrl-Home\":\"goDocStart\",\"Alt-Up\":\"goDocStart\",\"Ctrl-End\":\"goDocEnd\",\"Ctrl-Down\":\"goDocEnd\",\"Ctrl-Left\":\"goWordLeft\",\"Ctrl-Right\":\"goWordRight\",\"Alt-Left\":\"goLineStart\",\"Alt-Right\":\"goLineEnd\",\"Ctrl-Backspace\":\"delWordLeft\",\"Ctrl-Delete\":\"delWordRight\",\"Ctrl-S\":\"save\",\"Ctrl-F\":\"find\",\"Ctrl-G\":\"findNext\",\"Shift-Ctrl-G\":\"findPrev\",\"Shift-Ctrl-F\":\"replace\",\"Shift-Ctrl-R\":\"replaceAll\",fallthrough:\"basic\"},Q.macDefault={\"Cmd-A\":\"selectAll\",\"Cmd-D\":\"deleteLine\",\"Cmd-Z\":\"undo\",\"Shift-Cmd-Z\":\"redo\",\"Cmd-Y\":\"redo\",\"Cmd-Up\":\"goDocStart\",\"Cmd-End\":\"goDocEnd\",\"Cmd-Down\":\"goDocEnd\",\"Alt-Left\":\"goWordLeft\",\"Alt-Right\":\"goWordRight\",\"Cmd-Left\":\"goLineStart\",\"Cmd-Right\":\"goLineEnd\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-Alt-Backspace\":\"delWordRight\",\"Alt-Delete\":\"delWordRight\",\"Cmd-S\":\"save\",\"Cmd-F\":\"find\",\"Cmd-G\":\"findNext\",\"Shift-Cmd-G\":\"findPrev\",\"Cmd-Alt-F\":\"replace\",\"Shift-Cmd-Alt-F\":\"replaceAll\",fallthrough:[\"basic\",\"emacsy\"]},Q[\"default\"]=L?Q.macDefault:Q.pcDefault,Q.emacsy={\"Ctrl-F\":\"goCharRight\",\"Ctrl-B\":\"goCharLeft\",\"Ctrl-P\":\"goLineUp\",\"Ctrl-N\":\"goLineDown\",\"Alt-F\":\"goWordRight\",\"Alt-B\":\"goWordLeft\",\"Ctrl-A\":\"goLineStart\",\"Ctrl-E\":\"goLineEnd\",\"Ctrl-V\":\"goPageUp\",\"Shift-Ctrl-V\":\"goPageDown\",\"Ctrl-D\":\"delCharRight\",\"Ctrl-H\":\"delCharLeft\",\"Alt-D\":\"delWordRight\",\"Alt-Backspace\":\"delWordLeft\",\"Ctrl-K\":\"killLine\",\"Ctrl-T\":\"transposeChars\"},a.fromTextArea=function(b,c){function d(){b.value=h.getValue()}function e(){d(),b.form.submit=g,b.form.submit(),b.form.submit=e}if(c||(c={}),c.value=b.value,!c.tabindex&&b.tabindex&&(c.tabindex=b.tabindex),b.form){var f=y(b.form,\"submit\",d,!0);if(\"function\"==typeof b.form.submit){var g=b.form.submit;b.form.submit=e}}b.style.display=\"none\";var h=a(function(a){b.parentNode.insertBefore(a,b.nextSibling)},c);return h.save=d,h.getTextArea=function(){return b},h.toTextArea=function(){d(),b.parentNode.removeChild(h.getWrapperElement()),b.style.display=\"\",b.form&&(f(),\"function\"==typeof b.form.submit&&(b.form.submit=g))},h},a.copyState=d,a.startState=e,f.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(a){var b=this.string.charAt(this.pos);if(\"string\"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));if(c)return++this.pos,b},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\\s\\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);if(b>-1)return this.pos=b,!0},backUp:function(a){this.pos-=a},column:function(){return A(this.string,this.start,this.tabSize)},indentation:function(){return A(this.string,null,this.tabSize)},match:function(a,b,c){function d(a){return c?a.toLowerCase():a}if(\"string\"!=typeof a){var e=this.string.slice(this.pos).match(a);return e&&b!==!1&&(this.pos+=e[0].length),e}if(d(this.string).indexOf(d(a),this.pos)==this.pos)return b!==!1&&(this.pos+=a.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},a.StringStream=f,g.prototype={attach:function(a){this.set.push(a)},detach:function(a){var b=J(this.set,a);b>-1&&this.set.splice(b,1)},split:function(a,b){if(this.to<=a&&null!=this.to)return null;var c=this.from<a||null==this.from?null:this.from-a+b,d=null==this.to?null:this.to-a+b;return new g(c,d,this.style,this.set)},dup:function(){return new g(null,null,this.style,this.set)},clipTo:function(a,b,c,d,e){null!=this.from&&this.from>=b&&(this.from=Math.max(d,this.from)+e),null!=this.to&&this.to>b&&(this.to=d<this.to?this.to+e:b),a&&d>this.from&&(d<this.to||null==this.to)&&(this.from=null),c&&(b<this.to||null==this.to)&&(b>this.from||null==this.from)&&(this.to=null)},isDead:function(){return null!=this.from&&null!=this.to&&this.from>=this.to},sameSet:function(a){return this.set==a.set}},h.prototype={attach:function(a){this.line=a},detach:function(a){this.line==a&&(this.line=null)},split:function(a,b){if(a<this.from)return this.from=this.to=this.from-a+b,this},isDead:function(){return this.from>this.to},clipTo:function(a,b,c,d,e){(a||b<this.from)&&(c||d>this.to)?(this.from=0,this.to=-1):this.from>b&&(this.from=this.to=Math.max(d,this.from)+e)},sameSet:function(a){return!1},find:function(){return this.line&&this.line.parent?{line:n(this.line),ch:this.from}:null},clear:function(){if(this.line){var a=J(this.line.marked,this);a!=-1&&this.line.marked.splice(a,1),this.line=null}}},i.inheritMarks=function(a,b){var c=new i(a),d=b&&b.marked;if(d)for(var e=0;e<d.length;++e)if(null==d[e].to&&d[e].style){var f=c.marked||(c.marked=[]),g=d[e],h=g.dup();f.push(h),h.attach(c)}return c},i.prototype={replace:function(a,b,c){var d=[],e=this.marked,f=null==b?this.text.length:b;if(j(0,a,this.styles,d),c&&d.push(c,null),j(f,this.text.length,this.styles,d),this.styles=d,this.text=this.text.slice(0,a)+c+this.text.slice(f),this.stateAfter=null,e)for(var g=c.length-(f-a),h=0,i=e[h];h<e.length;++h)i.clipTo(null==a,a||0,null==b,f,g),i.isDead()&&(i.detach(this),e.splice(h--,1))},split:function(a,b){var c=[b,null],d=this.marked;j(a,this.text.length,this.styles,c);var e=new i(b+this.text.slice(a),c);if(d)for(var f=0;f<d.length;++f){var g=d[f],h=g.split(a,b.length);h&&(e.marked||(e.marked=[]),e.marked.push(h),h.attach(e))}return e},append:function(a){var b=this.text.length,c=a.marked,d=this.marked;if(this.text+=a.text,j(0,a.text.length,a.styles,this.styles),d)for(var e=0;e<d.length;++e)null==d[e].to&&(d[e].to=b);if(c&&c.length){d||(this.marked=d=[]);a:for(var e=0;e<c.length;++e){var f=c[e];if(!f.from)for(var g=0;g<d.length;++g){var h=d[g];if(h.to==b&&h.sameSet(f)){h.to=null==f.to?null:f.to+b,h.isDead()&&(h.detach(this),c.splice(e--,1));continue a}}d.push(f),f.attach(this),f.from+=b,null!=f.to&&(f.to+=b)}}},fixMarkEnds:function(a){var b=this.marked,c=a.marked;if(b)for(var d=0;d<b.length;++d){var e=b[d],f=null==e.to;if(f&&c)for(var g=0;g<c.length;++g)if(c[g].sameSet(e)){f=!1;break}f&&(e.to=this.text.length)}},fixMarkStarts:function(){var a=this.marked;if(a)for(var b=0;b<a.length;++b)null==a[b].from&&(a[b].from=0)},addMark:function(a){a.attach(this),null==this.marked&&(this.marked=[]),this.marked.push(a),this.marked.sort(function(a,b){return(a.from||0)-(b.from||0)})},highlight:function(a,b,c){var d,e=new f(this.text,c),g=this.styles,h=0,i=!1,j=g[0];for(\"\"==this.text&&a.blankLine&&a.blankLine(b);!e.eol();){var k=a.token(e,b),l=this.text.slice(e.start,e.pos);if(e.start=e.pos,h&&g[h-1]==k?g[h-2]+=l:l&&(!i&&(g[h+1]!=k||h&&g[h-2]!=d)&&(i=!0),g[h++]=l,g[h++]=k,d=j,j=g[h]),e.pos>5e3){g[h++]=this.text.slice(e.pos),g[h++]=null;break}}return g.length!=h&&(g.length=h,i=!0),h&&g[h-2]!=d&&(i=!0),i||g.length<5&&this.text.length<10&&null},getTokenAt:function(a,b,c){for(var d=this.text,e=new f(d);e.pos<c&&!e.eol();){e.start=e.pos;var g=a.token(e,b)}return{start:e.start,end:e.pos,string:e.current(),className:g||null,state:b}},indentation:function(a){return A(this.text,null,a)},getHTML:function(a,b,c,d,e){function f(a,b){a&&(i&&T&&\" \"==a.charAt(0)&&(a=\" \"+a.slice(1)),i=!1,b?h.push('<span class=\"',b,'\">',H(a).replace(/\\t/g,d),\"</span>\"):h.push(H(a).replace(/\\t/g,d)))}function g(){l&&(r+=1,s=r<l.length?l[r]:null)}var h=[],i=!0;c&&h.push(this.className?'<pre class=\"'+this.className+'\">':\"<pre>\");var j=this.styles,k=this.text,l=this.marked;a==b&&(a=null);var m=k.length;if(null!=e&&(m=Math.min(e,m)),k||null!=e)if(l||null!=a){var n,o=0,p=0,q=\"\",r=-1,s=null;for(g();o<m;){var t=m,u=\"\";for(null!=a&&(a>o?t=a:(null==b||b>o)&&(u=\" CodeMirror-selected\",null!=b&&(t=Math.min(t,b))));s&&null!=s.to&&s.to<=o;)g();for(s&&(s.from>o?t=Math.min(t,s.from):(u+=\" \"+s.style,null!=s.to&&(t=Math.min(t,s.to))));;){var v=o+q.length,w=n;if(u&&(w=n?n+u:u),f(v>t?q.slice(0,t-o):q,w),v>=t){q=q.slice(t-o),o=t;break}o=v,q=j[p++],n=\"cm-\"+j[p++]}}null!=a&&null==b&&f(\" \",\"CodeMirror-selected\")}else for(var p=0,x=0;x<m;p+=2){var y=j[p],n=j[p+1],z=y.length;x+z>m&&(y=y.slice(0,m-x)),x+=z,f(y,n&&\"cm-\"+n)}else f(\" \",null!=a&&null==b?\"CodeMirror-selected\":null);return c&&h.push(\"</pre>\"),h.join(\"\")},cleanUp:function(){if(this.parent=null,this.marked)for(var a=0,b=this.marked.length;a<b;++a)this.marked[a].detach(this)}},k.prototype={chunkSize:function(){return this.lines.length},remove:function(a,b,c){for(var d=a,e=a+b;d<e;++d){var f=this.lines[d];if(this.height-=f.height,f.cleanUp(),f.handlers)for(var g=0;g<f.handlers.length;++g)c.push(f.handlers[g])}this.lines.splice(a,b)},collapse:function(a){a.splice.apply(a,[a.length,0].concat(this.lines))},insertHeight:function(a,b,c){this.height+=c,this.lines.splice.apply(this.lines,[a,0].concat(b));for(var d=0,e=b.length;d<e;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;a<d;++a)if(c(this.lines[a]))return!0}},l.prototype={chunkSize:function(){return this.size},remove:function(a,b,c){this.size-=b;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(a<f){var g=Math.min(b,f-a),h=e.height;if(e.remove(a,g,c),this.height-=h-e.height,f==g&&(this.children.splice(d--,1),e.parent=null),0==(b-=g))break;a=0}else a-=f}if(this.size-b<25){var i=[];this.collapse(i),this.children=[new k(i)]}},collapse:function(a){for(var b=0,c=this.children.length;b<c;++b)this.children[b].collapse(a)},insert:function(a,b){for(var c=0,d=0,e=b.length;d<e;++d)c+=b[d].height;this.insertHeight(a,b,c)},insertHeight:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<=g){if(f.insertHeight(a,b,c),f.lines&&f.lines.length>50){for(;f.lines.length>50;){var h=f.lines.splice(f.lines.length-25,25),i=new k(h);f.height-=i.height,this.children.splice(d+1,0,i),i.parent=this}this.maybeSpill()}break}a-=g}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new l(b);if(a.parent){a.size-=c.size,a.height-=c.height;var d=J(a.parent.children,a);a.parent.children.splice(d+1,0,c)}else{var e=new l(a.children);e.parent=a,a.children=[e,c],a=e}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iter:function(a,b,c){this.iterN(a,b-a,c)},iterN:function(a,b,c){for(var d=0,e=this.children.length;d<e;++d){var f=this.children[d],g=f.chunkSize();if(a<g){var h=Math.min(b,g-a);if(f.iterN(a,h,c))return!0;if(0==(b-=h))break;a=0}else a-=g}}},q.prototype={addChange:function(a,b,c){this.undone.length=0;var d=+new Date,e=this.done[this.done.length-1];if(d-this.time>400||!e||e.start>a+b||e.start+e.added<a-e.added+e.old.length)this.done.push({start:a,added:b,old:c});else{var f=0;if(a<e.start){for(var g=e.start-a-1;g>=0;--g)e.old.unshift(c[g]);e.added+=e.start-a,e.start=a}else e.start<a&&(f=a-e.start,b+=f);for(var g=e.added-f,h=c.length;g<h;++g)e.old.push(c[g]);e.added<b&&(e.added=b)}this.time=d}},a.e_stop=v,a.e_preventDefault=t,a.e_stopPropagation=u,a.connect=y,z.prototype={set:function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)}};var R=function(){if(/MSIE [1-8]\\b/.test(navigator.userAgent))return!1;var a=document.createElement(\"div\");return\"draggable\"in a}(),S=/gecko\\/\\d{7}/i.test(navigator.userAgent),T=/MSIE \\d/.test(navigator.userAgent),U=/WebKit\\//.test(navigator.userAgent),V=\"\\n\";!function(){var a=document.createElement(\"textarea\");a.value=\"foo\\nbar\",a.value.indexOf(\"\\r\")>-1&&(V=\"\\r\\n\")}(),null!=document.documentElement.getBoundingClientRect&&(C=function(a,b){try{var c=a.getBoundingClientRect();c={top:c.top,left:c.left}}catch(d){c={top:0,left:0}}if(!b)if(null==window.pageYOffset){var e=document.documentElement||document.body.parentNode;null==e.scrollTop&&(e=document.body),c.top+=e.scrollTop,c.left+=e.scrollLeft}else c.top+=window.pageYOffset,c.left+=window.pageXOffset;return c});var W=document.createElement(\"pre\");\"\\na\"==H(\"a\")?H=function(a){return W.textContent=a,W.innerHTML.slice(1)}:\"\\t\"!=H(\"\\t\")&&(H=function(a){return W.innerHTML=\"\",W.appendChild(document.createTextNode(a)),W.innerHTML}),a.htmlEscape=H;var X=3!=\"\\n\\nb\".split(/\\n/).length?function(a){for(var b,c=0,d=[];(b=a.indexOf(\"\\n\",c))>-1;)d.push(a.slice(c,\"\\r\"==a.charAt(b-1)?b-1:b)),c=b+1;return d.push(a.slice(c)),d}:function(a){return a.split(/\\r?\\n/)};a.splitLines=X;var Y=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return!(!b||b.parentElement()!=a)&&0!=b.compareEndPoints(\"StartToEnd\",b)};a.defineMode(\"null\",function(){return{token:function(a){a.skipToEnd()}}}),a.defineMIME(\"text/plain\",\"null\");var Z={3:\"Enter\",8:\"Backspace\",9:\"Tab\",13:\"Enter\",16:\"Shift\",17:\"Ctrl\",18:\"Alt\",19:\"Pause\",20:\"CapsLock\",27:\"Esc\",32:\"Space\",33:\"PageUp\",34:\"PageDown\",35:\"End\",36:\"Home\",37:\"Left\",38:\"Up\",39:\"Right\",40:\"Down\",44:\"PrintScrn\",45:\"Insert\",46:\"Delete\",59:\";\",91:\"Mod\",92:\"Mod\",93:\"Mod\",186:\";\",187:\"=\",188:\",\",189:\"-\",190:\".\",191:\"/\",192:\"`\",219:\"[\",220:\"\\\\\",221:\"]\",222:\"'\",63276:\"PageUp\",63277:\"PageDown\",63275:\"End\",63273:\"Home\",63234:\"Left\",63232:\"Up\",63235:\"Right\",63233:\"Down\",63302:\"Insert\",63272:\"Delete\"};return a.keyNames=Z,function(){for(var a=0;a<10;a++)Z[a+48]=String(a);for(var a=65;a<=90;a++)Z[a]=String.fromCharCode(a);for(var a=1;a<=12;a++)Z[a+111]=Z[a+63235]=\"F\"+a}(),a}();CodeMirror.defineMode(\"xml\",function(a,b){function c(a,b){function c(c){return b.tokenize=c,c(a,b)}var e=a.next();if(\"<\"==e){if(a.eat(\"!\"))return a.eat(\"[\")?a.match(\"CDATA[\")?c(f(\"atom\",\"]]>\")):null:a.match(\"--\")?c(f(\"comment\",\"-->\")):a.match(\"DOCTYPE\",!0,!0)?(a.eatWhile(/[\\w\\._\\-]/),c(g(1))):null;if(a.eat(\"?\"))return a.eatWhile(/[\\w\\._\\-]/),b.tokenize=f(\"meta\",\"?>\"),\"meta\";s=a.eat(\"/\")?\"closeTag\":\"openTag\",a.eatSpace(),r=\"\";for(var h;h=a.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);)r+=h;return b.tokenize=d,\"tag\"}return\"&\"==e?(a.eatWhile(/[^;]/),a.eat(\";\"),\"atom\"):(a.eatWhile(/[^&<]/),null)}function d(a,b){var d=a.next();return\">\"==d||\"/\"==d&&a.eat(\">\")?(b.tokenize=c,s=\">\"==d?\"endTag\":\"selfcloseTag\",\"tag\"):\"=\"==d?(s=\"equals\",null):/[\\'\\\"]/.test(d)?(b.tokenize=e(d),b.tokenize(a,b)):(a.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/),\"word\")}function e(a){return function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=d;break}return\"string\"}}function f(a,b){return function(d,e){for(;!d.eol();){if(d.match(b)){e.tokenize=c;break}d.next()}return a}}function g(a){return function(b,d){for(var e;null!=(e=b.next());){if(\"<\"==e)return d.tokenize=g(a+1),d.tokenize(b,d);if(\">\"==e){if(1==a){d.tokenize=c;break}return d.tokenize=g(a-1),d.tokenize(b,d)}}return\"meta\"}}function h(){for(var a=arguments.length-1;a>=0;a--)t.cc.push(arguments[a])}function i(){return h.apply(null,arguments),!0}function j(a,b){var c=w.doNotIndent.hasOwnProperty(a)||t.context&&t.context.noIndent;t.context={prev:t.context,tagName:a,indent:t.indented,startOfLine:b,noIndent:c}}function k(){t.context&&(t.context=t.context.prev)}function l(a){if(\"openTag\"==a)return t.tagName=r,i(o,m(t.startOfLine));if(\"closeTag\"==a){var b=!1;return b=!t.context||t.context.tagName!=r,b&&(u=\"error\"),i(n(b))}return i()}function m(a){return function(b){return\"selfcloseTag\"==b||\"endTag\"==b&&w.autoSelfClosers.hasOwnProperty(t.tagName.toLowerCase())?i():\"endTag\"==b?(j(t.tagName,a),i()):i()}}function n(a){return function(b){return a&&(u=\"error\"),\"endTag\"==b?(k(),i()):(u=\"error\",i(arguments.callee))}}function o(a){return\"word\"==a?(u=\"attribute\",i(o)):\"equals\"==a?i(p,o):\"string\"==a?(u=\"error\",i(o)):h()}function p(a){return\"word\"==a&&w.allowUnquoted?(u=\"string\",i()):\"string\"==a?i(q):h()}function q(a){return\"string\"==a?i(q):h()}var r,s,t,u,v=a.indentUnit,w=b.htmlMode?{autoSelfClosers:{br:!0,img:!0,hr:!0,link:!0,input:!0,meta:!0,col:!0,frame:!0,base:!0,area:!0},doNotIndent:{pre:!0},allowUnquoted:!0}:{autoSelfClosers:{},doNotIndent:{},allowUnquoted:!1},x=b.alignCDATA;return{startState:function(){return{tokenize:c,cc:[],indented:0,startOfLine:!0,tagName:null,context:null}},token:function(a,b){if(a.sol()&&(b.startOfLine=!0,b.indented=a.indentation()),a.eatSpace())return null;u=s=r=null;var c=b.tokenize(a,b);if(b.type=s,(c||s)&&\"comment\"!=c)for(t=b;;){var d=b.cc.pop()||l;if(d(s||c))break}return b.startOfLine=!1,u||c},indent:function(a,b,e){var f=a.context;if(a.tokenize!=d&&a.tokenize!=c||f&&f.noIndent)return e?e.match(/^(\\s*)/)[0].length:0;if(x&&/<!\\[CDATA\\[/.test(b))return 0;for(f&&/^<\\//.test(b)&&(f=f.prev);f&&!f.startOfLine;)f=f.prev;return f?f.indent+v:0},compareStates:function(a,b){if(a.indented!=b.indented||a.tokenize!=b.tokenize)return!1;for(var c=a.context,d=b.context;;c=c.prev,d=d.prev){if(!c||!d)return c==d;if(c.tagName!=d.tagName)return!1}},electricChars:\"/\"}}),CodeMirror.defineMIME(\"application/xml\",\"xml\"),CodeMirror.defineMIME(\"text/html\",{name:\"xml\",htmlMode:!0}),CodeMirror.defineMode(\"javascript\",function(a,b){function c(a,b,c){return b.tokenize=c,c(a,b)}function d(a,b){for(var c,d=!1;null!=(c=a.next());){if(c==b&&!d)return!1;d=!d&&\"\\\\\"==c}return d}function e(a,b,c){return K=a,L=c,b}function f(a,b){var f=a.next();if('\"'==f||\"'\"==f)return c(a,b,g(f));if(/[\\[\\]{}\\(\\),;\\:\\.]/.test(f))return e(f);if(\"0\"==f&&a.eat(/x/i))return a.eatWhile(/[\\da-f]/i),e(\"number\",\"number\");if(/\\d/.test(f))return a.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/),e(\"number\",\"number\");if(\"/\"==f)return a.eat(\"*\")?c(a,b,h):a.eat(\"/\")?(a.skipToEnd(),e(\"comment\",\"comment\")):b.reAllowed?(d(a,\"/\"),a.eatWhile(/[gimy]/),e(\"regexp\",\"string\")):(a.eatWhile(P),e(\"operator\",null,a.current()));if(\"#\"==f)return a.skipToEnd(),e(\"error\",\"error\");if(P.test(f))return a.eatWhile(P),e(\"operator\",null,a.current());a.eatWhile(/[\\w\\$_]/);var i=a.current(),j=O.propertyIsEnumerable(i)&&O[i];return j&&b.kwAllowed?e(j.type,j.style,i):e(\"variable\",\"variable\",i)}function g(a){return function(b,c){return d(b,a)||(c.tokenize=f),e(\"string\",\"string\")}}function h(a,b){for(var c,d=!1;c=a.next();){if(\"/\"==c&&d){b.tokenize=f;break}d=\"*\"==c}return e(\"comment\",\"comment\")}function i(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function j(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0}function k(a,b,c,d,e){var f=a.cc;for(R.state=a,R.stream=e,R.marked=null,R.cc=f,a.lexical.hasOwnProperty(\"align\")||(a.lexical.align=!0);;){var g=f.length?f.pop():N?u:t;if(g(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return R.marked?R.marked:\"variable\"==c&&j(a,d)?\"variable-2\":b}}}function l(){for(var a=arguments.length-1;a>=0;a--)R.cc.push(arguments[a])}function m(){return l.apply(null,arguments),!0}function n(a){var b=R.state;if(b.context){R.marked=\"def\";for(var c=b.localVars;c;c=c.next)if(c.name==a)return;b.localVars={name:a,next:b.localVars}}}function o(){R.state.context||(R.state.localVars=S),R.state.context={prev:R.state.context,vars:R.state.localVars}}function p(){R.state.localVars=R.state.context.vars,R.state.context=R.state.context.prev}function q(a,b){var c=function(){var c=R.state;c.lexical=new i(c.indented,R.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function r(){var a=R.state;a.lexical.prev&&(\")\"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function s(a){return function(b){return b==a?m():\";\"==a?l():m(arguments.callee)}}function t(a){return\"var\"==a?m(q(\"vardef\"),C,s(\";\"),r):\"keyword a\"==a?m(q(\"form\"),u,t,r):\"keyword b\"==a?m(q(\"form\"),t,r):\"{\"==a?m(q(\"}\"),B,r):\";\"==a?m():\"function\"==a?m(I):\"for\"==a?m(q(\"form\"),s(\"(\"),q(\")\"),E,s(\")\"),r,t,r):\"variable\"==a?m(q(\"stat\"),x):\"switch\"==a?m(q(\"form\"),u,q(\"}\",\"switch\"),s(\"{\"),B,r,r):\"case\"==a?m(u,s(\":\")):\"default\"==a?m(s(\":\")):\"catch\"==a?m(q(\"form\"),o,s(\"(\"),J,s(\")\"),t,r,p):l(q(\"stat\"),u,s(\";\"),r)}function u(a){return Q.hasOwnProperty(a)?m(w):\"function\"==a?m(I):\"keyword c\"==a?m(v):\"(\"==a?m(q(\")\"),u,s(\")\"),r,w):\"operator\"==a?m(u):\"[\"==a?m(q(\"]\"),A(u,\"]\"),r,w):\"{\"==a?m(q(\"}\"),A(z,\"}\"),r,w):m()}function v(a){return a.match(/[;\\}\\)\\],]/)?l():l(u)}function w(a,b){if(\"operator\"==a&&/\\+\\+|--/.test(b))return m(w);if(\"operator\"==a)return m(u);if(\";\"!=a)return\"(\"==a?m(q(\")\"),A(u,\")\"),r,w):\".\"==a?m(y,w):\"[\"==a?m(q(\"]\"),u,s(\"]\"),r,w):void 0}function x(a){return\":\"==a?m(r,t):l(w,s(\";\"),r)}function y(a){if(\"variable\"==a)return R.marked=\"property\",m()}function z(a){if(\"variable\"==a&&(R.marked=\"property\"),Q.hasOwnProperty(a))return m(s(\":\"),u)}function A(a,b){function c(d){return\",\"==d?m(a,c):d==b?m():m(s(b))}return function(d){return d==b?m():l(a,c)}}function B(a){return\"}\"==a?m():l(t,B)}function C(a,b){return\"variable\"==a?(n(b),m(D)):m()}function D(a,b){return\"=\"==b?m(u,D):\",\"==a?m(C):void 0}function E(a){return\"var\"==a?m(C,G):\";\"==a?l(G):\"variable\"==a?m(F):l(G)}function F(a,b){return\"in\"==b?m(u):m(w,G)}function G(a,b){return\";\"==a?m(H):\"in\"==b?m(u):m(u,s(\";\"),H)}function H(a){\")\"!=a&&m(u)}function I(a,b){return\"variable\"==a?(n(b),m(I)):\"(\"==a?m(q(\")\"),o,A(J,\")\"),r,t,p):void 0}function J(a,b){if(\"variable\"==a)return n(b),m()}var K,L,M=a.indentUnit,N=b.json,O=function(){function a(a){return{type:a,style:\"keyword\"}}var b=a(\"keyword a\"),c=a(\"keyword b\"),d=a(\"keyword c\"),e=a(\"operator\"),f={type:\"atom\",style:\"atom\"};return{\"if\":b,\"while\":b,\"with\":b,\"else\":c,\"do\":c,\"try\":c,\"finally\":c,\"return\":d,\"break\":d,\"continue\":d,\"new\":d,\"delete\":d,\"throw\":d,\"var\":a(\"var\"),\"const\":a(\"var\"),\"let\":a(\"var\"),\"function\":a(\"function\"),\"catch\":a(\"catch\"),\"for\":a(\"for\"),\"switch\":a(\"switch\"),\"case\":a(\"case\"),\"default\":a(\"default\"),\"in\":e,\"typeof\":e,\"instanceof\":e,\"true\":f,\"false\":f,\"null\":f,undefined:f,NaN:f,Infinity:f}}(),P=/[+\\-*&%=<>!?|]/,Q={atom:!0,number:!0,variable:!0,string:!0,regexp:!0},R={state:null,column:null,marked:null,cc:null},S={name:\"this\",next:{name:\"arguments\"}};return r.lex=!0,{startState:function(a){return{tokenize:f,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new i((a||0)-M,0,\"block\",(!1)),localVars:null,context:null,indented:0}},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty(\"align\")||(b.lexical.align=!1),b.indented=a.indentation()),a.eatSpace())return null;var c=b.tokenize(a,b);return\"comment\"==K?c:(b.reAllowed=\"operator\"==K||\"keyword c\"==K||K.match(/^[\\[{}\\(,;:]$/),b.kwAllowed=\".\"!=K,k(b,c,K,L,a))},indent:function(a,b){if(a.tokenize!=f)return 0;var c=b&&b.charAt(0),d=a.lexical,e=d.type,g=c==e;return\"vardef\"==e?d.indented+4:\"form\"==e&&\"{\"==c?d.indented:\"stat\"==e||\"form\"==e?d.indented+M:\"switch\"!=d.info||g?d.align?d.column+(g?0:1):d.indented+(g?0:M):d.indented+(/^(?:case|default)\\b/.test(b)?M:2*M)},electricChars:\":{}\"}}),CodeMirror.defineMIME(\"text/javascript\",\"javascript\"),CodeMirror.defineMIME(\"application/json\",{name:\"javascript\",json:!0}),CodeMirror.defineMode(\"css\",function(a){function b(a,b){return g=b,a}function c(a,c){var g=a.next();return\"@\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"meta\",a.current())):\"/\"==g&&a.eat(\"*\")?(c.tokenize=d,d(a,c)):\"<\"==g&&a.eat(\"!\")?(c.tokenize=e,e(a,c)):\"=\"!=g?\"~\"!=g&&\"|\"!=g||!a.eat(\"=\")?'\"'==g||\"'\"==g?(c.tokenize=f(g),c.tokenize(a,c)):\"#\"==g?(a.eatWhile(/[\\w\\\\\\-]/),b(\"atom\",\"hash\")):\"!\"==g?(a.match(/^\\s*\\w*/),b(\"keyword\",\"important\")):/\\d/.test(g)?(a.eatWhile(/[\\w.%]/),b(\"number\",\"unit\")):/[,.+>*\\/]/.test(g)?b(null,\"select-op\"):/[;{}:\\[\\]]/.test(g)?b(null,g):(a.eatWhile(/[\\w\\\\\\-]/),b(\"variable\",\"variable\")):b(null,\"compare\"):void b(null,\"compare\")}function d(a,d){for(var e,f=!1;null!=(e=a.next());){if(f&&\"/\"==e){d.tokenize=c;break}f=\"*\"==e}return b(\"comment\",\"comment\")}function e(a,d){for(var e,f=0;null!=(e=a.next());){if(f>=2&&\">\"==e){d.tokenize=c;break}f=\"-\"==e?f+1:0}return b(\"comment\",\"comment\")}function f(a){return function(d,e){for(var f,g=!1;null!=(f=d.next())&&(f!=a||g);)g=!g&&\"\\\\\"==f;return g||(e.tokenize=c),b(\"string\",\"string\")}}var g,h=a.indentUnit;return{startState:function(a){return{tokenize:c,baseIndent:a||0,stack:[]}},token:function(a,b){if(a.eatSpace())return null;var c=b.tokenize(a,b),d=b.stack[b.stack.length-1];return\"hash\"==g&&\"rule\"==d?c=\"atom\":\"variable\"==c&&(\"rule\"==d?c=\"number\":d&&\"@media{\"!=d||(c=\"tag\")),\"rule\"==d&&/^[\\{\\};]$/.test(g)&&b.stack.pop(),\"{\"==g?\"@media\"==d?b.stack[b.stack.length-1]=\"@media{\":b.stack.push(\"{\"):\"}\"==g?b.stack.pop():\"@media\"==g?b.stack.push(\"@media\"):\"{\"==d&&\"comment\"!=g&&b.stack.push(\"rule\"),c},indent:function(a,b){var c=a.stack.length;return/^\\}/.test(b)&&(c-=\"rule\"==a.stack[a.stack.length-1]?2:1),a.baseIndent+c*h},electricChars:\"}\"}}),CodeMirror.defineMIME(\"text/css\",\"css\"),CodeMirror.defineMode(\"htmlmixed\",function(a,b){function c(a,b){var c=g.token(a,b.htmlState);return\"tag\"==c&&\">\"==a.current()&&b.htmlState.context&&(/^script$/i.test(b.htmlState.context.tagName)?(b.token=e,b.localState=h.startState(g.indent(b.htmlState,\"\")),b.mode=\"javascript\"):/^style$/i.test(b.htmlState.context.tagName)&&(b.token=f,b.localState=i.startState(g.indent(b.htmlState,\"\")),b.mode=\"css\")),c}function d(a,b,c){var d=a.current(),e=d.search(b);return e>-1&&a.backUp(d.length-e),c}function e(a,b){return a.match(/^<\\/\\s*script\\s*>/i,!1)?(b.token=c,b.curState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*script\\s*>/,h.token(a,b.localState))}function f(a,b){return a.match(/^<\\/\\s*style\\s*>/i,!1)?(b.token=c,b.localState=null,b.mode=\"html\",c(a,b)):d(a,/<\\/\\s*style\\s*>/,i.token(a,b.localState))}var g=CodeMirror.getMode(a,{name:\"xml\",htmlMode:!0}),h=CodeMirror.getMode(a,\"javascript\"),i=CodeMirror.getMode(a,\"css\");return{startState:function(){var a=g.startState();return{token:c,localState:null,mode:\"html\",htmlState:a}},copyState:function(a){if(a.localState)var b=CodeMirror.copyState(a.token==f?i:h,a.localState);return{token:a.token,localState:b,mode:a.mode,htmlState:CodeMirror.copyState(g,a.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(a,b){return a.token==c||/^\\s*<\\//.test(b)?g.indent(a.htmlState,b):a.token==e?h.indent(a.localState,b):i.indent(a.localState,b)},compareStates:function(a,b){return g.compareStates(a.htmlState,b.htmlState)},electricChars:\"/{}:\"}}),CodeMirror.defineMIME(\"text/html\",\"htmlmixed\");"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/jquery-1.10.2.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){function c(a){var b=a.length,c=ka.type(a);return!ka.isWindow(a)&&(!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a)))}function d(a){var b=za[a]={};return ka.each(a.match(ma)||[],function(a,c){b[c]=!0}),b}function e(a,c,d,e){if(ka.acceptData(a)){var f,g,h=ka.expando,i=a.nodeType,j=i?ka.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||d!==b||\"string\"!=typeof c)return k||(k=i?a[h]=ba.pop()||ka.guid++:h),j[k]||(j[k]=i?{}:{toJSON:ka.noop}),(\"object\"==typeof c||\"function\"==typeof c)&&(e?j[k]=ka.extend(j[k],c):j[k].data=ka.extend(j[k].data,c)),g=j[k],e||(g.data||(g.data={}),g=g.data),d!==b&&(g[ka.camelCase(c)]=d),\"string\"==typeof c?(f=g[c],null==f&&(f=g[ka.camelCase(c)])):f=g,f}}function f(a,b,c){if(ka.acceptData(a)){var d,e,f=a.nodeType,g=f?ka.cache:a,i=f?a[ka.expando]:ka.expando;if(g[i]){if(b&&(d=c?g[i]:g[i].data)){ka.isArray(b)?b=b.concat(ka.map(b,ka.camelCase)):b in d?b=[b]:(b=ka.camelCase(b),b=b in d?[b]:b.split(\" \")),e=b.length;for(;e--;)delete d[b[e]];if(c?!h(d):!ka.isEmptyObject(d))return}(c||(delete g[i].data,h(g[i])))&&(f?ka.cleanData([a],!0):ka.support.deleteExpando||g!=g.window?delete g[i]:g[i]=null)}}}function g(a,c,d){if(d===b&&1===a.nodeType){var e=\"data-\"+c.replace(Ba,\"-$1\").toLowerCase();if(d=a.getAttribute(e),\"string\"==typeof d){try{d=\"true\"===d||\"false\"!==d&&(\"null\"===d?null:+d+\"\"===d?+d:Aa.test(d)?ka.parseJSON(d):d)}catch(f){}ka.data(a,c,d)}else d=b}return d}function h(a){var b;for(b in a)if((\"data\"!==b||!ka.isEmptyObject(a[b]))&&\"toJSON\"!==b)return!1;return!0}function i(){return!0}function j(){return!1}function k(){try{return Y.activeElement}catch(a){}}function l(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}function m(a,b,c){if(ka.isFunction(b))return ka.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return ka.grep(a,function(a){return a===b!==c});if(\"string\"==typeof b){if(Qa.test(b))return ka.filter(b,a,c);b=ka.filter(b,a)}return ka.grep(a,function(a){return ka.inArray(a,b)>=0!==c})}function n(a){var b=Ua.split(\"|\"),c=a.createDocumentFragment();if(c.createElement)for(;b.length;)c.createElement(b.pop());return c}function o(a,b){return ka.nodeName(a,\"table\")&&ka.nodeName(1===b.nodeType?b:b.firstChild,\"tr\")?a.getElementsByTagName(\"tbody\")[0]||a.appendChild(a.ownerDocument.createElement(\"tbody\")):a}function p(a){return a.type=(null!==ka.find.attr(a,\"type\"))+\"/\"+a.type,a}function q(a){var b=eb.exec(a.type);return b?a.type=b[1]:a.removeAttribute(\"type\"),a}function r(a,b){for(var c,d=0;null!=(c=a[d]);d++)ka._data(c,\"globalEval\",!b||ka._data(b[d],\"globalEval\"))}function s(a,b){if(1===b.nodeType&&ka.hasData(a)){var c,d,e,f=ka._data(a),g=ka._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)ka.event.add(b,c,h[c][d])}g.data&&(g.data=ka.extend({},g.data))}}function t(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!ka.support.noCloneEvent&&b[ka.expando]){e=ka._data(b);for(d in e.events)ka.removeEvent(b,d,e.handle);b.removeAttribute(ka.expando)}\"script\"===c&&b.text!==a.text?(p(b).text=a.text,q(b)):\"object\"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),ka.support.html5Clone&&a.innerHTML&&!ka.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):\"input\"===c&&bb.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):\"option\"===c?b.defaultSelected=b.selected=a.defaultSelected:(\"input\"===c||\"textarea\"===c)&&(b.defaultValue=a.defaultValue)}}function u(a,c){var d,e,f=0,g=typeof a.getElementsByTagName!==W?a.getElementsByTagName(c||\"*\"):typeof a.querySelectorAll!==W?a.querySelectorAll(c||\"*\"):b;if(!g)for(g=[],d=a.childNodes||a;null!=(e=d[f]);f++)!c||ka.nodeName(e,c)?g.push(e):ka.merge(g,u(e,c));return c===b||c&&ka.nodeName(a,c)?ka.merge([a],g):g}function v(a){bb.test(a.type)&&(a.defaultChecked=a.checked)}function w(a,b){if(b in a)return b;for(var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=yb.length;e--;)if(b=yb[e]+c,b in a)return b;return d}function x(a,b){return a=b||a,\"none\"===ka.css(a,\"display\")||!ka.contains(a.ownerDocument,a)}function y(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ka._data(d,\"olddisplay\"),c=d.style.display,b?(f[g]||\"none\"!==c||(d.style.display=\"\"),\"\"===d.style.display&&x(d)&&(f[g]=ka._data(d,\"olddisplay\",C(d.nodeName)))):f[g]||(e=x(d),(c&&\"none\"!==c||!e)&&ka._data(d,\"olddisplay\",e?c:ka.css(d,\"display\"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&\"none\"!==d.style.display&&\"\"!==d.style.display||(d.style.display=b?f[g]||\"\":\"none\"));return a}function z(a,b,c){var d=rb.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||\"px\"):b}function A(a,b,c,d,e){for(var f=c===(d?\"border\":\"content\")?4:\"width\"===b?1:0,g=0;4>f;f+=2)\"margin\"===c&&(g+=ka.css(a,c+xb[f],!0,e)),d?(\"content\"===c&&(g-=ka.css(a,\"padding\"+xb[f],!0,e)),\"margin\"!==c&&(g-=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e))):(g+=ka.css(a,\"padding\"+xb[f],!0,e),\"padding\"!==c&&(g+=ka.css(a,\"border\"+xb[f]+\"Width\",!0,e)));return g}function B(a,b,c){var d=!0,e=\"width\"===b?a.offsetWidth:a.offsetHeight,f=kb(a),g=ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,f);if(0>=e||null==e){if(e=lb(a,b,f),(0>e||null==e)&&(e=a.style[b]),sb.test(e))return e;d=g&&(ka.support.boxSizingReliable||e===a.style[b]),e=parseFloat(e)||0}return e+A(a,b,c||(g?\"border\":\"content\"),d,f)+\"px\"}function C(a){var b=Y,c=ub[a];return c||(c=D(a,b),\"none\"!==c&&c||(jb=(jb||ka(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(b.documentElement),b=(jb[0].contentWindow||jb[0].contentDocument).document,b.write(\"<!doctype html><html><body>\"),b.close(),c=D(a,b),jb.detach()),ub[a]=c),c}function D(a,b){var c=ka(b.createElement(a)).appendTo(b.body),d=ka.css(c[0],\"display\");return c.remove(),d}function E(a,b,c,d){var e;if(ka.isArray(b))ka.each(b,function(b,e){c||Ab.test(a)?d(a,e):E(a+\"[\"+(\"object\"==typeof e?b:\"\")+\"]\",e,c,d)});else if(c||\"object\"!==ka.type(b))d(a,b);else for(e in b)E(a+\"[\"+e+\"]\",b[e],c,d)}function F(a){return function(b,c){\"string\"!=typeof b&&(c=b,b=\"*\");var d,e=0,f=b.toLowerCase().match(ma)||[];if(ka.isFunction(c))for(;d=f[e++];)\"+\"===d[0]?(d=d.slice(1)||\"*\",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function G(a,c,d,e){function f(i){var j;return g[i]=!0,ka.each(a[i]||[],function(a,i){var k=i(c,d,e);return\"string\"!=typeof k||h||g[k]?h?!(j=k):b:(c.dataTypes.unshift(k),f(k),!1)}),j}var g={},h=a===Rb;return f(c.dataTypes[0])||!g[\"*\"]&&f(\"*\")}function H(a,c){var d,e,f=ka.ajaxSettings.flatOptions||{};for(e in c)c[e]!==b&&((f[e]?a:d||(d={}))[e]=c[e]);return d&&ka.extend(!0,a,d),a}function I(a,c,d){for(var e,f,g,h,i=a.contents,j=a.dataTypes;\"*\"===j[0];)j.shift(),f===b&&(f=a.mimeType||c.getResponseHeader(\"Content-Type\"));if(f)for(h in i)if(i[h]&&i[h].test(f)){j.unshift(h);break}if(j[0]in d)g=j[0];else{for(h in d){if(!j[0]||a.converters[h+\" \"+j[0]]){g=h;break}e||(e=h)}g=g||e}return g?(g!==j[0]&&j.unshift(g),d[g]):b}function J(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if(\"*\"===f)f=i;else if(\"*\"!==i&&i!==f){if(g=j[i+\" \"+f]||j[\"* \"+f],!g)for(e in j)if(h=e.split(\" \"),h[1]===f&&(g=j[i+\" \"+h[0]]||j[\"* \"+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a[\"throws\"])b=g(b);else try{b=g(b)}catch(l){return{state:\"parsererror\",error:g?l:\"No conversion from \"+i+\" to \"+f}}}return{state:\"success\",data:b}}function K(){try{return new a.XMLHttpRequest}catch(b){}}function L(){try{return new a.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(b){}}function M(){return setTimeout(function(){$b=b}),$b=ka.now()}function N(a,b,c){for(var d,e=(ec[b]||[]).concat(ec[\"*\"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function O(a,b,c){var d,e,f=0,g=dc.length,h=ka.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$b||M(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:ka.extend({},b),opts:ka.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$b||M(),duration:c.duration,tweens:[],createTween:function(b,c){var d=ka.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(P(k,j.opts.specialEasing);g>f;f++)if(d=dc[f].call(j,a,k,j.opts))return d;return ka.map(k,N,j),ka.isFunction(j.opts.start)&&j.opts.start.call(a,j),ka.fx.timer(ka.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function P(a,b){var c,d,e,f,g;for(c in a)if(d=ka.camelCase(c),e=b[d],f=a[c],ka.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=ka.cssHooks[d],g&&\"expand\"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Q(a,b,c){var d,e,f,g,h,i,j=this,k={},l=a.style,m=a.nodeType&&x(a),n=ka._data(a,\"fxshow\");c.queue||(h=ka._queueHooks(a,\"fx\"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,j.always(function(){j.always(function(){h.unqueued--,ka.queue(a,\"fx\").length||h.empty.fire()})})),1===a.nodeType&&(\"height\"in b||\"width\"in b)&&(c.overflow=[l.overflow,l.overflowX,l.overflowY],\"inline\"===ka.css(a,\"display\")&&\"none\"===ka.css(a,\"float\")&&(ka.support.inlineBlockNeedsLayout&&\"inline\"!==C(a.nodeName)?l.zoom=1:l.display=\"inline-block\")),c.overflow&&(l.overflow=\"hidden\",ka.support.shrinkWrapBlocks||j.always(function(){l.overflow=c.overflow[0],l.overflowX=c.overflow[1],l.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ac.exec(e)){if(delete b[d],f=f||\"toggle\"===e,e===(m?\"hide\":\"show\"))continue;k[d]=n&&n[d]||ka.style(a,d)}if(!ka.isEmptyObject(k)){n?\"hidden\"in n&&(m=n.hidden):n=ka._data(a,\"fxshow\",{}),f&&(n.hidden=!m),m?ka(a).show():j.done(function(){ka(a).hide()}),j.done(function(){var b;ka._removeData(a,\"fxshow\");for(b in k)ka.style(a,b,k[b])});for(d in k)g=N(m?n[d]:0,d,j),d in n||(n[d]=g.start,m&&(g.end=g.start,g.start=\"width\"===d||\"height\"===d?1:0))}}function R(a,b,c,d,e){return new R.prototype.init(a,b,c,d,e)}function S(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=xb[e],d[\"margin\"+c]=d[\"padding\"+c]=a;return b&&(d.opacity=d.width=a),d}function T(a){return ka.isWindow(a)?a:9===a.nodeType&&(a.defaultView||a.parentWindow)}var U,V,W=typeof b,X=a.location,Y=a.document,Z=Y.documentElement,$=a.jQuery,_=a.$,aa={},ba=[],ca=\"1.10.2\",da=ba.concat,ea=ba.push,fa=ba.slice,ga=ba.indexOf,ha=aa.toString,ia=aa.hasOwnProperty,ja=ca.trim,ka=function(a,b){return new ka.fn.init(a,b,V)},la=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ma=/\\S+/g,na=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,oa=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,pa=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,qa=/^[\\],:{}\\s]*$/,ra=/(?:^|:|,)(?:\\s*\\[)+/g,sa=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,ta=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,ua=/^-ms-/,va=/-([\\da-z])/gi,wa=function(a,b){return b.toUpperCase()},xa=function(a){(Y.addEventListener||\"load\"===a.type||\"complete\"===Y.readyState)&&(ya(),ka.ready())},ya=function(){Y.addEventListener?(Y.removeEventListener(\"DOMContentLoaded\",xa,!1),a.removeEventListener(\"load\",xa,!1)):(Y.detachEvent(\"onreadystatechange\",xa),a.detachEvent(\"onload\",xa))};ka.fn=ka.prototype={jquery:ca,constructor:ka,init:function(a,c,d){var e,f;if(!a)return this;if(\"string\"==typeof a){if(e=\"<\"===a.charAt(0)&&\">\"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:oa.exec(a),!e||!e[1]&&c)return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a);if(e[1]){if(c=c instanceof ka?c[0]:c,ka.merge(this,ka.parseHTML(e[1],c&&c.nodeType?c.ownerDocument||c:Y,!0)),pa.test(e[1])&&ka.isPlainObject(c))for(e in c)ka.isFunction(this[e])?this[e](c[e]):this.attr(e,c[e]);return this}if(f=Y.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return d.find(a);this.length=1,this[0]=f}return this.context=Y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):ka.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),ka.makeArray(a,this))},selector:\"\",length:0,toArray:function(){return fa.call(this)},get:function(a){return null==a?this.toArray():0>a?this[this.length+a]:this[a]},pushStack:function(a){var b=ka.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return ka.each(this,a,b)},ready:function(a){return ka.ready.promise().done(a),this},slice:function(){return this.pushStack(fa.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},map:function(a){return this.pushStack(ka.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:ea,sort:[].sort,splice:[].splice},ka.fn.init.prototype=ka.fn,ka.extend=ka.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;for(\"boolean\"==typeof h&&(k=h,h=arguments[1]||{},i=2),\"object\"==typeof h||ka.isFunction(h)||(h={}),j===i&&(h=this,--i);j>i;i++)if(null!=(f=arguments[i]))for(e in f)a=h[e],d=f[e],h!==d&&(k&&d&&(ka.isPlainObject(d)||(c=ka.isArray(d)))?(c?(c=!1,g=a&&ka.isArray(a)?a:[]):g=a&&ka.isPlainObject(a)?a:{},h[e]=ka.extend(k,g,d)):d!==b&&(h[e]=d));return h},ka.extend({expando:\"jQuery\"+(ca+Math.random()).replace(/\\D/g,\"\"),noConflict:function(b){return a.$===ka&&(a.$=_),b&&a.jQuery===ka&&(a.jQuery=$),ka},isReady:!1,readyWait:1,holdReady:function(a){a?ka.readyWait++:ka.ready(!0)},ready:function(a){if(a===!0?!--ka.readyWait:!ka.isReady){if(!Y.body)return setTimeout(ka.ready);ka.isReady=!0,a!==!0&&--ka.readyWait>0||(U.resolveWith(Y,[ka]),ka.fn.trigger&&ka(Y).trigger(\"ready\").off(\"ready\"))}},isFunction:function(a){return\"function\"===ka.type(a)},isArray:Array.isArray||function(a){return\"array\"===ka.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return null==a?a+\"\":\"object\"==typeof a||\"function\"==typeof a?aa[ha.call(a)]||\"object\":typeof a},isPlainObject:function(a){var c;if(!a||\"object\"!==ka.type(a)||a.nodeType||ka.isWindow(a))return!1;try{if(a.constructor&&!ia.call(a,\"constructor\")&&!ia.call(a.constructor.prototype,\"isPrototypeOf\"))return!1}catch(d){return!1}if(ka.support.ownLast)for(c in a)return ia.call(a,c);for(c in a);return c===b||ia.call(a,c)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw Error(a)},parseHTML:function(a,b,c){if(!a||\"string\"!=typeof a)return null;\"boolean\"==typeof b&&(c=b,b=!1),b=b||Y;var d=pa.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=ka.buildFragment([a],b,e),e&&ka(e).remove(),ka.merge([],d.childNodes))},parseJSON:function(c){return a.JSON&&a.JSON.parse?a.JSON.parse(c):null===c?c:\"string\"==typeof c&&(c=ka.trim(c),c&&qa.test(c.replace(sa,\"@\").replace(ta,\"]\").replace(ra,\"\")))?Function(\"return \"+c)():(ka.error(\"Invalid JSON: \"+c),b)},parseXML:function(c){var d,e;if(!c||\"string\"!=typeof c)return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,\"text/xml\")):(d=new ActiveXObject(\"Microsoft.XMLDOM\"),d.async=\"false\",d.loadXML(c))}catch(f){d=b}return d&&d.documentElement&&!d.getElementsByTagName(\"parsererror\").length||ka.error(\"Invalid XML: \"+c),d},noop:function(){},globalEval:function(b){b&&ka.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(ua,\"ms-\").replace(va,wa)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:ja&&!ja.call(\"\\ufeff \")?function(a){return null==a?\"\":ja.call(a)}:function(a){return null==a?\"\":(a+\"\").replace(na,\"\")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?ka.merge(d,\"string\"==typeof a?[a]:a):ea.call(d,a)),d},inArray:function(a,b,c){var d;if(b){if(ga)return ga.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(\"number\"==typeof d)for(;d>f;f++)a[e++]=c[f];else for(;c[f]!==b;)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;for(c=!!c;g>f;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&(i[i.length]=e);else for(f in a)e=b(a[f],f,d),null!=e&&(i[i.length]=e);return da.apply([],i)},guid:1,proxy:function(a,c){var d,e,f;return\"string\"==typeof c&&(f=a[c],c=a,a=f),ka.isFunction(a)?(d=fa.call(arguments,2),e=function(){return a.apply(c||this,d.concat(fa.call(arguments)))},e.guid=a.guid=a.guid||ka.guid++,e):b},access:function(a,c,d,e,f,g,h){var i=0,j=a.length,k=null==d;if(\"object\"===ka.type(d)){f=!0;for(i in d)ka.access(a,c,i,d[i],!0,g,h)}else if(e!==b&&(f=!0,ka.isFunction(e)||(h=!0),k&&(h?(c.call(a,e),c=null):(k=c,c=function(a,b,c){return k.call(ka(a),c)})),c))for(;j>i;i++)c(a[i],d,h?e:e.call(a[i],i,c(a[i],d)));return f?a:k?c.call(a):j?c(a[0],d):g},now:function(){return(new Date).getTime()},swap:function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e}}),ka.ready.promise=function(b){if(!U)if(U=ka.Deferred(),\"complete\"===Y.readyState)setTimeout(ka.ready);else if(Y.addEventListener)Y.addEventListener(\"DOMContentLoaded\",xa,!1),a.addEventListener(\"load\",xa,!1);else{Y.attachEvent(\"onreadystatechange\",xa),a.attachEvent(\"onload\",xa);var c=!1;try{c=null==a.frameElement&&Y.documentElement}catch(d){}c&&c.doScroll&&function e(){if(!ka.isReady){try{c.doScroll(\"left\")}catch(a){return setTimeout(e,50)}ya(),ka.ready()}}()}return U.promise(b)},ka.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(a,b){aa[\"[object \"+b+\"]\"]=b.toLowerCase()}),V=ka(Y),function(a,b){function c(a,b,c,d){var e,f,g,h,i,j,k,l,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],!a||\"string\"!=typeof a)return c;if(1!==(h=b.nodeType)&&9!==h)return[];if(I&&!d){if(e=ta.exec(a))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return aa.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&x.getElementsByClassName&&b.getElementsByClassName)return aa.apply(c,b.getElementsByClassName(g)),c}if(x.qsa&&(!J||!J.test(a))){if(l=k=N,o=b,p=9===h&&a,1===h&&\"object\"!==b.nodeName.toLowerCase()){for(j=m(a),(k=b.getAttribute(\"id\"))?l=k.replace(wa,\"\\\\$&\"):b.setAttribute(\"id\",l),l=\"[id='\"+l+\"'] \",i=j.length;i--;)j[i]=l+n(j[i]);o=na.test(a)&&b.parentNode||b,p=j.join(\",\")}if(p)try{return aa.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{k||b.removeAttribute(\"id\")}}}return v(a.replace(ja,\"$1\"),b,c,d)}function d(){function a(c,d){return b.push(c+=\" \")>z.cacheLength&&delete a[b.shift()],a[c]=d}var b=[];return a}function e(a){return a[N]=!0,a}function f(a){var b=G.createElement(\"div\");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function g(a,b){for(var c=a.split(\"|\"),d=a.length;d--;)z.attrHandle[c[d]]=b}function h(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||X)-(~a.sourceIndex||X);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function i(a){return function(b){var c=b.nodeName.toLowerCase();return\"input\"===c&&b.type===a}}function j(a){return function(b){var c=b.nodeName.toLowerCase();return(\"input\"===c||\"button\"===c)&&b.type===a}}function k(a){return e(function(b){return b=+b,e(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(){}function m(a,b){var d,e,f,g,h,i,j,k=S[a+\" \"];if(k)return b?0:k.slice(0);for(h=a,i=[],j=z.preFilter;h;){(!d||(e=la.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ma.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ja,\" \")}),h=h.slice(d.length));for(g in z.filter)!(e=ra[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return b?h.length:h?c.error(a):S(a,i).slice(0)}function n(a){for(var b=0,c=a.length,d=\"\";c>b;b++)d+=a[b].value;return d}function o(a,b,c){var d=b.dir,e=c&&\"parentNode\"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=P+\" \"+f;if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e)if(j=b[N]||(b[N]={}),(i=j[d])&&i[0]===k){if((h=i[1])===!0||h===y)return h===!0}else if(i=j[d]=[k],i[1]=a(b,c,g)||y,i[1]===!0)return!0}}function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,d,f,g){return d&&!d[N]&&(d=r(d)),f&&!f[N]&&(f=r(f,g)),e(function(e,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=e||u(b||\"*\",h.nodeType?[h]:h,[]),r=!a||!e&&b?p:q(p,m,a,h,i),s=c?f||(e?a:o||d)?[]:g:r;if(c&&c(r,s,h,i),d)for(j=q(s,n),d(j,[],h,i),k=j.length;k--;)(l=j[k])&&(s[n[k]]=!(r[n[k]]=l));if(e){if(f||a){if(f){for(j=[],k=s.length;k--;)(l=s[k])&&j.push(r[k]=l);f(null,s=[],j,i)}for(k=s.length;k--;)(l=s[k])&&(j=f?ca.call(e,l):m[k])>-1&&(e[j]=!(g[j]=l))}}else s=q(s===g?s.splice(o,s.length):s),f?f(null,g,s,i):aa.apply(g,s)})}function s(a){for(var b,c,d,e=a.length,f=z.relative[a[0].type],g=f||z.relative[\" \"],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ca.call(b,a)>-1},g,!0),k=[function(a,c,d){return!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d))}];e>h;h++)if(c=z.relative[a[h].type])k=[o(p(k),c)];else{if(c=z.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!z.relative[a[d].type];d++);return r(h>1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:\" \"===a[h-2].type?\"*\":\"\"})).replace(ja,\"$1\"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&n(a))}k.push(c)}return p(k)}function t(a,b){var d=0,f=b.length>0,g=a.length>0,h=function(e,h,i,j,k){var l,m,n,o=[],p=0,r=\"0\",s=e&&[],t=null!=k,u=D,v=e||g&&z.find.TAG(\"*\",k&&h.parentNode||h),w=P+=null==u?1:Math.random()||.1;for(t&&(D=h!==G&&h,y=d);null!=(l=v[r]);r++){if(g&&l){for(m=0;n=a[m++];)if(n(l,h,i)){j.push(l);break}t&&(P=w,y=++d)}f&&((l=!n&&l)&&p--,e&&s.push(l))}if(p+=r,f&&r!==p){for(m=0;n=b[m++];)n(s,o,h,i);if(e){if(p>0)for(;r--;)s[r]||o[r]||(o[r]=$.call(j));o=q(o)}aa.apply(j,o),t&&!e&&o.length>0&&p+b.length>1&&c.uniqueSort(j)}return t&&(P=w,D=u),s};return f?e(h):h}function u(a,b,d){for(var e=0,f=b.length;f>e;e++)c(a,b[e],d);return d}function v(a,b,c,d){var e,f,g,h,i,j=m(a);if(!d&&1===j.length){if(f=j[0]=j[0].slice(0),f.length>2&&\"ID\"===(g=f[0]).type&&x.getById&&9===b.nodeType&&I&&z.relative[f[1].type]){if(b=(z.find.ID(g.matches[0].replace(xa,ya),b)||[])[0],!b)return c;a=a.slice(f.shift().value.length)}for(e=ra.needsContext.test(a)?0:f.length;e--&&(g=f[e],!z.relative[h=g.type]);)if((i=z.find[h])&&(d=i(g.matches[0].replace(xa,ya),na.test(f[0].type)&&b.parentNode||b))){if(f.splice(e,1),a=d.length&&n(f),!a)return aa.apply(c,d),c;break}}return C(a,j)(d,b,!I,c,na.test(a)),c}var w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N=\"sizzle\"+-new Date,O=a.document,P=0,Q=0,R=d(),S=d(),T=d(),U=!1,V=function(a,b){return a===b?(U=!0,0):0},W=typeof b,X=1<<31,Y={}.hasOwnProperty,Z=[],$=Z.pop,_=Z.push,aa=Z.push,ba=Z.slice,ca=Z.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},da=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",ea=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",fa=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",ga=fa.replace(\"w\",\"w#\"),ha=\"\\\\[\"+ea+\"*(\"+fa+\")\"+ea+\"*(?:([*^$|!~]?=)\"+ea+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+ga+\")|)|)\"+ea+\"*\\\\]\",ia=\":(\"+fa+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+ha.replace(3,8)+\")*)|.*)\\\\)|)\",ja=RegExp(\"^\"+ea+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+ea+\"+$\",\"g\"),la=RegExp(\"^\"+ea+\"*,\"+ea+\"*\"),ma=RegExp(\"^\"+ea+\"*([>+~]|\"+ea+\")\"+ea+\"*\"),na=RegExp(ea+\"*[+~]\"),oa=RegExp(\"=\"+ea+\"*([^\\\\]'\\\"]*)\"+ea+\"*\\\\]\",\"g\"),pa=RegExp(ia),qa=RegExp(\"^\"+ga+\"$\"),ra={ID:RegExp(\"^#(\"+fa+\")\"),CLASS:RegExp(\"^\\\\.(\"+fa+\")\"),TAG:RegExp(\"^(\"+fa.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+ha),PSEUDO:RegExp(\"^\"+ia),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+ea+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+ea+\"*(?:([+-]|)\"+ea+\"*(\\\\d+)|))\"+ea+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+da+\")$\",\"i\"),needsContext:RegExp(\"^\"+ea+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+ea+\"*((?:-\\\\d)?\\\\d*)\"+ea+\"*\\\\)|)(?=[^-]|$)\",\"i\")},sa=/^[^{]+\\{\\s*\\[native \\w/,ta=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ua=/^(?:input|select|textarea|button)$/i,va=/^h\\d$/i,wa=/'|\\\\/g,xa=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+ea+\"?|(\"+ea+\")|.)\",\"ig\"),ya=function(a,b,c){var d=\"0x\"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(55296|d>>10,56320|1023&d)};try{aa.apply(Z=ba.call(O.childNodes),O.childNodes),Z[O.childNodes.length].nodeType}catch(za){aa={apply:Z.length?function(a,b){_.apply(a,ba.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}B=c.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&\"HTML\"!==b.nodeName},x=c.support={},F=c.setDocument=function(a){var c=a?a.ownerDocument||a:O,d=c.defaultView;return c!==G&&9===c.nodeType&&c.documentElement?(G=c,H=c.documentElement,I=!B(c),d&&d.attachEvent&&d!==d.top&&d.attachEvent(\"onbeforeunload\",function(){F()}),x.attributes=f(function(a){return a.className=\"i\",!a.getAttribute(\"className\")}),x.getElementsByTagName=f(function(a){return a.appendChild(c.createComment(\"\")),!a.getElementsByTagName(\"*\").length}),x.getElementsByClassName=f(function(a){return a.innerHTML=\"<div class='a'></div><div class='a i'></div>\",a.firstChild.className=\"i\",2===a.getElementsByClassName(\"i\").length}),x.getById=f(function(a){return H.appendChild(a).id=N,!c.getElementsByName||!c.getElementsByName(N).length}),x.getById?(z.find.ID=function(a,b){if(typeof b.getElementById!==W&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){return a.getAttribute(\"id\")===b}}):(delete z.find.ID,z.filter.ID=function(a){var b=a.replace(xa,ya);return function(a){var c=typeof a.getAttributeNode!==W&&a.getAttributeNode(\"id\");return c&&c.value===b}}),z.find.TAG=x.getElementsByTagName?function(a,c){return typeof c.getElementsByTagName!==W?c.getElementsByTagName(a):b}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if(\"*\"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},z.find.CLASS=x.getElementsByClassName&&function(a,c){return typeof c.getElementsByClassName!==W&&I?c.getElementsByClassName(a):b},K=[],J=[],(x.qsa=sa.test(c.querySelectorAll))&&(f(function(a){a.innerHTML=\"<select><option selected=''></option></select>\",a.querySelectorAll(\"[selected]\").length||J.push(\"\\\\[\"+ea+\"*(?:value|\"+da+\")\"),a.querySelectorAll(\":checked\").length||J.push(\":checked\")}),f(function(a){var b=c.createElement(\"input\");b.setAttribute(\"type\",\"hidden\"),a.appendChild(b).setAttribute(\"t\",\"\"),a.querySelectorAll(\"[t^='']\").length&&J.push(\"[*^$]=\"+ea+\"*(?:''|\\\"\\\")\"),a.querySelectorAll(\":enabled\").length||J.push(\":enabled\",\":disabled\"),a.querySelectorAll(\"*,:x\"),J.push(\",.*:\")})),(x.matchesSelector=sa.test(L=H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&f(function(a){x.disconnectedMatch=L.call(a,\"div\"),L.call(a,\"[s!='']:x\"),K.push(\"!=\",ia)}),J=J.length&&RegExp(J.join(\"|\")),K=K.length&&RegExp(K.join(\"|\")),M=sa.test(H.contains)||H.compareDocumentPosition?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},V=H.compareDocumentPosition?function(a,b){if(a===b)return U=!0,0;var d=b.compareDocumentPosition&&a.compareDocumentPosition&&a.compareDocumentPosition(b);return d?1&d||!x.sortDetached&&b.compareDocumentPosition(a)===d?a===c||M(O,a)?-1:b===c||M(O,b)?1:E?ca.call(E,a)-ca.call(E,b):0:4&d?-1:1:a.compareDocumentPosition?-1:1}:function(a,b){var d,e=0,f=a.parentNode,g=b.parentNode,i=[a],j=[b];if(a===b)return U=!0,0;if(!f||!g)return a===c?-1:b===c?1:f?-1:g?1:E?ca.call(E,a)-ca.call(E,b):0;if(f===g)return h(a,b);for(d=a;d=d.parentNode;)i.unshift(d);for(d=b;d=d.parentNode;)j.unshift(d);for(;i[e]===j[e];)e++;return e?h(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},c):G},c.matches=function(a,b){return c(a,null,null,b)},c.matchesSelector=function(a,b){if((a.ownerDocument||a)!==G&&F(a),b=b.replace(oa,\"='$1']\"),!(!x.matchesSelector||!I||K&&K.test(b)||J&&J.test(b)))try{var d=L.call(a,b);if(d||x.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return c(b,G,null,[a]).length>0},c.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},c.attr=function(a,c){(a.ownerDocument||a)!==G&&F(a);var d=z.attrHandle[c.toLowerCase()],e=d&&Y.call(z.attrHandle,c.toLowerCase())?d(a,c,!I):b;return e===b?x.attributes||!I?a.getAttribute(c):(e=a.getAttributeNode(c))&&e.specified?e.value:null:e},c.error=function(a){throw Error(\"Syntax error, unrecognized expression: \"+a)},c.uniqueSort=function(a){var b,c=[],d=0,e=0;if(U=!x.detectDuplicates,E=!x.sortStable&&a.slice(0),a.sort(V),U){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return a},A=c.getText=function(a){var b,c=\"\",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if(\"string\"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=A(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d];d++)c+=A(b);return c},z=c.selectors={cacheLength:50,createPseudo:e,match:ra,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(xa,ya),a[3]=(a[4]||a[5]||\"\").replace(xa,ya),\"~=\"===a[2]&&(a[3]=\" \"+a[3]+\" \"),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),\"nth\"===a[1].slice(0,3)?(a[3]||c.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*(\"even\"===a[3]||\"odd\"===a[3])),a[5]=+(a[7]+a[8]||\"odd\"===a[3])):a[3]&&c.error(a[0]),a},PSEUDO:function(a){var c,d=!a[5]&&a[2];return ra.CHILD.test(a[0])?null:(a[3]&&a[4]!==b?a[2]=a[4]:d&&pa.test(d)&&(c=m(d,!0))&&(c=d.indexOf(\")\",d.length-c)-d.length)&&(a[0]=a[0].slice(0,c),a[2]=d.slice(0,c)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(xa,ya).toLowerCase();return\"*\"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+\" \"];return b||(b=RegExp(\"(^|\"+ea+\")\"+a+\"(\"+ea+\"|$)\"))&&R(a,function(a){return b.test(\"string\"==typeof a.className&&a.className||typeof a.getAttribute!==W&&a.getAttribute(\"class\")||\"\")})},ATTR:function(a,b,d){return function(e){var f=c.attr(e,a);return null==f?\"!=\"===b:!b||(f+=\"\",\"=\"===b?f===d:\"!=\"===b?f!==d:\"^=\"===b?d&&0===f.indexOf(d):\"*=\"===b?d&&f.indexOf(d)>-1:\"$=\"===b?d&&f.slice(-d.length)===d:\"~=\"===b?(\" \"+f+\" \").indexOf(d)>-1:\"|=\"===b&&(f===d||f.slice(0,d.length+1)===d+\"-\"))}},CHILD:function(a,b,c,d,e){var f=\"nth\"!==a.slice(0,3),g=\"last\"!==a.slice(-4),h=\"of-type\"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?\"nextSibling\":\"previousSibling\",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;\nif(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p=\"only\"===a&&!o&&\"nextSibling\"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||0===m%d&&m/d>=0}}},PSEUDO:function(a,b){var d,f=z.pseudos[a]||z.setFilters[a.toLowerCase()]||c.error(\"unsupported pseudo: \"+a);return f[N]?f(b):f.length>1?(d=[a,a,\"\",b],z.setFilters.hasOwnProperty(a.toLowerCase())?e(function(a,c){for(var d,e=f(a,b),g=e.length;g--;)d=ca.call(a,e[g]),a[d]=!(c[d]=e[g])}):function(a){return f(a,0,d)}):f}},pseudos:{not:e(function(a){var b=[],c=[],d=C(a.replace(ja,\"$1\"));return d[N]?e(function(a,b,c,e){for(var f,g=d(a,null,e,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:e(function(a){return function(b){return c(a,b).length>0}}),contains:e(function(a){return function(b){return(b.textContent||b.innerText||A(b)).indexOf(a)>-1}}),lang:e(function(a){return qa.test(a||\"\")||c.error(\"unsupported lang: \"+a),a=a.replace(xa,ya).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute(\"xml:lang\")||b.getAttribute(\"lang\"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+\"-\");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&!!a.checked||\"option\"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeName>\"@\"||3===a.nodeType||4===a.nodeType)return!1;return!0},parent:function(a){return!z.pseudos.empty(a)},header:function(a){return va.test(a.nodeName)},input:function(a){return ua.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return\"input\"===b&&\"button\"===a.type||\"button\"===b},text:function(a){var b;return\"input\"===a.nodeName.toLowerCase()&&\"text\"===a.type&&(null==(b=a.getAttribute(\"type\"))||b.toLowerCase()===a.type)},first:k(function(){return[0]}),last:k(function(a,b){return[b-1]}),eq:k(function(a,b,c){return[0>c?c+b:c]}),even:k(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:k(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:k(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:k(function(a,b,c){for(var d=0>c?c+b:c;b>++d;)a.push(d);return a})}},z.pseudos.nth=z.pseudos.eq;for(w in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})z.pseudos[w]=i(w);for(w in{submit:!0,reset:!0})z.pseudos[w]=j(w);l.prototype=z.filters=z.pseudos,z.setFilters=new l,C=c.compile=function(a,b){var c,d=[],e=[],f=T[a+\" \"];if(!f){for(b||(b=m(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d))}return f},x.sortStable=N.split(\"\").sort(V).join(\"\")===N,x.detectDuplicates=U,F(),x.sortDetached=f(function(a){return 1&a.compareDocumentPosition(G.createElement(\"div\"))}),f(function(a){return a.innerHTML=\"<a href='#'></a>\",\"#\"===a.firstChild.getAttribute(\"href\")})||g(\"type|href|height|width\",function(a,c,d){return d?b:a.getAttribute(c,\"type\"===c.toLowerCase()?1:2)}),x.attributes&&f(function(a){return a.innerHTML=\"<input/>\",a.firstChild.setAttribute(\"value\",\"\"),\"\"===a.firstChild.getAttribute(\"value\")})||g(\"value\",function(a,c,d){return d||\"input\"!==a.nodeName.toLowerCase()?b:a.defaultValue}),f(function(a){return null==a.getAttribute(\"disabled\")})||g(da,function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&e.specified?e.value:a[c]===!0?c.toLowerCase():null}),ka.find=c,ka.expr=c.selectors,ka.expr[\":\"]=ka.expr.pseudos,ka.unique=c.uniqueSort,ka.text=c.getText,ka.isXMLDoc=c.isXML,ka.contains=c.contains}(a);var za={};ka.Callbacks=function(a){a=\"string\"==typeof a?za[a]||d(a):ka.extend({},a);var c,e,f,g,h,i,j=[],k=!a.once&&[],l=function(b){for(e=a.memory&&b,f=!0,h=i||0,i=0,g=j.length,c=!0;j&&g>h;h++)if(j[h].apply(b[0],b[1])===!1&&a.stopOnFalse){e=!1;break}c=!1,j&&(k?k.length&&l(k.shift()):e?j=[]:m.disable())},m={add:function(){if(j){var b=j.length;!function d(b){ka.each(b,function(b,c){var e=ka.type(c);\"function\"===e?a.unique&&m.has(c)||j.push(c):c&&c.length&&\"string\"!==e&&d(c)})}(arguments),c?g=j.length:e&&(i=b,l(e))}return this},remove:function(){return j&&ka.each(arguments,function(a,b){for(var d;(d=ka.inArray(b,j,d))>-1;)j.splice(d,1),c&&(g>=d&&g--,h>=d&&h--)}),this},has:function(a){return a?ka.inArray(a,j)>-1:!(!j||!j.length)},empty:function(){return j=[],g=0,this},disable:function(){return j=k=e=b,this},disabled:function(){return!j},lock:function(){return k=b,e||m.disable(),this},locked:function(){return!k},fireWith:function(a,b){return!j||f&&!k||(b=b||[],b=[a,b.slice?b.slice():b],c?k.push(b):l(b)),this},fire:function(){return m.fireWith(this,arguments),this},fired:function(){return!!f}};return m},ka.extend({Deferred:function(a){var b=[[\"resolve\",\"done\",ka.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",ka.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",ka.Callbacks(\"memory\")]],c=\"pending\",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return ka.Deferred(function(c){ka.each(b,function(b,f){var g=f[0],h=ka.isFunction(a[b])&&a[b];e[f[1]](function(){var a=h&&h.apply(this,arguments);a&&ka.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[g+\"With\"](this===d?c.promise():this,h?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?ka.extend(a,d):d}},e={};return d.pipe=d.then,ka.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+\"With\"](this===e?d:this,arguments),this},e[f[0]+\"With\"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=fa.call(arguments),g=f.length,h=1!==g||a&&ka.isFunction(a.promise)?g:0,i=1===h?a:ka.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?fa.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=Array(g),c=Array(g),d=Array(g);g>e;e++)f[e]&&ka.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}}),ka.support=function(b){var c,d,e,f,g,h,i,j,k,l=Y.createElement(\"div\");if(l.setAttribute(\"className\",\"t\"),l.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",c=l.getElementsByTagName(\"*\")||[],d=l.getElementsByTagName(\"a\")[0],!d||!d.style||!c.length)return b;f=Y.createElement(\"select\"),h=f.appendChild(Y.createElement(\"option\")),e=l.getElementsByTagName(\"input\")[0],d.style.cssText=\"top:1px;float:left;opacity:.5\",b.getSetAttribute=\"t\"!==l.className,b.leadingWhitespace=3===l.firstChild.nodeType,b.tbody=!l.getElementsByTagName(\"tbody\").length,b.htmlSerialize=!!l.getElementsByTagName(\"link\").length,b.style=/top/.test(d.getAttribute(\"style\")),b.hrefNormalized=\"/a\"===d.getAttribute(\"href\"),b.opacity=/^0.5/.test(d.style.opacity),b.cssFloat=!!d.style.cssFloat,b.checkOn=!!e.value,b.optSelected=h.selected,b.enctype=!!Y.createElement(\"form\").enctype,b.html5Clone=\"<:nav></:nav>\"!==Y.createElement(\"nav\").cloneNode(!0).outerHTML,b.inlineBlockNeedsLayout=!1,b.shrinkWrapBlocks=!1,b.pixelPosition=!1,b.deleteExpando=!0,b.noCloneEvent=!0,b.reliableMarginRight=!0,b.boxSizingReliable=!0,e.checked=!0,b.noCloneChecked=e.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!h.disabled;try{delete l.test}catch(m){b.deleteExpando=!1}e=Y.createElement(\"input\"),e.setAttribute(\"value\",\"\"),b.input=\"\"===e.getAttribute(\"value\"),e.value=\"t\",e.setAttribute(\"type\",\"radio\"),b.radioValue=\"t\"===e.value,e.setAttribute(\"checked\",\"t\"),e.setAttribute(\"name\",\"t\"),g=Y.createDocumentFragment(),g.appendChild(e),b.appendChecked=e.checked,b.checkClone=g.cloneNode(!0).cloneNode(!0).lastChild.checked,l.attachEvent&&(l.attachEvent(\"onclick\",function(){b.noCloneEvent=!1}),l.cloneNode(!0).click());for(k in{submit:!0,change:!0,focusin:!0})l.setAttribute(i=\"on\"+k,\"t\"),b[k+\"Bubbles\"]=i in a||l.attributes[i].expando===!1;l.style.backgroundClip=\"content-box\",l.cloneNode(!0).style.backgroundClip=\"\",b.clearCloneStyle=\"content-box\"===l.style.backgroundClip;for(k in ka(b))break;return b.ownLast=\"0\"!==k,ka(function(){var c,d,e,f=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",g=Y.getElementsByTagName(\"body\")[0];g&&(c=Y.createElement(\"div\"),c.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",g.appendChild(c).appendChild(l),l.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",e=l.getElementsByTagName(\"td\"),e[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",j=0===e[0].offsetHeight,e[0].style.display=\"\",e[1].style.display=\"none\",b.reliableHiddenOffsets=j&&0===e[0].offsetHeight,l.innerHTML=\"\",l.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",ka.swap(g,null!=g.style.zoom?{zoom:1}:{},function(){b.boxSizing=4===l.offsetWidth}),a.getComputedStyle&&(b.pixelPosition=\"1%\"!==(a.getComputedStyle(l,null)||{}).top,b.boxSizingReliable=\"4px\"===(a.getComputedStyle(l,null)||{width:\"4px\"}).width,d=l.appendChild(Y.createElement(\"div\")),d.style.cssText=l.style.cssText=f,d.style.marginRight=d.style.width=\"0\",l.style.width=\"1px\",b.reliableMarginRight=!parseFloat((a.getComputedStyle(d,null)||{}).marginRight)),typeof l.style.zoom!==W&&(l.innerHTML=\"\",l.style.cssText=f+\"width:1px;padding:1px;display:inline;zoom:1\",b.inlineBlockNeedsLayout=3===l.offsetWidth,l.style.display=\"block\",l.innerHTML=\"<div></div>\",l.firstChild.style.width=\"5px\",b.shrinkWrapBlocks=3!==l.offsetWidth,b.inlineBlockNeedsLayout&&(g.style.zoom=1)),g.removeChild(c),c=l=e=d=null)}),c=f=g=h=d=e=null,b}({});var Aa=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,Ba=/([A-Z])/g;ka.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(a){return a=a.nodeType?ka.cache[a[ka.expando]]:a[ka.expando],!!a&&!h(a)},data:function(a,b,c){return e(a,b,c)},removeData:function(a,b){return f(a,b)},_data:function(a,b,c){return e(a,b,c,!0)},_removeData:function(a,b){return f(a,b,!0)},acceptData:function(a){if(a.nodeType&&1!==a.nodeType&&9!==a.nodeType)return!1;var b=a.nodeName&&ka.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute(\"classid\")===b}}),ka.fn.extend({data:function(a,c){var d,e,f=null,h=0,i=this[0];if(a===b){if(this.length&&(f=ka.data(i),1===i.nodeType&&!ka._data(i,\"parsedAttrs\"))){for(d=i.attributes;d.length>h;h++)e=d[h].name,0===e.indexOf(\"data-\")&&(e=ka.camelCase(e.slice(5)),g(i,e,f[e]));ka._data(i,\"parsedAttrs\",!0)}return f}return\"object\"==typeof a?this.each(function(){ka.data(this,a)}):arguments.length>1?this.each(function(){ka.data(this,a,c)}):i?g(i,a,ka.data(i,a)):null},removeData:function(a){return this.each(function(){ka.removeData(this,a)})}}),ka.extend({queue:function(a,c,d){var e;return a?(c=(c||\"fx\")+\"queue\",e=ka._data(a,c),d&&(!e||ka.isArray(d)?e=ka._data(a,c,ka.makeArray(d)):e.push(d)),e||[]):b},dequeue:function(a,b){b=b||\"fx\";var c=ka.queue(a,b),d=c.length,e=c.shift(),f=ka._queueHooks(a,b),g=function(){ka.dequeue(a,b)};\"inprogress\"===e&&(e=c.shift(),d--),e&&(\"fx\"===b&&c.unshift(\"inprogress\"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+\"queueHooks\";return ka._data(a,c)||ka._data(a,c,{empty:ka.Callbacks(\"once memory\").add(function(){ka._removeData(a,b+\"queue\"),ka._removeData(a,c)})})}}),ka.fn.extend({queue:function(a,c){var d=2;return\"string\"!=typeof a&&(c=a,a=\"fx\",d--),d>arguments.length?ka.queue(this[0],a):c===b?this:this.each(function(){var b=ka.queue(this,a,c);ka._queueHooks(this,a),\"fx\"===a&&\"inprogress\"!==b[0]&&ka.dequeue(this,a)})},dequeue:function(a){return this.each(function(){ka.dequeue(this,a)})},delay:function(a,b){return a=ka.fx?ka.fx.speeds[a]||a:a,b=b||\"fx\",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||\"fx\",[])},promise:function(a,c){var d,e=1,f=ka.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};for(\"string\"!=typeof a&&(c=a,a=b),a=a||\"fx\";h--;)d=ka._data(g[h],a+\"queueHooks\"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var Ca,Da,Ea=/[\\t\\r\\n\\f]/g,Fa=/\\r/g,Ga=/^(?:input|select|textarea|button|object)$/i,Ha=/^(?:a|area)$/i,Ia=/^(?:checked|selected)$/i,Ja=ka.support.getSetAttribute,Ka=ka.support.input;ka.fn.extend({attr:function(a,b){return ka.access(this,ka.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){ka.removeAttr(this,a)})},prop:function(a,b){return ka.access(this,ka.prop,a,b,arguments.length>1)},removeProp:function(a){return a=ka.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).addClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\" \")){for(f=0;e=b[f++];)0>d.indexOf(\" \"+e+\" \")&&(d+=e+\" \");c.className=ka.trim(d)}return this},removeClass:function(a){var b,c,d,e,f,g=0,h=this.length,i=0===arguments.length||\"string\"==typeof a&&a;if(ka.isFunction(a))return this.each(function(b){ka(this).removeClass(a.call(this,b,this.className))});if(i)for(b=(a||\"\").match(ma)||[];h>g;g++)if(c=this[g],d=1===c.nodeType&&(c.className?(\" \"+c.className+\" \").replace(Ea,\" \"):\"\")){for(f=0;e=b[f++];)for(;d.indexOf(\" \"+e+\" \")>=0;)d=d.replace(\" \"+e+\" \",\" \");c.className=a?ka.trim(d):\"\"}return this},toggleClass:function(a,b){var c=typeof a;return\"boolean\"==typeof b&&\"string\"===c?b?this.addClass(a):this.removeClass(a):ka.isFunction(a)?this.each(function(c){ka(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(\"string\"===c)for(var b,d=0,e=ka(this),f=a.match(ma)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===W||\"boolean\"===c)&&(this.className&&ka._data(this,\"__className__\",this.className),this.className=this.className||a===!1?\"\":ka._data(this,\"__className__\")||\"\")})},hasClass:function(a){for(var b=\" \"+a+\" \",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(\" \"+this[c].className+\" \").replace(Ea,\" \").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];return arguments.length?(e=ka.isFunction(a),this.each(function(c){var f;1===this.nodeType&&(f=e?a.call(this,c,ka(this).val()):a,null==f?f=\"\":\"number\"==typeof f?f+=\"\":ka.isArray(f)&&(f=ka.map(f,function(a){return null==a?\"\":a+\"\"})),d=ka.valHooks[this.type]||ka.valHooks[this.nodeName.toLowerCase()],d&&\"set\"in d&&d.set(this,f,\"value\")!==b||(this.value=f))})):f?(d=ka.valHooks[f.type]||ka.valHooks[f.nodeName.toLowerCase()],d&&\"get\"in d&&(c=d.get(f,\"value\"))!==b?c:(c=f.value,\"string\"==typeof c?c.replace(Fa,\"\"):null==c?\"\":c)):void 0}}),ka.extend({valHooks:{option:{get:function(a){var b=ka.find.attr(a,\"value\");return null!=b?b:a.text}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f=\"select-one\"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(ka.support.optDisabled?c.disabled:null!==c.getAttribute(\"disabled\"))||c.parentNode.disabled&&ka.nodeName(c.parentNode,\"optgroup\"))){if(b=ka(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=ka.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=ka.inArray(ka(d).val(),f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}},attr:function(a,c,d){var e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return typeof a.getAttribute===W?ka.prop(a,c,d):(1===g&&ka.isXMLDoc(a)||(c=c.toLowerCase(),e=ka.attrHooks[c]||(ka.expr.match.bool.test(c)?Da:Ca)),d===b?e&&\"get\"in e&&null!==(f=e.get(a,c))?f:(f=ka.find.attr(a,c),null==f?b:f):null!==d?e&&\"set\"in e&&(f=e.set(a,d,c))!==b?f:(a.setAttribute(c,d+\"\"),d):(ka.removeAttr(a,c),b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(ma);if(f&&1===a.nodeType)for(;c=f[e++];)d=ka.propFix[c]||c,ka.expr.match.bool.test(c)?Ka&&Ja||!Ia.test(c)?a[d]=!1:a[ka.camelCase(\"default-\"+c)]=a[d]=!1:ka.attr(a,c,\"\"),a.removeAttribute(Ja?c:d)},attrHooks:{type:{set:function(a,b){if(!ka.support.radioValue&&\"radio\"===b&&ka.nodeName(a,\"input\")){var c=a.value;return a.setAttribute(\"type\",b),c&&(a.value=c),b}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(a&&3!==h&&8!==h&&2!==h)return g=1!==h||!ka.isXMLDoc(a),g&&(c=ka.propFix[c]||c,f=ka.propHooks[c]),d!==b?f&&\"set\"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&\"get\"in f&&null!==(e=f.get(a,c))?e:a[c]},propHooks:{tabIndex:{get:function(a){var b=ka.find.attr(a,\"tabindex\");return b?parseInt(b,10):Ga.test(a.nodeName)||Ha.test(a.nodeName)&&a.href?0:-1}}}}),Da={set:function(a,b,c){return b===!1?ka.removeAttr(a,c):Ka&&Ja||!Ia.test(c)?a.setAttribute(!Ja&&ka.propFix[c]||c,c):a[ka.camelCase(\"default-\"+c)]=a[c]=!0,c}},ka.each(ka.expr.match.bool.source.match(/\\w+/g),function(a,c){var d=ka.expr.attrHandle[c]||ka.find.attr;ka.expr.attrHandle[c]=Ka&&Ja||!Ia.test(c)?function(a,c,e){var f=ka.expr.attrHandle[c],g=e?b:(ka.expr.attrHandle[c]=b)!=d(a,c,e)?c.toLowerCase():null;return ka.expr.attrHandle[c]=f,g}:function(a,c,d){return d?b:a[ka.camelCase(\"default-\"+c)]?c.toLowerCase():null}}),Ka&&Ja||(ka.attrHooks.value={set:function(a,c,d){return ka.nodeName(a,\"input\")?(a.defaultValue=c,b):Ca&&Ca.set(a,c,d)}}),Ja||(Ca={set:function(a,c,d){var e=a.getAttributeNode(d);return e||a.setAttributeNode(e=a.ownerDocument.createAttribute(d)),e.value=c+=\"\",\"value\"===d||c===a.getAttribute(d)?c:b}},ka.expr.attrHandle.id=ka.expr.attrHandle.name=ka.expr.attrHandle.coords=function(a,c,d){var e;return d?b:(e=a.getAttributeNode(c))&&\"\"!==e.value?e.value:null},ka.valHooks.button={get:function(a,c){var d=a.getAttributeNode(c);return d&&d.specified?d.value:b},set:Ca.set},ka.attrHooks.contenteditable={set:function(a,b,c){Ca.set(a,\"\"!==b&&b,c)}},ka.each([\"width\",\"height\"],function(a,c){ka.attrHooks[c]={set:function(a,d){return\"\"===d?(a.setAttribute(c,\"auto\"),d):b}}})),ka.support.hrefNormalized||ka.each([\"href\",\"src\"],function(a,b){ka.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),ka.support.style||(ka.attrHooks.style={get:function(a){return a.style.cssText||b},set:function(a,b){return a.style.cssText=b+\"\"}}),ka.support.optSelected||(ka.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),ka.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){ka.propFix[this.toLowerCase()]=this}),ka.support.enctype||(ka.propFix.enctype=\"encoding\"),ka.each([\"radio\",\"checkbox\"],function(){ka.valHooks[this]={set:function(a,c){return ka.isArray(c)?a.checked=ka.inArray(ka(a).val(),c)>=0:b}},ka.support.checkOn||(ka.valHooks[this].get=function(a){return null===a.getAttribute(\"value\")?\"on\":a.value})});var La=/^(?:input|select|textarea)$/i,Ma=/^key/,Na=/^(?:mouse|contextmenu)|click/,Oa=/^(?:focusinfocus|focusoutblur)$/,Pa=/^([^.]*)(?:\\.(.+)|)$/;ka.event={global:{},add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,p,q,r=ka._data(a);if(r){for(d.handler&&(j=d,d=j.handler,f=j.selector),d.guid||(d.guid=ka.guid++),(h=r.events)||(h=r.events={}),(l=r.handle)||(l=r.handle=function(a){return typeof ka===W||a&&ka.event.triggered===a.type?b:ka.event.dispatch.apply(l.elem,arguments)},l.elem=a),c=(c||\"\").match(ma)||[\"\"],i=c.length;i--;)g=Pa.exec(c[i])||[],o=q=g[1],p=(g[2]||\"\").split(\".\").sort(),o&&(k=ka.event.special[o]||{},o=(f?k.delegateType:k.bindType)||o,k=ka.event.special[o]||{},m=ka.extend({type:o,origType:q,data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&ka.expr.match.needsContext.test(f),namespace:p.join(\".\")},j),(n=h[o])||(n=h[o]=[],n.delegateCount=0,k.setup&&k.setup.call(a,e,p,l)!==!1||(a.addEventListener?a.addEventListener(o,l,!1):a.attachEvent&&a.attachEvent(\"on\"+o,l))),k.add&&(k.add.call(a,m),m.handler.guid||(m.handler.guid=d.guid)),f?n.splice(n.delegateCount++,0,m):n.push(m),ka.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ka.hasData(a)&&ka._data(a);if(q&&(k=q.events)){for(b=(b||\"\").match(ma)||[\"\"],j=b.length;j--;)if(h=Pa.exec(b[j])||[],n=p=h[1],o=(h[2]||\"\").split(\".\").sort(),n){for(l=ka.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=k[n]||[],h=h[2]&&RegExp(\"(^|\\\\.)\"+o.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),i=f=m.length;f--;)g=m[f],!e&&p!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&(\"**\"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||ka.removeEvent(a,n,q.handle),delete k[n])}else for(n in k)ka.event.remove(a,n+b[j],c,d,!0);ka.isEmptyObject(k)&&(delete q.handle,ka._removeData(a,\"events\"))}},trigger:function(c,d,e,f){var g,h,i,j,k,l,m,n=[e||Y],o=ia.call(c,\"type\")?c.type:c,p=ia.call(c,\"namespace\")?c.namespace.split(\".\"):[];if(i=l=e=e||Y,3!==e.nodeType&&8!==e.nodeType&&!Oa.test(o+ka.event.triggered)&&(o.indexOf(\".\")>=0&&(p=o.split(\".\"),o=p.shift(),p.sort()),h=0>o.indexOf(\":\")&&\"on\"+o,c=c[ka.expando]?c:new ka.Event(o,\"object\"==typeof c&&c),c.isTrigger=f?2:3,c.namespace=p.join(\".\"),c.namespace_re=c.namespace?RegExp(\"(^|\\\\.)\"+p.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,c.result=b,c.target||(c.target=e),d=null==d?[c]:ka.makeArray(d,[c]),k=ka.event.special[o]||{},f||!k.trigger||k.trigger.apply(e,d)!==!1)){if(!f&&!k.noBubble&&!ka.isWindow(e)){for(j=k.delegateType||o,Oa.test(j+o)||(i=i.parentNode);i;i=i.parentNode)n.push(i),l=i;l===(e.ownerDocument||Y)&&n.push(l.defaultView||l.parentWindow||a)}for(m=0;(i=n[m++])&&!c.isPropagationStopped();)c.type=m>1?j:k.bindType||o,g=(ka._data(i,\"events\")||{})[c.type]&&ka._data(i,\"handle\"),g&&g.apply(i,d),g=h&&i[h],g&&ka.acceptData(i)&&g.apply&&g.apply(i,d)===!1&&c.preventDefault();if(c.type=o,!f&&!c.isDefaultPrevented()&&(!k._default||k._default.apply(n.pop(),d)===!1)&&ka.acceptData(e)&&h&&e[o]&&!ka.isWindow(e)){l=e[h],l&&(e[h]=null),ka.event.triggered=o;try{e[o]()}catch(q){}ka.event.triggered=b,l&&(e[h]=l)}return c.result}},dispatch:function(a){a=ka.event.fix(a);var c,d,e,f,g,h=[],i=fa.call(arguments),j=(ka._data(this,\"events\")||{})[a.type]||[],k=ka.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){for(h=ka.event.handlers.call(this,a,j),c=0;(f=h[c++])&&!a.isPropagationStopped();)for(a.currentTarget=f.elem,g=0;(e=f.handlers[g++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,d=((ka.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),d!==b&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,c){var d,e,f,g,h=[],i=c.delegateCount,j=a.target;if(i&&j.nodeType&&(!a.button||\"click\"!==a.type))for(;j!=this;j=j.parentNode||this)if(1===j.nodeType&&(j.disabled!==!0||\"click\"!==a.type)){for(f=[],g=0;i>g;g++)e=c[g],d=e.selector+\" \",f[d]===b&&(f[d]=e.needsContext?ka(d,this).index(j)>=0:ka.find(d,this,null,[j]).length),f[d]&&f.push(e);f.length&&h.push({elem:j,handlers:f})}return c.length>i&&h.push({elem:this,handlers:c.slice(i)}),h},fix:function(a){if(a[ka.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Na.test(e)?this.mouseHooks:Ma.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new ka.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=f.srcElement||Y),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,g.filter?g.filter(a,f):a},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(a,c){var d,e,f,g=c.button,h=c.fromElement;return null==a.pageX&&null!=c.clientX&&(e=a.target.ownerDocument||Y,f=e.documentElement,d=e.body,a.pageX=c.clientX+(f&&f.scrollLeft||d&&d.scrollLeft||0)-(f&&f.clientLeft||d&&d.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||d&&d.scrollTop||0)-(f&&f.clientTop||d&&d.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?c.toElement:h),a.which||g===b||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==k()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===k()&&this.blur?(this.blur(),!1):b},delegateType:\"focusout\"},click:{trigger:function(){return ka.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):b},_default:function(a){return ka.nodeName(a.target,\"a\")}},beforeunload:{postDispatch:function(a){a.result!==b&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=ka.extend(new ka.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?ka.event.trigger(e,null,b):ka.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},ka.removeEvent=Y.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d=\"on\"+b;a.detachEvent&&(typeof a[d]===W&&(a[d]=null),a.detachEvent(d,c))},ka.Event=function(a,c){return this instanceof ka.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?i:j):this.type=a,c&&ka.extend(this,c),this.timeStamp=a&&a.timeStamp||ka.now(),this[ka.expando]=!0,b):new ka.Event(a,c)},ka.Event.prototype={isDefaultPrevented:j,isPropagationStopped:j,isImmediatePropagationStopped:j,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=i,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=i,a&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=i,this.stopPropagation()}},ka.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(a,b){ka.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!ka.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),ka.support.submitBubbles||(ka.event.special.submit={setup:function(){return!ka.nodeName(this,\"form\")&&(ka.event.add(this,\"click._submit keypress._submit\",function(a){var c=a.target,d=ka.nodeName(c,\"input\")||ka.nodeName(c,\"button\")?c.form:b;d&&!ka._data(d,\"submitBubbles\")&&(ka.event.add(d,\"submit._submit\",function(a){a._submit_bubble=!0}),ka._data(d,\"submitBubbles\",!0))}),b)},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&ka.event.simulate(\"submit\",this.parentNode,a,!0))},teardown:function(){return!ka.nodeName(this,\"form\")&&(ka.event.remove(this,\"._submit\"),b)}}),ka.support.changeBubbles||(ka.event.special.change={setup:function(){return La.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(ka.event.add(this,\"propertychange._change\",function(a){\"checked\"===a.originalEvent.propertyName&&(this._just_changed=!0)}),ka.event.add(this,\"click._change\",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),ka.event.simulate(\"change\",this,a,!0)})),!1):(ka.event.add(this,\"beforeactivate._change\",function(a){var b=a.target;La.test(b.nodeName)&&!ka._data(b,\"changeBubbles\")&&(ka.event.add(b,\"change._change\",function(a){!this.parentNode||a.isSimulated||a.isTrigger||ka.event.simulate(\"change\",this.parentNode,a,!0)}),ka._data(b,\"changeBubbles\",!0))}),b)},handle:function(a){var c=a.target;return this!==c||a.isSimulated||a.isTrigger||\"radio\"!==c.type&&\"checkbox\"!==c.type?a.handleObj.handler.apply(this,arguments):b},teardown:function(){return ka.event.remove(this,\"._change\"),!La.test(this.nodeName)}}),ka.support.focusinBubbles||ka.each({focus:\"focusin\",blur:\"focusout\"},function(a,b){var c=0,d=function(a){ka.event.simulate(b,a.target,ka.event.fix(a),!0)};ka.event.special[b]={setup:function(){0===c++&&Y.addEventListener(a,d,!0)},teardown:function(){0===--c&&Y.removeEventListener(a,d,!0)}}}),ka.fn.extend({on:function(a,c,d,e,f){var g,h;if(\"object\"==typeof a){\"string\"!=typeof c&&(d=d||c,c=b);for(g in a)this.on(g,c,d,a[g],f);return this}if(null==d&&null==e?(e=c,d=c=b):null==e&&(\"string\"==typeof c?(e=d,d=b):(e=d,d=c,c=b)),e===!1)e=j;else if(!e)return this;return 1===f&&(h=e,e=function(a){return ka().off(a),h.apply(this,arguments)},e.guid=h.guid||(h.guid=ka.guid++)),this.each(function(){ka.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,ka(a.delegateTarget).off(e.namespace?e.origType+\".\"+e.namespace:e.origType,e.selector,e.handler),this;if(\"object\"==typeof a){for(f in a)this.off(f,c,a[f]);return this}return(c===!1||\"function\"==typeof c)&&(d=c,c=b),d===!1&&(d=j),this.each(function(){ka.event.remove(this,a,d,c)})},trigger:function(a,b){return this.each(function(){ka.event.trigger(a,b,this)})},triggerHandler:function(a,c){var d=this[0];return d?ka.event.trigger(a,c,d,!0):b}});var Qa=/^.[^:#\\[\\.,]*$/,Ra=/^(?:parents|prev(?:Until|All))/,Sa=ka.expr.match.needsContext,Ta={children:!0,contents:!0,next:!0,prev:!0};ka.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if(\"string\"!=typeof a)return this.pushStack(ka(a).filter(function(){for(b=0;e>b;b++)if(ka.contains(d[b],this))return!0}));for(b=0;e>b;b++)ka.find(a,d[b],c);return c=this.pushStack(e>1?ka.unique(c):c),c.selector=this.selector?this.selector+\" \"+a:a,c},has:function(a){var b,c=ka(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(ka.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(m(this,a||[],!0))},filter:function(a){return this.pushStack(m(this,a||[],!1))},is:function(a){return!!m(this,\"string\"==typeof a&&Sa.test(a)?ka(a):a||[],!1).length},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=Sa.test(a)||\"string\"!=typeof a?ka(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(11>c.nodeType&&(g?g.index(c)>-1:1===c.nodeType&&ka.find.matchesSelector(c,a))){c=f.push(c);break}return this.pushStack(f.length>1?ka.unique(f):f)},index:function(a){return a?\"string\"==typeof a?ka.inArray(this[0],ka(a)):ka.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){var c=\"string\"==typeof a?ka(a,b):ka.makeArray(a&&a.nodeType?[a]:a),d=ka.merge(this.get(),c);return this.pushStack(ka.unique(d))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),ka.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return ka.dir(a,\"parentNode\")},parentsUntil:function(a,b,c){return ka.dir(a,\"parentNode\",c)},next:function(a){return l(a,\"nextSibling\")},prev:function(a){return l(a,\"previousSibling\")},nextAll:function(a){return ka.dir(a,\"nextSibling\");\n},prevAll:function(a){return ka.dir(a,\"previousSibling\")},nextUntil:function(a,b,c){return ka.dir(a,\"nextSibling\",c)},prevUntil:function(a,b,c){return ka.dir(a,\"previousSibling\",c)},siblings:function(a){return ka.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return ka.sibling(a.firstChild)},contents:function(a){return ka.nodeName(a,\"iframe\")?a.contentDocument||a.contentWindow.document:ka.merge([],a.childNodes)}},function(a,b){ka.fn[a]=function(c,d){var e=ka.map(this,b,c);return\"Until\"!==a.slice(-5)&&(d=c),d&&\"string\"==typeof d&&(e=ka.filter(d,e)),this.length>1&&(Ta[a]||(e=ka.unique(e)),Ra.test(a)&&(e=e.reverse())),this.pushStack(e)}}),ka.extend({filter:function(a,b,c){var d=b[0];return c&&(a=\":not(\"+a+\")\"),1===b.length&&1===d.nodeType?ka.find.matchesSelector(d,a)?[d]:[]:ka.find.matches(a,ka.grep(b,function(a){return 1===a.nodeType}))},dir:function(a,c,d){for(var e=[],f=a[c];f&&9!==f.nodeType&&(d===b||1!==f.nodeType||!ka(f).is(d));)1===f.nodeType&&e.push(f),f=f[c];return e},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}});var Ua=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",Va=/ jQuery\\d+=\"(?:null|\\d+)\"/g,Wa=RegExp(\"<(?:\"+Ua+\")[\\\\s/>]\",\"i\"),Xa=/^\\s+/,Ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,Za=/<([\\w:]+)/,$a=/<tbody/i,_a=/<|&#?\\w+;/,ab=/<(?:script|style|link)/i,bb=/^(?:checkbox|radio)$/i,cb=/checked\\s*(?:[^=]|=\\s*.checked.)/i,db=/^$|\\/(?:java|ecma)script/i,eb=/^true\\/(.*)/,fb=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,gb={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:ka.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},hb=n(Y),ib=hb.appendChild(Y.createElement(\"div\"));gb.optgroup=gb.option,gb.tbody=gb.tfoot=gb.colgroup=gb.caption=gb.thead,gb.th=gb.td,ka.fn.extend({text:function(a){return ka.access(this,function(a){return a===b?ka.text(this):this.empty().append((this[0]&&this[0].ownerDocument||Y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=o(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?ka.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||ka.cleanData(u(c)),c.parentNode&&(b&&ka.contains(c.ownerDocument,c)&&r(u(c,\"script\")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){for(1===a.nodeType&&ka.cleanData(u(a,!1));a.firstChild;)a.removeChild(a.firstChild);a.options&&ka.nodeName(a,\"select\")&&(a.options.length=0)}return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return ka.clone(this,a,b)})},html:function(a){return ka.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return 1===c.nodeType?c.innerHTML.replace(Va,\"\"):b;if(!(\"string\"!=typeof a||ab.test(a)||!ka.support.htmlSerialize&&Wa.test(a)||!ka.support.leadingWhitespace&&Xa.test(a)||gb[(Za.exec(a)||[\"\",\"\"])[1].toLowerCase()])){a=a.replace(Ya,\"<$1></$2>\");try{for(;e>d;d++)c=this[d]||{},1===c.nodeType&&(ka.cleanData(u(c,!1)),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=ka.map(this,function(a){return[a.nextSibling,a.parentNode]}),b=0;return this.domManip(arguments,function(c){var d=a[b++],e=a[b++];e&&(d&&d.parentNode!==e&&(d=this.nextSibling),ka(this).remove(),e.insertBefore(c,d))},!0),b?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b,c){a=da.apply([],a);var d,e,f,g,h,i,j=0,k=this.length,l=this,m=k-1,n=a[0],o=ka.isFunction(n);if(o||!(1>=k||\"string\"!=typeof n||ka.support.checkClone)&&cb.test(n))return this.each(function(d){var e=l.eq(d);o&&(a[0]=n.call(this,d,e.html())),e.domManip(a,b,c)});if(k&&(i=ka.buildFragment(a,this[0].ownerDocument,!1,!c&&this),d=i.firstChild,1===i.childNodes.length&&(i=d),d)){for(g=ka.map(u(i,\"script\"),p),f=g.length;k>j;j++)e=i,j!==m&&(e=ka.clone(e,!0,!0),f&&ka.merge(g,u(e,\"script\"))),b.call(this[j],e,j);if(f)for(h=g[g.length-1].ownerDocument,ka.map(g,q),j=0;f>j;j++)e=g[j],db.test(e.type||\"\")&&!ka._data(e,\"globalEval\")&&ka.contains(h,e)&&(e.src?ka._evalUrl(e.src):ka.globalEval((e.text||e.textContent||e.innerHTML||\"\").replace(fb,\"\")));i=d=null}return this}}),ka.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(a,b){ka.fn[a]=function(a){for(var c,d=0,e=[],f=ka(a),g=f.length-1;g>=d;d++)c=d===g?this:this.clone(!0),ka(f[d])[b](c),ea.apply(e,c.get());return this.pushStack(e)}}),ka.extend({clone:function(a,b,c){var d,e,f,g,h,i=ka.contains(a.ownerDocument,a);if(ka.support.html5Clone||ka.isXMLDoc(a)||!Wa.test(\"<\"+a.nodeName+\">\")?f=a.cloneNode(!0):(ib.innerHTML=a.outerHTML,ib.removeChild(f=ib.firstChild)),!(ka.support.noCloneEvent&&ka.support.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||ka.isXMLDoc(a)))for(d=u(f),h=u(a),g=0;null!=(e=h[g]);++g)d[g]&&t(e,d[g]);if(b)if(c)for(h=h||u(a),d=d||u(f),g=0;null!=(e=h[g]);g++)s(e,d[g]);else s(a,f);return d=u(f,\"script\"),d.length>0&&r(d,!i&&u(a,\"script\")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k,l=a.length,m=n(b),o=[],p=0;l>p;p++)if(f=a[p],f||0===f)if(\"object\"===ka.type(f))ka.merge(o,f.nodeType?[f]:f);else if(_a.test(f)){for(h=h||m.appendChild(b.createElement(\"div\")),i=(Za.exec(f)||[\"\",\"\"])[1].toLowerCase(),k=gb[i]||gb._default,h.innerHTML=k[1]+f.replace(Ya,\"<$1></$2>\")+k[2],e=k[0];e--;)h=h.lastChild;if(!ka.support.leadingWhitespace&&Xa.test(f)&&o.push(b.createTextNode(Xa.exec(f)[0])),!ka.support.tbody)for(f=\"table\"!==i||$a.test(f)?\"<table>\"!==k[1]||$a.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;e--;)ka.nodeName(j=f.childNodes[e],\"tbody\")&&!j.childNodes.length&&f.removeChild(j);for(ka.merge(o,h.childNodes),h.textContent=\"\";h.firstChild;)h.removeChild(h.firstChild);h=m.lastChild}else o.push(b.createTextNode(f));for(h&&m.removeChild(h),ka.support.appendChecked||ka.grep(u(o,\"input\"),v),p=0;f=o[p++];)if((!d||-1===ka.inArray(f,d))&&(g=ka.contains(f.ownerDocument,f),h=u(m.appendChild(f),\"script\"),g&&r(h),c))for(e=0;f=h[e++];)db.test(f.type||\"\")&&c.push(f);return h=null,m},cleanData:function(a,b){for(var c,d,e,f,g=0,h=ka.expando,i=ka.cache,j=ka.support.deleteExpando,k=ka.event.special;null!=(c=a[g]);g++)if((b||ka.acceptData(c))&&(e=c[h],f=e&&i[e])){if(f.events)for(d in f.events)k[d]?ka.event.remove(c,d):ka.removeEvent(c,d,f.handle);i[e]&&(delete i[e],j?delete c[h]:typeof c.removeAttribute!==W?c.removeAttribute(h):c[h]=null,ba.push(e))}},_evalUrl:function(a){return ka.ajax({url:a,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),ka.fn.extend({wrapAll:function(a){if(ka.isFunction(a))return this.each(function(b){ka(this).wrapAll(a.call(this,b))});if(this[0]){var b=ka(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstChild&&1===a.firstChild.nodeType;)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return ka.isFunction(a)?this.each(function(b){ka(this).wrapInner(a.call(this,b))}):this.each(function(){var b=ka(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=ka.isFunction(a);return this.each(function(c){ka(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){ka.nodeName(this,\"body\")||ka(this).replaceWith(this.childNodes)}).end()}});var jb,kb,lb,mb=/alpha\\([^)]*\\)/i,nb=/opacity\\s*=\\s*([^)]*)/,ob=/^(top|right|bottom|left)$/,pb=/^(none|table(?!-c[ea]).+)/,qb=/^margin/,rb=RegExp(\"^(\"+la+\")(.*)$\",\"i\"),sb=RegExp(\"^(\"+la+\")(?!px)[a-z%]+$\",\"i\"),tb=RegExp(\"^([+-])=(\"+la+\")\",\"i\"),ub={BODY:\"block\"},vb={position:\"absolute\",visibility:\"hidden\",display:\"block\"},wb={letterSpacing:0,fontWeight:400},xb=[\"Top\",\"Right\",\"Bottom\",\"Left\"],yb=[\"Webkit\",\"O\",\"Moz\",\"ms\"];ka.fn.extend({css:function(a,c){return ka.access(this,function(a,c,d){var e,f,g={},h=0;if(ka.isArray(c)){for(f=kb(a),e=c.length;e>h;h++)g[c[h]]=ka.css(a,c[h],!1,f);return g}return d!==b?ka.style(a,c,d):ka.css(a,c)},a,c,arguments.length>1)},show:function(){return y(this,!0)},hide:function(){return y(this)},toggle:function(a){return\"boolean\"==typeof a?a?this.show():this.hide():this.each(function(){x(this)?ka(this).show():ka(this).hide()})}}),ka.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=lb(a,\"opacity\");return\"\"===c?\"1\":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":ka.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(a,c,d,e){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var f,g,h,i=ka.camelCase(c),j=a.style;if(c=ka.cssProps[i]||(ka.cssProps[i]=w(j,i)),h=ka.cssHooks[c]||ka.cssHooks[i],d===b)return h&&\"get\"in h&&(f=h.get(a,!1,e))!==b?f:j[c];if(g=typeof d,\"string\"===g&&(f=tb.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(ka.css(a,c)),g=\"number\"),!(null==d||\"number\"===g&&isNaN(d)||(\"number\"!==g||ka.cssNumber[i]||(d+=\"px\"),ka.support.clearCloneStyle||\"\"!==d||0!==c.indexOf(\"background\")||(j[c]=\"inherit\"),h&&\"set\"in h&&(d=h.set(a,d,e))===b)))try{j[c]=d}catch(k){}}},css:function(a,c,d,e){var f,g,h,i=ka.camelCase(c);return c=ka.cssProps[i]||(ka.cssProps[i]=w(a.style,i)),h=ka.cssHooks[c]||ka.cssHooks[i],h&&\"get\"in h&&(g=h.get(a,!0,d)),g===b&&(g=lb(a,c,e)),\"normal\"===g&&c in wb&&(g=wb[c]),\"\"===d||d?(f=parseFloat(g),d===!0||ka.isNumeric(f)?f||0:g):g}}),a.getComputedStyle?(kb=function(b){return a.getComputedStyle(b,null)},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h.getPropertyValue(c)||h[c]:b,j=a.style;return h&&(\"\"!==i||ka.contains(a.ownerDocument,a)||(i=ka.style(a,c)),sb.test(i)&&qb.test(c)&&(e=j.width,f=j.minWidth,g=j.maxWidth,j.minWidth=j.maxWidth=j.width=i,i=h.width,j.width=e,j.minWidth=f,j.maxWidth=g)),i}):Y.documentElement.currentStyle&&(kb=function(a){return a.currentStyle},lb=function(a,c,d){var e,f,g,h=d||kb(a),i=h?h[c]:b,j=a.style;return null==i&&j&&j[c]&&(i=j[c]),sb.test(i)&&!ob.test(c)&&(e=j.left,f=a.runtimeStyle,g=f&&f.left,g&&(f.left=a.currentStyle.left),j.left=\"fontSize\"===c?\"1em\":i,i=j.pixelLeft+\"px\",j.left=e,g&&(f.left=g)),\"\"===i?\"auto\":i}),ka.each([\"height\",\"width\"],function(a,c){ka.cssHooks[c]={get:function(a,d,e){return d?0===a.offsetWidth&&pb.test(ka.css(a,\"display\"))?ka.swap(a,vb,function(){return B(a,c,e)}):B(a,c,e):b},set:function(a,b,d){var e=d&&kb(a);return z(a,b,d?A(a,c,d,ka.support.boxSizing&&\"border-box\"===ka.css(a,\"boxSizing\",!1,e),e):0)}}}),ka.support.opacity||(ka.cssHooks.opacity={get:function(a,b){return nb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":b?\"1\":\"\"},set:function(a,b){var c=a.style,d=a.currentStyle,e=ka.isNumeric(b)?\"alpha(opacity=\"+100*b+\")\":\"\",f=d&&d.filter||c.filter||\"\";c.zoom=1,(b>=1||\"\"===b)&&\"\"===ka.trim(f.replace(mb,\"\"))&&c.removeAttribute&&(c.removeAttribute(\"filter\"),\"\"===b||d&&!d.filter)||(c.filter=mb.test(f)?f.replace(mb,e):f+\" \"+e)}}),ka(function(){ka.support.reliableMarginRight||(ka.cssHooks.marginRight={get:function(a,c){return c?ka.swap(a,{display:\"inline-block\"},lb,[a,\"marginRight\"]):b}}),!ka.support.pixelPosition&&ka.fn.position&&ka.each([\"top\",\"left\"],function(a,c){ka.cssHooks[c]={get:function(a,d){return d?(d=lb(a,c),sb.test(d)?ka(a).position()[c]+\"px\":d):b}}})}),ka.expr&&ka.expr.filters&&(ka.expr.filters.hidden=function(a){return 0>=a.offsetWidth&&0>=a.offsetHeight||!ka.support.reliableHiddenOffsets&&\"none\"===(a.style&&a.style.display||ka.css(a,\"display\"))},ka.expr.filters.visible=function(a){return!ka.expr.filters.hidden(a)}),ka.each({margin:\"\",padding:\"\",border:\"Width\"},function(a,b){ka.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f=\"string\"==typeof c?c.split(\" \"):[c];4>d;d++)e[a+xb[d]+b]=f[d]||f[d-2]||f[0];return e}},qb.test(a)||(ka.cssHooks[a+b].set=z)});var zb=/%20/g,Ab=/\\[\\]$/,Bb=/\\r?\\n/g,Cb=/^(?:submit|button|image|reset|file)$/i,Db=/^(?:input|select|textarea|keygen)/i;ka.fn.extend({serialize:function(){return ka.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=ka.prop(this,\"elements\");return a?ka.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!ka(this).is(\":disabled\")&&Db.test(this.nodeName)&&!Cb.test(a)&&(this.checked||!bb.test(a))}).map(function(a,b){var c=ka(this).val();return null==c?null:ka.isArray(c)?ka.map(c,function(a){return{name:b.name,value:a.replace(Bb,\"\\r\\n\")}}):{name:b.name,value:c.replace(Bb,\"\\r\\n\")}}).get()}}),ka.param=function(a,c){var d,e=[],f=function(a,b){b=ka.isFunction(b)?b():null==b?\"\":b,e[e.length]=encodeURIComponent(a)+\"=\"+encodeURIComponent(b)};if(c===b&&(c=ka.ajaxSettings&&ka.ajaxSettings.traditional),ka.isArray(a)||a.jquery&&!ka.isPlainObject(a))ka.each(a,function(){f(this.name,this.value)});else for(d in a)E(d,a[d],c,f);return e.join(\"&\").replace(zb,\"+\")},ka.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(a,b){ka.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),ka.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,\"**\"):this.off(b,a||\"**\",c)}});var Eb,Fb,Gb=ka.now(),Hb=/\\?/,Ib=/#.*$/,Jb=/([?&])_=[^&]*/,Kb=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Lb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mb=/^(?:GET|HEAD)$/,Nb=/^\\/\\//,Ob=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Pb=ka.fn.load,Qb={},Rb={},Sb=\"*/\".concat(\"*\");try{Fb=X.href}catch(Tb){Fb=Y.createElement(\"a\"),Fb.href=\"\",Fb=Fb.href}Eb=Ob.exec(Fb.toLowerCase())||[],ka.fn.load=function(a,c,d){if(\"string\"!=typeof a&&Pb)return Pb.apply(this,arguments);var e,f,g,h=this,i=a.indexOf(\" \");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),ka.isFunction(c)?(d=c,c=b):c&&\"object\"==typeof c&&(g=\"POST\"),h.length>0&&ka.ajax({url:a,type:g,dataType:\"html\",data:c}).done(function(a){f=arguments,h.html(e?ka(\"<div>\").append(ka.parseHTML(a)).find(e):a)}).complete(d&&function(a,b){h.each(d,f||[a.responseText,b,a])}),this},ka.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(a,b){ka.fn[b]=function(a){return this.on(b,a)}}),ka.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Fb,type:\"GET\",isLocal:Lb.test(Eb[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Sb,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":ka.parseJSON,\"text xml\":ka.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?H(H(a,ka.ajaxSettings),b):H(ka.ajaxSettings,a)},ajaxPrefilter:F(Qb),ajaxTransport:F(Rb),ajax:function(a,c){function d(a,c,d,e){var f,l,s,t,v,x=c;2!==u&&(u=2,i&&clearTimeout(i),k=b,h=e||\"\",w.readyState=a>0?4:0,f=a>=200&&300>a||304===a,d&&(t=I(m,w,d)),t=J(m,t,w,f),f?(m.ifModified&&(v=w.getResponseHeader(\"Last-Modified\"),v&&(ka.lastModified[g]=v),v=w.getResponseHeader(\"etag\"),v&&(ka.etag[g]=v)),204===a||\"HEAD\"===m.type?x=\"nocontent\":304===a?x=\"notmodified\":(x=t.state,l=t.data,s=t.error,f=!s)):(s=x,(a||!x)&&(x=\"error\",0>a&&(a=0))),w.status=a,w.statusText=(c||x)+\"\",f?p.resolveWith(n,[l,x,w]):p.rejectWith(n,[w,x,s]),w.statusCode(r),r=b,j&&o.trigger(f?\"ajaxSuccess\":\"ajaxError\",[w,m,f?l:s]),q.fireWith(n,[w,x]),j&&(o.trigger(\"ajaxComplete\",[w,m]),--ka.active||ka.event.trigger(\"ajaxStop\")))}\"object\"==typeof a&&(c=a,a=b),c=c||{};var e,f,g,h,i,j,k,l,m=ka.ajaxSetup({},c),n=m.context||m,o=m.context&&(n.nodeType||n.jquery)?ka(n):ka.event,p=ka.Deferred(),q=ka.Callbacks(\"once memory\"),r=m.statusCode||{},s={},t={},u=0,v=\"canceled\",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!l)for(l={};b=Kb.exec(h);)l[b[1].toLowerCase()]=b[2];b=l[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?h:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(m.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return k&&k.abort(b),d(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,m.url=((a||m.url||Fb)+\"\").replace(Ib,\"\").replace(Nb,Eb[1]+\"//\"),m.type=c.method||c.type||m.method||m.type,m.dataTypes=ka.trim(m.dataType||\"*\").toLowerCase().match(ma)||[\"\"],null==m.crossDomain&&(e=Ob.exec(m.url.toLowerCase()),m.crossDomain=!(!e||e[1]===Eb[1]&&e[2]===Eb[2]&&(e[3]||(\"http:\"===e[1]?\"80\":\"443\"))===(Eb[3]||(\"http:\"===Eb[1]?\"80\":\"443\")))),m.data&&m.processData&&\"string\"!=typeof m.data&&(m.data=ka.param(m.data,m.traditional)),G(Qb,m,c,w),2===u)return w;j=m.global,j&&0===ka.active++&&ka.event.trigger(\"ajaxStart\"),m.type=m.type.toUpperCase(),m.hasContent=!Mb.test(m.type),g=m.url,m.hasContent||(m.data&&(g=m.url+=(Hb.test(g)?\"&\":\"?\")+m.data,delete m.data),m.cache===!1&&(m.url=Jb.test(g)?g.replace(Jb,\"$1_=\"+Gb++):g+(Hb.test(g)?\"&\":\"?\")+\"_=\"+Gb++)),m.ifModified&&(ka.lastModified[g]&&w.setRequestHeader(\"If-Modified-Since\",ka.lastModified[g]),ka.etag[g]&&w.setRequestHeader(\"If-None-Match\",ka.etag[g])),(m.data&&m.hasContent&&m.contentType!==!1||c.contentType)&&w.setRequestHeader(\"Content-Type\",m.contentType),w.setRequestHeader(\"Accept\",m.dataTypes[0]&&m.accepts[m.dataTypes[0]]?m.accepts[m.dataTypes[0]]+(\"*\"!==m.dataTypes[0]?\", \"+Sb+\"; q=0.01\":\"\"):m.accepts[\"*\"]);for(f in m.headers)w.setRequestHeader(f,m.headers[f]);if(m.beforeSend&&(m.beforeSend.call(n,w,m)===!1||2===u))return w.abort();v=\"abort\";for(f in{success:1,error:1,complete:1})w[f](m[f]);if(k=G(Rb,m,c,w)){w.readyState=1,j&&o.trigger(\"ajaxSend\",[w,m]),m.async&&m.timeout>0&&(i=setTimeout(function(){w.abort(\"timeout\")},m.timeout));try{u=1,k.send(s,d)}catch(x){if(!(2>u))throw x;d(-1,x)}}else d(-1,\"No Transport\");return w},getJSON:function(a,b,c){return ka.get(a,b,c,\"json\")},getScript:function(a,c){return ka.get(a,b,c,\"script\")}}),ka.each([\"get\",\"post\"],function(a,c){ka[c]=function(a,d,e,f){return ka.isFunction(d)&&(f=f||e,e=d,d=b),ka.ajax({url:a,type:c,dataType:f,data:d,success:e})}}),ka.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(a){return ka.globalEval(a),a}}}),ka.ajaxPrefilter(\"script\",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type=\"GET\",a.global=!1)}),ka.ajaxTransport(\"script\",function(a){if(a.crossDomain){var c,d=Y.head||ka(\"head\")[0]||Y.documentElement;return{send:function(b,e){c=Y.createElement(\"script\"),c.async=!0,a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,b){(b||!c.readyState||/loaded|complete/.test(c.readyState))&&(c.onload=c.onreadystatechange=null,c.parentNode&&c.parentNode.removeChild(c),c=null,b||e(200,\"success\"))},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(b,!0)}}}});var Ub=[],Vb=/(=)\\?(?=&|$)|\\?\\?/;ka.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var a=Ub.pop()||ka.expando+\"_\"+Gb++;return this[a]=!0,a}}),ka.ajaxPrefilter(\"json jsonp\",function(c,d,e){var f,g,h,i=c.jsonp!==!1&&(Vb.test(c.url)?\"url\":\"string\"==typeof c.data&&!(c.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Vb.test(c.data)&&\"data\");return i||\"jsonp\"===c.dataTypes[0]?(f=c.jsonpCallback=ka.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,i?c[i]=c[i].replace(Vb,\"$1\"+f):c.jsonp!==!1&&(c.url+=(Hb.test(c.url)?\"&\":\"?\")+c.jsonp+\"=\"+f),c.converters[\"script json\"]=function(){return h||ka.error(f+\" was not called\"),h[0]},c.dataTypes[0]=\"json\",g=a[f],a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,Ub.push(f)),h&&ka.isFunction(g)&&g(h[0]),h=g=b}),\"script\"):b});var Wb,Xb,Yb=0,Zb=a.ActiveXObject&&function(){var a;for(a in Wb)Wb[a](b,!0)};ka.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&K()||L()}:K,Xb=ka.ajaxSettings.xhr(),ka.support.cors=!!Xb&&\"withCredentials\"in Xb,Xb=ka.support.ajax=!!Xb,Xb&&ka.ajaxTransport(function(c){if(!c.crossDomain||ka.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();if(c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async),c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),c.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l;try{if(d&&(e||4===i.readyState))if(d=b,g&&(i.onreadystatechange=ka.noop,Zb&&delete Wb[g]),e)4!==i.readyState&&i.abort();else{l={},h=i.status,j=i.getAllResponseHeaders(),\"string\"==typeof i.responseText&&(l.text=i.responseText);try{k=i.statusText}catch(m){k=\"\"}h||!c.isLocal||c.crossDomain?1223===h&&(h=204):h=l.text?200:404}}catch(n){e||f(-1,n)}l&&f(h,k,l,j)},c.async?4===i.readyState?setTimeout(d):(g=++Yb,Zb&&(Wb||(Wb={},ka(a).unload(Zb)),Wb[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(b,!0)}}}});var $b,_b,ac=/^(?:toggle|show|hide)$/,bc=RegExp(\"^(?:([+-])=|)(\"+la+\")([a-z%]*)$\",\"i\"),cc=/queueHooks$/,dc=[Q],ec={\"*\":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bc.exec(b),f=e&&e[3]||(ka.cssNumber[a]?\"\":\"px\"),g=(ka.cssNumber[a]||\"px\"!==f&&+d)&&bc.exec(ka.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||\".5\",g/=h,ka.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};ka.Animation=ka.extend(O,{tweener:function(a,b){ka.isFunction(a)?(b=a,a=[\"*\"]):a=a.split(\" \");for(var c,d=0,e=a.length;e>d;d++)c=a[d],ec[c]=ec[c]||[],ec[c].unshift(b)},prefilter:function(a,b){b?dc.unshift(a):dc.push(a)}}),ka.Tween=R,R.prototype={constructor:R,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||\"swing\",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(ka.cssNumber[c]?\"\":\"px\")},cur:function(){var a=R.propHooks[this.prop];return a&&a.get?a.get(this):R.propHooks._default.get(this)},run:function(a){var b,c=R.propHooks[this.prop];return this.pos=b=this.options.duration?ka.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):R.propHooks._default.set(this),this}},R.prototype.init.prototype=R.prototype,R.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=ka.css(a.elem,a.prop,\"\"),b&&\"auto\"!==b?b:0):a.elem[a.prop]},set:function(a){ka.fx.step[a.prop]?ka.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[ka.cssProps[a.prop]]||ka.cssHooks[a.prop])?ka.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},R.propHooks.scrollTop=R.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},ka.each([\"toggle\",\"show\",\"hide\"],function(a,b){var c=ka.fn[b];ka.fn[b]=function(a,d,e){return null==a||\"boolean\"==typeof a?c.apply(this,arguments):this.animate(S(b,!0),a,d,e)}}),ka.fn.extend({fadeTo:function(a,b,c,d){return this.filter(x).css(\"opacity\",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=ka.isEmptyObject(a),f=ka.speed(b,c,d),g=function(){var b=O(this,ka.extend({},a),f);(e||ka._data(this,\"finish\"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return\"string\"!=typeof a&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||\"fx\",[]),this.each(function(){var b=!0,c=null!=a&&a+\"queueHooks\",f=ka.timers,g=ka._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cc.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem!==this||null!=a&&f[c].queue!==a||(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&ka.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||\"fx\"),this.each(function(){var b,c=ka._data(this),d=c[a+\"queue\"],e=c[a+\"queueHooks\"],f=ka.timers,g=d?d.length:0;for(c.finish=!0,ka.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),ka.each({slideDown:S(\"show\"),slideUp:S(\"hide\"),slideToggle:S(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(a,b){ka.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),ka.speed=function(a,b,c){var d=a&&\"object\"==typeof a?ka.extend({},a):{complete:c||!c&&b||ka.isFunction(a)&&a,duration:a,easing:c&&b||b&&!ka.isFunction(b)&&b};return d.duration=ka.fx.off?0:\"number\"==typeof d.duration?d.duration:d.duration in ka.fx.speeds?ka.fx.speeds[d.duration]:ka.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue=\"fx\"),d.old=d.complete,d.complete=function(){ka.isFunction(d.old)&&d.old.call(this),d.queue&&ka.dequeue(this,d.queue)},d},ka.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},ka.timers=[],ka.fx=R.prototype.init,ka.fx.tick=function(){var a,c=ka.timers,d=0;for($b=ka.now();c.length>d;d++)a=c[d],a()||c[d]!==a||c.splice(d--,1);c.length||ka.fx.stop(),$b=b},ka.fx.timer=function(a){a()&&ka.timers.push(a)&&ka.fx.start()},ka.fx.interval=13,ka.fx.start=function(){_b||(_b=setInterval(ka.fx.tick,ka.fx.interval))},ka.fx.stop=function(){clearInterval(_b),_b=null},ka.fx.speeds={slow:600,fast:200,_default:400},ka.fx.step={},ka.expr&&ka.expr.filters&&(ka.expr.filters.animated=function(a){return ka.grep(ka.timers,function(b){return a===b.elem}).length}),ka.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){ka.offset.setOffset(this,a,b)});var c,d,e={top:0,left:0},f=this[0],g=f&&f.ownerDocument;return g?(c=g.documentElement,ka.contains(c,f)?(typeof f.getBoundingClientRect!==W&&(e=f.getBoundingClientRect()),d=T(g),{top:e.top+(d.pageYOffset||c.scrollTop)-(c.clientTop||0),left:e.left+(d.pageXOffset||c.scrollLeft)-(c.clientLeft||0)}):e):void 0},ka.offset={setOffset:function(a,b,c){var d=ka.css(a,\"position\");\"static\"===d&&(a.style.position=\"relative\");var e,f,g=ka(a),h=g.offset(),i=ka.css(a,\"top\"),j=ka.css(a,\"left\"),k=(\"absolute\"===d||\"fixed\"===d)&&ka.inArray(\"auto\",[i,j])>-1,l={},m={};k?(m=g.position(),e=m.top,f=m.left):(e=parseFloat(i)||0,f=parseFloat(j)||0),ka.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(l.top=b.top-h.top+e),null!=b.left&&(l.left=b.left-h.left+f),\"using\"in b?b.using.call(a,l):g.css(l)}},ka.fn.extend({position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return\"fixed\"===ka.css(d,\"position\")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),ka.nodeName(a[0],\"html\")||(c=a.offset()),c.top+=ka.css(a[0],\"borderTopWidth\",!0),c.left+=ka.css(a[0],\"borderLeftWidth\",!0)),{top:b.top-c.top-ka.css(d,\"marginTop\",!0),left:b.left-c.left-ka.css(d,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Z;a&&!ka.nodeName(a,\"html\")&&\"static\"===ka.css(a,\"position\");)a=a.offsetParent;return a||Z})}}),ka.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(a,c){var d=/Y/.test(c);ka.fn[a]=function(e){return ka.access(this,function(a,e,f){var g=T(a);return f===b?g?c in g?g[c]:g.document.documentElement[e]:a[e]:(g?g.scrollTo(d?ka(g).scrollLeft():f,d?f:ka(g).scrollTop()):a[e]=f,b)},a,e,arguments.length,null)}}),ka.each({Height:\"height\",Width:\"width\"},function(a,c){ka.each({padding:\"inner\"+a,content:c,\"\":\"outer\"+a},function(d,e){ka.fn[e]=function(e,f){var g=arguments.length&&(d||\"boolean\"!=typeof e),h=d||(e===!0||f===!0?\"margin\":\"border\");return ka.access(this,function(c,d,e){var f;return ka.isWindow(c)?c.document.documentElement[\"client\"+a]:9===c.nodeType?(f=c.documentElement,Math.max(c.body[\"scroll\"+a],f[\"scroll\"+a],c.body[\"offset\"+a],f[\"offset\"+a],f[\"client\"+a])):e===b?ka.css(c,d,h):ka.style(c,d,e,h)},c,g?e:b,g,null)}})}),ka.fn.size=function(){return this.length},ka.fn.andSelf=ka.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=ka:(a.jQuery=a.$=ka,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return ka}))}(window);"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/webuploader/webuploader.css",
    "content": "/*! UEditorPlus v2.0.0*/\n\n:root{--webuploader-color-primary:var(--color-primary,#00B7EE);--webuploader-color-content-bg:var(--color-content-bg,#FFF)}.webuploader-container{position:relative}.webuploader-element-invisible{position:absolute!important;clip:rect(1px 1px 1px 1px);clip:rect(1px,1px,1px,1px)}.webuploader-pick{position:relative;display:block;cursor:pointer;padding:0;color:#666;text-align:center;border-radius:2px;overflow:hidden}.webuploader-pick-hover{}.webuploader-pick-disable{opacity:.6;pointer-events:none}.webuploader-list{display:block;margin:0;padding:0;position:static;border:1px solid #EEE;border-radius:.2rem;padding:.2rem;background-color:var(--webuploader-color-content-bg)}.webuploader-list:empty{display:none}.webuploader-list>li{list-style:none;display:block;border:1px solid #EEE;padding:0;margin-bottom:.1rem;background:var(--webuploader-color-content-bg);border-radius:.2rem}.webuploader-list>li .progress-box{background-color:#EEE;margin:2px;border-radius:4px}.webuploader-list>li .progress-box .progress-bar{height:3px;background-color:var(--webuploader-color-primary);border-radius:4px}.webuploader-list>li .progress-info{font-size:12px;line-height:20px;width:100%;word-wrap:normal;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;color:#999}.webuploader-list>li .progress-info .status{display:inline;line-height:20px}"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/webuploader/webuploader.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(a,b){var c,d={},e=function(a,b){var c,d,e;if(\"string\"==typeof a)return h(a);for(c=[],d=a.length,e=0;d>e;e++)c.push(h(a[e]));return b.apply(null,c)},f=function(a,b,c){2===arguments.length&&(c=b,b=null),e(b||[],function(){g(a,c,arguments)})},g=function(a,b,c){var f,g={exports:b};\"function\"==typeof b&&(c.length||(c=[e,g.exports,g]),f=b.apply(null,c),void 0!==f&&(g.exports=f)),d[a]=g.exports},h=function(b){var c=d[b]||a[b];if(!c)throw new Error(\"`\"+b+\"` is undefined\");return c},i=function(a){var b,c,e,f,g,h;h=function(a){return a&&a.charAt(0).toUpperCase()+a.substr(1)};for(b in d)if(c=a,d.hasOwnProperty(b)){for(e=b.split(\"/\"),g=h(e.pop());f=h(e.shift());)c[f]=c[f]||{},c=c[f];c[g]=d[b]}return a},j=function(c){return a.__dollar=c,i(b(a,f,e))};\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=j():\"function\"==typeof define&&define.amd?define([\"jquery\"],j):(c=a.WebUploader,a.WebUploader=j(),a.WebUploader.noConflict=function(){a.WebUploader=c})}(window,function(a,b,c){return b(\"dollar-third\",[],function(){var b=a.require,c=a.__dollar||a.jQuery||a.Zepto||b(\"jquery\")||b(\"zepto\");if(!c)throw new Error(\"jQuery or Zepto not found!\");return c}),b(\"dollar\",[\"dollar-third\"],function(a){return a}),b(\"promise-third\",[\"dollar\"],function(a){return{Deferred:a.Deferred,when:a.when,isPromise:function(a){return a&&\"function\"==typeof a.then}}}),b(\"promise\",[\"promise-third\"],function(a){return a}),b(\"base\",[\"dollar\",\"promise\"],function(b,c){function d(a){return function(){return h.apply(a,arguments)}}function e(a,b){return function(){return a.apply(b,arguments)}}function f(a){var b;return Object.create?Object.create(a):(b=function(){},b.prototype=a,new b)}var g=function(){},h=Function.call;return{version:\"1.0.0\",$:b,Deferred:c.Deferred,isPromise:c.isPromise,when:c.when,browser:function(a){var b={},c=a.match(/WebKit\\/([\\d.]+)/),d=a.match(/Chrome\\/([\\d.]+)/)||a.match(/CriOS\\/([\\d.]+)/),e=a.match(/MSIE\\s([\\d\\.]+)/)||a.match(/(?:trident)(?:.*rv:([\\w.]+))?/i),f=a.match(/Firefox\\/([\\d.]+)/),g=a.match(/Safari\\/([\\d.]+)/),h=a.match(/OPR\\/([\\d.]+)/);return c&&(b.webkit=parseFloat(c[1])),d&&(b.chrome=parseFloat(d[1])),e&&(b.ie=parseFloat(e[1])),f&&(b.firefox=parseFloat(f[1])),g&&(b.safari=parseFloat(g[1])),h&&(b.opera=parseFloat(h[1])),b}(navigator.userAgent),os:function(a){var b={},c=a.match(/(?:Android);?[\\s\\/]+([\\d.]+)?/),d=a.match(/(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/);return c&&(b.android=parseFloat(c[1])),d&&(b.ios=parseFloat(d[1].replace(/_/g,\".\"))),b}(navigator.userAgent),inherits:function(a,c,d){var e;return\"function\"==typeof c?(e=c,c=null):e=c&&c.hasOwnProperty(\"constructor\")?c.constructor:function(){return a.apply(this,arguments)},b.extend(!0,e,a,d||{}),e.__super__=a.prototype,e.prototype=f(a.prototype),c&&b.extend(!0,e.prototype,c),e},noop:g,bindFn:e,log:function(){return a.console?e(console.log,console):g}(),nextTick:function(){return function(a){setTimeout(a,1)}}(),slice:d([].slice),guid:function(){var a=0;return function(b){for(var c=(+new Date).toString(32),d=0;5>d;d++)c+=Math.floor(65535*Math.random()).toString(32);return(b||\"wu_\")+c+(a++).toString(32)}}(),formatSize:function(a,b,c){var d;for(c=c||[\"B\",\"K\",\"M\",\"G\",\"TB\"];(d=c.shift())&&a>1024;)a/=1024;return(\"B\"===d?a:a.toFixed(b||2))+d}}}),b(\"mediator\",[\"base\"],function(a){function b(a,b,c,d){return f.grep(a,function(a){return!(!a||b&&a.e!==b||c&&a.cb!==c&&a.cb._cb!==c||d&&a.ctx!==d)})}function c(a,b,c){f.each((a||\"\").split(h),function(a,d){c(d,b)})}function d(a,b){for(var c,d=!1,e=-1,f=a.length;++e<f;)if(c=a[e],c.cb.apply(c.ctx2,b)===!1){d=!0;break}return!d}var e,f=a.$,g=[].slice,h=/\\s+/;return e={on:function(a,b,d){var e,f=this;return b?(e=this._events||(this._events=[]),c(a,b,function(a,b){var c={e:a};c.cb=b,c.ctx=d,c.ctx2=d||f,c.id=e.length,e.push(c)}),this):this},once:function(a,b,d){var e=this;return b?(c(a,b,function(a,b){var c=function(){return e.off(a,c),b.apply(d||e,arguments)};c._cb=b,e.on(a,c,d)}),e):e},off:function(a,d,e){var g=this._events;return g?a||d||e?(c(a,d,function(a,c){f.each(b(g,a,c,e),function(){delete g[this.id]})}),this):(this._events=[],this):this},trigger:function(a){var c,e,f;return this._events&&a?(c=g.call(arguments,1),e=b(this._events,a),f=b(this._events,\"all\"),d(e,c)&&d(f,arguments)):this}},f.extend({installTo:function(a){return f.extend(a,e)}},e)}),b(\"uploader\",[\"base\",\"mediator\"],function(a,b){function c(a){this.options=d.extend(!0,{},c.options,a),this._init(this.options)}var d=a.$;return c.options={debug:!1},b.installTo(c.prototype),d.each({upload:\"start-upload\",stop:\"stop-upload\",getFile:\"get-file\",getFiles:\"get-files\",addFile:\"add-file\",addFiles:\"add-file\",sort:\"sort-files\",removeFile:\"remove-file\",cancelFile:\"cancel-file\",skipFile:\"skip-file\",retry:\"retry\",isInProgress:\"is-in-progress\",makeThumb:\"make-thumb\",md5File:\"md5-file\",getDimension:\"get-dimension\",addButton:\"add-btn\",predictRuntimeType:\"predict-runtime-type\",refresh:\"refresh\",disable:\"disable\",enable:\"enable\",reset:\"reset\"},function(a,b){c.prototype[a]=function(){return this.request(b,arguments)}}),d.extend(c.prototype,{state:\"pending\",_init:function(a){var b=this;b.request(\"init\",a,function(){b.state=\"ready\",b.trigger(\"ready\")})},option:function(a,b){var c=this.options;return arguments.length>1?void(d.isPlainObject(b)&&d.isPlainObject(c[a])?d.extend(c[a],b):c[a]=b):a?c[a]:c},getStats:function(){var a=this.request(\"get-stats\");return a?{successNum:a.numOfSuccess,progressNum:a.numOfProgress,cancelNum:a.numOfCancel,invalidNum:a.numOfInvalid,uploadFailNum:a.numOfUploadFailed,queueNum:a.numOfQueue,interruptNum:a.numOfInterrupt}:{}},trigger:function(a){var c=[].slice.call(arguments,1),e=this.options,f=\"on\"+a.substring(0,1).toUpperCase()+a.substring(1);return!(b.trigger.apply(this,arguments)===!1||d.isFunction(e[f])&&e[f].apply(this,c)===!1||d.isFunction(this[f])&&this[f].apply(this,c)===!1||b.trigger.apply(b,[this,a].concat(c))===!1)},destroy:function(){this.request(\"destroy\",arguments),this.off()},request:a.noop}),a.create=c.create=function(a){return new c(a)},a.Uploader=c,c}),b(\"runtime/runtime\",[\"base\",\"mediator\"],function(a,b){function c(b){this.options=d.extend({container:document.body},b),this.uid=a.guid(\"rt_\")}var d=a.$,e={},f=function(a){for(var b in a)if(a.hasOwnProperty(b))return b;return null};return d.extend(c.prototype,{getContainer:function(){var a,b,c=this.options;return this._container?this._container:(a=d(c.container||document.body),b=d(document.createElement(\"div\")),b.attr(\"id\",\"rt_\"+this.uid),b.css({position:\"absolute\",top:\"0px\",left:\"0px\",width:\"1px\",height:\"1px\",overflow:\"hidden\"}),a.append(b),a.addClass(\"webuploader-container\"),this._container=b,this._parent=a,b)},init:a.noop,exec:a.noop,destroy:function(){this._container&&this._container.remove(),this._parent&&this._parent.removeClass(\"webuploader-container\"),this.off()}}),c.orders=\"html5,flash\",c.addRuntime=function(a,b){e[a]=b},c.hasRuntime=function(a){return!!(a?e[a]:f(e))},c.create=function(a,b){var g,h;if(b=b||c.orders,d.each(b.split(/\\s*,\\s*/g),function(){return e[this]?(g=this,!1):void 0}),g=g||f(e),!g)throw new Error(\"Runtime Error\");return h=new e[g](a)},b.installTo(c.prototype),c}),b(\"runtime/client\",[\"base\",\"mediator\",\"runtime/runtime\"],function(a,b,c){function d(b,d){var f,g=a.Deferred();this.uid=a.guid(\"client_\"),this.runtimeReady=function(a){return g.done(a)},this.connectRuntime=function(b,h){if(f)throw new Error(\"already connected!\");return g.done(h),\"string\"==typeof b&&e.get(b)&&(f=e.get(b)),f=f||e.get(null,d),f?(a.$.extend(f.options,b),f.__promise.then(g.resolve),f.__client++):(f=c.create(b,b.runtimeOrder),f.__promise=g.promise(),f.once(\"ready\",g.resolve),f.init(),e.add(f),f.__client=1),d&&(f.__standalone=d),f},this.getRuntime=function(){return f},this.disconnectRuntime=function(){f&&(f.__client--,f.__client<=0&&(e.remove(f),delete f.__promise,f.destroy()),f=null)},this.exec=function(){if(f){var c=a.slice(arguments);return b&&c.unshift(b),f.exec.apply(this,c)}},this.getRuid=function(){return f&&f.uid},this.destroy=function(a){return function(){a&&a.apply(this,arguments),this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()}}(this.destroy)}var e;return e=function(){var a={};return{add:function(b){a[b.uid]=b},get:function(b,c){var d;if(b)return a[b];for(d in a)if(!c||!a[d].__standalone)return a[d];return null},remove:function(b){delete a[b.uid]}}}(),b.installTo(d.prototype),d}),b(\"lib/dnd\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},d.options,a),a.container=e(a.container),a.container.length&&c.call(this,\"DragAndDrop\")}var e=a.$;return d.options={accept:null,disableGlobalDnd:!1},a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/widget\",[\"base\",\"uploader\"],function(a,b){function c(a){if(!a)return!1;var b=a.length,c=e.type(a);return!(1!==a.nodeType||!b)||(\"array\"===c||\"function\"!==c&&\"string\"!==c&&(0===b||\"number\"==typeof b&&b>0&&b-1 in a))}function d(a){this.owner=a,this.options=a.options}var e=a.$,f=b.prototype._init,g=b.prototype.destroy,h={},i=[];return e.extend(d.prototype,{init:a.noop,invoke:function(a,b){var c=this.responseMap;return c&&a in c&&c[a]in this&&e.isFunction(this[c[a]])?this[c[a]].apply(this,b):h},request:function(){return this.owner.request.apply(this.owner,arguments)}}),e.extend(b.prototype,{_init:function(){var a=this,b=a._widgets=[],c=a.options.disableWidgets||\"\";return e.each(i,function(d,e){(!c||!~c.indexOf(e._name))&&b.push(new e(a))}),f.apply(a,arguments)},request:function(b,d,e){var f,g,i,j,k=0,l=this._widgets,m=l&&l.length,n=[],o=[];for(d=c(d)?d:[d];m>k;k++)f=l[k],g=f.invoke(b,d),g!==h&&(a.isPromise(g)?o.push(g):n.push(g));return e||o.length?(i=a.when.apply(a,o),j=i.pipe?\"pipe\":\"then\",i[j](function(){var b=a.Deferred(),c=arguments;return 1===c.length&&(c=c[0]),setTimeout(function(){b.resolve(c)},1),b.promise()})[e?j:\"done\"](e||a.noop)):n[0]},destroy:function(){g.apply(this,arguments),this._widgets=null}}),b.register=d.register=function(b,c){var f,g={init:\"init\",destroy:\"destroy\",name:\"anonymous\"};return 1===arguments.length?(c=b,e.each(c,function(a){return\"_\"===a[0]||\"name\"===a?void(\"name\"===a&&(g.name=c.name)):void(g[a.replace(/[A-Z]/g,\"-$&\").toLowerCase()]=a)})):g=e.extend(g,b),c.responseMap=g,f=a.inherits(d,c),f._name=g.name,i.push(f),f},b.unRegister=d.unRegister=function(a){if(a&&\"anonymous\"!==a)for(var b=i.length;b--;)i[b]._name===a&&i.splice(b,1)},d}),b(\"widgets/filednd\",[\"base\",\"uploader\",\"lib/dnd\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.options.dnd=\"\",b.register({name:\"dnd\",init:function(b){if(b.dnd&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{disableGlobalDnd:b.disableGlobalDnd,container:b.dnd,accept:b.accept});return this.dnd=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"drop\",function(a){f.request(\"add-file\",[a])}),e.on(\"accept\",function(a){return f.owner.trigger(\"dndAccept\",a)}),e.init(),g.promise()}},destroy:function(){this.dnd&&this.dnd.destroy()}})}),b(\"lib/filepaste\",[\"base\",\"mediator\",\"runtime/client\"],function(a,b,c){function d(a){a=this.options=e.extend({},a),a.container=e(a.container||document.body),c.call(this,\"FilePaste\")}var e=a.$;return a.inherits(c,{constructor:d,init:function(){var a=this;a.connectRuntime(a.options,function(){a.exec(\"init\"),a.trigger(\"ready\")})}}),b.installTo(d.prototype),d}),b(\"widgets/filepaste\",[\"base\",\"uploader\",\"lib/filepaste\",\"widgets/widget\"],function(a,b,c){var d=a.$;return b.register({name:\"paste\",init:function(b){if(b.paste&&\"html5\"===this.request(\"predict-runtime-type\")){var e,f=this,g=a.Deferred(),h=d.extend({},{container:b.paste,accept:b.accept});return this.paste=e=new c(h),e.once(\"ready\",g.resolve),e.on(\"paste\",function(a){f.owner.request(\"add-file\",[a])}),e.init(),g.promise()}},destroy:function(){this.paste&&this.paste.destroy()}})}),b(\"lib/blob\",[\"base\",\"runtime/client\"],function(a,b){function c(a,c){var d=this;d.source=c,d.ruid=a,this.size=c.size||0,this.type=!c.type&&this.ext&&~\"jpg,jpeg,png,gif,bmp\".indexOf(this.ext)?\"image/\"+(\"jpg\"===this.ext?\"jpeg\":this.ext):c.type||\"application/octet-stream\",b.call(d,\"Blob\"),this.uid=c.uid||this.uid,a&&d.connectRuntime(a)}return a.inherits(b,{constructor:c,slice:function(a,b){return this.exec(\"slice\",a,b)},getSource:function(){return this.source}}),c}),b(\"lib/file\",[\"base\",\"lib/blob\"],function(a,b){function c(a,c){var f;this.name=c.name||\"untitled\"+d++,f=e.exec(c.name)?RegExp.$1.toLowerCase():\"\",!f&&c.type&&(f=/\\/(jpg|jpeg|png|gif|bmp)$/i.exec(c.type)?RegExp.$1.toLowerCase():\"\",this.name+=\".\"+f),this.ext=f,this.lastModifiedDate=c.lastModifiedDate||c.lastModified&&new Date(c.lastModified).toLocaleString()||(new Date).toLocaleString(),b.apply(this,arguments)}var d=1,e=/\\.([^.]+)$/;return a.inherits(b,c)}),b(\"lib/filepicker\",[\"base\",\"runtime/client\",\"lib/file\"],function(b,c,d){function e(a){if(a=this.options=f.extend({},e.options,a),a.container=f(a.id),!a.container.length)throw new Error(\"按钮指定错误\");a.innerHTML=a.innerHTML||a.label||a.container.html()||\"\",a.button=f(a.button||document.createElement(\"div\")),a.button.html(a.innerHTML),a.container.html(a.button),c.call(this,\"FilePicker\",!0)}var f=b.$;return e.options={button:null,container:null,label:null,innerHTML:null,multiple:!0,accept:null,name:\"file\",style:\"webuploader-pick\"},b.inherits(c,{constructor:e,init:function(){var c=this,e=c.options,g=e.button,h=e.style;h&&g.addClass(\"webuploader-pick\"),c.on(\"all\",function(a){var b;switch(a){case\"mouseenter\":h&&g.addClass(\"webuploader-pick-hover\");break;case\"mouseleave\":h&&g.removeClass(\"webuploader-pick-hover\");break;case\"change\":b=c.exec(\"getFiles\"),c.trigger(\"select\",f.map(b,function(a){return a=new d(c.getRuid(),a),a._refer=e.container,a}),e.container)}}),c.connectRuntime(e,function(){c.refresh(),c.exec(\"init\",e),c.trigger(\"ready\")}),this._resizeHandler=b.bindFn(this.refresh,this),f(a).on(\"resize\",this._resizeHandler)},refresh:function(){var a=this.getRuntime().getContainer(),b=this.options.button,c=b[0]&&b[0].offsetWidth||b.outerWidth()||b.width(),d=b[0]&&b[0].offsetHeight||b.outerHeight()||b.height(),e=b.offset();c&&d&&a.css({bottom:\"auto\",right:\"auto\",width:c+\"px\",height:d+\"px\"}).offset(e)},enable:function(){var a=this.options.button;a.removeClass(\"webuploader-pick-disable\"),this.refresh()},disable:function(){var a=this.options.button;this.getRuntime().getContainer().css({top:\"-99999px\"}),a.addClass(\"webuploader-pick-disable\")},destroy:function(){var b=this.options.button;f(a).off(\"resize\",this._resizeHandler),b.removeClass(\"webuploader-pick-disable webuploader-pick-hover webuploader-pick\")}}),e}),b(\"widgets/filepicker\",[\"base\",\"uploader\",\"lib/filepicker\",\"widgets/widget\"],function(a,b,c){var d=a.$;return d.extend(b.options,{pick:null,accept:null}),b.register({name:\"picker\",init:function(a){return this.pickers=[],a.pick&&this.addBtn(a.pick)},refresh:function(){d.each(this.pickers,function(){this.refresh()})},addBtn:function(b){var e=this,f=e.options,g=f.accept,h=[];if(b)return d.isPlainObject(b)||(b={id:b}),d(b.id).each(function(){var i,j,k;k=a.Deferred(),i=d.extend({},b,{accept:d.isPlainObject(g)?[g]:g,swf:f.swf,runtimeOrder:f.runtimeOrder,id:this}),j=new c(i),j.once(\"ready\",k.resolve),j.on(\"select\",function(a){e.owner.request(\"add-file\",[a])}),j.on(\"dialogopen\",function(){e.owner.trigger(\"dialogOpen\",j.button)}),j.init(),e.pickers.push(j),h.push(k.promise())}),a.when.apply(a,h)},disable:function(){d.each(this.pickers,function(){this.disable()})},enable:function(){d.each(this.pickers,function(){this.enable()})},destroy:function(){d.each(this.pickers,function(){this.destroy()}),this.pickers=null}})}),b(\"lib/image\",[\"base\",\"runtime/client\",\"lib/blob\"],function(a,b,c){function d(a){this.options=e.extend({},d.options,a),b.call(this,\"Image\"),this.on(\"load\",function(){this._info=this.exec(\"info\"),this._meta=this.exec(\"meta\")})}var e=a.$;return d.options={quality:90,crop:!1,preserveHeaders:!1,allowMagnify:!1},a.inherits(b,{constructor:d,info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._meta=a,this):this._meta},loadFromBlob:function(a){var b=this,c=a.getRuid();this.connectRuntime(c,function(){b.exec(\"init\",b.options),b.exec(\"loadFromBlob\",a)})},resize:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"resize\"].concat(b))},crop:function(){var b=a.slice(arguments);return this.exec.apply(this,[\"crop\"].concat(b))},getAsDataUrl:function(a){return this.exec(\"getAsDataUrl\",a)},getAsBlob:function(a){var b=this.exec(\"getAsBlob\",a);return new c(this.getRuid(),b)}}),d}),b(\"lib/browser-image-compression\",[\"base\",\"lib/blob\"],function(b,c){function d(a,b){return b.forEach(function(b){b&&\"string\"!=typeof b&&!Array.isArray(b)&&Object.keys(b).forEach(function(c){if(\"default\"!==c&&!(c in a)){var d=Object.getOwnPropertyDescriptor(b,c);Object.defineProperty(a,c,d.get?d:{enumerable:!0,get:function(){return b[c]}})}})}),Object.freeze(a)}function e(a,b){return new Promise(function(d,e){var f;return z(a).then(function(a){try{return f=a,d(new c([b.slice(0,2),f,b.slice(2)],{type:\"image/jpeg\"}))}catch(a){return e(a)}},e)})}function f(a,b,d){return void 0===d&&(d=Date.now()),new Promise(function(e){for(var f=a.split(\",\"),g=f[0].match(/:(.*?);/)[1],h=globalThis.atob(f[1]),i=h.length,j=new Uint8Array(i);i--;)j[i]=h.charCodeAt(i);var k=new c([j],{type:g});k.name=b,k.lastModified=d,e(k)})}function g(a){return new Promise(function(b,c){var d=new L;d.onload=function(){return b(d.result)},d.onerror=function(a){return c(a)},d.readAsDataURL(a)})}function h(a){return new Promise(function(b,c){var d=new Image;d.onload=function(){return b(d)},d.onerror=function(a){return c(a)},d.src=a})}function i(){if(void 0!==i.cachedResult)return i.cachedResult;var a=F.ETC,b=navigator.userAgent;return/Chrom(e|ium)/i.test(b)?a=F.CHROME:/iP(ad|od|hone)/i.test(b)&&/WebKit/i.test(b)?a=F.IOS:/Safari/i.test(b)?a=F.DESKTOP_SAFARI:/Firefox/i.test(b)?a=F.FIREFOX:(/MSIE/i.test(b)||1==!!document.documentMode)&&(a=F.IE),i.cachedResult=a,i.cachedResult}function j(a,b){for(var c=i(),d=G[c],e=a,f=b,g=e*f,h=e>f?f/e:e/f;g>d*d;){var j=(d+e)/2,k=(d+f)/2;k>j?(f=k,e=k*h):(f=j*h,e=j),g=e*f}return{width:e,height:f}}function k(a,b){var c,d;try{if(c=new OffscreenCanvas(a,b),d=c.getContext(\"2d\"),null===d)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(a){c=document.createElement(\"canvas\"),d=c.getContext(\"2d\")}return c.width=a,c.height=b,[c,d]}function l(a,b){var c=j(a.width,a.height),d=c.width,e=c.height,f=k(d,e),g=f[0],h=f[1];return b&&/jpe?g/.test(b)&&(h.fillStyle=\"white\",h.fillRect(0,0,g.width,g.height)),h.drawImage(a,0,0,g.width,g.height),g}function m(){return void 0!==m.cachedResult||(m.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),m.cachedResult}function n(a,b){return void 0===b&&(b={}),new Promise(function(a,c){var d,e,f=function(){try{return e=l(d,b.fileType||f.type),a([d,e])}catch(f){return c(f)}},j=function(){try{var a=function(a){try{throw a}catch(a){return c(a)}};try{var b;return g(e).then(function(e){try{return b=e,h(b).then(function(b){try{return d=b,function(){try{return f()}catch(a){return c(a)}}()}catch(b){return a(b)}},a)}catch(e){return a(e)}},a)}catch(e){a(e)}}catch(e){return c(e)}};try{if(m()||[F.DESKTOP_SAFARI,F.MOBILE_SAFARI].includes(i()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(k).then(function(a){try{return d=a,f()}catch(a){return j()}},j)}catch(k){j()}})}function o(a,b,d,e,g){return void 0===g&&(g=1),new Promise(function(h,i){function j(){return k.call(this)}function k(){return l.call(this)}function l(){return h(m)}var m;if(\"image/png\"===b){var n=void 0,o=void 0,p=void 0;return n=a.getContext(\"2d\"),o=n.getImageData(0,0,a.width,a.height).data,p=C.encode([o.buffer],a.width,a.height,4096*g),m=new c([p],{type:b}),m.name=d,m.lastModified=e,l.call(this)}if(\"image/bmp\"===b)return new Promise(function(b){return E.toBlob(a,b)}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,k.call(this)}catch(a){return i(a)}}.bind(this),i);if(\"function\"==typeof OffscreenCanvas&&a instanceof OffscreenCanvas)return a.convertToBlob({type:b,quality:g}).then(function(a){try{return m=a,m.name=d,m.lastModified=e,j.call(this)}catch(a){return i(a)}}.bind(this),i);var q=void 0;return q=a.toDataURL(b,g),f(q,d,e).then(function(a){try{return m=a,j.call(this)}catch(a){return i(a)}}.bind(this),i)})}function p(a){a.width=0,a.height=0}function q(){return new Promise(function(a,b){var c,d,e,g,h;return void 0!==q.cachedResult?a(q.cachedResult):(c=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",f(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(a){try{return d=a,n(d).then(function(a){try{return e=a[1],o(e,d.type,d.name,d.lastModified).then(function(a){try{return g=a,p(e),n(g).then(function(a){try{return h=a[0],q.cachedResult=1===h.width&&2===h.height,c(q.cachedResult)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b)}catch(c){return b(c)}},b))})}function r(a){return new Promise(function(b,c){var d=new L;d.onload=function(a){var c=new DataView(a.target.result);if(65496!=c.getUint16(0,!1))return b(-2);for(var d=c.byteLength,e=2;d>e;){if(c.getUint16(e+2,!1)<=8)return b(-1);var f=c.getUint16(e,!1);if(e+=2,65505==f){if(1165519206!=c.getUint32(e+=2,!1))return b(-1);var g=18761==c.getUint16(e+=6,!1);e+=c.getUint32(e+4,g);var h=c.getUint16(e,g);e+=2;for(var i=0;h>i;i++)if(274==c.getUint16(e+12*i,g))return b(c.getUint16(e+12*i+8,g))}else{if(65280!=(65280&f))break;e+=c.getUint16(e,!1)}}return b(-1)},d.onerror=function(a){return c(a)},d.readAsArrayBuffer(a)})}function s(a,b){var c,d,e=a.width,f=a.height,g=b.maxWidthOrHeight,h=a;return isFinite(g)&&(e>g||f>g)&&(c=k(e,f),h=c[0],d=c[1],e>f?(h.width=g,h.height=f/e*g):(h.width=e/f*g,h.height=g),d.drawImage(a,0,0,h.width,h.height),p(a)),h}function t(a,b){var c=a.width,d=a.height,e=k(c,d),f=e[0],g=e[1];switch(b>4&&9>b?(f.width=d,f.height=c):(f.width=c,f.height=d),b){case 2:g.transform(-1,0,0,1,c,0);break;case 3:g.transform(-1,0,0,-1,c,d);break;case 4:g.transform(1,0,0,-1,0,d);break;case 5:g.transform(0,1,1,0,0,0);break;case 6:g.transform(0,1,-1,0,d,0);break;case 7:g.transform(0,-1,-1,0,d,c);break;case 8:g.transform(0,-1,1,0,0,c)}return g.drawImage(a,0,0,c,d),p(a),f}function u(a,b,c){return void 0===c&&(c=0),new Promise(function(d,e){function f(a){if(void 0===a&&(a=5),b.signal&&b.signal.aborted)throw b.signal.reason;h+=a,b.onProgress(Math.min(h,100))}function g(a){if(b.signal&&b.signal.aborted)throw b.signal.reason;h=Math.min(Math.max(a,h),100),b.onProgress(h)}var h,i,j,l,m,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I;return h=c,i=b.maxIteration||10,j=1048576*b.maxSizeMB,f(),n(a,b).then(function(a){try{return l=a[1],f(),m=s(l,b),f(),new Promise(function(a,d){function e(){return a(f)}var f;return(f=b.exifOrientation)?e.call(this):r(c).then(function(a){try{return f=a,e.call(this)}catch(a){return d(a)}}.bind(this),d)}).then(function(a){try{return u=a,f(),q().then(function(a){try{return v=a?m:t(m,u),f(),w=b.initialQuality||1,x=b.fileType||c.type,o(v,x,c.name,c.lastModified,w).then(function(a){function h(){var a;if(i--&&(D>j||D>B)){var b,d;return b=I?.95*H.width:H.width,d=I?.95*H.height:H.height,a=k(b,d),F=a[0],G=a[1],G.drawImage(H,0,0,b,d),w*=\"image/png\"===x?.85:.95,o(F,x,c.name,c.lastModified,w).then(function(a){try{return E=a,p(H),H=F,D=E.size,g(Math.min(99,Math.floor(100*((C-D)/(C-j))))),h}catch(a){return e(a)}},e)}return[1]}function n(){return p(H),p(F),p(m),p(v),p(l),g(100),d(E)}try{if(y=a,f(),z=y.size>j,A=y.size>c.size,!z&&!A)return g(100),d(y);var q;return B=c.size,C=y.size,D=C,H=v,I=!b.alwaysKeepResolution&&z,(q=function(a){for(;a;){if(a.then)return void a.then(q,e);try{if(a.pop){if(a.length)return a.pop()?n.call(this):a;a=h}else a=a.call(this)}catch(a){return e(a)}}}.bind(this))(h)}catch(r){return e(r)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)}catch(c){return e(c)}}.bind(this),e)})}function v(a,b){return new Promise(function(d,e){D||(D=function(a){var b=[];return\"function\"==typeof a?b.push(\"(\".concat(a,\")()\")):b.push(a),URL.createObjectURL(new c(b))}(M));var f=new Worker(D);f.addEventListener(\"message\",function(a){if(b.signal&&b.signal.aborted)f.terminate();else if(void 0===a.data.progress){if(a.data.error)return e(new Error(a.data.error)),void f.terminate();d(a.data.file),f.terminate()}else b.onProgress(a.data.progress)}),f.addEventListener(\"error\",e),b.signal&&b.signal.addEventListener(\"abort\",function(){e(b.signal.reason),f.terminate()}),f.postMessage({file:a,imageCompressionLibUrl:b.libURL,options:y(y({},b),{onProgress:void 0,signal:void 0})})})}function w(a,b){return new Promise(function(a,d){function f(){try{h.name=b.name,h.lastModified=b.lastModified}catch(b){}try{g.preserveExif&&\"image/jpeg\"===b.type&&(!g.fileType||g.fileType&&g.fileType===b.type)&&(h=e(b,h))}catch(b){}return a(h)}var g,h,i,j,k,l;if(g=y({},b),i=0,j=g.onProgress,g.maxSizeMB=g.maxSizeMB||Number.POSITIVE_INFINITY,k=\"boolean\"!=typeof g.useWebWorker||g.useWebWorker,delete g.useWebWorker,g.onProgress=function(a){i=a,\"function\"==typeof j&&j(i)},!(o instanceof c||o instanceof K))return d(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(o.type))return d(new Error(\"The file given is not an image\"));if(l=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!k||\"function\"!=typeof Worker||l)return u(o,g).then(function(a){try{return h=a,f.call(this)}catch(a){return d(a)}}.bind(this),d);var m=function(){try{return f.call(this)}catch(a){return d(a)}}.bind(this),n=function(){try{return u(a,g).then(function(a){try{return h=a,m()}catch(a){return d(a)}},d)}catch(a){return d(a)}};try{return g.libURL=g.libURL||\"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\",v(o,g).then(function(a){try{return h=a,m()}catch(a){return n()}},n)}catch(o){n()}})}var x,y=this&&this.__assign||function(){return y=Object.assign||function(a){for(var b,c=1,d=arguments.length;d>c;c++){b=arguments[c];for(var e in b)Object.prototype.hasOwnProperty.call(b,e)&&(a[e]=b[e])}return a},y.apply(this,arguments)},z=function(a){return new Promise(function(b,d){var e=new FileReader;e.addEventListener(\"load\",function(a){var e=a.target.result,f=new DataView(e),g=0;if(65496!==f.getUint16(g))return d(\"not a valid JPEG\");for(g+=2;;){var h=f.getUint16(g);if(65498===h)break;var i=f.getUint16(g+2);if(65505===h&&1165519206===f.getUint32(g+4)){var j=g+10,k=void 0;switch(f.getUint16(j)){case 18761:k=!0;break;case 19789:k=!1;break;default:return d(\"TIFF header contains invalid endian\")}if(42!==f.getUint16(j+2,k))return d(\"TIFF header contains invalid version\");for(var l=f.getUint32(j+4,k),m=j+l+2+12*f.getUint16(j+l,k),n=j+l+2;m>n;n+=12)if(274==f.getUint16(n,k)){if(3!==f.getUint16(n+2,k))return d(\"Orientation data type is invalid\");if(1!==f.getUint32(n+4,k))return d(\"Orientation data count is invalid\");f.setUint16(n+8,1,k);break}return b(e.slice(g,g+2+i))}g+=2+i}return b(new c)}),e.readAsArrayBuffer(a)})},A={};!function(a){var b,c,d={};a.exports=d,d.parse=function(a,b){for(var c=d.bin.readUshort,e=d.bin.readUint,f=0,g={},h=new Uint8Array(a),i=h.length-4;101010256!=e(h,i);)i--;f=i,f+=4;var j=c(h,f+=4);c(h,f+=2);var k=e(h,f+=2),l=e(h,f+=4);f+=4,f=l;for(var m=0;j>m;m++){e(h,f),f+=4,f+=4,f+=4,e(h,f+=4),k=e(h,f+=4);var n=e(h,f+=4),o=c(h,f+=4),p=c(h,f+2),q=c(h,f+4);f+=6;var r=e(h,f+=8);f+=4,f+=o+p+q,d._readLocal(h,r,g,k,n,b)}return g},d._readLocal=function(a,b,c,e,f,g){var h=d.bin.readUshort,i=d.bin.readUint;i(a,b),h(a,b+=4),h(a,b+=2);var j=h(a,b+=2);i(a,b+=2),i(a,b+=4),b+=4;var k=h(a,b+=8),l=h(a,b+=2);b+=2;var m=d.bin.readUTF8(a,b,k);if(b+=k,b+=l,g)c[m]={size:f,csize:e};else{var n=new Uint8Array(a.buffer,b);if(0==j)c[m]=new Uint8Array(n.buffer.slice(b,b+e));else{if(8!=j)throw\"unknown compression method: \"+j;var o=new Uint8Array(f);d.inflateRaw(n,o),c[m]=o}}},d.inflateRaw=function(a,b){return d.F.inflate(a,b)},d.inflate=function(a,b){return a[0],a[1],d.inflateRaw(new Uint8Array(a.buffer,a.byteOffset+2,a.length-6),b)},d.deflate=function(a,b){null==b&&(b={level:6});var c=0,e=new Uint8Array(50+Math.floor(1.1*a.length));e[c]=120,e[c+1]=156,c+=2,c=d.F.deflateRaw(a,e,c,b.level);var f=d.adler(a,0,a.length);return e[c+0]=255&f>>>24,e[c+1]=255&f>>>16,e[c+2]=255&f>>>8,e[c+3]=255&f>>>0,new Uint8Array(e.buffer,0,c+4)},d.deflateRaw=function(a,b){null==b&&(b={level:6});var c=new Uint8Array(50+Math.floor(1.1*a.length)),e=d.F.deflateRaw(a,c,e,b.level);return new Uint8Array(c.buffer,0,e)},d.encode=function(a,b){null==b&&(b=!1);var c=0,e=d.bin.writeUint,f=d.bin.writeUshort,g={};for(var h in a){var i=!d._noNeed(h)&&!b,j=a[h],k=d.crc.crc(j,0,j.length);g[h]={cpr:i,usize:j.length,crc:k,file:i?d.deflateRaw(j):j}}for(var h in g)c+=g[h].file.length+30+46+2*d.bin.sizeUTF8(h);c+=22;var l=new Uint8Array(c),m=0,n=[];for(var h in g){var o=g[h];n.push(m),m=d._writeHeader(l,m,h,o,0)}var p=0,q=m;for(var h in g)o=g[h],n.push(m),m=d._writeHeader(l,m,h,o,1,n[p++]);var r=m-q;return e(l,m,101010256),m+=4,f(l,m+=4,p),f(l,m+=2,p),e(l,m+=2,r),e(l,m+=4,q),m+=4,m+=2,l.buffer},d._noNeed=function(a){var b=a.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(b)},d._writeHeader=function(a,b,c,e,f,g){var h=d.bin.writeUint,i=d.bin.writeUshort,j=e.file;return h(a,b,0==f?67324752:33639248),b+=4,1==f&&(b+=2),i(a,b,20),i(a,b+=2,0),i(a,b+=2,e.cpr?8:0),h(a,b+=2,0),h(a,b+=4,e.crc),h(a,b+=4,j.length),h(a,b+=4,e.usize),i(a,b+=4,d.bin.sizeUTF8(c)),i(a,b+=2,0),b+=2,1==f&&(b+=2,b+=2,h(a,b+=6,g),b+=4),b+=d.bin.writeUTF8(a,b,c),0==f&&(a.set(j,b),b+=j.length),b},d.crc={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,e){for(var f=0;e>f;f++)a=d.crc.table[255&(a^b[c+f])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^d.crc.update(4294967295,a,b,c)}},d.adler=function(a,b,c){for(var d=1,e=0,f=b,g=b+c;g>f;){for(var h=Math.min(f+5552,g);h>f;)e+=d+=a[f++];d%=65521,e%=65521}return e<<16|d},d.bin={readUshort:function(a,b){return a[b]|a[b+1]<<8},writeUshort:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8},readUint:function(a,b){return 16777216*a[b+3]+(a[b+2]<<16|a[b+1]<<8|a[b])},writeUint:function(a,b,c){a[b]=255&c,a[b+1]=255&c>>8,a[b+2]=255&c>>16,a[b+3]=255&c>>24},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},pad:function(a){return a.length<2?\"0\"+a:a},readUTF8:function(a,b,c){for(var e,f=\"\",g=0;c>g;g++)f+=\"%\"+d.bin.pad(a[b+g].toString(16));try{e=decodeURIComponent(f)}catch(e){return d.bin.readASCII(a,b,c)}return e},writeUTF8:function(a,b,c){for(var d=c.length,e=0,f=0;d>f;f++){var g=c.charCodeAt(f);if(0==(4294967168&g))a[b+e]=g,e++;else if(0==(4294965248&g))a[b+e]=192|g>>6,a[b+e+1]=128|63&g>>0,e+=2;else if(0==(4294901760&g))a[b+e]=224|g>>12,a[b+e+1]=128|63&g>>6,a[b+e+2]=128|63&g>>0,e+=3;else{if(0!=(4292870144&g))throw\"e\";a[b+e]=240|g>>18,a[b+e+1]=128|63&g>>12,a[b+e+2]=128|63&g>>6,\na[b+e+3]=128|63&g>>0,e+=4}}return e},sizeUTF8:function(a){for(var b=a.length,c=0,d=0;b>d;d++){var e=a.charCodeAt(d);if(0==(4294967168&e))c++;else if(0==(4294965248&e))c+=2;else if(0==(4294901760&e))c+=3;else{if(0!=(4292870144&e))throw\"e\";c+=4}}return c}},d.F={},d.F.deflateRaw=function(a,b,c,e){var f=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][e],g=d.F.U,h=d.F._goodIndex;d.F._hash;var i=d.F._putsE,j=0,k=c<<3,l=0,m=a.length;if(0==e){for(;m>j;)i(b,k,j+(y=Math.min(65535,m-j))==m?1:0),k=d.F._copyExact(a,j,y,b,k+8),j+=y;return k>>>3}var n=g.lits,o=g.strt,p=g.prev,q=0,r=0,s=0,t=0,u=0,v=0;for(m>2&&(o[v=d.F._hash(a,0)]=0),j=0;m>j;j++){if(u=v,m-2>j+1){v=d.F._hash(a,j+1);var w=32767&j+1;p[w]=o[v],o[v]=w}if(j>=l){(q>14e3||r>26697)&&m-j>100&&(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(j==m-1||l==m?1:0,n,q,t,a,s,j-s,b,k),q=r=t=0,s=j);var x=0;m-2>j&&(x=d.F._bestMatch(a,j,p,u,Math.min(f[2],m-j),f[3]));var y=x>>>16,z=65535&x;if(0!=x){z=65535&x;var A=h(y=x>>>16,g.of0);g.lhst[257+A]++;var B=h(z,g.df0);g.dhst[B]++,t+=g.exb[A]+g.dxb[B],n[q]=y<<23|j-l,n[q+1]=z<<16|A<<8|B,q+=2,l=j+y}else g.lhst[a[j]]++;r++}}for(s==j&&0!=a.length||(j>l&&(n[q]=j-l,q+=2,l=j),k=d.F._writeBlock(1,n,q,t,a,s,j-s,b,k),q=0,r=0,q=r=t=0,s=j);0!=(7&k);)k++;return k>>>3},d.F._bestMatch=function(a,b,c,e,f,g){var h=32767&b,i=c[h],j=32767&h-i+32768;if(i==h||e!=d.F._hash(a,b-j))return 0;for(var k=0,l=0,m=Math.min(32767,b);m>=j&&0!=--g&&i!=h;){if(0==k||a[b+k]==a[b+k-j]){var n=d.F._howLong(a,b,j);if(n>k){if(l=j,(k=n)>=f)break;n>j+2&&(n=j+2);for(var o=0,p=0;n-2>p;p++){var q=32767&b-j+p+32768,r=32767&q-c[q]+32768;r>o&&(o=r,i=q)}}}j+=32767&(h=i)-(i=c[h])+32768}return k<<16|l},d.F._howLong=function(a,b,c){if(a[b]!=a[b-c]||a[b+1]!=a[b+1-c]||a[b+2]!=a[b+2-c])return 0;var d=b,e=Math.min(a.length,b+258);for(b+=3;e>b&&a[b]==a[b-c];)b++;return b-d},d.F._hash=function(a,b){return 65535&(a[b]<<8|a[b+1])+(a[b+2]<<4)},d.saved=0,d.F._writeBlock=function(a,b,c,e,f,g,h,i,j){var k,l,m,n,o,p,q,r,s,t=d.F.U,u=d.F._putsF,v=d.F._putsE;t.lhst[256]++,l=(k=d.F.getTrees())[0],m=k[1],n=k[2],o=k[3],p=k[4],q=k[5],r=k[6],s=k[7];var w=32+(0==(7&j+3)?0:8-(7&j+3))+(h<<3),x=e+d.F.contSize(t.fltree,t.lhst)+d.F.contSize(t.fdtree,t.dhst),y=e+d.F.contSize(t.ltree,t.lhst)+d.F.contSize(t.dtree,t.dhst);y+=14+3*q+d.F.contSize(t.itree,t.ihst)+(2*t.ihst[16]+3*t.ihst[17]+7*t.ihst[18]);for(var z=0;286>z;z++)t.lhst[z]=0;for(z=0;30>z;z++)t.dhst[z]=0;for(z=0;19>z;z++)t.ihst[z]=0;var A=x>w&&y>w?0:y>x?1:2;if(u(i,j,a),u(i,j+1,A),j+=3,0==A){for(;0!=(7&j);)j++;j=d.F._copyExact(f,g,h,i,j)}else{var B,C;if(1==A&&(B=t.fltree,C=t.fdtree),2==A){d.F.makeCodes(t.ltree,l),d.F.revCodes(t.ltree,l),d.F.makeCodes(t.dtree,m),d.F.revCodes(t.dtree,m),d.F.makeCodes(t.itree,n),d.F.revCodes(t.itree,n),B=t.ltree,C=t.dtree,v(i,j,o-257),v(i,j+=5,p-1),v(i,j+=5,q-4),j+=4;for(var D=0;q>D;D++)v(i,j+3*D,t.itree[1+(t.ordr[D]<<1)]);j+=3*q,j=d.F._codeTiny(r,t.itree,i,j),j=d.F._codeTiny(s,t.itree,i,j)}for(var E=g,F=0;c>F;F+=2){for(var G=b[F],H=G>>>23,I=E+(8388607&G);I>E;)j=d.F._writeLit(f[E++],B,i,j);if(0!=H){var J=b[F+1],K=J>>16,L=255&J>>8,M=255&J;v(i,j=d.F._writeLit(257+L,B,i,j),H-t.of0[L]),j+=t.exb[L],u(i,j=d.F._writeLit(M,C,i,j),K-t.df0[M]),j+=t.dxb[M],E+=H}}j=d.F._writeLit(256,B,i,j)}return j},d.F._copyExact=function(a,b,c,d,e){var f=e>>>3;return d[f]=c,d[f+1]=c>>>8,d[f+2]=255-d[f],d[f+3]=255-d[f+1],f+=4,d.set(new Uint8Array(a.buffer,b,c),f),e+(c+4<<3)},d.F.getTrees=function(){for(var a=d.F.U,b=d.F._hufTree(a.lhst,a.ltree,15),c=d.F._hufTree(a.dhst,a.dtree,15),e=[],f=d.F._lenCodes(a.ltree,e),g=[],h=d.F._lenCodes(a.dtree,g),i=0;i<e.length;i+=2)a.ihst[e[i]]++;for(i=0;i<g.length;i+=2)a.ihst[g[i]]++;for(var j=d.F._hufTree(a.ihst,a.itree,7),k=19;k>4&&0==a.itree[1+(a.ordr[k-1]<<1)];)k--;return[b,c,j,f,h,k,e,g]},d.F.getSecond=function(a){for(var b=[],c=0;c<a.length;c+=2)b.push(a[c+1]);return b},d.F.nonZero=function(a){for(var b=\"\",c=0;c<a.length;c+=2)0!=a[c+1]&&(b+=(c>>1)+\",\");return b},d.F.contSize=function(a,b){for(var c=0,d=0;d<b.length;d++)c+=b[d]*a[1+(d<<1)];return c},d.F._codeTiny=function(a,b,c,e){for(var f=0;f<a.length;f+=2){var g=a[f],h=a[f+1];e=d.F._writeLit(g,b,c,e);var i=16==g?2:17==g?3:7;g>15&&(d.F._putsE(c,e,h,i),e+=i)}return e},d.F._lenCodes=function(a,b){for(var c=a.length;2!=c&&0==a[c-1];)c-=2;for(var d=0;c>d;d+=2){var e=a[d+1],f=c>d+3?a[d+3]:-1,g=c>d+5?a[d+5]:-1,h=0==d?-1:a[d-1];if(0==e&&f==e&&g==e){for(var i=d+5;c>i+2&&a[i+2]==e;)i+=2;(j=Math.min(i+1-d>>>1,138))<11?b.push(17,j-3):b.push(18,j-11),d+=2*j-2}else if(e==h&&f==e&&g==e){for(i=d+5;c>i+2&&a[i+2]==e;)i+=2;var j=Math.min(i+1-d>>>1,6);b.push(16,j-3),d+=2*j-2}else b.push(e,0)}return c>>>1},d.F._hufTree=function(a,b,c){var e=[],f=a.length,g=b.length,h=0;for(h=0;g>h;h+=2)b[h]=0,b[h+1]=0;for(h=0;f>h;h++)0!=a[h]&&e.push({lit:h,f:a[h]});var i=e.length,j=e.slice(0);if(0==i)return 0;if(1==i){var k=e[0].lit;return j=0==k?1:0,b[1+(k<<1)]=1,b[1+(j<<1)]=1,1}e.sort(function(a,b){return a.f-b.f});var l=e[0],m=e[1],n=0,o=1,p=2;for(e[0]={lit:-1,f:l.f+m.f,l:l,r:m,d:0};o!=i-1;)l=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],m=n!=o&&(p==i||e[n].f<e[p].f)?e[n++]:e[p++],e[o++]={lit:-1,f:l.f+m.f,l:l,r:m};var q=d.F.setDepth(e[o-1],0);for(q>c&&(d.F.restrictDepth(j,c,q),q=c),h=0;i>h;h++)b[1+(j[h].lit<<1)]=j[h].d;return q},d.F.setDepth=function(a,b){return-1!=a.lit?(a.d=b,b):Math.max(d.F.setDepth(a.l,b+1),d.F.setDepth(a.r,b+1))},d.F.restrictDepth=function(a,b,c){var d=0,e=1<<c-b,f=0;for(a.sort(function(a,b){return b.d==a.d?a.f-b.f:b.d-a.d}),d=0;d<a.length&&a[d].d>b;d++){var g=a[d].d;a[d].d=b,f+=e-(1<<c-g)}for(f>>>=c-b;f>0;)(g=a[d].d)<b?(a[d].d++,f-=1<<b-g-1):d++;for(;d>=0;d--)a[d].d==b&&0>f&&(a[d].d--,f++);0!=f&&console.log(\"debt left\")},d.F._goodIndex=function(a,b){var c=0;return b[16|c]<=a&&(c|=16),b[8|c]<=a&&(c|=8),b[4|c]<=a&&(c|=4),b[2|c]<=a&&(c|=2),b[1|c]<=a&&(c|=1),c},d.F._writeLit=function(a,b,c,e){return d.F._putsF(c,e,b[a<<1]),e+b[1+(a<<1)]},d.F.inflate=function(a,b){var c=Uint8Array;if(3==a[0]&&0==a[1])return b||new c(0);var e=d.F,f=e._bitsF,g=e._bitsE,h=e._decodeTiny,i=e.makeCodes,j=e.codes2map,k=e._get17,l=e.U,m=null==b;m&&(b=new c(a.length>>>2<<3));for(var n,o,p=0,q=0,r=0,s=0,t=0,u=0,v=0,w=0,x=0;0==p;)if(p=f(a,x,1),q=f(a,x+1,2),x+=3,0!=q){if(m&&(b=d.F._check(b,w+(1<<17))),1==q&&(n=l.flmap,o=l.fdmap,u=511,v=31),2==q){r=g(a,x,5)+257,s=g(a,x+5,5)+1,t=g(a,x+10,4)+4,x+=14;for(var y=0;38>y;y+=2)l.itree[y]=0,l.itree[y+1]=0;var z=1;for(y=0;t>y;y++){var A=g(a,x+3*y,3);l.itree[1+(l.ordr[y]<<1)]=A,A>z&&(z=A)}x+=3*t,i(l.itree,z),j(l.itree,z,l.imap),n=l.lmap,o=l.dmap,x=h(l.imap,(1<<z)-1,r+s,a,x,l.ttree);var B=e._copyOut(l.ttree,0,r,l.ltree);u=(1<<B)-1;var C=e._copyOut(l.ttree,r,s,l.dtree);v=(1<<C)-1,i(l.ltree,B),j(l.ltree,B,n),i(l.dtree,C),j(l.dtree,C,o)}for(;;){var D=n[k(a,x)&u];x+=15&D;var E=D>>>4;if(0==E>>>8)b[w++]=E;else{if(256==E)break;var F=w+E-254;if(E>264){var G=l.ldef[E-257];F=w+(G>>>3)+g(a,x,7&G),x+=7&G}var H=o[k(a,x)&v];x+=15&H;var I=H>>>4,J=l.ddef[I],K=(J>>>4)+f(a,x,15&J);for(x+=15&J,m&&(b=d.F._check(b,w+(1<<17)));F>w;)b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K],b[w]=b[w++-K];w=F}}}else{0!=(7&x)&&(x+=8-(7&x));var L=4+(x>>>3),M=a[L-4]|a[L-3]<<8;m&&(b=d.F._check(b,w+M)),b.set(new c(a.buffer,a.byteOffset+L,M),w),x=L+M<<3,w+=M}return b.length==w?b:b.slice(0,w)},d.F._check=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(Math.max(c<<1,b));return d.set(a,0),d},d.F._decodeTiny=function(a,b,c,e,f,g){for(var h=d.F._bitsE,i=d.F._get17,j=0;c>j;){var k=a[i(e,f)&b];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},d.F._copyOut=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},d.F.makeCodes=function(a,b){for(var c,e,f,g,h=d.F.U,i=a.length,j=h.bl_count,k=0;b>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[a[k]]++;var l=h.next_code;for(c=0,j[0]=0,e=1;b>=e;e++)c=c+j[e-1]<<1,l[e]=c;for(f=0;i>f;f+=2)0!=(g=a[f+1])&&(a[f]=l[g],l[g]++)},d.F.codes2map=function(a,b,c){for(var e=a.length,f=d.F.U.rev15,g=0;e>g;g+=2)if(0!=a[g+1])for(var h=g>>1,i=a[g+1],j=h<<4|i,k=b-i,l=a[g]<<k,m=l+(1<<k);l!=m;)c[f[l]>>>15-b]=j,l++},d.F.revCodes=function(a,b){for(var c=d.F.U.rev15,e=15-b,f=0;f<a.length;f+=2){var g=a[f]<<b-a[f+1];a[f]=c[g]>>>e}},d.F._putsE=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},d.F._putsF=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},d.F._bitsE=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},d.F._bitsF=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},d.F._get17=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},d.F._get25=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},d.F.U=(b=Uint16Array,c=Uint32Array,{next_code:new b(16),bl_count:new b(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new b(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new c(32),flmap:new b(512),fltree:[],fdmap:new b(32),fdtree:[],lmap:new b(32768),ltree:[],ttree:[],dmap:new b(32768),dtree:[],imap:new b(512),itree:[],rev15:new b(32768),lhst:new c(286),dhst:new c(30),ihst:new c(19),lits:new c(15e3),strt:new b(65536),prev:new b(32768)}),function(){function a(a,b,c){for(;0!=b--;)a.push(0,c)}for(var b=d.F.U,c=0;32768>c;c++){var e=c;e=(4278255360&(e=(4042322160&(e=(3435973836&(e=(2863311530&e)>>>1|(1431655765&e)<<1))>>>2|(858993459&e)<<2))>>>4|(252645135&e)<<4))>>>8|(16711935&e)<<8,b.rev15[c]=(e>>>16|e<<16)>>>17}for(c=0;32>c;c++)b.ldef[c]=b.of0[c]<<3|b.exb[c],b.ddef[c]=b.df0[c]<<4|b.dxb[c];a(b.fltree,144,8),a(b.fltree,112,9),a(b.fltree,24,7),a(b.fltree,8,8),d.F.makeCodes(b.fltree,9),d.F.codes2map(b.fltree,9,b.flmap),d.F.revCodes(b.fltree,9),a(b.fdtree,32,5),d.F.makeCodes(b.fdtree,5),d.F.codes2map(b.fdtree,5,b.fdmap),d.F.revCodes(b.fdtree,5),a(b.itree,19,0),a(b.ltree,286,0),a(b.dtree,30,0),a(b.ttree,320,0)}()}({get exports(){return A},set exports(a){A=a}});var B=d({__proto__:null,\"default\":A},[A]),C=function(){function a(a,b,c,e){var f=b*c,g=d(e),h=Math.ceil(b*g/8),j=new Uint8Array(4*f),k=new Uint32Array(j.buffer),l=e.ctype,m=e.depth,n=i.readUshort;if(6==l){var o=f<<2;if(8==m)for(var p=0;o>p;p+=4)j[p]=a[p],j[p+1]=a[p+1],j[p+2]=a[p+2],j[p+3]=a[p+3];if(16==m)for(p=0;o>p;p++)j[p]=a[p<<1]}else if(2==l){var q=e.tabs.tRNS;if(null==q){if(8==m)for(p=0;f>p;p++){var r=3*p;k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r]}if(16==m)for(p=0;f>p;p++)r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r]}else{var s=q[0],t=q[1],u=q[2];if(8==m)for(p=0;f>p;p++){var v=p<<2;r=3*p,k[p]=255<<24|a[r+2]<<16|a[r+1]<<8|a[r],a[r]==s&&a[r+1]==t&&a[r+2]==u&&(j[v+3]=0)}if(16==m)for(p=0;f>p;p++)v=p<<2,r=6*p,k[p]=255<<24|a[r+4]<<16|a[r+2]<<8|a[r],n(a,r)==s&&n(a,r+2)==t&&n(a,r+4)==u&&(j[v+3]=0)}}else if(3==l){var w=e.tabs.PLTE,x=e.tabs.tRNS,y=x?x.length:0;if(1==m)for(var z=0;c>z;z++){var A=z*h,B=z*b;for(p=0;b>p;p++){v=B+p<<2;var C=3*(D=1&a[A+(p>>3)]>>7-((7&p)<<0));j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}if(2==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=3&a[A+(p>>2)]>>6-((3&p)<<1)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(4==m)for(z=0;c>z;z++)for(A=z*h,B=z*b,p=0;b>p;p++)v=B+p<<2,C=3*(D=15&a[A+(p>>1)]>>4-((1&p)<<2)),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255;if(8==m)for(p=0;f>p;p++){var D;v=p<<2,C=3*(D=a[p]),j[v]=w[C],j[v+1]=w[C+1],j[v+2]=w[C+2],j[v+3]=y>D?x[D]:255}}else if(4==l){if(8==m)for(p=0;f>p;p++){v=p<<2;var E=a[F=p<<1];j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+1]}if(16==m)for(p=0;f>p;p++){var F;v=p<<2,E=a[F=p<<2],j[v]=E,j[v+1]=E,j[v+2]=E,j[v+3]=a[F+2]}}else if(0==l)for(s=e.tabs.tRNS?e.tabs.tRNS:-1,z=0;c>z;z++){var G=z*h,H=z*b;if(1==m)for(var I=0;b>I;I++){var J=(E=255*(1&a[G+(I>>>3)]>>>7-(7&I)))==255*s?0:255;k[H+I]=J<<24|E<<16|E<<8|E}else if(2==m)for(I=0;b>I;I++)J=(E=85*(3&a[G+(I>>>2)]>>>6-((3&I)<<1)))==85*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(4==m)for(I=0;b>I;I++)J=(E=17*(15&a[G+(I>>>1)]>>>4-((1&I)<<2)))==17*s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(8==m)for(I=0;b>I;I++)J=(E=a[G+I])==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E;else if(16==m)for(I=0;b>I;I++)E=a[G+(I<<1)],J=n(a,G+(I<<1))==s?0:255,k[H+I]=J<<24|E<<16|E<<8|E}return j}function b(a,b,f,g){var h=d(a),i=Math.ceil(f*h/8),k=new Uint8Array((i+1+a.interlace)*g);return b=a.tabs.CgBI?j(b,k):c(b,k),0==a.interlace?b=e(b,a,0,f,g):1==a.interlace&&(b=function(a,b){for(var c=b.width,f=b.height,g=d(b),h=g>>3,i=Math.ceil(c*g/8),j=new Uint8Array(f*i),k=0,l=[0,0,4,0,2,0,1],m=[0,4,0,2,0,1,0],n=[8,8,8,4,4,2,2],o=[8,8,4,4,2,2,1],p=0;7>p;){for(var q=n[p],r=o[p],s=0,t=0,u=l[p];f>u;)u+=q,t++;for(var v=m[p];c>v;)v+=r,s++;var w=Math.ceil(s*g/8);e(a,b,k,s,t);for(var x=0,y=l[p];f>y;){for(var z=m[p],A=k+x*w<<3;c>z;){var B;if(1==g&&(B=1&(B=a[A>>3])>>7-(7&A),j[y*i+(z>>3)]|=B<<7-((7&z)<<0)),2==g&&(B=3&(B=a[A>>3])>>6-(7&A),j[y*i+(z>>2)]|=B<<6-((3&z)<<1)),4==g&&(B=15&(B=a[A>>3])>>4-(7&A),j[y*i+(z>>1)]|=B<<4-((1&z)<<2)),g>=8)for(var C=y*i+z*h,D=0;h>D;D++)j[C+D]=a[(A>>3)+D];A+=g,z+=r}x++,y+=q}0!=s*t&&(k+=t*(1+w)),p+=1}return j}(b,a)),b}function c(a,b){return j(new Uint8Array(a.buffer,2,a.length-6),b)}function d(a){return[1,null,3,1,2,null,4][a.ctype]*a.depth}function e(a,b,c,e,g){var h,i,j=d(b),k=Math.ceil(e*j/8);j=Math.ceil(j/8);var l=a[c],m=0;if(l>1&&(a[c]=[0,0,1][l-2]),3==l)for(m=j;k>m;m++)a[m+1]=255&a[m+1]+(a[m+1-j]>>>1);for(var n=0;g>n;n++)if(h=c+n*k,i=h+n+1,l=a[i-1],m=0,0==l)for(;k>m;m++)a[h+m]=a[i+m];else if(1==l){for(;j>m;m++)a[h+m]=a[i+m];for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-j]}else if(2==l)for(;k>m;m++)a[h+m]=a[i+m]+a[h+m-k];else if(3==l){for(;j>m;m++)a[h+m]=a[i+m]+(a[h+m-k]>>>1);for(;k>m;m++)a[h+m]=a[i+m]+(a[h+m-k]+a[h+m-j]>>>1)}else{for(;j>m;m++)a[h+m]=a[i+m]+f(0,a[h+m-k],0);for(;k>m;m++)a[h+m]=a[i+m]+f(a[h+m-j],a[h+m-k],a[h+m-j-k])}return a}function f(a,b,c){var d=a+b-c,e=d-a,f=d-b,g=d-c;return f*f>=e*e&&g*g>=e*e?a:g*g>=f*f?b:c}function g(a,b,c){c.width=i.readUint(a,b),b+=4,c.height=i.readUint(a,b),b+=4,c.depth=a[b],b++,c.ctype=a[b],b++,c.compress=a[b],b++,c.filter=a[b],b++,c.interlace=a[b],b++}function h(a,b,c,d,e,f,g,h,i){for(var j=Math.min(b,e),k=Math.min(c,f),l=0,m=0,n=0;k>n;n++)for(var o=0;j>o;o++)if(g>=0&&h>=0?(l=n*b+o<<2,m=(h+n)*e+g+o<<2):(l=(-h+n)*b-g+o<<2,m=n*e+o<<2),0==i)d[m]=a[l],d[m+1]=a[l+1],d[m+2]=a[l+2],d[m+3]=a[l+3];else if(1==i){var p=a[l+3]*(1/255),q=a[l]*p,r=a[l+1]*p,s=a[l+2]*p,t=d[m+3]*(1/255),u=d[m]*t,v=d[m+1]*t,w=d[m+2]*t,x=1-p,y=p+t*x,z=0==y?0:1/y;d[m+3]=255*y,d[m+0]=(q+u*x)*z,d[m+1]=(r+v*x)*z,d[m+2]=(s+w*x)*z}else if(2==i)p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w?(d[m]=0,d[m+1]=0,d[m+2]=0,d[m+3]=0):(d[m]=q,d[m+1]=r,d[m+2]=s,d[m+3]=p);else if(3==i){if(p=a[l+3],q=a[l],r=a[l+1],s=a[l+2],t=d[m+3],u=d[m],v=d[m+1],w=d[m+2],p==t&&q==u&&r==v&&s==w)continue;if(220>p&&t>20)return!1}return!0}var i={nextZero:function(a,b){for(;0!=a[b];)b++;return b},readUshort:function(a,b){return a[b]<<8|a[b+1]},writeUshort:function(a,b,c){a[b]=255&c>>8,a[b+1]=255&c},readUint:function(a,b){return 16777216*a[b]+(a[b+1]<<16|a[b+2]<<8|a[b+3])},writeUint:function(a,b,c){a[b]=255&c>>24,a[b+1]=255&c>>16,a[b+2]=255&c>>8,a[b+3]=255&c},readASCII:function(a,b,c){for(var d=\"\",e=0;c>e;e++)d+=String.fromCharCode(a[b+e]);return d},writeASCII:function(a,b,c){for(var d=0;d<c.length;d++)a[b+d]=c.charCodeAt(d)},readBytes:function(a,b,c){for(var d=[],e=0;c>e;e++)d.push(a[b+e]);return d},pad:function(a){return a.length<2?\"0\".concat(a):a},readUTF8:function(a,b,c){for(var d,e=\"\",f=0;c>f;f++)e+=\"%\".concat(i.pad(a[b+f].toString(16)));try{d=decodeURIComponent(e)}catch(d){return i.readASCII(a,b,c)}return d}},j=function(){var a={H:{}};return a.H.N=function(b,c){var d,e,f=Uint8Array,g=0,h=0,i=0,j=0,k=0,l=0,m=0,n=0,o=0;if(3==b[0]&&0==b[1])return c||new f(0);var p=a.H,q=p.b,r=p.e,s=p.R,t=p.n,u=p.A,v=p.Z,w=p.m,x=null==c;for(x&&(c=new f(b.length>>>2<<5));0==g;)if(g=q(b,o,1),h=q(b,o+1,2),o+=3,0!=h){if(x&&(c=a.H.W(c,n+(1<<17))),1==h&&(d=w.J,e=w.h,l=511,m=31),2==h){i=r(b,o,5)+257,j=r(b,o+5,5)+1,k=r(b,o+10,4)+4,o+=14;for(var y=1,z=0;38>z;z+=2)w.Q[z]=0,w.Q[z+1]=0;for(z=0;k>z;z++){var A=r(b,o+3*z,3);w.Q[1+(w.X[z]<<1)]=A,A>y&&(y=A)}o+=3*k,t(w.Q,y),u(w.Q,y,w.u),d=w.w,e=w.d,o=s(w.u,(1<<y)-1,i+j,b,o,w.v);var B=p.V(w.v,0,i,w.C);l=(1<<B)-1;var C=p.V(w.v,i,j,w.D);m=(1<<C)-1,t(w.C,B),u(w.C,B,d),t(w.D,C),u(w.D,C,e)}for(;;){var D=d[v(b,o)&l];o+=15&D;var E=D>>>4;if(0==E>>>8)c[n++]=E;else{if(256==E)break;var F=n+E-254;if(E>264){var G=w.q[E-257];F=n+(G>>>3)+r(b,o,7&G),o+=7&G}var H=e[v(b,o)&m];o+=15&H;var I=H>>>4,J=w.c[I],K=(J>>>4)+q(b,o,15&J);for(o+=15&J;F>n;)c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K],c[n]=c[n++-K];n=F}}}else{0!=(7&o)&&(o+=8-(7&o));var L=4+(o>>>3),M=b[L-4]|b[L-3]<<8;x&&(c=a.H.W(c,n+M)),c.set(new f(b.buffer,b.byteOffset+L,M),n),o=L+M<<3,n+=M}return c.length==n?c:c.slice(0,n)},a.H.W=function(a,b){var c=a.length;if(c>=b)return a;var d=new Uint8Array(c<<1);return d.set(a,0),d},a.H.R=function(b,c,d,e,f,g){for(var h=a.H.e,i=a.H.Z,j=0;d>j;){var k=b[i(e,f)&c];f+=15&k;var l=k>>>4;if(15>=l)g[j]=l,j++;else{var m=0,n=0;16==l?(n=3+h(e,f,2),f+=2,m=g[j-1]):17==l?(n=3+h(e,f,3),f+=3):18==l&&(n=11+h(e,f,7),f+=7);for(var o=j+n;o>j;)g[j]=m,j++}}return f},a.H.V=function(a,b,c,d){for(var e=0,f=0,g=d.length>>>1;c>f;){var h=a[f+b];d[f<<1]=0,d[1+(f<<1)]=h,h>e&&(e=h),f++}for(;g>f;)d[f<<1]=0,d[1+(f<<1)]=0,f++;return e},a.H.n=function(b,c){for(var d,e,f,g,h=a.H.m,i=b.length,j=h.j,k=0;c>=k;k++)j[k]=0;for(k=1;i>k;k+=2)j[b[k]]++;var l=h.K;for(d=0,j[0]=0,e=1;c>=e;e++)d=d+j[e-1]<<1,l[e]=d;for(f=0;i>f;f+=2)g=b[f+1],0!=g&&(b[f]=l[g],l[g]++)},a.H.A=function(b,c,d){for(var e=b.length,f=a.H.m.r,g=0;e>g;g+=2)if(0!=b[g+1])for(var h=g>>1,i=b[g+1],j=h<<4|i,k=c-i,l=b[g]<<k,m=l+(1<<k);l!=m;)d[f[l]>>>15-c]=j,l++},a.H.l=function(b,c){for(var d=a.H.m.r,e=15-c,f=0;f<b.length;f+=2){var g=b[f]<<c-b[f+1];b[f]=d[g]>>>e}},a.H.M=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8},a.H.I=function(a,b,c){c<<=7&b;var d=b>>>3;a[d]|=c,a[d+1]|=c>>>8,a[d+2]|=c>>>16},a.H.e=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8)>>>(7&b)&(1<<c)-1},a.H.b=function(a,b,c){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)&(1<<c)-1},a.H.Z=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16)>>>(7&b)},a.H.i=function(a,b){return(a[b>>>3]|a[1+(b>>>3)]<<8|a[2+(b>>>3)]<<16|a[3+(b>>>3)]<<24)>>>(7&b)},a.H.m=function(){var a=Uint16Array,b=Uint32Array;return{K:new a(16),j:new a(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new a(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new b(32),J:new a(512),_:[],h:new a(32),$:[],w:new a(32768),C:[],v:[],d:new a(32768),D:[],u:new a(512),Q:[],r:new a(32768),s:new b(286),Y:new b(30),a:new b(19),t:new b(15e3),k:new a(65536),g:new a(32768)}}(),function(){function b(a,b,c){for(;0!=b--;)a.push(0,c)}for(var c=a.H.m,d=0;32768>d;d++){var e=d;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,c.r[d]=(e>>>16|e<<16)>>>17}for(d=0;32>d;d++)c.q[d]=c.S[d]<<3|c.T[d],c.c[d]=c.p[d]<<4|c.z[d];b(c._,144,8),b(c._,112,9),b(c._,24,7),b(c._,8,8),a.H.n(c._,9),a.H.A(c._,9,c.J),a.H.l(c._,9),b(c.$,32,5),a.H.n(c.$,5),a.H.A(c.$,5,c.h),a.H.l(c.$,5),b(c.Q,19,0),b(c.C,286,0),b(c.D,30,0),b(c.v,320,0)}(),a.H.N}();return{decode:function(a){for(var d,e=new Uint8Array(a),f=8,h=w,i=h.readUshort,k=h.readUint,l={tabs:{},frames:[]},m=new Uint8Array(e.length),n=0,o=0,p=[137,80,78,71,13,10,26,10],q=0;8>q;q++)if(e[q]!=p[q])throw\"The input is not a PNG file!\";for(;f<e.length;){var r=h.readUint(e,f);f+=4;var s=h.readASCII(e,f,4);if(f+=4,\"IHDR\"==s)g(e,f,l);else if(\"iCCP\"==s){for(var t=f;0!=e[t];)t++;h.readASCII(e,f,t-f),e[t+1];var u=e.slice(t+2,f+r),v=null;try{v=c(u)}catch(w){v=j(u)}l.tabs[s]=v}else if(\"CgBI\"==s)l.tabs[s]=e.slice(f,f+4);else if(\"IDAT\"==s){for(q=0;r>q;q++)m[n+q]=e[f+q];n+=r}else if(\"acTL\"==s)l.tabs[s]={num_frames:k(e,f),num_plays:k(e,f+4)},d=new Uint8Array(e.length);else if(\"fcTL\"==s){0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height),o=0);var x={x:k(e,f+12),y:k(e,f+16),width:k(e,f+4),height:k(e,f+8)},y=i(e,f+22);y=i(e,f+20)/(0==y?100:y);var z={rect:x,delay:Math.round(1e3*y),dispose:e[f+24],blend:e[f+25]};l.frames.push(z)}else if(\"fdAT\"==s){for(q=0;r-4>q;q++)d[o+q]=e[f+q+4];o+=r-4}else if(\"pHYs\"==s)l.tabs[s]=[h.readUint(e,f),h.readUint(e,f+4),e[f+8]];else if(\"cHRM\"==s)for(l.tabs[s]=[],q=0;8>q;q++)l.tabs[s].push(h.readUint(e,f+4*q));else if(\"tEXt\"==s||\"zTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={});var A=h.nextZero(e,f),B=h.readASCII(e,f,A-f),C=f+r-A-1;if(\"tEXt\"==s)E=h.readASCII(e,A+1,C);else{var D=c(e.slice(A+2,A+2+C));E=h.readUTF8(D,0,D.length)}l.tabs[s][B]=E}else if(\"iTXt\"==s){null==l.tabs[s]&&(l.tabs[s]={}),A=0,t=f,A=h.nextZero(e,t),B=h.readASCII(e,t,A-t);var E,F=e[t=A+1];e[t+1],t+=2,A=h.nextZero(e,t),h.readASCII(e,t,A-t),t=A+1,A=h.nextZero(e,t),h.readUTF8(e,t,A-t),C=r-((t=A+1)-f),0==F?E=h.readUTF8(e,t,C):(D=c(e.slice(t,t+C)),E=h.readUTF8(D,0,D.length)),l.tabs[s][B]=E}else if(\"PLTE\"==s)l.tabs[s]=h.readBytes(e,f,r);else if(\"hIST\"==s){var G=l.tabs.PLTE.length/3;for(l.tabs[s]=[],q=0;G>q;q++)l.tabs[s].push(i(e,f+2*q))}else if(\"tRNS\"==s)3==l.ctype?l.tabs[s]=h.readBytes(e,f,r):0==l.ctype?l.tabs[s]=i(e,f):2==l.ctype&&(l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]);else if(\"gAMA\"==s)l.tabs[s]=h.readUint(e,f)/1e5;else if(\"sRGB\"==s)l.tabs[s]=e[f];else if(\"bKGD\"==s)0==l.ctype||4==l.ctype?l.tabs[s]=[i(e,f)]:2==l.ctype||6==l.ctype?l.tabs[s]=[i(e,f),i(e,f+2),i(e,f+4)]:3==l.ctype&&(l.tabs[s]=e[f]);else if(\"IEND\"==s)break;f+=r,h.readUint(e,f),f+=4}var H;return 0!=o&&((H=l.frames[l.frames.length-1]).data=b(l,d.slice(0,o),H.rect.width,H.rect.height)),l.data=b(l,m,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function(b){var c=b.width,d=b.height;if(null==b.tabs.acTL)return[a(b.data,c,d,b).buffer];var e=[];null==b.frames[0].data&&(b.frames[0].data=b.data);for(var f=4*c*d,g=new Uint8Array(f),i=new Uint8Array(f),j=new Uint8Array(f),k=0;k<b.frames.length;k++){var l=b.frames[k],m=l.rect.x,n=l.rect.y,o=l.rect.width,p=l.rect.height,q=a(l.data,o,p,b);if(0!=k)for(var r=0;f>r;r++)j[r]=g[r];if(0==l.blend?h(q,o,p,g,c,d,m,n,0):1==l.blend&&h(q,o,p,g,c,d,m,n,1),e.push(g.buffer.slice(0)),0==l.dispose);else if(1==l.dispose)h(i,o,p,g,c,d,m,n,0);else if(2==l.dispose)for(r=0;f>r;r++)g[r]=j[r]}return e},_paeth:f,_copyTile:h,_bin:i}}();!function(){function a(a,b,c,d){b[c]+=a[0]*d>>4,b[c+1]+=a[1]*d>>4,b[c+2]+=a[2]*d>>4,b[c+3]+=a[3]*d>>4}function b(a){return Math.max(0,Math.min(255,a))}function c(a,b){var c=a[0]-b[0],d=a[1]-b[1],e=a[2]-b[2],f=a[3]-b[3];return c*c+d*d+e*e+f*f}function d(d,e,f,g,h,i,j){null==j&&(j=1);for(var k=g.length,l=[],m=0;k>m;m++){var n=g[m];l.push([255&n>>>0,255&n>>>8,255&n>>>16,255&n>>>24])}for(m=0;k>m;m++)for(var o=4294967295,p=0,q=0;k>q;q++){var r=c(l[m],l[q]);q!=m&&o>r&&(o=r,p=q)}var s=new Uint32Array(h.buffer),t=new Int16Array(4*e*f),u=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(m=0;m<u.length;m++)u[m]=255*((u[m]+.5)/16-.5);for(var v=0;f>v;v++)for(var w=0;e>w;w++){var x;m=4*(v*e+w),2!=j?x=[b(d[m]+t[m]),b(d[m+1]+t[m+1]),b(d[m+2]+t[m+2]),b(d[m+3]+t[m+3])]:(r=u[4*(3&v)+(3&w)],x=[b(d[m]+r),b(d[m+1]+r),b(d[m+2]+r),b(d[m+3]+r)]),p=0;var y=16777215;for(q=0;k>q;q++){var z=c(x,l[q]);y>z&&(y=z,p=q)}var A=l[p],B=[x[0]-A[0],x[1]-A[1],x[2]-A[2],x[3]-A[3]];1==j&&(w!=e-1&&a(B,t,m+4,7),v!=f-1&&(0!=w&&a(B,t,m+4*e-4,3),a(B,t,m+4*e,5),w!=e-1&&a(B,t,m+4*e+4,1))),i[m>>2]=p,s[m>>2]=g[p]}}function e(a,b,c,d,e){null==e&&(e={});var f,g=w.crc,h=u.writeUint,i=u.writeUshort,j=u.writeASCII,k=8,l=a.frames.length>1,m=!1,n=33+(l?20:0);if(null!=e.sRGB&&(n+=13),null!=e.pHYs&&(n+=21),null!=e.iCCP&&(f=pako.deflate(e.iCCP),n+=21+f.length+4),3==a.ctype){for(var o=a.plte.length,p=0;o>p;p++)255!=a.plte[p]>>>24&&(m=!0);n+=8+3*o+4+(m?8+1*o+4:0)}for(var q=0;q<a.frames.length;q++)l&&(n+=38),n+=(C=a.frames[q]).cimg.length+12,0!=q&&(n+=4);n+=12;var r=new Uint8Array(n),s=[137,80,78,71,13,10,26,10];for(p=0;8>p;p++)r[p]=s[p];if(h(r,k,13),k+=4,j(r,k,\"IHDR\"),k+=4,h(r,k,b),k+=4,h(r,k,c),k+=4,r[k]=a.depth,k++,r[k]=a.ctype,k++,r[k]=0,k++,r[k]=0,k++,r[k]=0,k++,h(r,k,g(r,k-17,17)),k+=4,null!=e.sRGB&&(h(r,k,1),k+=4,j(r,k,\"sRGB\"),k+=4,r[k]=e.sRGB,k++,h(r,k,g(r,k-5,5)),k+=4),null!=e.iCCP){var t=13+f.length;h(r,k,t),k+=4,j(r,k,\"iCCP\"),k+=4,j(r,k,\"ICC profile\"),k+=11,k+=2,r.set(f,k),k+=f.length,h(r,k,g(r,k-(t+4),t+4)),k+=4}if(null!=e.pHYs&&(h(r,k,9),k+=4,j(r,k,\"pHYs\"),k+=4,h(r,k,e.pHYs[0]),k+=4,h(r,k,e.pHYs[1]),k+=4,r[k]=e.pHYs[2],k++,h(r,k,g(r,k-13,13)),k+=4),l&&(h(r,k,8),k+=4,j(r,k,\"acTL\"),k+=4,h(r,k,a.frames.length),k+=4,h(r,k,null!=e.loop?e.loop:0),k+=4,h(r,k,g(r,k-12,12)),k+=4),3==a.ctype){for(h(r,k,3*(o=a.plte.length)),k+=4,j(r,k,\"PLTE\"),k+=4,p=0;o>p;p++){var v=3*p,x=a.plte[p],y=255&x,z=255&x>>>8,A=255&x>>>16;r[k+v+0]=y,r[k+v+1]=z,r[k+v+2]=A}if(k+=3*o,h(r,k,g(r,k-3*o-4,3*o+4)),k+=4,m){for(h(r,k,o),k+=4,j(r,k,\"tRNS\"),k+=4,p=0;o>p;p++)r[k+p]=255&a.plte[p]>>>24;k+=o,h(r,k,g(r,k-o-4,o+4)),k+=4}}var B=0;for(q=0;q<a.frames.length;q++){var C=a.frames[q];l&&(h(r,k,26),k+=4,j(r,k,\"fcTL\"),k+=4,h(r,k,B++),k+=4,h(r,k,C.rect.width),k+=4,h(r,k,C.rect.height),k+=4,h(r,k,C.rect.x),k+=4,h(r,k,C.rect.y),k+=4,i(r,k,d[q]),k+=2,i(r,k,1e3),k+=2,r[k]=C.dispose,k++,r[k]=C.blend,k++,h(r,k,g(r,k-30,30)),k+=4);var D=C.cimg;h(r,k,(o=D.length)+(0==q?0:4)),k+=4;var E=k;j(r,k,0==q?\"IDAT\":\"fdAT\"),k+=4,0!=q&&(h(r,k,B++),k+=4),r.set(D,k),k+=o,h(r,k,g(r,E,k-E)),k+=4}return h(r,k,0),k+=4,j(r,k,\"IEND\"),k+=4,h(r,k,g(r,k-4,4)),k+=4,r.buffer}function f(a,b,c){for(var d=0;d<a.frames.length;d++){var e=a.frames[d];e.rect.width;var f=e.rect.height,g=new Uint8Array(f*e.bpl+f);e.cimg=j(e.img,f,e.bpp,e.bpl,g,b,c)}}function g(a,b,c,e,f){for(var g=f[0],j=f[1],k=f[2],m=f[3],n=f[4],o=f[5],p=6,q=8,r=255,s=0;s<a.length;s++)for(var u=new Uint8Array(a[s]),v=u.length,w=0;v>w;w+=4)r&=u[w+3];var x=255!=r,y=function(a,b,c,d,e,f){for(var g=[],j=0;j<a.length;j++){var k,l=new Uint8Array(a[j]),m=new Uint32Array(l.buffer),n=0,o=0,p=b,q=c,r=d?1:0;if(0!=j){for(var s=f||d||1==j||0!=g[j-2].dispose?1:2,u=0,v=1e9,w=0;s>w;w++){for(var x=new Uint8Array(a[j-1-w]),y=new Uint32Array(a[j-1-w]),z=b,A=c,B=-1,C=-1,D=0;c>D;D++)for(var E=0;b>E;E++)m[M=D*b+E]!=y[M]&&(z>E&&(z=E),E>B&&(B=E),A>D&&(A=D),D>C&&(C=D));-1==B&&(z=A=B=C=0),e&&(1==(1&z)&&z--,1==(1&A)&&A--);var F=(B-z+1)*(C-A+1);v>F&&(v=F,u=w,n=z,o=A,p=B-z+1,q=C-A+1)}x=new Uint8Array(a[j-1-u]),1==u&&(g[j-1].dispose=2),k=new Uint8Array(4*p*q),t(x,b,c,k,p,q,-n,-o,0),r=t(l,b,c,k,p,q,-n,-o,3)?1:0,1==r?i(l,b,c,k,{x:n,y:o,width:p,height:q}):t(l,b,c,k,p,q,-n,-o,0)}else k=l.slice(0);g.push({rect:{x:n,y:o,width:p,height:q},img:k,blend:r,dispose:0})}if(d)for(j=0;j<g.length;j++)if(1!=(N=g[j]).blend){var G=N.rect,H=g[j-1].rect,I=Math.min(G.x,H.x),J=Math.min(G.y,H.y),K={x:I,y:J,width:Math.max(G.x+G.width,H.x+H.width)-I,height:Math.max(G.y+G.height,H.y+H.height)-J};g[j-1].dispose=1,0!=j-1&&h(a,b,c,g,j-1,K,e),h(a,b,c,g,j,K,e)}var L=0;if(1!=a.length)for(var M=0;M<g.length;M++){var N;L+=(N=g[M]).rect.width*N.rect.height}return g}(a,b,c,g,j,k),z={},A=[],B=[];if(0!=e){var C=[];for(w=0;w<y.length;w++)C.push(y[w].img.buffer);var D=function(a){for(var b=0,c=0;c<a.length;c++)b+=a[c].byteLength;var d=new Uint8Array(b),e=0;for(c=0;c<a.length;c++){for(var f=new Uint8Array(a[c]),g=f.length,h=0;g>h;h+=4){var i=f[h],j=f[h+1],k=f[h+2],l=f[h+3];0==l&&(i=j=k=0),d[e+h]=i,d[e+h+1]=j,d[e+h+2]=k,d[e+h+3]=l}e+=g}return d.buffer}(C),E=l(D,e);for(w=0;w<E.plte.length;w++)A.push(E.plte[w].est.rgba);var F=0;for(w=0;w<y.length;w++){var G=(J=y[w]).img.length,H=new Uint8Array(E.inds.buffer,F>>2,G>>2);B.push(H);var I=new Uint8Array(E.abuf,F,G);o&&d(J.img,J.rect.width,J.rect.height,A,I,H),J.img.set(I),F+=G}}else for(s=0;s<y.length;s++){var J=y[s],K=new Uint32Array(J.img.buffer),L=J.rect.width;for(v=K.length,H=new Uint8Array(v),B.push(H),w=0;v>w;w++){var M=K[w];if(0!=w&&M==K[w-1])H[w]=H[w-1];else if(w>L&&M==K[w-L])H[w]=H[w-L];else{var N=z[M];if(null==N&&(z[M]=N=A.length,A.push(M),A.length>=300))break;H[w]=N}}}var O=A.length;for(256>=O&&0==n&&(q=2>=O?1:4>=O?2:16>=O?4:8,q=Math.max(q,m)),s=0;s<y.length;s++){(J=y[s]).rect.x,J.rect.y,L=J.rect.width;var P=J.rect.height,Q=J.img;new Uint32Array(Q.buffer);var R=4*L,S=4;if(256>=O&&0==n){R=Math.ceil(q*L/8);for(var T=new Uint8Array(R*P),U=B[s],V=0;P>V;V++){w=V*R;var W=V*L;if(8==q)for(var X=0;L>X;X++)T[w+X]=U[W+X];else if(4==q)for(X=0;L>X;X++)T[w+(X>>1)]|=U[W+X]<<4-4*(1&X);else if(2==q)for(X=0;L>X;X++)T[w+(X>>2)]|=U[W+X]<<6-2*(3&X);else if(1==q)for(X=0;L>X;X++)T[w+(X>>3)]|=U[W+X]<<7-1*(7&X)}Q=T,p=3,S=1}else if(0==x&&1==y.length){T=new Uint8Array(3*L*P);var Y=L*P;for(w=0;Y>w;w++){var Z=3*w,$=4*w;T[Z]=Q[$],T[Z+1]=Q[$+1],T[Z+2]=Q[$+2]}Q=T,p=2,S=3,R=3*L}J.img=Q,J.bpl=R,J.bpp=S}return{ctype:p,depth:q,plte:A,frames:y}}function h(a,b,c,d,e,f,g){for(var h=Uint8Array,j=Uint32Array,k=new h(a[e-1]),l=new j(a[e-1]),m=e+1<a.length?new h(a[e+1]):null,n=new h(a[e]),o=new j(n.buffer),p=b,q=c,r=-1,s=-1,u=0;u<f.height;u++)for(var v=0;v<f.width;v++){var w=f.x+v,x=f.y+u,y=x*b+w,z=o[y];0==z||0==d[e-1].dispose&&l[y]==z&&(null==m||0!=m[4*y+3])||(p>w&&(p=w),w>r&&(r=w),q>x&&(q=x),x>s&&(s=x))}-1==r&&(p=q=r=s=0),g&&(1==(1&p)&&p--,1==(1&q)&&q--),f={x:p,y:q,width:r-p+1,height:s-q+1};var A=d[e];A.rect=f,A.blend=1,A.img=new Uint8Array(4*f.width*f.height),0==d[e-1].dispose?(t(k,b,c,A.img,f.width,f.height,-f.x,-f.y,0),i(n,b,c,A.img,f)):t(n,b,c,A.img,f.width,f.height,-f.x,-f.y,0)}function i(a,b,c,d,e){t(a,b,c,d,e.width,e.height,-e.x,-e.y,2)}function j(a,b,c,d,e,f,g){var h,i=[],j=[0,1,2,3,4];-1!=f?j=[f]:(b*d>5e5||1==c)&&(j=[0]),g&&(h={level:0});for(var l=B,m=0;m<j.length;m++){for(var n=0;b>n;n++)k(e,a,n,d,c,j[m]);i.push(l.deflate(e,h))}var o,p=1e9;for(m=0;m<i.length;m++)i[m].length<p&&(o=m,p=i[m].length);return i[o]}function k(a,b,c,d,e,f){var g=c*d,h=g+c;if(a[h]=f,h++,0==f)if(500>d)for(var i=0;d>i;i++)a[h+i]=b[g+i];else a.set(new Uint8Array(b.buffer,g,d),h);else if(1==f){for(i=0;e>i;i++)a[h+i]=b[g+i];for(i=e;d>i;i++)a[h+i]=255&b[g+i]-b[g+i-e]+256}else if(0==c){for(i=0;e>i;i++)a[h+i]=b[g+i];if(2==f)for(i=e;d>i;i++)a[h+i]=b[g+i];if(3==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-(b[g+i-e]>>1)+256;if(4==f)for(i=e;d>i;i++)a[h+i]=255&b[g+i]-v(b[g+i-e],0,0)+256}else{if(2==f)for(i=0;d>i;i++)a[h+i]=255&b[g+i]+256-b[g+i-d];if(3==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]>>1);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-(b[g+i-d]+b[g+i-e]>>1)}if(4==f){for(i=0;e>i;i++)a[h+i]=255&b[g+i]+256-v(0,b[g+i-d],0);for(i=e;d>i;i++)a[h+i]=255&b[g+i]+256-v(b[g+i-e],b[g+i-d],b[g+i-e-d])}}}function l(a,b){var c,d=new Uint8Array(a),e=d.slice(0),f=new Uint32Array(e.buffer),g=m(e,b),h=g[0],i=g[1],j=d.length,k=new Uint8Array(j>>2);if(d.length<2e7)for(var l=0;j>l;l+=4)c=n(h,p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255)),k[l>>2]=c.ind,f[l>>2]=c.est.rgba;else for(l=0;j>l;l+=4){var p=d[l]*(1/255),q=d[l+1]*(1/255),r=d[l+2]*(1/255),s=d[l+3]*(1/255);for(c=h;c.left;)c=o(c.est,p,q,r,s)<=0?c.left:c.right;k[l>>2]=c.ind,f[l>>2]=c.est.rgba}return{abuf:e.buffer,inds:k,plte:i}}function m(a,b,c){null==c&&(c=1e-4);var d=new Uint32Array(a.buffer),e={i0:0,i1:a.length,bst:null,est:null,tdst:0,left:null,right:null};e.bst=r(a,e.i0,e.i1),e.est=s(e.bst);for(var f=[e];f.length<b;){for(var g=0,h=0,i=0;i<f.length;i++)f[i].est.L>g&&(g=f[i].est.L,h=i);if(c>g)break;\nvar j=f[h],k=p(a,d,j.i0,j.i1,j.est.e,j.est.eMq255);if(j.i0>=k||j.i1<=k)j.est.L=0;else{var l={i0:j.i0,i1:k,bst:null,est:null,tdst:0,left:null,right:null};l.bst=r(a,l.i0,l.i1),l.est=s(l.bst);var m={i0:k,i1:j.i1,bst:null,est:null,tdst:0,left:null,right:null};for(m.bst={R:[],m:[],N:j.bst.N-l.bst.N},i=0;16>i;i++)m.bst.R[i]=j.bst.R[i]-l.bst.R[i];for(i=0;4>i;i++)m.bst.m[i]=j.bst.m[i]-l.bst.m[i];m.est=s(m.bst),j.left=l,j.right=m,f[h]=l,f.push(m)}}for(f.sort(function(a,b){return b.bst.N-a.bst.N}),i=0;i<f.length;i++)f[i].ind=i;return[e,f]}function n(a,b,c,d,e){if(null==a.left)return a.tdst=function(a,b,c,d,e){var f=b-a[0],g=c-a[1],h=d-a[2],i=e-a[3];return f*f+g*g+h*h+i*i}(a.est.q,b,c,d,e),a;var f=o(a.est,b,c,d,e),g=a.left,h=a.right;f>0&&(g=a.right,h=a.left);var i=n(g,b,c,d,e);if(i.tdst<=f*f)return i;var j=n(h,b,c,d,e);return j.tdst<i.tdst?j:i}function o(a,b,c,d,e){var f=a.e;return f[0]*b+f[1]*c+f[2]*d+f[3]*e-a.eMq}function p(a,b,c,d,e,f){for(d-=4;d>c;){for(;q(a,c,e)<=f;)c+=4;for(;q(a,d,e)>f;)d-=4;if(c>=d)break;var g=b[c>>2];b[c>>2]=b[d>>2],b[d>>2]=g,c+=4,d-=4}for(;q(a,c,e)>f;)c-=4;return c+4}function q(a,b,c){return a[b]*c[0]+a[b+1]*c[1]+a[b+2]*c[2]+a[b+3]*c[3]}function r(a,b,c){for(var d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],e=[0,0,0,0],f=c-b>>2,g=b;c>g;g+=4){var h=a[g]*(1/255),i=a[g+1]*(1/255),j=a[g+2]*(1/255),k=a[g+3]*(1/255);e[0]+=h,e[1]+=i,e[2]+=j,e[3]+=k,d[0]+=h*h,d[1]+=h*i,d[2]+=h*j,d[3]+=h*k,d[5]+=i*i,d[6]+=i*j,d[7]+=i*k,d[10]+=j*j,d[11]+=j*k,d[15]+=k*k}return d[4]=d[1],d[8]=d[2],d[9]=d[6],d[12]=d[3],d[13]=d[7],d[14]=d[11],{R:d,m:e,N:f}}function s(a){var b=a.R,c=a.m,d=a.N,e=c[0],f=c[1],g=c[2],h=c[3],i=0==d?0:1/d,j=[b[0]-e*e*i,b[1]-e*f*i,b[2]-e*g*i,b[3]-e*h*i,b[4]-f*e*i,b[5]-f*f*i,b[6]-f*g*i,b[7]-f*h*i,b[8]-g*e*i,b[9]-g*f*i,b[10]-g*g*i,b[11]-g*h*i,b[12]-h*e*i,b[13]-h*f*i,b[14]-h*g*i,b[15]-h*h*i],k=j,l=x,m=[Math.random(),Math.random(),Math.random(),Math.random()],n=0,o=0;if(0!=d)for(var p=0;16>p&&(m=l.multVec(k,m),o=Math.sqrt(l.dot(m,m)),m=l.sml(1/o,m),!(0!=p&&Math.abs(o-n)<1e-9));p++)n=o;var q=[e*i,f*i,g*i,h*i];return{Cov:j,q:q,e:m,L:n,eMq255:l.dot(l.sml(255,q),m),eMq:l.dot(m,q),rgba:(Math.round(255*q[3])<<24|Math.round(255*q[2])<<16|Math.round(255*q[1])<<8|Math.round(255*q[0])<<0)>>>0}}var t=C._copyTile,u=C._bin,v=C._paeth,w={table:function(){for(var a=new Uint32Array(256),b=0;256>b;b++){for(var c=b,d=0;8>d;d++)1&c?c=3988292384^c>>>1:c>>>=1;a[b]=c}return a}(),update:function(a,b,c,d){for(var e=0;d>e;e++)a=w.table[255&(a^b[c+e])]^a>>>8;return a},crc:function(a,b,c){return 4294967295^w.update(4294967295,a,b,c)}},x={multVec:function(a,b){return[a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3],a[4]*b[0]+a[5]*b[1]+a[6]*b[2]+a[7]*b[3],a[8]*b[0]+a[9]*b[1]+a[10]*b[2]+a[11]*b[3],a[12]*b[0]+a[13]*b[1]+a[14]*b[2]+a[15]*b[3]]},dot:function(a,b){return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]},sml:function(a,b){return[a*b[0],a*b[1],a*b[2],a*b[3]]}};C.encode=function(a,b,c,d,h,i,j){null==d&&(d=0),null==j&&(j=!1);var k=g(a,b,c,d,[!1,!1,!1,0,j,!1]);return f(k,-1),e(k,b,c,h,i)},C.encodeLL=function(a,b,c,d,g,h,i,j){for(var k={ctype:0+(1==d?0:2)+(0==g?0:4),depth:h,frames:[]},l=(d+g)*h,m=l*b,n=0;n<a.length;n++)k.frames.push({rect:{x:0,y:0,width:b,height:c},img:new Uint8Array(a[n]),blend:0,dispose:1,bpp:Math.ceil(l/8),bpl:Math.ceil(m/8)});return f(k,0,!0),e(k,b,c,i,j)},C.encode.compress=g,C.encode.dither=d,C.quantize=l,C.quantize.getKDtree=m,C.quantize.getNearest=n}();var D,E={toArrayBuffer:function(a,b){function c(a){s.setUint16(w,a,!0),w+=2}function d(a){s.setUint32(w,a,!0),w+=4}function e(a){w+=a}var f,g,h,i,j=a.width,k=a.height,l=j<<2,m=a.getContext(\"2d\").getImageData(0,0,j,k),n=new Uint32Array(m.data.buffer),o=(32*j+31)/32<<2,p=o*k,q=122+p,r=new ArrayBuffer(q),s=new DataView(r),t=1<<20,u=t,v=0,w=0,x=0;c(19778),d(q),e(4),d(122),d(108),d(j),d(-k>>>0),c(1),c(32),d(3),d(p),d(2835),d(2835),e(8),d(16711680),d(65280),d(255),d(4278190080),d(1466527264),function y(){for(;k>v&&u>0;){for(i=122+v*o,f=0;l>f;)u--,g=n[x++],h=g>>>24,s.setUint32(i+f,g<<8|h),f+=4;v++}x<n.length?(u=t,setTimeout(y,E._dly)):b(r)}()},toBlob:function(a,b){this.toArrayBuffer(a,function(a){b(new c([a],{type:\"image/bmp\"}))})},_dly:9},F={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},G=(x={},x[F.CHROME]=16384,x[F.FIREFOX]=11180,x[F.DESKTOP_SAFARI]=16384,x[F.IE]=8192,x[F.IOS]=4096,x[F.ETC]=8192,x),H=\"undefined\"!=typeof a,I=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,J=H&&a.cordova&&a.cordova.require&&a.cordova.require(\"cordova/modulemapper\"),K=(H||I)&&(J&&J.getOriginalSymbol(a,\"File\")||\"undefined\"!=typeof File&&File),L=(H||I)&&(J&&J.getOriginalSymbol(a,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader),M=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";return w.getDataUrlFromFile=g,w.getFilefromDataUrl=f,w.loadImage=h,w.drawImageInCanvas=l,w.drawFileInCanvas=n,w.canvasToFile=o,w.getExifOrientation=r,w.handleMaxWidthOrHeight=s,w.followExifOrientation=t,w.cleanupCanvasMemory=p,w.isAutoOrientationInBrowser=q,w.approximateBelowMaximumCanvasSizeOfBrowser=j,w.copyExifWithoutOrientation=e,w.getBrowserName=i,w.version=\"2.0.2\",w}),b(\"widgets/image\",[\"base\",\"uploader\",\"lib/image\",\"lib/browser-image-compression\",\"widgets/widget\"],function(a,b,c,d){var e,f=a.$;return e=function(a){var b=0,c=[],d=function(){for(var d;c.length&&a>b;)d=c.shift(),b+=d[0],d[1]()};return function(a,e,f){c.push([e,f]),a.once(\"destroy\",function(){b-=e,setTimeout(d,1)}),setTimeout(d,1)}}(5242880),f.extend(b.options,{thumb:{width:110,height:110,quality:70,allowMagnify:!0,crop:!0,preserveHeaders:!1,type:\"image/jpeg\"},compress:{enable:!1,maxWidthOrHeight:4e3,maxSize:10485760}}),b.register({name:\"image\",makeThumb:function(a,b,d,g){var h,i;return a=this.request(\"get-file\",a),a.type.match(/^image/)?(h=f.extend({},this.options.thumb),f.isPlainObject(d)&&(h=f.extend(h,d),d=null),d=d||h.width,g=g||h.height,i=new c(h),i.once(\"load\",function(){a._info=a._info||i.info(),a._meta=a._meta||i.meta(),1>=d&&d>0&&(d=a._info.width*d),1>=g&&g>0&&(g=a._info.height*g),i.resize(d,g)}),i.once(\"complete\",function(){b(!1,i.getAsDataUrl(h.type)),i.destroy()}),i.once(\"error\",function(a){b(a||!0),i.destroy()}),void e(i,a.source.size,function(){a._info&&i.info(a._info),a._meta&&i.meta(a._meta),i.loadFromBlob(a.source)})):void b(!0)},beforeSendFile:function(b){var c,e=this.options.compress;if(b=this.request(\"get-file\",b),!b._widgetImageData){var g={processed:!1,success:!1,originalSize:b.size};return e&&e.enable&&~\"image/jpeg,image/jpg,image/png\".indexOf(b.type)?(e=f.extend({},e),c=a.Deferred(),d(b.source.source,{maxSizeMB:e.maxSize/1024/1024,maxWidthOrHeight:e.maxWidthOrHeight}).then(function(a){e.debug&&console.log(\"webuploader.compress\",(100*(a.size/b.size)).toFixed(2)+\"%\");var d=b.size;b.source.source=a,b.source.size=a.size,b.size=a.size,b.trigger(\"resize\",a.size,d),g.processed=!0,g.success=!0,b._widgetImageData=g,c.resolve()})[\"catch\"](function(a){console.error(\"webuploader.compress.error\",a),g.processed=!0,b._widgetImageData=g,c.resolve()}),c.promise()):void(b._widgetImageData=g)}}})}),b(\"file\",[\"base\",\"mediator\"],function(a,b){function c(){return f+g++}function d(a){this.name=a.name||\"Untitled\",this.size=a.size||0,this.type=a.type||\"application/octet-stream\",this.lastModifiedDate=a.lastModifiedDate||1*new Date,this.id=c(),this.ext=h.exec(this.name)?RegExp.$1:\"\",this.statusText=\"\",i[this.id]=d.Status.INITED,this.source=a,this.loaded=0,this.on(\"error\",function(a){this.setStatus(d.Status.ERROR,a)})}var e=a.$,f=\"WU_FILE_\",g=0,h=/\\.([^.]+)$/,i={};return e.extend(d.prototype,{setStatus:function(a,b){var c=i[this.id];\"undefined\"!=typeof b&&(this.statusText=b),a!==c&&(i[this.id]=a,this.trigger(\"statuschange\",a,c))},getStatus:function(){return i[this.id]},getSource:function(){return this.source},destroy:function(){this.off(),delete i[this.id]}}),b.installTo(d.prototype),d.Status={INITED:\"inited\",QUEUED:\"queued\",PROGRESS:\"progress\",ERROR:\"error\",COMPLETE:\"complete\",CANCELLED:\"cancelled\",INTERRUPT:\"interrupt\",INVALID:\"invalid\"},d}),b(\"queue\",[\"base\",\"mediator\",\"file\"],function(a,b,c){function d(){this.stats={numOfQueue:0,numOfSuccess:0,numOfCancel:0,numOfProgress:0,numOfUploadFailed:0,numOfInvalid:0,numOfDeleted:0,numOfInterrupt:0},this._queue=[],this._map={}}var e=a.$,f=c.Status;return e.extend(d.prototype,{append:function(a){return this._queue.push(a),this._fileAdded(a),this},prepend:function(a){return this._queue.unshift(a),this._fileAdded(a),this},getFile:function(a){return\"string\"!=typeof a?a:this._map[a]},fetch:function(a){var b,c,d=this._queue.length;for(a=a||f.QUEUED,b=0;d>b;b++)if(c=this._queue[b],a===c.getStatus())return c;return null},sort:function(a){\"function\"==typeof a&&this._queue.sort(a)},getFiles:function(){for(var a,b=[].slice.call(arguments,0),c=[],d=0,f=this._queue.length;f>d;d++)a=this._queue[d],(!b.length||~e.inArray(a.getStatus(),b))&&c.push(a);return c},removeFile:function(a){var b=this._map[a.id];b&&(delete this._map[a.id],this._delFile(a),a.destroy(),this.stats.numOfDeleted++)},_fileAdded:function(a){var b=this,c=this._map[a.id];c||(this._map[a.id]=a,a.on(\"statuschange\",function(a,c){b._onFileStatusChange(a,c)})),a.setStatus(f.QUEUED)},_delFile:function(a){for(var b=this._queue.length-1;b>=0;b--)if(this._queue[b]==a){this._queue.splice(b,1);break}},_onFileStatusChange:function(a,b){var c=this.stats;switch(b){case f.PROGRESS:c.numOfProgress--;break;case f.QUEUED:c.numOfQueue--;break;case f.ERROR:c.numOfUploadFailed--;break;case f.INVALID:c.numOfInvalid--;break;case f.INTERRUPT:c.numOfInterrupt--}switch(a){case f.QUEUED:c.numOfQueue++;break;case f.PROGRESS:c.numOfProgress++;break;case f.ERROR:c.numOfUploadFailed++;break;case f.COMPLETE:c.numOfSuccess++;break;case f.CANCELLED:c.numOfCancel++;break;case f.INVALID:c.numOfInvalid++;break;case f.INTERRUPT:c.numOfInterrupt++}}}),b.installTo(d.prototype),d}),b(\"widgets/queue\",[\"base\",\"uploader\",\"queue\",\"file\",\"lib/file\",\"runtime/client\",\"widgets/widget\"],function(a,b,c,d,e,f){var g=a.$,h=/\\.\\w+$/,i=d.Status;return b.register({name:\"queue\",init:function(b){var d,e,h,i,j,k,l,m=this;if(g.isPlainObject(b.accept)&&(b.accept=[b.accept]),b.accept){for(j=[],h=0,e=b.accept.length;e>h;h++)i=b.accept[h].extensions,i&&j.push(i);j.length&&(k=\"\\\\.\"+j.join(\",\").replace(/,/g,\"$|\\\\.\").replace(/\\*/g,\".*\")+\"$\"),m.accept=new RegExp(k,\"i\")}return m.queue=new c,m.stats=m.queue.stats,\"html5\"===this.request(\"predict-runtime-type\")?(d=a.Deferred(),this.placeholder=l=new f(\"Placeholder\"),l.connectRuntime({runtimeOrder:\"html5\"},function(){m._ruid=l.getRuid(),d.resolve()}),d.promise()):void 0},_wrapFile:function(a){if(!(a instanceof d)){if(!(a instanceof e)){if(!this._ruid)throw new Error(\"Can't add external files.\");a=new e(this._ruid,a)}a=new d(a)}return a},acceptFile:function(a){var b=!a||!a.size||this.accept&&h.exec(a.name)&&!this.accept.test(a.name);return!b},_addFile:function(a){var b=this;return a=b._wrapFile(a),b.owner.trigger(\"beforeFileQueued\",a)?b.acceptFile(a)?(b.queue.append(a),b.owner.trigger(\"fileQueued\",a),a):void b.owner.trigger(\"error\",\"Q_TYPE_DENIED\",a):void 0},getFile:function(a){return this.queue.getFile(a)},addFile:function(a){var b=this;a.length||(a=[a]),a=g.map(a,function(a){return b._addFile(a)}),a.length&&(b.owner.trigger(\"filesQueued\",a),b.options.auto&&setTimeout(function(){b.request(\"start-upload\")},20))},getStats:function(){return this.stats},removeFile:function(a,b){var c=this;a=a.id?a:c.queue.getFile(a),this.request(\"cancel-file\",a),b&&this.queue.removeFile(a)},getFiles:function(){return this.queue.getFiles.apply(this.queue,arguments)},fetchFile:function(){return this.queue.fetch.apply(this.queue,arguments)},retry:function(a,b){var c,d,e,f=this;if(a)return a=a.id?a:f.queue.getFile(a),a.setStatus(i.QUEUED),void(b||f.request(\"start-upload\"));for(c=f.queue.getFiles(i.ERROR),d=0,e=c.length;e>d;d++)a=c[d],a.setStatus(i.QUEUED);f.request(\"start-upload\")},sortFiles:function(){return this.queue.sort.apply(this.queue,arguments)},reset:function(){this.owner.trigger(\"reset\"),this.queue=new c,this.stats=this.queue.stats},destroy:function(){this.reset(),this.placeholder&&this.placeholder.destroy()}})}),b(\"widgets/runtime\",[\"uploader\",\"runtime/runtime\",\"widgets/widget\"],function(a,b){return a.support=function(){return b.hasRuntime.apply(b,arguments)},a.register({name:\"runtime\",init:function(){if(!this.predictRuntimeType())throw Error(\"Runtime Error\")},predictRuntimeType:function(){var a,c,d=this.options.runtimeOrder||b.orders,e=this.type;if(!e)for(d=d.split(/\\s*,\\s*/g),a=0,c=d.length;c>a;a++)if(b.hasRuntime(d[a])){this.type=e=d[a];break}return e}})}),b(\"lib/transport\",[\"base\",\"runtime/client\",\"mediator\"],function(a,b,c){function d(a){var c=this;a=c.options=e.extend(!0,{},d.options,a||{}),b.call(this,\"Transport\"),this._blob=null,this._formData=a.formData||{},this._headers=a.headers||{},this.on(\"progress\",this._timeout),this.on(\"load error\",function(){c.trigger(\"progress\",1),clearTimeout(c._timer)})}var e=a.$;return d.options={server:\"\",method:\"POST\",withCredentials:!1,fileVal:\"file\",timeout:12e4,formData:{},headers:{},sendAsBinary:!1},e.extend(d.prototype,{appendBlob:function(a,b,c){var d=this,e=d.options;d.getRuid()&&d.disconnectRuntime(),d.connectRuntime(b.ruid,function(){d.exec(\"init\")}),d._blob=b,e.fileVal=a||e.fileVal,e.filename=c||e.filename},append:function(a,b){\"object\"==typeof a?e.extend(this._formData,a):this._formData[a]=b},setRequestHeader:function(a,b){\"object\"==typeof a?e.extend(this._headers,a):this._headers[a]=b},send:function(a){this.exec(\"send\",a),this._timeout()},abort:function(){return clearTimeout(this._timer),this.exec(\"abort\")},destroy:function(){this.trigger(\"destroy\"),this.off(),this.exec(\"destroy\"),this.disconnectRuntime()},getResponseHeaders:function(){return this.exec(\"getResponseHeaders\")},getResponse:function(){return this.exec(\"getResponse\")},getResponseAsJson:function(){return this.exec(\"getResponseAsJson\")},getStatus:function(){return this.exec(\"getStatus\")},_timeout:function(){var a=this,b=a.options.timeout;b&&(clearTimeout(a._timer),a._timer=setTimeout(function(){a.abort(),a.trigger(\"error\",\"timeout\")},b))}}),c.installTo(d.prototype),d}),b(\"widgets/upload\",[\"base\",\"uploader\",\"file\",\"lib/transport\",\"widgets/widget\"],function(a,b,c,d){function e(a,b){var c,d,e=[],f=a.source,g=f.size,h=b?Math.ceil(g/b):1,i=0,j=0;for(d={file:a,has:function(){return!!e.length},shift:function(){return e.shift()},unshift:function(a){e.unshift(a)}};h>j;)c=Math.min(b,g-i),e.push({file:a,start:i,end:b?i+c:g,total:g,chunks:h,chunk:j++,cuted:d}),i+=c;return a.blocks=e.concat(),a.remaning=e.length,d}var f=a.$,g=a.isPromise,h=c.Status;f.extend(b.options,{prepareNextFile:!1,chunked:!1,chunkSize:5242880,chunkRetry:2,chunkRetryDelay:1e3,threads:3,formData:{}}),b.register({name:\"upload\",init:function(){var b=this.owner,c=this;this.runing=!1,this.progress=!1,b.on(\"startUpload\",function(){c.progress=!0}).on(\"uploadFinished\",function(){c.progress=!1}),this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this.__tick=a.bindFn(this._tick,this),b.on(\"uploadComplete\",function(a){a.blocks&&f.each(a.blocks,function(a,b){b.transport&&(b.transport.abort(),b.transport.destroy()),delete b.transport}),delete a.blocks,delete a.remaning})},reset:function(){this.request(\"stop-upload\",!0),this.runing=!1,this.pool=[],this.stack=[],this.pending=[],this.remaning=0,this._trigged=!1,this._promise=null},startUpload:function(b){var c=this;if(f.each(c.request(\"get-files\",h.INVALID),function(){c.request(\"remove-file\",this)}),b?(b=b.id?b:c.request(\"get-file\",b),b.getStatus()===h.INTERRUPT?(b.setStatus(h.QUEUED),f.each(c.pool,function(a,c){c.file===b&&(c.transport&&c.transport.send(),b.setStatus(h.PROGRESS))})):b.getStatus()!==h.PROGRESS&&b.setStatus(h.QUEUED)):f.each(c.request(\"get-files\",[h.INITED]),function(){this.setStatus(h.QUEUED)}),c.runing)return c.owner.trigger(\"startUpload\",b),a.nextTick(c.__tick);c.runing=!0;var d=[];b||f.each(c.pool,function(a,b){var e=b.file;if(e.getStatus()===h.INTERRUPT){if(c._trigged=!1,d.push(e),b.waiting)return;b.transport?b.transport.send():c._doSend(b)}}),f.each(d,function(){this.setStatus(h.PROGRESS)}),b||f.each(c.request(\"get-files\",h.INTERRUPT),function(){this.setStatus(h.PROGRESS)}),c._trigged=!1,a.nextTick(c.__tick),c.owner.trigger(\"startUpload\")},stopUpload:function(b,c){var d=this;if(b===!0&&(c=b,b=null),d.runing!==!1){if(b){if(b=b.id?b:d.request(\"get-file\",b),b.getStatus()!==h.PROGRESS&&b.getStatus()!==h.QUEUED)return;return b.setStatus(h.INTERRUPT),f.each(d.pool,function(a,e){e.file===b&&(e.transport&&e.transport.abort(),c&&(d._putback(e),d._popBlock(e)))}),d.owner.trigger(\"stopUpload\",b),a.nextTick(d.__tick)}d.runing=!1,this._promise&&this._promise.file&&this._promise.file.setStatus(h.INTERRUPT),c&&f.each(d.pool,function(a,b){b.transport&&b.transport.abort(),b.file.setStatus(h.INTERRUPT)}),d.owner.trigger(\"stopUpload\")}},cancelFile:function(a){a=a.id?a:this.request(\"get-file\",a),a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),a.setStatus(h.CANCELLED),this.owner.trigger(\"fileDequeued\",a)},isInProgress:function(){return!!this.progress},_getStats:function(){return this.request(\"get-stats\")},skipFile:function(a,b){a=a.id?a:this.request(\"get-file\",a),a.setStatus(b||h.COMPLETE),a.skipped=!0,a.blocks&&f.each(a.blocks,function(a,b){var c=b.transport;c&&(c.abort(),c.destroy(),delete b.transport)}),this.owner.trigger(\"uploadSkip\",a)},_tick:function(){var b,c,d=this,e=d.options;return d._promise?d._promise.always(d.__tick):void(d.pool.length<e.threads&&(c=d._nextBlock())?(d._trigged=!1,b=function(b){d._promise=null,b&&b.file&&d._startSend(b),a.nextTick(d.__tick)},d._promise=g(c)?c.always(b):b(c)):d.remaning||d._getStats().numOfQueue||d._getStats().numOfInterrupt||(d.runing=!1,d._trigged||a.nextTick(function(){d.owner.trigger(\"uploadFinished\")}),d._trigged=!0))},_putback:function(a){var b;a.cuted.unshift(a),b=this.stack.indexOf(a.cuted),~b||(this.remaning++,a.file.remaning++,this.stack.unshift(a.cuted))},_getStack:function(){for(var a,b=0;a=this.stack[b++];){if(a.has()&&a.file.getStatus()===h.PROGRESS)return a;(!a.has()||a.file.getStatus()!==h.PROGRESS&&a.file.getStatus()!==h.INTERRUPT)&&this.stack.splice(--b,1)}return null},_nextBlock:function(){var a,b,c,d,f=this,h=f.options;return(a=this._getStack())?(h.prepareNextFile&&!f.pending.length&&f._prepareNextFile(),a.shift()):f.runing?(!f.pending.length&&f._getStats().numOfQueue&&f._prepareNextFile(),b=f.pending.shift(),c=function(b){return b?(a=e(b,h.chunked?h.chunkSize:0),f.stack.push(a),a.shift()):null},g(b)?(d=b.file,b=b[b.pipe?\"pipe\":\"then\"](c),b.file=d,b):c(b)):void 0},_prepareNextFile:function(){var a,b=this,c=b.request(\"fetch-file\"),d=b.pending;c&&(a=b.request(\"before-send-file\",c,function(){return c.getStatus()===h.PROGRESS||c.getStatus()===h.INTERRUPT?c:b._finishFile(c)}),b.owner.trigger(\"uploadStart\",c),c.setStatus(h.PROGRESS),a.file=c,a.done(function(){var b=f.inArray(a,d);~b&&d.splice(b,1,c)}),a.fail(function(a){c.setStatus(h.ERROR,a),b.owner.trigger(\"uploadError\",c,a),b.owner.trigger(\"uploadComplete\",c)}),d.push(a))},_popBlock:function(a){var b=f.inArray(a,this.pool);this.pool.splice(b,1),a.file.remaning--,this.remaning--},_startSend:function(b){var c,d=this,e=b.file;return e.getStatus()!==h.PROGRESS?void(e.getStatus()===h.INTERRUPT&&d._putback(b)):(d.pool.push(b),d.remaning++,b.blob=1===b.chunks?e.source:e.source.slice(b.start,b.end),b.waiting=c=d.request(\"before-send\",b,function(){delete b.waiting,e.getStatus()===h.PROGRESS?d._doSend(b):b.file.getStatus()!==h.INTERRUPT&&d._popBlock(b),a.nextTick(d.__tick)}),void c.fail(function(){delete b.waiting,1===e.remaning?d._finishFile(e).always(function(){b.percentage=1,d._popBlock(b),d.owner.trigger(\"uploadComplete\",e),a.nextTick(d.__tick)}):(b.percentage=1,d.updateFileProgress(e),d._popBlock(b),a.nextTick(d.__tick))}))},_doSend:function(b){var c,e,g=this,i=g.owner,j=f.extend({},g.options,b.options),k=b.file,l=new d(j),m=f.extend({},j.formData),n=f.extend({},j.headers);b.transport=l,l.on(\"destroy\",function(){delete b.transport,g._popBlock(b),a.nextTick(g.__tick)}),l.on(\"progress\",function(a){b.percentage=a,g.updateFileProgress(k)}),c=function(a){var c;return e=l.getResponseAsJson()||{},e._raw=l.getResponse(),e._headers=l.getResponseHeaders(),b.response=e,c=function(b){a=b},i.trigger(\"uploadAccept\",b,e,c)||(a=a||\"server\"),a},l.on(\"error\",function(a,d){var e,f,m=a.split(\"|\");a=m[0],e=parseFloat(m[1]),f=m[2],b.retried=b.retried||0,b.chunks>1&&~\"http,abort,server\".indexOf(a.replace(/-.*/,\"\"))&&b.retried<j.chunkRetry?(b.retried++,g.retryTimer=setTimeout(function(){l.send()},j.chunkRetryDelay||1e3)):(d||\"server\"!==a||(a=c(a)),k.setStatus(h.ERROR,a),i.trigger(\"uploadError\",k,a,e,f),i.trigger(\"uploadComplete\",k))}),l.on(\"load\",function(){var a;return(a=c())?void l.trigger(\"error\",a,!0):void(1===k.remaning?g._finishFile(k,e):l.destroy())}),m=f.extend(m,{id:k.id,name:k.name,type:k.type,lastModifiedDate:k.lastModifiedDate,size:k.size}),b.chunks>1&&f.extend(m,{chunks:b.chunks,chunk:b.chunk}),i.trigger(\"uploadBeforeSend\",b,m,n),l.appendBlob(j.fileVal,b.blob,k.name),l.append(m),l.setRequestHeader(n),l.send()},_finishFile:function(a,b,c){var d=this.owner;return d.request(\"after-send-file\",arguments,function(){a.setStatus(h.COMPLETE),d.trigger(\"uploadSuccess\",a,b,c)}).fail(function(b){a.getStatus()===h.PROGRESS&&a.setStatus(h.ERROR,b),d.trigger(\"uploadError\",a,b)}).always(function(){d.trigger(\"uploadComplete\",a)})},updateFileProgress:function(a){var b=0,c=0;a.blocks&&(f.each(a.blocks,function(a,b){c+=(b.percentage||0)*(b.end-b.start)}),b=c/a.size,this.owner.trigger(\"uploadProgress\",a,b||0))},destroy:function(){clearTimeout(this.retryTimer)}})}),b(\"widgets/validator\",[\"base\",\"uploader\",\"file\",\"widgets/widget\"],function(a,b,c){var d,e=a.$,f={};return d={addValidator:function(a,b){f[a]=b},removeValidator:function(a){delete f[a]}},b.register({name:\"validator\",init:function(){var b=this;a.nextTick(function(){e.each(f,function(){this.call(b.owner)})})}}),d.addValidator(\"fileNumLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileNumLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){return!!this.trigger(\"beforeFileQueuedCheckfileNumLimit\",a,c)&&(c>=d&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_NUM_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!(c>=d))}),a.on(\"fileQueued\",function(){c++}),a.on(\"fileDequeued\",function(){c--}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSizeLimit\",function(){var a=this,b=a.options,c=0,d=parseInt(b.fileSizeLimit,10),e=!0;d&&(a.on(\"beforeFileQueued\",function(a){var b=c+a.size>d;return b&&e&&(e=!1,this.trigger(\"error\",\"Q_EXCEED_SIZE_LIMIT\",d,a),setTimeout(function(){e=!0},1)),!b}),a.on(\"fileQueued\",function(a){c+=a.size}),a.on(\"fileDequeued\",function(a){c-=a.size}),a.on(\"reset\",function(){c=0}))}),d.addValidator(\"fileSingleSizeLimit\",function(){var a=this,b=a.options,d=b.fileSingleSizeLimit;d&&a.on(\"beforeFileQueued\",function(a){return a.size>d?(a.setStatus(c.Status.INVALID,\"exceed_size\"),this.trigger(\"error\",\"F_EXCEED_SIZE\",d,a),!1):void 0})}),d.addValidator(\"duplicate\",function(){function a(a){for(var b,c=0,d=0,e=a.length;e>d;d++)b=a.charCodeAt(d),c=b+(c<<6)+(c<<16)-c;return c}var b=this,c=b.options,d={};c.duplicate||(b.on(\"beforeFileQueued\",function(b){var c=b.__hash||(b.__hash=a(b.name+b.size+b.lastModifiedDate));return d[c]?(this.trigger(\"error\",\"F_DUPLICATE\",b),!1):void 0}),b.on(\"fileQueued\",function(a){var b=a.__hash;b&&(d[b]=!0)}),b.on(\"fileDequeued\",function(a){var b=a.__hash;b&&delete d[b]}),b.on(\"reset\",function(){d={}}))}),d}),b(\"lib/md5\",[\"runtime/client\",\"mediator\"],function(a,b){function c(){a.call(this,\"Md5\")}return b.installTo(c.prototype),c.prototype.loadFromBlob=function(a){var b=this;b.getRuid()&&b.disconnectRuntime(),b.connectRuntime(a.ruid,function(){b.exec(\"init\"),b.exec(\"loadFromBlob\",a)})},c.prototype.getResult=function(){return this.exec(\"getResult\")},c}),b(\"widgets/md5\",[\"base\",\"uploader\",\"lib/md5\",\"lib/blob\",\"widgets/widget\"],function(a,b,c,d){return b.register({name:\"md5\",md5File:function(b,e,f){var g=new c,h=a.Deferred(),i=b instanceof d?b:this.request(\"get-file\",b).source;return g.on(\"progress load\",function(a){a=a||{},h.notify(a.total?a.loaded/a.total:1)}),g.on(\"complete\",function(){h.resolve(g.getResult())}),g.on(\"error\",function(a){h.reject(a)}),arguments.length>1&&(e=e||0,f=f||0,0>e&&(e=i.size+e),0>f&&(f=i.size+f),f=Math.min(f,i.size),i=i.slice(e,f)),g.loadFromBlob(i),h.promise()}})}),b(\"runtime/compbase\",[],function(){function a(a,b){this.owner=a,this.options=a.options,this.getRuntime=function(){return b},this.getRuid=function(){return b.uid},this.trigger=function(){return a.trigger.apply(a,arguments)}}return a}),b(\"runtime/html5/runtime\",[\"base\",\"runtime/runtime\",\"runtime/compbase\"],function(b,c,d){function e(){var a={},d=this,e=this.destroy;c.apply(d,arguments),d.type=f,d.exec=function(c,e){var f,h=this,i=h.uid,j=b.slice(arguments,2);return g[c]&&(f=a[i]=a[i]||new g[c](h,d),f[e])?f[e].apply(f,j):void 0},d.destroy=function(){return e&&e.apply(this,arguments)}}var f=\"html5\",g={};return b.inherits(c,{constructor:e,init:function(){var a=this;setTimeout(function(){a.trigger(\"ready\")},1)}}),e.register=function(a,c){var e=g[a]=b.inherits(d,c);return e},a.Blob&&a.FileReader&&a.DataView&&c.addRuntime(f,e),e}),b(\"runtime/html5/blob\",[\"runtime/html5/runtime\",\"lib/blob\"],function(a,b){return a.register(\"Blob\",{slice:function(a,c){var d=this.owner.source,e=d.slice||d.webkitSlice||d.mozSlice;return d=e.call(d,a,c),new b(this.getRuid(),d)}})}),b(\"runtime/html5/dnd\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){var d=a.$,e=\"webuploader-dnd-\";return b.register(\"DragAndDrop\",{init:function(){var b=this.elem=this.options.container;this.dragEnterHandler=a.bindFn(this._dragEnterHandler,this),this.dragOverHandler=a.bindFn(this._dragOverHandler,this),this.dragLeaveHandler=a.bindFn(this._dragLeaveHandler,this),this.dropHandler=a.bindFn(this._dropHandler,this),this.dndOver=!1,b.on(\"dragenter\",this.dragEnterHandler),b.on(\"dragover\",this.dragOverHandler),b.on(\"dragleave\",this.dragLeaveHandler),b.on(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).on(\"dragover\",this.dragOverHandler),d(document).on(\"drop\",this.dropHandler))},_dragEnterHandler:function(a){var b,c=this,d=c._denied||!1;return a=a.originalEvent||a,c.dndOver||(c.dndOver=!0,b=a.dataTransfer.items,b&&b.length&&(c._denied=d=!c.trigger(\"accept\",b)),c.elem.addClass(e+\"over\"),c.elem[d?\"addClass\":\"removeClass\"](e+\"denied\")),a.dataTransfer.dropEffect=d?\"none\":\"copy\",!1},_dragOverHandler:function(a){var b=this.elem.parent().get(0);return!(b&&!d.contains(b,a.currentTarget))&&(clearTimeout(this._leaveTimer),this._dragEnterHandler.call(this,a),!1)},_dragLeaveHandler:function(){var a,b=this;return a=function(){b.dndOver=!1,b.elem.removeClass(e+\"over \"+e+\"denied\")},clearTimeout(b._leaveTimer),b._leaveTimer=setTimeout(a,100),!1},_dropHandler:function(a){var b,f,g=this,h=g.getRuid(),i=g.elem.parent().get(0);if(i&&!d.contains(i,a.currentTarget))return!1;a=a.originalEvent||a,b=a.dataTransfer;try{f=b.getData(\"text/html\")}catch(j){}return g.dndOver=!1,g.elem.removeClass(e+\"over\"),b&&!f?(g._getTansferFiles(b,function(a){g.trigger(\"drop\",d.map(a,function(a){return new c(h,a)}))}),!1):void 0},_getTansferFiles:function(b,c){var d,e,f,g,h,i,j,k=[],l=[];for(d=b.items,e=b.files,j=!(!d||!d[0].webkitGetAsEntry),h=0,i=e.length;i>h;h++)f=e[h],g=d&&d[h],j&&g.webkitGetAsEntry().isDirectory?l.push(this._traverseDirectoryTree(g.webkitGetAsEntry(),k)):k.push(f);a.when.apply(a,l).done(function(){k.length&&c(k)})},_traverseDirectoryTree:function(b,c){var d=a.Deferred(),e=this;return b.isFile?b.file(function(a){c.push(a),d.resolve()}):b.isDirectory&&b.createReader().readEntries(function(b){var f,g=b.length,h=[],i=[];for(f=0;g>f;f++)h.push(e._traverseDirectoryTree(b[f],i));a.when.apply(a,h).then(function(){c.push.apply(c,i),d.resolve()},d.reject)}),d.promise()},destroy:function(){var a=this.elem;a&&(a.off(\"dragenter\",this.dragEnterHandler),a.off(\"dragover\",this.dragOverHandler),a.off(\"dragleave\",this.dragLeaveHandler),a.off(\"drop\",this.dropHandler),this.options.disableGlobalDnd&&(d(document).off(\"dragover\",this.dragOverHandler),d(document).off(\"drop\",this.dropHandler)))}})}),b(\"runtime/html5/filepaste\",[\"base\",\"runtime/html5/runtime\",\"lib/file\"],function(a,b,c){return b.register(\"FilePaste\",{init:function(){var b,c,d,e,f=this.options,g=this.elem=f.container,h=\".*\";if(f.accept){for(b=[],c=0,d=f.accept.length;d>c;c++)e=f.accept[c].mimeTypes,e&&b.push(e);b.length&&(h=b.join(\",\"),h=h.replace(/,/g,\"|\").replace(/\\*/g,\".*\"))}this.accept=h=new RegExp(h,\"i\"),this.hander=a.bindFn(this._pasteHander,this),g.on(\"paste\",this.hander)},_pasteHander:function(a){var b,d,e,f,g,h=[],i=this.getRuid();for(a=a.originalEvent||a,b=a.clipboardData.items,f=0,g=b.length;g>f;f++)d=b[f],\"file\"===d.kind&&(e=d.getAsFile())&&h.push(new c(i,e));h.length&&(a.preventDefault(),a.stopPropagation(),this.trigger(\"paste\",h))},destroy:function(){this.elem.off(\"paste\",this.hander)}})}),b(\"runtime/html5/filepicker\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.$;return b.register(\"FilePicker\",{init:function(){var a,b,d,e,f,g=this.getRuntime().getContainer(),h=this,i=h.owner,j=h.options,k=this.label=c(document.createElement(\"label\")),l=this.input=c(document.createElement(\"input\"));if(l.attr(\"type\",\"file\"),l.attr(\"capture\",\"camera\"),l.attr(\"name\",j.name),l.addClass(\"webuploader-element-invisible\"),k.on(\"click\",function(a){l.trigger(\"click\"),a.stopPropagation(),i.trigger(\"dialogopen\")}),k.css({opacity:0,width:\"100%\",height:\"100%\",display:\"block\",cursor:\"pointer\",background:\"#ffffff\"}),j.multiple&&l.attr(\"multiple\",\"multiple\"),j.accept&&j.accept.length>0){for(a=[],b=0,d=j.accept.length;d>b;b++)a.push(j.accept[b].mimeTypes);l.attr(\"accept\",a.join(\",\"))}g.append(l),g.append(k),e=function(a){i.trigger(a.type)},f=function(a){var b;return 0!==a.target.files.length&&(h.files=a.target.files,b=this.cloneNode(!0),b.value=null,this.parentNode.replaceChild(b,this),l.off(),l=c(b).on(\"change\",f).on(\"mouseenter mouseleave\",e),void i.trigger(\"change\"))},l.on(\"change\",f),k.on(\"mouseenter mouseleave\",e)},getFiles:function(){return this.files},destroy:function(){this.input.off(),this.label.off()}})}),b(\"runtime/html5/util\",[\"base\"],function(b){var c=a.createObjectURL&&a||a.URL&&URL.revokeObjectURL&&URL||a.webkitURL,d=b.noop,e=d;return c&&(d=function(){return c.createObjectURL.apply(c,arguments)},e=function(){return c.revokeObjectURL.apply(c,arguments)}),{createObjectURL:d,revokeObjectURL:e,dataURL2Blob:function(a){var b,c,d,e,f,g;for(g=a.split(\",\"),b=~g[0].indexOf(\"base64\")?atob(g[1]):decodeURIComponent(g[1]),d=new ArrayBuffer(b.length),c=new Uint8Array(d),e=0;e<b.length;e++)c[e]=b.charCodeAt(e);return f=g[0].split(\":\")[1].split(\";\")[0],this.arrayBufferToBlob(d,f)},dataURL2ArrayBuffer:function(a){var b,c,d,e;for(e=a.split(\",\"),b=~e[0].indexOf(\"base64\")?atob(e[1]):decodeURIComponent(e[1]),c=new Uint8Array(b.length),d=0;d<b.length;d++)c[d]=b.charCodeAt(d);return c.buffer},arrayBufferToBlob:function(b,c){var d,e=a.BlobBuilder||a.WebKitBlobBuilder;return e?(d=new e,d.append(b),d.getBlob(c)):new Blob([b],c?{type:c}:{})},canvasToDataUrl:function(a,b,c){return a.toDataURL(b,c/100)},parseMeta:function(a,b){b(!1,{})},updateImageHead:function(a){return a;\n}}}),b(\"runtime/html5/imagemeta\",[\"runtime/html5/util\"],function(a){var b;return b={parsers:{65505:[]},maxMetaDataSize:262144,parse:function(a,b){var c=this,d=new FileReader;d.onload=function(){b(!1,c._parse(this.result)),d=d.onload=d.onerror=null},d.onerror=function(a){b(a.message),d=d.onload=d.onerror=null},a=a.slice(0,c.maxMetaDataSize),d.readAsArrayBuffer(a.getSource())},_parse:function(a,c){if(!(a.byteLength<6)){var d,e,f,g,h=new DataView(a),i=2,j=h.byteLength-4,k=i,l={};if(65496===h.getUint16(0)){for(;j>i&&(d=h.getUint16(i),d>=65504&&65519>=d||65534===d)&&(e=h.getUint16(i+2)+2,!(i+e>h.byteLength));){if(f=b.parsers[d],!c&&f)for(g=0;g<f.length;g+=1)f[g].call(b,h,i,e,l);i+=e,k=i}k>6&&(l.imageHead=a.slice?a.slice(2,k):new Uint8Array(a).subarray(2,k))}return l}},updateImageHead:function(a,b){var c,d,e,f=this._parse(a,!0);return e=2,f.imageHead&&(e=2+f.imageHead.byteLength),d=a.slice?a.slice(e):new Uint8Array(a).subarray(e),c=new Uint8Array(b.byteLength+2+d.byteLength),c[0]=255,c[1]=216,c.set(new Uint8Array(b),2),c.set(new Uint8Array(d),b.byteLength+2),c.buffer}},a.parseMeta=function(){return b.parse.apply(b,arguments)},a.updateImageHead=function(){return b.updateImageHead.apply(b,arguments)},b}),b(\"runtime/html5/imagemeta/exif\",[\"base\",\"runtime/html5/imagemeta\"],function(a,b){var c={};return c.ExifMap=function(){return this},c.ExifMap.prototype.map={Orientation:274},c.ExifMap.prototype.get=function(a){return this[a]||this[this.map[a]]},c.exifTagTypes={1:{getValue:function(a,b){return a.getUint8(b)},size:1},2:{getValue:function(a,b){return String.fromCharCode(a.getUint8(b))},size:1,ascii:!0},3:{getValue:function(a,b,c){return a.getUint16(b,c)},size:2},4:{getValue:function(a,b,c){return a.getUint32(b,c)},size:4},5:{getValue:function(a,b,c){return a.getUint32(b,c)/a.getUint32(b+4,c)},size:8},9:{getValue:function(a,b,c){return a.getInt32(b,c)},size:4},10:{getValue:function(a,b,c){return a.getInt32(b,c)/a.getInt32(b+4,c)},size:8}},c.exifTagTypes[7]=c.exifTagTypes[1],c.getExifValue=function(b,d,e,f,g,h){var i,j,k,l,m,n,o=c.exifTagTypes[f];if(!o)return void a.log(\"Invalid Exif data: Invalid tag type.\");if(i=o.size*g,j=i>4?d+b.getUint32(e+8,h):e+8,j+i>b.byteLength)return void a.log(\"Invalid Exif data: Invalid data offset.\");if(1===g)return o.getValue(b,j,h);for(k=[],l=0;g>l;l+=1)k[l]=o.getValue(b,j+l*o.size,h);if(o.ascii){for(m=\"\",l=0;l<k.length&&(n=k[l],\"\\0\"!==n);l+=1)m+=n;return m}return k},c.parseExifTag=function(a,b,d,e,f){var g=a.getUint16(d,e);f.exif[g]=c.getExifValue(a,b,d,a.getUint16(d+2,e),a.getUint32(d+4,e),e)},c.parseExifTags=function(b,c,d,e,f){var g,h,i;if(d+6>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory offset.\");if(g=b.getUint16(d,e),h=d+2+12*g,h+4>b.byteLength)return void a.log(\"Invalid Exif data: Invalid directory size.\");for(i=0;g>i;i+=1)this.parseExifTag(b,c,d+2+12*i,e,f);return b.getUint32(h,e)},c.parseExifData=function(b,d,e,f){var g,h,i=d+10;if(1165519206===b.getUint32(d+4)){if(i+8>b.byteLength)return void a.log(\"Invalid Exif data: Invalid segment size.\");if(0!==b.getUint16(d+8))return void a.log(\"Invalid Exif data: Missing byte alignment offset.\");switch(b.getUint16(i)){case 18761:g=!0;break;case 19789:g=!1;break;default:return void a.log(\"Invalid Exif data: Invalid byte alignment marker.\")}if(42!==b.getUint16(i+2,g))return void a.log(\"Invalid Exif data: Missing TIFF marker.\");h=b.getUint32(i+4,g),f.exif=new c.ExifMap,h=c.parseExifTags(b,i,i+h,g,f)}},b.parsers[65505].push(c.parseExifData),c}),b(\"runtime/html5/jpegencoder\",[],function(){function a(a){function b(a){for(var b=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],c=0;64>c;c++){var d=y((b[c]*a+50)/100);1>d?d=1:d>255&&(d=255),z[P[c]]=d}for(var e=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],f=0;64>f;f++){var g=y((e[f]*a+50)/100);1>g?g=1:g>255&&(g=255),A[P[f]]=g}for(var h=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],i=0,j=0;8>j;j++)for(var k=0;8>k;k++)B[i]=1/(8*z[P[i]]*h[j]*h[k]),C[i]=1/(8*A[P[i]]*h[j]*h[k]),i++}function c(a,b){for(var c=0,d=0,e=new Array,f=1;16>=f;f++){for(var g=1;g<=a[f];g++)e[b[d]]=[],e[b[d]][0]=c,e[b[d]][1]=f,d++,c++;c*=2}return e}function d(){t=c(Q,R),u=c(U,V),v=c(S,T),w=c(W,X)}function e(){for(var a=1,b=2,c=1;15>=c;c++){for(var d=a;b>d;d++)E[32767+d]=c,D[32767+d]=[],D[32767+d][1]=c,D[32767+d][0]=d;for(var e=-(b-1);-a>=e;e++)E[32767+e]=c,D[32767+e]=[],D[32767+e][1]=c,D[32767+e][0]=b-1+e;a<<=1,b<<=1}}function f(){for(var a=0;256>a;a++)O[a]=19595*a,O[a+256>>0]=38470*a,O[a+512>>0]=7471*a+32768,O[a+768>>0]=-11059*a,O[a+1024>>0]=-21709*a,O[a+1280>>0]=32768*a+8421375,O[a+1536>>0]=-27439*a,O[a+1792>>0]=-5329*a}function g(a){for(var b=a[0],c=a[1]-1;c>=0;)b&1<<c&&(I|=1<<J),c--,J--,0>J&&(255==I?(h(255),h(0)):h(I),J=7,I=0)}function h(a){H.push(N[a])}function i(a){h(255&a>>8),h(255&a)}function j(a,b){var c,d,e,f,g,h,i,j,k,l=0,m=8,n=64;for(k=0;m>k;++k){c=a[l],d=a[l+1],e=a[l+2],f=a[l+3],g=a[l+4],h=a[l+5],i=a[l+6],j=a[l+7];var o=c+j,p=c-j,q=d+i,r=d-i,s=e+h,t=e-h,u=f+g,v=f-g,w=o+u,x=o-u,y=q+s,z=q-s;a[l]=w+y,a[l+4]=w-y;var A=.707106781*(z+x);a[l+2]=x+A,a[l+6]=x-A,w=v+t,y=t+r,z=r+p;var B=.382683433*(w-z),C=.5411961*w+B,D=1.306562965*z+B,E=.707106781*y,G=p+E,H=p-E;a[l+5]=H+C,a[l+3]=H-C,a[l+1]=G+D,a[l+7]=G-D,l+=8}for(l=0,k=0;m>k;++k){c=a[l],d=a[l+8],e=a[l+16],f=a[l+24],g=a[l+32],h=a[l+40],i=a[l+48],j=a[l+56];var I=c+j,J=c-j,K=d+i,L=d-i,M=e+h,N=e-h,O=f+g,P=f-g,Q=I+O,R=I-O,S=K+M,T=K-M;a[l]=Q+S,a[l+32]=Q-S;var U=.707106781*(T+R);a[l+16]=R+U,a[l+48]=R-U,Q=P+N,S=N+L,T=L+J;var V=.382683433*(Q-T),W=.5411961*Q+V,X=1.306562965*T+V,Y=.707106781*S,Z=J+Y,$=J-Y;a[l+40]=$+W,a[l+24]=$-W,a[l+8]=Z+X,a[l+56]=Z-X,l++}var _;for(k=0;n>k;++k)_=a[k]*b[k],F[k]=_>0?0|_+.5:0|_-.5;return F}function k(){i(65504),i(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),i(1),i(1),h(0),h(0)}function l(a,b){i(65472),i(17),h(8),i(b),i(a),h(3),h(1),h(17),h(0),h(2),h(17),h(1),h(3),h(17),h(1)}function m(){i(65499),i(132),h(0);for(var a=0;64>a;a++)h(z[a]);h(1);for(var b=0;64>b;b++)h(A[b])}function n(){i(65476),i(418),h(0);for(var a=0;16>a;a++)h(Q[a+1]);for(var b=0;11>=b;b++)h(R[b]);h(16);for(var c=0;16>c;c++)h(S[c+1]);for(var d=0;161>=d;d++)h(T[d]);h(1);for(var e=0;16>e;e++)h(U[e+1]);for(var f=0;11>=f;f++)h(V[f]);h(17);for(var g=0;16>g;g++)h(W[g+1]);for(var j=0;161>=j;j++)h(X[j])}function o(){i(65498),i(12),h(3),h(1),h(0),h(2),h(17),h(3),h(17),h(0),h(63),h(0)}function p(a,b,c,d,e){for(var f,h=e[0],i=e[240],k=16,l=63,m=64,n=j(a,b),o=0;m>o;++o)G[P[o]]=n[o];var p=G[0]-c;c=G[0],0==p?g(d[0]):(f=32767+p,g(d[E[f]]),g(D[f]));for(var q=63;q>0&&0==G[q];q--);if(0==q)return g(h),c;for(var r,s=1;q>=s;){for(var t=s;0==G[s]&&q>=s;++s);var u=s-t;if(u>=k){r=u>>4;for(var v=1;r>=v;++v)g(i);u=15&u}f=32767+G[s],g(e[(u<<4)+E[f]]),g(D[f]),s++}return q!=l&&g(h),c}function q(){for(var a=String.fromCharCode,b=0;256>b;b++)N[b]=a(b)}function r(a){if(0>=a&&(a=1),a>100&&(a=100),x!=a){var c=0;c=50>a?Math.floor(5e3/a):Math.floor(200-2*a),b(c),x=a}}function s(){a||(a=50),q(),d(),e(),f(),r(a)}Math.round;var t,u,v,w,x,y=Math.floor,z=new Array(64),A=new Array(64),B=new Array(64),C=new Array(64),D=new Array(65535),E=new Array(65535),F=new Array(64),G=new Array(64),H=[],I=0,J=7,K=new Array(64),L=new Array(64),M=new Array(64),N=new Array(256),O=new Array(2048),P=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Q=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],R=[0,1,2,3,4,5,6,7,8,9,10,11],S=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],T=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],U=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],V=[0,1,2,3,4,5,6,7,8,9,10,11],W=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],X=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(a,b){b&&r(b),H=new Array,I=0,J=7,i(65496),k(),m(),l(a.width,a.height),n(),o();var c=0,d=0,e=0;I=0,J=7,this.encode.displayName=\"_encode_\";for(var f,h,j,q,s,x,y,z,A,D=a.data,E=a.width,F=a.height,G=4*E,N=0;F>N;){for(f=0;G>f;){for(s=G*N+f,x=s,y=-1,z=0,A=0;64>A;A++)z=A>>3,y=4*(7&A),x=s+z*G+y,N+z>=F&&(x-=G*(N+1+z-F)),f+y>=G&&(x-=f+y-G+4),h=D[x++],j=D[x++],q=D[x++],K[A]=(O[h]+O[j+256>>0]+O[q+512>>0]>>16)-128,L[A]=(O[h+768>>0]+O[j+1024>>0]+O[q+1280>>0]>>16)-128,M[A]=(O[h+1280>>0]+O[j+1536>>0]+O[q+1792>>0]>>16)-128;c=p(K,B,c,t,v),d=p(L,C,d,u,w),e=p(M,C,e,u,w),f+=32}N+=8}if(J>=0){var P=[];P[1]=J+1,P[0]=(1<<J+1)-1,g(P)}i(65497);var Q=\"data:image/jpeg;base64,\"+btoa(H.join(\"\"));return H=[],Q},s()}return a.encode=function(b,c){var d=new a(c);return d.encode(b)},a}),b(\"runtime/html5/androidpatch\",[\"runtime/html5/util\",\"runtime/html5/jpegencoder\",\"base\"],function(a,b,c){var d,e=a.canvasToDataUrl;a.canvasToDataUrl=function(a,f,g){var h,i,j,k,l;return c.os.android?(\"image/jpeg\"===f&&\"undefined\"==typeof d&&(k=e.apply(null,arguments),l=k.split(\",\"),k=~l[0].indexOf(\"base64\")?atob(l[1]):decodeURIComponent(l[1]),k=k.substring(0,2),d=255===k.charCodeAt(0)&&216===k.charCodeAt(1)),\"image/jpeg\"!==f||d?e.apply(null,arguments):(i=a.width,j=a.height,h=a.getContext(\"2d\"),b.encode(h.getImageData(0,0,i,j),g))):e.apply(null,arguments)}}),b(\"runtime/html5/image\",[\"base\",\"runtime/html5/runtime\",\"runtime/html5/util\"],function(a,b,c){var d=\"data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D\";return b.register(\"Image\",{modified:!1,init:function(){var a=this,b=new Image;b.onload=function(){a._info={type:a.type,width:this.width,height:this.height},a._metas||\"image/jpeg\"!==a.type?a.owner.trigger(\"load\"):c.parseMeta(a._blob,function(b,c){a._metas=c,a.owner.trigger(\"load\")})},b.onerror=function(){a.owner.trigger(\"error\")},a._img=b},loadFromBlob:function(a){var b=this,d=b._img;b._blob=a,b.type=a.type,d.src=c.createObjectURL(a.getSource()),b.owner.once(\"load\",function(){c.revokeObjectURL(d.src)})},resize:function(a,b){var c=this._canvas||(this._canvas=document.createElement(\"canvas\"));this._resize(this._img,c,a,b),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"resize\")},crop:function(a,b,c,d,e){var f=this._canvas||(this._canvas=document.createElement(\"canvas\")),g=this.options,h=this._img,i=h.naturalWidth,j=h.naturalHeight,k=this.getOrientation();e=e||1,f.width=c,f.height=d,g.preserveHeaders||this._rotate2Orientaion(f,k),this._renderImageToCanvas(f,h,-a,-b,i*e,j*e),this._blob=null,this.modified=!0,this.owner.trigger(\"complete\",\"crop\")},getAsBlob:function(a){var b,d=this._blob,e=this.options;if(a=a||this.type,this.modified||this.type!==a){if(b=this._canvas,\"image/jpeg\"===a){if(d=c.canvasToDataUrl(b,a,e.quality),e.preserveHeaders&&this._metas&&this._metas.imageHead)return d=c.dataURL2ArrayBuffer(d),d=c.updateImageHead(d,this._metas.imageHead),d=c.arrayBufferToBlob(d,a)}else d=c.canvasToDataUrl(b,a);d=c.dataURL2Blob(d)}return d},getAsDataUrl:function(a){var b=this.options;return a=a||this.type,\"image/jpeg\"===a?c.canvasToDataUrl(this._canvas,a,b.quality):this._canvas.toDataURL(a)},getOrientation:function(){return this._metas&&this._metas.exif&&this._metas.exif.get(\"Orientation\")||1},info:function(a){return a?(this._info=a,this):this._info},meta:function(a){return a?(this._metas=a,this):this._metas},destroy:function(){var a=this._canvas;this._img.onload=null,a&&(a.getContext(\"2d\").clearRect(0,0,a.width,a.height),a.width=a.height=0,this._canvas=null),this._img.src=d,this._img=this._blob=null},_resize:function(a,b,c,d){var e,f,g,h,i,j=this.options,k=a.width,l=a.height,m=this.getOrientation();~[5,6,7,8].indexOf(m)&&(c^=d,d^=c,c^=d),e=Math[j.crop?\"max\":\"min\"](c/k,d/l),j.allowMagnify||(e=Math.min(1,e)),f=k*e,g=l*e,j.crop?(b.width=c,b.height=d):(b.width=f,b.height=g),h=(b.width-f)/2,i=(b.height-g)/2,j.preserveHeaders||this._rotate2Orientaion(b,m),this._renderImageToCanvas(b,a,h,i,f,g)},_rotate2Orientaion:function(a,b){var c=a.width,d=a.height,e=a.getContext(\"2d\");switch(b){case 5:case 6:case 7:case 8:a.width=d,a.height=c}switch(b){case 2:e.translate(c,0),e.scale(-1,1);break;case 3:e.translate(c,d),e.rotate(Math.PI);break;case 4:e.translate(0,d),e.scale(1,-1);break;case 5:e.rotate(.5*Math.PI),e.scale(1,-1);break;case 6:e.rotate(.5*Math.PI),e.translate(0,-d);break;case 7:e.rotate(.5*Math.PI),e.translate(c,-d),e.scale(-1,1);break;case 8:e.rotate(-.5*Math.PI),e.translate(-c,0)}},_renderImageToCanvas:function(){function b(a,b,c){var d,e,f,g=document.createElement(\"canvas\"),h=g.getContext(\"2d\"),i=0,j=c,k=c;for(g.width=1,g.height=c,h.drawImage(a,0,0),d=h.getImageData(0,0,1,c).data;k>i;)e=d[4*(k-1)+3],0===e?j=k:i=k,k=j+i>>1;return f=k/c,0===f?1:f}function c(a){var b,c,d=a.naturalWidth,e=a.naturalHeight;return d*e>1048576&&(b=document.createElement(\"canvas\"),b.width=b.height=1,c=b.getContext(\"2d\"),c.drawImage(a,-d+1,0),0===c.getImageData(0,0,1,1).data[3])}return a.os.ios?a.os.ios>=7?function(a,c,d,e,f,g){var h=c.naturalWidth,i=c.naturalHeight,j=b(c,h,i);return a.getContext(\"2d\").drawImage(c,0,0,h*j,i*j,d,e,f,g)}:function(a,d,e,f,g,h){var i,j,k,l,m,n,o,p=d.naturalWidth,q=d.naturalHeight,r=a.getContext(\"2d\"),s=c(d),t=\"image/jpeg\"===this.type,u=1024,v=0,w=0;for(s&&(p/=2,q/=2),r.save(),i=document.createElement(\"canvas\"),i.width=i.height=u,j=i.getContext(\"2d\"),k=t?b(d,p,q):1,l=Math.ceil(u*g/p),m=Math.ceil(u*h/q/k);q>v;){for(n=0,o=0;p>n;)j.clearRect(0,0,u,u),j.drawImage(d,-n,-v),r.drawImage(i,0,0,u,u,e+o,f+w,l,m),n+=u,o+=l;v+=u,w+=m}r.restore(),i=j=null}:function(b){var c=a.slice(arguments,1),d=b.getContext(\"2d\");d.drawImage.apply(d,c)}}()})}),b(\"runtime/html5/transport\",[\"base\",\"runtime/html5/runtime\"],function(a,b){var c=a.noop,d=a.$;return b.register(\"Transport\",{init:function(){this._status=0,this._response=null},send:function(){var b,c,e,f=this.owner,g=this.options,h=this._initAjax(),i=f._blob,j=g.server;g.sendAsBinary?(j+=g.attachInfoToQuery!==!1?(/\\?/.test(j)?\"&\":\"?\")+d.param(f._formData):\"\",c=i.getSource()):(b=new FormData,d.each(f._formData,function(a,c){b.append(a,c)}),b.append(g.fileVal,i.getSource(),g.filename||f._formData.name||\"\")),g.withCredentials&&\"withCredentials\"in h?(h.open(g.method,j,!0),h.withCredentials=!0):h.open(g.method,j),this._setRequestHeader(h,g.headers),c?(h.overrideMimeType&&h.overrideMimeType(\"application/octet-stream\"),a.os.android?(e=new FileReader,e.onload=function(){h.send(this.result),e=e.onload=null},e.readAsArrayBuffer(c)):h.send(c)):h.send(b)},getResponse:function(){return this._response},getResponseAsJson:function(){return this._parseJson(this._response)},getResponseHeaders:function(){return this._headers},getStatus:function(){return this._status},abort:function(){var a=this._xhr;a&&(a.upload.onprogress=c,a.onreadystatechange=c,a.abort(),this._xhr=a=null)},destroy:function(){this.abort()},_parseHeader:function(a){var b={};return a&&a.replace(/^([^\\:]+):(.*)$/gm,function(a,c,d){b[c.trim()]=d.trim()}),b},_initAjax:function(){var a=this,b=new XMLHttpRequest,d=this.options;return!d.withCredentials||\"withCredentials\"in b||\"undefined\"==typeof XDomainRequest||(b=new XDomainRequest),b.upload.onprogress=function(b){var c=0;return b.lengthComputable&&(c=b.loaded/b.total),a.trigger(\"progress\",c)},b.onreadystatechange=function(){if(4===b.readyState){b.upload.onprogress=c,b.onreadystatechange=c,a._xhr=null,a._status=b.status;var d=\"|\",e=d+b.status+d+b.statusText;return b.status>=200&&b.status<300?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"load\")):b.status>=500&&b.status<600?(a._response=b.responseText,a._headers=a._parseHeader(b.getAllResponseHeaders()),a.trigger(\"error\",\"server\"+e)):a.trigger(\"error\",a._status?\"http\"+e:\"abort\")}},a._xhr=b,b},_setRequestHeader:function(a,b){d.each(b,function(b,c){a.setRequestHeader(b,c)})},_parseJson:function(a){var b;try{b=JSON.parse(a)}catch(c){b={}}return b}})}),b(\"runtime/html5/md5\",[\"runtime/html5/runtime\"],function(a){var b=function(a,b){return 4294967295&a+b},c=function(a,c,d,e,f,g){return c=b(b(c,a),b(e,g)),b(c<<f|c>>>32-f,d)},d=function(a,b,d,e,f,g,h){return c(b&d|~b&e,a,b,f,g,h)},e=function(a,b,d,e,f,g,h){return c(b&e|d&~e,a,b,f,g,h)},f=function(a,b,d,e,f,g,h){return c(b^d^e,a,b,f,g,h)},g=function(a,b,d,e,f,g,h){return c(d^(b|~e),a,b,f,g,h)},h=function(a,c){var h=a[0],i=a[1],j=a[2],k=a[3];h=d(h,i,j,k,c[0],7,-680876936),k=d(k,h,i,j,c[1],12,-389564586),j=d(j,k,h,i,c[2],17,606105819),i=d(i,j,k,h,c[3],22,-1044525330),h=d(h,i,j,k,c[4],7,-176418897),k=d(k,h,i,j,c[5],12,1200080426),j=d(j,k,h,i,c[6],17,-1473231341),i=d(i,j,k,h,c[7],22,-45705983),h=d(h,i,j,k,c[8],7,1770035416),k=d(k,h,i,j,c[9],12,-1958414417),j=d(j,k,h,i,c[10],17,-42063),i=d(i,j,k,h,c[11],22,-1990404162),h=d(h,i,j,k,c[12],7,1804603682),k=d(k,h,i,j,c[13],12,-40341101),j=d(j,k,h,i,c[14],17,-1502002290),i=d(i,j,k,h,c[15],22,1236535329),h=e(h,i,j,k,c[1],5,-165796510),k=e(k,h,i,j,c[6],9,-1069501632),j=e(j,k,h,i,c[11],14,643717713),i=e(i,j,k,h,c[0],20,-373897302),h=e(h,i,j,k,c[5],5,-701558691),k=e(k,h,i,j,c[10],9,38016083),j=e(j,k,h,i,c[15],14,-660478335),i=e(i,j,k,h,c[4],20,-405537848),h=e(h,i,j,k,c[9],5,568446438),k=e(k,h,i,j,c[14],9,-1019803690),j=e(j,k,h,i,c[3],14,-187363961),i=e(i,j,k,h,c[8],20,1163531501),h=e(h,i,j,k,c[13],5,-1444681467),k=e(k,h,i,j,c[2],9,-51403784),j=e(j,k,h,i,c[7],14,1735328473),i=e(i,j,k,h,c[12],20,-1926607734),h=f(h,i,j,k,c[5],4,-378558),k=f(k,h,i,j,c[8],11,-2022574463),j=f(j,k,h,i,c[11],16,1839030562),i=f(i,j,k,h,c[14],23,-35309556),h=f(h,i,j,k,c[1],4,-1530992060),k=f(k,h,i,j,c[4],11,1272893353),j=f(j,k,h,i,c[7],16,-155497632),i=f(i,j,k,h,c[10],23,-1094730640),h=f(h,i,j,k,c[13],4,681279174),k=f(k,h,i,j,c[0],11,-358537222),j=f(j,k,h,i,c[3],16,-722521979),i=f(i,j,k,h,c[6],23,76029189),h=f(h,i,j,k,c[9],4,-640364487),k=f(k,h,i,j,c[12],11,-421815835),j=f(j,k,h,i,c[15],16,530742520),i=f(i,j,k,h,c[2],23,-995338651),h=g(h,i,j,k,c[0],6,-198630844),k=g(k,h,i,j,c[7],10,1126891415),j=g(j,k,h,i,c[14],15,-1416354905),i=g(i,j,k,h,c[5],21,-57434055),h=g(h,i,j,k,c[12],6,1700485571),k=g(k,h,i,j,c[3],10,-1894986606),j=g(j,k,h,i,c[10],15,-1051523),i=g(i,j,k,h,c[1],21,-2054922799),h=g(h,i,j,k,c[8],6,1873313359),k=g(k,h,i,j,c[15],10,-30611744),j=g(j,k,h,i,c[6],15,-1560198380),i=g(i,j,k,h,c[13],21,1309151649),h=g(h,i,j,k,c[4],6,-145523070),k=g(k,h,i,j,c[11],10,-1120210379),j=g(j,k,h,i,c[2],15,718787259),i=g(i,j,k,h,c[9],21,-343485551),a[0]=b(h,a[0]),a[1]=b(i,a[1]),a[2]=b(j,a[2]),a[3]=b(k,a[3])},i=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a.charCodeAt(b)+(a.charCodeAt(b+1)<<8)+(a.charCodeAt(b+2)<<16)+(a.charCodeAt(b+3)<<24);return c},j=function(a){var b,c=[];for(b=0;64>b;b+=4)c[b>>2]=a[b]+(a[b+1]<<8)+(a[b+2]<<16)+(a[b+3]<<24);return c},k=function(a){var b,c,d,e,f,g,j=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;j>=b;b+=64)h(k,i(a.substring(b-64,b)));for(a=a.substring(b-64),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a.charCodeAt(b)<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*j,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},l=function(a){var b,c,d,e,f,g,i=a.length,k=[1732584193,-271733879,-1732584194,271733878];for(b=64;i>=b;b+=64)h(k,j(a.subarray(b-64,b)));for(a=i>b-64?a.subarray(b-64):new Uint8Array(0),c=a.length,d=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],b=0;c>b;b+=1)d[b>>2]|=a[b]<<(b%4<<3);if(d[b>>2]|=128<<(b%4<<3),b>55)for(h(k,d),b=0;16>b;b+=1)d[b]=0;return e=8*i,e=e.toString(16).match(/(.*?)(.{0,8})$/),f=parseInt(e[2],16),g=parseInt(e[1],16)||0,d[14]=f,d[15]=g,h(k,d),k},m=[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"a\",\"b\",\"c\",\"d\",\"e\",\"f\"],n=function(a){var b,c=\"\";for(b=0;4>b;b+=1)c+=m[15&a>>8*b+4]+m[15&a>>8*b];return c},o=function(a){var b;for(b=0;b<a.length;b+=1)a[b]=n(a[b]);return a.join(\"\")},p=function(a){return o(k(a))},q=function(){this.reset()};return\"5d41402abc4b2a76b9719d911017c592\"!==p(\"hello\")&&(b=function(a,b){var c=(65535&a)+(65535&b),d=(a>>16)+(b>>16)+(c>>16);return d<<16|65535&c}),q.prototype.append=function(a){return/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a))),this.appendBinary(a),this},q.prototype.appendBinary=function(a){this._buff+=a,this._length+=a.length;var b,c=this._buff.length;for(b=64;c>=b;b+=64)h(this._state,i(this._buff.substring(b-64,b)));return this._buff=this._buff.substr(b-64),this},q.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d.charCodeAt(b)<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.prototype._finish=function(a,b){var c,d,e,f=b;if(a[f>>2]|=128<<(f%4<<3),f>55)for(h(this._state,a),f=0;16>f;f+=1)a[f]=0;c=8*this._length,c=c.toString(16).match(/(.*?)(.{0,8})$/),d=parseInt(c[2],16),e=parseInt(c[1],16)||0,a[14]=d,a[15]=e,h(this._state,a)},q.prototype.reset=function(){return this._buff=\"\",this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.prototype.destroy=function(){delete this._state,delete this._buff,delete this._length},q.hash=function(a,b){/[\\u0080-\\uFFFF]/.test(a)&&(a=unescape(encodeURIComponent(a)));var c=k(a);return b?c:o(c)},q.hashBinary=function(a,b){var c=k(a);return b?c:o(c)},q.ArrayBuffer=function(){this.reset()},q.ArrayBuffer.prototype.append=function(a){var b,c=this._concatArrayBuffer(this._buff,a),d=c.length;for(this._length+=a.byteLength,b=64;d>=b;b+=64)h(this._state,j(c.subarray(b-64,b)));return this._buff=d>b-64?c.subarray(b-64):new Uint8Array(0),this},q.ArrayBuffer.prototype.end=function(a){var b,c,d=this._buff,e=d.length,f=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(b=0;e>b;b+=1)f[b>>2]|=d[b]<<(b%4<<3);return this._finish(f,e),c=a?this._state:o(this._state),this.reset(),c},q.ArrayBuffer.prototype._finish=q.prototype._finish,q.ArrayBuffer.prototype.reset=function(){return this._buff=new Uint8Array(0),this._length=0,this._state=[1732584193,-271733879,-1732584194,271733878],this},q.ArrayBuffer.prototype.destroy=q.prototype.destroy,q.ArrayBuffer.prototype._concatArrayBuffer=function(a,b){var c=a.length,d=new Uint8Array(c+b.byteLength);return d.set(a),d.set(new Uint8Array(b),c),d},q.ArrayBuffer.hash=function(a,b){var c=l(new Uint8Array(a));return b?c:o(c)},a.register(\"Md5\",{init:function(){},loadFromBlob:function(a){var b,c,d=a.getSource(),e=2097152,f=Math.ceil(d.size/e),g=0,h=this.owner,i=new q.ArrayBuffer,j=this,k=d.mozSlice||d.webkitSlice||d.slice;c=new FileReader,(b=function(){var l,m;l=g*e,m=Math.min(l+e,d.size),c.onload=function(b){i.append(b.target.result),h.trigger(\"progress\",{total:a.size,loaded:m})},c.onloadend=function(){c.onloadend=c.onload=null,++g<f?setTimeout(b,1):setTimeout(function(){h.trigger(\"load\"),j.result=i.end(),b=a=d=i=null,h.trigger(\"complete\")},50)},c.readAsArrayBuffer(k.call(d,l,m))})()},getResult:function(){return this.result}})}),b(\"preset/all\",[\"base\",\"widgets/filednd\",\"widgets/filepaste\",\"widgets/filepicker\",\"widgets/image\",\"widgets/queue\",\"widgets/runtime\",\"widgets/upload\",\"widgets/validator\",\"widgets/md5\",\"runtime/html5/blob\",\"runtime/html5/dnd\",\"runtime/html5/filepaste\",\"runtime/html5/filepicker\",\"runtime/html5/imagemeta/exif\",\"runtime/html5/androidpatch\",\"runtime/html5/image\",\"runtime/html5/transport\",\"runtime/html5/md5\"],function(a){return a}),b(\"widgets/log\",[\"base\",\"uploader\",\"widgets/widget\"],function(a,b){function c(a){var b=e.extend({},d,a),c=f.replace(/^(.*)\\?/,\"$1\"+e.param(b)),g=new Image;g.src=c}var d,e=a.$,f=\" http://static.tieba.baidu.com/tb/pms/img/st.gif??\",g=(location.hostname||location.host||\"protected\").toLowerCase(),h=g&&/baidu/i.exec(g);if(h)return d={dv:3,master:\"webuploader\",online:/test/.exec(g)?0:1,module:\"\",product:g,type:0},b.register({name:\"log\",init:function(){var a=this.owner,b=0,d=0;a.on(\"error\",function(a){c({type:2,c_error_code:a})}).on(\"uploadError\",function(a,b){c({type:2,c_error_code:\"UPLOAD_ERROR\",c_reason:\"\"+b})}).on(\"uploadComplete\",function(a){b++,d+=a.size}).on(\"uploadFinished\",function(){c({c_count:b,c_size:d}),b=d=0}),c({c_usage:1})}})}),b(\"webuploader\",[\"preset/all\",\"widgets/log\"],function(a){return a}),c(\"webuploader\")});"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/ueditor.all.js",
    "content": "(function(){UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var baidu=window.baidu||{};window.baidu=baidu;window.UE=baidu.editor={plugins:{},commands:{},instants:{},I18N:{},_customizeUI:{},version:\"3.9.0-beta\",constants:{STATEFUL:{DISABLED:-1,OFF:0,ON:1}}};var dom=UE.dom={};var browser=UE.browser=function(){var agent=navigator.userAgent.toLowerCase(),opera=window.opera,browser={ie:/(msie\\s|trident.*rv:)([\\w.]+)/i.test(agent),opera:!!opera&&opera.version,webkit:agent.indexOf(\" applewebkit/\")>-1,mac:agent.indexOf(\"macintosh\")>-1,quirks:document.compatMode==\"BackCompat\"};browser.gecko=navigator.product==\"Gecko\"&&!browser.webkit&&!browser.opera&&!browser.ie;var version=0;if(browser.ie){var v1=agent.match(/(?:msie\\s([\\w.]+))/);var v2=agent.match(/(?:trident.*rv:([\\w.]+))/);if(v1&&v2&&v1[1]&&v2[1]){version=Math.max(v1[1]*1,v2[1]*1)}else if(v1&&v1[1]){version=v1[1]*1}else if(v2&&v2[1]){version=v2[1]*1}else{version=0}browser.ie11Compat=document.documentMode==11;browser.ie9Compat=document.documentMode==9;browser.ie8=!!document.documentMode;browser.ie8Compat=document.documentMode==8;browser.ie7Compat=version==7&&!document.documentMode||document.documentMode==7;browser.ie6Compat=version<7||browser.quirks;browser.ie9above=version>8;browser.ie9below=version<9;browser.ie11above=version>10;browser.ie11below=version<11}if(browser.gecko){var geckoRelease=agent.match(/rv:([\\d\\.]+)/);if(geckoRelease){geckoRelease=geckoRelease[1].split(\".\");version=geckoRelease[0]*1e4+(geckoRelease[1]||0)*100+(geckoRelease[2]||0)*1}}if(/chrome\\/(\\d+\\.\\d)/i.test(agent)){browser.chrome=+RegExp[\"$1\"]}if(/(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(agent)&&!/chrome/i.test(agent)){browser.safari=+(RegExp[\"$1\"]||RegExp[\"$2\"])}if(browser.opera)version=parseFloat(opera.version());if(browser.webkit)version=parseFloat(agent.match(/ applewebkit\\/(\\d+)/)[1]);browser.version=version;browser.isCompatible=!browser.mobile&&(browser.ie&&version>=6||browser.gecko&&version>=10801||browser.opera&&version>=9.5||browser.air&&version>=1||browser.webkit&&version>=522||false);return browser}();var ie=browser.ie,webkit=browser.webkit,gecko=browser.gecko,opera=browser.opera;var utils=UE.utils={each:function(obj,iterator,context){if(obj==null)return;if(obj.length===+obj.length){for(var i=0,l=obj.length;i<l;i++){if(iterator.call(context,obj[i],i,obj)===false)return false}}else{for(var key in obj){if(obj.hasOwnProperty(key)){if(iterator.call(context,obj[key],key,obj)===false)return false}}}},makeInstance:function(obj){var noop=new Function;noop.prototype=obj;obj=new noop;noop.prototype=null;return obj},isObject:function(item){return item&&typeof item===\"object\"&&!Array.isArray(item)},merge:function(target,source){var output=Object.assign({},target);if(this.isObject(target)&&this.isObject(source)){Object.keys(source).forEach(key=>{if(this.isObject(source[key])){if(!(key in target)){Object.assign(output,{[key]:source[key]})}else{output[key]=this.merge(target[key],source[key])}}else{Object.assign(output,{[key]:source[key]})}})}return output},extend:function(t,s,b){if(s){for(var k in s){if(!b||!t.hasOwnProperty(k)){t[k]=s[k]}}}return t},extend2:function(t){var a=arguments;for(var i=1;i<a.length;i++){var x=a[i];for(var k in x){if(!t.hasOwnProperty(k)){t[k]=x[k]}}}return t},inherits:function(subClass,superClass){var oldP=subClass.prototype,newP=utils.makeInstance(superClass.prototype);utils.extend(newP,oldP,true);subClass.prototype=newP;return newP.constructor=subClass},bind:function(fn,context){return function(){return fn.apply(context,arguments)}},defer:function(fn,delay,exclusion){var timerID;return function(){if(exclusion){clearTimeout(timerID)}timerID=setTimeout(fn,delay)}},indexOf:function(array,item,start){var index=-1;start=this.isNumber(start)?start:0;this.each(array,function(v,i){if(i>=start&&v===item){index=i;return false}});return index},removeItem:function(array,item){for(var i=0,l=array.length;i<l;i++){if(array[i]===item){array.splice(i,1);i--}}},trim:function(str){return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},listToMap:function(list){if(!list)return{};list=utils.isArray(list)?list:list.split(\",\");for(var i=0,ci,obj={};ci=list[i++];){obj[ci.toUpperCase()]=obj[ci]=1}return obj},unhtml:function(str,reg){return str?str.replace(reg||/[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,function(a,b){if(b){return a}else{return{\"<\":\"&lt;\",\"&\":\"&amp;\",'\"':\"&quot;\",\"“\":\"&ldquo;\",\"”\":\"&rdquo;\",\">\":\"&gt;\",\"'\":\"&#39;\"}[a]}}):\"\"},html:function(str){return str?str.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g,function(m){return{\"&lt;\":\"<\",\"&amp;\":\"&\",\"&quot;\":'\"',\"&ldquo;\":\"“\",\"&rdquo;\":\"”\",\"&gt;\":\">\",\"&#39;\":\"'\",\"&nbsp;\":\" \"}[m]}):\"\"},cssStyleToDomStyle:function(){var test=document.createElement(\"div\").style,cache={float:test.cssFloat!==undefined?\"cssFloat\":test.styleFloat!==undefined?\"styleFloat\":\"float\"};return function(cssName){return cache[cssName]||(cache[cssName]=cssName.toLowerCase().replace(/-./g,function(match){return match.charAt(1).toUpperCase()}))}}(),loadFile:function(){var tmpList=[];function getItem(doc,obj){try{for(var i=0,ci;ci=tmpList[i++];){if(ci.doc===doc&&ci.url==(obj.src||obj.href)){return ci}}}catch(e){return null}}return function(doc,obj,fn){var item=getItem(doc,obj);if(item){if(item.ready){fn&&fn()}else{item.funs.push(fn)}return}tmpList.push({doc:doc,url:obj.src||obj.href,funs:[fn]});if(!doc.body){var html=[];for(var p in obj){if(p==\"tag\")continue;html.push(p+'=\"'+obj[p]+'\"')}doc.write(\"<\"+obj.tag+\" \"+html.join(\" \")+\" ></\"+obj.tag+\">\");return}if(obj.id&&doc.getElementById(obj.id)){return}var element=doc.createElement(obj.tag);delete obj.tag;for(var p in obj){element.setAttribute(p,obj[p])}element.onload=element.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){item=getItem(doc,obj);if(item.funs.length>0){item.ready=1;for(var fi;fi=item.funs.pop();){fi()}}element.onload=element.onreadystatechange=null}};element.onerror=function(){throw Error(\"The load \"+(obj.href||obj.src)+\" fails,check the url settings of file ueditor.config.js \")};doc.getElementsByTagName(\"head\")[0].appendChild(element)}}(),isEmptyObject:function(obj){if(obj==null)return true;if(this.isArray(obj)||this.isString(obj))return obj.length===0;for(var key in obj)if(obj.hasOwnProperty(key))return false;return true},fixColor:function(name,value){if(/color/i.test(name)&&/rgba?/.test(value)){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}value=value.toUpperCase()}return value},optCss:function(val){var padding,margin,border;val=val.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi,function(str,key,name,val){if(val.split(\" \").length==1){switch(key){case\"padding\":!padding&&(padding={});padding[name]=val;return\"\";case\"margin\":!margin&&(margin={});margin[name]=val;return\"\";case\"border\":return val==\"initial\"?\"\":str}}return str});function opt(obj,name){if(!obj){return\"\"}var t=obj.top,b=obj.bottom,l=obj.left,r=obj.right,val=\"\";if(!t||!l||!b||!r){for(var p in obj){val+=\";\"+name+\"-\"+p+\":\"+obj[p]+\";\"}}else{val+=\";\"+name+\":\"+(t==b&&b==l&&l==r?t:t==b&&l==r?t+\" \"+l:l==r?t+\" \"+l+\" \"+b:t+\" \"+r+\" \"+b+\" \"+l)+\";\"}return val}val+=opt(padding,\"padding\")+opt(margin,\"margin\");return val.replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/,\"\").replace(/;([ \\n\\r\\t]+)|\\1;/g,\";\").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+\";;\":\";\"})},clone:function(source,target){var tmp;target=target||{};for(var i in source){if(source.hasOwnProperty(i)){tmp=source[i];if(typeof tmp==\"object\"){target[i]=utils.isArray(tmp)?[]:{};utils.clone(source[i],target[i])}else{target[i]=tmp}}}return target},transUnitToPx:function(val){if(!/(pt|cm)/.test(val)){return val}var unit;val.replace(/([\\d.]+)(\\w+)/,function(str,v,u){val=v;unit=u});switch(unit){case\"cm\":val=parseFloat(val)*25;break;case\"pt\":val=Math.round(parseFloat(val)*96/72)}return val+(val?\"px\":\"\")},domReady:function(){var fnArr=[];function doReady(doc){doc.isReady=true;for(var ci;ci=fnArr.pop();ci()){}}return function(onready,win){win=win||window;var doc=win.document;onready&&fnArr.push(onready);if(doc.readyState===\"complete\"){doReady(doc)}else{doc.isReady&&doReady(doc);if(browser.ie&&browser.version!=11){(function(){if(doc.isReady)return;try{doc.documentElement.doScroll(\"left\")}catch(error){setTimeout(arguments.callee,0);return}doReady(doc)})();win.attachEvent(\"onload\",function(){doReady(doc)})}else{doc.addEventListener(\"DOMContentLoaded\",function(){doc.removeEventListener(\"DOMContentLoaded\",arguments.callee,false);doReady(doc)},false);win.addEventListener(\"load\",function(){doReady(doc)},false)}}}}(),cssRule:browser.ie&&browser.version!=11?function(key,style,doc){var indexList,index;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(index!==undefined){return doc.styleSheets[index].cssText}return undefined}doc=doc||document;indexList=doc.indexList||(doc.indexList={});index=indexList[key];if(style===\"\"){if(index!==undefined){doc.styleSheets[index].cssText=\"\";delete indexList[key];return true}return false}if(index!==undefined){sheetStyle=doc.styleSheets[index]}else{sheetStyle=doc.createStyleSheet(\"\",index=doc.styleSheets.length);indexList[key]=index}sheetStyle.cssText=style}:function(key,style,doc){var head,node;if(style===undefined||style&&style.nodeType&&style.nodeType==9){doc=style&&style.nodeType&&style.nodeType==9?style:doc||document;node=doc.getElementById(key);return node?node.innerHTML:undefined}doc=doc||document;node=doc.getElementById(key);if(style===\"\"){if(node){node.parentNode.removeChild(node);return true}return false}if(node){node.innerHTML=style}else{node=doc.createElement(\"style\");node.id=key;node.innerHTML=style;doc.getElementsByTagName(\"head\")[0].appendChild(node)}},sort:function(array,compareFn){compareFn=compareFn||function(item1,item2){return item1.localeCompare(item2)};for(var i=0,len=array.length;i<len;i++){for(var j=i,length=array.length;j<length;j++){if(compareFn(array[i],array[j])>0){var t=array[i];array[i]=array[j];array[j]=t}}}return array},serializeParam:function(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\")continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")},formatUrl:function(url){var u=url.replace(/&&/g,\"&\");u=u.replace(/\\?&/g,\"?\");u=u.replace(/&$/g,\"\");u=u.replace(/&#/g,\"#\");u=u.replace(/&+/g,\"&\");return u},addStyleContent:function(cssContent){var style=document.createElement(\"style\");style.innerHTML=cssContent;document.head.appendChild(style)},isCrossDomainUrl:function(url){var a=document.createElement(\"a\");a.href=url;if(browser.ie){a.href=a.href}return!(a.protocol==location.protocol&&a.hostname==location.hostname&&(a.port==location.port||a.port==\"80\"&&location.port==\"\"||a.port==\"\"&&location.port==\"80\"))},clearEmptyAttrs:function(obj){for(var p in obj){if(obj[p]===\"\"){delete obj[p]}}return obj},str2json:function(s){if(!utils.isString(s))return null;if(window.JSON){return JSON.parse(s)}else{return new Function(\"return \"+utils.trim(s||\"\"))()}},json2str:function(){if(window.JSON){return JSON.stringify}else{var escapeMap={\"\\b\":\"\\\\b\",\"\\t\":\"\\\\t\",\"\\n\":\"\\\\n\",\"\\f\":\"\\\\f\",\"\\r\":\"\\\\r\",'\"':'\\\\\"',\"\\\\\":\"\\\\\\\\\"};function encodeString(source){if(/[\"\\\\\\x00-\\x1f]/.test(source)){source=source.replace(/[\"\\\\\\x00-\\x1f]/g,function(match){var c=escapeMap[match];if(c){return c}c=match.charCodeAt();return\"\\\\u00\"+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'\"'+source+'\"'}function encodeArray(source){var result=[\"[\"],l=source.length,preComma,i,item;for(i=0;i<l;i++){item=source[i];switch(typeof item){case\"undefined\":case\"function\":case\"unknown\":break;default:if(preComma){result.push(\",\")}result.push(utils.json2str(item));preComma=1}}result.push(\"]\");return result.join(\"\")}function pad(source){return source<10?\"0\"+source:source}function encodeDate(source){return'\"'+source.getFullYear()+\"-\"+pad(source.getMonth()+1)+\"-\"+pad(source.getDate())+\"T\"+pad(source.getHours())+\":\"+pad(source.getMinutes())+\":\"+pad(source.getSeconds())+'\"'}return function(value){switch(typeof value){case\"undefined\":return\"undefined\";case\"number\":return isFinite(value)?String(value):\"null\";case\"string\":return encodeString(value);case\"boolean\":return String(value);default:if(value===null){return\"null\"}else if(utils.isArray(value)){return encodeArray(value)}else if(utils.isDate(value)){return encodeDate(value)}else{var result=[\"{\"],encode=utils.json2str,preComma,item;for(var key in value){if(Object.prototype.hasOwnProperty.call(value,key)){item=value[key];switch(typeof item){case\"undefined\":case\"unknown\":case\"function\":break;default:if(preComma){result.push(\",\")}preComma=1;result.push(encode(key)+\":\"+encode(item))}}}result.push(\"}\");return result.join(\"\")}}}}}()};utils.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Date\"],function(v){UE.utils[\"is\"+v]=function(obj){return Object.prototype.toString.apply(obj)==\"[object \"+v+\"]\"}});var EventBase=UE.EventBase=function(){};EventBase.prototype={addListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){getListener(this,ti,true).push(listener)}},on:function(types,listener){return this.addListener(types,listener)},off:function(types,listener){return this.removeListener(types,listener)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(types,listener){types=utils.trim(types).split(/\\s+/);for(var i=0,ti;ti=types[i++];){utils.removeItem(getListener(this,ti)||[],listener)}},fireEvent:function(){var types=arguments[0];types=utils.trim(types).split(\" \");for(var i=0,ti;ti=types[i++];){var listeners=getListener(this,ti),r,t,k;if(listeners){k=listeners.length;while(k--){if(!listeners[k])continue;t=listeners[k].apply(this,arguments);if(t===true){return t}if(t!==undefined){r=t}}}if(t=this[\"on\"+ti.toLowerCase()]){r=t.apply(this,arguments)}}return r}};function getListener(obj,type,force){var allListeners;type=type.toLowerCase();return(allListeners=obj.__allListeners||force&&(obj.__allListeners={}))&&(allListeners[type]||force&&(allListeners[type]=[]))}var dtd=dom.dtd=function(){function _(s){for(var k in s){s[k.toUpperCase()]=s[k]}return s}var X=utils.extend2;var A=_({isindex:1,fieldset:1}),B=_({input:1,button:1,select:1,textarea:1,label:1}),C=X(_({a:1}),B),D=X({iframe:1},C),E=_({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),F=_({ins:1,del:1,script:1,style:1}),G=X(_({mark:1,b:1,acronym:1,bdo:1,var:1,\"#\":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),F),H=X(_({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),G),I=X(_({p:1}),H),J=X(_({iframe:1}),H,B),K=_({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,\"#\":1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,var:1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),L=X(_({a:0}),J),M=_({tr:1}),N=_({\"#\":1}),O=X(_({param:1}),K),P=X(_({form:1}),A,D,E,I),Q=_({li:1,ol:1,ul:1}),R=_({style:1,script:1}),S=_({base:1,link:1,meta:1,title:1}),T=X(S,R),U=_({head:1,body:1}),V=_({html:1});var block=_({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),empty=_({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return _({$nonBodyContent:X(V,U,S),$block:block,$inline:L,$inlineWithA:X(_({a:1}),L),$body:X(_({script:1,style:1}),block),$cdata:_({script:1,style:1}),$empty:empty,$nonChild:_({iframe:1,textarea:1}),$listItem:_({dd:1,dt:1,li:1}),$list:_({ul:1,ol:1,dl:1}),$isNotEmpty:_({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,textarea:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:_({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,var:1}),$removeEmptyBlock:_({p:1,div:1}),$tableContent:_({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),$notTransContent:_({pre:1,script:1,style:1,textarea:1}),html:U,head:T,style:N,script:N,body:P,base:{},link:{},meta:{},title:N,col:{},tr:_({td:1,th:1}),img:{},embed:{},colgroup:_({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:P,td:P,br:{},th:P,center:P,kbd:L,button:X(I,E),basefont:{},h5:L,h4:L,samp:L,h6:L,ol:Q,h1:L,h3:L,option:N,h2:L,form:X(A,D,E,I),select:_({optgroup:1,option:1}),font:L,ins:L,menu:Q,abbr:L,label:L,table:_({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),code:L,tfoot:M,cite:L,li:P,input:{},iframe:P,strong:L,textarea:N,noframes:P,big:L,small:L,span:_({\"#\":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:L,dt:L,sub:L,optgroup:_({option:1}),param:{},bdo:L,var:L,div:P,object:O,sup:L,dd:P,strike:L,area:{},dir:Q,map:X(_({area:1,form:1,p:1}),A,F,E),applet:O,dl:_({dt:1,dd:1}),del:L,isindex:{},fieldset:X(_({legend:1}),K),thead:M,ul:Q,acronym:L,b:L,a:X(_({a:1}),J),blockquote:X(_({td:1,tr:1,tbody:1,li:1}),P),caption:L,i:L,u:L,tbody:M,s:L,address:X(D,I),tt:L,legend:L,q:L,pre:X(G,C),p:X(_({a:1}),L),em:L,dfn:L,mark:L})}();function getDomNode(node,start,ltr,startFromChild,fn,guard){var tmpNode=startFromChild&&node[start],parent;!tmpNode&&(tmpNode=node[ltr]);while(!tmpNode&&(parent=(parent||node).parentNode)){if(parent.tagName==\"BODY\"||guard&&!guard(parent)){return null}tmpNode=parent[ltr]}if(tmpNode&&fn&&!fn(tmpNode)){return getDomNode(tmpNode,start,ltr,false,fn)}return tmpNode}var attrFix=ie&&browser.version<9?{tabindex:\"tabIndex\",readonly:\"readOnly\",for:\"htmlFor\",class:\"className\",maxlength:\"maxLength\",cellspacing:\"cellSpacing\",cellpadding:\"cellPadding\",rowspan:\"rowSpan\",colspan:\"colSpan\",usemap:\"useMap\",frameborder:\"frameBorder\"}:{tabindex:\"tabIndex\",readonly:\"readOnly\"},styleBlock=utils.listToMap([\"-webkit-box\",\"-moz-box\",\"block\",\"list-item\",\"table\",\"table-row-group\",\"table-header-group\",\"table-footer-group\",\"table-row\",\"table-column-group\",\"table-column\",\"table-cell\",\"table-caption\"]);var domUtils=dom.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:ie&&browser.version===\"6\"?\"\\ufeff\":\"​\",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(nodeA,nodeB){if(nodeA===nodeB){return 0}var node,parentsA=[nodeA],parentsB=[nodeB];node=nodeA;while(node=node.parentNode){if(node===nodeB){return 10}parentsA.push(node)}node=nodeB;while(node=node.parentNode){if(node===nodeA){return 20}parentsB.push(node)}parentsA.reverse();parentsB.reverse();if(parentsA[0]!==parentsB[0]){return 1}var i=-1;while(i++,parentsA[i]===parentsB[i]){}nodeA=parentsA[i];nodeB=parentsB[i];while(nodeA=nodeA.nextSibling){if(nodeA===nodeB){return 4}}return 2},getNodeIndex:function(node,ignoreTextNode){var preNode=node,i=0;while(preNode=preNode.previousSibling){if(ignoreTextNode&&preNode.nodeType==3){if(preNode.nodeType!=preNode.nextSibling.nodeType){i++}continue}i++}return i},inDoc:function(node,doc){return domUtils.getPosition(node,doc)===10},findParent:function(node,filterFn,includeSelf){if(node&&!domUtils.isBody(node)){node=includeSelf?node:node.parentNode;while(node){if(!filterFn||filterFn(node)||domUtils.isBody(node)){return filterFn&&!filterFn(node)&&domUtils.isBody(node)?null:node}node=node.parentNode}}return null},findParentByTagName:function(node,tagNames,includeSelf,excludeFn){tagNames=utils.listToMap(utils.isArray(tagNames)?tagNames:[tagNames]);return domUtils.findParent(node,function(node){return tagNames[node.tagName]&&!(excludeFn&&excludeFn(node))},includeSelf)},findParents:function(node,includeSelf,filterFn,closerFirst){var parents=includeSelf&&(filterFn&&filterFn(node)||!filterFn)?[node]:[];while(node=domUtils.findParent(node,filterFn)){parents.push(node)}return closerFirst?parents:parents.reverse()},insertAfter:function(node,newNode){return node.nextSibling?node.parentNode.insertBefore(newNode,node.nextSibling):node.parentNode.appendChild(newNode)},remove:function(node,keepChildren){var parent=node.parentNode,child;if(parent){if(keepChildren&&node.hasChildNodes()){while(child=node.firstChild){parent.insertBefore(child,node)}}parent.removeChild(node)}return node},getNextDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"firstChild\",\"nextSibling\",startFromChild,filterFn,guard)},getPreDomNode:function(node,startFromChild,filterFn,guard){return getDomNode(node,\"lastChild\",\"previousSibling\",startFromChild,filterFn,guard)},isBookmarkNode:function(node){return node.nodeType==1&&node.id&&/^_baidu_bookmark_/i.test(node.id)},getWindow:function(node){var doc=node.ownerDocument||node;return doc.defaultView||doc.parentWindow},getCommonAncestor:function(nodeA,nodeB){if(nodeA===nodeB)return nodeA;var parentsA=[nodeA],parentsB=[nodeB],parent=nodeA,i=-1;while(parent=parent.parentNode){if(parent===nodeB){return parent}parentsA.push(parent)}parent=nodeB;while(parent=parent.parentNode){if(parent===nodeA)return parent;parentsB.push(parent)}parentsA.reverse();parentsB.reverse();while(i++,parentsA[i]===parentsB[i]){}return i==0?null:parentsA[i-1]},clearEmptySibling:function(node,ignoreNext,ignorePre){function clear(next,dir){var tmpNode;while(next&&!domUtils.isBookmarkNode(next)&&(domUtils.isEmptyInlineElement(next)||!new RegExp(\"[^\\t\\n\\r\"+domUtils.fillChar+\"]\").test(next.nodeValue))){tmpNode=next[dir];domUtils.remove(next);next=tmpNode}}!ignoreNext&&clear(node.nextSibling,\"nextSibling\");!ignorePre&&clear(node.previousSibling,\"previousSibling\")},split:function(node,offset){var doc=node.ownerDocument;if(browser.ie&&offset==node.nodeValue.length){var next=doc.createTextNode(\"\");return domUtils.insertAfter(node,next)}var retval=node.splitText(offset);if(browser.ie8){var tmpNode=doc.createTextNode(\"\");domUtils.insertAfter(retval,tmpNode);domUtils.remove(tmpNode)}return retval},isWhitespace:function(node){return!new RegExp(\"[^ \\t\\n\\r\"+domUtils.fillChar+\"]\").test(node.nodeValue)},getXY:function(element){var x=0,y=0;while(element.offsetParent){y+=element.offsetTop;x+=element.offsetLeft;element=element.offsetParent}return{x:x,y:y}},on:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.addEventListener){element.addEventListener(type,handler,false)}else{if(!handler._d){handler._d={els:[]}}var key=type+handler.toString(),index=utils.indexOf(handler._d.els,element);if(!handler._d[key]||index==-1){if(index==-1){handler._d.els.push(element)}if(!handler._d[key]){handler._d[key]=function(evt){return handler.call(evt.srcElement,evt||window.event)}}element.attachEvent(\"on\"+type,handler._d[key])}}}element=null},un:function(element,type,handler){var types=utils.isArray(type)?type:utils.trim(type).split(/\\s+/),k=types.length;if(k)while(k--){type=types[k];if(element.removeEventListener){element.removeEventListener(type,handler,false)}else{var key=type+handler.toString();try{element.detachEvent(\"on\"+type,handler._d?handler._d[key]:handler)}catch(e){}if(handler._d&&handler._d[key]){var index=utils.indexOf(handler._d.els,element);if(index!=-1){handler._d.els.splice(index,1)}handler._d.els.length==0&&delete handler._d[key]}}}},isSameElement:function(nodeA,nodeB){if(nodeA.tagName!=nodeB.tagName){return false}var thisAttrs=nodeA.attributes,otherAttrs=nodeB.attributes;if(!ie&&thisAttrs.length!=otherAttrs.length){return false}var attrA,attrB,al=0,bl=0;for(var i=0;attrA=thisAttrs[i++];){if(attrA.nodeName==\"style\"){if(attrA.specified){al++}if(domUtils.isSameStyle(nodeA,nodeB)){continue}else{return false}}if(ie){if(attrA.specified){al++;attrB=otherAttrs.getNamedItem(attrA.nodeName)}else{continue}}else{attrB=nodeB.attributes[attrA.nodeName]}if(!attrB.specified||attrA.nodeValue!=attrB.nodeValue){return false}}if(ie){for(i=0;attrB=otherAttrs[i++];){if(attrB.specified){bl++}}if(al!=bl){return false}}return true},isSameStyle:function(nodeA,nodeB){var styleA=nodeA.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\"),styleB=nodeB.style.cssText.replace(/( ?; ?)/g,\";\").replace(/( ?: ?)/g,\":\");if(browser.opera){styleA=nodeA.style;styleB=nodeB.style;if(styleA.length!=styleB.length)return false;for(var p in styleA){if(/^(\\d+|csstext)$/i.test(p)){continue}if(styleA[p]!=styleB[p]){return false}}return true}if(!styleA||!styleB){return styleA==styleB}styleA=styleA.split(\";\");styleB=styleB.split(\";\");if(styleA.length!=styleB.length){return false}for(var i=0,ci;ci=styleA[i++];){if(utils.indexOf(styleB,ci)==-1){return false}}return true},isBlockElm:function(node){return node.nodeType==1&&(dtd.$block[node.tagName]||styleBlock[domUtils.getComputedStyle(node,\"display\")])&&!dtd.$nonChild[node.tagName]},isBody:function(node){return node&&node.nodeType==1&&node.tagName.toLowerCase()==\"body\"},breakParent:function(node,parent){var tmpNode,parentClone=node,clone=node,leftNodes,rightNodes;do{parentClone=parentClone.parentNode;if(leftNodes){tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(leftNodes);leftNodes=tmpNode;tmpNode=parentClone.cloneNode(false);tmpNode.appendChild(rightNodes);rightNodes=tmpNode}else{leftNodes=parentClone.cloneNode(false);rightNodes=leftNodes.cloneNode(false)}while(tmpNode=clone.previousSibling){leftNodes.insertBefore(tmpNode,leftNodes.firstChild)}while(tmpNode=clone.nextSibling){rightNodes.appendChild(tmpNode)}clone=parentClone}while(parent!==parentClone);tmpNode=parent.parentNode;tmpNode.insertBefore(leftNodes,parent);tmpNode.insertBefore(rightNodes,parent);tmpNode.insertBefore(node,rightNodes);domUtils.remove(parent);return node},isEmptyInlineElement:function(node){if(node.nodeType!=1||!dtd.$removeEmpty[node.tagName]){return 0}node=node.firstChild;while(node){if(domUtils.isBookmarkNode(node)){return 0}if(node.nodeType==1&&!domUtils.isEmptyInlineElement(node)||node.nodeType==3&&!domUtils.isWhitespace(node)){return 0}node=node.nextSibling}return 1},trimWhiteTextNode:function(node){function remove(dir){var child;while((child=node[dir])&&child.nodeType==3&&domUtils.isWhitespace(child)){node.removeChild(child)}}remove(\"firstChild\");remove(\"lastChild\")},mergeChild:function(node,tagName,attrs){var list=domUtils.getElementsByTagName(node,node.tagName.toLowerCase());for(var i=0,ci;ci=list[i++];){if(!ci.parentNode||domUtils.isBookmarkNode(ci)){continue}if(ci.tagName.toLowerCase()==\"span\"){if(node===ci.parentNode){domUtils.trimWhiteTextNode(node);if(node.childNodes.length==1){node.style.cssText=ci.style.cssText+\";\"+node.style.cssText;domUtils.remove(ci,true);continue}}ci.style.cssText=node.style.cssText+\";\"+ci.style.cssText;if(attrs){var style=attrs.style;if(style){style=style.split(\";\");for(var j=0,s;s=style[j++];){ci.style[utils.cssStyleToDomStyle(s.split(\":\")[0])]=s.split(\":\")[1]}}}if(domUtils.isSameStyle(ci,node)){domUtils.remove(ci,true)}continue}if(domUtils.isSameElement(node,ci)){domUtils.remove(ci,true)}}},getElementsByTagName:function(node,tagName,filter){if(filter&&utils.isString(filter)){var className=filter;filter=function(node){return domUtils.hasClass(node,className)}}tagName=utils.trim(tagName).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[];for(var n=0,ni;ni=tagName[n++];){var list=node.getElementsByTagName(ni);for(var i=0,ci;ci=list[i++];){if(!filter||filter(ci))arr.push(ci)}}return arr},mergeToParent:function(node){var parent=node.parentNode;while(parent&&dtd.$removeEmpty[parent.tagName]){if(parent.tagName==node.tagName||parent.tagName==\"A\"){domUtils.trimWhiteTextNode(parent);if(parent.tagName==\"SPAN\"&&!domUtils.isSameStyle(parent,node)||parent.tagName==\"A\"&&node.tagName==\"SPAN\"){if(parent.childNodes.length>1||parent!==node.parentNode){node.style.cssText=parent.style.cssText+\";\"+node.style.cssText;parent=parent.parentNode;continue}else{parent.style.cssText+=\";\"+node.style.cssText;if(parent.tagName==\"A\"){parent.style.textDecoration=\"underline\"}}}if(parent.tagName!=\"A\"){parent===node.parentNode&&domUtils.remove(node,true);break}}parent=parent.parentNode}},mergeSibling:function(node,ignorePre,ignoreNext){function merge(rtl,start,node){var next;if((next=node[rtl])&&!domUtils.isBookmarkNode(next)&&next.nodeType==1&&domUtils.isSameElement(node,next)){while(next.firstChild){if(start==\"firstChild\"){node.insertBefore(next.lastChild,node.firstChild)}else{node.appendChild(next.firstChild)}}domUtils.remove(next)}}!ignorePre&&merge(\"previousSibling\",\"firstChild\",node);!ignoreNext&&merge(\"nextSibling\",\"lastChild\",node)},unSelectable:ie&&browser.ie9below||browser.opera?function(node){node.onselectstart=function(){return false};node.onclick=node.onkeyup=node.onkeydown=function(){return false};node.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\");for(var i=0,ci;ci=node.all[i++];){switch(ci.tagName.toLowerCase()){case\"iframe\":case\"textarea\":case\"input\":case\"select\":break;default:ci.unselectable=\"on\";node.setAttribute(\"unselectable\",\"on\")}}}:function(node){node.style.MozUserSelect=node.style.webkitUserSelect=node.style.msUserSelect=node.style.KhtmlUserSelect=\"none\"},removeAttributes:function(node,attrNames){attrNames=utils.isArray(attrNames)?attrNames:utils.trim(attrNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci;ci=attrNames[i++];){ci=attrFix[ci]||ci;switch(ci){case\"className\":node[ci]=\"\";break;case\"style\":node.style.cssText=\"\";var val=node.getAttributeNode(\"style\");!browser.ie&&val&&node.removeAttributeNode(val)}node.removeAttribute(ci)}},createElement:function(doc,tag,attrs){return domUtils.setAttributes(doc.createElement(tag),attrs)},setAttributes:function(node,attrs){for(var attr in attrs){if(\"_propertyDelete\"===attr){for(var j=0;j<attrs[attr].length;j++){if(node.hasAttribute(attrs[attr][j])){node.removeAttribute(attrs[attr][j])}}continue}if(attrs.hasOwnProperty(attr)){var value=attrs[attr];switch(attr){case\"class\":node.className=value;break;case\"style\":node.style.cssText=node.style.cssText+\";\"+value;break;case\"innerHTML\":node[attr]=value;break;case\"value\":node.value=value;break;default:node.setAttribute(attrFix[attr]||attr,value)}}}return node},getComputedStyle:function(element,styleName){var pros=\"width height top left\";if(pros.indexOf(styleName)>-1){return element[\"offset\"+styleName.replace(/^\\w/,function(s){return s.toUpperCase()})]+\"px\"}if(element.nodeType===3){element=element.parentNode}if(browser.ie&&browser.version<9&&styleName===\"font-size\"&&!element.style.fontSize&&!dtd.$empty[element.tagName]&&!dtd.$nonChild[element.tagName]){var span=element.ownerDocument.createElement(\"span\");span.style.cssText=\"padding:0;border:0;font-family:simsun;\";span.innerHTML=\".\";element.appendChild(span);var result=span.offsetHeight;element.removeChild(span);span=null;return result+\"px\"}try{var value=domUtils.getStyle(element,styleName)||(window.getComputedStyle?domUtils.getWindow(element).getComputedStyle(element,\"\").getPropertyValue(styleName):(element.currentStyle||element.style)[utils.cssStyleToDomStyle(styleName)])}catch(e){return\"\"}return utils.transUnitToPx(utils.fixColor(styleName,value))},removeClasses:function(elm,classNames){classNames=utils.isArray(classNames)?classNames:utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){cls=cls.replace(new RegExp(\"\\\\b\"+ci+\"\\\\b\"),\"\")}cls=utils.trim(cls).replace(/[ ]{2,}/g,\" \");if(cls){elm.className=cls}else{domUtils.removeAttributes(elm,[\"class\"])}},addClass:function(elm,classNames){if(!elm)return;classNames=utils.trim(classNames).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=elm.className;ci=classNames[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\").test(cls)){cls+=\" \"+ci}}elm.className=utils.trim(cls)},hasClass:function(element,className){if(utils.isRegExp(className)){return className.test(element.className)}className=utils.trim(className).replace(/[ ]{2,}/g,\" \").split(\" \");for(var i=0,ci,cls=element.className;ci=className[i++];){if(!new RegExp(\"\\\\b\"+ci+\"\\\\b\",\"i\").test(cls)){return false}}return i-1==className.length},preventDefault:function(evt){evt.preventDefault?evt.preventDefault():evt.returnValue=false},removeStyle:function(element,name){if(browser.ie){if(name==\"color\"){name=\"(^|;)\"+name}element.style.cssText=element.style.cssText.replace(new RegExp(name+\"[^:]*:[^;]+;?\",\"ig\"),\"\")}else{if(element.style.removeProperty){element.style.removeProperty(name)}else{element.style.removeAttribute(utils.cssStyleToDomStyle(name))}}if(!element.style.cssText){domUtils.removeAttributes(element,[\"style\"])}},getStyle:function(element,name){var value=element.style[utils.cssStyleToDomStyle(name)];return utils.fixColor(name,value)},setStyle:function(element,name,value){element.style[utils.cssStyleToDomStyle(name)]=value;if(!utils.trim(element.style.cssText)){this.removeAttributes(element,\"style\")}},setStyles:function(element,styles){for(var name in styles){if(styles.hasOwnProperty(name)){domUtils.setStyle(element,name,styles[name])}}},removeDirtyAttr:function(node){for(var i=0,ci,nodes=node.getElementsByTagName(\"*\");ci=nodes[i++];){ci.removeAttribute(\"_moz_dirty\")}node.removeAttribute(\"_moz_dirty\")},getChildCount:function(node,fn){var count=0,first=node.firstChild;fn=fn||function(){return 1};while(first){if(fn(first)){count++}first=first.nextSibling}return count},isEmptyNode:function(node){return!node.firstChild||domUtils.getChildCount(node,function(node){return!domUtils.isBr(node)&&!domUtils.isBookmarkNode(node)&&!domUtils.isWhitespace(node)})==0},clearSelectedArr:function(nodes){var node;while(node=nodes.pop()){domUtils.removeAttributes(node,[\"class\"])}},scrollToView:function(node,win,offsetTop){offsetTop=offsetTop||0;var getViewPaneSize=function(){var doc=win.document,mode=doc.compatMode==\"CSS1Compat\";return{width:(mode?doc.documentElement.clientWidth:doc.body.clientWidth)||0,height:(mode?doc.documentElement.clientHeight:doc.body.clientHeight)||0}},getScrollPosition=function(win){if(\"pageXOffset\"in win){return{x:win.pageXOffset||0,y:win.pageYOffset||0}}else{var doc=win.document;return{x:doc.documentElement.scrollLeft||doc.body.scrollLeft||0,y:doc.documentElement.scrollTop||doc.body.scrollTop||0}}};var winHeight=getViewPaneSize().height,offset=winHeight*-1+offsetTop;offset+=node.offsetHeight||0;var elementPosition=domUtils.getXY(node);offset+=elementPosition.y;var currentScroll=getScrollPosition(win).y;if(offset>currentScroll||offset<currentScroll-winHeight){win.scrollTo({top:offset+(offset<0?-20:20),behavior:\"smooth\"})}},isBr:function(node){return node.nodeType==1&&node.tagName==\"BR\"},isFillChar:function(node,isInStart){if(node.nodeType!=3)return false;var text=node.nodeValue;if(isInStart){return new RegExp(\"^\"+domUtils.fillChar).test(text)}return!text.replace(new RegExp(domUtils.fillChar,\"g\"),\"\").length},isStartInblock:function(range){var tmpRange=range.cloneRange(),flag=0,start=tmpRange.startContainer,tmp;if(start.nodeType==1&&start.childNodes[tmpRange.startOffset]){start=start.childNodes[tmpRange.startOffset];var pre=start.previousSibling;while(pre&&domUtils.isFillChar(pre)){start=pre;pre=pre.previousSibling}}if(this.isFillChar(start,true)&&tmpRange.startOffset==1){tmpRange.setStartBefore(start);start=tmpRange.startContainer}while(start&&domUtils.isFillChar(start)){tmp=start;start=start.previousSibling}if(tmp){tmpRange.setStartBefore(tmp);start=tmpRange.startContainer}if(start.nodeType==1&&domUtils.isEmptyNode(start)&&tmpRange.startOffset==1){tmpRange.setStart(start,0).collapse(true)}while(!tmpRange.startOffset){start=tmpRange.startContainer;if(domUtils.isBlockElm(start)||domUtils.isBody(start)){flag=1;break}var pre=tmpRange.startContainer.previousSibling,tmpNode;if(!pre){tmpRange.setStartBefore(tmpRange.startContainer)}else{while(pre&&domUtils.isFillChar(pre)){tmpNode=pre;pre=pre.previousSibling}if(tmpNode){tmpRange.setStartBefore(tmpNode)}else{tmpRange.setStartBefore(tmpRange.startContainer)}}}return flag&&!domUtils.isBody(tmpRange.startContainer)?1:0},isEmptyBlock:function(node,reg){if(node.nodeType!=1)return 0;reg=reg||new RegExp(\"[  \\t\\r\\n\"+domUtils.fillChar+\"]\",\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1},setViewportOffset:function(element,offset){var left=parseInt(element.style.left)|0;var top=parseInt(element.style.top)|0;var rect=element.getBoundingClientRect();var offsetLeft=offset.left-rect.left;var offsetTop=offset.top-rect.top;if(offsetLeft){element.style.left=left+offsetLeft+\"px\"}if(offsetTop){element.style.top=top+offsetTop+\"px\"}},fillNode:function(doc,node){var tmpNode=browser.ie?doc.createTextNode(domUtils.fillChar):doc.createElement(\"br\");node.innerHTML=\"\";node.appendChild(tmpNode)},moveChild:function(src,tag,dir){while(src.firstChild){if(dir&&tag.firstChild){tag.insertBefore(src.lastChild,tag.firstChild)}else{tag.appendChild(src.firstChild)}}},hasNoAttributes:function(node){return browser.ie?/^<\\w+\\s*?>/.test(node.outerHTML):node.attributes.length==0},isCustomeNode:function(node){return node.nodeType==1&&node.getAttribute(\"_ue_custom_node_\")},isTagNode:function(node,tagNames){return node.nodeType==1&&new RegExp(\"\\\\b\"+node.tagName+\"\\\\b\",\"i\").test(tagNames)},filterNodeList:function(nodelist,filter,forAll){var results=[];if(!utils.isFunction(filter)){var str=filter;filter=function(n){return utils.indexOf(utils.isArray(str)?str:str.split(\" \"),n.tagName.toLowerCase())!=-1}}utils.each(nodelist,function(n){filter(n)&&results.push(n)});return results.length==0?null:results.length==1||!forAll?results[0]:results},isInNodeEndBoundary:function(rng,node){var start=rng.startContainer;if(start.nodeType==3&&rng.startOffset!=start.nodeValue.length){return 0}if(start.nodeType==1&&rng.startOffset!=start.childNodes.length){return 0}while(start!==node){if(start.nextSibling){return 0}start=start.parentNode}return 1},isBoundaryNode:function(node,dir){var tmp;while(!domUtils.isBody(node)){tmp=node;node=node.parentNode;if(tmp!==node[dir]){return false}}return true},fillHtml:browser.ie11below?\"&nbsp;\":\"<br/>\",loadScript:function(url,cb){var script;script=document.createElement(\"script\");script.src=url;script.onload=function(){cb&&cb({isNew:true})};document.getElementsByTagName(\"head\")[0].appendChild(script)}};var fillCharReg=new RegExp(domUtils.fillChar,\"g\");(function(){var guid=0,fillChar=domUtils.fillChar,fillData;function updateCollapse(range){range.collapsed=range.startContainer&&range.endContainer&&range.startContainer===range.endContainer&&range.startOffset===range.endOffset}function selectOneNode(rng){return!rng.collapsed&&rng.startContainer.nodeType===1&&rng.startContainer===rng.endContainer&&rng.endOffset-rng.startOffset===1}function setEndPoint(toStart,node,offset,range){if(node.nodeType===1&&(dtd.$empty[node.tagName]||dtd.$nonChild[node.tagName])){offset=domUtils.getNodeIndex(node)+(toStart?0:1);node=node.parentNode}if(toStart){range.startContainer=node;range.startOffset=offset;if(!range.endContainer){range.collapse(true)}}else{range.endContainer=node;range.endOffset=offset;if(!range.startContainer){range.collapse(false)}}updateCollapse(range);return range}function execContentsAction(range,action){var start=range.startContainer,end=range.endContainer,startOffset=range.startOffset,endOffset=range.endOffset,doc=range.document,frag=doc.createDocumentFragment(),tmpStart,tmpEnd;if(start.nodeType==1){start=start.childNodes[startOffset]||(tmpStart=start.appendChild(doc.createTextNode(\"\")))}if(end.nodeType==1){end=end.childNodes[endOffset]||(tmpEnd=end.appendChild(doc.createTextNode(\"\")))}if(start===end&&start.nodeType==3){frag.appendChild(doc.createTextNode(start.substringData(startOffset,endOffset-startOffset)));if(action){start.deleteData(startOffset,endOffset-startOffset);range.collapse(true)}return frag}var current,currentLevel,clone=frag,startParents=domUtils.findParents(start,true),endParents=domUtils.findParents(end,true);for(var i=0;startParents[i]==endParents[i];){i++}for(var j=i,si;si=startParents[j];j++){current=si.nextSibling;if(si==start){if(!tmpStart){if(range.startContainer.nodeType==3){clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset)));if(action){start.deleteData(startOffset,start.nodeValue.length-startOffset)}}else{clone.appendChild(!action?start.cloneNode(true):start)}}}else{currentLevel=si.cloneNode(false);clone.appendChild(currentLevel)}while(current){if(current===end||current===endParents[j]){break}si=current.nextSibling;clone.appendChild(!action?current.cloneNode(true):current);current=si}clone=currentLevel}clone=frag;if(!startParents[i]){clone.appendChild(startParents[i-1].cloneNode(false));clone=clone.firstChild}for(var j=i,ei;ei=endParents[j];j++){current=ei.previousSibling;if(ei==end){if(!tmpEnd&&range.endContainer.nodeType==3){clone.appendChild(doc.createTextNode(end.substringData(0,endOffset)));if(action){end.deleteData(0,endOffset)}}}else{currentLevel=ei.cloneNode(false);clone.appendChild(currentLevel)}if(j!=i||!startParents[i]){while(current){if(current===start){break}ei=current.previousSibling;clone.insertBefore(!action?current.cloneNode(true):current,clone.firstChild);current=ei}}clone=currentLevel}if(action){range.setStartBefore(!endParents[i]?endParents[i-1]:!startParents[i]?startParents[i-1]:endParents[i]).collapse(true)}tmpStart&&domUtils.remove(tmpStart);tmpEnd&&domUtils.remove(tmpEnd);return frag}var Range=dom.Range=function(document){var me=this;me.startContainer=me.startOffset=me.endContainer=me.endOffset=null;me.document=document;me.collapsed=true};function removeFillData(doc,excludeNode){try{if(fillData&&domUtils.inDoc(fillData,doc)){if(!fillData.nodeValue.replace(fillCharReg,\"\").length){var tmpNode=fillData.parentNode;domUtils.remove(fillData);while(tmpNode&&domUtils.isEmptyInlineElement(tmpNode)&&(browser.safari?!(domUtils.getPosition(tmpNode,excludeNode)&domUtils.POSITION_CONTAINS):!tmpNode.contains(excludeNode))){fillData=tmpNode.parentNode;domUtils.remove(tmpNode);tmpNode=fillData}}else{fillData.nodeValue=fillData.nodeValue.replace(fillCharReg,\"\")}}}catch(e){}}function mergeSibling(node,dir){var tmpNode;node=node[dir];while(node&&domUtils.isFillChar(node)){tmpNode=node[dir];domUtils.remove(node);node=tmpNode}}Range.prototype={cloneContents:function(){return this.collapsed?null:execContentsAction(this,0)},deleteContents:function(){var txt;if(!this.collapsed){execContentsAction(this,1)}if(browser.webkit){txt=this.startContainer;if(txt.nodeType==3&&!txt.nodeValue.length){this.setStartBefore(txt).collapse(true);domUtils.remove(txt)}}return this},extractContents:function(){return this.collapsed?null:execContentsAction(this,2)},setStart:function(node,offset){return setEndPoint(true,node,offset,this)},setEnd:function(node,offset){return setEndPoint(false,node,offset,this)},setStartAfter:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node)+1)},setStartBefore:function(node){return this.setStart(node.parentNode,domUtils.getNodeIndex(node))},setEndAfter:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node)+1)},setEndBefore:function(node){return this.setEnd(node.parentNode,domUtils.getNodeIndex(node))},setStartAtFirst:function(node){return this.setStart(node,0)},setStartAtLast:function(node){return this.setStart(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},setEndAtFirst:function(node){return this.setEnd(node,0)},setEndAtLast:function(node){return this.setEnd(node,node.nodeType==3?node.nodeValue.length:node.childNodes.length)},selectNode:function(node){return this.setStartBefore(node).setEndAfter(node)},selectNodeContents:function(node){return this.setStart(node,0).setEndAtLast(node)},cloneRange:function(){var me=this;return new Range(me.document).setStart(me.startContainer,me.startOffset).setEnd(me.endContainer,me.endOffset)},collapse:function(toStart){var me=this;if(toStart){me.endContainer=me.startContainer;me.endOffset=me.startOffset}else{me.startContainer=me.endContainer;me.startOffset=me.endOffset}me.collapsed=true;return me},shrinkBoundary:function(ignoreEnd){var me=this,child,collapsed=me.collapsed;function check(node){return node.nodeType==1&&!domUtils.isBookmarkNode(node)&&!dtd.$empty[node.tagName]&&!dtd.$nonChild[node.tagName]}while(me.startContainer.nodeType==1&&(child=me.startContainer.childNodes[me.startOffset])&&check(child)){me.setStart(child,0)}if(collapsed){return me.collapse(true)}if(!ignoreEnd){while(me.endContainer.nodeType==1&&me.endOffset>0&&(child=me.endContainer.childNodes[me.endOffset-1])&&check(child)){me.setEnd(child,child.childNodes.length)}}return me},getCommonAncestor:function(includeSelf,ignoreTextNode){var me=this,start=me.startContainer,end=me.endContainer;if(start===end){if(includeSelf&&selectOneNode(this)){start=start.childNodes[me.startOffset];if(start.nodeType==1)return start}return ignoreTextNode&&start.nodeType==3?start.parentNode:start}return domUtils.getCommonAncestor(start,end)},trimBoundary:function(ignoreEnd){this.txtToElmBoundary();var start=this.startContainer,offset=this.startOffset,collapsed=this.collapsed,end=this.endContainer;if(start.nodeType==3){if(offset==0){this.setStartBefore(start)}else{if(offset>=start.nodeValue.length){this.setStartAfter(start)}else{var textNode=domUtils.split(start,offset);if(start===end){this.setEnd(textNode,this.endOffset-offset)}else if(start.parentNode===end){this.endOffset+=1}this.setStartBefore(textNode)}}if(collapsed){return this.collapse(true)}}if(!ignoreEnd){offset=this.endOffset;end=this.endContainer;if(end.nodeType==3){if(offset==0){this.setEndBefore(end)}else{offset<end.nodeValue.length&&domUtils.split(end,offset);this.setEndAfter(end)}}}return this},txtToElmBoundary:function(ignoreCollapsed){function adjust(r,c){var container=r[c+\"Container\"],offset=r[c+\"Offset\"];if(container.nodeType==3){if(!offset){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"Before\"](container)}else if(offset>=container.nodeValue.length){r[\"set\"+c.replace(/(\\w)/,function(a){return a.toUpperCase()})+\"After\"](container)}}}if(ignoreCollapsed||!this.collapsed){adjust(this,\"start\");adjust(this,\"end\")}return this},insertNode:function(node){var first=node,length=1;if(node.nodeType==11){first=node.firstChild;length=node.childNodes.length}this.trimBoundary(true);var start=this.startContainer,offset=this.startOffset;var nextNode=start.childNodes[offset];if(nextNode){start.insertBefore(node,nextNode)}else{start.appendChild(node)}if(first.parentNode===this.endContainer){this.endOffset=this.endOffset+length}return this.setStartBefore(first)},setCursor:function(toEnd,noFillData){return this.collapse(!toEnd).select(noFillData)},createBookmark:function(serialize,same){var endNode,startNode=this.document.createElement(\"span\");startNode.style.cssText=\"display:none;line-height:0px;\";startNode.appendChild(this.document.createTextNode(\"‍\"));startNode.id=\"_baidu_bookmark_start_\"+(same?\"\":guid++);if(!this.collapsed){endNode=startNode.cloneNode(true);endNode.id=\"_baidu_bookmark_end_\"+(same?\"\":guid++)}this.insertNode(startNode);if(endNode){this.collapse().insertNode(endNode).setEndBefore(endNode)}this.setStartAfter(startNode);return{start:serialize?startNode.id:startNode,end:endNode?serialize?endNode.id:endNode:null,id:serialize}},moveToBookmark:function(bookmark){var start=bookmark.id?this.document.getElementById(bookmark.start):bookmark.start,end=bookmark.end&&bookmark.id?this.document.getElementById(bookmark.end):bookmark.end;this.setStartBefore(start);domUtils.remove(start);if(end){this.setEndBefore(end);domUtils.remove(end)}else{this.collapse(true)}return this},enlarge:function(toBlock,stopFn){var isBody=domUtils.isBody,pre,node,tmp=this.document.createTextNode(\"\");if(toBlock){node=this.startContainer;if(node.nodeType==1){if(node.childNodes[this.startOffset]){pre=node=node.childNodes[this.startOffset]}else{node.appendChild(tmp);pre=node=tmp}}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.previousSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setStartBefore(node);break}pre=node;node=node.parentNode}node=this.endContainer;if(node.nodeType==1){if(pre=node.childNodes[this.endOffset]){node.insertBefore(tmp,pre)}else{node.appendChild(tmp)}pre=node=tmp}else{pre=node}while(1){if(domUtils.isBlockElm(node)){node=pre;while((pre=node.nextSibling)&&!domUtils.isBlockElm(pre)){node=pre}this.setEndAfter(node);break}pre=node;node=node.parentNode}if(tmp.parentNode===this.endContainer){this.endOffset--}domUtils.remove(tmp)}if(!this.collapsed){while(this.startOffset==0){if(stopFn&&stopFn(this.startContainer)){break}if(isBody(this.startContainer)){break}this.setStartBefore(this.startContainer)}while(this.endOffset==(this.endContainer.nodeType==1?this.endContainer.childNodes.length:this.endContainer.nodeValue.length)){if(stopFn&&stopFn(this.endContainer)){break}if(isBody(this.endContainer)){break}this.setEndAfter(this.endContainer)}}return this},enlargeToBlockElm:function(ignoreEnd){while(!domUtils.isBlockElm(this.startContainer)){this.setStartBefore(this.startContainer)}if(!ignoreEnd){while(!domUtils.isBlockElm(this.endContainer)){this.setEndAfter(this.endContainer)}}return this},adjustmentBoundary:function(){if(!this.collapsed){while(!domUtils.isBody(this.startContainer)&&this.startOffset==this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length&&this.startContainer[this.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setStartAfter(this.startContainer)}while(!domUtils.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[this.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){this.setEndBefore(this.endContainer)}}return this},applyInlineStyle:function(tagName,attrs,list){if(this.collapsed)return this;this.trimBoundary().enlarge(false,function(node){return node.nodeType==1&&domUtils.isBlockElm(node)}).adjustmentBoundary();var bookmark=this.createBookmark(),end=bookmark.end,filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},current=domUtils.getNextDomNode(bookmark.start,false,filterFn),node,pre,range=this.cloneRange();while(current&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd[tagName][current.tagName]){range.setStartBefore(current);node=current;while(node&&(node.nodeType==3||dtd[tagName][node.tagName])&&node!==end){pre=node;node=domUtils.getNextDomNode(node,node.nodeType==1,null,function(parent){return dtd[tagName][parent.tagName]})}var frag=range.setEndAfter(pre).extractContents(),elm;if(list&&list.length>0){var level,top;top=level=list[0].cloneNode(false);for(var i=1,ci;ci=list[i++];){level.appendChild(ci.cloneNode(false));level=level.firstChild}elm=level}else{elm=range.document.createElement(tagName)}if(attrs){domUtils.setAttributes(elm,attrs)}elm.appendChild(frag);if(elm.tagName==\"SPAN\"&&attrs&&attrs.style){utils.each(elm.getElementsByTagName(\"span\"),function(s){s.style.cssText=s.style.cssText+\";\"+attrs.style})}range.insertNode(list?top:elm);var aNode;if(tagName==\"span\"&&attrs.style&&/text\\-decoration/.test(attrs.style)&&(aNode=domUtils.findParentByTagName(elm,\"a\",true))){domUtils.setAttributes(aNode,attrs);domUtils.remove(elm,true);elm=aNode}else{domUtils.mergeSibling(elm);domUtils.clearEmptySibling(elm)}domUtils.mergeChild(elm,attrs);current=domUtils.getNextDomNode(elm,false,filterFn);domUtils.mergeToParent(elm);if(node===end){break}}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return this.moveToBookmark(bookmark)},removeInlineStyle:function(tagNames){if(this.collapsed)return this;tagNames=utils.isArray(tagNames)?tagNames:[tagNames];this.shrinkBoundary().adjustmentBoundary();var start=this.startContainer,end=this.endContainer;while(1){if(start.nodeType==1){if(utils.indexOf(tagNames,start.tagName.toLowerCase())>-1){break}if(start.tagName.toLowerCase()==\"body\"){start=null;break}}start=start.parentNode}while(1){if(end.nodeType==1){if(utils.indexOf(tagNames,end.tagName.toLowerCase())>-1){break}if(end.tagName.toLowerCase()==\"body\"){end=null;break}}end=end.parentNode}var bookmark=this.createBookmark(),frag,tmpRange;if(start){tmpRange=this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(start,true);start.parentNode.insertBefore(bookmark.start,start)}if(end){tmpRange=this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end);frag=tmpRange.extractContents();tmpRange.insertNode(frag);domUtils.clearEmptySibling(end,false,true);end.parentNode.insertBefore(bookmark.end,end.nextSibling)}var current=domUtils.getNextDomNode(bookmark.start,false,function(node){return node.nodeType==1}),next;while(current&&current!==bookmark.end){next=domUtils.getNextDomNode(current,true,function(node){return node.nodeType==1});if(utils.indexOf(tagNames,current.tagName.toLowerCase())>-1){domUtils.remove(current,true)}current=next}return this.moveToBookmark(bookmark)},getClosedNode:function(){var node;if(!this.collapsed){var range=this.cloneRange().adjustmentBoundary().shrinkBoundary();if(selectOneNode(range)){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&(dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName])){node=child}}}return node},select:browser.ie?function(noFillData,textRange){var nativeRange;if(!this.collapsed)this.shrinkBoundary();var node=this.getClosedNode();if(node&&!textRange){try{nativeRange=this.document.body.createControlRange();nativeRange.addElement(node);nativeRange.select()}catch(e){}return this}var bookmark=this.createBookmark(),start=bookmark.start,end;nativeRange=this.document.body.createTextRange();nativeRange.moveToElementText(start);nativeRange.moveStart(\"character\",1);if(!this.collapsed){var nativeRangeEnd=this.document.body.createTextRange();end=bookmark.end;nativeRangeEnd.moveToElementText(end);nativeRange.setEndPoint(\"EndToEnd\",nativeRangeEnd)}else{if(!noFillData&&this.startContainer.nodeType!=3){var tmpText=this.document.createTextNode(fillChar),tmp=this.document.createElement(\"span\");tmp.appendChild(this.document.createTextNode(fillChar));start.parentNode.insertBefore(tmp,start);start.parentNode.insertBefore(tmpText,start);removeFillData(this.document,tmpText);fillData=tmpText;mergeSibling(tmp,\"previousSibling\");mergeSibling(start,\"nextSibling\");nativeRange.moveStart(\"character\",-1);nativeRange.collapse(true)}}this.moveToBookmark(bookmark);tmp&&domUtils.remove(tmp);try{nativeRange.select()}catch(e){}return this}:function(notInsertFillData){function checkOffset(rng){function check(node,offset,dir){if(node.nodeType==3&&node.nodeValue.length<offset){rng[dir+\"Offset\"]=node.nodeValue.length}}check(rng.startContainer,rng.startOffset,\"start\");check(rng.endContainer,rng.endOffset,\"end\")}var win=domUtils.getWindow(this.document),sel=win.getSelection(),txtNode;browser.gecko?this.document.body.focus():win.focus();if(sel){sel.removeAllRanges();if(this.collapsed&&!notInsertFillData){var start=this.startContainer,child=start;if(start.nodeType==1){child=start.childNodes[this.startOffset]}if(!(start.nodeType==3&&this.startOffset)&&(child?!child.previousSibling||child.previousSibling.nodeType!=3:!start.lastChild||start.lastChild.nodeType!=3)){txtNode=this.document.createTextNode(fillChar);this.insertNode(txtNode);removeFillData(this.document,txtNode);mergeSibling(txtNode,\"previousSibling\");mergeSibling(txtNode,\"nextSibling\");fillData=txtNode;this.setStart(txtNode,browser.webkit?1:0).collapse(true)}}var nativeRange=this.document.createRange();if(this.collapsed&&browser.opera&&this.startContainer.nodeType==1){var child=this.startContainer.childNodes[this.startOffset];if(!child){child=this.startContainer.lastChild;if(child&&domUtils.isBr(child)){this.setStartBefore(child).collapse(true)}}else{while(child&&domUtils.isBlockElm(child)){if(child.nodeType==1&&child.childNodes[0]){child=child.childNodes[0]}else{break}}child&&this.setStartBefore(child).collapse(true)}}checkOffset(this);nativeRange.setStart(this.startContainer,this.startOffset);nativeRange.setEnd(this.endContainer,this.endOffset);sel.addRange(nativeRange)}return this},scrollToView:function(win,offset){win=win?window:domUtils.getWindow(this.document);offset=offset||win.innerHeight-100;var me=this,span=me.document.createElement(\"span\");span.innerHTML=\"&nbsp;\";me.cloneRange().insertNode(span);domUtils.scrollToView(span,win,offset);domUtils.remove(span);return me},inFillChar:function(){var start=this.startContainer;if(this.collapsed&&start.nodeType==3&&start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\").length+1==start.nodeValue.length){return true}return false},createAddress:function(ignoreEnd,ignoreTxt){var addr={},me=this;function getAddress(isStart){var node=isStart?me.startContainer:me.endContainer;var parents=domUtils.findParents(node,true,function(node){return!domUtils.isBody(node)}),addrs=[];for(var i=0,ci;ci=parents[i++];){addrs.push(domUtils.getNodeIndex(ci,ignoreTxt))}var firstIndex=0;if(ignoreTxt){if(node.nodeType==3){var tmpNode=node.previousSibling;while(tmpNode&&tmpNode.nodeType==3){firstIndex+=tmpNode.nodeValue.replace(fillCharReg,\"\").length;tmpNode=tmpNode.previousSibling}firstIndex+=isStart?me.startOffset:me.endOffset}else{node=node.childNodes[isStart?me.startOffset:me.endOffset];if(node){firstIndex=domUtils.getNodeIndex(node,ignoreTxt)}else{node=isStart?me.startContainer:me.endContainer;var first=node.firstChild;while(first){if(domUtils.isFillChar(first)){first=first.nextSibling;continue}firstIndex++;if(first.nodeType==3){while(first&&first.nodeType==3){first=first.nextSibling}}else{first=first.nextSibling}}}}}else{firstIndex=isStart?domUtils.isFillChar(node)?0:me.startOffset:me.endOffset}if(firstIndex<0){firstIndex=0}addrs.push(firstIndex);return addrs}addr.startAddress=getAddress(true);if(!ignoreEnd){addr.endAddress=me.collapsed?[].concat(addr.startAddress):getAddress()}return addr},moveToAddress:function(addr,ignoreEnd){var me=this;function getNode(address,isStart){var tmpNode=me.document.body,parentNode,offset;for(var i=0,ci,l=address.length;i<l;i++){ci=address[i];parentNode=tmpNode;tmpNode=tmpNode.childNodes[ci];if(!tmpNode){offset=ci;break}}if(isStart){if(tmpNode){me.setStartBefore(tmpNode)}else{me.setStart(parentNode,offset)}}else{if(tmpNode){me.setEndBefore(tmpNode)}else{me.setEnd(parentNode,offset)}}}getNode(addr.startAddress,true);!ignoreEnd&&addr.endAddress&&getNode(addr.endAddress);return me},equals:function(rng){for(var p in this){if(this.hasOwnProperty(p)){if(this[p]!==rng[p])return false}}return true},traversal:function(doFn,filterFn){if(this.collapsed)return this;var bookmark=this.createBookmark(),end=bookmark.end,current=domUtils.getNextDomNode(bookmark.start,false,filterFn);while(current&&current!==end&&domUtils.getPosition(current,end)&domUtils.POSITION_PRECEDING){var tmpNode=domUtils.getNextDomNode(current,false,filterFn);doFn(current);current=tmpNode}return this.moveToBookmark(bookmark)}}})();(function(){function getBoundaryInformation(range,start){var getIndex=domUtils.getNodeIndex;range=range.duplicate();range.collapse(start);var parent=range.parentElement();if(!parent.hasChildNodes()){return{container:parent,offset:0}}var siblings=parent.children,child,testRange=range.duplicate(),startIndex=0,endIndex=siblings.length-1,index=-1,distance;while(startIndex<=endIndex){index=Math.floor((startIndex+endIndex)/2);child=siblings[index];testRange.moveToElementText(child);var position=testRange.compareEndPoints(\"StartToStart\",range);if(position>0){endIndex=index-1}else if(position<0){startIndex=index+1}else{return{container:parent,offset:getIndex(child)}}}if(index==-1){testRange.moveToElementText(parent);testRange.setEndPoint(\"StartToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;siblings=parent.childNodes;if(!distance){child=siblings[siblings.length-1];return{container:child,offset:child.nodeValue.length}}var i=siblings.length;while(distance>0){distance-=siblings[--i].nodeValue.length}return{container:siblings[i],offset:-distance}}testRange.collapse(position>0);testRange.setEndPoint(position>0?\"StartToStart\":\"EndToStart\",range);distance=testRange.text.replace(/(\\r\\n|\\r)/g,\"\\n\").length;if(!distance){return dtd.$empty[child.tagName]||dtd.$nonChild[child.tagName]?{container:parent,offset:getIndex(child)+(position>0?0:1)}:{container:child,offset:position>0?0:child.childNodes.length}}while(distance>0){try{var pre=child;child=child[position>0?\"previousSibling\":\"nextSibling\"];distance-=child.nodeValue.length}catch(e){return{container:parent,offset:getIndex(pre)}}}return{container:child,offset:position>0?-distance:child.nodeValue.length+distance}}function transformIERangeToRange(ieRange,range){if(ieRange.item){range.selectNode(ieRange.item(0))}else{var bi=getBoundaryInformation(ieRange,true);range.setStart(bi.container,bi.offset);if(ieRange.compareEndPoints(\"StartToEnd\",ieRange)!=0){bi=getBoundaryInformation(ieRange,false);range.setEnd(bi.container,bi.offset)}}return range}function _getIERange(sel){var ieRange;try{ieRange=sel.getNative().createRange()}catch(e){return null}var el=ieRange.item?ieRange.item(0):ieRange.parentElement();if((el.ownerDocument||el)===sel.document){return ieRange}return null}var Selection=dom.Selection=function(doc){var me=this,iframe;me.document=doc;if(browser.ie9below){iframe=domUtils.getWindow(doc).frameElement;domUtils.on(iframe,\"beforedeactivate\",function(){me._bakIERange=me.getIERange()});domUtils.on(iframe,\"activate\",function(){try{if(!_getIERange(me)&&me._bakIERange){me._bakIERange.select()}}catch(ex){}me._bakIERange=null})}iframe=doc=null};Selection.prototype={rangeInBody:function(rng,txtRange){var node=browser.ie9below||txtRange?rng.item?rng.item():rng.parentElement():rng.startContainer;return node===this.document.body||domUtils.inDoc(node,this.document)},getNative:function(){var doc=this.document;try{return!doc?null:browser.ie9below?doc.selection:domUtils.getWindow(doc).getSelection()}catch(e){return null}},getIERange:function(){var ieRange=_getIERange(this);if(!ieRange){if(this._bakIERange){return this._bakIERange}}return ieRange},cache:function(){this.clear();this._cachedRange=this.getRange();this._cachedStartElement=this.getStart();this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath){return this._cachedStartElementPath}var start=this.getStart();if(start){return domUtils.findParents(start,true,null,true)}return[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(browser.ie9below){var nativeRange=_getIERange(this);return!!(nativeRange&&this.rangeInBody(nativeRange))}else{return!!this.getNative().rangeCount}}catch(e){return false}},getRange:function(){var me=this;function optimze(range){var child=me.document.body.firstChild,collapsed=range.collapsed;while(child&&child.firstChild){range.setStart(child,0);child=child.firstChild}if(!range.startContainer){range.setStart(me.document.body,0)}if(collapsed){range.collapse(true)}}if(me._cachedRange!=null){return this._cachedRange}var range=new baidu.editor.dom.Range(me.document);if(browser.ie9below){var nativeRange=me.getIERange();if(nativeRange){try{transformIERangeToRange(nativeRange,range)}catch(e){optimze(range)}}else{optimze(range)}}else{var sel=me.getNative();if(sel&&sel.rangeCount){var firstRange=sel.getRangeAt(0);var lastRange=sel.getRangeAt(sel.rangeCount-1);range.setStart(firstRange.startContainer,firstRange.startOffset).setEnd(lastRange.endContainer,lastRange.endOffset);if(range.collapsed&&domUtils.isBody(range.startContainer)&&!range.startOffset){optimze(range)}}else{if(this._bakRange&&domUtils.inDoc(this._bakRange.startContainer,this.document)){return this._bakRange}optimze(range)}}return this._bakRange=range},getStart:function(){if(this._cachedStartElement){return this._cachedStartElement}var range=browser.ie9below?this.getIERange():this.getRange(),tmpRange,start,tmp,parent;if(browser.ie9below){if(!range){return this.document.body.firstChild}if(range.item){return range.item(0)}tmpRange=range.duplicate();tmpRange.text.length>0&&tmpRange.moveStart(\"character\",1);tmpRange.collapse(1);start=tmpRange.parentElement();parent=tmp=range.parentElement();while(tmp=tmp.parentNode){if(tmp==start){start=parent;break}}}else{range.shrinkBoundary();start=range.startContainer;if(start.nodeType==1&&start.hasChildNodes()){start=start.childNodes[Math.min(start.childNodes.length-1,range.startOffset)]}if(start.nodeType==3){return start.parentNode}}return start},getText:function(){var nativeSel,nativeRange;if(this.isFocus()&&(nativeSel=this.getNative())){nativeRange=browser.ie9below?nativeSel.createRange():nativeSel.getRangeAt(0);return browser.ie9below?nativeRange.text:nativeRange.toString()}return\"\"},clearRange:function(){this.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]()}}})();(function(){var uid=0,_selectionChangeTimer;function setValue(form,editor){if(!editor.options.textarea){return}var textarea;textarea=editor.textarea;if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.id===\"ueditor_textarea_\"+editor.options.textarea})[0]}if(!textarea){textarea=domUtils.getElementsByTagName(form,\"textarea\",function(node){return node.name===editor.options.textarea})[0]}if(!textarea){form.appendChild(textarea=domUtils.createElement(document,\"textarea\",{name:editor.options.textarea,id:\"ueditor_textarea_\"+editor.options.textarea,style:\"display:none\"}))}if(textarea&&!editor.textarea){editor.textarea=textarea}!textarea.getAttribute(\"name\")&&textarea.setAttribute(\"name\",editor.options.textarea);textarea.value=editor.hasContents()?editor.options.allHtmlEnabled?editor.getAllHtml():editor.getContent(null,null,true):\"\"}function loadPlugins(me){for(var pi in UE.plugins){UE.plugins[pi].call(me)}}function checkCurLang(I18N){for(var lang in I18N){return lang}}function langReadied(me){me.langIsReady=true;me.fireEvent(\"langReady\")}var Editor=UE.Editor=function(options){var me=this;me.uid=uid++;EventBase.call(me);me.commands={};me.options=utils.extend(utils.clone(options||{}),UEDITOR_CONFIG,true);me.shortcutkeys={};me.inputRules=[];me.outputRules=[];me.setOpt(Editor.defaultOptions(me));me.loadServerConfig();if(!utils.isEmptyObject(UE.I18N)){me.options.lang=checkCurLang(UE.I18N);UE.plugin.load(me);langReadied(me)}else{utils.loadFile(document,{src:me.options.langPath+me.options.lang+\"/\"+me.options.lang+\".js?7a537435\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){UE.plugin.load(me);langReadied(me)})}UE.instants[\"ueditorInstant\"+me.uid]=me};Editor.prototype={registerCommand:function(name,obj){this.commands[name]=obj},ready:function(fn){var me=this;if(fn){me.isReady?fn.apply(me):me.addListener(\"ready\",fn)}},setOpt:function(key,val){var obj={};if(utils.isString(key)){obj[key]=val}else{obj=key}utils.extend(this.options,obj,true)},getOpt:function(key){return this.options[key]},destroy:function(){var me=this;me.fireEvent(\"destroy\");var container=me.container.parentNode;var textarea=me.textarea;if(!textarea){textarea=document.createElement(\"textarea\");container.parentNode.insertBefore(textarea,container)}else{textarea.style.display=\"\"}textarea.style.width=me.iframe.offsetWidth+\"px\";textarea.style.height=me.iframe.offsetHeight+\"px\";textarea.value=me.getContent();textarea.id=me.key;container.innerHTML=\"\";domUtils.remove(container);var key=me.key;for(var p in me){if(me.hasOwnProperty(p)){delete this[p]}}UE.delEditor(key)},render:function(container){var me=this,options=me.options,getStyleValue=function(attr){return parseInt(domUtils.getComputedStyle(container,attr))};if(utils.isString(container)){container=document.getElementById(container)}if(container){if(options.initialFrameWidth){options.minFrameWidth=options.initialFrameWidth}else{options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(options.initialFrameHeight){options.minFrameHeight=options.initialFrameHeight}else{options.initialFrameHeight=options.minFrameHeight=container.offsetHeight}container.style.width=/%$/.test(options.initialFrameWidth)?\"100%\":options.initialFrameWidth-getStyleValue(\"padding-left\")-getStyleValue(\"padding-right\")+\"px\";container.style.height=/%$/.test(options.initialFrameHeight)?\"100%\":options.initialFrameHeight-getStyleValue(\"padding-top\")-getStyleValue(\"padding-bottom\")+\"px\";container.style.zIndex=options.zIndex;var additionCssHtml=[];for(var i in options.iframeCssUrlsAddition){additionCssHtml.push(\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrlsAddition[i])+\"'/>\")}var html=(ie&&browser.version<9?\"\":\"<!DOCTYPE html>\")+\"<html xmlns='http://www.w3.org/1999/xhtml' class='view' >\"+\"<head>\"+\"<style type='text/css'>\"+\".view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\n\"+\"body{margin:8px;font-family:sans-serif;font-size:16px;}\"+\"p{margin:5px 0;}</style>\"+(options.iframeCssUrl?\"<link rel='stylesheet' type='text/css' href='\"+utils.unhtml(options.iframeCssUrl)+\"'/>\":\"\")+(options.initialStyle?\"<style>\"+options.initialStyle+\"</style>\":\"\")+additionCssHtml.join(\"\")+\"</head>\"+\"<body class='view' ></body>\"+\"<script type='text/javascript' \"+(ie?\"defer='defer'\":\"\")+\" id='_initialScript'>\"+\"setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\"+me.uid+\"'];editor._setup(document);},0);\"+\"var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);\"+\"<\\/script>\"+(options.iframeJsUrl?\"<script type='text/javascript' src='\"+utils.unhtml(options.iframeJsUrl)+\"'><\\/script>\":\"\")+\"</html>\";container.appendChild(domUtils.createElement(document,\"iframe\",{id:\"ueditor_\"+me.uid,width:\"100%\",height:\"100%\",frameborder:\"0\",src:\"javascript:void(function(){document.open();\"+(options.customDomain&&document.domain!=location.hostname?'document.domain=\"'+document.domain+'\";':\"\")+'document.write(\"'+html+'\");document.close();}())'}));container.style.overflow=\"hidden\";setTimeout(function(){if(/%$/.test(options.initialFrameWidth)){options.minFrameWidth=options.initialFrameWidth=container.offsetWidth}if(/%$/.test(options.initialFrameHeight)){options.minFrameHeight=options.initialFrameHeight=container.offsetHeight;container.style.height=options.initialFrameHeight+\"px\"}})}},_setup:function(doc){var me=this,options=me.options;if(ie){doc.body.disabled=true;doc.body.contentEditable=true;doc.body.disabled=false}else{doc.body.contentEditable=true}doc.body.spellcheck=false;me.document=doc;me.window=doc.defaultView||doc.parentWindow;me.iframe=me.window.frameElement;me.body=doc.body;me.selection=new dom.Selection(doc);var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}this._initEvents();for(var form=this.iframe.parentNode;!domUtils.isBody(form);form=form.parentNode){if(form.tagName===\"FORM\"){me.form=form;if(me.options.autoSyncData){domUtils.on(me.window,\"blur\",function(){setValue(form,me)});domUtils.on(form,\"submit\",function(){me.fireEvent(\"beforesubmit\")})}else{domUtils.on(form,\"submit\",function(){setValue(this,me);me.fireEvent(\"beforesubmit\")})}break}}if(options.initialContent){if(options.autoClearinitialContent){var oldExecCommand=me.execCommand;me.execCommand=function(){me.fireEvent(\"firstBeforeExecCommand\");return oldExecCommand.apply(me,arguments)};this._setDefaultContent(options.initialContent)}else this.setContent(options.initialContent,false,true)}if(domUtils.isEmptyNode(me.body)){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"}if(options.focus){setTimeout(function(){me.focus(me.options.focusInEnd);!me.options.autoClearinitialContent&&me._selectionChange()},0)}if(!me.container){me.container=this.iframe.parentNode}if(options.fullscreen&&me.ui){me.ui.setFullScreen(true)}try{me.document.execCommand(\"2D-position\",false,false)}catch(e){}try{me.document.execCommand(\"enableInlineTableEditing\",false,false)}catch(e){}try{me.document.execCommand(\"enableObjectResizing\",false,false)}catch(e){}me._bindshortcutKeys();me.isReady=1;me.fireEvent(\"ready\");options.onready&&options.onready.call(me);if(!browser.ie9below){domUtils.on(me.window,[\"blur\",\"focus\"],function(e){if(e.type==\"blur\"){me._bakRange=me.selection.getRange();try{me._bakNativeRange=me.selection.getNative().getRangeAt(0);me.selection.getNative().removeAllRanges()}catch(e){me._bakNativeRange=null}}else{try{me._bakRange&&me._bakRange.select()}catch(e){}}})}if(browser.gecko&&browser.version<=10902){me.body.contentEditable=false;setTimeout(function(){me.body.contentEditable=true},100);setInterval(function(){me.body.style.height=me.iframe.offsetHeight-20+\"px\"},100)}!options.isShow&&me.setHide();options.readonly&&me.setDisabled()},sync:function(formId){var me=this,form=formId?document.getElementById(formId):domUtils.findParent(me.iframe.parentNode,function(node){return node.tagName===\"FORM\"},true);form&&setValue(form,me)},syncCommandState:function(){this.fireEvent(\"selectionchange\")},setWidth:function(width){if(width!==parseInt(this.iframe.parentNode.parentNode.style.width)){this.iframe.parentNode.parentNode.style.width=width+\"px\"}},setHeight:function(height,notSetHeight){if(height!==parseInt(this.iframe.parentNode.style.height)){this.iframe.parentNode.style.height=height+\"px\"}!notSetHeight&&(this.options.minFrameHeight=this.options.initialFrameHeight=height);this.body.style.height=height+\"px\";!notSetHeight&&this.trigger(\"setHeight\")},addshortcutkey:function(cmd,keys){var obj={};if(keys){obj[cmd]=keys}else{obj=cmd}utils.extend(this.shortcutkeys,obj)},_bindshortcutKeys:function(){var me=this,shortcutkeys=this.shortcutkeys;me.addListener(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;for(var i in shortcutkeys){var tmp=shortcutkeys[i].split(\",\");for(var t=0,ti;ti=tmp[t++];){ti=ti.split(\":\");var key=ti[0],param=ti[1];if(/^(ctrl)(\\+shift)?\\+(\\d+)$/.test(key.toLowerCase())||/^(\\d+)$/.test(key)){if((RegExp.$1==\"ctrl\"?e.ctrlKey||e.metaKey:0)&&(RegExp.$2!=\"\"?e[RegExp.$2.slice(1)+\"Key\"]:1)&&keyCode==RegExp.$3||keyCode==RegExp.$1){if(me.queryCommandState(i,param)!=-1)me.execCommand(i,param);domUtils.preventDefault(e)}}}}})},getContent:function(cmd,fn,notSetCursor,ignoreBlank,formatter){var me=this;if(cmd&&utils.isFunction(cmd)){fn=cmd;cmd=\"\"}if(fn?!fn():!this.hasContents()){return\"\"}me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML,ignoreBlank);me.filterOutputRule(root);me.fireEvent(\"aftergetcontent\",cmd,root);return root.toHtml(formatter)},getAllHtml:function(){var me=this,headHtml=[],html=\"\";me.fireEvent(\"getAllHtml\",headHtml);if(browser.ie&&browser.version>8){var headHtmlForIE9=\"\";utils.each(me.document.styleSheets,function(si){headHtmlForIE9+=si.href?'<link rel=\"stylesheet\" type=\"text/css\" href=\"'+si.href+'\" />':\"<style>\"+si.cssText+\"</style>\"});utils.each(me.document.getElementsByTagName(\"script\"),function(si){headHtmlForIE9+=si.outerHTML})}return\"<html><head>\"+(me.options.charset?'<meta http-equiv=\"Content-Type\" content=\"text/html; charset='+me.options.charset+'\"/>':\"\")+(headHtmlForIE9||me.document.getElementsByTagName(\"head\")[0].innerHTML)+headHtml.join(\"\\n\")+\"</head>\"+\"<body \"+(ie&&browser.version<9?'class=\"view\"':\"\")+\">\"+me.getContent(null,null,true)+\"</body></html>\"},getPlainTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\"),html=this.body.innerHTML.replace(/[\\n\\r]/g,\"\");html=html.replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi,\"\\n\").replace(/<br\\/?>/gi,\"\\n\").replace(/<[^>/]+>/g,\"\").replace(/(\\n)?<\\/([^>]+)>/g,function(a,b,c){return dtd.$block[c]?\"\\n\":b?b:\"\"});return html.replace(reg,\"\").replace(/\\u00a0/g,\" \").replace(/&nbsp;/g,\" \")},getContentTxt:function(){var reg=new RegExp(domUtils.fillChar,\"g\");return this.body[browser.ie?\"innerText\":\"textContent\"].replace(reg,\"\").replace(/\\u00a0/g,\" \")},setContent:function(html,isAppendTo,notFireSelectionchange){var me=this;me.fireEvent(\"beforesetcontent\",html);var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();me.body.innerHTML=(isAppendTo?me.body.innerHTML:\"\")+html;function isCdataDiv(node){return node.tagName==\"DIV\"&&node.getAttribute(\"cdata_tag\")}if(me.options.enterTag==\"p\"){var child=this.body.firstChild,tmpNode;if(!child||child.nodeType==1&&(dtd.$cdata[child.tagName]||isCdataDiv(child)||domUtils.isCustomeNode(child))&&child===this.body.lastChild){this.body.innerHTML=\"<p>\"+(browser.ie?\"&nbsp;\":\"<br/>\")+\"</p>\"+this.body.innerHTML}else{var p=me.document.createElement(\"p\");while(child){while(child&&(child.nodeType==3||child.nodeType==1&&dtd.p[child.tagName]&&!dtd.$cdata[child.tagName])){tmpNode=child.nextSibling;p.appendChild(child);child=tmpNode}if(p.firstChild){if(!child){me.body.appendChild(p);break}else{child.parentNode.insertBefore(p,child);p=me.document.createElement(\"p\")}}child=child.nextSibling}}}me.fireEvent(\"aftersetcontent\");me.fireEvent(\"contentchange\");!notFireSelectionchange&&me._selectionChange();me._bakRange=me._bakIERange=me._bakNativeRange=null;var geckoSel;if(browser.gecko&&(geckoSel=this.selection.getNative())){geckoSel.removeAllRanges()}if(me.options.autoSyncData){me.form&&setValue(me.form,me)}},focus:function(toEnd){try{var me=this,rng=me.selection.getRange();if(toEnd){var node=me.body.lastChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){if(domUtils.isEmptyBlock(node)){rng.setStartAtFirst(node)}else{rng.setStartAtLast(node)}rng.collapse(true)}rng.setCursor(true)}else{if(!rng.collapsed&&domUtils.isBody(rng.startContainer)&&rng.startOffset==0){var node=me.body.firstChild;if(node&&node.nodeType==1&&!dtd.$empty[node.tagName]){rng.setStartAtFirst(node).collapse(true)}}rng.select(true)}this.fireEvent(\"focus selectionchange\")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var sel=this.selection.getNative();if(sel.empty&&browser.ie){var nativeRng=document.body.createTextRange();nativeRng.moveToElementText(document.body);nativeRng.collapse(true);nativeRng.select();sel.empty()}else{sel.removeAllRanges()}},_initEvents:function(){var me=this,doc=me.document,win=me.window;me._proxyDomEvent=utils.bind(me._proxyDomEvent,me);domUtils.on(doc,[\"click\",\"contextmenu\",\"mousedown\",\"keydown\",\"keyup\",\"keypress\",\"mouseup\",\"mouseover\",\"mouseout\",\"selectstart\"],me._proxyDomEvent);domUtils.on(win,[\"focus\",\"blur\"],me._proxyDomEvent);domUtils.on(me.body,\"drop\",function(e){if(browser.gecko&&e.stopPropagation){e.stopPropagation()}me.fireEvent(\"contentchange\")});domUtils.on(me.body,\"dblclick\",function(e){try{var node=me.body.lastChild;if(!node){return}var rect=node.getBoundingClientRect();if(e.clientY>rect.top+rect.height){var p=document.createElement(\"p\");p.innerHTML=\"<br />\";me.body.appendChild(p);setTimeout(function(){me.focus(true)},100)}}catch(e){console.error(\"auto insert p at end\",e)}});domUtils.on(doc,[\"mouseup\",\"keydown\"],function(evt){if(evt.type===\"keydown\"&&(evt.ctrlKey||evt.metaKey||evt.shiftKey||evt.altKey)){return}if(evt.button===2)return;me._selectionChange(250,evt)})},_proxyDomEvent:function(evt){if(this.fireEvent(\"before\"+evt.type.replace(/^on/,\"\").toLowerCase())===false){return false}if(this.fireEvent(evt.type.replace(/^on/,\"\"),evt)===false){return false}return this.fireEvent(\"after\"+evt.type.replace(/^on/,\"\").toLowerCase())},_selectionChange:function(delay,evt){var me=this;var hackForMouseUp=false;var mouseX,mouseY;if(browser.ie&&browser.version<9&&evt&&evt.type==\"mouseup\"){var range=this.selection.getRange();if(!range.collapsed){hackForMouseUp=true;mouseX=evt.clientX;mouseY=evt.clientY}}clearTimeout(_selectionChangeTimer);_selectionChangeTimer=setTimeout(function(){if(!me.selection||!me.selection.getNative()){return}var ieRange;if(hackForMouseUp&&me.selection.getNative().type==\"None\"){ieRange=me.document.body.createTextRange();try{ieRange.moveToPoint(mouseX,mouseY)}catch(ex){ieRange=null}}var bakGetIERange;if(ieRange){bakGetIERange=me.selection.getIERange;me.selection.getIERange=function(){return ieRange}}me.selection.cache();if(bakGetIERange){me.selection.getIERange=bakGetIERange}if(me.selection._cachedRange&&me.selection._cachedStartElement){me.fireEvent(\"beforeselectionchange\");me.fireEvent(\"selectionchange\",!!evt);me.fireEvent(\"afterselectionchange\");me.selection.clear()}},delay||50)},_callCmdFn:function(fnName,args){var cmdName=args[0].toLowerCase(),cmd,cmdFn;cmd=this.commands[cmdName]||UE.commands[cmdName];cmdFn=cmd&&cmd[fnName];if((!cmd||!cmdFn)&&fnName==\"queryCommandState\"){return 0}else if(cmdFn){return cmdFn.apply(this,args)}},execCommand:function(cmdName){cmdName=cmdName.toLowerCase();var me=this,result,cmd=me.commands[cmdName]||UE.commands[cmdName];if(!cmd||!cmd.execCommand){return null}if(!cmd.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;if(me.queryCommandState.apply(me,arguments)!=-1){me.fireEvent(\"saveScene\");me.fireEvent.apply(me,[\"beforeexeccommand\",cmdName].concat(arguments));result=this._callCmdFn(\"execCommand\",arguments);me.fireEvent.apply(me,[\"afterexeccommand\",cmdName].concat(arguments));me.fireEvent(\"saveScene\")}me.__hasEnterExecCommand=false}else{result=this._callCmdFn(\"execCommand\",arguments);!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me.fireEvent(\"contentchange\")}!me.__hasEnterExecCommand&&!cmd.ignoreContentChange&&!me._ignoreContentChange&&me._selectionChange();return result},queryCommandState:function(cmdName){return this._callCmdFn(\"queryCommandState\",arguments)},queryCommandValue:function(cmdName){return this._callCmdFn(\"queryCommandValue\",arguments)},hasContents:function(tags){if(tags){for(var i=0,ci;ci=tags[i++];){if(this.document.getElementsByTagName(ci).length>0){return true}}}if(!domUtils.isEmptyBlock(this.body)){return true}tags=[\"div\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){if(domUtils.isCustomeNode(cn)){return true}}}tags=[\"video\",\"iframe\"];for(i=0;ci=tags[i++];){var nodes=domUtils.getElementsByTagName(this.document,ci);for(var n=0,cn;cn=nodes[n++];){return true}}return false},reset:function(){this.clear();this.fireEvent(\"reset\")},clear:function(){this.setContent(\"\")},setEnabled:function(){var me=this,range;if(me.body.contentEditable===\"false\"){me.body.contentEditable=true;range=me.selection.getRange();try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}range.select(true);if(me.bkqueryCommandState){me.queryCommandState=me.bkqueryCommandState;delete me.bkqueryCommandState}if(me.bkqueryCommandValue){me.queryCommandValue=me.bkqueryCommandValue;delete me.bkqueryCommandValue}me.fireEvent(\"selectionchange\")}},enable:function(){return this.setEnabled()},setDisabled:function(except){var me=this;except=except?utils.isArray(except)?except:[except]:[];if(me.body.contentEditable==\"true\"){if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.body.contentEditable=false;me.bkqueryCommandState=me.queryCommandState;me.bkqueryCommandValue=me.queryCommandValue;me.queryCommandState=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandState.apply(me,arguments)}return-1};me.queryCommandValue=function(type){if(utils.indexOf(except,type)!=-1){return me.bkqueryCommandValue.apply(me,arguments)}return null};me.fireEvent(\"selectionchange\")}},disable:function(except){return this.setDisabled(except)},_setDefaultContent:function(){function clear(){var me=this;if(me.document.getElementById(\"initContent\")){me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";me.removeListener(\"firstBeforeExecCommand focus\",clear);setTimeout(function(){me.focus();me._selectionChange()},0)}}return function(cont){var me=this;me.body.innerHTML='<p id=\"initContent\">'+cont+\"</p>\";me.addListener(\"firstBeforeExecCommand focus\",clear)}}(),setShow:function(){var me=this,range=me.selection.getRange();if(me.container.style.display==\"none\"){try{range.moveToBookmark(me.lastBk);delete me.lastBk}catch(e){range.setStartAtFirst(me.body).collapse(true)}setTimeout(function(){range.select(true)},100);me.container.style.display=\"\"}},show:function(){return this.setShow()},setHide:function(){var me=this;if(!me.lastBk){me.lastBk=me.selection.getRange().createBookmark(true)}me.container.style.display=\"none\"},hide:function(){return this.setHide()},getLang:function(path){var lang=UE.I18N[this.options.lang];if(!lang){throw Error(\"not import language file\")}path=(path||\"\").split(\".\");for(var i=0,ci;ci=path[i++];){lang=lang[ci];if(!lang)break}return lang},getContentLength:function(ingoneHtml,tagNames){var count=this.getContent(false,false,true).length;if(ingoneHtml){tagNames=(tagNames||[]).concat([\"hr\",\"img\",\"iframe\"]);count=this.getContentTxt().replace(/[\\t\\r\\n]+/g,\"\").length;for(var i=0,ci;ci=tagNames[i++];){count+=this.document.getElementsByTagName(ci).length}}return count},getScrollTop:function(){return Math.max(this.document.documentElement.scrollTop,this.document.body.scrollTop)},getScrollLeft:function(){return Math.max(this.document.documentElement.scrollLeft,this.document.body.scrollLeft)},addInputRule:function(rule){this.inputRules.push(rule)},filterInputRule:function(root){for(var i=0,ci;ci=this.inputRules[i++];){ci.call(this,root)}},addOutputRule:function(rule){this.outputRules.push(rule)},filterOutputRule:function(root){for(var i=0,ci;ci=this.outputRules[i++];){ci.call(this,root)}},getActionUrl:function(action){var serverUrl=this.getOpt(\"serverUrl\");if(!action){return serverUrl}var actionName=this.getOpt(action)||action,imageUrl=this.getOpt(\"imageUrl\");if(!serverUrl&&imageUrl){serverUrl=imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\")}if(serverUrl){serverUrl=serverUrl+(serverUrl.indexOf(\"?\")===-1?\"?\":\"&\")+\"action=\"+(actionName||\"\");return utils.formatUrl(serverUrl)}else{return\"\"}}};utils.inherits(Editor,EventBase)})();UE.Editor.defaultOptions=function(editor){var _url=editor.options.UEDITOR_HOME_URL;return{isShow:true,initialContent:\"\",initialStyle:\"\",autoClearinitialContent:false,iframeCssUrl:_url+\"themes/iframe.css?c20ec247\",iframeCssUrlsAddition:[],textarea:\"\",focus:false,focusInEnd:true,autoClearEmptyNode:true,fullscreen:false,readonly:false,zIndex:999,imagePopup:true,enterTag:\"p\",customDomain:false,lang:\"zh-cn\",langPath:_url+\"lang/\",theme:\"default\",themePath:_url+\"themes/\",allHtmlEnabled:false,scaleEnabled:false,tableNativeEditInFF:false,autoSyncData:true,fileNameFormat:\"{time}{rand:6}\"}};(function(){UE.Editor.prototype.loadServerConfig=function(){var me=this;setTimeout(function(){try{me.options.imageUrl&&me.setOpt(\"serverUrl\",me.options.imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/,\"$1controller$2\"));var configUrl=me.getActionUrl(\"config\"),isJsonp=utils.isCrossDomainUrl(configUrl);me._serverConfigLoaded=false;configUrl&&UE.ajax.request(configUrl,{method:\"GET\",dataType:isJsonp?\"jsonp\":\"\",headers:me.options.serverHeaders||{},onsuccess:function(r){try{var config=isJsonp?r:eval(\"(\"+r.responseText+\")\");me.options=utils.merge(me.options,config);me.fireEvent(\"serverConfigLoaded\");me._serverConfigLoaded=true}catch(e){showErrorMsg(me.getLang(\"loadconfigFormatError\"))}},onerror:function(){showErrorMsg(me.getLang(\"loadconfigHttpError\"))}})}catch(e){showErrorMsg(me.getLang(\"loadconfigError\"))}});function showErrorMsg(msg){console&&console.error(msg)}};UE.Editor.prototype.isServerConfigLoaded=function(){var me=this;return me._serverConfigLoaded||false};UE.Editor.prototype.afterConfigReady=function(handler){if(!handler||!utils.isFunction(handler))return;var me=this;var readyHandler=function(){handler.apply(me,arguments);me.removeListener(\"serverConfigLoaded\",readyHandler)};if(me.isServerConfigLoaded()){handler.call(me,\"serverConfigLoaded\")}else{me.addListener(\"serverConfigLoaded\",readyHandler)}}})();UE.ajax=function(){var fnStr=\"XMLHttpRequest()\";try{new ActiveXObject(\"Msxml2.XMLHTTP\");fnStr=\"ActiveXObject('Msxml2.XMLHTTP')\"}catch(e){try{new ActiveXObject(\"Microsoft.XMLHTTP\");fnStr=\"ActiveXObject('Microsoft.XMLHTTP')\"}catch(e){}}var creatAjaxRequest=new Function(\"return new \"+fnStr);function json2str(json){var strArr=[];for(var i in json){if(i==\"method\"||i==\"timeout\"||i==\"async\"||i==\"dataType\"||i==\"callback\")continue;if(json[i]==undefined||json[i]==null)continue;if(!((typeof json[i]).toLowerCase()==\"function\"||(typeof json[i]).toLowerCase()==\"object\")){strArr.push(encodeURIComponent(i)+\"=\"+encodeURIComponent(json[i]))}else if(utils.isArray(json[i])){for(var j=0;j<json[i].length;j++){strArr.push(encodeURIComponent(i)+\"[]=\"+encodeURIComponent(json[i][j]))}}}return strArr.join(\"&\")}function doAjax(url,ajaxOptions){var xhr=creatAjaxRequest(),timeIsOut=false,defaultAjaxOptions={method:\"POST\",timeout:5e3,async:true,headers:{},data:{},onsuccess:function(){},onerror:function(){}};if(typeof url===\"object\"){ajaxOptions=url;url=ajaxOptions.url}if(!xhr||!url)return;var ajaxOpts=ajaxOptions?utils.extend(defaultAjaxOptions,ajaxOptions):defaultAjaxOptions;var submitStr=json2str(ajaxOpts);if(!utils.isEmptyObject(ajaxOpts.data)){submitStr+=(submitStr?\"&\":\"\")+json2str(ajaxOpts.data)}var timerID=setTimeout(function(){if(xhr.readyState!==4){timeIsOut=true;xhr.abort();clearTimeout(timerID)}},ajaxOpts.timeout);var method=ajaxOpts.method.toUpperCase();var str=url+(url.indexOf(\"?\")===-1?\"?\":\"&\")+(method===\"POST\"?\"\":submitStr+\"&noCache=\"+ +new Date);xhr.open(method,str,ajaxOpts.async);xhr.onreadystatechange=function(){if(xhr.readyState===4){if(!timeIsOut&&xhr.status===200){ajaxOpts.onsuccess(xhr)}else{ajaxOpts.onerror(xhr)}}};if(ajaxOpts.headers){for(var key in ajaxOpts.headers){xhr.setRequestHeader(key,ajaxOpts.headers[key])}}if(method===\"POST\"){xhr.setRequestHeader(\"Content-Type\",\"application/x-www-form-urlencoded\");xhr.send(submitStr)}else{xhr.send(null)}}function doJsonp(url,opts){var successhandler=opts.onsuccess||function(){},scr=document.createElement(\"SCRIPT\"),options=opts||{},charset=options[\"charset\"],callbackField=options[\"jsonp\"]||\"callback\",callbackFnName,timeOut=options[\"timeOut\"]||0,timer,reg=new RegExp(\"(\\\\?|&)\"+callbackField+\"=([^&]*)\"),matches;if(utils.isFunction(successhandler)){callbackFnName=\"bd__editor__\"+Math.floor(Math.random()*2147483648).toString(36);window[callbackFnName]=getCallBack(0)}else if(utils.isString(successhandler)){callbackFnName=successhandler}else{if(matches=reg.exec(url)){callbackFnName=matches[2]}}url=url.replace(reg,\"$1\"+callbackField+\"=\"+callbackFnName);if(url.search(reg)<0){url+=(url.indexOf(\"?\")<0?\"?\":\"&\")+callbackField+\"=\"+callbackFnName}var queryStr=json2str(opts);if(!utils.isEmptyObject(opts.data)){queryStr+=(queryStr?\"&\":\"\")+json2str(opts.data)}if(queryStr){url=url.replace(/\\?/,\"?\"+queryStr+\"&\")}scr.onerror=getCallBack(1);if(timeOut){timer=setTimeout(getCallBack(1),timeOut)}createScriptTag(scr,url,charset);function createScriptTag(scr,url,charset){scr.setAttribute(\"type\",\"text/javascript\");scr.setAttribute(\"defer\",\"defer\");charset&&scr.setAttribute(\"charset\",charset);scr.setAttribute(\"src\",url);document.getElementsByTagName(\"head\")[0].appendChild(scr)}function getCallBack(onTimeOut){return function(){try{if(onTimeOut){options.onerror&&options.onerror()}else{try{clearTimeout(timer);successhandler.apply(window,arguments)}catch(e){}}}catch(exception){options.onerror&&options.onerror.call(window,exception)}finally{options.oncomplete&&options.oncomplete.apply(window,arguments);scr.parentNode&&scr.parentNode.removeChild(scr);window[callbackFnName]=null;try{delete window[callbackFnName]}catch(e){}}}}}return{request:function(url,opts){if(opts&&opts.dataType===\"jsonp\"){doJsonp(url,opts)}else{doAjax(url,opts)}},getJSONP:function(url,data,fn){var opts={data:data,oncomplete:fn};doJsonp(url,opts)}}}();UE.api=function(){var axios=null;!function(e,t){axios=t()}(this,function(){\"use strict\";function e(t){return e=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function n(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,\"value\"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function r(e,t,r){return t&&n(e.prototype,t),r&&n(e,r),Object.defineProperty(e,\"prototype\",{writable:!1}),e}function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:\"undefined\"!=typeof Symbol&&e[Symbol.iterator]||e[\"@@iterator\"];if(null==n)return;var r,o,i=[],a=!0,s=!1;try{for(n=n.call(e);!(a=(r=n.next()).done)&&(i.push(r.value),!t||i.length!==t);a=!0);}catch(e){s=!0,o=e}finally{try{a||null==n.return||n.return()}finally{if(s)throw o}}return i}(e,t)||function(e,t){if(!e)return;if(\"string\"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);\"Object\"===n&&e.constructor&&(n=e.constructor.name);if(\"Map\"===n||\"Set\"===n)return Array.from(e);if(\"Arguments\"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return i(e,t)}(e,t)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function a(e,t){return function(){return e.apply(t,arguments)}}var s,u=Object.prototype.toString,c=Object.getPrototypeOf,f=(s=Object.create(null),function(e){var t=u.call(e);return s[t]||(s[t]=t.slice(8,-1).toLowerCase())}),l=function(e){return e=e.toLowerCase(),function(t){return f(t)===e}},d=function(t){return function(n){return e(n)===t}},p=Array.isArray,h=d(\"undefined\");var m=l(\"ArrayBuffer\");var y=d(\"string\"),v=d(\"function\"),b=d(\"number\"),g=function(t){return null!==t&&\"object\"===e(t)},w=function(e){if(\"object\"!==f(e))return!1;var t=c(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||Symbol.toStringTag in e||Symbol.iterator in e)},E=l(\"Date\"),O=l(\"File\"),S=l(\"Blob\"),R=l(\"FileList\"),A=l(\"URLSearchParams\");function T(t,n){var r,o,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},a=i.allOwnKeys,s=void 0!==a&&a;if(null!=t)if(\"object\"!==e(t)&&(t=[t]),p(t))for(r=0,o=t.length;r<o;r++)n.call(null,t[r],r,t);else{var u,c=s?Object.getOwnPropertyNames(t):Object.keys(t),f=c.length;for(r=0;r<f;r++)u=c[r],n.call(null,t[u],u,t)}}function j(e,t){t=t.toLowerCase();for(var n,r=Object.keys(e),o=r.length;o-- >0;)if(t===(n=r[o]).toLowerCase())return n;return null}var N=\"undefined\"!=typeof globalThis?globalThis:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:global,C=function(e){return!h(e)&&e!==N};var x,P=(x=\"undefined\"!=typeof Uint8Array&&c(Uint8Array),function(e){return x&&e instanceof x}),k=l(\"HTMLFormElement\"),U=function(e){var t=Object.prototype.hasOwnProperty;return function(e,n){return t.call(e,n)}}(),_=l(\"RegExp\"),F=function(e,t){var n=Object.getOwnPropertyDescriptors(e),r={};T(n,function(n,o){!1!==t(n,o,e)&&(r[o]=n)}),Object.defineProperties(e,r)},B=\"abcdefghijklmnopqrstuvwxyz\",L=\"0123456789\",D={DIGIT:L,ALPHA:B,ALPHA_DIGIT:B+B.toUpperCase()+L};var I=l(\"AsyncFunction\"),q={isArray:p,isArrayBuffer:m,isBuffer:function(e){return null!==e&&!h(e)&&null!==e.constructor&&!h(e.constructor)&&v(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t;return e&&(\"function\"==typeof FormData&&e instanceof FormData||v(e.append)&&(\"formdata\"===(t=f(e))||\"object\"===t&&v(e.toString)&&\"[object FormData]\"===e.toString()))},isArrayBufferView:function(e){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&m(e.buffer)},isString:y,isNumber:b,isBoolean:function(e){return!0===e||!1===e},isObject:g,isPlainObject:w,isUndefined:h,isDate:E,isFile:O,isBlob:S,isRegExp:_,isFunction:v,isStream:function(e){return g(e)&&v(e.pipe)},isURLSearchParams:A,isTypedArray:P,isFileList:R,forEach:T,merge:function e(){for(var t=C(this)&&this||{},n=t.caseless,r={},o=function(t,o){var i=n&&j(r,o)||o;w(r[i])&&w(t)?r[i]=e(r[i],t):w(t)?r[i]=e({},t):p(t)?r[i]=t.slice():r[i]=t},i=0,a=arguments.length;i<a;i++)arguments[i]&&T(arguments[i],o);return r},extend:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=r.allOwnKeys;return T(t,function(t,r){n&&v(t)?e[r]=a(t,n):e[r]=t},{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,n,r){e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,\"super\",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:function(e,t,n,r){var o,i,a,s={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],r&&!r(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==n&&c(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},kindOf:f,kindOfTest:l,endsWith:function(e,t,n){e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;var r=e.indexOf(t,n);return-1!==r&&r===n},toArray:function(e){if(!e)return null;if(p(e))return e;var t=e.length;if(!b(t))return null;for(var n=new Array(t);t-- >0;)n[t]=e[t];return n},forEachEntry:function(e,t){for(var n,r=(e&&e[Symbol.iterator]).call(e);(n=r.next())&&!n.done;){var o=n.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var n,r=[];null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:k,hasOwnProperty:U,hasOwnProp:U,reduceDescriptors:F,freezeMethods:function(e){F(e,function(t,n){if(v(e)&&-1!==[\"arguments\",\"caller\",\"callee\"].indexOf(n))return!1;var r=e[n];v(r)&&(t.enumerable=!1,\"writable\"in t?t.writable=!1:t.set||(t.set=function(){throw Error(\"Can not rewrite read-only method '\"+n+\"'\")}))})},toObjectSet:function(e,t){var n={},r=function(e){e.forEach(function(e){n[e]=!0})};return p(e)?r(e):r(String(e).split(t)),n},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})},noop:function(){},toFiniteNumber:function(e,t){return e=+e,Number.isFinite(e)?e:t},findKey:j,global:N,isContextDefined:C,ALPHABET:D,generateString:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:16,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:D.ALPHA_DIGIT,n=\"\",r=t.length;e--;)n+=t[Math.random()*r|0];return n},isSpecCompliantForm:function(e){return!!(e&&v(e.append)&&\"FormData\"===e[Symbol.toStringTag]&&e[Symbol.iterator])},toJSONObject:function(e){var t=new Array(10);return function e(n,r){if(g(n)){if(t.indexOf(n)>=0)return;if(!(\"toJSON\"in n)){t[r]=n;var o=p(n)?[]:{};return T(n,function(t,n){var i=e(t,r+1);!h(i)&&(o[n]=i)}),t[r]=void 0,o}}return n}(e,0)},isAsyncFn:I,isThenable:function(e){return e&&(g(e)||v(e))&&v(e.then)&&v(e.catch)}};function M(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name=\"AxiosError\",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o)}q.inherits(M,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:q.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var z=M.prototype,H={};[\"ERR_BAD_OPTION_VALUE\",\"ERR_BAD_OPTION\",\"ECONNABORTED\",\"ETIMEDOUT\",\"ERR_NETWORK\",\"ERR_FR_TOO_MANY_REDIRECTS\",\"ERR_DEPRECATED\",\"ERR_BAD_RESPONSE\",\"ERR_BAD_REQUEST\",\"ERR_CANCELED\",\"ERR_NOT_SUPPORT\",\"ERR_INVALID_URL\"].forEach(function(e){H[e]={value:e}}),Object.defineProperties(M,H),Object.defineProperty(z,\"isAxiosError\",{value:!0}),M.from=function(e,t,n,r,o,i){var a=Object.create(z);return q.toFlatObject(e,a,function(e){return e!==Error.prototype},function(e){return\"isAxiosError\"!==e}),M.call(a,e.message,t,n,r,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function J(e){return q.isPlainObject(e)||q.isArray(e)}function W(e){return q.endsWith(e,\"[]\")?e.slice(0,-2):e}function K(e,t,n){return e?e.concat(t).map(function(e,t){return e=W(e),!n&&t?\"[\"+e+\"]\":e}).join(n?\".\":\"\"):t}var V=q.toFlatObject(q,{},null,function(e){return/^is[A-Z]/.test(e)});function G(t,n,r){if(!q.isObject(t))throw new TypeError(\"target must be an object\");n=n||new FormData;var o=(r=q.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,function(e,t){return!q.isUndefined(t[e])})).metaTokens,i=r.visitor||f,a=r.dots,s=r.indexes,u=(r.Blob||\"undefined\"!=typeof Blob&&Blob)&&q.isSpecCompliantForm(n);if(!q.isFunction(i))throw new TypeError(\"visitor must be a function\");function c(e){if(null===e)return\"\";if(q.isDate(e))return e.toISOString();if(!u&&q.isBlob(e))throw new M(\"Blob is not supported. Use a Buffer instead.\");return q.isArrayBuffer(e)||q.isTypedArray(e)?u&&\"function\"==typeof Blob?new Blob([e]):Buffer.from(e):e}function f(t,r,i){var u=t;if(t&&!i&&\"object\"===e(t))if(q.endsWith(r,\"{}\"))r=o?r:r.slice(0,-2),t=JSON.stringify(t);else if(q.isArray(t)&&function(e){return q.isArray(e)&&!e.some(J)}(t)||(q.isFileList(t)||q.endsWith(r,\"[]\"))&&(u=q.toArray(t)))return r=W(r),u.forEach(function(e,t){!q.isUndefined(e)&&null!==e&&n.append(!0===s?K([r],t,a):null===s?r:r+\"[]\",c(e))}),!1;return!!J(t)||(n.append(K(i,r,a),c(t)),!1)}var l=[],d=Object.assign(V,{defaultVisitor:f,convertValue:c,isVisitable:J});if(!q.isObject(t))throw new TypeError(\"data must be an object\");return function e(t,r){if(!q.isUndefined(t)){if(-1!==l.indexOf(t))throw Error(\"Circular reference detected in \"+r.join(\".\"));l.push(t),q.forEach(t,function(t,o){!0===(!(q.isUndefined(t)||null===t)&&i.call(n,t,q.isString(o)?o.trim():o,r,d))&&e(t,r?r.concat(o):[o])}),l.pop()}}(t),n}function $(e){var t={\"!\":\"%21\",\"'\":\"%27\",\"(\":\"%28\",\")\":\"%29\",\"~\":\"%7E\",\"%20\":\"+\",\"%00\":\"\\0\"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(e){return t[e]})}function X(e,t){this._pairs=[],e&&G(e,this,t)}var Q=X.prototype;function Z(e){return encodeURIComponent(e).replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}function Y(e,t,n){if(!t)return e;var r,o=n&&n.encode||Z,i=n&&n.serialize;if(r=i?i(t,n):q.isURLSearchParams(t)?t.toString():new X(t,n).toString(o)){var a=e.indexOf(\"#\");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf(\"?\")?\"?\":\"&\")+r}return e}Q.append=function(e,t){this._pairs.push([e,t])},Q.toString=function(e){var t=e?function(t){return e.call(this,t,$)}:$;return this._pairs.map(function(e){return t(e[0])+\"=\"+t(e[1])},\"\").join(\"&\")};var ee,te=function(){function e(){t(this,e),this.handlers=[]}return r(e,[{key:\"use\",value:function(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}},{key:\"eject\",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:\"clear\",value:function(){this.handlers&&(this.handlers=[])}},{key:\"forEach\",value:function(e){q.forEach(this.handlers,function(t){null!==t&&e(t)})}}]),e}(),ne={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},re={isBrowser:!0,classes:{URLSearchParams:\"undefined\"!=typeof URLSearchParams?URLSearchParams:X,FormData:\"undefined\"!=typeof FormData?FormData:null,Blob:\"undefined\"!=typeof Blob?Blob:null},isStandardBrowserEnv:(\"undefined\"==typeof navigator||\"ReactNative\"!==(ee=navigator.product)&&\"NativeScript\"!==ee&&\"NS\"!==ee)&&\"undefined\"!=typeof window&&\"undefined\"!=typeof document,isStandardBrowserWebWorkerEnv:\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&\"function\"==typeof self.importScripts,protocols:[\"http\",\"https\",\"file\",\"blob\",\"url\",\"data\"]};function oe(e){function t(e,n,r,o){var i=e[o++],a=Number.isFinite(+i),s=o>=e.length;return i=!i&&q.isArray(r)?r.length:i,s?(q.hasOwnProp(r,i)?r[i]=[r[i],n]:r[i]=n,!a):(r[i]&&q.isObject(r[i])||(r[i]=[]),t(e,n,r[i],o)&&q.isArray(r[i])&&(r[i]=function(e){var t,n,r={},o=Object.keys(e),i=o.length;for(t=0;t<i;t++)r[n=o[t]]=e[n];return r}(r[i])),!a)}if(q.isFormData(e)&&q.isFunction(e.entries)){var n={};return q.forEachEntry(e,function(e,r){t(function(e){return q.matchAll(/\\w+|\\[(\\w*)]/g,e).map(function(e){return\"[]\"===e[0]?\"\":e[1]||e[0]})}(e),r,n,0)}),n}return null}var ie={\"Content-Type\":void 0};var ae={transitional:ne,adapter:[\"xhr\",\"http\"],transformRequest:[function(e,t){var n,r=t.getContentType()||\"\",o=r.indexOf(\"application/json\")>-1,i=q.isObject(e);if(i&&q.isHTMLForm(e)&&(e=new FormData(e)),q.isFormData(e))return o&&o?JSON.stringify(oe(e)):e;if(q.isArrayBuffer(e)||q.isBuffer(e)||q.isStream(e)||q.isFile(e)||q.isBlob(e))return e;if(q.isArrayBufferView(e))return e.buffer;if(q.isURLSearchParams(e))return t.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\",!1),e.toString();if(i){if(r.indexOf(\"application/x-www-form-urlencoded\")>-1)return function(e,t){return G(e,new re.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return re.isNode&&q.isBuffer(e)?(this.append(t,e.toString(\"base64\")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((n=q.isFileList(e))||r.indexOf(\"multipart/form-data\")>-1){var a=this.env&&this.env.FormData;return G(n?{\"files[]\":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType(\"application/json\",!1),function(e,t,n){if(q.isString(e))try{return(t||JSON.parse)(e),q.trim(e)}catch(e){if(\"SyntaxError\"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||ae.transitional,n=t&&t.forcedJSONParsing,r=\"json\"===this.responseType;if(e&&q.isString(e)&&(n&&!this.responseType||r)){var o=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(o){if(\"SyntaxError\"===e.name)throw M.from(e,M.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,maxBodyLength:-1,env:{FormData:re.classes.FormData,Blob:re.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:\"application/json, text/plain, */*\"}}};q.forEach([\"delete\",\"get\",\"head\"],function(e){ae.headers[e]={}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){ae.headers[e]=q.merge(ie)});var se=ae,ue=q.toObjectSet([\"age\",\"authorization\",\"content-length\",\"content-type\",\"etag\",\"expires\",\"from\",\"host\",\"if-modified-since\",\"if-unmodified-since\",\"last-modified\",\"location\",\"max-forwards\",\"proxy-authorization\",\"referer\",\"retry-after\",\"user-agent\"]),ce=Symbol(\"internals\");function fe(e){return e&&String(e).trim().toLowerCase()}function le(e){return!1===e||null==e?e:q.isArray(e)?e.map(le):String(e)}function de(e,t,n,r,o){return q.isFunction(r)?r.call(this,t,n):(o&&(t=n),q.isString(t)?q.isString(r)?-1!==t.indexOf(r):q.isRegExp(r)?r.test(t):void 0:void 0)}var pe=function(e,n){function i(e){t(this,i),e&&this.set(e)}return r(i,[{key:\"set\",value:function(e,t,n){var r=this;function o(e,t,n){var o=fe(t);if(!o)throw new Error(\"header name must be a non-empty string\");var i=q.findKey(r,o);(!i||void 0===r[i]||!0===n||void 0===n&&!1!==r[i])&&(r[i||t]=le(e))}var i,a,s,u,c,f=function(e,t){return q.forEach(e,function(e,n){return o(e,n,t)})};return q.isPlainObject(e)||e instanceof this.constructor?f(e,t):q.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim())?f((c={},(i=e)&&i.split(\"\\n\").forEach(function(e){u=e.indexOf(\":\"),a=e.substring(0,u).trim().toLowerCase(),s=e.substring(u+1).trim(),!a||c[a]&&ue[a]||(\"set-cookie\"===a?c[a]?c[a].push(s):c[a]=[s]:c[a]=c[a]?c[a]+\", \"+s:s)}),c),t):null!=e&&o(t,e,n),this}},{key:\"get\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);if(n){var r=this[n];if(!t)return r;if(!0===t)return function(e){for(var t,n=Object.create(null),r=/([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;t=r.exec(e);)n[t[1]]=t[2];return n}(r);if(q.isFunction(t))return t.call(this,r,n);if(q.isRegExp(t))return t.exec(r);throw new TypeError(\"parser must be boolean|regexp|function\")}}}},{key:\"has\",value:function(e,t){if(e=fe(e)){var n=q.findKey(this,e);return!(!n||void 0===this[n]||t&&!de(0,this[n],n,t))}return!1}},{key:\"delete\",value:function(e,t){var n=this,r=!1;function o(e){if(e=fe(e)){var o=q.findKey(n,e);!o||t&&!de(0,n[o],o,t)||(delete n[o],r=!0)}}return q.isArray(e)?e.forEach(o):o(e),r}},{key:\"clear\",value:function(e){for(var t=Object.keys(this),n=t.length,r=!1;n--;){var o=t[n];e&&!de(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}},{key:\"normalize\",value:function(e){var t=this,n={};return q.forEach(this,function(r,o){var i=q.findKey(n,o);if(i)return t[i]=le(r),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g,function(e,t,n){return t.toUpperCase()+n})}(o):String(o).trim();a!==o&&delete t[o],t[a]=le(r),n[a]=!0}),this}},{key:\"concat\",value:function(){for(var e,t=arguments.length,n=new Array(t),r=0;r<t;r++)n[r]=arguments[r];return(e=this.constructor).concat.apply(e,[this].concat(n))}},{key:\"toJSON\",value:function(e){var t=Object.create(null);return q.forEach(this,function(n,r){null!=n&&!1!==n&&(t[r]=e&&q.isArray(n)?n.join(\", \"):n)}),t}},{key:Symbol.iterator,value:function(){return Object.entries(this.toJSON())[Symbol.iterator]()}},{key:\"toString\",value:function(){return Object.entries(this.toJSON()).map(function(e){var t=o(e,2);return t[0]+\": \"+t[1]}).join(\"\\n\")}},{key:Symbol.toStringTag,get:function(){return\"AxiosHeaders\"}}],[{key:\"from\",value:function(e){return e instanceof this?e:new this(e)}},{key:\"concat\",value:function(e){for(var t=new this(e),n=arguments.length,r=new Array(n>1?n-1:0),o=1;o<n;o++)r[o-1]=arguments[o];return r.forEach(function(e){return t.set(e)}),t}},{key:\"accessor\",value:function(e){var t=(this[ce]=this[ce]={accessors:{}}).accessors,n=this.prototype;function r(e){var r=fe(e);t[r]||(!function(e,t){var n=q.toCamelCase(\" \"+t);[\"get\",\"set\",\"has\"].forEach(function(r){Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})})}(n,e),t[r]=!0)}return q.isArray(e)?e.forEach(r):r(e),this}}]),i}();pe.accessor([\"Content-Type\",\"Content-Length\",\"Accept\",\"Accept-Encoding\",\"User-Agent\",\"Authorization\"]),q.freezeMethods(pe.prototype),q.freezeMethods(pe);var he=pe;function me(e,t){var n=this||se,r=t||n,o=he.from(r.headers),i=r.data;return q.forEach(e,function(e){i=e.call(n,i,o.normalize(),t?t.status:void 0)}),o.normalize(),i}function ye(e){return!(!e||!e.__CANCEL__)}function ve(e,t,n){M.call(this,null==e?\"canceled\":e,M.ERR_CANCELED,t,n),this.name=\"CanceledError\"}q.inherits(ve,M,{__CANCEL__:!0});var be=re.isStandardBrowserEnv?{write:function(e,t,n,r,o,i){var a=[];a.push(e+\"=\"+encodeURIComponent(t)),q.isNumber(n)&&a.push(\"expires=\"+new Date(n).toGMTString()),q.isString(r)&&a.push(\"path=\"+r),q.isString(o)&&a.push(\"domain=\"+o),!0===i&&a.push(\"secure\"),document.cookie=a.join(\"; \")},read:function(e){var t=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+e+\")=([^;]*)\"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,\"\",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}};function ge(e,t){return e&&!/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(t)?function(e,t){return t?e.replace(/\\/+$/,\"\")+\"/\"+t.replace(/^\\/+/,\"\"):e}(e,t):t}var we=re.isStandardBrowserEnv?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),n=document.createElement(\"a\");function r(e){var r=e;return t&&(n.setAttribute(\"href\",r),r=n.href),n.setAttribute(\"href\",r),{href:n.href,protocol:n.protocol?n.protocol.replace(/:$/,\"\"):\"\",host:n.host,search:n.search?n.search.replace(/^\\?/,\"\"):\"\",hash:n.hash?n.hash.replace(/^#/,\"\"):\"\",hostname:n.hostname,port:n.port,pathname:\"/\"===n.pathname.charAt(0)?n.pathname:\"/\"+n.pathname}}return e=r(window.location.href),function(t){var n=q.isString(t)?r(t):t;return n.protocol===e.protocol&&n.host===e.host}}():function(){return!0};function Ee(e,t){var n=0,r=function(e,t){e=e||10;var n,r=new Array(e),o=new Array(e),i=0,a=0;return t=void 0!==t?t:1e3,function(s){var u=Date.now(),c=o[a];n||(n=u),r[i]=s,o[i]=u;for(var f=a,l=0;f!==i;)l+=r[f++],f%=e;if((i=(i+1)%e)===a&&(a=(a+1)%e),!(u-n<t)){var d=c&&u-c;return d?Math.round(1e3*l/d):void 0}}}(50,250);return function(o){var i=o.loaded,a=o.lengthComputable?o.total:void 0,s=i-n,u=r(s);n=i;var c={loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:o};c[t?\"download\":\"upload\"]=!0,e(c)}}var Oe={http:null,xhr:\"undefined\"!=typeof XMLHttpRequest&&function(e){return new Promise(function(t,n){var r,o=e.data,i=he.from(e.headers).normalize(),a=e.responseType;function s(){e.cancelToken&&e.cancelToken.unsubscribe(r),e.signal&&e.signal.removeEventListener(\"abort\",r)}q.isFormData(o)&&(re.isStandardBrowserEnv||re.isStandardBrowserWebWorkerEnv?i.setContentType(!1):i.setContentType(\"multipart/form-data;\",!1));var u=new XMLHttpRequest;if(e.auth){var c=e.auth.username||\"\",f=e.auth.password?unescape(encodeURIComponent(e.auth.password)):\"\";i.set(\"Authorization\",\"Basic \"+btoa(c+\":\"+f))}var l=ge(e.baseURL,e.url);function d(){if(u){var r=he.from(\"getAllResponseHeaders\"in u&&u.getAllResponseHeaders());!function(e,t,n){var r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new M(\"Request failed with status code \"+n.status,[M.ERR_BAD_REQUEST,M.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}(function(e){t(e),s()},function(e){n(e),s()},{data:a&&\"text\"!==a&&\"json\"!==a?u.response:u.responseText,status:u.status,statusText:u.statusText,headers:r,config:e,request:u}),u=null}}if(u.open(e.method.toUpperCase(),Y(l,e.params,e.paramsSerializer),!0),u.timeout=e.timeout,\"onloadend\"in u?u.onloadend=d:u.onreadystatechange=function(){u&&4===u.readyState&&(0!==u.status||u.responseURL&&0===u.responseURL.indexOf(\"file:\"))&&setTimeout(d)},u.onabort=function(){u&&(n(new M(\"Request aborted\",M.ECONNABORTED,e,u)),u=null)},u.onerror=function(){n(new M(\"Network Error\",M.ERR_NETWORK,e,u)),u=null},u.ontimeout=function(){var t=e.timeout?\"timeout of \"+e.timeout+\"ms exceeded\":\"timeout exceeded\",r=e.transitional||ne;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),n(new M(t,r.clarifyTimeoutError?M.ETIMEDOUT:M.ECONNABORTED,e,u)),u=null},re.isStandardBrowserEnv){var p=(e.withCredentials||we(l))&&e.xsrfCookieName&&be.read(e.xsrfCookieName);p&&i.set(e.xsrfHeaderName,p)}void 0===o&&i.setContentType(null),\"setRequestHeader\"in u&&q.forEach(i.toJSON(),function(e,t){u.setRequestHeader(t,e)}),q.isUndefined(e.withCredentials)||(u.withCredentials=!!e.withCredentials),a&&\"json\"!==a&&(u.responseType=e.responseType),\"function\"==typeof e.onDownloadProgress&&u.addEventListener(\"progress\",Ee(e.onDownloadProgress,!0)),\"function\"==typeof e.onUploadProgress&&u.upload&&u.upload.addEventListener(\"progress\",Ee(e.onUploadProgress)),(e.cancelToken||e.signal)&&(r=function(t){u&&(n(!t||t.type?new ve(null,e,u):t),u.abort(),u=null)},e.cancelToken&&e.cancelToken.subscribe(r),e.signal&&(e.signal.aborted?r():e.signal.addEventListener(\"abort\",r)));var h,m=(h=/^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(l))&&h[1]||\"\";m&&-1===re.protocols.indexOf(m)?n(new M(\"Unsupported protocol \"+m+\":\",M.ERR_BAD_REQUEST,e)):u.send(o||null)})}};q.forEach(Oe,function(e,t){if(e){try{Object.defineProperty(e,\"name\",{value:t})}catch(e){}Object.defineProperty(e,\"adapterName\",{value:t})}});var Se=function(e){for(var t,n,r=(e=q.isArray(e)?e:[e]).length,o=0;o<r&&(t=e[o],!(n=q.isString(t)?Oe[t.toLowerCase()]:t));o++);if(!n){if(!1===n)throw new M(\"Adapter \".concat(t,\" is not supported by the environment\"),\"ERR_NOT_SUPPORT\");throw new Error(q.hasOwnProp(Oe,t)?\"Adapter '\".concat(t,\"' is not available in the build\"):\"Unknown adapter '\".concat(t,\"'\"))}if(!q.isFunction(n))throw new TypeError(\"adapter is not a function\");return n};function Re(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new ve(null,e)}function Ae(e){return Re(e),e.headers=he.from(e.headers),e.data=me.call(e,e.transformRequest),-1!==[\"post\",\"put\",\"patch\"].indexOf(e.method)&&e.headers.setContentType(\"application/x-www-form-urlencoded\",!1),Se(e.adapter||se.adapter)(e).then(function(t){return Re(e),t.data=me.call(e,e.transformResponse,t),t.headers=he.from(t.headers),t},function(t){return ye(t)||(Re(e),t&&t.response&&(t.response.data=me.call(e,e.transformResponse,t.response),t.response.headers=he.from(t.response.headers))),Promise.reject(t)})}var Te=function(e){return e instanceof he?e.toJSON():e};function je(e,t){t=t||{};var n={};function r(e,t,n){return q.isPlainObject(e)&&q.isPlainObject(t)?q.merge.call({caseless:n},e,t):q.isPlainObject(t)?q.merge({},t):q.isArray(t)?t.slice():t}function o(e,t,n){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e,n):r(e,t,n)}function i(e,t){if(!q.isUndefined(t))return r(void 0,t)}function a(e,t){return q.isUndefined(t)?q.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function s(n,o,i){return i in t?r(n,o):i in e?r(void 0,n):void 0}var u={url:i,method:i,data:i,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:s,headers:function(e,t){return o(Te(e),Te(t),!0)}};return q.forEach(Object.keys(Object.assign({},e,t)),function(r){var i=u[r]||o,a=i(e[r],t[r],r);q.isUndefined(a)&&i!==s||(n[r]=a)}),n}var Ne=\"1.4.0\",Ce={};[\"object\",\"boolean\",\"number\",\"function\",\"string\",\"symbol\"].forEach(function(t,n){Ce[t]=function(r){return e(r)===t||\"a\"+(n<1?\"n \":\" \")+t}});var xe={};Ce.transitional=function(e,t,n){function r(e,t){return\"[Axios v1.4.0] Transitional option '\"+e+\"'\"+t+(n?\". \"+n:\"\")}return function(n,o,i){if(!1===e)throw new M(r(o,\" has been removed\"+(t?\" in \"+t:\"\")),M.ERR_DEPRECATED);return t&&!xe[o]&&(xe[o]=!0,console.warn(r(o,\" has been deprecated since v\"+t+\" and will be removed in the near future\"))),!e||e(n,o,i)}};var Pe={assertOptions:function(t,n,r){if(\"object\"!==e(t))throw new M(\"options must be an object\",M.ERR_BAD_OPTION_VALUE);for(var o=Object.keys(t),i=o.length;i-- >0;){var a=o[i],s=n[a];if(s){var u=t[a],c=void 0===u||s(u,a,t);if(!0!==c)throw new M(\"option \"+a+\" must be \"+c,M.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new M(\"Unknown option \"+a,M.ERR_BAD_OPTION)}},validators:Ce},ke=Pe.validators,Ue=function(){function e(n){t(this,e),this.defaults=n,this.interceptors={request:new te,response:new te}}return r(e,[{key:\"request\",value:function(e,t){\"string\"==typeof e?(t=t||{}).url=e:t=e||{};var n,r=t=je(this.defaults,t),o=r.transitional,i=r.paramsSerializer,a=r.headers;void 0!==o&&Pe.assertOptions(o,{silentJSONParsing:ke.transitional(ke.boolean),forcedJSONParsing:ke.transitional(ke.boolean),clarifyTimeoutError:ke.transitional(ke.boolean)},!1),null!=i&&(q.isFunction(i)?t.paramsSerializer={serialize:i}:Pe.assertOptions(i,{encode:ke.function,serialize:ke.function},!0)),t.method=(t.method||this.defaults.method||\"get\").toLowerCase(),(n=a&&q.merge(a.common,a[t.method]))&&q.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete a[e]}),t.headers=he.concat(n,a);var s=[],u=!0;this.interceptors.request.forEach(function(e){\"function\"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,s.unshift(e.fulfilled,e.rejected))});var c,f=[];this.interceptors.response.forEach(function(e){f.push(e.fulfilled,e.rejected)});var l,d=0;if(!u){var p=[Ae.bind(this),void 0];for(p.unshift.apply(p,s),p.push.apply(p,f),l=p.length,c=Promise.resolve(t);d<l;)c=c.then(p[d++],p[d++]);return c}l=s.length;var h=t;for(d=0;d<l;){var m=s[d++],y=s[d++];try{h=m(h)}catch(e){y.call(this,e);break}}try{c=Ae.call(this,h)}catch(e){return Promise.reject(e)}for(d=0,l=f.length;d<l;)c=c.then(f[d++],f[d++]);return c}},{key:\"getUri\",value:function(e){return Y(ge((e=je(this.defaults,e)).baseURL,e.url),e.params,e.paramsSerializer)}}]),e}();q.forEach([\"delete\",\"get\",\"head\",\"options\"],function(e){Ue.prototype[e]=function(t,n){return this.request(je(n||{},{method:e,url:t,data:(n||{}).data}))}}),q.forEach([\"post\",\"put\",\"patch\"],function(e){function t(t){return function(n,r,o){return this.request(je(o||{},{method:e,headers:t?{\"Content-Type\":\"multipart/form-data\"}:{},url:n,data:r}))}}Ue.prototype[e]=t(),Ue.prototype[e+\"Form\"]=t(!0)});var _e=Ue,Fe=function(){function e(n){if(t(this,e),\"function\"!=typeof n)throw new TypeError(\"executor must be a function.\");var r;this.promise=new Promise(function(e){r=e});var o=this;this.promise.then(function(e){if(o._listeners){for(var t=o._listeners.length;t-- >0;)o._listeners[t](e);o._listeners=null}}),this.promise.then=function(e){var t,n=new Promise(function(e){o.subscribe(e),t=e}).then(e);return n.cancel=function(){o.unsubscribe(t)},n},n(function(e,t,n){o.reason||(o.reason=new ve(e,t,n),r(o.reason))})}return r(e,[{key:\"throwIfRequested\",value:function(){if(this.reason)throw this.reason}},{key:\"subscribe\",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:\"unsubscribe\",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}}],[{key:\"source\",value:function(){var t;return{token:new e(function(e){t=e}),cancel:t}}}]),e}();var Be={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(Be).forEach(function(e){var t=o(e,2),n=t[0],r=t[1];Be[r]=n});var Le=Be;var De=function e(t){var n=new _e(t),r=a(_e.prototype.request,n);return q.extend(r,_e.prototype,n,{allOwnKeys:!0}),q.extend(r,n,null,{allOwnKeys:!0}),r.create=function(n){return e(je(t,n))},r}(se);return De.Axios=_e,De.CanceledError=ve,De.CancelToken=Fe,De.isCancel=ye,De.VERSION=Ne,De.toFormData=G,De.AxiosError=M,De.Cancel=De.CanceledError,De.all=function(e){return Promise.all(e)},De.spread=function(e){return function(t){return e.apply(null,t)}},De.isAxiosError=function(e){return q.isObject(e)&&!0===e.isAxiosError},De.mergeConfig=je,De.AxiosHeaders=he,De.formToJSON=function(e){return oe(q.isHTMLForm(e)?new FormData(e):e)},De.HttpStatusCode=Le,De.default=De,De});return{requestAction:function(me,action,config){config.url=me.getActionUrl();config.method=\"post\";config.params=config.params||{};config.params=Object.assign(config.params,me.getOpt(\"serverparam\"));config.params.action=action;return this.request(me,config)},request:function(me,config){config.headers=config.headers||{};var customHeaders=me.getOpt(\"serverHeaders\");if(customHeaders){for(var key in customHeaders){config.headers[key]=customHeaders[key]}}return axios(config)}}}();UE.image=function(){var imageCompression=null;!function(e,t){imageCompression=t()}(this,function(){\"use strict\";function _mergeNamespaces(e,t){return t.forEach(function(t){t&&\"string\"!=typeof t&&!Array.isArray(t)&&Object.keys(t).forEach(function(r){if(\"default\"!==r&&!(r in e)){var i=Object.getOwnPropertyDescriptor(t,r);Object.defineProperty(e,r,i.get?i:{enumerable:!0,get:function(){return t[r]}})}})}),Object.freeze(e)}function copyExifWithoutOrientation(e,t){return new Promise(function(r,i){let o;return getApp1Segment(e).then(function(e){try{return o=e,r(new Blob([t.slice(0,2),o,t.slice(2)],{type:\"image/jpeg\"}))}catch(e){return i(e)}},i)})}const getApp1Segment=e=>new Promise((t,r)=>{const i=new FileReader;i.addEventListener(\"load\",({target:{result:e}})=>{const i=new DataView(e);let o=0;if(65496!==i.getUint16(o))return r(\"not a valid JPEG\");for(o+=2;;){const a=i.getUint16(o);if(65498===a)break;const s=i.getUint16(o+2);if(65505===a&&1165519206===i.getUint32(o+4)){const a=o+10;let f;switch(i.getUint16(a)){case 18761:f=!0;break;case 19789:f=!1;break;default:return r(\"TIFF header contains invalid endian\")}if(42!==i.getUint16(a+2,f))return r(\"TIFF header contains invalid version\");const l=i.getUint32(a+4,f),c=a+l+2+12*i.getUint16(a+l,f);for(let e=a+l+2;e<c;e+=12){if(274==i.getUint16(e,f)){if(3!==i.getUint16(e+2,f))return r(\"Orientation data type is invalid\");if(1!==i.getUint32(e+4,f))return r(\"Orientation data count is invalid\");i.setUint16(e+8,1,f);break}}return t(e.slice(o,o+2+s))}o+=2+s}return t(new Blob)}),i.readAsArrayBuffer(e)});var e={};!function(e){var t,r,UZIP={};e.exports=UZIP,UZIP.parse=function(e,t){for(var r=UZIP.bin.readUshort,i=UZIP.bin.readUint,o=0,a={},s=new Uint8Array(e),f=s.length-4;101010256!=i(s,f);)f--;o=f;o+=4;var l=r(s,o+=4);r(s,o+=2);var c=i(s,o+=2),u=i(s,o+=4);o+=4,o=u;for(var h=0;h<l;h++){i(s,o),o+=4,o+=4,o+=4,i(s,o+=4);c=i(s,o+=4);var d=i(s,o+=4),A=r(s,o+=4),g=r(s,o+2),p=r(s,o+4);o+=6;var m=i(s,o+=8);o+=4,o+=A+g+p,UZIP._readLocal(s,m,a,c,d,t)}return a},UZIP._readLocal=function(e,t,r,i,o,a){var s=UZIP.bin.readUshort,f=UZIP.bin.readUint;f(e,t),s(e,t+=4),s(e,t+=2);var l=s(e,t+=2);f(e,t+=2),f(e,t+=4),t+=4;var c=s(e,t+=8),u=s(e,t+=2);t+=2;var h=UZIP.bin.readUTF8(e,t,c);if(t+=c,t+=u,a)r[h]={size:o,csize:i};else{var d=new Uint8Array(e.buffer,t);if(0==l)r[h]=new Uint8Array(d.buffer.slice(t,t+i));else{if(8!=l)throw\"unknown compression method: \"+l;var A=new Uint8Array(o);UZIP.inflateRaw(d,A),r[h]=A}}},UZIP.inflateRaw=function(e,t){return UZIP.F.inflate(e,t)},UZIP.inflate=function(e,t){return e[0],e[1],UZIP.inflateRaw(new Uint8Array(e.buffer,e.byteOffset+2,e.length-6),t)},UZIP.deflate=function(e,t){null==t&&(t={level:6});var r=0,i=new Uint8Array(50+Math.floor(1.1*e.length));i[r]=120,i[r+1]=156,r+=2,r=UZIP.F.deflateRaw(e,i,r,t.level);var o=UZIP.adler(e,0,e.length);return i[r+0]=o>>>24&255,i[r+1]=o>>>16&255,i[r+2]=o>>>8&255,i[r+3]=o>>>0&255,new Uint8Array(i.buffer,0,r+4)},UZIP.deflateRaw=function(e,t){null==t&&(t={level:6});var r=new Uint8Array(50+Math.floor(1.1*e.length)),i=UZIP.F.deflateRaw(e,r,i,t.level);return new Uint8Array(r.buffer,0,i)},UZIP.encode=function(e,t){null==t&&(t=!1);var r=0,i=UZIP.bin.writeUint,o=UZIP.bin.writeUshort,a={};for(var s in e){var f=!UZIP._noNeed(s)&&!t,l=e[s],c=UZIP.crc.crc(l,0,l.length);a[s]={cpr:f,usize:l.length,crc:c,file:f?UZIP.deflateRaw(l):l}}for(var s in a)r+=a[s].file.length+30+46+2*UZIP.bin.sizeUTF8(s);r+=22;var u=new Uint8Array(r),h=0,d=[];for(var s in a){var A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,0)}var g=0,p=h;for(var s in a){A=a[s];d.push(h),h=UZIP._writeHeader(u,h,s,A,1,d[g++])}var m=h-p;return i(u,h,101010256),h+=4,o(u,h+=4,g),o(u,h+=2,g),i(u,h+=2,m),i(u,h+=4,p),h+=4,h+=2,u.buffer},UZIP._noNeed=function(e){var t=e.split(\".\").pop().toLowerCase();return-1!=\"png,jpg,jpeg,zip\".indexOf(t)},UZIP._writeHeader=function(e,t,r,i,o,a){var s=UZIP.bin.writeUint,f=UZIP.bin.writeUshort,l=i.file;return s(e,t,0==o?67324752:33639248),t+=4,1==o&&(t+=2),f(e,t,20),f(e,t+=2,0),f(e,t+=2,i.cpr?8:0),s(e,t+=2,0),s(e,t+=4,i.crc),s(e,t+=4,l.length),s(e,t+=4,i.usize),f(e,t+=4,UZIP.bin.sizeUTF8(r)),f(e,t+=2,0),t+=2,1==o&&(t+=2,t+=2,s(e,t+=6,a),t+=4),t+=UZIP.bin.writeUTF8(e,t,r),0==o&&(e.set(l,t),t+=l.length),t},UZIP.crc={table:function(){for(var e=new Uint32Array(256),t=0;t<256;t++){for(var r=t,i=0;i<8;i++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update:function(e,t,r,i){for(var o=0;o<i;o++)e=UZIP.crc.table[255&(e^t[r+o])]^e>>>8;return e},crc:function(e,t,r){return 4294967295^UZIP.crc.update(4294967295,e,t,r)}},UZIP.adler=function(e,t,r){for(var i=1,o=0,a=t,s=t+r;a<s;){for(var f=Math.min(a+5552,s);a<f;)o+=i+=e[a++];i%=65521,o%=65521}return o<<16|i},UZIP.bin={readUshort:function(e,t){return e[t]|e[t+1]<<8},writeUshort:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255},readUint:function(e,t){return 16777216*e[t+3]+(e[t+2]<<16|e[t+1]<<8|e[t])},writeUint:function(e,t,r){e[t]=255&r,e[t+1]=r>>8&255,e[t+2]=r>>16&255,e[t+3]=r>>24&255},readASCII:function(e,t,r){for(var i=\"\",o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII:function(e,t,r){for(var i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},pad:function(e){return e.length<2?\"0\"+e:e},readUTF8:function(e,t,r){for(var i,o=\"\",a=0;a<r;a++)o+=\"%\"+UZIP.bin.pad(e[t+a].toString(16));try{i=decodeURIComponent(o)}catch(i){return UZIP.bin.readASCII(e,t,r)}return i},writeUTF8:function(e,t,r){for(var i=r.length,o=0,a=0;a<i;a++){var s=r.charCodeAt(a);if(0==(4294967168&s))e[t+o]=s,o++;else if(0==(4294965248&s))e[t+o]=192|s>>6,e[t+o+1]=128|s>>0&63,o+=2;else if(0==(4294901760&s))e[t+o]=224|s>>12,e[t+o+1]=128|s>>6&63,e[t+o+2]=128|s>>0&63,o+=3;else{if(0!=(4292870144&s))throw\"e\";e[t+o]=240|s>>18,e[t+o+1]=128|s>>12&63,e[t+o+2]=128|s>>6&63,e[t+o+3]=128|s>>0&63,o+=4}}return o},sizeUTF8:function(e){for(var t=e.length,r=0,i=0;i<t;i++){var o=e.charCodeAt(i);if(0==(4294967168&o))r++;else if(0==(4294965248&o))r+=2;else if(0==(4294901760&o))r+=3;else{if(0!=(4292870144&o))throw\"e\";r+=4}}return r}},UZIP.F={},UZIP.F.deflateRaw=function(e,t,r,i){var o=[[0,0,0,0,0],[4,4,8,4,0],[4,5,16,8,0],[4,6,16,16,0],[4,10,16,32,0],[8,16,32,32,0],[8,16,128,128,0],[8,32,128,256,0],[32,128,258,1024,1],[32,258,258,4096,1]][i],a=UZIP.F.U,s=UZIP.F._goodIndex;UZIP.F._hash;var f=UZIP.F._putsE,l=0,c=r<<3,u=0,h=e.length;if(0==i){for(;l<h;){f(t,c,l+(_=Math.min(65535,h-l))==h?1:0),c=UZIP.F._copyExact(e,l,_,t,c+8),l+=_}return c>>>3}var d=a.lits,A=a.strt,g=a.prev,p=0,m=0,w=0,v=0,b=0,y=0;for(h>2&&(A[y=UZIP.F._hash(e,0)]=0),l=0;l<h;l++){if(b=y,l+1<h-2){y=UZIP.F._hash(e,l+1);var E=l+1&32767;g[E]=A[y],A[y]=E}if(u<=l){(p>14e3||m>26697)&&h-l>100&&(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(l==h-1||u==h?1:0,d,p,v,e,w,l-w,t,c),p=m=v=0,w=l);var F=0;l<h-2&&(F=UZIP.F._bestMatch(e,l,g,b,Math.min(o[2],h-l),o[3]));var _=F>>>16,B=65535&F;if(0!=F){B=65535&F;var U=s(_=F>>>16,a.of0);a.lhst[257+U]++;var C=s(B,a.df0);a.dhst[C]++,v+=a.exb[U]+a.dxb[C],d[p]=_<<23|l-u,d[p+1]=B<<16|U<<8|C,p+=2,u=l+_}else a.lhst[e[l]]++;m++}}for(w==l&&0!=e.length||(u<l&&(d[p]=l-u,p+=2,u=l),c=UZIP.F._writeBlock(1,d,p,v,e,w,l-w,t,c),p=0,m=0,p=m=v=0,w=l);0!=(7&c);)c++;return c>>>3},UZIP.F._bestMatch=function(e,t,r,i,o,a){var s=32767&t,f=r[s],l=s-f+32768&32767;if(f==s||i!=UZIP.F._hash(e,t-l))return 0;for(var c=0,u=0,h=Math.min(32767,t);l<=h&&0!=--a&&f!=s;){if(0==c||e[t+c]==e[t+c-l]){var d=UZIP.F._howLong(e,t,l);if(d>c){if(u=l,(c=d)>=o)break;l+2<d&&(d=l+2);for(var A=0,g=0;g<d-2;g++){var p=t-l+g+32768&32767,m=p-r[p]+32768&32767;m>A&&(A=m,f=p)}}}l+=(s=f)-(f=r[s])+32768&32767}return c<<16|u},UZIP.F._howLong=function(e,t,r){if(e[t]!=e[t-r]||e[t+1]!=e[t+1-r]||e[t+2]!=e[t+2-r])return 0;var i=t,o=Math.min(e.length,t+258);for(t+=3;t<o&&e[t]==e[t-r];)t++;return t-i},UZIP.F._hash=function(e,t){return(e[t]<<8|e[t+1])+(e[t+2]<<4)&65535},UZIP.saved=0,UZIP.F._writeBlock=function(e,t,r,i,o,a,s,f,l){var c,u,h,d,A,g,p,m,w,v=UZIP.F.U,b=UZIP.F._putsF,y=UZIP.F._putsE;v.lhst[256]++,u=(c=UZIP.F.getTrees())[0],h=c[1],d=c[2],A=c[3],g=c[4],p=c[5],m=c[6],w=c[7];var E=32+(0==(l+3&7)?0:8-(l+3&7))+(s<<3),F=i+UZIP.F.contSize(v.fltree,v.lhst)+UZIP.F.contSize(v.fdtree,v.dhst),_=i+UZIP.F.contSize(v.ltree,v.lhst)+UZIP.F.contSize(v.dtree,v.dhst);_+=14+3*p+UZIP.F.contSize(v.itree,v.ihst)+(2*v.ihst[16]+3*v.ihst[17]+7*v.ihst[18]);for(var B=0;B<286;B++)v.lhst[B]=0;for(B=0;B<30;B++)v.dhst[B]=0;for(B=0;B<19;B++)v.ihst[B]=0;var U=E<F&&E<_?0:F<_?1:2;if(b(f,l,e),b(f,l+1,U),l+=3,0==U){for(;0!=(7&l);)l++;l=UZIP.F._copyExact(o,a,s,f,l)}else{var C,I;if(1==U&&(C=v.fltree,I=v.fdtree),2==U){UZIP.F.makeCodes(v.ltree,u),UZIP.F.revCodes(v.ltree,u),UZIP.F.makeCodes(v.dtree,h),UZIP.F.revCodes(v.dtree,h),UZIP.F.makeCodes(v.itree,d),UZIP.F.revCodes(v.itree,d),C=v.ltree,I=v.dtree,y(f,l,A-257),y(f,l+=5,g-1),y(f,l+=5,p-4),l+=4;for(var Q=0;Q<p;Q++)y(f,l+3*Q,v.itree[1+(v.ordr[Q]<<1)]);l+=3*p,l=UZIP.F._codeTiny(m,v.itree,f,l),l=UZIP.F._codeTiny(w,v.itree,f,l)}for(var M=a,x=0;x<r;x+=2){for(var T=t[x],S=T>>>23,R=M+(8388607&T);M<R;)l=UZIP.F._writeLit(o[M++],C,f,l);if(0!=S){var O=t[x+1],P=O>>16,H=O>>8&255,L=255&O;y(f,l=UZIP.F._writeLit(257+H,C,f,l),S-v.of0[H]),l+=v.exb[H],b(f,l=UZIP.F._writeLit(L,I,f,l),P-v.df0[L]),l+=v.dxb[L],M+=S}}l=UZIP.F._writeLit(256,C,f,l)}return l},UZIP.F._copyExact=function(e,t,r,i,o){var a=o>>>3;return i[a]=r,i[a+1]=r>>>8,i[a+2]=255-i[a],i[a+3]=255-i[a+1],a+=4,i.set(new Uint8Array(e.buffer,t,r),a),o+(r+4<<3)},UZIP.F.getTrees=function(){for(var e=UZIP.F.U,t=UZIP.F._hufTree(e.lhst,e.ltree,15),r=UZIP.F._hufTree(e.dhst,e.dtree,15),i=[],o=UZIP.F._lenCodes(e.ltree,i),a=[],s=UZIP.F._lenCodes(e.dtree,a),f=0;f<i.length;f+=2)e.ihst[i[f]]++;for(f=0;f<a.length;f+=2)e.ihst[a[f]]++;for(var l=UZIP.F._hufTree(e.ihst,e.itree,7),c=19;c>4&&0==e.itree[1+(e.ordr[c-1]<<1)];)c--;return[t,r,l,o,s,c,i,a]},UZIP.F.getSecond=function(e){for(var t=[],r=0;r<e.length;r+=2)t.push(e[r+1]);return t},UZIP.F.nonZero=function(e){for(var t=\"\",r=0;r<e.length;r+=2)0!=e[r+1]&&(t+=(r>>1)+\",\");return t},UZIP.F.contSize=function(e,t){for(var r=0,i=0;i<t.length;i++)r+=t[i]*e[1+(i<<1)];return r},UZIP.F._codeTiny=function(e,t,r,i){for(var o=0;o<e.length;o+=2){var a=e[o],s=e[o+1];i=UZIP.F._writeLit(a,t,r,i);var f=16==a?2:17==a?3:7;a>15&&(UZIP.F._putsE(r,i,s,f),i+=f)}return i},UZIP.F._lenCodes=function(e,t){for(var r=e.length;2!=r&&0==e[r-1];)r-=2;for(var i=0;i<r;i+=2){var o=e[i+1],a=i+3<r?e[i+3]:-1,s=i+5<r?e[i+5]:-1,f=0==i?-1:e[i-1];if(0==o&&a==o&&s==o){for(var l=i+5;l+2<r&&e[l+2]==o;)l+=2;(c=Math.min(l+1-i>>>1,138))<11?t.push(17,c-3):t.push(18,c-11),i+=2*c-2}else if(o==f&&a==o&&s==o){for(l=i+5;l+2<r&&e[l+2]==o;)l+=2;var c=Math.min(l+1-i>>>1,6);t.push(16,c-3),i+=2*c-2}else t.push(o,0)}return r>>>1},UZIP.F._hufTree=function(e,t,r){var i=[],o=e.length,a=t.length,s=0;for(s=0;s<a;s+=2)t[s]=0,t[s+1]=0;for(s=0;s<o;s++)0!=e[s]&&i.push({lit:s,f:e[s]});var f=i.length,l=i.slice(0);if(0==f)return 0;if(1==f){var c=i[0].lit;l=0==c?1:0;return t[1+(c<<1)]=1,t[1+(l<<1)]=1,1}i.sort(function(e,t){return e.f-t.f});var u=i[0],h=i[1],d=0,A=1,g=2;for(i[0]={lit:-1,f:u.f+h.f,l:u,r:h,d:0};A!=f-1;)u=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],h=d!=A&&(g==f||i[d].f<i[g].f)?i[d++]:i[g++],i[A++]={lit:-1,f:u.f+h.f,l:u,r:h};var p=UZIP.F.setDepth(i[A-1],0);for(p>r&&(UZIP.F.restrictDepth(l,r,p),p=r),s=0;s<f;s++)t[1+(l[s].lit<<1)]=l[s].d;return p},UZIP.F.setDepth=function(e,t){return-1!=e.lit?(e.d=t,t):Math.max(UZIP.F.setDepth(e.l,t+1),UZIP.F.setDepth(e.r,t+1))},UZIP.F.restrictDepth=function(e,t,r){var i=0,o=1<<r-t,a=0;for(e.sort(function(e,t){return t.d==e.d?e.f-t.f:t.d-e.d}),i=0;i<e.length&&e[i].d>t;i++){var s=e[i].d;e[i].d=t,a+=o-(1<<r-s)}for(a>>>=r-t;a>0;){(s=e[i].d)<t?(e[i].d++,a-=1<<t-s-1):i++}for(;i>=0;i--)e[i].d==t&&a<0&&(e[i].d--,a++);0!=a&&console.log(\"debt left\")},UZIP.F._goodIndex=function(e,t){var r=0;return t[16|r]<=e&&(r|=16),t[8|r]<=e&&(r|=8),t[4|r]<=e&&(r|=4),t[2|r]<=e&&(r|=2),t[1|r]<=e&&(r|=1),r},UZIP.F._writeLit=function(e,t,r,i){return UZIP.F._putsF(r,i,t[e<<1]),i+t[1+(e<<1)]},UZIP.F.inflate=function(e,t){var r=Uint8Array;if(3==e[0]&&0==e[1])return t||new r(0);var i=UZIP.F,o=i._bitsF,a=i._bitsE,s=i._decodeTiny,f=i.makeCodes,l=i.codes2map,c=i._get17,u=i.U,h=null==t;h&&(t=new r(e.length>>>2<<3));for(var d,A,g=0,p=0,m=0,w=0,v=0,b=0,y=0,E=0,F=0;0==g;)if(g=o(e,F,1),p=o(e,F+1,2),F+=3,0!=p){if(h&&(t=UZIP.F._check(t,E+(1<<17))),1==p&&(d=u.flmap,A=u.fdmap,b=511,y=31),2==p){m=a(e,F,5)+257,w=a(e,F+5,5)+1,v=a(e,F+10,4)+4,F+=14;for(var _=0;_<38;_+=2)u.itree[_]=0,u.itree[_+1]=0;var B=1;for(_=0;_<v;_++){var U=a(e,F+3*_,3);u.itree[1+(u.ordr[_]<<1)]=U,U>B&&(B=U)}F+=3*v,f(u.itree,B),l(u.itree,B,u.imap),d=u.lmap,A=u.dmap,F=s(u.imap,(1<<B)-1,m+w,e,F,u.ttree);var C=i._copyOut(u.ttree,0,m,u.ltree);b=(1<<C)-1;var I=i._copyOut(u.ttree,m,w,u.dtree);y=(1<<I)-1,f(u.ltree,C),l(u.ltree,C,d),f(u.dtree,I),l(u.dtree,I,A)}for(;;){var Q=d[c(e,F)&b];F+=15&Q;var M=Q>>>4;if(M>>>8==0)t[E++]=M;else{if(256==M)break;var x=E+M-254;if(M>264){var T=u.ldef[M-257];x=E+(T>>>3)+a(e,F,7&T),F+=7&T}var S=A[c(e,F)&y];F+=15&S;var R=S>>>4,O=u.ddef[R],P=(O>>>4)+o(e,F,15&O);for(F+=15&O,h&&(t=UZIP.F._check(t,E+(1<<17)));E<x;)t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P],t[E]=t[E++-P];E=x}}}else{0!=(7&F)&&(F+=8-(7&F));var H=4+(F>>>3),L=e[H-4]|e[H-3]<<8;h&&(t=UZIP.F._check(t,E+L)),t.set(new r(e.buffer,e.byteOffset+H,L),E),F=H+L<<3,E+=L}return t.length==E?t:t.slice(0,E)},UZIP.F._check=function(e,t){var r=e.length;if(t<=r)return e;var i=new Uint8Array(Math.max(r<<1,t));return i.set(e,0),i},UZIP.F._decodeTiny=function(e,t,r,i,o,a){for(var s=UZIP.F._bitsE,f=UZIP.F._get17,l=0;l<r;){var c=e[f(i,o)&t];o+=15&c;var u=c>>>4;if(u<=15)a[l]=u,l++;else{var h=0,d=0;16==u?(d=3+s(i,o,2),o+=2,h=a[l-1]):17==u?(d=3+s(i,o,3),o+=3):18==u&&(d=11+s(i,o,7),o+=7);for(var A=l+d;l<A;)a[l]=h,l++}}return o},UZIP.F._copyOut=function(e,t,r,i){for(var o=0,a=0,s=i.length>>>1;a<r;){var f=e[a+t];i[a<<1]=0,i[1+(a<<1)]=f,f>o&&(o=f),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},UZIP.F.makeCodes=function(e,t){for(var r,i,o,a,s=UZIP.F.U,f=e.length,l=s.bl_count,c=0;c<=t;c++)l[c]=0;for(c=1;c<f;c+=2)l[e[c]]++;var u=s.next_code;for(r=0,l[0]=0,i=1;i<=t;i++)r=r+l[i-1]<<1,u[i]=r;for(o=0;o<f;o+=2)0!=(a=e[o+1])&&(e[o]=u[a],u[a]++)},UZIP.F.codes2map=function(e,t,r){for(var i=e.length,o=UZIP.F.U.rev15,a=0;a<i;a+=2)if(0!=e[a+1])for(var s=a>>1,f=e[a+1],l=s<<4|f,c=t-f,u=e[a]<<c,h=u+(1<<c);u!=h;){r[o[u]>>>15-t]=l,u++}},UZIP.F.revCodes=function(e,t){for(var r=UZIP.F.U.rev15,i=15-t,o=0;o<e.length;o+=2){var a=e[o]<<t-e[o+1];e[o]=r[a]>>>i}},UZIP.F._putsE=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},UZIP.F._putsF=function(e,t,r){r<<=7&t;var i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},UZIP.F._bitsE=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},UZIP.F._bitsF=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},UZIP.F._get17=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},UZIP.F._get25=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},UZIP.F.U=(t=Uint16Array,r=Uint32Array,{next_code:new t(16),bl_count:new t(16),ordr:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],of0:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],exb:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],ldef:new t(32),df0:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],dxb:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],ddef:new r(32),flmap:new t(512),fltree:[],fdmap:new t(32),fdtree:[],lmap:new t(32768),ltree:[],ttree:[],dmap:new t(32768),dtree:[],imap:new t(512),itree:[],rev15:new t(32768),lhst:new r(286),dhst:new r(30),ihst:new r(19),lits:new r(15e3),strt:new t(65536),prev:new t(32768)}),function(){for(var e=UZIP.F.U,t=0;t<32768;t++){var r=t;r=(4278255360&(r=(4042322160&(r=(3435973836&(r=(2863311530&r)>>>1|(1431655765&r)<<1))>>>2|(858993459&r)<<2))>>>4|(252645135&r)<<4))>>>8|(16711935&r)<<8,e.rev15[t]=(r>>>16|r<<16)>>>17}function pushV(e,t,r){for(;0!=t--;)e.push(0,r)}for(t=0;t<32;t++)e.ldef[t]=e.of0[t]<<3|e.exb[t],e.ddef[t]=e.df0[t]<<4|e.dxb[t];pushV(e.fltree,144,8),pushV(e.fltree,112,9),pushV(e.fltree,24,7),pushV(e.fltree,8,8),UZIP.F.makeCodes(e.fltree,9),UZIP.F.codes2map(e.fltree,9,e.flmap),UZIP.F.revCodes(e.fltree,9),pushV(e.fdtree,32,5),UZIP.F.makeCodes(e.fdtree,5),UZIP.F.codes2map(e.fdtree,5,e.fdmap),UZIP.F.revCodes(e.fdtree,5),pushV(e.itree,19,0),pushV(e.ltree,286,0),pushV(e.dtree,30,0),pushV(e.ttree,320,0)}()}({get exports(){return e},set exports(t){e=t}});var UZIP=_mergeNamespaces({__proto__:null,default:e},[e]);const UPNG=function(){var e={nextZero(e,t){for(;0!=e[t];)t++;return t},readUshort:(e,t)=>e[t]<<8|e[t+1],writeUshort(e,t,r){e[t]=r>>8&255,e[t+1]=255&r},readUint:(e,t)=>16777216*e[t]+(e[t+1]<<16|e[t+2]<<8|e[t+3]),writeUint(e,t,r){e[t]=r>>24&255,e[t+1]=r>>16&255,e[t+2]=r>>8&255,e[t+3]=255&r},readASCII(e,t,r){let i=\"\";for(let o=0;o<r;o++)i+=String.fromCharCode(e[t+o]);return i},writeASCII(e,t,r){for(let i=0;i<r.length;i++)e[t+i]=r.charCodeAt(i)},readBytes(e,t,r){const i=[];for(let o=0;o<r;o++)i.push(e[t+o]);return i},pad:e=>e.length<2?`0${e}`:e,readUTF8(t,r,i){let o,a=\"\";for(let o=0;o<i;o++)a+=`%${e.pad(t[r+o].toString(16))}`;try{o=decodeURIComponent(a)}catch(o){return e.readASCII(t,r,i)}return o}};function decodeImage(t,r,i,o){const a=r*i,s=_getBPP(o),f=Math.ceil(r*s/8),l=new Uint8Array(4*a),c=new Uint32Array(l.buffer),{ctype:u}=o,{depth:h}=o,d=e.readUshort;if(6==u){const e=a<<2;if(8==h)for(var A=0;A<e;A+=4)l[A]=t[A],l[A+1]=t[A+1],l[A+2]=t[A+2],l[A+3]=t[A+3];if(16==h)for(A=0;A<e;A++)l[A]=t[A<<1]}else if(2==u){const e=o.tabs.tRNS;if(null==e){if(8==h)for(A=0;A<a;A++){var g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g]}if(16==h)for(A=0;A<a;A++){g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g]}}else{var p=e[0];const r=e[1],i=e[2];if(8==h)for(A=0;A<a;A++){var m=A<<2;g=3*A;c[A]=255<<24|t[g+2]<<16|t[g+1]<<8|t[g],t[g]==p&&t[g+1]==r&&t[g+2]==i&&(l[m+3]=0)}if(16==h)for(A=0;A<a;A++){m=A<<2,g=6*A;c[A]=255<<24|t[g+4]<<16|t[g+2]<<8|t[g],d(t,g)==p&&d(t,g+2)==r&&d(t,g+4)==i&&(l[m+3]=0)}}}else if(3==u){const e=o.tabs.PLTE,s=o.tabs.tRNS,c=s?s.length:0;if(1==h)for(var w=0;w<i;w++){var v=w*f,b=w*r;for(A=0;A<r;A++){m=b+A<<2;var y=3*(E=t[v+(A>>3)]>>7-((7&A)<<0)&1);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}if(2==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>2)]>>6-((3&A)<<1)&3);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(4==h)for(w=0;w<i;w++)for(v=w*f,b=w*r,A=0;A<r;A++){m=b+A<<2,y=3*(E=t[v+(A>>1)]>>4-((1&A)<<2)&15);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}if(8==h)for(A=0;A<a;A++){var E;m=A<<2,y=3*(E=t[A]);l[m]=e[y],l[m+1]=e[y+1],l[m+2]=e[y+2],l[m+3]=E<c?s[E]:255}}else if(4==u){if(8==h)for(A=0;A<a;A++){m=A<<2;var F=t[_=A<<1];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+1]}if(16==h)for(A=0;A<a;A++){var _;m=A<<2,F=t[_=A<<2];l[m]=F,l[m+1]=F,l[m+2]=F,l[m+3]=t[_+2]}}else if(0==u)for(p=o.tabs.tRNS?o.tabs.tRNS:-1,w=0;w<i;w++){const e=w*f,i=w*r;if(1==h)for(var B=0;B<r;B++){var U=(F=255*(t[e+(B>>>3)]>>>7-(7&B)&1))==255*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(2==h)for(B=0;B<r;B++){U=(F=85*(t[e+(B>>>2)]>>>6-((3&B)<<1)&3))==85*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(4==h)for(B=0;B<r;B++){U=(F=17*(t[e+(B>>>1)]>>>4-((1&B)<<2)&15))==17*p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(8==h)for(B=0;B<r;B++){U=(F=t[e+B])==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}else if(16==h)for(B=0;B<r;B++){F=t[e+(B<<1)],U=d(t,e+(B<<1))==p?0:255;c[i+B]=U<<24|F<<16|F<<8|F}}return l}function _decompress(e,r,i,o){const a=_getBPP(e),s=Math.ceil(i*a/8),f=new Uint8Array((s+1+e.interlace)*o);return r=e.tabs.CgBI?t(r,f):_inflate(r,f),0==e.interlace?r=_filterZero(r,e,0,i,o):1==e.interlace&&(r=function _readInterlace(e,t){const r=t.width,i=t.height,o=_getBPP(t),a=o>>3,s=Math.ceil(r*o/8),f=new Uint8Array(i*s);let l=0;const c=[0,0,4,0,2,0,1],u=[0,4,0,2,0,1,0],h=[8,8,8,4,4,2,2],d=[8,8,4,4,2,2,1];let A=0;for(;A<7;){const p=h[A],m=d[A];let w=0,v=0,b=c[A];for(;b<i;)b+=p,v++;let y=u[A];for(;y<r;)y+=m,w++;const E=Math.ceil(w*o/8);_filterZero(e,t,l,w,v);let F=0,_=c[A];for(;_<i;){let t=u[A],i=l+F*E<<3;for(;t<r;){var g;if(1==o)g=(g=e[i>>3])>>7-(7&i)&1,f[_*s+(t>>3)]|=g<<7-((7&t)<<0);if(2==o)g=(g=e[i>>3])>>6-(7&i)&3,f[_*s+(t>>2)]|=g<<6-((3&t)<<1);if(4==o)g=(g=e[i>>3])>>4-(7&i)&15,f[_*s+(t>>1)]|=g<<4-((1&t)<<2);if(o>=8){const r=_*s+t*a;for(let t=0;t<a;t++)f[r+t]=e[(i>>3)+t]}i+=o,t+=m}F++,_+=p}w*v!=0&&(l+=v*(1+E)),A+=1}return f}(r,e)),r}function _inflate(e,r){return t(new Uint8Array(e.buffer,2,e.length-6),r)}var t=function(){const e={H:{}};return e.H.N=function(t,r){const i=Uint8Array;let o,a,s=0,f=0,l=0,c=0,u=0,h=0,d=0,A=0,g=0;if(3==t[0]&&0==t[1])return r||new i(0);const p=e.H,m=p.b,w=p.e,v=p.R,b=p.n,y=p.A,E=p.Z,F=p.m,_=null==r;for(_&&(r=new i(t.length>>>2<<5));0==s;)if(s=m(t,g,1),f=m(t,g+1,2),g+=3,0!=f){if(_&&(r=e.H.W(r,A+(1<<17))),1==f&&(o=F.J,a=F.h,h=511,d=31),2==f){l=w(t,g,5)+257,c=w(t,g+5,5)+1,u=w(t,g+10,4)+4,g+=14;let e=1;for(var B=0;B<38;B+=2)F.Q[B]=0,F.Q[B+1]=0;for(B=0;B<u;B++){const r=w(t,g+3*B,3);F.Q[1+(F.X[B]<<1)]=r,r>e&&(e=r)}g+=3*u,b(F.Q,e),y(F.Q,e,F.u),o=F.w,a=F.d,g=v(F.u,(1<<e)-1,l+c,t,g,F.v);const r=p.V(F.v,0,l,F.C);h=(1<<r)-1;const i=p.V(F.v,l,c,F.D);d=(1<<i)-1,b(F.C,r),y(F.C,r,o),b(F.D,i),y(F.D,i,a)}for(;;){const e=o[E(t,g)&h];g+=15&e;const i=e>>>4;if(i>>>8==0)r[A++]=i;else{if(256==i)break;{let e=A+i-254;if(i>264){const r=F.q[i-257];e=A+(r>>>3)+w(t,g,7&r),g+=7&r}const o=a[E(t,g)&d];g+=15&o;const s=o>>>4,f=F.c[s],l=(f>>>4)+m(t,g,15&f);for(g+=15&f;A<e;)r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l],r[A]=r[A++-l];A=e}}}}else{0!=(7&g)&&(g+=8-(7&g));const o=4+(g>>>3),a=t[o-4]|t[o-3]<<8;_&&(r=e.H.W(r,A+a)),r.set(new i(t.buffer,t.byteOffset+o,a),A),g=o+a<<3,A+=a}return r.length==A?r:r.slice(0,A)},e.H.W=function(e,t){const r=e.length;if(t<=r)return e;const i=new Uint8Array(r<<1);return i.set(e,0),i},e.H.R=function(t,r,i,o,a,s){const f=e.H.e,l=e.H.Z;let c=0;for(;c<i;){const e=t[l(o,a)&r];a+=15&e;const i=e>>>4;if(i<=15)s[c]=i,c++;else{let e=0,t=0;16==i?(t=3+f(o,a,2),a+=2,e=s[c-1]):17==i?(t=3+f(o,a,3),a+=3):18==i&&(t=11+f(o,a,7),a+=7);const r=c+t;for(;c<r;)s[c]=e,c++}}return a},e.H.V=function(e,t,r,i){let o=0,a=0;const s=i.length>>>1;for(;a<r;){const r=e[a+t];i[a<<1]=0,i[1+(a<<1)]=r,r>o&&(o=r),a++}for(;a<s;)i[a<<1]=0,i[1+(a<<1)]=0,a++;return o},e.H.n=function(t,r){const i=e.H.m,o=t.length;let a,s,f;let l;const c=i.j;for(var u=0;u<=r;u++)c[u]=0;for(u=1;u<o;u+=2)c[t[u]]++;const h=i.K;for(a=0,c[0]=0,s=1;s<=r;s++)a=a+c[s-1]<<1,h[s]=a;for(f=0;f<o;f+=2)l=t[f+1],0!=l&&(t[f]=h[l],h[l]++)},e.H.A=function(t,r,i){const o=t.length,a=e.H.m.r;for(let e=0;e<o;e+=2)if(0!=t[e+1]){const o=e>>1,s=t[e+1],f=o<<4|s,l=r-s;let c=t[e]<<l;const u=c+(1<<l);for(;c!=u;){i[a[c]>>>15-r]=f,c++}}},e.H.l=function(t,r){const i=e.H.m.r,o=15-r;for(let e=0;e<t.length;e+=2){const a=t[e]<<r-t[e+1];t[e]=i[a]>>>o}},e.H.M=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8},e.H.I=function(e,t,r){r<<=7&t;const i=t>>>3;e[i]|=r,e[i+1]|=r>>>8,e[i+2]|=r>>>16},e.H.e=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8)>>>(7&t)&(1<<r)-1},e.H.b=function(e,t,r){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)&(1<<r)-1},e.H.Z=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16)>>>(7&t)},e.H.i=function(e,t){return(e[t>>>3]|e[1+(t>>>3)]<<8|e[2+(t>>>3)]<<16|e[3+(t>>>3)]<<24)>>>(7&t)},e.H.m=function(){const e=Uint16Array,t=Uint32Array;return{K:new e(16),j:new e(16),X:[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],S:[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,999,999,999],T:[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0],q:new e(32),p:[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,65535,65535],z:[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0],c:new t(32),J:new e(512),_:[],h:new e(32),$:[],w:new e(32768),C:[],v:[],d:new e(32768),D:[],u:new e(512),Q:[],r:new e(32768),s:new t(286),Y:new t(30),a:new t(19),t:new t(15e3),k:new e(65536),g:new e(32768)}}(),function(){const t=e.H.m;for(var r=0;r<32768;r++){let e=r;e=(2863311530&e)>>>1|(1431655765&e)<<1,e=(3435973836&e)>>>2|(858993459&e)<<2,e=(4042322160&e)>>>4|(252645135&e)<<4,e=(4278255360&e)>>>8|(16711935&e)<<8,t.r[r]=(e>>>16|e<<16)>>>17}function n(e,t,r){for(;0!=t--;)e.push(0,r)}for(r=0;r<32;r++)t.q[r]=t.S[r]<<3|t.T[r],t.c[r]=t.p[r]<<4|t.z[r];n(t._,144,8),n(t._,112,9),n(t._,24,7),n(t._,8,8),e.H.n(t._,9),e.H.A(t._,9,t.J),e.H.l(t._,9),n(t.$,32,5),e.H.n(t.$,5),e.H.A(t.$,5,t.h),e.H.l(t.$,5),n(t.Q,19,0),n(t.C,286,0),n(t.D,30,0),n(t.v,320,0)}(),e.H.N}();function _getBPP(e){return[1,null,3,1,2,null,4][e.ctype]*e.depth}function _filterZero(e,t,r,i,o){let a=_getBPP(t);const s=Math.ceil(i*a/8);let f,l;a=Math.ceil(a/8);let c=e[r],u=0;if(c>1&&(e[r]=[0,0,1][c-2]),3==c)for(u=a;u<s;u++)e[u+1]=e[u+1]+(e[u+1-a]>>>1)&255;for(let t=0;t<o;t++)if(f=r+t*s,l=f+t+1,c=e[l-1],u=0,0==c)for(;u<s;u++)e[f+u]=e[l+u];else if(1==c){for(;u<a;u++)e[f+u]=e[l+u];for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-a]}else if(2==c)for(;u<s;u++)e[f+u]=e[l+u]+e[f+u-s];else if(3==c){for(;u<a;u++)e[f+u]=e[l+u]+(e[f+u-s]>>>1);for(;u<s;u++)e[f+u]=e[l+u]+(e[f+u-s]+e[f+u-a]>>>1)}else{for(;u<a;u++)e[f+u]=e[l+u]+_paeth(0,e[f+u-s],0);for(;u<s;u++)e[f+u]=e[l+u]+_paeth(e[f+u-a],e[f+u-s],e[f+u-a-s])}return e}function _paeth(e,t,r){const i=e+t-r,o=i-e,a=i-t,s=i-r;return o*o<=a*a&&o*o<=s*s?e:a*a<=s*s?t:r}function _IHDR(t,r,i){i.width=e.readUint(t,r),r+=4,i.height=e.readUint(t,r),r+=4,i.depth=t[r],r++,i.ctype=t[r],r++,i.compress=t[r],r++,i.filter=t[r],r++,i.interlace=t[r],r++}function _copyTile(e,t,r,i,o,a,s,f,l){const c=Math.min(t,o),u=Math.min(r,a);let h=0,d=0;for(let r=0;r<u;r++)for(let a=0;a<c;a++)if(s>=0&&f>=0?(h=r*t+a<<2,d=(f+r)*o+s+a<<2):(h=(-f+r)*t-s+a<<2,d=r*o+a<<2),0==l)i[d]=e[h],i[d+1]=e[h+1],i[d+2]=e[h+2],i[d+3]=e[h+3];else if(1==l){var A=e[h+3]*(1/255),g=e[h]*A,p=e[h+1]*A,m=e[h+2]*A,w=i[d+3]*(1/255),v=i[d]*w,b=i[d+1]*w,y=i[d+2]*w;const t=1-A,r=A+w*t,o=0==r?0:1/r;i[d+3]=255*r,i[d+0]=(g+v*t)*o,i[d+1]=(p+b*t)*o,i[d+2]=(m+y*t)*o}else if(2==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];A==w&&g==v&&p==b&&m==y?(i[d]=0,i[d+1]=0,i[d+2]=0,i[d+3]=0):(i[d]=g,i[d+1]=p,i[d+2]=m,i[d+3]=A)}else if(3==l){A=e[h+3],g=e[h],p=e[h+1],m=e[h+2],w=i[d+3],v=i[d],b=i[d+1],y=i[d+2];if(A==w&&g==v&&p==b&&m==y)continue;if(A<220&&w>20)return!1}return!0}return{decode:function decode(r){const i=new Uint8Array(r);let o=8;const a=e,s=a.readUshort,f=a.readUint,l={tabs:{},frames:[]},c=new Uint8Array(i.length);let u,h=0,d=0;const A=[137,80,78,71,13,10,26,10];for(var g=0;g<8;g++)if(i[g]!=A[g])throw\"The input is not a PNG file!\";for(;o<i.length;){const e=a.readUint(i,o);o+=4;const r=a.readASCII(i,o,4);if(o+=4,\"IHDR\"==r)_IHDR(i,o,l);else if(\"iCCP\"==r){for(var p=o;0!=i[p];)p++;a.readASCII(i,o,p-o),i[p+1];const s=i.slice(p+2,o+e);let f=null;try{f=_inflate(s)}catch(e){f=t(s)}l.tabs[r]=f}else if(\"CgBI\"==r)l.tabs[r]=i.slice(o,o+4);else if(\"IDAT\"==r){for(g=0;g<e;g++)c[h+g]=i[o+g];h+=e}else if(\"acTL\"==r)l.tabs[r]={num_frames:f(i,o),num_plays:f(i,o+4)},u=new Uint8Array(i.length);else if(\"fcTL\"==r){if(0!=d)(E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height),d=0;const e={x:f(i,o+12),y:f(i,o+16),width:f(i,o+4),height:f(i,o+8)};let t=s(i,o+22);t=s(i,o+20)/(0==t?100:t);const r={rect:e,delay:Math.round(1e3*t),dispose:i[o+24],blend:i[o+25]};l.frames.push(r)}else if(\"fdAT\"==r){for(g=0;g<e-4;g++)u[d+g]=i[o+g+4];d+=e-4}else if(\"pHYs\"==r)l.tabs[r]=[a.readUint(i,o),a.readUint(i,o+4),i[o+8]];else if(\"cHRM\"==r){l.tabs[r]=[];for(g=0;g<8;g++)l.tabs[r].push(a.readUint(i,o+4*g))}else if(\"tEXt\"==r||\"zTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});var m=a.nextZero(i,o),w=a.readASCII(i,o,m-o),v=o+e-m-1;if(\"tEXt\"==r)y=a.readASCII(i,m+1,v);else{var b=_inflate(i.slice(m+2,m+2+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"iTXt\"==r){null==l.tabs[r]&&(l.tabs[r]={});m=0,p=o;m=a.nextZero(i,p);w=a.readASCII(i,p,m-p);const t=i[p=m+1];var y;i[p+1],p+=2,m=a.nextZero(i,p),a.readASCII(i,p,m-p),p=m+1,m=a.nextZero(i,p),a.readUTF8(i,p,m-p);v=e-((p=m+1)-o);if(0==t)y=a.readUTF8(i,p,v);else{b=_inflate(i.slice(p,p+v));y=a.readUTF8(b,0,b.length)}l.tabs[r][w]=y}else if(\"PLTE\"==r)l.tabs[r]=a.readBytes(i,o,e);else if(\"hIST\"==r){const e=l.tabs.PLTE.length/3;l.tabs[r]=[];for(g=0;g<e;g++)l.tabs[r].push(s(i,o+2*g))}else if(\"tRNS\"==r)3==l.ctype?l.tabs[r]=a.readBytes(i,o,e):0==l.ctype?l.tabs[r]=s(i,o):2==l.ctype&&(l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]);else if(\"gAMA\"==r)l.tabs[r]=a.readUint(i,o)/1e5;else if(\"sRGB\"==r)l.tabs[r]=i[o];else if(\"bKGD\"==r)0==l.ctype||4==l.ctype?l.tabs[r]=[s(i,o)]:2==l.ctype||6==l.ctype?l.tabs[r]=[s(i,o),s(i,o+2),s(i,o+4)]:3==l.ctype&&(l.tabs[r]=i[o]);else if(\"IEND\"==r)break;o+=e,a.readUint(i,o),o+=4}var E;return 0!=d&&((E=l.frames[l.frames.length-1]).data=_decompress(l,u.slice(0,d),E.rect.width,E.rect.height)),l.data=_decompress(l,c,l.width,l.height),delete l.compress,delete l.interlace,delete l.filter,l},toRGBA8:function toRGBA8(e){const t=e.width,r=e.height;if(null==e.tabs.acTL)return[decodeImage(e.data,t,r,e).buffer];const i=[];null==e.frames[0].data&&(e.frames[0].data=e.data);const o=t*r*4,a=new Uint8Array(o),s=new Uint8Array(o),f=new Uint8Array(o);for(let c=0;c<e.frames.length;c++){const u=e.frames[c],h=u.rect.x,d=u.rect.y,A=u.rect.width,g=u.rect.height,p=decodeImage(u.data,A,g,e);if(0!=c)for(var l=0;l<o;l++)f[l]=a[l];if(0==u.blend?_copyTile(p,A,g,a,t,r,h,d,0):1==u.blend&&_copyTile(p,A,g,a,t,r,h,d,1),i.push(a.buffer.slice(0)),0==u.dispose);else if(1==u.dispose)_copyTile(s,A,g,a,t,r,h,d,0);else if(2==u.dispose)for(l=0;l<o;l++)a[l]=f[l]}return i},_paeth:_paeth,_copyTile:_copyTile,_bin:e}}();!function(){const{_copyTile:e}=UPNG,{_bin:t}=UPNG,r=UPNG._paeth;var i={table:function(){const e=new Uint32Array(256);for(let t=0;t<256;t++){let r=t;for(let e=0;e<8;e++)1&r?r=3988292384^r>>>1:r>>>=1;e[t]=r}return e}(),update(e,t,r,o){for(let a=0;a<o;a++)e=i.table[255&(e^t[r+a])]^e>>>8;return e},crc:(e,t,r)=>4294967295^i.update(4294967295,e,t,r)};function addErr(e,t,r,i){t[r]+=e[0]*i>>4,t[r+1]+=e[1]*i>>4,t[r+2]+=e[2]*i>>4,t[r+3]+=e[3]*i>>4}function N(e){return Math.max(0,Math.min(255,e))}function D(e,t){const r=e[0]-t[0],i=e[1]-t[1],o=e[2]-t[2],a=e[3]-t[3];return r*r+i*i+o*o+a*a}function dither(e,t,r,i,o,a,s){null==s&&(s=1);const f=i.length,l=[];for(var c=0;c<f;c++){const e=i[c];l.push([e>>>0&255,e>>>8&255,e>>>16&255,e>>>24&255])}for(c=0;c<f;c++){let e=4294967295;for(var u=0,h=0;h<f;h++){var d=D(l[c],l[h]);h!=c&&d<e&&(e=d,u=h)}}const A=new Uint32Array(o.buffer),g=new Int16Array(t*r*4),p=[0,8,2,10,12,4,14,6,3,11,1,9,15,7,13,5];for(c=0;c<p.length;c++)p[c]=255*((p[c]+.5)/16-.5);for(let o=0;o<r;o++)for(let w=0;w<t;w++){var m;c=4*(o*t+w);if(2!=s)m=[N(e[c]+g[c]),N(e[c+1]+g[c+1]),N(e[c+2]+g[c+2]),N(e[c+3]+g[c+3])];else{d=p[4*(3&o)+(3&w)];m=[N(e[c]+d),N(e[c+1]+d),N(e[c+2]+d),N(e[c+3]+d)]}u=0;let v=16777215;for(h=0;h<f;h++){const e=D(m,l[h]);e<v&&(v=e,u=h)}const b=l[u],y=[m[0]-b[0],m[1]-b[1],m[2]-b[2],m[3]-b[3]];1==s&&(w!=t-1&&addErr(y,g,c+4,7),o!=r-1&&(0!=w&&addErr(y,g,c+4*t-4,3),addErr(y,g,c+4*t,5),w!=t-1&&addErr(y,g,c+4*t+4,1))),a[c>>2]=u,A[c>>2]=i[u]}}function _main(e,r,o,a,s){null==s&&(s={});const{crc:f}=i,l=t.writeUint,c=t.writeUshort,u=t.writeASCII;let h=8;const d=e.frames.length>1;let A,g=!1,p=33+(d?20:0);if(null!=s.sRGB&&(p+=13),null!=s.pHYs&&(p+=21),null!=s.iCCP&&(A=pako.deflate(s.iCCP),p+=21+A.length+4),3==e.ctype){for(var m=e.plte.length,w=0;w<m;w++)e.plte[w]>>>24!=255&&(g=!0);p+=8+3*m+4+(g?8+1*m+4:0)}for(var v=0;v<e.frames.length;v++){d&&(p+=38),p+=(F=e.frames[v]).cimg.length+12,0!=v&&(p+=4)}p+=12;const b=new Uint8Array(p),y=[137,80,78,71,13,10,26,10];for(w=0;w<8;w++)b[w]=y[w];if(l(b,h,13),h+=4,u(b,h,\"IHDR\"),h+=4,l(b,h,r),h+=4,l(b,h,o),h+=4,b[h]=e.depth,h++,b[h]=e.ctype,h++,b[h]=0,h++,b[h]=0,h++,b[h]=0,h++,l(b,h,f(b,h-17,17)),h+=4,null!=s.sRGB&&(l(b,h,1),h+=4,u(b,h,\"sRGB\"),h+=4,b[h]=s.sRGB,h++,l(b,h,f(b,h-5,5)),h+=4),null!=s.iCCP){const e=13+A.length;l(b,h,e),h+=4,u(b,h,\"iCCP\"),h+=4,u(b,h,\"ICC profile\"),h+=11,h+=2,b.set(A,h),h+=A.length,l(b,h,f(b,h-(e+4),e+4)),h+=4}if(null!=s.pHYs&&(l(b,h,9),h+=4,u(b,h,\"pHYs\"),h+=4,l(b,h,s.pHYs[0]),h+=4,l(b,h,s.pHYs[1]),h+=4,b[h]=s.pHYs[2],h++,l(b,h,f(b,h-13,13)),h+=4),d&&(l(b,h,8),h+=4,u(b,h,\"acTL\"),h+=4,l(b,h,e.frames.length),h+=4,l(b,h,null!=s.loop?s.loop:0),h+=4,l(b,h,f(b,h-12,12)),h+=4),3==e.ctype){l(b,h,3*(m=e.plte.length)),h+=4,u(b,h,\"PLTE\"),h+=4;for(w=0;w<m;w++){const t=3*w,r=e.plte[w],i=255&r,o=r>>>8&255,a=r>>>16&255;b[h+t+0]=i,b[h+t+1]=o,b[h+t+2]=a}if(h+=3*m,l(b,h,f(b,h-3*m-4,3*m+4)),h+=4,g){l(b,h,m),h+=4,u(b,h,\"tRNS\"),h+=4;for(w=0;w<m;w++)b[h+w]=e.plte[w]>>>24&255;h+=m,l(b,h,f(b,h-m-4,m+4)),h+=4}}let E=0;for(v=0;v<e.frames.length;v++){var F=e.frames[v];d&&(l(b,h,26),h+=4,u(b,h,\"fcTL\"),h+=4,l(b,h,E++),h+=4,l(b,h,F.rect.width),h+=4,l(b,h,F.rect.height),h+=4,l(b,h,F.rect.x),h+=4,l(b,h,F.rect.y),h+=4,c(b,h,a[v]),h+=2,c(b,h,1e3),h+=2,b[h]=F.dispose,h++,b[h]=F.blend,h++,l(b,h,f(b,h-30,30)),h+=4);const t=F.cimg;l(b,h,(m=t.length)+(0==v?0:4)),h+=4;const r=h;u(b,h,0==v?\"IDAT\":\"fdAT\"),h+=4,0!=v&&(l(b,h,E++),h+=4),b.set(t,h),h+=m,l(b,h,f(b,r,h-r)),h+=4}return l(b,h,0),h+=4,u(b,h,\"IEND\"),h+=4,l(b,h,f(b,h-4,4)),h+=4,b.buffer}function compressPNG(e,t,r){for(let i=0;i<e.frames.length;i++){const o=e.frames[i];o.rect.width;const a=o.rect.height,s=new Uint8Array(a*o.bpl+a);o.cimg=_filterZero(o.img,a,o.bpp,o.bpl,s,t,r)}}function compress(t,r,i,o,a){const s=a[0],f=a[1],l=a[2],c=a[3],u=a[4],h=a[5];let d=6,A=8,g=255;for(var p=0;p<t.length;p++){const e=new Uint8Array(t[p]);for(var m=e.length,w=0;w<m;w+=4)g&=e[w+3]}const v=255!=g,b=function framize(t,r,i,o,a,s){const f=[];for(var l=0;l<t.length;l++){const h=new Uint8Array(t[l]),A=new Uint32Array(h.buffer);var c;let g=0,p=0,m=r,w=i,v=o?1:0;if(0!=l){const b=s||o||1==l||0!=f[l-2].dispose?1:2;let y=0,E=1e9;for(let e=0;e<b;e++){var u=new Uint8Array(t[l-1-e]);const o=new Uint32Array(t[l-1-e]);let s=r,f=i,c=-1,h=-1;for(let e=0;e<i;e++)for(let t=0;t<r;t++){A[d=e*r+t]!=o[d]&&(t<s&&(s=t),t>c&&(c=t),e<f&&(f=e),e>h&&(h=e))}-1==c&&(s=f=c=h=0),a&&(1==(1&s)&&s--,1==(1&f)&&f--);const v=(c-s+1)*(h-f+1);v<E&&(E=v,y=e,g=s,p=f,m=c-s+1,w=h-f+1)}u=new Uint8Array(t[l-1-y]);1==y&&(f[l-1].dispose=2),c=new Uint8Array(m*w*4),e(u,r,i,c,m,w,-g,-p,0),v=e(h,r,i,c,m,w,-g,-p,3)?1:0,1==v?_prepareDiff(h,r,i,c,{x:g,y:p,width:m,height:w}):e(h,r,i,c,m,w,-g,-p,0)}else c=h.slice(0);f.push({rect:{x:g,y:p,width:m,height:w},img:c,blend:v,dispose:0})}if(o)for(l=0;l<f.length;l++){if(1==(A=f[l]).blend)continue;const e=A.rect,o=f[l-1].rect,s=Math.min(e.x,o.x),c=Math.min(e.y,o.y),u={x:s,y:c,width:Math.max(e.x+e.width,o.x+o.width)-s,height:Math.max(e.y+e.height,o.y+o.height)-c};f[l-1].dispose=1,l-1!=0&&_updateFrame(t,r,i,f,l-1,u,a),_updateFrame(t,r,i,f,l,u,a)}let h=0;if(1!=t.length)for(var d=0;d<f.length;d++){var A;h+=(A=f[d]).rect.width*A.rect.height}return f}(t,r,i,s,f,l),y={},E=[],F=[];if(0!=o){const e=[];for(w=0;w<b.length;w++)e.push(b[w].img.buffer);const t=function concatRGBA(e){let t=0;for(var r=0;r<e.length;r++)t+=e[r].byteLength;const i=new Uint8Array(t);let o=0;for(r=0;r<e.length;r++){const t=new Uint8Array(e[r]),a=t.length;for(let e=0;e<a;e+=4){let r=t[e],a=t[e+1],s=t[e+2];const f=t[e+3];0==f&&(r=a=s=0),i[o+e]=r,i[o+e+1]=a,i[o+e+2]=s,i[o+e+3]=f}o+=a}return i.buffer}(e),r=quantize(t,o);for(w=0;w<r.plte.length;w++)E.push(r.plte[w].est.rgba);let i=0;for(w=0;w<b.length;w++){const e=(B=b[w]).img.length;var _=new Uint8Array(r.inds.buffer,i>>2,e>>2);F.push(_);const t=new Uint8Array(r.abuf,i,e);h&&dither(B.img,B.rect.width,B.rect.height,E,t,_),B.img.set(t),i+=e}}else for(p=0;p<b.length;p++){var B=b[p];const e=new Uint32Array(B.img.buffer);var U=B.rect.width;m=e.length,_=new Uint8Array(m);F.push(_);for(w=0;w<m;w++){const t=e[w];if(0!=w&&t==e[w-1])_[w]=_[w-1];else if(w>U&&t==e[w-U])_[w]=_[w-U];else{let e=y[t];if(null==e&&(y[t]=e=E.length,E.push(t),E.length>=300))break;_[w]=e}}}const C=E.length;C<=256&&0==u&&(A=C<=2?1:C<=4?2:C<=16?4:8,A=Math.max(A,c));for(p=0;p<b.length;p++){(B=b[p]).rect.x,B.rect.y;U=B.rect.width;const e=B.rect.height;let t=B.img;new Uint32Array(t.buffer);let r=4*U,i=4;if(C<=256&&0==u){r=Math.ceil(A*U/8);var I=new Uint8Array(r*e);const o=F[p];for(let t=0;t<e;t++){w=t*r;const e=t*U;if(8==A)for(var Q=0;Q<U;Q++)I[w+Q]=o[e+Q];else if(4==A)for(Q=0;Q<U;Q++)I[w+(Q>>1)]|=o[e+Q]<<4-4*(1&Q);else if(2==A)for(Q=0;Q<U;Q++)I[w+(Q>>2)]|=o[e+Q]<<6-2*(3&Q);else if(1==A)for(Q=0;Q<U;Q++)I[w+(Q>>3)]|=o[e+Q]<<7-1*(7&Q)}t=I,d=3,i=1}else if(0==v&&1==b.length){I=new Uint8Array(U*e*3);const o=U*e;for(w=0;w<o;w++){const e=3*w,r=4*w;I[e]=t[r],I[e+1]=t[r+1],I[e+2]=t[r+2]}t=I,d=2,i=3,r=3*U}B.img=t,B.bpl=r,B.bpp=i}return{ctype:d,depth:A,plte:E,frames:b}}function _updateFrame(t,r,i,o,a,s,f){const l=Uint8Array,c=Uint32Array,u=new l(t[a-1]),h=new c(t[a-1]),d=a+1<t.length?new l(t[a+1]):null,A=new l(t[a]),g=new c(A.buffer);let p=r,m=i,w=-1,v=-1;for(let e=0;e<s.height;e++)for(let t=0;t<s.width;t++){const i=s.x+t,f=s.y+e,l=f*r+i,c=g[l];0==c||0==o[a-1].dispose&&h[l]==c&&(null==d||0!=d[4*l+3])||(i<p&&(p=i),i>w&&(w=i),f<m&&(m=f),f>v&&(v=f))}-1==w&&(p=m=w=v=0),f&&(1==(1&p)&&p--,1==(1&m)&&m--),s={x:p,y:m,width:w-p+1,height:v-m+1};const b=o[a];b.rect=s,b.blend=1,b.img=new Uint8Array(s.width*s.height*4),0==o[a-1].dispose?(e(u,r,i,b.img,s.width,s.height,-s.x,-s.y,0),_prepareDiff(A,r,i,b.img,s)):e(A,r,i,b.img,s.width,s.height,-s.x,-s.y,0)}function _prepareDiff(t,r,i,o,a){e(t,r,i,o,a.width,a.height,-a.x,-a.y,2)}function _filterZero(e,t,r,i,o,a,s){const f=[];let l,c=[0,1,2,3,4];-1!=a?c=[a]:(t*i>5e5||1==r)&&(c=[0]),s&&(l={level:0});const u=UZIP;for(var h=0;h<c.length;h++){for(let a=0;a<t;a++)_filterLine(o,e,a,i,r,c[h]);f.push(u.deflate(o,l))}let d,A=1e9;for(h=0;h<f.length;h++)f[h].length<A&&(d=h,A=f[h].length);return f[d]}function _filterLine(e,t,i,o,a,s){const f=i*o;let l=f+i;if(e[l]=s,l++,0==s)if(o<500)for(var c=0;c<o;c++)e[l+c]=t[f+c];else e.set(new Uint8Array(t.buffer,f,o),l);else if(1==s){for(c=0;c<a;c++)e[l+c]=t[f+c];for(c=a;c<o;c++)e[l+c]=t[f+c]-t[f+c-a]+256&255}else if(0==i){for(c=0;c<a;c++)e[l+c]=t[f+c];if(2==s)for(c=a;c<o;c++)e[l+c]=t[f+c];if(3==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-(t[f+c-a]>>1)+256&255;if(4==s)for(c=a;c<o;c++)e[l+c]=t[f+c]-r(t[f+c-a],0,0)+256&255}else{if(2==s)for(c=0;c<o;c++)e[l+c]=t[f+c]+256-t[f+c-o]&255;if(3==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-(t[f+c-o]>>1)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-(t[f+c-o]+t[f+c-a]>>1)&255}if(4==s){for(c=0;c<a;c++)e[l+c]=t[f+c]+256-r(0,t[f+c-o],0)&255;for(c=a;c<o;c++)e[l+c]=t[f+c]+256-r(t[f+c-a],t[f+c-o],t[f+c-a-o])&255}}}function quantize(e,t){const r=new Uint8Array(e),i=r.slice(0),o=new Uint32Array(i.buffer),a=getKDtree(i,t),s=a[0],f=a[1],l=r.length,c=new Uint8Array(l>>2);let u;if(r.length<2e7)for(var h=0;h<l;h+=4){u=getNearest(s,d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255)),c[h>>2]=u.ind,o[h>>2]=u.est.rgba}else for(h=0;h<l;h+=4){var d=r[h]*(1/255),A=r[h+1]*(1/255),g=r[h+2]*(1/255),p=r[h+3]*(1/255);for(u=s;u.left;)u=planeDst(u.est,d,A,g,p)<=0?u.left:u.right;c[h>>2]=u.ind,o[h>>2]=u.est.rgba}return{abuf:i.buffer,inds:c,plte:f}}function getKDtree(e,t,r){null==r&&(r=1e-4);const i=new Uint32Array(e.buffer),o={i0:0,i1:e.length,bst:null,est:null,tdst:0,left:null,right:null};o.bst=stats(e,o.i0,o.i1),o.est=estats(o.bst);const a=[o];for(;a.length<t;){let t=0,o=0;for(var s=0;s<a.length;s++)a[s].est.L>t&&(t=a[s].est.L,o=s);if(t<r)break;const f=a[o],l=splitPixels(e,i,f.i0,f.i1,f.est.e,f.est.eMq255);if(f.i0>=l||f.i1<=l){f.est.L=0;continue}const c={i0:f.i0,i1:l,bst:null,est:null,tdst:0,left:null,right:null};c.bst=stats(e,c.i0,c.i1),c.est=estats(c.bst);const u={i0:l,i1:f.i1,bst:null,est:null,tdst:0,left:null,right:null};u.bst={R:[],m:[],N:f.bst.N-c.bst.N};for(s=0;s<16;s++)u.bst.R[s]=f.bst.R[s]-c.bst.R[s];for(s=0;s<4;s++)u.bst.m[s]=f.bst.m[s]-c.bst.m[s];u.est=estats(u.bst),f.left=c,f.right=u,a[o]=c,a.push(u)}a.sort((e,t)=>t.bst.N-e.bst.N);for(s=0;s<a.length;s++)a[s].ind=s;return[o,a]}function getNearest(e,t,r,i,o){if(null==e.left)return e.tdst=function dist(e,t,r,i,o){const a=t-e[0],s=r-e[1],f=i-e[2],l=o-e[3];return a*a+s*s+f*f+l*l}(e.est.q,t,r,i,o),e;const a=planeDst(e.est,t,r,i,o);let s=e.left,f=e.right;a>0&&(s=e.right,f=e.left);const l=getNearest(s,t,r,i,o);if(l.tdst<=a*a)return l;const c=getNearest(f,t,r,i,o);return c.tdst<l.tdst?c:l}function planeDst(e,t,r,i,o){const{e:a}=e;return a[0]*t+a[1]*r+a[2]*i+a[3]*o-e.eMq}function splitPixels(e,t,r,i,o,a){for(i-=4;r<i;){for(;vecDot(e,r,o)<=a;)r+=4;for(;vecDot(e,i,o)>a;)i-=4;if(r>=i)break;const s=t[r>>2];t[r>>2]=t[i>>2],t[i>>2]=s,r+=4,i-=4}for(;vecDot(e,r,o)>a;)r-=4;return r+4}function vecDot(e,t,r){return e[t]*r[0]+e[t+1]*r[1]+e[t+2]*r[2]+e[t+3]*r[3]}function stats(e,t,r){const i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],o=[0,0,0,0],a=r-t>>2;for(let a=t;a<r;a+=4){const t=e[a]*(1/255),r=e[a+1]*(1/255),s=e[a+2]*(1/255),f=e[a+3]*(1/255);o[0]+=t,o[1]+=r,o[2]+=s,o[3]+=f,i[0]+=t*t,i[1]+=t*r,i[2]+=t*s,i[3]+=t*f,i[5]+=r*r,i[6]+=r*s,i[7]+=r*f,i[10]+=s*s,i[11]+=s*f,i[15]+=f*f}return i[4]=i[1],i[8]=i[2],i[9]=i[6],i[12]=i[3],i[13]=i[7],i[14]=i[11],{R:i,m:o,N:a}}function estats(e){const{R:t}=e,{m:r}=e,{N:i}=e,a=r[0],s=r[1],f=r[2],l=r[3],c=0==i?0:1/i,u=[t[0]-a*a*c,t[1]-a*s*c,t[2]-a*f*c,t[3]-a*l*c,t[4]-s*a*c,t[5]-s*s*c,t[6]-s*f*c,t[7]-s*l*c,t[8]-f*a*c,t[9]-f*s*c,t[10]-f*f*c,t[11]-f*l*c,t[12]-l*a*c,t[13]-l*s*c,t[14]-l*f*c,t[15]-l*l*c],h=u,d=o;let A=[Math.random(),Math.random(),Math.random(),Math.random()],g=0,p=0;if(0!=i)for(let e=0;e<16&&(A=d.multVec(h,A),p=Math.sqrt(d.dot(A,A)),A=d.sml(1/p,A),!(0!=e&&Math.abs(p-g)<1e-9));e++)g=p;const m=[a*c,s*c,f*c,l*c];return{Cov:u,q:m,e:A,L:g,eMq255:d.dot(d.sml(255,m),A),eMq:d.dot(A,m),rgba:(Math.round(255*m[3])<<24|Math.round(255*m[2])<<16|Math.round(255*m[1])<<8|Math.round(255*m[0])<<0)>>>0}}var o={multVec:(e,t)=>[e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],e[4]*t[0]+e[5]*t[1]+e[6]*t[2]+e[7]*t[3],e[8]*t[0]+e[9]*t[1]+e[10]*t[2]+e[11]*t[3],e[12]*t[0]+e[13]*t[1]+e[14]*t[2]+e[15]*t[3]],dot:(e,t)=>e[0]*t[0]+e[1]*t[1]+e[2]*t[2]+e[3]*t[3],sml:(e,t)=>[e*t[0],e*t[1],e*t[2],e*t[3]]};UPNG.encode=function encode(e,t,r,i,o,a,s){null==i&&(i=0),null==s&&(s=!1);const f=compress(e,t,r,i,[!1,!1,!1,0,s,!1]);return compressPNG(f,-1),_main(f,t,r,o,a)},UPNG.encodeLL=function encodeLL(e,t,r,i,o,a,s,f){const l={ctype:0+(1==i?0:2)+(0==o?0:4),depth:a,frames:[]},c=(i+o)*a,u=c*t;for(let i=0;i<e.length;i++)l.frames.push({rect:{x:0,y:0,width:t,height:r},img:new Uint8Array(e[i]),blend:0,dispose:1,bpp:Math.ceil(c/8),bpl:Math.ceil(u/8)});return compressPNG(l,0,!0),_main(l,t,r,s,f)},UPNG.encode.compress=compress,UPNG.encode.dither=dither,UPNG.quantize=quantize,UPNG.quantize.getKDtree=getKDtree,UPNG.quantize.getNearest=getNearest}();const t={toArrayBuffer(e,r){const i=e.width,o=e.height,a=i<<2,s=e.getContext(\"2d\").getImageData(0,0,i,o),f=new Uint32Array(s.data.buffer),l=(32*i+31)/32<<2,c=l*o,u=122+c,h=new ArrayBuffer(u),d=new DataView(h),A=1<<20;let g,p,m,w,v=A,b=0,y=0,E=0;function set16(e){d.setUint16(y,e,!0),y+=2}function set32(e){d.setUint32(y,e,!0),y+=4}function seek(e){y+=e}set16(19778),set32(u),seek(4),set32(122),set32(108),set32(i),set32(-o>>>0),set16(1),set16(32),set32(3),set32(c),set32(2835),set32(2835),seek(8),set32(16711680),set32(65280),set32(255),set32(4278190080),set32(1466527264),function convert(){for(;b<o&&v>0;){for(w=122+b*l,g=0;g<a;)v--,p=f[E++],m=p>>>24,d.setUint32(w+g,p<<8|m),g+=4;b++}E<f.length?(v=A,setTimeout(convert,t._dly)):r(h)}()},toBlob(e,t){this.toArrayBuffer(e,e=>{t(new Blob([e],{type:\"image/bmp\"}))})},_dly:9};var r={CHROME:\"CHROME\",FIREFOX:\"FIREFOX\",DESKTOP_SAFARI:\"DESKTOP_SAFARI\",IE:\"IE\",IOS:\"IOS\",ETC:\"ETC\"},i={[r.CHROME]:16384,[r.FIREFOX]:11180,[r.DESKTOP_SAFARI]:16384,[r.IE]:8192,[r.IOS]:4096,[r.ETC]:8192};const o=\"undefined\"!=typeof window,a=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,s=o&&window.cordova&&window.cordova.require&&window.cordova.require(\"cordova/modulemapper\"),CustomFile=(o||a)&&(s&&s.getOriginalSymbol(window,\"File\")||\"undefined\"!=typeof File&&File),CustomFileReader=(o||a)&&(s&&s.getOriginalSymbol(window,\"FileReader\")||\"undefined\"!=typeof FileReader&&FileReader);function getFilefromDataUrl(e,t,r=Date.now()){return new Promise(i=>{const o=e.split(\",\"),a=o[0].match(/:(.*?);/)[1],s=globalThis.atob(o[1]);let f=s.length;const l=new Uint8Array(f);for(;f--;)l[f]=s.charCodeAt(f);const c=new Blob([l],{type:a});c.name=t,c.lastModified=r,i(c)})}function getDataUrlFromFile(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=()=>t(i.result),i.onerror=e=>r(e),i.readAsDataURL(e)})}function loadImage(e){return new Promise((t,r)=>{const i=new Image;i.onload=()=>t(i),i.onerror=e=>r(e),i.src=e})}function getBrowserName(){if(void 0!==getBrowserName.cachedResult)return getBrowserName.cachedResult;let e=r.ETC;const{userAgent:t}=navigator;return/Chrom(e|ium)/i.test(t)?e=r.CHROME:/iP(ad|od|hone)/i.test(t)&&/WebKit/i.test(t)?e=r.IOS:/Safari/i.test(t)?e=r.DESKTOP_SAFARI:/Firefox/i.test(t)?e=r.FIREFOX:(/MSIE/i.test(t)||!0==!!document.documentMode)&&(e=r.IE),getBrowserName.cachedResult=e,getBrowserName.cachedResult}function approximateBelowMaximumCanvasSizeOfBrowser(e,t){const r=getBrowserName(),o=i[r];let a=e,s=t,f=a*s;const l=a>s?s/a:a/s;for(;f>o*o;){const e=(o+a)/2,t=(o+s)/2;e<t?(s=t,a=t*l):(s=e*l,a=e),f=a*s}return{width:a,height:s}}function getNewCanvasAndCtx(e,t){let r,i;try{if(r=new OffscreenCanvas(e,t),i=r.getContext(\"2d\"),null===i)throw new Error(\"getContext of OffscreenCanvas returns null\")}catch(e){r=document.createElement(\"canvas\"),i=r.getContext(\"2d\")}return r.width=e,r.height=t,[r,i]}function drawImageInCanvas(e,t){const{width:r,height:i}=approximateBelowMaximumCanvasSizeOfBrowser(e.width,e.height),[o,a]=getNewCanvasAndCtx(r,i);return t&&/jpe?g/.test(t)&&(a.fillStyle=\"white\",a.fillRect(0,0,o.width,o.height)),a.drawImage(e,0,0,o.width,o.height),o}function isIOS(){return void 0!==isIOS.cachedResult||(isIOS.cachedResult=[\"iPad Simulator\",\"iPhone Simulator\",\"iPod Simulator\",\"iPad\",\"iPhone\",\"iPod\"].includes(navigator.platform)||navigator.userAgent.includes(\"Mac\")&&\"undefined\"!=typeof document&&\"ontouchend\"in document),isIOS.cachedResult}function drawFileInCanvas(e,t={}){return new Promise(function(i,o){let a,s;var $Try_2_Post=function(){try{return s=drawImageInCanvas(a,t.fileType||e.type),i([a,s])}catch(e){return o(e)}},$Try_2_Catch=function(t){try{0;var $Try_3_Catch=function(e){try{throw e}catch(e){return o(e)}};try{let t;return getDataUrlFromFile(e).then(function(e){try{return t=e,loadImage(t).then(function(e){try{return a=e,function(){try{return $Try_2_Post()}catch(e){return o(e)}}()}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){return $Try_3_Catch(e)}},$Try_3_Catch)}catch(e){$Try_3_Catch(e)}}catch(e){return o(e)}};try{if(isIOS()||[r.DESKTOP_SAFARI,r.MOBILE_SAFARI].includes(getBrowserName()))throw new Error(\"Skip createImageBitmap on IOS and Safari\");return createImageBitmap(e).then(function(e){try{return a=e,$Try_2_Post()}catch(e){return $Try_2_Catch()}},$Try_2_Catch)}catch(e){$Try_2_Catch()}})}function canvasToFile(e,r,i,o,a=1){return new Promise(function(s,f){let l;if(\"image/png\"===r){let c,u,h;return c=e.getContext(\"2d\"),{data:u}=c.getImageData(0,0,e.width,e.height),h=UPNG.encode([u.buffer],e.width,e.height,4096*a),l=new Blob([h],{type:r}),l.name=i,l.lastModified=o,$If_4.call(this)}{if(\"image/bmp\"===r)return new Promise(r=>t.toBlob(e,r)).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_5.call(this)}catch(e){return f(e)}}.bind(this),f);{if(\"function\"==typeof OffscreenCanvas&&e instanceof OffscreenCanvas)return e.convertToBlob({type:r,quality:a}).then(function(e){try{return l=e,l.name=i,l.lastModified=o,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f);{let d;return d=e.toDataURL(r,a),getFilefromDataUrl(d,i,o).then(function(e){try{return l=e,$If_6.call(this)}catch(e){return f(e)}}.bind(this),f)}function $If_6(){return $If_5.call(this)}}function $If_5(){return $If_4.call(this)}}function $If_4(){return s(l)}})}function cleanupCanvasMemory(e){e.width=0,e.height=0}function isAutoOrientationInBrowser(){return new Promise(function(e,t){let r,i,o,a,s;return void 0!==isAutoOrientationInBrowser.cachedResult?e(isAutoOrientationInBrowser.cachedResult):(r=\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\",\"test.jpg\",Date.now()).then(function(r){try{return i=r,drawFileInCanvas(i).then(function(r){try{return o=r[1],canvasToFile(o,i.type,i.name,i.lastModified).then(function(r){try{return a=r,cleanupCanvasMemory(o),drawFileInCanvas(a).then(function(r){try{return s=r[0],isAutoOrientationInBrowser.cachedResult=1===s.width&&2===s.height,e(isAutoOrientationInBrowser.cachedResult)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t)}catch(e){return t(e)}},t))})}function getExifOrientation(e){return new Promise((t,r)=>{const i=new CustomFileReader;i.onload=e=>{const r=new DataView(e.target.result);if(65496!=r.getUint16(0,!1))return t(-2);const i=r.byteLength;let o=2;for(;o<i;){if(r.getUint16(o+2,!1)<=8)return t(-1);const e=r.getUint16(o,!1);if(o+=2,65505==e){if(1165519206!=r.getUint32(o+=2,!1))return t(-1);const e=18761==r.getUint16(o+=6,!1);o+=r.getUint32(o+4,e);const i=r.getUint16(o,e);o+=2;for(let a=0;a<i;a++)if(274==r.getUint16(o+12*a,e))return t(r.getUint16(o+12*a+8,e))}else{if(65280!=(65280&e))break;o+=r.getUint16(o,!1)}}return t(-1)},i.onerror=e=>r(e),i.readAsArrayBuffer(e)})}function handleMaxWidthOrHeight(e,t){const{width:r}=e,{height:i}=e,{maxWidthOrHeight:o}=t;let a,s=e;return isFinite(o)&&(r>o||i>o)&&([s,a]=getNewCanvasAndCtx(r,i),r>i?(s.width=o,s.height=i/r*o):(s.width=r/i*o,s.height=o),a.drawImage(e,0,0,s.width,s.height),cleanupCanvasMemory(e)),s}function followExifOrientation(e,t){const{width:r}=e,{height:i}=e,[o,a]=getNewCanvasAndCtx(r,i);switch(t>4&&t<9?(o.width=i,o.height=r):(o.width=r,o.height=i),t){case 2:a.transform(-1,0,0,1,r,0);break;case 3:a.transform(-1,0,0,-1,r,i);break;case 4:a.transform(1,0,0,-1,0,i);break;case 5:a.transform(0,1,1,0,0,0);break;case 6:a.transform(0,1,-1,0,i,0);break;case 7:a.transform(0,-1,-1,0,i,r);break;case 8:a.transform(0,-1,1,0,0,r)}return a.drawImage(e,0,0,r,i),cleanupCanvasMemory(e),o}function compress(e,t,r=0){return new Promise(function(i,o){let a,s,f,l,c,u,h,d,A,g,p,m,w,v,b,y,E,F,_,B;function incProgress(e=5){if(t.signal&&t.signal.aborted)throw t.signal.reason;a+=e,t.onProgress(Math.min(a,100))}function setProgress(e){if(t.signal&&t.signal.aborted)throw t.signal.reason;a=Math.min(Math.max(e,a),100),t.onProgress(a)}return a=r,s=t.maxIteration||10,f=1024*t.maxSizeMB*1024,incProgress(),drawFileInCanvas(e,t).then(function(r){try{return[,l]=r,incProgress(),c=handleMaxWidthOrHeight(l,t),incProgress(),new Promise(function(r,i){var o;if(!(o=t.exifOrientation))return getExifOrientation(e).then(function(e){try{return o=e,$If_2.call(this)}catch(e){return i(e)}}.bind(this),i);function $If_2(){return r(o)}return $If_2.call(this)}).then(function(r){try{return u=r,incProgress(),isAutoOrientationInBrowser().then(function(r){try{return h=r?c:followExifOrientation(c,u),incProgress(),d=t.initialQuality||1,A=t.fileType||e.type,canvasToFile(h,A,e.name,e.lastModified,d).then(function(r){try{{if(g=r,incProgress(),p=g.size>f,m=g.size>e.size,!p&&!m)return setProgress(100),i(g);var a;function $Loop_3(){if(s--&&(b>f||b>w)){let t,r;return t=B?.95*_.width:_.width,r=B?.95*_.height:_.height,[E,F]=getNewCanvasAndCtx(t,r),F.drawImage(_,0,0,t,r),d*=\"image/png\"===A?.85:.95,canvasToFile(E,A,e.name,e.lastModified,d).then(function(e){try{return y=e,cleanupCanvasMemory(_),_=E,b=y.size,setProgress(Math.min(99,Math.floor((v-b)/(v-f)*100))),$Loop_3}catch(e){return o(e)}},o)}return[1]}return w=e.size,v=g.size,b=v,_=h,B=!t.alwaysKeepResolution&&p,(a=function(e){for(;e;){if(e.then)return void e.then(a,o);try{if(e.pop){if(e.length)return e.pop()?$Loop_3_exit.call(this):e;e=$Loop_3}else e=e.call(this)}catch(e){return o(e)}}}.bind(this))($Loop_3);function $Loop_3_exit(){return cleanupCanvasMemory(_),cleanupCanvasMemory(E),cleanupCanvasMemory(c),cleanupCanvasMemory(h),cleanupCanvasMemory(l),setProgress(100),i(y)}}}catch(u){return o(u)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)}catch(e){return o(e)}}.bind(this),o)})}const f=\"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";let l;function compressOnWebWorker(e,t){return new Promise((r,i)=>{l||(l=function createWorkerScriptURL(e){const t=[];return\"function\"==typeof e?t.push(`(${e})()`):t.push(e),URL.createObjectURL(new Blob(t))}(f));const o=new Worker(l);o.addEventListener(\"message\",function handler(e){if(t.signal&&t.signal.aborted)o.terminate();else if(void 0===e.data.progress){if(e.data.error)return i(new Error(e.data.error)),void o.terminate();r(e.data.file),o.terminate()}else t.onProgress(e.data.progress)}),o.addEventListener(\"error\",i),t.signal&&t.signal.addEventListener(\"abort\",()=>{i(t.signal.reason),o.terminate()}),o.postMessage({file:e,imageCompressionLibUrl:t.libURL,options:{...t,onProgress:void 0,signal:void 0}})})}function imageCompression(e,t){return new Promise(function(r,i){let o,a,s,f,l,c;if(o={...t},s=0,{onProgress:f}=o,o.maxSizeMB=o.maxSizeMB||Number.POSITIVE_INFINITY,l=\"boolean\"!=typeof o.useWebWorker||o.useWebWorker,delete o.useWebWorker,o.onProgress=e=>{s=e,\"function\"==typeof f&&f(s)},!(1||e instanceof Blob||e instanceof CustomFile))return i(new Error(\"The file given is not an instance of Blob or File\"));if(!/^image/.test(e.type))return i(new Error(\"The file given is not an image\"));if(c=\"undefined\"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope,!l||\"function\"!=typeof Worker||c)return compress(e,o).then(function(e){try{return a=e,$If_4.call(this)}catch(e){return i(e)}}.bind(this),i);var u=function(){try{return $If_4.call(this)}catch(e){return i(e)}}.bind(this),$Try_1_Catch=function(t){try{return compress(e,o).then(function(e){try{return a=e,u()}catch(e){return i(e)}},i)}catch(e){return i(e)}};try{return o.libURL=o.libURL||\"https://cdn.bootcdn.net/ajax/libs/browser-image-compression/2.0.2/browser-image-compression.js\",compressOnWebWorker(e,o).then(function(e){try{return a=e,u()}catch(e){return $Try_1_Catch()}},$Try_1_Catch)}catch(e){$Try_1_Catch()}function $If_4(){try{a.name=e.name,a.lastModified=e.lastModified}catch(e){}try{o.preserveExif&&\"image/jpeg\"===e.type&&(!o.fileType||o.fileType&&o.fileType===e.type)&&(a=copyExifWithoutOrientation(e,a))}catch(e){}return r(a)}})}return imageCompression.getDataUrlFromFile=getDataUrlFromFile,imageCompression.getFilefromDataUrl=getFilefromDataUrl,imageCompression.loadImage=loadImage,imageCompression.drawImageInCanvas=drawImageInCanvas,imageCompression.drawFileInCanvas=drawFileInCanvas,imageCompression.canvasToFile=canvasToFile,imageCompression.getExifOrientation=getExifOrientation,imageCompression.handleMaxWidthOrHeight=handleMaxWidthOrHeight,imageCompression.followExifOrientation=followExifOrientation,imageCompression.cleanupCanvasMemory=cleanupCanvasMemory,imageCompression.isAutoOrientationInBrowser=isAutoOrientationInBrowser,imageCompression.approximateBelowMaximumCanvasSizeOfBrowser=approximateBelowMaximumCanvasSizeOfBrowser,imageCompression.copyExifWithoutOrientation=copyExifWithoutOrientation,imageCompression.getBrowserName=getBrowserName,imageCompression.version=\"2.0.2\",imageCompression});return{compress:function(file,option){return imageCompression(file,option)}}}();UE.dialog=function(){return{loadingPlaceholder:function(me){var loadingId=\"loading_\"+(+new Date).toString(36);me.focus();me.execCommand(\"inserthtml\",'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">');return loadingId},removeLoadingPlaceholder:function(me,loadingId){var loader=me.document.getElementById(loadingId);if(loader){domUtils.remove(loader,false)}},tipError:function(me,title){me.fireEvent(\"showmessage\",{content:title,type:\"error\",timeout:4e3})}}}();var filterWord=UE.filterWord=function(){function isWordDocument(str){return/(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(str)}function transUnit(v){v=v.replace(/[\\d.]+\\w+/g,function(m){return utils.transUnitToPx(m)});return v}function filterPasteWord(str){return str.replace(/[\\t\\r\\n]+/g,\" \").replace(/<!--[\\s\\S]*?-->/gi,\"\").replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi,function(str){if(browser.opera){return\"\"}try{if(/Bitmap/i.test(str)){return\"\"}var width=str.match(/width:([ \\d.]*p[tx])/i)[1],height=str.match(/height:([ \\d.]*p[tx])/i)[1],src=str.match(/src=\\s*\"([^\"]*)\"/i)[1];return'<img width=\"'+transUnit(width)+'\" height=\"'+transUnit(height)+'\" src=\"'+src+'\" />'}catch(e){return\"\"}}).replace(/<\\/?div[^>]*>/g,\"\").replace(/v:\\w+=([\"']?)[^'\"]+\\1/g,\"\").replace(/<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\"\").replace(/<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\"<p><strong>$1</strong></p>\").replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi,function(str,name,marks,val){return name==\"class\"&&val==\"MsoListParagraph\"?str:\"\"}).replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi,function(a,b,c){return c.replace(/[\\t\\r\\n ]+/g,\" \")}).replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi,function(str,tag,tmp,style){var n=[],s=style.replace(/^\\s+|\\s+$/,\"\").replace(/&#39;/g,\"'\").replace(/&quot;/gi,\"'\").replace(/[\\d.]+(cm|pt)/g,function(str){return utils.transUnitToPx(str)}).split(/;\\s*/g);for(var i=0,v;v=s[i];i++){var name,value,parts=v.split(\":\");if(parts.length==2){name=parts[0].toLowerCase();value=parts[1].toLowerCase();if(/^(background)\\w*/.test(name)&&value.replace(/(initial|\\s)/g,\"\").length==0||/^(margin)\\w*/.test(name)&&/^0\\w+$/.test(value)){continue}switch(name){case\"mso-padding-alt\":case\"mso-padding-top-alt\":case\"mso-padding-right-alt\":case\"mso-padding-bottom-alt\":case\"mso-padding-left-alt\":case\"mso-margin-alt\":case\"mso-margin-top-alt\":case\"mso-margin-right-alt\":case\"mso-margin-bottom-alt\":case\"mso-margin-left-alt\":case\"mso-height\":case\"mso-width\":case\"mso-vertical-align-alt\":if(!/<table/.test(tag))n[i]=name.replace(/^mso-|-alt$/g,\"\")+\":\"+transUnit(value);continue;case\"horiz-align\":n[i]=\"text-align:\"+value;continue;case\"vert-align\":n[i]=\"vertical-align:\"+value;continue;case\"font-color\":case\"mso-foreground\":n[i]=\"color:\"+value;continue;case\"mso-background\":case\"mso-highlight\":n[i]=\"background:\"+value;continue;case\"mso-default-height\":n[i]=\"min-height:\"+transUnit(value);continue;case\"mso-default-width\":n[i]=\"min-width:\"+transUnit(value);continue;case\"mso-padding-between-alt\":n[i]=\"border-collapse:separate;border-spacing:\"+transUnit(value);continue;case\"text-line-through\":if(value==\"single\"||value==\"double\"){n[i]=\"text-decoration:line-through\"}continue;case\"mso-zero-height\":if(value==\"yes\"){n[i]=\"display:none\"}continue;case\"margin\":if(!/[1-9]/.test(value)){continue}}if(/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(name)||/text\\-indent|padding|margin/.test(name)&&/\\-[\\d.]+/.test(value)){continue}n[i]=name+\":\"+parts[1]}}return tag+(n.length?' style=\"'+n.join(\";\").replace(/;{2,}/g,\";\")+'\"':\"\")})}return function(html){return isWordDocument(html)?filterPasteWord(html):html}}();(function(){var uNode=UE.uNode=function(obj){this.type=obj.type;this.data=obj.data;this.tagName=obj.tagName;this.parentNode=obj.parentNode;this.attrs=obj.attrs||{};this.children=obj.children};var notTransAttrs={href:1,src:1,_src:1,_href:1,cdata_data:1};var notTransTagName={style:1,script:1};var indentChar=\"    \",breakChar=\"\\n\";function insertLine(arr,current,begin){arr.push(breakChar);return current+(begin?1:-1)}function insertIndent(arr,current){for(var i=0;i<current;i++){arr.push(indentChar)}}uNode.createElement=function(html){if(/[<>]/.test(html)){return UE.htmlparser(html).children[0]}else{return new uNode({type:\"element\",children:[],tagName:html})}};uNode.createText=function(data,noTrans){return new UE.uNode({type:\"text\",data:noTrans?data:utils.unhtml(data||\"\")})};function nodeToHtml(node,arr,formatter,current){switch(node.type){case\"root\":for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current,true);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}break;case\"text\":isText(node,arr);break;case\"element\":isElement(node,arr,formatter,current);break;case\"comment\":isComment(node,arr,formatter)}return arr}function isText(node,arr){if(node.parentNode.tagName==\"pre\"){arr.push(node.data)}else{arr.push(notTransTagName[node.parentNode.tagName]?utils.html(node.data):node.data.replace(/[ ]{2}/g,\" &nbsp;\"))}}function isElement(node,arr,formatter,current){var attrhtml=\"\";if(node.attrs){attrhtml=[];var attrs=node.attrs;for(var a in attrs){attrhtml.push(a+(attrs[a]!==undefined?'=\"'+(notTransAttrs[a]?utils.html(attrs[a]).replace(/[\"]/g,function(a){return\"&quot;\"}):utils.unhtml(attrs[a]))+'\"':\"\"))}attrhtml=attrhtml.join(\" \")}arr.push(\"<\"+node.tagName+(attrhtml?\" \"+attrhtml:\"\")+(dtd.$empty[node.tagName]?\"/\":\"\")+\">\");if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current,true);insertIndent(arr,current)}}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){if(formatter&&ci.type==\"element\"&&!dtd.$inlineWithA[ci.tagName]&&i>1){insertLine(arr,current);insertIndent(arr,current)}nodeToHtml(ci,arr,formatter,current)}}if(!dtd.$empty[node.tagName]){if(formatter&&!dtd.$inlineWithA[node.tagName]&&node.tagName!=\"pre\"){if(node.children&&node.children.length){current=insertLine(arr,current);insertIndent(arr,current)}}arr.push(\"</\"+node.tagName+\">\")}}function isComment(node,arr){arr.push(\"\\x3c!--\"+node.data+\"--\\x3e\")}function getNodeById(root,id){var node;if(root.type==\"element\"&&root.getAttr(\"id\")==id){return root}if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i++];){if(node=getNodeById(ci,id)){return node}}}}function getNodesByTagName(node,tagName,arr){if(node.type==\"element\"&&node.tagName==tagName){arr.push(node)}if(node.children&&node.children.length){for(var i=0,ci;ci=node.children[i++];){getNodesByTagName(ci,tagName,arr)}}}function nodeTraversal(root,fn){if(root.children&&root.children.length){for(var i=0,ci;ci=root.children[i];){nodeTraversal(ci,fn);if(ci.parentNode){if(ci.children&&ci.children.length){fn(ci)}if(ci.parentNode)i++}}}else{fn(root)}}uNode.prototype={toHtml:function(formatter){var arr=[];nodeToHtml(this,arr,formatter,0);return arr.join(\"\")},innerHTML:function(htmlstr){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(utils.isString(htmlstr)){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];var tmpRoot=UE.htmlparser(htmlstr);for(var i=0,ci;ci=tmpRoot.children[i++];){this.children.push(ci);ci.parentNode=this}return this}else{var tmpRoot=new UE.uNode({type:\"root\",children:this.children});return tmpRoot.toHtml()}},innerText:function(textStr,noTrans){if(this.type!=\"element\"||dtd.$empty[this.tagName]){return this}if(textStr){if(this.children){for(var i=0,ci;ci=this.children[i++];){ci.parentNode=null}}this.children=[];this.appendChild(uNode.createText(textStr,noTrans));return this}else{return this.toHtml().replace(/<[^>]+>/g,\"\")}},getData:function(){if(this.type==\"element\")return\"\";return this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i==0?null:parent.children[i-1]}}},nextSibling:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i++];){if(ci===this){return parent.children[i]}}},replaceChild:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,1,target);source.parentNode=null;target.parentNode=this;return target}}}},appendChild:function(node){if(this.type==\"root\"||this.type==\"element\"&&!dtd.$empty[this.tagName]){if(!this.children){this.children=[]}if(node.parentNode){node.parentNode.removeChild(node)}for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);break}}this.children.push(node);node.parentNode=this;return node}},insertBefore:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i,0,target);target.parentNode=this;return target}}}},insertAfter:function(target,source){if(this.children){if(target.parentNode){target.parentNode.removeChild(target)}for(var i=0,ci;ci=this.children[i];i++){if(ci===source){this.children.splice(i+1,0,target);target.parentNode=this;return target}}}},removeChild:function(node,keepChildren){if(this.children){for(var i=0,ci;ci=this.children[i];i++){if(ci===node){this.children.splice(i,1);ci.parentNode=null;if(keepChildren&&ci.children&&ci.children.length){for(var j=0,cj;cj=ci.children[j];j++){this.children.splice(i+j,0,cj);cj.parentNode=this}}return ci}}}},getAttr:function(attrName){return this.attrs&&this.attrs[attrName.toLowerCase()]},setAttr:function(attrName,attrVal){if(!attrName){delete this.attrs;return}if(!this.attrs){this.attrs={}}if(utils.isObject(attrName)){for(var a in attrName){if(!attrName[a]){delete this.attrs[a]}else{this.attrs[a.toLowerCase()]=attrName[a]}}}else{if(!attrVal){delete this.attrs[attrName]}else{this.attrs[attrName.toLowerCase()]=attrVal}}},getIndex:function(){var parent=this.parentNode;for(var i=0,ci;ci=parent.children[i];i++){if(ci===this){return i}}return-1},getNodeById:function(id){var node;if(this.children&&this.children.length){for(var i=0,ci;ci=this.children[i++];){if(node=getNodeById(ci,id)){return node}}}},getNodesByTagName:function(tagNames){tagNames=utils.trim(tagNames).replace(/[ ]{2,}/g,\" \").split(\" \");var arr=[],me=this;utils.each(tagNames,function(tagName){if(me.children&&me.children.length){for(var i=0,ci;ci=me.children[i++];){getNodesByTagName(ci,tagName,arr)}}});return arr},getStyle:function(name){var cssStyle=this.getAttr(\"style\");if(!cssStyle){return\"\"}var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+)\",\"i\");var match=cssStyle.match(reg);if(match&&match[0]){return match[2]}return\"\"},setStyle:function(name,val){function exec(name,val){var reg=new RegExp(\"(^|;)\\\\s*\"+name+\":([^;]+;?)\",\"gi\");cssStyle=cssStyle.replace(reg,\"$1\");if(val){cssStyle=name+\":\"+utils.unhtml(val)+\";\"+cssStyle}}var cssStyle=this.getAttr(\"style\");if(!cssStyle){cssStyle=\"\"}if(utils.isObject(name)){for(var a in name){exec(a,name[a])}}else{exec(name,val)}this.setAttr(\"style\",utils.trim(cssStyle))},traversal:function(fn){if(this.children&&this.children.length){nodeTraversal(this,fn)}return this}}})();var htmlparser=UE.htmlparser=function(htmlstr,ignoreBlank){var re_tag=/<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,re_attr=/([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g;var allowEmptyTags={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};htmlstr=htmlstr.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(!ignoreBlank){htmlstr=htmlstr.replace(new RegExp(\"[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\"+(ignoreBlank?\"\":\" \")+\"]*\",\"g\"),function(a,b){if(b&&allowEmptyTags[b.toLowerCase()]){return a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g,\"\")}return a.replace(new RegExp(\"^[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+\"),\"\").replace(new RegExp(\"[\\\\r\\\\n\"+(ignoreBlank?\"\":\" \")+\"]+$\"),\"\")})}var notTransAttrs={href:1,src:1};var uNode=UE.uNode,needParentNode={td:\"tr\",tr:[\"tbody\",\"thead\",\"tfoot\"],tbody:\"table\",th:\"tr\",thead:\"table\",tfoot:\"table\",caption:\"table\",li:[\"ul\",\"ol\"],dt:\"dl\",dd:\"dl\",option:\"select\"},needChild={ol:\"li\",ul:\"li\"};function text(parent,data){if(needChild[parent.tagName]){var tmpNode=uNode.createElement(needChild[parent.tagName]);parent.appendChild(tmpNode);tmpNode.appendChild(uNode.createText(data));parent=tmpNode}else{parent.appendChild(uNode.createText(data))}}function element(parent,tagName,htmlattr){var needParentTag;if(needParentTag=needParentNode[tagName]){var tmpParent=parent,hasParent;while(tmpParent.type!=\"root\"){if(utils.isArray(needParentTag)?utils.indexOf(needParentTag,tmpParent.tagName)!=-1:needParentTag==tmpParent.tagName){parent=tmpParent;hasParent=true;break}tmpParent=tmpParent.parentNode}if(!hasParent){parent=element(parent,utils.isArray(needParentTag)?needParentTag[0]:needParentTag)}}var elm=new uNode({parentNode:parent,type:\"element\",tagName:tagName.toLowerCase(),children:dtd.$empty[tagName]?null:[]});if(htmlattr){var attrs={},match;while(match=re_attr.exec(htmlattr)){attrs[match[1].toLowerCase()]=notTransAttrs[match[1].toLowerCase()]?match[2]||match[3]||match[4]:utils.unhtml(match[2]||match[3]||match[4])}elm.attrs=attrs}parent.children.push(elm);return dtd.$empty[tagName]?parent:elm}function comment(parent,data){parent.children.push(new uNode({type:\"comment\",data:data,parentNode:parent}))}var match,currentIndex=0,nextIndex=0;var root=new uNode({type:\"root\",children:[]});var currentParent=root;while(match=re_tag.exec(htmlstr)){currentIndex=match.index;try{if(currentIndex>nextIndex){text(currentParent,htmlstr.slice(nextIndex,currentIndex))}if(match[3]){if(dtd.$cdata[currentParent.tagName]){text(currentParent,match[0])}else{currentParent=element(currentParent,match[3].toLowerCase(),match[4])}}else if(match[1]){if(currentParent.type!=\"root\"){if(dtd.$cdata[currentParent.tagName]&&!dtd.$cdata[match[1]]){text(currentParent,match[0])}else{var tmpParent=currentParent;while(currentParent.type==\"element\"&&currentParent.tagName!=match[1].toLowerCase()){currentParent=currentParent.parentNode;if(currentParent.type==\"root\"){currentParent=tmpParent;throw\"break\"}}currentParent=currentParent.parentNode}}}else if(match[2]){comment(currentParent,match[2])}}catch(e){}nextIndex=re_tag.lastIndex}if(nextIndex<htmlstr.length){text(currentParent,htmlstr.slice(nextIndex))}return root};var filterNode=UE.filterNode=function(){function filterNode(node,rules){switch(node.type){case\"text\":break;case\"element\":var val;if(val=rules[node.tagName]){if(val===\"-\"){node.parentNode.removeChild(node)}else if(utils.isFunction(val)){var parentNode=node.parentNode,index=node.getIndex();val(node);if(node.parentNode){if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}else{var attrs=val[\"$\"];if(attrs&&node.attrs){var tmpAttrs={},tmpVal;for(var a in attrs){tmpVal=node.getAttr(a);if(a==\"style\"&&utils.isArray(attrs[a])){var tmpCssStyle=[];utils.each(attrs[a],function(v){var tmp;if(tmp=node.getStyle(v)){tmpCssStyle.push(v+\":\"+tmp)}});tmpVal=tmpCssStyle.join(\";\")}if(tmpVal){tmpAttrs[a]=tmpVal}}node.attrs=tmpAttrs}if(node.children){for(var i=0,ci;ci=node.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}}else{if(dtd.$cdata[node.tagName]){node.parentNode.removeChild(node)}else{var parentNode=node.parentNode,index=node.getIndex();node.parentNode.removeChild(node,true);for(var i=index,ci;ci=parentNode.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}}}break;case\"comment\":node.parentNode.removeChild(node)}}return function(root,rules){if(utils.isEmptyObject(rules)){return root}var val;if(val=rules[\"-\"]){utils.each(val.split(\" \"),function(k){rules[k]=\"-\"})}for(var i=0,ci;ci=root.children[i];){filterNode(ci,rules);if(ci.parentNode){i++}}return root}}();UE.plugin=function(){var _plugins={};return{register:function(pluginName,fn,oldOptionName,afterDisabled){if(oldOptionName&&utils.isFunction(oldOptionName)){afterDisabled=oldOptionName;oldOptionName=null}_plugins[pluginName]={optionName:oldOptionName||pluginName,execFn:fn,afterDisabled:afterDisabled}},load:function(editor){utils.each(_plugins,function(plugin){var _export=plugin.execFn.call(editor);if(editor.options[plugin.optionName]!==false){if(_export){utils.each(_export,function(v,k){switch(k.toLowerCase()){case\"shortcutkey\":editor.addshortcutkey(v);break;case\"bindevents\":utils.each(v,function(fn,eventName){editor.addListener(eventName,fn)});break;case\"bindmultievents\":utils.each(utils.isArray(v)?v:[v],function(event){var types=utils.trim(event.type).split(/\\s+/);utils.each(types,function(eventName){editor.addListener(eventName,event.handler)})});break;case\"commands\":utils.each(v,function(execFn,execName){editor.commands[execName]=execFn});break;case\"outputrule\":editor.addOutputRule(v);break;case\"inputrule\":editor.addInputRule(v);break;case\"defaultoptions\":editor.setOpt(v)}})}}else if(plugin.afterDisabled){plugin.afterDisabled.call(editor)}});utils.each(UE.plugins,function(plugin){plugin.call(editor)})},run:function(pluginName,editor){var plugin=_plugins[pluginName];if(plugin){plugin.exeFn.call(editor)}}}}();var keymap=UE.keymap={Backspace:8,Tab:9,Enter:13,Shift:16,Control:17,Alt:18,CapsLock:20,Esc:27,Spacebar:32,PageUp:33,PageDown:34,End:35,Home:36,Left:37,Up:38,Right:39,Down:40,Insert:45,Del:46,NumLock:144,Cmd:91,\"=\":187,\"-\":189,b:66,i:73,z:90,y:89,v:86,x:88,s:83,n:78};var LocalStorage=UE.LocalStorage=function(){var storage=window.localStorage;return{saveLocalData:function(key,data){if(!storage){return false}storage.setItem(key,data);return true},getLocalData:function(key){if(!storage){return null}return storage.getItem(key)||null},removeItem:function(key){storage&&storage.removeItem(key)}}}();(function(){var ROOT_KEY=\"UEditorPlusPref\";UE.Editor.prototype.setPreferences=function(key,value){var obj={};if(utils.isString(key)){obj[key]=value}else{obj=key}var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){utils.extend(data,obj)}else{data=obj}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))};UE.Editor.prototype.getPreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){return key?data[key]:data}return null};UE.Editor.prototype.removePreferences=function(key){var data=LocalStorage.getLocalData(ROOT_KEY);if(data&&(data=utils.str2json(data))){data[key]=undefined;delete data[key]}data&&LocalStorage.saveLocalData(ROOT_KEY,utils.json2str(data))}})();UE.plugins[\"defaultfilter\"]=function(){var me=this;me.setOpt({allowDivTransToP:true,disabledTableInTable:true,rgb2Hex:true});me.addInputRule(function(root){var allowDivTransToP=this.options.allowDivTransToP;var val;function tdParent(node){while(node&&node.type==\"element\"){if(node.tagName==\"td\"){return true}node=node.parentNode}return false}root.traversal(function(node){if(node.type==\"element\"){if(!dtd.$cdata[node.tagName]&&me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"style\":case\"script\":node.setAttr({cdata_tag:node.tagName,cdata_data:node.innerHTML()||\"\",_ue_custom_node_:\"true\"});node.tagName=\"div\";node.innerHTML(\"\");break;case\"a\":if(val=node.getAttr(\"href\")){node.setAttr(\"_href\",val)}break;case\"img\":if(val=node.getAttr(\"src\")){if(/^data:/.test(val)){node.parentNode.removeChild(node);break}}node.setAttr(\"_src\",node.getAttr(\"src\"));break;case\"span\":if(browser.webkit&&(val=node.getStyle(\"white-space\"))){if(/nowrap|normal/.test(val)){node.setStyle(\"white-space\",\"\");if(me.options.autoClearEmptyNode&&utils.isEmptyObject(node.attrs)){node.parentNode.removeChild(node,true)}}}val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}break;case\"p\":if(val=node.getAttr(\"align\")){node.setAttr(\"align\");node.setStyle(\"text-align\",val)}utils.each(node.children,function(n){if(n.type==\"element\"&&n.tagName==\"p\"){var next=n.nextSibling();node.parentNode.insertAfter(n,node);var last=n;while(next){var tmp=next.nextSibling();node.parentNode.insertAfter(next,last);last=next;next=tmp}return false}});if(!node.firstChild()){node.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}break;case\"div\":if(node.getAttr(\"cdata_tag\")){break}val=node.getAttr(\"class\");if(val&&/^line number\\d+/.test(val)){break}if(!allowDivTransToP){break}var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node);break;case\"dl\":node.tagName=\"ul\";break;case\"dt\":case\"dd\":node.tagName=\"li\";break;case\"li\":var className=node.getAttr(\"class\");if(!className||!/list\\-/.test(className)){node.setAttr()}var tmpNodes=node.getNodesByTagName(\"ol ul\");UE.utils.each(tmpNodes,function(n){node.parentNode.insertAfter(n,node)});break;case\"td\":case\"th\":case\"caption\":if(!node.children||!node.children.length){node.appendChild(browser.ie11below?UE.uNode.createText(\" \"):UE.uNode.createElement(\"br\"))}break;case\"table\":if(me.options.disabledTableInTable&&tdParent(node)){node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node);node.parentNode.removeChild(node)}}}})});me.addOutputRule(function(root){var val;root.traversal(function(node){if(node.type==\"element\"){if(me.options.autoClearEmptyNode&&dtd.$inline[node.tagName]&&!dtd.$empty[node.tagName]&&(!node.attrs||utils.isEmptyObject(node.attrs))){if(!node.firstChild())node.parentNode.removeChild(node);else if(node.tagName==\"span\"&&(!node.attrs||utils.isEmptyObject(node.attrs))){node.parentNode.removeChild(node,true)}return}switch(node.tagName){case\"div\":if(val=node.getAttr(\"cdata_tag\")){node.tagName=val;node.appendChild(UE.uNode.createText(node.getAttr(\"cdata_data\")));node.setAttr({cdata_tag:\"\",cdata_data:\"\",_ue_custom_node_:\"\"})}break;case\"a\":if(val=node.getAttr(\"_href\")){node.setAttr({href:utils.html(val),_href:\"\"})}break;break;case\"span\":val=node.getAttr(\"id\");if(val&&/^_baidu_bookmark_/i.test(val)){node.parentNode.removeChild(node)}if(me.getOpt(\"rgb2Hex\")){var cssStyle=node.getAttr(\"style\");if(cssStyle){node.setAttr(\"style\",cssStyle.replace(/rgba?\\(([\\d,\\s]+)\\)/g,function(a,value){var array=value.split(\",\");if(array.length>3)return\"\";value=\"#\";for(var i=0,color;color=array[i++];){color=parseInt(color.replace(/[^\\d]/gi,\"\"),10).toString(16);value+=color.length==1?\"0\"+color:color}return value.toUpperCase()}))}}break;case\"img\":if(val=node.getAttr(\"_src\")){node.setAttr({src:node.getAttr(\"_src\"),_src:\"\"})}}}})})};UE.commands[\"inserthtml\"]={execCommand:function(command,html,notNeedFilter){var me=this,range,div;if(!html){return}if(me.fireEvent(\"beforeinserthtml\",html)===true){return}range=me.selection.getRange();div=range.document.createElement(\"div\");div.style.display=\"inline\";if(!notNeedFilter){var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);html=root.toHtml()}div.innerHTML=utils.trim(html);if(!range.collapsed){var tmpNode=range.startContainer;if(domUtils.isFillChar(tmpNode)){range.setStartBefore(tmpNode)}tmpNode=range.endContainer;if(domUtils.isFillChar(tmpNode)){range.setEndAfter(tmpNode)}range.txtToElmBoundary();if(range.endContainer&&range.endContainer.nodeType==1){tmpNode=range.endContainer.childNodes[range.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){range.setEndAfter(tmpNode)}}if(range.startOffset==0){tmpNode=range.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=range.endContainer;if(range.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).collapse(true)}}}!range.collapsed&&range.deleteContents();if(range.startContainer.nodeType==1){var child=range.startContainer.childNodes[range.startOffset],pre;if(child&&domUtils.isBlockElm(child)&&(pre=child.previousSibling)&&domUtils.isBlockElm(pre)){range.setEnd(pre,pre.childNodes.length).collapse();while(child.firstChild){pre.appendChild(child.firstChild)}domUtils.remove(child)}}}var child,parent,pre,tmp,hadBreak=0,nextNode;if(range.inFillChar()){child=range.startContainer;if(domUtils.isFillChar(child)){range.setStartBefore(child).collapse(true);domUtils.remove(child)}else if(domUtils.isFillChar(child,true)){child.nodeValue=child.nodeValue.replace(fillCharReg,\"\");range.startOffset--;range.collapsed&&range.collapse(true)}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var next,last;while(child=div.firstChild){while(child&&(child.nodeType==3||!domUtils.isBlockElm(child)||child.tagName==\"HR\")){next=child.nextSibling;range.insertNode(child).collapse();last=child;child=next}if(child){if(/^(ol|ul)$/i.test(child.tagName)){while(child.firstChild){last=child.firstChild;domUtils.insertAfter(li,child.firstChild);li=li.nextSibling}domUtils.remove(child)}else{var tmpLi;next=child.nextSibling;tmpLi=me.document.createElement(\"li\");domUtils.insertAfter(li,tmpLi);tmpLi.appendChild(child);last=child;child=next;li=tmpLi}}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(domUtils.isEmptyBlock(li)){domUtils.remove(li)}if(last){range.setStartAfter(last).collapse(true).select(true)}}else{while(child=div.firstChild){if(hadBreak){var p=me.document.createElement(\"p\");while(child&&(child.nodeType==3||!dtd.$block[child.tagName])){nextNode=child.nextSibling;p.appendChild(child);child=nextNode}if(p.firstChild){child=p}}range.insertNode(child);nextNode=child.nextSibling;if(!hadBreak&&child.nodeType==domUtils.NODE_ELEMENT&&domUtils.isBlockElm(child)){parent=domUtils.findParent(child,function(node){return domUtils.isBlockElm(node)});if(parent&&parent.tagName.toLowerCase()!=\"body\"&&!(dtd[parent.tagName][child.nodeName]&&child.parentNode===parent)){if(!dtd[parent.tagName][child.nodeName]){pre=parent}else{tmp=child.parentNode;while(tmp!==parent){pre=tmp;tmp=tmp.parentNode}}domUtils.breakParent(child,pre||tmp);var pre=child.previousSibling;domUtils.trimWhiteTextNode(pre);if(!pre.childNodes.length){domUtils.remove(pre)}if(!browser.ie&&(next=child.nextSibling)&&domUtils.isBlockElm(next)&&next.lastChild&&!domUtils.isBr(next.lastChild)){next.appendChild(me.document.createElement(\"br\"))}hadBreak=1}}var next=child.nextSibling;if(!div.firstChild&&next&&domUtils.isBlockElm(next)){range.setStart(next,0).collapse(true);break}range.setEndAfter(child).collapse()}child=range.startContainer;if(nextNode&&domUtils.isBr(nextNode)){domUtils.remove(nextNode)}if(domUtils.isBlockElm(child)&&domUtils.isEmptyNode(child)){if(nextNode=child.nextSibling){domUtils.remove(child);if(nextNode.nodeType==1&&dtd.$block[nextNode.tagName]){range.setStart(nextNode,0).collapse(true).shrinkBoundary()}}else{try{child.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\"}catch(e){range.setStartBefore(child);domUtils.remove(child)}}}try{range.select(true)}catch(e){}}setTimeout(function(){range=me.selection.getRange();range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled?domUtils.getXY(me.iframe).y:0);me.fireEvent(\"afterinserthtml\",html)},200)}};UE.plugins[\"autotypeset\"]=function(){this.setOpt({autotypeset:{mergeEmptyline:true,removeClass:true,removeEmptyline:false,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:false,clearFontSize:false,clearFontFamily:false,removeEmptyNode:false,removeTagNames:utils.extend({div:1},dtd.$removeEmpty),indent:false,indentValue:\"2em\",bdc2sb:false,tobdc:false}});var me=this,opt=me.options.autotypeset,remainClass={selectTdClass:1,pagebreak:1,anchorclass:1},remainTag={li:1},tags={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1},highlightCont;if(!opt){return}readLocalOpts();function isLine(node,notEmpty){if(!node||node.nodeType==3)return 0;if(domUtils.isBr(node))return 1;if(node&&node.parentNode&&tags[node.tagName.toLowerCase()]){if(highlightCont&&highlightCont.contains(node)||node.getAttribute(\"pagebreak\")){return 0}return notEmpty?!domUtils.isEmptyBlock(node):domUtils.isEmptyBlock(node,new RegExp(\"[\\\\s\"+domUtils.fillChar+\"]\",\"g\"))}}function removeNotAttributeSpan(node){if(!node.style.cssText){domUtils.removeAttributes(node,[\"style\"]);if(node.tagName.toLowerCase()==\"span\"&&domUtils.hasNoAttributes(node)){domUtils.remove(node,true)}}}function autotype(type,html){var me=this,cont;if(html){if(!opt.pasteFilter){return}cont=me.document.createElement(\"div\");cont.innerHTML=html.html}else{cont=me.document.body}var nodes=domUtils.getElementsByTagName(cont,\"*\");for(var i=0,ci;ci=nodes[i++];){if(me.fireEvent(\"excludeNodeinautotype\",ci)===true){continue}if(opt.clearFontSize&&ci.style.fontSize){domUtils.removeStyle(ci,\"font-size\");removeNotAttributeSpan(ci)}if(opt.clearFontFamily&&ci.style.fontFamily){domUtils.removeStyle(ci,\"font-family\");removeNotAttributeSpan(ci)}if(isLine(ci)){if(opt.mergeEmptyline){var next=ci.nextSibling,tmpNode,isBr=domUtils.isBr(ci);while(isLine(next)){tmpNode=next;next=tmpNode.nextSibling;if(isBr&&(!next||next&&!domUtils.isBr(next))){break}domUtils.remove(tmpNode)}}if(opt.removeEmptyline&&domUtils.inDoc(ci,cont)&&!remainTag[ci.parentNode.tagName.toLowerCase()]){if(domUtils.isBr(ci)){next=ci.nextSibling;if(next&&!domUtils.isBr(next)){continue}}domUtils.remove(ci);continue}}if(isLine(ci,true)&&ci.tagName!=\"SPAN\"){if(opt.indent){ci.style.textIndent=opt.indentValue}if(opt.textAlign){ci.style.textAlign=opt.textAlign}}if(opt.removeClass&&ci.className&&!remainClass[ci.className.toLowerCase()]){if(highlightCont&&highlightCont.contains(ci)){continue}domUtils.removeAttributes(ci,[\"class\"])}if(opt.imageBlockLine&&ci.tagName.toLowerCase()==\"img\"&&!ci.getAttribute(\"emotion\")){if(html){var img=ci;switch(opt.imageBlockLine){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}}domUtils.setStyle(img,\"float\",opt.imageBlockLine);break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"none\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}var pNode=me.document.createElement(\"p\");domUtils.setAttributes(pNode,{style:\"text-align:center\"});tmpNode.parentNode.insertBefore(pNode,tmpNode);pNode.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\")}}}else{var range=me.selection.getRange();range.selectNode(ci).select();me.execCommand(\"imagefloat\",opt.imageBlockLine)}}if(opt.removeEmptyNode){if(opt.removeTagNames[ci.tagName.toLowerCase()]&&domUtils.hasNoAttributes(ci)&&domUtils.isEmptyBlock(ci)){domUtils.remove(ci)}}}if(opt.tobdc){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=ToDBC(node.data)}});cont.innerHTML=root.toHtml()}if(opt.bdc2sb){var root=UE.htmlparser(cont.innerHTML);root.traversal(function(node){if(node.type==\"text\"){node.data=DBC2SB(node.data)}});cont.innerHTML=root.toHtml()}if(html){html.html=cont.innerHTML}}if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}function DBC2SB(str){var result=\"\";for(var i=0;i<str.length;i++){var code=str.charCodeAt(i);if(code>=65281&&code<=65373){result+=String.fromCharCode(str.charCodeAt(i)-65248)}else if(code==12288){result+=String.fromCharCode(str.charCodeAt(i)-12288+32)}else{result+=str.charAt(i)}}return result}function ToDBC(txtstring){txtstring=utils.html(txtstring);var tmp=\"\";var mark=\"\";for(var i=0;i<txtstring.length;i++){if(txtstring.charCodeAt(i)==32){tmp=tmp+String.fromCharCode(12288)}else if(txtstring.charCodeAt(i)<127){tmp=tmp+String.fromCharCode(txtstring.charCodeAt(i)+65248)}else{tmp+=txtstring.charAt(i)}}return tmp}function readLocalOpts(){var cookieOpt=me.getPreferences(\"autotypeset\");utils.extend(me.options.autotypeset,cookieOpt)}me.commands[\"autotypeset\"]={execCommand:function(){me.removeListener(\"beforepaste\",autotype);if(opt.pasteFilter){me.addListener(\"beforepaste\",autotype)}autotype.call(me)}}};UE.plugin.register(\"autosubmit\",function(){return{shortcutkey:{autosubmit:\"ctrl+13\"},commands:{autosubmit:{execCommand:function(){var me=this,form=domUtils.findParentByTagName(me.iframe,\"form\",false);if(form){if(me.fireEvent(\"beforesubmit\")===false){return}me.sync();form.submit()}}}}}});UE.plugin.register(\"background\",function(){var me=this,cssRuleId=\"editor_background\",isSetColored,reg=new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\",\"i\");function stringToObj(str){var obj={},styles=str.split(\";\");utils.each(styles,function(v){var index=v.indexOf(\":\"),key=utils.trim(v.substr(0,index)).toLowerCase();key&&(obj[key]=utils.trim(v.substr(index+1)||\"\"))});return obj}function setBackground(obj){if(obj){var styles=[];for(var name in obj){if(obj.hasOwnProperty(name)){styles.push(name+\":\"+obj[name]+\"; \")}}utils.cssRule(cssRuleId,styles.length?\"body{\"+styles.join(\"\")+\"}\":\"\",me.document)}else{utils.cssRule(cssRuleId,\"\",me.document)}}var orgFn=me.hasContents;me.hasContents=function(){if(me.queryCommandValue(\"background\")){return true}return orgFn.apply(me,arguments)};return{bindEvents:{getAllHtml:function(type,headHtml){var body=this.body,su=domUtils.getComputedStyle(body,\"background-image\"),url=\"\";if(su.indexOf(me.options.imagePath)>0){url=su.substring(su.indexOf(me.options.imagePath),su.length-1).replace(/\"|\\(|\\)/gi,\"\")}else{url=su!=\"none\"?su.replace(/url\\(\"?|\"?\\)/gi,\"\"):\"\"}var html='<style type=\"text/css\">body{';var bgObj={\"background-color\":domUtils.getComputedStyle(body,\"background-color\")||\"#ffffff\",\"background-image\":url?\"url(\"+url+\")\":\"\",\"background-repeat\":domUtils.getComputedStyle(body,\"background-repeat\")||\"\",\"background-position\":browser.ie?domUtils.getComputedStyle(body,\"background-position-x\")+\" \"+domUtils.getComputedStyle(body,\"background-position-y\"):domUtils.getComputedStyle(body,\"background-position\"),height:domUtils.getComputedStyle(body,\"height\")};for(var name in bgObj){if(bgObj.hasOwnProperty(name)){html+=name+\":\"+bgObj[name]+\"; \"}}html+=\"}</style> \";headHtml.push(html)},aftersetcontent:function(){if(isSetColored==false)setBackground()}},inputRule:function(root){isSetColored=false;utils.each(root.getNodesByTagName(\"p\"),function(p){var styles=p.getAttr(\"data-background\");if(styles){isSetColored=true;setBackground(stringToObj(styles));p.parentNode.removeChild(p)}})},outputRule:function(root){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);if(styles){root.appendChild(UE.uNode.createElement('<p style=\"display:none;\" data-background=\"'+utils.trim(styles[1].replace(/\"/g,\"\").replace(/[\\s]+/g,\" \"))+'\"><br/></p>'))}},commands:{background:{execCommand:function(cmd,obj){setBackground(obj)},queryCommandValue:function(){var me=this,styles=(utils.cssRule(cssRuleId,me.document)||\"\").replace(/[\\n\\r]+/g,\"\").match(reg);return styles?stringToObj(styles[1]):null},notNeedUndo:true}}}});UE.commands[\"imagefloat\"]={execCommand:function(cmd,align){var me=this,range=me.selection.getRange();if(!range.collapsed){var img=range.getClosedNode();if(img&&img.tagName===\"IMG\"){switch(align){case\"left\":case\"right\":case\"none\":var pN=img.parentNode,tmpNode,pre,next;while(dtd.$inline[pN.tagName]||pN.tagName==\"A\"){pN=pN.parentNode}tmpNode=pN;if(tmpNode.tagName==\"P\"&&domUtils.getStyle(tmpNode,\"text-align\")==\"center\"){if(!domUtils.isBody(tmpNode)&&domUtils.getChildCount(tmpNode,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1){pre=tmpNode.previousSibling;next=tmpNode.nextSibling;if(pre&&next&&pre.nodeType==1&&next.nodeType==1&&pre.tagName==next.tagName&&domUtils.isBlockElm(pre)){pre.appendChild(tmpNode.firstChild);while(next.firstChild){pre.appendChild(next.firstChild)}domUtils.remove(tmpNode);domUtils.remove(next)}else{domUtils.setStyle(tmpNode,\"text-align\",\"\")}}range.selectNode(img).select()}domUtils.setStyle(img,\"float\",align==\"none\"?\"\":align);if(align==\"none\"){domUtils.removeAttributes(img,\"align\")}break;case\"center\":if(me.queryCommandValue(\"imagefloat\")!=\"center\"){pN=img.parentNode;domUtils.setStyle(img,\"float\",\"\");domUtils.removeAttributes(img,\"align\");tmpNode=img;while(pN&&domUtils.getChildCount(pN,function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)})==1&&(dtd.$inline[pN.tagName]||pN.tagName==\"A\")){tmpNode=pN;pN=pN.parentNode}range.setStartBefore(tmpNode).setCursor(false);pN=me.document.createElement(\"div\");pN.appendChild(tmpNode);domUtils.setStyle(tmpNode,\"float\",\"\");me.execCommand(\"insertHtml\",'<p id=\"_img_parent_tmp\" style=\"text-align:center\">'+pN.innerHTML+\"</p>\");tmpNode=me.document.getElementById(\"_img_parent_tmp\");tmpNode.removeAttribute(\"id\");tmpNode=tmpNode.firstChild;range.selectNode(tmpNode).select();next=tmpNode.parentNode.nextSibling;if(next&&domUtils.isEmptyNode(next)){domUtils.remove(next)}}break}}}},queryCommandValue:function(){var range=this.selection.getRange(),startNode,floatStyle;if(range.collapsed){return\"none\"}startNode=range.getClosedNode();if(startNode&&startNode.nodeType==1&&startNode.tagName==\"IMG\"){floatStyle=domUtils.getComputedStyle(startNode,\"float\")||startNode.getAttribute(\"align\");if(floatStyle==\"none\"){floatStyle=domUtils.getComputedStyle(startNode.parentNode,\"text-align\")==\"center\"?\"center\":floatStyle}return{left:1,right:1,center:1}[floatStyle]?floatStyle:\"none\"}return\"none\"},queryCommandState:function(){var range=this.selection.getRange(),startNode;if(range.collapsed)return-1;startNode=range.getClosedNode();if(startNode&&startNode.nodeType===1&&startNode.tagName===\"IMG\"){return 0}return-1}};UE.commands[\"insertimage\"]={execCommand:function(cmd,opt){opt=utils.isArray(opt)?opt:[opt];if(!opt.length){return}var me=this,range=me.selection.getRange(),img=range.getClosedNode();if(me.fireEvent(\"beforeinsertimage\",opt)===true){return}if(img&&/img/i.test(img.tagName)&&(img.className!=\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1)&&!img.getAttribute(\"data-word-image\")){var first=opt.shift();var floatStyle=first[\"floatStyle\"];delete first[\"floatStyle\"];domUtils.setAttributes(img,first);me.execCommand(\"imagefloat\",floatStyle);if(opt.length>0){range.setStartAfter(img).setCursor(false,true);me.execCommand(\"insertimage\",opt)}}else{var html=[],str=\"\",ci;ci=opt[0];if(opt.length==1){str='<img src=\"'+ci.src+'\" '+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+(ci[\"floatStyle\"]==\"left\"||ci[\"floatStyle\"]==\"right\"?' style=\"float:'+ci[\"floatStyle\"]+';\"':\"\")+(ci.title&&ci.title!=\"\"?' title=\"'+ci.title+'\"':\"\")+(ci.border&&ci.border!=\"0\"?' border=\"'+ci.border+'\"':\"\")+(ci.alt&&ci.alt!=\"\"?' alt=\"'+ci.alt+'\"':\"\")+(ci.hspace&&ci.hspace!=\"0\"?' hspace = \"'+ci.hspace+'\"':\"\")+(ci.vspace&&ci.vspace!=\"0\"?' vspace = \"'+ci.vspace+'\"':\"\")+\"/>\";if(ci[\"floatStyle\"]==\"center\"){str='<p style=\"text-align: center\">'+str+\"</p>\"}html.push(str)}else{for(var i=0;ci=opt[i++];){str=\"<p \"+(ci[\"floatStyle\"]==\"center\"?'style=\"text-align: center\" ':\"\")+'><img src=\"'+ci.src+'\" '+(ci.width?'width=\"'+ci.width+'\" ':\"\")+(ci._src?' _src=\"'+ci._src+'\" ':\"\")+(ci.height?' height=\"'+ci.height+'\" ':\"\")+' style=\"'+(ci[\"floatStyle\"]&&ci[\"floatStyle\"]!=\"center\"?\"float:\"+ci[\"floatStyle\"]+\";\":\"\")+(ci.border||\"\")+'\" '+(ci.title?' title=\"'+ci.title+'\"':\"\")+\" /></p>\";html.push(str)}}me.execCommand(\"insertHtml\",html.join(\"\"))}me.fireEvent(\"afterinsertimage\",opt)}};UE.plugins[\"justify\"]=function(){var me=this,block=domUtils.isBlockElm,defaultValue={left:1,right:1,center:1,justify:1},doJustify=function(range,style){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)};range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){domUtils.setStyles(common,utils.isString(style)?{\"text-align\":style}:style);current=common}else{var p=range.document.createElement(\"p\");domUtils.setStyles(p,utils.isString(style)?{\"text-align\":style}:style);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"justify\"]={execCommand:function(cmdName,align){var range=this.selection.getRange(),txt;if(range.collapsed){txt=this.document.createTextNode(\"p\");range.insertNode(txt)}doJustify(range,align);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var startNode=this.selection.getStart(),value=domUtils.getComputedStyle(startNode,\"text-align\");return defaultValue[value]?value:\"left\"},queryCommandState:function(){var start=this.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);return cell?-1:0}}};UE.plugins[\"font\"]=function(){var me=this,fonts={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\",underline:\"text-decoration\",strikethrough:\"text-decoration\",fontborder:\"border\"},lang=me.getLang(),needCmd={underline:1,strikethrough:1,fontborder:1},needSetChild={forecolor:\"color\",backcolor:\"background-color\",fontsize:\"font-size\",fontfamily:\"font-family\"};me.setOpt({fontfamily:[{name:\"default\",val:\"default\"},{name:\"songti\",val:\"宋体,SimSun\"},{name:\"yahei\",val:\"微软雅黑,Microsoft YaHei\"},{name:\"kaiti\",val:\"楷体,楷体_GB2312,SimKai\"},{name:\"heiti\",val:\"黑体,SimHei\"},{name:\"lishu\",val:\"隶书,SimLi\"},{name:\"arial\",val:\"arial,helvetica,sans-serif\"},{name:\"timesNewRoman\",val:\"times new roman\"}],fontsize:[10,11,12,14,16,18,20,24,36]});function mergeWithParent(node){var parent;while(parent=node.parentNode){if(parent.tagName==\"SPAN\"&&domUtils.getChildCount(parent,function(child){return!domUtils.isBookmarkNode(child)&&!domUtils.isBr(child)})==1){parent.style.cssText+=node.style.cssText;domUtils.remove(node,true);node=parent}else{break}}}function mergeChild(rng,cmdName,value){if(needSetChild[cmdName]){rng.adjustmentBoundary();if(!rng.collapsed&&rng.startContainer.nodeType==1){var start=rng.startContainer.childNodes[rng.startOffset];if(start&&domUtils.isTagNode(start,\"span\")){var bk=rng.createBookmark();utils.each(domUtils.getElementsByTagName(start,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(cmdName==\"backcolor\"&&domUtils.getComputedStyle(span,\"background-color\").toLowerCase()===value){return}domUtils.removeStyle(span,needSetChild[cmdName]);if(span.style.cssText.replace(/^\\s+$/,\"\").length==0){domUtils.remove(span,true)}});rng.moveToBookmark(bk)}}}}function mergesibling(rng,cmdName,value){var collapsed=rng.collapsed,bk=rng.createBookmark(),common;if(collapsed){common=bk.start.parentNode;while(dtd.$inline[common.tagName]){common=common.parentNode}}else{common=domUtils.getCommonAncestor(bk.start,bk.end)}utils.each(domUtils.getElementsByTagName(common,\"span\"),function(span){if(!span.parentNode||domUtils.isBookmarkNode(span))return;if(/\\s*border\\s*:\\s*none;?\\s*/i.test(span.style.cssText)){if(/^\\s*border\\s*:\\s*none;?\\s*$/.test(span.style.cssText)){domUtils.remove(span,true)}else{domUtils.removeStyle(span,\"border\")}return}if(/border/i.test(span.style.cssText)&&span.parentNode.tagName==\"SPAN\"&&/border/i.test(span.parentNode.style.cssText)){span.style.cssText=span.style.cssText.replace(/border[^:]*:[^;]+;?/gi,\"\")}if(!(cmdName==\"fontborder\"&&value==\"none\")){var next=span.nextSibling;while(next&&next.nodeType==1&&next.tagName==\"SPAN\"){if(domUtils.isBookmarkNode(next)&&cmdName==\"fontborder\"){span.appendChild(next);next=span.nextSibling;continue}if(next.style.cssText==span.style.cssText){domUtils.moveChild(next,span);domUtils.remove(next)}if(span.nextSibling===next)break;next=span.nextSibling}}mergeWithParent(span);if(browser.ie&&browser.version>8){var parent=domUtils.findParent(span,function(n){return n.tagName==\"SPAN\"&&/background-color/.test(n.style.cssText)});if(parent&&!/background-color/.test(span.style.cssText)){span.style.backgroundColor=parent.style.backgroundColor}}});rng.moveToBookmark(bk);mergeChild(rng,cmdName,value)}me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"u s del font strike\"),function(node){if(node.tagName==\"font\"){var cssStyle=[];for(var p in node.attrs){switch(p){case\"size\":cssStyle.push(\"font-size:\"+({1:\"10\",2:\"12\",3:\"16\",4:\"18\",5:\"24\",6:\"32\",7:\"48\"}[node.attrs[p]]||node.attrs[p])+\"px\");break;case\"color\":cssStyle.push(\"color:\"+node.attrs[p]);break;case\"face\":cssStyle.push(\"font-family:\"+node.attrs[p]);break;case\"style\":cssStyle.push(node.attrs[p])}}node.attrs={style:cssStyle.join(\";\")}}else{var val=node.tagName==\"u\"?\"underline\":\"line-through\";node.attrs={style:(node.getAttr(\"style\")||\"\")+\"text-decoration:\"+val+\";\"}}node.tagName=\"span\"})});for(var p in fonts){(function(cmd,style){UE.commands[cmd]={execCommand:function(cmdName,value){value=value||(this.queryCommandState(cmdName)?\"none\":cmdName===\"underline\"?\"underline\":cmdName===\"fontborder\"?\"1px solid #000\":\"line-through\");var me=this,range=this.selection.getRange(),text;if(value===\"default\"){if(range.collapsed){text=me.document.createTextNode(\"font\");range.insertNode(text).select()}me.execCommand(\"removeFormat\",\"span,a\",style);if(text){range.setStartBefore(text).collapse(true);domUtils.remove(text)}mergesibling(range,cmdName,value);range.select()}else{if(!range.collapsed){if(needCmd[cmd]&&me.queryCommandValue(cmd)){me.execCommand(\"removeFormat\",\"span,a\",style)}range=me.selection.getRange();range.applyInlineStyle(\"span\",{style:style+\":\"+value});mergesibling(range,cmdName,value);range.select()}else{var span=domUtils.findParentByTagName(range.startContainer,\"span\",true);text=me.document.createTextNode(\"font\");if(span&&!span.children.length&&!span[browser.ie?\"innerText\":\"textContent\"].replace(fillCharReg,\"\").length){range.insertNode(text);if(needCmd[cmd]){range.selectNode(text).select();me.execCommand(\"removeFormat\",\"span,a\",style,null);span=domUtils.findParentByTagName(text,\"span\",true);range.setStartBefore(text)}span&&(span.style.cssText+=\";\"+style+\":\"+value);range.collapse(true).select()}else{range.insertNode(text);range.selectNode(text).select();span=range.document.createElement(\"span\");if(needCmd[cmd]){if(domUtils.findParentByTagName(text,\"a\",true)){range.setStartBefore(text).setCursor();domUtils.remove(text);return}me.execCommand(\"removeFormat\",\"span,a\",style)}span.style.cssText=style+\":\"+value;text.parentNode.insertBefore(span,text);if(!browser.ie||browser.ie&&browser.version===9){var spanParent=span.parentNode;while(!domUtils.isBlockElm(spanParent)){if(spanParent.tagName===\"SPAN\"){span.style.cssText=spanParent.style.cssText+\";\"+span.style.cssText}spanParent=spanParent.parentNode}}if(opera){setTimeout(function(){range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()})}else{range.setStart(span,0).collapse(true);mergesibling(range,cmdName,value);range.select()}}domUtils.remove(text)}}return true},queryCommandValue:function(cmdName){var startNode=this.selection.getStart();var styleVal;if(cmdName===\"underline\"||cmdName===\"strikethrough\"){var tmpNode=startNode,value;while(tmpNode&&!domUtils.isBlockElm(tmpNode)&&!domUtils.isBody(tmpNode)){if(tmpNode.nodeType===1){value=domUtils.getComputedStyle(tmpNode,style);if(value!==\"none\"){return value}}tmpNode=tmpNode.parentNode}return\"none\"}else if(cmdName===\"fontborder\"){var tmp=startNode,val;while(tmp&&dtd.$inline[tmp.tagName]){if(val=domUtils.getComputedStyle(tmp,\"border\")){if(/1px/.test(val)&&/solid/.test(val)){return val}}tmp=tmp.parentNode}return\"\"}else if(cmdName===\"FontSize\"){styleVal=domUtils.getComputedStyle(startNode,style);tmp=/^([\\d\\.]+)(\\w+)$/.exec(styleVal);if(tmp){return Math.floor(tmp[1])+tmp[2]}return styleVal}else if(cmdName===\"FontFamily\"){styleVal=domUtils.getComputedStyle(startNode,style);styleVal=styleVal.replace(/['\"]/g,\"\");styleVal=styleVal.replace(/\\s*,\\s*/g,\",\");var fontFamily=lang.fontfamily.default;var fontList=me.options[\"fontfamily\"]||[];for(var i=0;i<fontList.length;i++){var v=fontList[i];if(v.val===styleVal){fontFamily=styleVal;break}}return fontFamily}value=domUtils.getComputedStyle(startNode,style);return value},queryCommandState:function(cmdName){if(!needCmd[cmdName])return 0;var val=this.queryCommandValue(cmdName);if(cmdName===\"fontborder\"){return/1px/.test(val)&&/solid/.test(val)}else{return cmdName===\"underline\"?/underline/.test(val):/line\\-through/.test(val)}}}})(p,fonts[p])}};UE.plugins[\"link\"]=function(){function optimize(range){var start=range.startContainer,end=range.endContainer;if(start=domUtils.findParentByTagName(start,\"a\",true)){range.setStartBefore(start)}if(end=domUtils.findParentByTagName(end,\"a\",true)){range.setEndAfter(end)}}UE.commands[\"unlink\"]={execCommand:function(){var range=this.selection.getRange(),bookmark;if(range.collapsed&&!domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}bookmark=range.createBookmark();optimize(range);range.removeInlineStyle(\"a\").moveToBookmark(bookmark).select()},queryCommandState:function(){return!this.highlight&&this.queryCommandValue(\"link\")?0:-1}};function doLink(range,opt,me){var rngClone=range.cloneRange(),link=me.queryCommandValue(\"link\");optimize(range=range.adjustmentBoundary());var start=range.startContainer;if(start.nodeType==1&&link){start=start.childNodes[range.startOffset];if(start&&start.nodeType==1&&start.tagName==\"A\"&&/^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(start[browser.ie?\"innerText\":\"textContent\"])){start[browser.ie?\"innerText\":\"textContent\"]=utils.html(opt.textValue||opt.href)}}if(!rngClone.collapsed||link){range.removeInlineStyle(\"a\");rngClone=range.cloneRange()}if(rngClone.collapsed){var a=range.document.createElement(\"a\"),text=\"\";if(opt.textValue){text=utils.html(opt.textValue);delete opt.textValue}else{text=utils.html(opt.href)}domUtils.setAttributes(a,opt);start=domUtils.findParentByTagName(rngClone.startContainer,\"a\",true);if(start&&domUtils.isInNodeEndBoundary(rngClone,start)){range.setStartAfter(start).collapse(true)}a[browser.ie?\"innerText\":\"textContent\"]=text;range.insertNode(a).selectNode(a)}else{range.applyInlineStyle(\"a\",opt)}}UE.commands[\"link\"]={execCommand:function(cmdName,opt){var range;opt._href&&(opt._href=utils.unhtml(opt._href,/[<\">]/g));opt.href&&(opt.href=utils.unhtml(opt.href,/[<\">]/g));opt.textValue&&(opt.textValue=utils.unhtml(opt.textValue,/[<\">]/g));doLink(range=this.selection.getRange(),opt,this);range.collapse().select(true)},queryCommandValue:function(){var range=this.selection.getRange(),node;if(range.collapsed){node=range.startContainer;node=node.nodeType==1?node:node.parentNode;if(node&&(node=domUtils.findParentByTagName(node,\"a\",true))&&!domUtils.isInNodeEndBoundary(range,node)){return node}}else{range.shrinkBoundary();var start=range.startContainer.nodeType==3||!range.startContainer.childNodes[range.startOffset]?range.startContainer:range.startContainer.childNodes[range.startOffset],end=range.endContainer.nodeType==3||range.endOffset==0?range.endContainer:range.endContainer.childNodes[range.endOffset-1],common=range.getCommonAncestor();node=domUtils.findParentByTagName(common,\"a\",true);if(!node&&common.nodeType==1){var as=common.getElementsByTagName(\"a\"),ps,pe;for(var i=0,ci;ci=as[i++];){ps=domUtils.getPosition(ci,start),pe=domUtils.getPosition(ci,end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS)){node=ci;break}}}return node}},queryCommandState:function(){var img=this.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-faked-video\"||img.className.indexOf(\"edui-upload-video\")!=-1);return flag?-1:0}}};UE.plugins[\"insertframe\"]=function(){var me=this;function deleteIframe(){me._iframe&&delete me._iframe}me.addListener(\"selectionchange\",function(){deleteIframe()})};UE.commands[\"scrawl\"]={queryCommandState:function(){return browser.ie&&browser.version<=8?-1:0}};UE.plugins[\"removeformat\"]=function(){var me=this;me.setOpt({removeFormatTags:\"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",removeFormatAttributes:\"class,style,lang,width,height,align,hspace,valign\"});me.commands[\"removeformat\"]={execCommand:function(cmdName,tags,style,attrs,notIncludeA){var tagReg=new RegExp(\"^(?:\"+(tags||this.options.removeFormatTags).replace(/,/g,\"|\")+\")$\",\"i\"),removeFormatAttributes=style?[]:(attrs||this.options.removeFormatAttributes).split(\",\"),range=new dom.Range(this.document),bookmark,node,parent,filter=function(node){return node.nodeType==1};function isRedundantSpan(node){if(node.nodeType==3||node.tagName.toLowerCase()!=\"span\"){return 0}if(browser.ie){var attrs=node.attributes;if(attrs.length){for(var i=0,l=attrs.length;i<l;i++){if(attrs[i].specified){return 0}}return 1}}return!node.attributes.length}function doRemove(range){var bookmark1=range.createBookmark();if(range.collapsed){range.enlarge(true)}if(!notIncludeA){var aNode=domUtils.findParentByTagName(range.startContainer,\"a\",true);if(aNode){range.setStartBefore(aNode)}aNode=domUtils.findParentByTagName(range.endContainer,\"a\",true);if(aNode){range.setEndAfter(aNode)}}bookmark=range.createBookmark();node=bookmark.start;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}if(bookmark.end){node=bookmark.end;while((parent=node.parentNode)&&!domUtils.isBlockElm(parent)){domUtils.breakParent(node,parent);domUtils.clearEmptySibling(node)}var current=domUtils.getNextDomNode(bookmark.start,false,filter),next;while(current){if(current==bookmark.end){break}next=domUtils.getNextDomNode(current,true,filter);if(!dtd.$empty[current.tagName.toLowerCase()]&&!domUtils.isBookmarkNode(current)){if(tagReg.test(current.tagName)){if(style){domUtils.removeStyle(current,style);if(isRedundantSpan(current)&&style!=\"text-decoration\"){domUtils.remove(current,true)}}else{domUtils.remove(current,true)}}else{if(true){domUtils.removeAttributes(current,removeFormatAttributes);if(isRedundantSpan(current)){domUtils.remove(current,true)}}else{}}}current=next}}var pN=bookmark.start.parentNode;if(domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}pN=bookmark.end.parentNode;if(bookmark.end&&domUtils.isBlockElm(pN)&&!dtd.$tableContent[pN.tagName]&&!dtd.$list[pN.tagName]){domUtils.removeAttributes(pN,removeFormatAttributes)}range.moveToBookmark(bookmark).moveToBookmark(bookmark1);var node=range.startContainer,tmp,collapsed=range.collapsed;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setStartBefore(node);if(range.startContainer===range.endContainer){range.endOffset--}domUtils.remove(node);node=tmp}if(!collapsed){node=range.endContainer;while(node.nodeType==1&&domUtils.isEmptyNode(node)&&dtd.$removeEmpty[node.tagName]){tmp=node.parentNode;range.setEndBefore(node);domUtils.remove(node);node=tmp}}}range=this.selection.getRange();doRemove(range);range.select()}}};UE.plugins[\"blockquote\"]=function(){var me=this;function getObj(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),\"blockquote\")}me.commands[\"blockquote\"]={execCommand:function(cmdName,attrs){var range=this.selection.getRange(),obj=getObj(this),blockquote=dtd.blockquote,bookmark=range.createBookmark();if(obj){var start=range.startContainer,startBlock=domUtils.isBlockElm(start)?start:domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}),end=range.endContainer,endBlock=domUtils.isBlockElm(end)?end:domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)});startBlock=domUtils.findParentByTagName(startBlock,\"li\",true)||startBlock;endBlock=domUtils.findParentByTagName(endBlock,\"li\",true)||endBlock;if(startBlock.tagName==\"LI\"||startBlock.tagName==\"TD\"||startBlock===obj||domUtils.isBody(startBlock)){domUtils.remove(obj,true)}else{domUtils.breakParent(startBlock,obj)}if(startBlock!==endBlock){obj=domUtils.findParentByTagName(endBlock,\"blockquote\");if(obj){if(endBlock.tagName==\"LI\"||endBlock.tagName==\"TD\"||domUtils.isBody(endBlock)){obj.parentNode&&domUtils.remove(obj,true)}else{domUtils.breakParent(endBlock,obj)}}}var blockquotes=domUtils.getElementsByTagName(this.document,\"blockquote\");for(var i=0,bi;bi=blockquotes[i++];){if(!bi.childNodes.length){domUtils.remove(bi)}else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING&&domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){domUtils.remove(bi,true)}}}else{var tmpRange=range.cloneRange(),node=tmpRange.startContainer.nodeType==1?tmpRange.startContainer:tmpRange.startContainer.parentNode,preNode=node,doEnd=1;while(1){if(domUtils.isBody(node)){if(preNode!==node){if(range.collapsed){tmpRange.selectNode(preNode);doEnd=0}else{tmpRange.setStartBefore(preNode)}}else{tmpRange.setStart(node,0)}break}if(!blockquote[node.tagName]){if(range.collapsed){tmpRange.selectNode(preNode)}else{tmpRange.setStartBefore(preNode)}break}preNode=node;node=node.parentNode}if(doEnd){preNode=node=node=tmpRange.endContainer.nodeType==1?tmpRange.endContainer:tmpRange.endContainer.parentNode;while(1){if(domUtils.isBody(node)){if(preNode!==node){tmpRange.setEndAfter(preNode)}else{tmpRange.setEnd(node,node.childNodes.length)}break}if(!blockquote[node.tagName]){tmpRange.setEndAfter(preNode);break}preNode=node;node=node.parentNode}}node=range.document.createElement(\"blockquote\");domUtils.setAttributes(node,attrs);node.appendChild(tmpRange.extractContents());tmpRange.insertNode(node);var childs=domUtils.getElementsByTagName(node,\"blockquote\");for(var i=0,ci;ci=childs[i++];){if(ci.parentNode){domUtils.remove(ci,true)}}}range.moveToBookmark(bookmark).select()},queryCommandState:function(){return getObj(this)?1:0}}};UE.commands[\"touppercase\"]=UE.commands[\"tolowercase\"]={execCommand:function(cmd){var me=this;var rng=me.selection.getRange();if(rng.collapsed){return rng}var bk=rng.createBookmark(),bkEnd=bk.end,filterFn=function(node){return!domUtils.isBr(node)&&!domUtils.isWhitespace(node)},curNode=domUtils.getNextDomNode(bk.start,false,filterFn);while(curNode&&domUtils.getPosition(curNode,bkEnd)&domUtils.POSITION_PRECEDING){if(curNode.nodeType==3){curNode.nodeValue=curNode.nodeValue[cmd==\"touppercase\"?\"toUpperCase\":\"toLowerCase\"]()}curNode=domUtils.getNextDomNode(curNode,true,filterFn);if(curNode===bkEnd){break}}rng.moveToBookmark(bk).select()}};UE.commands[\"indent\"]={execCommand:function(){var me=this,value=me.queryCommandState(\"indent\")?\"0em\":me.options.indentValue||\"2em\";me.execCommand(\"Paragraph\",\"p\",{style:\"text-indent:\"+value})},queryCommandState:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return pN&&pN.style.textIndent&&parseInt(pN.style.textIndent)?1:0}};UE.commands[\"print\"]={execCommand:function(){this.window.print()},notNeedUndo:1};UE.commands[\"preview\"]={execCommand:function(){var w=window.open(\"\",\"_blank\",\"\"),d=w.document;d.open();d.write('<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"'+this.options.UEDITOR_HOME_URL+'ueditor.parse.js\"><\\/script><script>'+\"setTimeout(function(){uParse('div',{rootPath: '\"+this.options.UEDITOR_HOME_URL+\"'})},300)\"+\"<\\/script></head><body><div>\"+this.getContent(null,null,true)+\"</div></body></html>\");d.close()},notNeedUndo:1};UE.plugins[\"selectall\"]=function(){var me=this;me.commands[\"selectall\"]={execCommand:function(){var me=this,body=me.body,range=me.selection.getRange();range.selectNodeContents(body);if(domUtils.isEmptyBlock(body)){if(browser.opera&&body.firstChild&&body.firstChild.nodeType==1){range.setStartAtFirst(body.firstChild)}range.collapse(true)}range.select(true)},notNeedUndo:1};me.addshortcutkey({selectAll:\"ctrl+65\"})};UE.plugins[\"paragraph\"]=function(){var me=this,block=domUtils.isBlockElm,notExchange=[\"TD\",\"LI\",\"PRE\"],doParagraph=function(range,style,attrs,sourceCmdName){var bookmark=range.createBookmark(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\"&&!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},para;range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType===3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);para=range.document.createElement(style);if(attrs){domUtils.setAttributes(para,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){para.style.cssText=attrs.style}}para.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(para)){domUtils.fillChar(range.document,para)}tmpRange.insertNode(para);var parent=para.parentNode;if(block(parent)&&!domUtils.isBody(para.parentNode)&&utils.indexOf(notExchange,parent.tagName)===-1){if(!(sourceCmdName&&sourceCmdName===\"customstyle\")){parent.getAttribute(\"dir\")&&para.setAttribute(\"dir\",parent.getAttribute(\"dir\"));parent.style.cssText&&(para.style.cssText=parent.style.cssText+\";\"+para.style.cssText);parent.style.textAlign&&!para.style.textAlign&&(para.style.textAlign=parent.style.textAlign);parent.style.textIndent&&!para.style.textIndent&&(para.style.textIndent=parent.style.textIndent);parent.style.padding&&!para.style.padding&&(para.style.padding=parent.style.padding)}if(attrs&&/h\\d/i.test(parent.tagName)&&!/h\\d/i.test(para.tagName)){domUtils.setAttributes(parent,attrs);if(sourceCmdName&&sourceCmdName===\"customstyle\"&&attrs.style){parent.style.cssText=attrs.style}domUtils.remove(para.parentNode,true);para=parent}else{domUtils.remove(para.parentNode,true)}}if(utils.indexOf(notExchange,parent.tagName)!==-1){current=parent}else{current=para}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};me.setOpt(\"paragraph\",{p:\"\",h1:\"\",h2:\"\",h3:\"\",h4:\"\",h5:\"\",h6:\"\"});me.commands[\"paragraph\"]={execCommand:function(cmdName,style,attrs,sourceCmdName){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"p\");range.insertNode(txt);if(browser.ie){var node=txt.previousSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}node=txt.nextSibling;if(node&&domUtils.isWhitespace(node)){domUtils.remove(node)}}}range=doParagraph(range,style,attrs,sourceCmdName);if(txt){range.setStartBefore(txt).collapse(true);pN=txt.parentNode;domUtils.remove(txt);if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){domUtils.fillNode(this.document,pN)}}if(browser.gecko&&range.collapsed&&range.startContainer.nodeType===1){var child=range.startContainer.childNodes[range.startOffset];if(child&&child.nodeType===1&&child.tagName.toLowerCase()===style){range.setStart(child,0).collapse(true)}}range.select();return true},queryCommandValue:function(){var node=domUtils.filterNodeList(this.selection.getStartElementPath(),\"p h1 h2 h3 h4 h5 h6\");return node?node.tagName.toLowerCase():\"\"}}};(function(){var block=domUtils.isBlockElm,getObj=function(editor){return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n&&n.nodeType==1&&n.getAttribute(\"dir\")})},doDirectionality=function(range,editor,forward){var bookmark,filterFn=function(node){return node.nodeType==1?!domUtils.isBookmarkNode(node):!domUtils.isWhitespace(node)},obj=getObj(editor);if(obj&&range.collapsed){obj.setAttribute(\"dir\",forward);return range}bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode;while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){if(current.nodeType==3||!block(current)){tmpRange.setStartBefore(current);while(current&&current!==bookmark2.end&&!block(current)){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!block(node)})}tmpRange.setEndAfter(tmpNode);var common=tmpRange.getCommonAncestor();if(!domUtils.isBody(common)&&block(common)){common.setAttribute(\"dir\",forward);current=common}else{var p=range.document.createElement(\"p\");p.setAttribute(\"dir\",forward);var frag=tmpRange.extractContents();p.appendChild(frag);tmpRange.insertNode(p);current=p}current=domUtils.getNextDomNode(current,false,filterFn)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}return range.moveToBookmark(bookmark2).moveToBookmark(bookmark)};UE.commands[\"directionality\"]={execCommand:function(cmdName,forward){var range=this.selection.getRange();if(range.collapsed){var txt=this.document.createTextNode(\"d\");range.insertNode(txt)}doDirectionality(range,this,forward);if(txt){range.setStartBefore(txt).collapse(true);domUtils.remove(txt)}range.select();return true},queryCommandValue:function(){var node=getObj(this);return node?node.getAttribute(\"dir\"):\"ltr\"}}})();UE.plugins[\"horizontal\"]=function(){var me=this;me.commands[\"horizontal\"]={execCommand:function(cmdName){var me=this;if(me.queryCommandState(cmdName)!==-1){me.execCommand(\"insertHtml\",\"<hr>\");var range=me.selection.getRange(),start=range.startContainer;if(start.nodeType==1&&!start.childNodes[range.startOffset]){var tmp;if(tmp=start.childNodes[range.startOffset-1]){if(tmp.nodeType==1&&tmp.tagName==\"HR\"){if(me.options.enterTag==\"p\"){tmp=me.document.createElement(\"p\");range.insertNode(tmp);range.setStart(tmp,0).setCursor()}else{tmp=me.document.createElement(\"br\");range.insertNode(tmp);range.setStartBefore(tmp).setCursor()}}}}return true}},queryCommandState:function(){return domUtils.filterNodeList(this.selection.getStartElementPath(),\"table\")?-1:0}};me.addListener(\"delkeydown\",function(name,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);if(domUtils.isStartInblock(rng)){var tmpNode=rng.startContainer;var pre=tmpNode.previousSibling;if(pre&&domUtils.isTagNode(pre,\"hr\")){domUtils.remove(pre);rng.select();domUtils.preventDefault(evt);return true}}})};UE.commands[\"time\"]=UE.commands[\"date\"]={execCommand:function(cmd,format){var date=new Date;function formatTime(date,format){var hh=(\"0\"+date.getHours()).slice(-2),ii=(\"0\"+date.getMinutes()).slice(-2),ss=(\"0\"+date.getSeconds()).slice(-2);format=format||\"hh:ii:ss\";return format.replace(/hh/gi,hh).replace(/ii/gi,ii).replace(/ss/gi,ss)}function formatDate(date,format){var yyyy=(\"000\"+date.getFullYear()).slice(-4),yy=yyyy.slice(-2),mm=(\"0\"+(date.getMonth()+1)).slice(-2),dd=(\"0\"+date.getDate()).slice(-2);format=format||\"yyyy-mm-dd\";return format.replace(/yyyy/gi,yyyy).replace(/yy/gi,yy).replace(/mm/gi,mm).replace(/dd/gi,dd)}this.execCommand(\"insertHtml\",cmd==\"time\"?formatTime(date,format):formatDate(date,format))}};UE.plugins[\"rowspacing\"]=function(){var me=this;me.setOpt({rowspacingtop:[\"5\",\"10\",\"15\",\"20\",\"25\"],rowspacingbottom:[\"5\",\"10\",\"15\",\"20\",\"25\"]});me.commands[\"rowspacing\"]={execCommand:function(cmdName,value,dir){this.execCommand(\"paragraph\",\"p\",{style:\"margin-\"+dir+\":\"+value+\"px\"});return true},queryCommandValue:function(cmdName,dir){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)}),value;if(pN){value=domUtils.getComputedStyle(pN,\"margin-\"+dir).replace(/[^\\d]/g,\"\");return!value?0:value}return 0}}};UE.plugins[\"lineheight\"]=function(){var me=this;me.setOpt({lineheight:[\"1\",\"1.5\",\"1.75\",\"2\",\"3\",\"4\",\"5\"]});me.commands[\"lineheight\"]={execCommand:function(cmdName,value){this.execCommand(\"paragraph\",\"p\",{style:\"line-height:\"+(value==\"1\"?\"normal\":value+\"em\")});return true},queryCommandValue:function(){var pN=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)});if(pN){var value=domUtils.getComputedStyle(pN,\"line-height\");return value==\"normal\"?1:value.replace(/[^\\d.]*/gi,\"\")}}}};UE.plugins[\"insertcode\"]=function(){var me=this;me.setOpt(\"insertcode\",{as3:\"ActionScript3\",bash:\"Bash/Shell\",cpp:\"C/C++\",css:\"Css\",\"c#\":\"C#\",delphi:\"Delphi\",erlang:\"Erlang\",groovy:\"Groovy\",html:\"Html\",java:\"Java\",js:\"Javascript\",pl:\"Perl\",php:\"PHP\",plain:\"Text\",ps:\"PowerShell\",python:\"Python\",ruby:\"Ruby\",scala:\"Scala\",sql:\"SQL\",vb:\"VB\",xml:\"XML\",mind:\"Mind\"});me.commands[\"insertcode\"]={execCommand:function(cmd,lang){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){pre.className=\"brush:\"+lang+\";toolbar:false;\"}else{var code=\"\";if(rng.collapsed){code=browser.ie&&browser.ie11below?browser.version<=8?\"&nbsp;\":\"\":\"<br/>\"}else{var frag=rng.extractContents();var div=me.document.createElement(\"div\");div.appendChild(frag);utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\\r\\t]/g,\"\")),me.options.filterTxtRules).children,function(node){if(browser.ie&&browser.ie11below&&browser.version>8){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"\\n\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/\\n$/.test(code)){code+=\"\\n\"}}}else{code+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(code)){code=code.replace(/\\n$/,\"\")}}else{if(browser.ie&&browser.ie11below){if(node.type==\"element\"){if(node.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){code+=\"<br>\"}else if(!dtd.$empty[node.tagName]){code+=cn.innerText()}}else{code+=cn.data}});if(!/br>$/.test(code)){code+=\"<br>\"}}}else{code+=node.data+\"<br>\"}if(!node.nextSibling()&&/<br>$/.test(code)){code=code.replace(/<br>$/,\"\")}}else{code+=node.type==\"element\"?dtd.$empty[node.tagName]?\"\":node.innerText():node.data;if(!/br\\/?\\s*>$/.test(code)){if(!node.nextSibling())return;code+=\"<br>\"}}}})}me.execCommand(\"inserthtml\",'<pre id=\"coder\"class=\"brush:'+lang+';toolbar:false\">'+code+\"</pre>\",true);pre=me.document.getElementById(\"coder\");domUtils.removeAttributes(pre,\"id\");var tmpNode=pre.previousSibling;if(tmpNode&&(tmpNode.nodeType==3&&tmpNode.nodeValue.length==1&&browser.ie&&browser.version==6||domUtils.isEmptyBlock(tmpNode))){domUtils.remove(tmpNode)}var rng=me.selection.getRange();if(domUtils.isEmptyBlock(pre)){rng.setStart(pre,0).setCursor(false,true)}else{rng.selectNodeContents(pre).select()}}},queryCommandValue:function(){var path=this.selection.getStartElementPath();var lang=\"\";utils.each(path,function(node){if(node.nodeName==\"PRE\"){var match=node.className.match(/brush:([^;]+)/);lang=match&&match[1]?match[1]:\"\";return false}});return lang}};me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var brs=pre.getNodesByTagName(\"br\");if(brs.length){browser.ie&&browser.ie11below&&browser.version>8&&utils.each(brs,function(br){var txt=UE.uNode.createText(\"\\n\");br.parentNode.insertBefore(txt,br);br.parentNode.removeChild(br)});return}if(browser.ie&&browser.ie11below&&browser.version>8)return;var code=pre.innerText().split(/\\n/);pre.innerHTML(\"\");utils.each(code,function(c){if(c.length){pre.appendChild(UE.uNode.createText(c))}pre.appendChild(UE.uNode.createElement(\"br\"))})})});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"pre\"),function(pre){var code=\"\";utils.each(pre.children,function(n){if(n.type==\"text\"){code+=n.data.replace(/[ ]/g,\"&nbsp;\").replace(/\\n$/,\"\")}else{if(n.tagName==\"br\"){code+=\"\\n\"}else{code+=!dtd.$empty[n.tagName]?\"\":n.innerText()}}});pre.innerText(code.replace(/(&nbsp;|\\n)+$/,\"\"))})});me.notNeedCodeQuery={help:1,undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};var orgQuery=me.queryCommandState;me.queryCommandState=function(cmd){var me=this;if(!me.notNeedCodeQuery[cmd.toLowerCase()]&&me.selection&&me.queryCommandValue(\"insertcode\")){return-1}return UE.Editor.prototype.queryCommandState.apply(this,arguments)};me.addListener(\"beforeenterkeydown\",function(){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(!rng.collapsed){rng.deleteContents()}if(!browser.ie||browser.ie9above){var tmpNode=me.document.createElement(\"br\"),pre;rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true);var next=tmpNode.nextSibling;if(!next&&(!browser.ie||browser.version>10)){rng.insertNode(tmpNode.cloneNode(false))}else{rng.setStartAfter(tmpNode)}pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[\\\\s\"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([\\\\s\"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}if(str){str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}}rng.collapse(true).select(true)}else{if(browser.version>8){var txt=me.document.createTextNode(\"\\n\");var start=rng.startContainer;if(rng.startOffset==0){var preNode=start.previousSibling;if(preNode){rng.insertNode(txt);var fillchar=me.document.createTextNode(\" \");rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{rng.insertNode(txt).setStartAfter(txt);var fillchar=me.document.createTextNode(\" \");start=rng.startContainer.childNodes[rng.startOffset];if(start&&!/^\\n/.test(start.nodeValue)){rng.setStartBefore(txt)}rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)}}else{var tmpNode=me.document.createElement(\"br\");rng.insertNode(tmpNode);rng.insertNode(me.document.createTextNode(domUtils.fillChar));rng.setStartAfter(tmpNode);pre=tmpNode.previousSibling;var tmp;while(pre){tmp=pre;pre=pre.previousSibling;if(!pre||pre.nodeName==\"BR\"){pre=tmp;break}}if(pre){var str=\"\";while(pre&&pre.nodeName!=\"BR\"&&new RegExp(\"^[ \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){str+=pre.nodeValue;pre=pre.nextSibling}if(pre.nodeName!=\"BR\"){var match=pre.nodeValue.match(new RegExp(\"^([ \"+domUtils.fillChar+\"]+)\"));if(match&&match[1]){str+=match[1]}}str=me.document.createTextNode(str);rng.insertNode(str).setStartAfter(str)}rng.collapse(true).select()}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"tabkeydown\",function(cmd,evt){var rng=me.selection.getRange();var pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){me.fireEvent(\"saveScene\");if(evt.shiftKey){}else{if(!rng.collapsed){var bk=rng.createBookmark();var start=bk.start.previousSibling;while(start){if(pre.firstChild===start&&!domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start);break}if(domUtils.isBr(start)){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling);break}start=start.previousSibling}var end=bk.end;start=bk.start.nextSibling;if(pre.firstChild===bk.start){pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}while(start&&start!==end){if(domUtils.isBr(start)&&start.nextSibling){if(start.nextSibling===end){break}pre.insertBefore(me.document.createTextNode(\"    \"),start.nextSibling)}start=start.nextSibling}rng.moveToBookmark(bk).select()}else{var tmpNode=me.document.createTextNode(\"    \");rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true)}}me.fireEvent(\"saveScene\");return true}});me.addListener(\"beforeinserthtml\",function(evtName,html){var me=this,rng=me.selection.getRange(),pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true);if(pre){if(!rng.collapsed){rng.deleteContents()}var htmlstr=\"\";if(browser.ie&&browser.version>8){utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){htmlstr+=\"\\n\"}else if(!dtd.$empty[node.tagName]){htmlstr+=cn.innerText()}}else{htmlstr+=cn.data}});if(!/\\n$/.test(htmlstr)){htmlstr+=\"\\n\"}}}else{htmlstr+=node.data+\"\\n\"}if(!node.nextSibling()&&/\\n$/.test(htmlstr)){htmlstr=htmlstr.replace(/\\n$/,\"\")}});var tmpNode=me.document.createTextNode(utils.html(htmlstr.replace(/&nbsp;/g,\" \")));rng.insertNode(tmpNode).selectNode(tmpNode).select()}else{var frag=me.document.createDocumentFragment();utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){if(node.type==\"element\"){if(node.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){utils.each(node.children,function(cn){if(cn.type==\"element\"){if(cn.tagName==\"br\"){frag.appendChild(me.document.createElement(\"br\"))}else if(!dtd.$empty[node.tagName]){frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/&nbsp;/g,\" \"))))}}else{frag.appendChild(me.document.createTextNode(utils.html(cn.data.replace(/&nbsp;/g,\" \"))))}});if(frag.lastChild.nodeName!=\"BR\"){frag.appendChild(me.document.createElement(\"br\"))}}}else{frag.appendChild(me.document.createTextNode(utils.html(node.data.replace(/&nbsp;/g,\" \"))))}if(!node.nextSibling()&&frag.lastChild.nodeName==\"BR\"){frag.removeChild(frag.lastChild)}});rng.insertNode(frag).select()}return true}});me.addListener(\"keydown\",function(cmd,evt){var me=this,keyCode=evt.keyCode||evt.which;if(keyCode==40){var rng=me.selection.getRange(),pre,start=rng.startContainer;if(rng.collapsed&&(pre=domUtils.findParentByTagName(rng.startContainer,\"pre\",true))&&!pre.nextSibling){var last=pre.lastChild;while(last&&last.nodeName==\"BR\"){last=last.previousSibling}if(last===start||rng.startContainer===pre&&rng.startOffset==pre.childNodes.length){me.execCommand(\"insertparagraph\");domUtils.preventDefault(evt)}}}});me.addListener(\"delkeydown\",function(type,evt){var rng=this.selection.getRange();rng.txtToElmBoundary(true);var start=rng.startContainer;if(domUtils.isTagNode(start,\"pre\")&&rng.collapsed&&domUtils.isStartInblock(rng)){var p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);start.parentNode.insertBefore(p,start);domUtils.remove(start);rng.setStart(p,0).setCursor(false,true);domUtils.preventDefault(evt);return true}})};UE.commands[\"cleardoc\"]={execCommand:function(cmdName){var me=this,enterTag=me.options.enterTag,range=me.selection.getRange();if(enterTag==\"br\"){me.body.innerHTML=\"<br/>\";range.setStart(me.body,0).setCursor()}else{me.body.innerHTML=\"<p>\"+(ie?\"\":\"<br/>\")+\"</p>\";range.setStart(me.body.firstChild,0).setCursor(false,true)}setTimeout(function(){me.fireEvent(\"clearDoc\")},0)}};UE.plugin.register(\"anchor\",function(){return{bindEvents:{ready:function(){utils.cssRule(\"anchor\",\".anchorclass{background: url('\"+this.options.themePath+this.options.theme+\"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",this.document)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(a){var val;if(val=a.getAttr(\"anchorname\")){a.tagName=\"a\";a.setAttr({anchorname:\"\",name:val,class:\"\"})}})},inputRule:function(root){utils.each(root.getNodesByTagName(\"a\"),function(a){var val;if((val=a.getAttr(\"name\"))&&!a.getAttr(\"href\")){if(/^\\_Toc\\d+$/.test(val)){a.parentNode.removeChild(a);return}a.tagName=\"img\";a.setAttr({anchorname:a.getAttr(\"name\"),class:\"anchorclass\"});a.setAttr(\"name\")}})},commands:{anchor:{execCommand:function(cmd,name){var range=this.selection.getRange(),img=range.getClosedNode();if(img&&img.getAttribute(\"anchorname\")){if(name){img.setAttribute(\"anchorname\",name)}else{range.setStartBefore(img).setCursor();domUtils.remove(img)}}else{if(name){var anchor=this.document.createElement(\"img\");range.collapse(true);domUtils.setAttributes(anchor,{anchorname:name,class:\"anchorclass\"});range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true)}}}}}}});UE.plugins[\"wordcount\"]=function(){var me=this;me.setOpt(\"wordCount\",true);me.addListener(\"contentchange\",function(){me.fireEvent(\"wordcount\")});var timer;me.addListener(\"ready\",function(){var me=this;domUtils.on(me.body,\"keyup\",function(evt){var code=evt.keyCode||evt.which,ignores={16:1,18:1,20:1,37:1,38:1,39:1,40:1};if(code in ignores)return;clearTimeout(timer);timer=setTimeout(function(){me.fireEvent(\"wordcount\")},200)})})};UE.plugins[\"pagebreak\"]=function(){var me=this,notBreakTags=[\"td\"];me.setOpt(\"pageBreakTag\",\"_ueditor_page_break_tag_\");function fillNode(node){if(domUtils.isEmptyBlock(node)){var firstChild=node.firstChild,tmpNode;while(firstChild&&firstChild.nodeType==1&&domUtils.isEmptyBlock(firstChild)){tmpNode=firstChild;firstChild=firstChild.firstChild}!tmpNode&&(tmpNode=node);domUtils.fillNode(me.document,tmpNode)}}me.ready(function(){utils.cssRule(\"pagebreak\",\".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",me.document)});function isHr(node){return node&&node.nodeType==1&&node.tagName==\"HR\"&&node.className==\"pagebreak\"}me.addInputRule(function(root){root.traversal(function(node){if(node.type==\"text\"&&node.data==me.options.pageBreakTag){var hr=UE.uNode.createElement('<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">');node.parentNode.insertBefore(hr,node);node.parentNode.removeChild(node)}})});me.addOutputRule(function(node){utils.each(node.getNodesByTagName(\"hr\"),function(n){if(n.getAttr(\"class\")==\"pagebreak\"){var txt=UE.uNode.createText(me.options.pageBreakTag);n.parentNode.insertBefore(txt,n);n.parentNode.removeChild(n)}})});me.commands[\"pagebreak\"]={execCommand:function(){var range=me.selection.getRange(),hr=me.document.createElement(\"hr\");domUtils.setAttributes(hr,{class:\"pagebreak\",noshade:\"noshade\",size:\"5\"});domUtils.unSelectable(hr);var node=domUtils.findParentByTagName(range.startContainer,notBreakTags,true),parents=[],pN;if(node){switch(node.tagName){case\"TD\":pN=node.parentNode;if(!pN.previousSibling){var table=domUtils.findParentByTagName(pN,\"table\");table.parentNode.insertBefore(hr,table);parents=domUtils.findParents(hr,true)}else{pN.parentNode.insertBefore(hr,pN);parents=domUtils.findParents(hr)}pN=parents[1];if(hr!==pN){domUtils.breakParent(hr,pN)}me.fireEvent(\"afteradjusttable\",me.document)}}else{if(!range.collapsed){range.deleteContents();var start=range.startContainer;while(!domUtils.isBody(start)&&domUtils.isBlockElm(start)&&domUtils.isEmptyNode(start)){range.setStartBefore(start).collapse(true);domUtils.remove(start);start=range.startContainer}}range.insertNode(hr);var pN=hr.parentNode,nextNode;while(!domUtils.isBody(pN)){domUtils.breakParent(hr,pN);nextNode=hr.nextSibling;if(nextNode&&domUtils.isEmptyBlock(nextNode)){domUtils.remove(nextNode)}pN=hr.parentNode}nextNode=hr.nextSibling;var pre=hr.previousSibling;if(isHr(pre)){domUtils.remove(pre)}else{pre&&fillNode(pre)}if(!nextNode){var p=me.document.createElement(\"p\");hr.parentNode.appendChild(p);domUtils.fillNode(me.document,p);range.setStart(p,0).collapse(true)}else{if(isHr(nextNode)){domUtils.remove(nextNode)}else{fillNode(nextNode)}range.setEndAfter(hr).collapse(false)}range.select(true)}}}};UE.plugin.register(\"wordimage\",function(){var me=this,images=[];this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement;if(\"IMG\"==el.tagName&&el.getAttribute(\"data-word-image\")){me.ui._dialogs.wordimageDialog&&me.ui._dialogs.wordimageDialog.open()}});return{commands:{wordimage:{execCommand:function(){var images=domUtils.getElementsByTagName(me.body,\"img\");var urlList=[];for(var i=0,ci;ci=images[i++];){var url=ci.getAttribute(\"data-word-image\");url&&urlList.push(url)}return urlList},queryCommandState:function(){images=domUtils.getElementsByTagName(me.body,\"img\");for(var i=0,ci;ci=images[i++];){if(ci.getAttribute(\"data-word-image\")){return 1}}return-1},notNeedUndo:true}},inputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(img){var attrs=img.attrs,flag=parseInt(attrs.width)<128||parseInt(attrs.height)<43,opt=me.options,src=opt.UEDITOR_HOME_URL+\"themes/default/images/spacer.gif\";if(attrs[\"src\"]&&/^(?:(file:\\/+))/.test(attrs[\"src\"])){img.setAttr({width:attrs.width,height:attrs.height,alt:attrs.alt,\"data-word-image\":attrs.src,src:src,style:\"background:url(\"+(flag?opt.themePath+opt.theme+\"/images/word.gif\":opt.langPath+opt.lang+\"/images/localimage.png\")+\") no-repeat center center;border:1px solid #ddd\"})}})}}});UE.plugin.register(\"autosave\",function(){var me=this,saveKey=null;function save(editor){var saveData;if(!editor.hasContents()){saveKey&&me.removePreferences(saveKey);return}editor._autoSaveTimer=null;saveData=me.body.innerHTML;if(editor.fireEvent(\"beforeautosave\",{content:saveData})===false){return}me.setPreferences(saveKey,saveData);editor.fireEvent(\"afterautosave\",{content:saveData})}return{defaultOptions:{autoSaveEnable:true,autoSaveRestore:false,autoSaveKey:null},bindEvents:{ready:function(){saveKey=me.getOpt(\"autoSaveKey\");if(!saveKey){var _suffix=\"_DraftsData\",key=null;if(me.key){key=me.key+_suffix}else{key=(me.container.parentNode.id||\"ue-common\")+_suffix}saveKey=(location.protocol+location.host+location.pathname).replace(/[.:\\/]/g,\"_\")+key}if(me.getOpt(\"autoSaveRestore\")){var data=me.getPreferences(saveKey);if(data){me.body.innerHTML=data;me.fireEvent(\"showmessage\",{type:\"info\",content:me.getLang(\"autosave\").autoRestoreTip})}}},beforesubmit:function(){if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}me.execCommand(\"clear_auto_save_content\")},contentchange:function(){if(!me.isReady){return}if(!me.getOpt(\"autoSaveEnable\")||!saveKey){return}if(me._autoSaveTimer){window.clearTimeout(me._autoSaveTimer)}me._autoSaveTimer=window.setTimeout(function(){save(me)},1e3)}},commands:{clear_auto_save_content:{execCommand:function(cmd,name){if(saveKey&&me.getPreferences(saveKey)){me.removePreferences(saveKey)}},notNeedUndo:true,ignoreContentChange:true},set_auto_save_content:{execCommand:function(cmd,name){save(me)},notNeedUndo:true,ignoreContentChange:true},get_auto_save_content:{execCommand:function(cmd,name){return me.getPreferences(saveKey)||\"\"},notNeedUndo:true,ignoreContentChange:true},auto_save_restore:{execCommand:function(cmd,name){if(saveKey){me.body.innerHTML=me.getPreferences(saveKey)||\"<p>\"+domUtils.fillHtml+\"</p>\";me.focus(true)}},queryCommandState:function(){return saveKey?me.getPreferences(saveKey)===null?-1:0:-1},notNeedUndo:true,ignoreContentChange:true}}}});UE.plugin.register(\"formula\",function(){var me=this,images=[];return{commands:{formula:{execCommand:function(cmdName,value){var range=me.selection.getRange(),img=range.getClosedNode();value=encodeURIComponent(value);var formulaConfig=me.getOpt(\"formulaConfig\");var src=formulaConfig.imageUrlTemplate.replace(/\\{\\}/,value);if(img){img.setAttribute(\"src\",src)}else{me.execCommand(\"insertHtml\",'<img src=\"'+src+'\" data-formula-image=\"'+value+'\" />')}}}}}});UE.plugins[\"dragdrop\"]=function(){var me=this;me.ready(function(){domUtils.on(this.body,\"dragend\",function(){var rng=me.selection.getRange();var node=rng.getClosedNode()||me.selection.getStart();if(node&&node.tagName==\"IMG\"){var pre=node.previousSibling,next;while(next=node.nextSibling){if(next.nodeType==1&&next.tagName==\"SPAN\"&&!next.firstChild){domUtils.remove(next)}else{break}}if((pre&&pre.nodeType==1&&!domUtils.isEmptyBlock(pre)||!pre)&&(!next||next&&!domUtils.isEmptyBlock(next))){if(pre&&pre.tagName==\"P\"&&!domUtils.isEmptyBlock(pre)){pre.appendChild(node);domUtils.moveChild(next,pre);domUtils.remove(next)}else if(next&&next.tagName==\"P\"&&!domUtils.isEmptyBlock(next)){next.insertBefore(node,next.firstChild)}if(pre&&pre.tagName==\"P\"&&domUtils.isEmptyBlock(pre)){domUtils.remove(pre)}if(next&&next.tagName==\"P\"&&domUtils.isEmptyBlock(next)){domUtils.remove(next)}rng.selectNode(node).select();me.fireEvent(\"saveScene\")}}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var rng=me.selection.getRange(),node;if(node=domUtils.findParentByTagName(rng.startContainer,\"p\",true)){if(domUtils.getComputedStyle(node,\"text-align\")==\"center\"){domUtils.removeStyle(node,\"text-align\")}}}})};UE.plugins[\"undo\"]=function(){var saveSceneTimer;var me=this,maxUndoCount=me.options.maxUndoCount||20,maxInputCount=me.options.maxInputCount||20,fillchar=new RegExp(domUtils.fillChar+\"|</hr>\",\"gi\");var noNeedFillCharTags={ol:1,ul:1,table:1,tbody:1,tr:1,body:1};var orgState=me.options.autoClearEmptyNode;function compareAddr(indexA,indexB){if(indexA.length!=indexB.length)return 0;for(var i=0,l=indexA.length;i<l;i++){if(indexA[i]!=indexB[i])return 0}return 1}function compareRangeAddress(rngAddrA,rngAddrB){if(rngAddrA.collapsed!=rngAddrB.collapsed){return 0}if(!compareAddr(rngAddrA.startAddress,rngAddrB.startAddress)||!compareAddr(rngAddrA.endAddress,rngAddrB.endAddress)){return 0}return 1}function UndoManager(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.undo=function(){if(this.hasUndo){if(!this.list[this.index-1]&&this.list.length==1){this.reset();return}while(this.list[this.index].content==this.list[this.index-1].content){this.index--;if(this.index==0){return this.restore(0)}}this.restore(--this.index)}};this.redo=function(){if(this.hasRedo){while(this.list[this.index].content==this.list[this.index+1].content){this.index++;if(this.index==this.list.length-1){return this.restore(this.index)}}this.restore(++this.index)}};this.restore=function(){var me=this.editor;var scene=this.list[this.index];var root=UE.htmlparser(scene.content.replace(fillchar,\"\"));me.options.autoClearEmptyNode=false;me.filterInputRule(root);me.options.autoClearEmptyNode=orgState;me.document.body.innerHTML=root.toHtml();me.fireEvent(\"afterscencerestore\");if(browser.ie){utils.each(domUtils.getElementsByTagName(me.document,\"td th caption p\"),function(node){if(domUtils.isEmptyNode(node)){domUtils.fillNode(me.document,node)}})}try{var rng=new dom.Range(me.document).moveToAddress(scene.address);rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()])}catch(e){}this.update();this.clearKey();me.fireEvent(\"reset\",true)};this.getScene=function(){var me=this.editor;var rng=me.selection.getRange(),rngAddress=rng.createAddress(false,true);me.fireEvent(\"beforegetscene\");var root=UE.htmlparser(me.body.innerHTML);me.options.autoClearEmptyNode=false;me.filterOutputRule(root);me.options.autoClearEmptyNode=orgState;var cont=root.toHtml();me.fireEvent(\"aftergetscene\");return{address:rngAddress,content:cont}};this.save=function(notCompareRange,notSetCursor){clearTimeout(saveSceneTimer);var currentScene=this.getScene(notSetCursor),lastScene=this.list[this.index];if(!lastScene||lastScene&&lastScene.content!=currentScene.content){setTimeout(function(){me.trigger(\"contentchange\")},0)}if(lastScene&&lastScene.content==currentScene.content&&(notCompareRange?1:compareRangeAddress(lastScene.address,currentScene.address))){return}this.list=this.list.slice(0,this.index+1);this.list.push(currentScene);if(this.list.length>maxUndoCount){this.list.shift()}this.index=this.list.length-1;this.clearKey();this.update()};this.update=function(){this.hasRedo=!!this.list[this.index+1];this.hasUndo=!!this.list[this.index-1]};this.reset=function(){this.list=[];this.index=0;this.hasUndo=false;this.hasRedo=false;this.clearKey()};this.clearKey=function(){keycont=0;lastKeyCode=null}}me.undoManger=new UndoManager;me.undoManger.editor=me;function saveScene(){this.undoManger.save()}me.addListener(\"saveScene\",function(){var args=Array.prototype.splice.call(arguments,1);this.undoManger.save.apply(this.undoManger,args)});me.addListener(\"reset\",function(type,exclude){if(!exclude){this.undoManger.reset()}});me.commands[\"redo\"]=me.commands[\"undo\"]={execCommand:function(cmdName){this.undoManger[cmdName]()},queryCommandState:function(cmdName){return this.undoManger[\"has\"+(cmdName.toLowerCase()==\"undo\"?\"Undo\":\"Redo\")]?0:-1},notNeedUndo:1};var keys={16:1,17:1,18:1,37:1,38:1,39:1,40:1},keycont=0,lastKeyCode;var inputType=false;me.addListener(\"ready\",function(){domUtils.on(this.body,\"compositionstart\",function(){inputType=true});domUtils.on(this.body,\"compositionend\",function(){inputType=false})});me.addshortcutkey({Undo:\"ctrl+90\",Redo:\"ctrl+89\"});var isCollapsed=true;me.addListener(\"keyup\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!me.selection.getRange().collapsed){me.undoManger.save(false,true);isCollapsed=false;return}if(me.undoManger.list.length===0){me.undoManger.save(true)}clearTimeout(saveSceneTimer);function save(cont){cont.undoManger.save(false,true);cont.fireEvent(\"selectionchange\")}saveSceneTimer=setTimeout(function(){if(inputType){var intervalTimer=setInterval(function(){if(!inputType){save(me);clearInterval(intervalTimer)}},300);return}save(me)},200);lastKeyCode=keyCode;keycont++;if(keycont>=maxInputCount){save(me)}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(!keys[keyCode]&&!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){if(inputType)return;if(!isCollapsed){this.undoManger.save(false,true);isCollapsed=true}}});me.stopCmdUndo=function(){me.__hasEnterExecCommand=true};me.startCmdUndo=function(){me.__hasEnterExecCommand=false}};UE.plugin.register(\"copy\",function(){var me=this;function initZeroClipboard(){ZeroClipboard.config({debug:false,swfPath:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.swf\"});var client=me.zeroclipboard=new ZeroClipboard;client.on(\"copy\",function(e){var client=e.client,rng=me.selection.getRange(),div=document.createElement(\"div\");div.appendChild(rng.cloneContents());client.setText(div.innerText||div.textContent);client.setHtml(div.innerHTML);rng.select()});client.on(\"mouseover mouseout\",function(e){var target=e.target;if(target){if(e.type==\"mouseover\"){domUtils.addClass(target,\"edui-state-hover\")}else if(e.type==\"mouseout\"){domUtils.removeClasses(target,\"edui-state-hover\")}}});client.on(\"wrongflash noflash\",function(){ZeroClipboard.destroy()});me.fireEvent(\"zeroclipboardready\",client)}return{bindEvents:{ready:function(){if(!browser.ie){if(window.ZeroClipboard){initZeroClipboard()}else{utils.loadFile(document,{src:me.options.UEDITOR_HOME_URL+\"third-party/zeroclipboard/ZeroClipboard.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){initZeroClipboard()})}}}},commands:{copy:{execCommand:function(cmd){if(!me.document.execCommand(\"copy\")){alert(me.getLang(\"copymsg\"))}}}}}});UE.plugins[\"paste\"]=function(){function getClipboardData(callback){var doc=this.document;if(doc.getElementById(\"baidu_pastebin\")){return}var range=this.selection.getRange(),bk=range.createBookmark(),pastebin=doc.createElement(\"div\");pastebin.id=\"baidu_pastebin\";browser.webkit&&pastebin.appendChild(doc.createTextNode(domUtils.fillChar+domUtils.fillChar));doc.body.appendChild(pastebin);bk.start.style.display=\"\";pastebin.style.cssText=\"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\"+domUtils.getXY(bk.start).y+\"px\";range.selectNodeContents(pastebin).select(true);setTimeout(function(){if(browser.webkit){for(var i=0,pastebins=doc.querySelectorAll(\"#baidu_pastebin\"),pi;pi=pastebins[i++];){if(domUtils.isEmptyNode(pi)){domUtils.remove(pi)}else{pastebin=pi;break}}}try{pastebin.parentNode.removeChild(pastebin)}catch(e){}range.moveToBookmark(bk).select(true);callback(pastebin)},0)}var me=this;me.setOpt({retainOnlyLabelPasted:false});var txtContent,htmlContent,address;function getPureHtml(html){return html.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi,function(a,b,tagName,attrs){tagName=tagName.toLowerCase();if({img:1}[tagName]){return a}attrs=attrs.replace(/([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,function(str,atr,val){if({src:1,href:1,name:1}[atr.toLowerCase()]){return atr+\"=\"+val+\" \"}return\"\"});if({span:1,div:1}[tagName]){return\"\"}else{return\"<\"+b+tagName+\" \"+utils.trim(attrs)+\">\"}})}function filter(div){var html;if(div.firstChild){var nodes=domUtils.getElementsByTagName(div,\"span\");for(var i=0,ni;ni=nodes[i++];){if(ni.id==\"_baidu_cut_start\"||ni.id==\"_baidu_cut_end\"){domUtils.remove(ni)}}if(browser.webkit){var brs=div.querySelectorAll(\"div br\");for(var i=0,bi;bi=brs[i++];){var pN=bi.parentNode;if(pN.tagName==\"DIV\"&&pN.childNodes.length==1){pN.innerHTML=\"<p><br/></p>\";domUtils.remove(pN)}}var divs=div.querySelectorAll(\"#baidu_pastebin\");for(var i=0,di;di=divs[i++];){var tmpP=me.document.createElement(\"p\");di.parentNode.insertBefore(tmpP,di);while(di.firstChild){tmpP.appendChild(di.firstChild)}domUtils.remove(di)}var metas=div.querySelectorAll(\"meta\");for(var i=0,ci;ci=metas[i++];){domUtils.remove(ci)}var brs=div.querySelectorAll(\"br\");for(i=0;ci=brs[i++];){if(/^apple-/i.test(ci.className)){domUtils.remove(ci)}}}if(browser.gecko){var dirtyNodes=div.querySelectorAll(\"[_moz_dirty]\");for(i=0;ci=dirtyNodes[i++];){ci.removeAttribute(\"_moz_dirty\")}}if(!browser.ie){var spans=div.querySelectorAll(\"span.Apple-style-span\");for(var i=0,ci;ci=spans[i++];){domUtils.remove(ci,true)}}html=div.innerHTML;html=UE.filterWord(html);var root=UE.htmlparser(html);if(me.options.filterRules){UE.filterNode(root,me.options.filterRules)}me.filterInputRule(root);if(browser.webkit){var br=root.lastChild();if(br&&br.type==\"element\"&&br.tagName==\"br\"){root.removeChild(br)}utils.each(me.body.querySelectorAll(\"div\"),function(node){if(domUtils.isEmptyBlock(node)){domUtils.remove(node,true)}})}html={html:root.toHtml()};me.fireEvent(\"beforepaste\",html,root);if(!html.html){return}root=UE.htmlparser(html.html,true);if(me.queryCommandState(\"pasteplain\")===1){me.execCommand(\"insertHtml\",UE.filterNode(root,me.options.filterTxtRules).toHtml(),true)}else{UE.filterNode(root,me.options.filterTxtRules);txtContent=root.toHtml();htmlContent=html.html;address=me.selection.getRange().createAddress(true);me.execCommand(\"insertHtml\",me.getOpt(\"retainOnlyLabelPasted\")===true?getPureHtml(htmlContent):htmlContent,true)}me.fireEvent(\"afterpaste\",html)}}me.addListener(\"pasteTransfer\",function(cmd,plainType){if(address&&txtContent&&htmlContent&&txtContent!=htmlContent){var range=me.selection.getRange();range.moveToAddress(address,true);if(!range.collapsed){while(!domUtils.isBody(range.startContainer)){var start=range.startContainer;if(start.nodeType==1){start=start.childNodes[range.startOffset];if(!start){range.setStartBefore(range.startContainer);continue}var pre=start.previousSibling;if(pre&&pre.nodeType==3&&new RegExp(\"^[\\n\\r\\t \"+domUtils.fillChar+\"]*$\").test(pre.nodeValue)){range.setStartBefore(pre)}}if(range.startOffset==0){range.setStartBefore(range.startContainer)}else{break}}while(!domUtils.isBody(range.endContainer)){var end=range.endContainer;if(end.nodeType==1){end=end.childNodes[range.endOffset];if(!end){range.setEndAfter(range.endContainer);continue}var next=end.nextSibling;if(next&&next.nodeType==3&&new RegExp(\"^[\\n\\r\\t\"+domUtils.fillChar+\"]*$\").test(next.nodeValue)){range.setEndAfter(next)}}if(range.endOffset==range.endContainer[range.endContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){range.setEndAfter(range.endContainer)}else{break}}}range.deleteContents();range.select(true);me.__hasEnterExecCommand=true;var html=htmlContent;if(plainType===2){html=getPureHtml(html)}else if(plainType){html=txtContent}me.execCommand(\"inserthtml\",html,true);me.__hasEnterExecCommand=false;var rng=me.selection.getRange();while(!domUtils.isBody(rng.startContainer)&&!rng.startOffset&&rng.startContainer[rng.startContainer.nodeType==3?\"nodeValue\":\"childNodes\"].length){rng.setStartBefore(rng.startContainer)}var tmpAddress=rng.createAddress(true);address.endAddress=tmpAddress.startAddress}});me.addListener(\"ready\",function(){domUtils.on(me.body,\"cut\",function(){var range=me.selection.getRange();if(!range.collapsed&&me.undoManger){me.undoManger.save()}});domUtils.on(me.body,browser.ie||browser.opera?\"keydown\":\"paste\",function(e){if((browser.ie||browser.opera)&&(!e.ctrlKey&&!e.metaKey||e.keyCode!=\"86\")){return}getClipboardData.call(me,function(div){filter(div)})})});me.commands[\"paste\"]={execCommand:function(cmd){if(browser.ie){getClipboardData.call(me,function(div){filter(div)});me.document.execCommand(\"paste\")}else{alert(me.getLang(\"pastemsg\"))}}}};UE.plugins[\"pasteplain\"]=function(){var me=this;me.setOpt({pasteplain:false,filterTxtRules:function(){function transP(node){node.tagName=\"p\";node.setStyle()}function removeNode(node){node.parentNode.removeChild(node,true)}return{\"-\":\"script style object iframe embed input select\",p:{$:{}},br:{$:{}},div:function(node){var tmpNode,p=UE.uNode.createElement(\"p\");while(tmpNode=node.firstChild()){if(tmpNode.type==\"text\"||!UE.dom.dtd.$block[tmpNode.tagName]){p.appendChild(tmpNode)}else{if(p.firstChild()){node.parentNode.insertBefore(p,node);p=UE.uNode.createElement(\"p\")}else{node.parentNode.insertBefore(tmpNode,node)}}}if(p.firstChild()){node.parentNode.insertBefore(p,node)}node.parentNode.removeChild(node)},ol:removeNode,ul:removeNode,dl:removeNode,dt:removeNode,dd:removeNode,li:removeNode,caption:transP,th:transP,tr:transP,h1:transP,h2:transP,h3:transP,h4:transP,h5:transP,h6:transP,td:function(node){var txt=!!node.innerText();if(txt){node.parentNode.insertAfter(UE.uNode.createText(\" &nbsp; &nbsp;\"),node)}node.parentNode.removeChild(node,node.innerText())}}}()});var pasteplain=me.options.pasteplain;me.commands[\"pasteplain\"]={queryCommandState:function(){return pasteplain?1:0},execCommand:function(){pasteplain=!pasteplain|0},notNeedUndo:1}};UE.plugins[\"list\"]=function(){var me=this,notExchange={TD:1,PRE:1,BLOCKQUOTE:1};me.setOpt({autoTransWordToList:false,insertorderedlist:{decimal:\"\",\"lower-alpha\":\"\",\"lower-roman\":\"\",\"upper-alpha\":\"\",\"upper-roman\":\"\"},insertunorderedlist:{circle:\"\",disc:\"\",square:\"\"},listDefaultPaddingLeft:\"30\",listiconpath:\"http://bs.baidu.com/listicon/\",maxListLevel:-1,disablePInList:false});function listToArray(list){var arr=[];for(var p in list){arr.push(p)}return arr}var listStyle={OL:listToArray(me.options.insertorderedlist),UL:listToArray(me.options.insertunorderedlist)};var liiconpath=me.options.listiconpath;me.ready(function(){var customCss=[];customCss.push(\".list-paddingleft-1{padding-left:0}\");customCss.push(\".list-paddingleft-2{padding-left:\"+me.options.listDefaultPaddingLeft+\"px}\");customCss.push(\".list-paddingleft-3{padding-left:\"+me.options.listDefaultPaddingLeft*2+\"px}\");utils.cssRule(\"list\",\"ol,ul{margin:0;pading:0;\"+(browser.ie?\"\":\"width:95%\")+\"}li{clear:both;}\"+customCss.join(\"\\n\"),me.document)});me.ready(function(){domUtils.on(me.body,\"cut\",function(){setTimeout(function(){var rng=me.selection.getRange(),li;if(!rng.collapsed){if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){if(!li.nextSibling&&domUtils.isEmptyBlock(li)){var pn=li.parentNode,node;if(node=pn.previousSibling){domUtils.remove(pn);rng.setStartAtLast(node).collapse(true);rng.select(true)}else if(node=pn.nextSibling){domUtils.remove(pn);rng.setStartAtFirst(node).collapse(true);rng.select(true)}else{var tmpNode=me.document.createElement(\"p\");domUtils.fillNode(me.document,tmpNode);pn.parentNode.insertBefore(tmpNode,pn);domUtils.remove(pn);rng.setStart(tmpNode,0).collapse(true);rng.select(true)}}}}})})});function getStyle(node){var cls=node.className;if(domUtils.hasClass(node,/custom_/)){return cls.match(/custom_(\\w+)/)[1]}return domUtils.getStyle(node,\"list-style-type\")}me.addListener(\"beforepaste\",function(type,html){var me=this,rng=me.selection.getRange(),li;var root=UE.htmlparser(html.html,true);if(li=domUtils.findParentByTagName(rng.startContainer,\"li\",true)){var list=li.parentNode,tagName=list.tagName===\"OL\"?\"ul\":\"ol\";utils.each(root.getNodesByTagName(tagName),function(n){n.tagName=list.tagName;n.setAttr();if(n.parentNode===root){type=getStyle(list)||(list.tagName==\"OL\"?\"decimal\":\"disc\")}else{var className=n.parentNode.getAttr(\"class\");if(className&&/custom_/.test(className)){type=className.match(/custom_(\\w+)/)[1]}else{type=n.parentNode.getStyle(\"list-style-type\")}if(!type){type=list.tagName===\"OL\"?\"decimal\":\"disc\"}}var index=utils.indexOf(listStyle[list.tagName],type);if(n.parentNode!==root)index=index+1===listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];n.setStyle(\"list-style-type\",currentStyle)})}html.html=root.toHtml()});me.getOpt(\"disablePInList\")===true&&me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var newChildrens=[],index=0;utils.each(li.children,function(n){if(n.tagName==\"p\"){var tmpNode;while(tmpNode=n.children.pop()){newChildrens.splice(index,0,tmpNode);tmpNode.parentNode=li;lastNode=tmpNode}tmpNode=newChildrens[newChildrens.length-1];if(!tmpNode||tmpNode.type!==\"element\"||tmpNode.tagName!==\"br\"){var br=UE.uNode.createElement(\"br\");br.parentNode=li;newChildrens.push(br)}index=newChildrens.length}});if(newChildrens.length){li.children=newChildrens}})});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"li\"),function(li){var tmpP=UE.uNode.createElement(\"p\");for(var i=0,ci;ci=li.children[i];){if(ci.type===\"text\"||dtd.p[ci.tagName]){tmpP.appendChild(ci)}else{if(tmpP.firstChild()){li.insertBefore(tmpP,ci);tmpP=UE.uNode.createElement(\"p\");i=i+2}else{i++}}}if(tmpP.firstChild()&&!tmpP.parentNode||!li.firstChild()){li.appendChild(tmpP)}if(!tmpP.firstChild()){tmpP.innerHTML(browser.ie?\"&nbsp;\":\"<br/>\")}var p=li.firstChild();var lastChild=p.lastChild();if(lastChild&&lastChild.type===\"text\"&&/^\\s*$/.test(lastChild.data)){p.removeChild(lastChild)}});if(me.options.autoTransWordToList){var orderlisttype={num1:/^\\d+\\)/,decimal:/^\\d+\\./,\"lower-alpha\":/^[a-z]+\\)/,\"upper-alpha\":/^[A-Z]+\\./,cn:/^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,cn2:/^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/},unorderlisttype={square:\"n\"};function checkListType(content,container){var span=container.firstChild();if(span&&span.type===\"element\"&&span.tagName===\"span\"&&/Wingdings|Symbol/.test(span.getStyle(\"font-family\"))){for(var p in unorderlisttype){if(unorderlisttype[p]==span.data){return p}}return\"disc\"}for(var p in orderlisttype){if(orderlisttype[p].test(content)){return p}}}utils.each(root.getNodesByTagName(\"p\"),function(node){if(node.getAttr(\"class\")!==\"MsoListParagraph\"){return}node.setStyle(\"margin\",\"\");node.setStyle(\"margin-left\",\"\");node.setAttr(\"class\",\"\");function appendLi(list,p,type){if(list.tagName===\"ol\"){if(browser.ie){var first=p.firstChild();if(first.type===\"element\"&&first.tagName===\"span\"&&orderlisttype[type].test(first.innerText())){p.removeChild(first)}}else{p.innerHTML(p.innerHTML().replace(orderlisttype[type],\"\"))}}else{p.removeChild(p.firstChild())}var li=UE.uNode.createElement(\"li\");li.appendChild(p);list.appendChild(li)}var tmp=node,type,cacheNode=node;if(node.parentNode.tagName!==\"li\"&&(type=checkListType(node.innerText(),node))){var list=UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type)?\"ol\":\"ul\");list.setStyle(\"list-style-type\",type);while(node&&node.parentNode.tagName!==\"li\"&&checkListType(node.innerText(),node)){tmp=node.nextSibling();if(!tmp){node.parentNode.insertBefore(list,node)}appendLi(list,node,type);node=tmp}if(!list.parentNode&&node&&node.parentNode){node.parentNode.insertBefore(list,node)}}var span=cacheNode.firstChild();if(span&&span.type==\"element\"&&span.tagName==\"span\"&&/^\\s*(&nbsp;)+\\s*$/.test(span.innerText())){span.parentNode.removeChild(span)}})}});me.addListener(\"contentchange\",function(){adjustListStyle(me.document)});function adjustListStyle(doc,ignore){utils.each(domUtils.getElementsByTagName(doc,\"ol ul\"),function(node){if(!domUtils.inDoc(node,doc))return;var parent=node.parentNode;if(parent.tagName===node.tagName){var nodeStyleType=getStyle(node)||(node.tagName===\"OL\"?\"decimal\":\"disc\"),parentStyleType=getStyle(parent)||(parent.tagName===\"OL\"?\"decimal\":\"disc\");if(nodeStyleType===parentStyleType){var styleIndex=utils.indexOf(listStyle[node.tagName],nodeStyleType);styleIndex=styleIndex+1===listStyle[node.tagName].length?0:styleIndex+1;setListStyle(node,listStyle[node.tagName][styleIndex])}}var index=0,type=2;if(domUtils.hasClass(node,/custom_/)){if(!(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/))){type=1}}else{if(/[ou]l/i.test(parent.tagName)&&domUtils.hasClass(parent,/custom_/)){type=3}}var style=domUtils.getStyle(node,\"list-style-type\");style&&(node.style.cssText=\"list-style-type:\"+style);node.className=utils.trim(node.className.replace(/list-paddingleft-\\w+/,\"\"))+\" list-paddingleft-\"+type;utils.each(domUtils.getElementsByTagName(node,\"li\"),function(li){li.style.cssText&&(li.style.cssText=\"\");if(!li.firstChild){domUtils.remove(li);return}if(li.parentNode!==node){return}index++;if(domUtils.hasClass(node,/custom_/)){var paddingLeft=1,currentStyle=getStyle(node);if(node.tagName===\"OL\"){if(currentStyle){switch(currentStyle){case\"cn\":case\"cn1\":case\"cn2\":if(index>10&&(index%10===0||index>10&&index<20)){paddingLeft=2}else if(index>20){paddingLeft=3}break;case\"num2\":if(index>9){paddingLeft=2}}}li.className=\"list-\"+currentStyle+\"-paddingleft-\"+paddingLeft}else{li.className=\"list-\"+currentStyle+\"-paddingleft\"}}else{li.className=li.className.replace(/list-[\\w\\-]+/gi,\"\")}var className=li.getAttribute(\"class\");if(className!==null&&!className.replace(/\\s/g,\"\")){domUtils.removeAttributes(li,\"class\")}});!ignore&&adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node,\"list-style-type\"),true)})}function adjustList(list,tag,style,ignoreEmpty){var nextList=list.nextSibling;if(nextList&&nextList.nodeType===1&&nextList.tagName.toLowerCase()===tag&&(getStyle(nextList)||domUtils.getStyle(nextList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))==style){domUtils.moveChild(nextList,list);if(nextList.childNodes.length===0){domUtils.remove(nextList)}}if(nextList&&domUtils.isFillChar(nextList)){domUtils.remove(nextList)}var preList=list.previousSibling;if(preList&&preList.nodeType===1&&preList.tagName.toLowerCase()==tag&&(getStyle(preList)||domUtils.getStyle(preList,\"list-style-type\")||(tag==\"ol\"?\"decimal\":\"disc\"))===style){domUtils.moveChild(list,preList)}if(preList&&domUtils.isFillChar(preList)){domUtils.remove(preList)}!ignoreEmpty&&domUtils.isEmptyBlock(list)&&domUtils.remove(list);if(getStyle(list)){adjustListStyle(list.ownerDocument,true)}}function setListStyle(list,style){try{domUtils.setStyle(list,\"list-style-type\",style)}catch(e){}}function clearEmptySibling(node){var tmpNode=node.previousSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}tmpNode=node.nextSibling;if(tmpNode&&domUtils.isEmptyBlock(tmpNode)){domUtils.remove(tmpNode)}}me.addListener(\"keydown\",function(type,evt){function preventAndSave(){evt.preventDefault?evt.preventDefault():evt.returnValue=false;me.fireEvent(\"contentchange\");me.undoManger&&me.undoManger.save()}function findList(node,filterFn){while(node&&!domUtils.isBody(node)){if(filterFn(node)){return null}if(node.nodeType===1&&/[ou]l/i.test(node.tagName)){return node}node=node.parentNode}return null}var keyCode=evt.keyCode||evt.which;if(keyCode===13&&!evt.shiftKey){var rng=me.selection.getRange(),parent=domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true),li=domUtils.findParentByTagName(rng.startContainer,\"li\",true);if(parent&&parent.tagName!==\"PRE\"&&!li){var html=parent.innerHTML.replace(new RegExp(domUtils.fillChar,\"g\"),\"\");if(/^\\s*1\\s*\\.[^\\d]/.test(html)){parent.innerHTML=html.replace(/^\\s*1\\s*\\./,\"\");rng.setStartAtLast(parent).collapse(true).select();me.__hasEnterExecCommand=true;me.execCommand(\"insertorderedlist\");me.__hasEnterExecCommand=false}}var range=me.selection.getRange(),start=findList(range.startContainer,function(node){return node.tagName===\"TABLE\"}),end=range.collapsed?start:findList(range.endContainer,function(node){return node.tagName===\"TABLE\"});if(start&&end&&start===end){if(!range.collapsed){start=domUtils.findParentByTagName(range.startContainer,\"li\",true);end=domUtils.findParentByTagName(range.endContainer,\"li\",true);if(start&&end&&start===end){range.deleteContents();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isEmptyBlock(li)){pre=li.previousSibling;next=li.nextSibling;p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);parentList=li.parentNode;if(pre&&next){range.setStart(next,0).collapse(true).select(true);domUtils.remove(li)}else{if(!pre&&!next||!pre){parentList.parentNode.insertBefore(p,parentList)}else{li.parentNode.parentNode.insertBefore(p,parentList.nextSibling)}domUtils.remove(li);if(!parentList.firstChild){domUtils.remove(parentList)}range.setStart(p,0).setCursor()}preventAndSave();return}}else{var tmpRange=range.cloneRange(),bk=tmpRange.collapse(false).createBookmark();range.deleteContents();tmpRange.moveToBookmark(bk);var li=domUtils.findParentByTagName(tmpRange.startContainer,\"li\",true);clearEmptySibling(li);tmpRange.select();preventAndSave();return}}li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){if(domUtils.isEmptyBlock(li)){bk=range.createBookmark();var parentList=li.parentNode;if(li!==parentList.lastChild){domUtils.breakParent(li,parentList);clearEmptySibling(li)}else{parentList.parentNode.insertBefore(li,parentList.nextSibling);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}if(!dtd.$list[li.parentNode.tagName]){if(!domUtils.isBlockElm(li.firstChild)){p=me.document.createElement(\"p\");li.parentNode.insertBefore(p,li);while(li.firstChild){p.appendChild(li.firstChild)}domUtils.remove(li)}else{domUtils.remove(li,true)}}range.moveToBookmark(bk).select()}else{var first=li.firstChild;if(!first||!domUtils.isBlockElm(first)){var p=me.document.createElement(\"p\");!li.firstChild&&domUtils.fillNode(me.document,p);while(li.firstChild){p.appendChild(li.firstChild)}li.appendChild(p);first=p}var span=me.document.createElement(\"span\");range.insertNode(span);domUtils.breakParent(span,li);var nextLi=span.nextSibling;first=nextLi.firstChild;if(!first){p=me.document.createElement(\"p\");domUtils.fillNode(me.document,p);nextLi.appendChild(p);first=p}if(domUtils.isEmptyNode(first)){first.innerHTML=\"\";domUtils.fillNode(me.document,first)}range.setStart(first,0).collapse(true).shrinkBoundary().select();domUtils.remove(span);var pre=nextLi.previousSibling;if(pre&&domUtils.isEmptyBlock(pre)){pre.innerHTML=\"<p></p>\";domUtils.fillNode(me.document,pre.firstChild)}}preventAndSave()}}}if(keyCode===8){range=me.selection.getRange();if(range.collapsed&&domUtils.isStartInblock(range)){tmpRange=range.cloneRange().trimBoundary();li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li&&domUtils.isStartInblock(tmpRange)){start=domUtils.findParentByTagName(range.startContainer,\"p\",true);if(start&&start!==li.firstChild){var parentList=domUtils.findParentByTagName(start,[\"ol\",\"ul\"]);domUtils.breakParent(start,parentList);clearEmptySibling(start);me.fireEvent(\"contentchange\");range.setStart(start,0).setCursor(false,true);me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&(pre=li.previousSibling)){if(keyCode===46&&li.childNodes.length){return}if(dtd.$list[pre.tagName]){pre=pre.lastChild}me.undoManger&&me.undoManger.save();first=li.firstChild;if(domUtils.isBlockElm(first)){if(domUtils.isEmptyNode(first)){pre.appendChild(first);range.setStart(first,0).setCursor(false,true);while(li.firstChild){pre.appendChild(li.firstChild)}}else{span=me.document.createElement(\"span\");range.insertNode(span);if(domUtils.isEmptyBlock(pre)){pre.innerHTML=\"\"}domUtils.moveChild(li,pre);range.setStartBefore(span).collapse(true).select(true);domUtils.remove(span)}}else{if(domUtils.isEmptyNode(li)){var p=me.document.createElement(\"p\");pre.appendChild(p);range.setStart(p,0).setCursor()}else{range.setEnd(pre,pre.childNodes.length).collapse().select(true);while(li.firstChild){pre.appendChild(li.firstChild)}}}domUtils.remove(li);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(li&&!li.previousSibling){var parentList=li.parentNode;var bk=range.createBookmark();if(domUtils.isTagNode(parentList.parentNode,\"ol ul\")){parentList.parentNode.insertBefore(li,parentList);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}else{while(li.firstChild){parentList.parentNode.insertBefore(li.firstChild,parentList)}domUtils.remove(li);if(domUtils.isEmptyNode(parentList)){domUtils.remove(parentList)}}range.moveToBookmark(bk).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}}}}});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==8){var rng=me.selection.getRange(),list;if(list=domUtils.findParentByTagName(rng.startContainer,[\"ol\",\"ul\"],true)){adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,\"list-style-type\"),true)}}});me.addListener(\"tabkeydown\",function(){var range=me.selection.getRange();function checkLevel(li){if(me.options.maxListLevel!=-1){var level=li.parentNode,levelNum=0;while(/[ou]l/i.test(level.tagName)){levelNum++;level=level.parentNode}if(levelNum>=me.options.maxListLevel){return true}}}var li=domUtils.findParentByTagName(range.startContainer,\"li\",true);if(li){var bk;if(range.collapsed){if(checkLevel(li))return true;var parentLi=li.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));index=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][index];setListStyle(list,currentStyle);if(domUtils.isStartInblock(range)){me.fireEvent(\"saveScene\");bk=range.createBookmark();parentLi.insertBefore(list,li);list.appendChild(li);adjustList(list,list.tagName.toLowerCase(),currentStyle);me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select(true);return true}}else{me.fireEvent(\"saveScene\");bk=range.createBookmark();for(var i=0,closeList,parents=domUtils.findParents(li),ci;ci=parents[i++];){if(domUtils.isTagNode(ci,\"ol ul\")){closeList=ci;break}}var current=li;if(bk.end){while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){if(checkLevel(current)){current=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList});continue}var parentLi=current.parentNode,list=me.document.createElement(parentLi.tagName),index=utils.indexOf(listStyle[list.tagName],getStyle(parentLi)||domUtils.getComputedStyle(parentLi,\"list-style-type\"));var currentIndex=index+1==listStyle[list.tagName].length?0:index+1;var currentStyle=listStyle[list.tagName][currentIndex];setListStyle(list,currentStyle);parentLi.insertBefore(list,current);while(current&&!(domUtils.getPosition(current,bk.end)&domUtils.POSITION_FOLLOWING)){li=current.nextSibling;list.appendChild(current);if(!li||domUtils.isTagNode(li,\"ol ul\")){if(li){while(li=li.firstChild){if(li.tagName==\"LI\"){break}}}else{li=domUtils.getNextDomNode(current,false,null,function(node){return node!==closeList})}break}current=li}adjustList(list,list.tagName.toLowerCase(),currentStyle);current=li}}me.fireEvent(\"contentchange\");range.moveToBookmark(bk).select();return true}}});function getLi(start){while(start&&!domUtils.isBody(start)){if(start.nodeName==\"TABLE\"){return null}if(start.nodeName==\"LI\"){return start}start=start.parentNode}}me.commands[\"insertorderedlist\"]=me.commands[\"insertunorderedlist\"]={execCommand:function(command,style){if(!style){style=command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\"}var me=this,range=this.selection.getRange(),filterFn=function(node){return node.nodeType==1?node.tagName.toLowerCase()!=\"br\":!domUtils.isWhitespace(node)},tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\",frag=me.document.createDocumentFragment();range.adjustmentBoundary().shrinkBoundary();var bko=range.createBookmark(true),start=getLi(me.document.getElementById(bko.start)),modifyStart=0,end=getLi(me.document.getElementById(bko.end)),modifyEnd=0,startParent,endParent,list,tmp;if(start||end){start&&(startParent=start.parentNode);if(!bko.end){end=start}end&&(endParent=end.parentNode);if(startParent===endParent){while(start!==end){tmp=start;start=start.nextSibling;if(!domUtils.isBlockElm(tmp.firstChild)){var p=me.document.createElement(\"p\");while(tmp.firstChild){p.appendChild(tmp.firstChild)}tmp.appendChild(p)}frag.appendChild(tmp)}tmp=me.document.createElement(\"span\");startParent.insertBefore(tmp,end);if(!domUtils.isBlockElm(end.firstChild)){p=me.document.createElement(\"p\");while(end.firstChild){p.appendChild(end.firstChild)}end.appendChild(p)}frag.appendChild(end);domUtils.breakParent(tmp,startParent);if(domUtils.isEmptyNode(tmp.previousSibling)){domUtils.remove(tmp.previousSibling)}if(domUtils.isEmptyNode(tmp.nextSibling)){domUtils.remove(tmp.nextSibling)}var nodeStyle=getStyle(startParent)||domUtils.getComputedStyle(startParent,\"list-style-type\")||(command.toLowerCase()==\"insertorderedlist\"?\"decimal\":\"disc\");if(startParent.tagName.toLowerCase()==tag&&nodeStyle==style){for(var i=0,ci,tmpFrag=me.document.createDocumentFragment();ci=frag.firstChild;){if(domUtils.isTagNode(ci,\"ol ul\")){tmpFrag.appendChild(ci)}else{while(ci.firstChild){tmpFrag.appendChild(ci.firstChild);domUtils.remove(ci)}}}tmp.parentNode.insertBefore(tmpFrag,tmp)}else{list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);tmp.parentNode.insertBefore(list,tmp)}domUtils.remove(tmp);list&&adjustList(list,tag,style);range.moveToBookmark(bko).select();return}if(start){while(start){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{var tmpfrag=me.document.createDocumentFragment(),hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){var tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}startParent.parentNode.insertBefore(frag,startParent.nextSibling);if(domUtils.isEmptyNode(startParent)){range.setStartBefore(startParent);domUtils.remove(startParent)}else{range.setStartAfter(startParent)}modifyStart=1}if(end&&domUtils.inDoc(endParent,me.document)){start=endParent.firstChild;while(start&&start!==end){tmp=start.nextSibling;if(domUtils.isTagNode(start,\"ol ul\")){frag.appendChild(start)}else{tmpfrag=me.document.createDocumentFragment();hasBlock=0;while(start.firstChild){if(domUtils.isBlockElm(start.firstChild)){hasBlock=1}tmpfrag.appendChild(start.firstChild)}if(!hasBlock){tmpP=me.document.createElement(\"p\");tmpP.appendChild(tmpfrag);frag.appendChild(tmpP)}else{frag.appendChild(tmpfrag)}domUtils.remove(start)}start=tmp}var tmpDiv=domUtils.createElement(me.document,\"div\",{tmpDiv:1});domUtils.moveChild(end,tmpDiv);frag.appendChild(tmpDiv);domUtils.remove(end);endParent.parentNode.insertBefore(frag,endParent);range.setEndBefore(endParent);if(domUtils.isEmptyNode(endParent)){domUtils.remove(endParent)}modifyEnd=1}}if(!modifyStart){range.setStartBefore(me.document.getElementById(bko.start))}if(bko.end&&!modifyEnd){range.setEndAfter(me.document.getElementById(bko.end))}range.enlarge(true,function(node){return notExchange[node.tagName]});frag=me.document.createDocumentFragment();var bk=range.createBookmark(),current=domUtils.getNextDomNode(bk.start,false,filterFn),tmpRange=range.cloneRange(),tmpNode,block=domUtils.isBlockElm;while(current&&current!==bk.end&&domUtils.getPosition(current,bk.end)&domUtils.POSITION_PRECEDING){if(current.nodeType==3||dtd.li[current.tagName]){if(current.nodeType==1&&dtd.$list[current.tagName]){while(current.firstChild){frag.appendChild(current.firstChild)}tmpNode=domUtils.getNextDomNode(current,false,filterFn);domUtils.remove(current);current=tmpNode;continue}tmpNode=current;tmpRange.setStartBefore(current);while(current&&current!==bk.end&&(!block(current)||domUtils.isBookmarkNode(current))){tmpNode=current;current=domUtils.getNextDomNode(current,false,null,function(node){return!notExchange[node.tagName]})}if(current&&block(current)){tmp=domUtils.getNextDomNode(tmpNode,false,filterFn);if(tmp&&domUtils.isBookmarkNode(tmp)){current=domUtils.getNextDomNode(tmp,false,filterFn);tmpNode=tmp}}tmpRange.setEndAfter(tmpNode);current=domUtils.getNextDomNode(tmpNode,false,filterFn);var li=range.document.createElement(\"li\");li.appendChild(tmpRange.extractContents());if(domUtils.isEmptyNode(li)){var tmpNode=range.document.createElement(\"p\");while(li.firstChild){tmpNode.appendChild(li.firstChild)}li.appendChild(tmpNode)}frag.appendChild(li)}else{current=domUtils.getNextDomNode(current,true,filterFn)}}range.moveToBookmark(bk).collapse(true);list=me.document.createElement(tag);setListStyle(list,style);list.appendChild(frag);range.insertNode(list);adjustList(list,tag,style);for(var i=0,ci,tmpDivs=domUtils.getElementsByTagName(list,\"div\");ci=tmpDivs[i++];){if(ci.getAttribute(\"tmpDiv\")){domUtils.remove(ci,true)}}range.moveToBookmark(bko).select()},queryCommandState:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath();for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){return 0}if(tag==ci.nodeName.toLowerCase()){return 1}}return 0},queryCommandValue:function(command){var tag=command.toLowerCase()==\"insertorderedlist\"?\"ol\":\"ul\";var path=this.selection.getStartElementPath(),node;for(var i=0,ci;ci=path[i++];){if(ci.nodeName==\"TABLE\"){node=null;break}if(tag==ci.nodeName.toLowerCase()){node=ci;break}}return node?getStyle(node)||domUtils.getComputedStyle(node,\"list-style-type\"):null}}};(function(){var sourceEditors={textarea:function(editor,holder){var textarea=holder.ownerDocument.createElement(\"textarea\");textarea.style.cssText=\"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\";if(browser.ie&&browser.version<8){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\";holder.onresize=function(){textarea.style.width=holder.offsetWidth+\"px\";textarea.style.height=holder.offsetHeight+\"px\"}}holder.appendChild(textarea);return{setContent:function(content){textarea.value=content},getContent:function(){return textarea.value},select:function(){var range;if(browser.ie){range=textarea.createTextRange();range.collapse(true);range.select()}else{textarea.setSelectionRange(0,0);textarea.focus()}},dispose:function(){holder.removeChild(textarea);holder.onresize=null;textarea=null;holder=null},focus:function(){textarea.focus()},blur:function(){textarea.blur()}}},codemirror:function(editor,holder){var codeEditor=window.CodeMirror(holder,{mode:\"text/html\",tabMode:\"indent\",lineNumbers:true,lineWrapping:true,onChange:function(v){editor.sync();editor.fireEvent(\"contentchange\")}});var dom=codeEditor.getWrapperElement();dom.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;';codeEditor.getScrollerElement().style.cssText=\"position:absolute;left:0;top:0;width:100%;height:100%;\";codeEditor.refresh();return{getCodeMirror:function(){return codeEditor},setContent:function(content){codeEditor.setValue(content)},getContent:function(){return codeEditor.getValue()},select:function(){codeEditor.focus()},dispose:function(){holder.removeChild(dom);dom=null;codeEditor=null},focus:function(){codeEditor.focus()},blur:function(){codeEditor.setOption(\"readOnly\",true);codeEditor.setOption(\"readOnly\",false)}}}};UE.plugins[\"source\"]=function(){var me=this;var opt=this.options;var sourceMode=false;var sourceEditor;var orgSetContent;var orgFocus;var orgBlur;opt.sourceEditor=browser.ie?\"textarea\":opt.sourceEditor||\"codemirror\";me.setOpt({sourceEditorFirst:false});function createSourceEditor(holder){return sourceEditors[opt.sourceEditor==\"codemirror\"&&window.CodeMirror?\"codemirror\":\"textarea\"](me,holder)}var bakCssText;var oldGetContent,bakAddress;me.commands[\"source\"]={execCommand:function(){sourceMode=!sourceMode;if(sourceMode){bakAddress=me.selection.getRange().createAddress(false,true);me.undoManger&&me.undoManger.save(true);if(browser.gecko){me.body.contentEditable=false}bakCssText=me.iframe.style.cssText;me.iframe.style.cssText+=\"position:absolute;left:-32768px;top:-32768px;\";me.fireEvent(\"beforegetcontent\");var root=UE.htmlparser(me.body.innerHTML);me.filterOutputRule(root);root.traversal(function(node){if(node.type==\"element\"){switch(node.tagName){case\"td\":case\"th\":case\"caption\":if(node.children&&node.children.length==1){if(node.firstChild().tagName==\"br\"){node.removeChild(node.firstChild())}}break;case\"pre\":node.innerText(node.innerText().replace(/&nbsp;/g,\" \"))}}});me.fireEvent(\"aftergetcontent\");var content=root.toHtml(true);sourceEditor=createSourceEditor(me.iframe.parentNode);sourceEditor.setContent(content);orgSetContent=me.setContent;me.setContent=function(html){var root=UE.htmlparser(html);me.filterInputRule(root);html=root.toHtml();sourceEditor.setContent(html)};setTimeout(function(){sourceEditor.select();me.addListener(\"fullscreenchanged\",function(){try{sourceEditor.getCodeMirror().refresh()}catch(e){}})});oldGetContent=me.getContent;me.getContent=function(){return sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\"};orgFocus=me.focus;orgBlur=me.blur;me.focus=function(){sourceEditor.focus()};me.blur=function(){orgBlur.call(me);sourceEditor.blur()}}else{me.iframe.style.cssText=bakCssText;var cont=sourceEditor.getContent()||\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";cont=cont.replace(new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\",\"g\"),function(a,b){if(b&&!dtd.$inlineWithA[b.toLowerCase()]){return a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g,\"\")}return a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g,\"\")});me.setContent=orgSetContent;me.setContent(cont);sourceEditor.dispose();sourceEditor=null;me.getContent=oldGetContent;me.focus=orgFocus;me.blur=orgBlur;var first=me.body.firstChild;if(!first){me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";first=me.body.firstChild}me.undoManger&&me.undoManger.save(true);if(browser.gecko){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;left:0;top:-32768px\";document.body.appendChild(input);me.body.contentEditable=false;setTimeout(function(){domUtils.setViewportOffset(input,{left:-32768,top:0});input.focus();setTimeout(function(){me.body.contentEditable=true;me.selection.getRange().moveToAddress(bakAddress).select(true);domUtils.remove(input)})})}else{try{me.selection.getRange().moveToAddress(bakAddress).select(true)}catch(e){}}}this.fireEvent(\"sourcemodechanged\",sourceMode)},queryCommandState:function(){return sourceMode|0},notNeedUndo:1};var oldQueryCommandState=me.queryCommandState;me.queryCommandState=function(cmdName){cmdName=cmdName.toLowerCase();if(sourceMode){return cmdName in{source:1,fullscreen:1}?1:-1}return oldQueryCommandState.apply(this,arguments)};if(opt.sourceEditor==\"codemirror\"){me.addListener(\"ready\",function(){utils.loadFile(document,{src:opt.codeMirrorJsUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.js\",tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){if(opt.sourceEditorFirst){setTimeout(function(){me.execCommand(\"source\")},0)}});utils.loadFile(document,{tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:opt.codeMirrorCssUrl||opt.UEDITOR_HOME_URL+\"third-party/codemirror/codemirror.css?221123\"})})}}})();UE.plugins[\"enterkey\"]=function(){var hTag,me=this,tag=me.options.enterTag;me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){var range=me.selection.getRange(),start=range.startContainer,doSave;if(!browser.ie){if(/h\\d/i.test(hTag)){if(browser.gecko){var h=domUtils.findParentByTagName(start,[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\",\"table\"],true);if(!h){me.document.execCommand(\"formatBlock\",false,\"<p>\");doSave=1}}else{if(start.nodeType==1){var tmp=me.document.createTextNode(\"\"),div;range.insertNode(tmp);div=domUtils.findParentByTagName(tmp,\"div\",true);if(div){var p=me.document.createElement(\"p\");while(div.firstChild){p.appendChild(div.firstChild)}div.parentNode.insertBefore(p,div);domUtils.remove(div);range.setStartBefore(tmp).setCursor();doSave=1}domUtils.remove(tmp)}}if(me.undoManger&&doSave){me.undoManger.save()}}browser.opera&&range.select()}else{me.fireEvent(\"saveScene\",true,true)}}});me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==13){if(me.fireEvent(\"beforeenterkeydown\")){domUtils.preventDefault(evt);return}me.fireEvent(\"saveScene\",true,true);hTag=\"\";var range=me.selection.getRange();if(!range.collapsed){var start=range.startContainer,end=range.endContainer,startTd=domUtils.findParentByTagName(start,\"td\",true),endTd=domUtils.findParentByTagName(end,\"td\",true);if(startTd&&endTd&&startTd!==endTd||!startTd&&endTd||startTd&&!endTd){evt.preventDefault?evt.preventDefault():evt.returnValue=false;return}}if(tag==\"p\"){if(!browser.ie){start=domUtils.findParentByTagName(range.startContainer,[\"ol\",\"ul\",\"p\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"caption\"],true);if(!start&&!browser.opera){me.document.execCommand(\"formatBlock\",false,\"<p>\");if(browser.gecko){range=me.selection.getRange();start=domUtils.findParentByTagName(range.startContainer,\"p\",true);start&&domUtils.removeDirtyAttr(start)}}else{hTag=start.tagName;start.tagName.toLowerCase()==\"p\"&&browser.gecko&&domUtils.removeDirtyAttr(start)}}}else{evt.preventDefault?evt.preventDefault():evt.returnValue=false;if(!range.collapsed){range.deleteContents();start=range.startContainer;if(start.nodeType==1&&(start=start.childNodes[range.startOffset])){while(start.nodeType==1){if(dtd.$empty[start.tagName]){range.setStartBefore(start).setCursor();if(me.undoManger){me.undoManger.save()}return false}if(!start.firstChild){var br=range.document.createElement(\"br\");start.appendChild(br);range.setStart(start,0).setCursor();if(me.undoManger){me.undoManger.save()}return false}start=start.firstChild}if(start===range.startContainer.childNodes[range.startOffset]){br=range.document.createElement(\"br\");range.insertNode(br).setCursor()}else{range.setStart(start,0).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br).setStartAfter(br).setCursor()}}else{br=range.document.createElement(\"br\");range.insertNode(br);var parent=br.parentNode;if(parent.lastChild===br){br.parentNode.insertBefore(br.cloneNode(true),br);range.setStartBefore(br)}else{range.setStartAfter(br)}range.setCursor()}}}})};UE.plugins[\"keystrokes\"]=function(){var me=this;var collapsed=true;me.addListener(\"keydown\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng=me.selection.getRange();if(!rng.collapsed&&!(evt.ctrlKey||evt.shiftKey||evt.altKey||evt.metaKey)&&(keyCode>=65&&keyCode<=90||keyCode>=48&&keyCode<=57||keyCode>=96&&keyCode<=111||{13:1,8:1,46:1}[keyCode])){var tmpNode=rng.startContainer;if(domUtils.isFillChar(tmpNode)){rng.setStartBefore(tmpNode)}tmpNode=rng.endContainer;if(domUtils.isFillChar(tmpNode)){rng.setEndAfter(tmpNode)}rng.txtToElmBoundary();if(rng.endContainer&&rng.endContainer.nodeType==1){tmpNode=rng.endContainer.childNodes[rng.endOffset];if(tmpNode&&domUtils.isBr(tmpNode)){rng.setEndAfter(tmpNode)}}if(rng.startOffset==0){tmpNode=rng.startContainer;if(domUtils.isBoundaryNode(tmpNode,\"firstChild\")){tmpNode=rng.endContainer;if(rng.endOffset==(tmpNode.nodeType==3?tmpNode.nodeValue.length:tmpNode.childNodes.length)&&domUtils.isBoundaryNode(tmpNode,\"lastChild\")){me.fireEvent(\"saveScene\");me.body.innerHTML=\"<p>\"+(browser.ie?\"\":\"<br/>\")+\"</p>\";rng.setStart(me.body.firstChild,0).setCursor(false,true);me._selectionChange();return}}}}if(keyCode==keymap.Backspace){rng=me.selection.getRange();collapsed=rng.collapsed;if(me.fireEvent(\"delkeydown\",evt)){return}var start,end;if(rng.collapsed&&rng.inFillChar()){start=rng.startContainer;if(domUtils.isFillChar(start)){rng.setStartBefore(start).shrinkBoundary(true).collapse(true);domUtils.remove(start)}else{start.nodeValue=start.nodeValue.replace(new RegExp(\"^\"+domUtils.fillChar),\"\");rng.startOffset--;rng.collapse(true).select(true)}}if(start=rng.getClosedNode()){me.fireEvent(\"saveScene\");rng.setStartBefore(start);domUtils.remove(start);rng.setCursor();me.fireEvent(\"saveScene\");domUtils.preventDefault(evt);return}if(!browser.ie){start=domUtils.findParentByTagName(rng.startContainer,\"table\",true);end=domUtils.findParentByTagName(rng.endContainer,\"table\",true);if(start&&!end||!start&&end||start!==end){evt.preventDefault();return}}}if(keyCode==keymap.Tab){var excludeTagNameForTabKey={ol:1,ul:1,table:1};if(me.fireEvent(\"tabkeydown\",evt)){domUtils.preventDefault(evt);return}var range=me.selection.getRange();me.fireEvent(\"saveScene\");for(var i=0,txt=\"\",tabSize=me.options.tabSize||4,tabNode=me.options.tabNode||\"&nbsp;\";i<tabSize;i++){txt+=tabNode}var span=me.document.createElement(\"span\");span.innerHTML=txt+domUtils.fillChar;if(range.collapsed){range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var filterFn=function(node){return domUtils.isBlockElm(node)&&!excludeTagNameForTabKey[node.tagName.toLowerCase()]};start=domUtils.findParent(range.startContainer,filterFn,true);end=domUtils.findParent(range.endContainer,filterFn,true);if(start&&end&&start===end){range.deleteContents();range.insertNode(span.cloneNode(true).firstChild).setCursor(true)}else{var bookmark=range.createBookmark();range.enlarge(true);var bookmark2=range.createBookmark(),current=domUtils.getNextDomNode(bookmark2.start,false,filterFn);while(current&&!(domUtils.getPosition(current,bookmark2.end)&domUtils.POSITION_FOLLOWING)){current.insertBefore(span.cloneNode(true).firstChild,current.firstChild);current=domUtils.getNextDomNode(current,false,filterFn)}range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select()}}domUtils.preventDefault(evt)}if(browser.gecko&&keyCode==46){range=me.selection.getRange();if(range.collapsed){start=range.startContainer;if(domUtils.isEmptyBlock(start)){var parent=start.parentNode;while(domUtils.getChildCount(parent)==1&&!domUtils.isBody(parent)){start=parent;parent=parent.parentNode}if(start===parent.lastChild)evt.preventDefault();return}}}browser.chrome&&me.on(\"keydown\",function(type,e){var keyCode=e.keyCode||e.which;if((e.metaKey&&e.altKey||e.ctrlKey&&e.shiftKey)&&keyCode==73){return true}})});me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which,rng,me=this;if(keyCode==keymap.Backspace){if(me.fireEvent(\"delkeyup\")){return}rng=me.selection.getRange();if(rng.collapsed){var tmpNode,autoClearTagName=[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];if(tmpNode=domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){if(domUtils.isEmptyBlock(tmpNode)){var pre=tmpNode.previousSibling;if(pre&&pre.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtLast(pre).setCursor(false,true);return}else{var next=tmpNode.nextSibling;if(next&&next.nodeName!=\"TABLE\"){domUtils.remove(tmpNode);rng.setStartAtFirst(next).setCursor(false,true);return}}}}if(domUtils.isBody(rng.startContainer)){var tmpNode=domUtils.createElement(me.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true)}}if(!collapsed&&(rng.startContainer.nodeType==3||rng.startContainer.nodeType==1&&domUtils.isEmptyBlock(rng.startContainer))){if(browser.ie){var span=rng.document.createElement(\"span\");rng.insertNode(span).setStartBefore(span).collapse(true);rng.select();domUtils.remove(span)}else{rng.select()}}}})};UE.plugins[\"fiximgclick\"]=function(){var elementUpdated=false;function Scale(){this.editor=null;this.resizer=null;this.cover=null;this.doc=document;this.prePos={x:0,y:0};this.startPos={x:0,y:0}}(function(){var rect=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];Scale.prototype={init:function(editor){var me=this;me.editor=editor;me.startPos=this.prePos={x:0,y:0};me.dragId=-1;var hands=[],cover=me.cover=document.createElement(\"div\"),resizer=me.resizer=document.createElement(\"div\");cover.id=me.editor.ui.id+\"_imagescale_cover\";cover.style.cssText=\"position:absolute;display:none;z-index:\"+me.editor.options.zIndex+\";filter:alpha(opacity=0); opacity:0;background:#CCC;\";domUtils.on(cover,\"mousedown\",function(e){me.hide()});for(var i=0;i<8;i++){hands.push('<span class=\"edui-editor-imagescale-hand'+i+'\"></span>')}resizer.id=me.editor.ui.id+\"_imagescale\";resizer.className=\"edui-editor-imagescale\";resizer.innerHTML=hands.join(\"\");resizer.style.cssText+=\";display:none;border:1px solid #3b77ff;z-index:\"+me.editor.options.zIndex+\";\";me.editor.ui.getDom().appendChild(cover);me.editor.ui.getDom().appendChild(resizer);me.initStyle();me.initEvents()},initStyle:function(){utils.cssRule(\"imagescale\",\".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}\"+\".edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}\"+\".edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\")},initEvents:function(){var me=this;me.startPos.x=me.startPos.y=0;me.isDraging=false},_eventHandler:function(e){var me=this;switch(e.type){case\"mousedown\":var hand=e.target||e.srcElement,hand;if(hand.className.indexOf(\"edui-editor-imagescale-hand\")!==-1&&me.dragId===-1){me.dragId=hand.className.slice(-1);me.startPos.x=me.prePos.x=e.clientX;me.startPos.y=me.prePos.y=e.clientY;domUtils.on(me.doc,\"mousemove\",me.proxy(me._eventHandler,me))}break;case\"mousemove\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.prePos.x=e.clientX;me.prePos.y=e.clientY;elementUpdated=true;me.updateTargetElement()}break;case\"mouseup\":if(me.dragId!==-1){me.updateContainerStyle(me.dragId,{x:e.clientX-me.prePos.x,y:e.clientY-me.prePos.y});me.updateTargetElement();if(me.target.parentNode){me.attachTo(me.target)}me.dragId=-1}domUtils.un(me.doc,\"mousemove\",me.proxy(me._eventHandler,me));if(elementUpdated){elementUpdated=false;me.editor.fireEvent(\"contentchange\")}break;default:break}},updateTargetElement:function(){var me=this;domUtils.setStyles(me.target,{width:me.resizer.style.width,height:me.resizer.style.height});me.target.width=parseInt(me.resizer.style.width);me.target.height=parseInt(me.resizer.style.height);me.attachTo(me.target)},updateContainerStyle:function(dir,offset){var me=this,dom=me.resizer,tmp;if(rect[dir][0]!=0){tmp=parseInt(dom.style.left)+offset.x;dom.style.left=me._validScaledProp(\"left\",tmp)+\"px\"}if(rect[dir][1]!=0){tmp=parseInt(dom.style.top)+offset.y;dom.style.top=me._validScaledProp(\"top\",tmp)+\"px\"}if(rect[dir][2]!=0){tmp=dom.clientWidth+rect[dir][2]*offset.x;dom.style.width=me._validScaledProp(\"width\",tmp)+\"px\"}if(rect[dir][3]!=0){tmp=dom.clientHeight+rect[dir][3]*offset.y;dom.style.height=me._validScaledProp(\"height\",tmp)+\"px\"}},_validScaledProp:function(prop,value){var ele=this.resizer,wrap=document;value=isNaN(value)?0:value;switch(prop){case\"left\":return value<0?0:value+ele.clientWidth>wrap.clientWidth?wrap.clientWidth-ele.clientWidth:value;case\"top\":return value<0?0:value+ele.clientHeight>wrap.clientHeight?wrap.clientHeight-ele.clientHeight:value;case\"width\":return value<=0?1:value+ele.offsetLeft>wrap.clientWidth?wrap.clientWidth-ele.offsetLeft:value;case\"height\":return value<=0?1:value+ele.offsetTop>wrap.clientHeight?wrap.clientHeight-ele.offsetTop:value}},hideCover:function(){this.cover.style.display=\"none\"},showCover:function(){var me=this,editorPos=domUtils.getXY(me.editor.ui.getDom()),iframePos=domUtils.getXY(me.editor.iframe);domUtils.setStyles(me.cover,{width:me.editor.iframe.offsetWidth+\"px\",height:me.editor.iframe.offsetHeight+\"px\",top:iframePos.y-editorPos.y+\"px\",left:iframePos.x-editorPos.x+\"px\",position:\"absolute\",display:\"\"})},show:function(targetObj){var me=this;me.resizer.style.display=\"block\";if(targetObj){me.attachTo(targetObj)}domUtils.on(this.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.on(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.showCover();me.editor.fireEvent(\"afterscaleshow\",me);me.editor.fireEvent(\"saveScene\")},hide:function(){var me=this;me.hideCover();me.resizer.style.display=\"none\";domUtils.un(me.resizer,\"mousedown\",me.proxy(me._eventHandler,me));domUtils.un(me.doc,\"mouseup\",me.proxy(me._eventHandler,me));me.editor.fireEvent(\"afterscalehide\",me)},proxy:function(fn,context){return function(e){return fn.apply(context||this,arguments)}},attachTo:function(targetObj){var me=this,target=me.target=targetObj,resizer=this.resizer,imgPos=domUtils.getXY(target),iframePos=domUtils.getXY(me.editor.iframe),editorPos=domUtils.getXY(resizer.parentNode);domUtils.setStyles(resizer,{width:target.width+\"px\",height:target.height+\"px\",left:iframePos.x+imgPos.x-me.editor.getScrollLeft()-editorPos.x-parseInt(resizer.style.borderLeftWidth)+\"px\",top:iframePos.y+imgPos.y-me.editor.getScrollTop()-editorPos.y-parseInt(resizer.style.borderTopWidth)+\"px\"})}}})();return function(){var me=this,imageScale;me.setOpt(\"imageScaleEnabled\",true);if(!browser.ie&&me.options.imageScaleEnabled){me.addListener(\"click\",function(type,e){var range=me.selection.getRange(),img=range.getClosedNode();if(img&&img.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"&&img===e.target){if(img.getAttribute(\"anchorname\")||domUtils.hasClass(img,\"uep-loading\")||domUtils.hasClass(img,\"uep-loading-error\")){return}if(!imageScale){imageScale=new Scale;imageScale.init(me);me.ui.getDom().appendChild(imageScale.resizer);var _keyDownHandler=function(e){imageScale.hide();if(imageScale.target){me.selection.getRange().selectNode(imageScale.target).select()}},_mouseDownHandler=function(e){var ele=e.target||e.srcElement;if(ele&&(ele.className===undefined||ele.className.indexOf(\"edui-editor-imagescale\")===-1)){_keyDownHandler(e)}},timer;me.addListener(\"afterscaleshow\",function(e){me.addListener(\"beforekeydown\",_keyDownHandler);me.addListener(\"beforemousedown\",_mouseDownHandler);domUtils.on(document,\"keydown\",_keyDownHandler);domUtils.on(document,\"mousedown\",_mouseDownHandler);me.selection.getNative().removeAllRanges()});me.addListener(\"afterscalehide\",function(e){me.removeListener(\"beforekeydown\",_keyDownHandler);me.removeListener(\"beforemousedown\",_mouseDownHandler);domUtils.un(document,\"keydown\",_keyDownHandler);domUtils.un(document,\"mousedown\",_mouseDownHandler);var target=imageScale.target;if(target.parentNode){me.selection.getRange().selectNode(target).select()}});domUtils.on(imageScale.resizer,\"mousedown\",function(e){me.selection.getNative().removeAllRanges();var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){timer=setTimeout(function(){imageScale.hide();if(imageScale.target)me.selection.getRange().selectNode(ele).select()},200)}});domUtils.on(imageScale.resizer,\"mouseup\",function(e){var ele=e.target||e.srcElement;if(ele&&ele.className.indexOf(\"edui-editor-imagescale-hand\")===-1){clearTimeout(timer)}})}imageScale.show(img)}else{if(imageScale&&imageScale.resizer.style.display!==\"none\"){imageScale.hide()}}})}if(browser.webkit){me.addListener(\"click\",function(type,e){if(e.target.tagName===\"IMG\"&&me.body.contentEditable!==\"false\"){var range=new dom.Range(me.document);range.selectNode(e.target).select()}})}}}();UE.plugin.register(\"autolink\",function(){var cont=0;return!browser.ie?{bindEvents:{reset:function(){cont=0},keydown:function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var sel=me.selection.getNative(),range=sel.getRangeAt(0).cloneRange(),offset,charCode;var start=range.startContainer;while(start.nodeType==1&&range.startOffset>0){start=range.startContainer.childNodes[range.startOffset-1];if(!start){break}range.setStart(start,start.nodeType==1?start.childNodes.length:start.nodeValue.length);range.collapse(true);start=range.startContainer}do{if(range.startOffset==0){start=range.startContainer.previousSibling;while(start&&start.nodeType==1){start=start.lastChild}if(!start||domUtils.isFillChar(start)){break}offset=start.nodeValue.length}else{start=range.startContainer;offset=range.startOffset}range.setStart(start,offset-1);charCode=range.toString().charCodeAt(0)}while(charCode!=160&&charCode!=32);if(range.toString().replace(new RegExp(domUtils.fillChar,\"g\"),\"\").match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)){while(range.toString().length){if(/^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(range.toString())){break}try{range.setStart(range.startContainer,range.startOffset+1)}catch(e){var start=range.startContainer;while(!(next=start.nextSibling)){if(domUtils.isBody(start)){return}start=start.parentNode}range.setStart(next,0)}}if(domUtils.findParentByTagName(range.startContainer,\"a\",true)){return}var a=me.document.createElement(\"a\"),text=me.document.createTextNode(\" \"),href;me.undoManger&&me.undoManger.save();a.appendChild(range.extractContents());a.href=a.innerHTML=a.innerHTML.replace(/<[^>]+>/g,\"\");href=a.getAttribute(\"href\").replace(new RegExp(domUtils.fillChar,\"g\"),\"\");href=/^(?:https?:\\/\\/)/gi.test(href)?href:\"http://\"+href;a.setAttribute(\"_src\",utils.html(href));a.href=utils.html(href);range.insertNode(a);a.parentNode.insertBefore(text,a.nextSibling);range.setStart(text,0);range.collapse(true);sel.removeAllRanges();sel.addRange(range);me.undoManger&&me.undoManger.save()}}}}}:{}},function(){var keyCodes={37:1,38:1,39:1,40:1,13:1,32:1};function checkIsCludeLink(node){if(node.nodeType==3){return null}if(node.nodeName==\"A\"){return node}var lastChild=node.lastChild;while(lastChild){if(lastChild.nodeName==\"A\"){return lastChild}if(lastChild.nodeType==3){if(domUtils.isWhitespace(lastChild)){lastChild=lastChild.previousSibling;continue}return null}lastChild=lastChild.lastChild}}browser.ie&&this.addListener(\"keyup\",function(cmd,evt){var me=this,keyCode=evt.keyCode;if(keyCodes[keyCode]){var rng=me.selection.getRange();var start=rng.startContainer;if(keyCode==13){while(start&&!domUtils.isBody(start)&&!domUtils.isBlockElm(start)){start=start.parentNode}if(start&&!domUtils.isBody(start)&&start.nodeName==\"P\"){var pre=start.previousSibling;if(pre&&pre.nodeType==1){var pre=checkIsCludeLink(pre);if(pre&&!pre.getAttribute(\"_href\")){domUtils.remove(pre,true)}}}}else if(keyCode==32){if(start.nodeType==3&&/^\\s$/.test(start.nodeValue)){start=start.previousSibling;if(start&&start.nodeName==\"A\"&&!start.getAttribute(\"_href\")){domUtils.remove(start,true)}}}else{start=domUtils.findParentByTagName(start,\"a\",true);if(start&&!start.getAttribute(\"_href\")){var bk=rng.createBookmark();domUtils.remove(start,true);rng.moveToBookmark(bk).select(true)}}}})});UE.plugins[\"autoheight\"]=function(){var me=this;me.autoHeightEnabled=me.options.autoHeightEnabled!==false;if(!me.autoHeightEnabled){return}var bakOverflow,lastHeight=0,options=me.options,currentHeight,timer;function adjustHeight(){var me=this;clearTimeout(timer);if(isFullscreen)return;if(!me.queryCommandState||me.queryCommandState&&me.queryCommandState(\"source\")!=1){timer=setTimeout(function(){var node=me.body.lastChild;while(node&&node.nodeType!=1){node=node.previousSibling}if(node&&node.nodeType==1){node.style.clear=\"both\";currentHeight=Math.max(domUtils.getXY(node).y+node.offsetHeight+25,Math.max(options.minFrameHeight,options.initialFrameHeight));if(currentHeight!==lastHeight){me.iframe.parentNode.style.transition=\"width 0.3s, height 0.3s, easy-in-out\";if(currentHeight!==parseInt(me.iframe.parentNode.style.height)){me.iframe.parentNode.style.height=currentHeight+\"px\"}me.body.style.height=currentHeight+\"px\";lastHeight=currentHeight}domUtils.removeStyle(node,\"clear\")}},50)}}var isFullscreen;me.addListener(\"fullscreenchanged\",function(cmd,f){isFullscreen=f});me.addListener(\"destroy\",function(){domUtils.un(me.window,\"scroll\",fixedScrollTop);me.removeListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight)});me.enableAutoHeight=function(){var me=this;if(!me.autoHeightEnabled){return}var doc=me.document;me.autoHeightEnabled=true;bakOverflow=doc.body.style.overflowY;doc.body.style.overflowY=\"hidden\";me.addListener(\"contentchange afterinserthtml keyup mouseup\",adjustHeight);setTimeout(function(){adjustHeight.call(me)},browser.gecko?100:0);me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.disableAutoHeight=function(){me.body.style.overflowY=bakOverflow||\"\";me.removeListener(\"contentchange\",adjustHeight);me.removeListener(\"keyup\",adjustHeight);me.removeListener(\"mouseup\",adjustHeight);me.autoHeightEnabled=false;me.fireEvent(\"autoheightchanged\",me.autoHeightEnabled)};me.on(\"setHeight\",function(){me.disableAutoHeight()});me.addListener(\"ready\",function(){me.enableAutoHeight();var timer;domUtils.on(browser.ie?me.body:me.document,browser.webkit?\"dragover\":\"drop\",function(){clearTimeout(timer);timer=setTimeout(function(){adjustHeight.call(me)},100)});domUtils.on(me.window,\"scroll\",fixedScrollTop)});var lastScrollY;function fixedScrollTop(){if(!me.window)return;if(lastScrollY===null){lastScrollY=me.window.scrollY}else if(me.window.scrollY==0&&lastScrollY!=0){me.window.scrollTo(0,0);lastScrollY=null}}};UE.plugins[\"autofloat\"]=function(){var me=this,lang=me.getLang();me.setOpt({topOffset:0});var optsAutoFloatEnabled=me.options.autoFloatEnabled!==false,topOffset=me.options.topOffset;if(!optsAutoFloatEnabled){return}var uiUtils=UE.ui.uiUtils,LteIE6=browser.ie&&browser.version<=6,quirks=browser.quirks;function checkHasUI(){if(!UE.ui){alert(lang.autofloatMsg);return 0}return 1}function fixIE6FixedPos(){var docStyle=document.body.style;docStyle.backgroundImage='url(\"about:blank\")';docStyle.backgroundAttachment=\"fixed\"}var bakCssText,placeHolder=document.createElement(\"div\"),toolbarBox,orgTop,getPosition,flag=true;function setFloating(){var toobarBoxPos=domUtils.getXY(toolbarBox),origalFloat=domUtils.getComputedStyle(toolbarBox,\"position\"),origalLeft=domUtils.getComputedStyle(toolbarBox,\"left\");toolbarBox.style.width=toolbarBox.offsetWidth+\"px\";toolbarBox.style.zIndex=me.options.zIndex*1+1;toolbarBox.parentNode.insertBefore(placeHolder,toolbarBox);if(LteIE6||quirks&&browser.ie){if(toolbarBox.style.position!=\"absolute\"){toolbarBox.style.position=\"absolute\"}toolbarBox.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-orgTop+topOffset+\"px\"}else{if(browser.ie7Compat&&flag){flag=false;toolbarBox.style.left=domUtils.getXY(toolbarBox).x-document.documentElement.getBoundingClientRect().left+2+\"px\"}if(toolbarBox.style.position!=\"fixed\"){toolbarBox.style.position=\"fixed\";toolbarBox.style.top=topOffset+\"px\";(origalFloat==\"absolute\"||origalFloat==\"relative\")&&parseFloat(origalLeft)&&(toolbarBox.style.left=toobarBoxPos.x+\"px\")}}}function unsetFloating(){flag=true;if(placeHolder.parentNode){placeHolder.parentNode.removeChild(placeHolder)}toolbarBox.style.cssText=bakCssText}me.unsetFloating=unsetFloating;function updateFloating(){var rect3=getPosition(me.container);var offset=me.options.toolbarTopOffset||0;if(rect3.top<0&&rect3.bottom-toolbarBox.offsetHeight>offset){setFloating()}else{unsetFloating()}}var defer_updateFloating=utils.defer(function(){updateFloating()},browser.ie?200:100,true);me.addListener(\"destroy\",function(){domUtils.un(window,[\"scroll\",\"resize\"],updateFloating);me.removeListener(\"keydown\",defer_updateFloating)});me.addListener(\"ready\",function(){if(checkHasUI(me)){if(!me.ui){return}getPosition=uiUtils.getClientRect;toolbarBox=me.ui.getDom(\"toolbarbox\");orgTop=getPosition(toolbarBox).top;bakCssText=toolbarBox.style.cssText;placeHolder.style.height=toolbarBox.offsetHeight+\"px\";if(LteIE6){fixIE6FixedPos()}domUtils.on(window,[\"scroll\",\"resize\"],updateFloating);me.addListener(\"keydown\",defer_updateFloating);me.addListener(\"beforefullscreenchange\",function(t,enabled){if(enabled){unsetFloating()}});me.addListener(\"fullscreenchanged\",function(t,enabled){if(!enabled){updateFloating()}});me.addListener(\"sourcemodechanged\",function(t,enabled){setTimeout(function(){updateFloating()},0)});me.addListener(\"clearDoc\",function(){setTimeout(function(){updateFloating()},0)})}})};UE.plugins[\"video\"]=function(){var me=this;function creatInsertStr(url,width,height,id,align,classname,type){var str;switch(type){case\"iframe\":str='<iframe class=\"'+classname+'\" '+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+\" frameborder=0 allowfullscreen>\";break;case\"image\":str=\"<img \"+(id?'id=\"'+id+'\"':\"\")+' width=\"'+width+'\" height=\"'+height+'\" _url=\"'+url+'\" class=\"'+'\"'+' src=\"'+me.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif\" style=\"background:url('+me.options.UEDITOR_HOME_URL+\"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\"+(align?\"float:\"+align+\";\":\"\")+'\" />';break;case\"embed\":str='<embed type=\"application/x-shockwave-flash\" class=\"'+classname+'\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"'+' src=\"'+utils.html(url)+'\" width=\"'+width+'\" height=\"'+height+'\"'+(align?' style=\"float:'+align+'\"':\"\")+' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';break;case\"video\":var ext=url.substr(url.lastIndexOf(\".\")+1);if(ext==\"ogv\")ext=\"ogg\";str=\"<video\"+(id?' id=\"'+id+'\"':\"\")+' class=\"'+classname+'\" '+(align?' style=\"float:'+align+'\"':\"\")+' controls preload=\"none\" width=\"'+width+'\" height=\"'+height+'\" src=\"'+url+'\" data-setup=\"{}\">'+'<source src=\"'+url+'\" type=\"video/'+ext+'\" /></video>';break}return str}function switchImgAndVideo(root,img2video){utils.each(root.getNodesByTagName(img2video?\"img\":\"embed video\"),function(node){var className=node.getAttr(\"class\");if(className&&className.indexOf(\"edui-faked-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"embed\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}if(className&&className.indexOf(\"edui-upload-video\")!=-1){var html=creatInsertStr(img2video?node.getAttr(\"_url\"):node.getAttr(\"src\"),node.getAttr(\"width\"),node.getAttr(\"height\"),null,node.getStyle(\"float\")||\"\",className,img2video?\"video\":\"image\");node.parentNode.replaceChild(UE.uNode.createElement(html),node)}})}me.addOutputRule(function(root){switchImgAndVideo(root,true)});me.addInputRule(function(root){switchImgAndVideo(root)});me.commands[\"insertvideo\"]={execCommand:function(cmd,videoObjs,type){videoObjs=utils.isArray(videoObjs)?videoObjs:[videoObjs];if(me.fireEvent(\"beforeinsertvideo\",videoObjs)===true){return}var html=[],id=\"tmpVideo\",cl;for(var i=0,vi,len=videoObjs.length;i<len;i++){vi=videoObjs[i];var videoType=\"iframe\";if(vi.url.match(/.mp4$/)){videoType=\"video\"}cl=videoType==\"iframe\"?\"edui-video-iframe\":\"edui-video-video\";html.push(creatInsertStr(vi.url,vi.width||420,vi.height||280,id+i,null,cl,videoType))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertvideo\",videoObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-video-iframe\"||img.className.indexOf(\"edui-video-iframe\")!=-1||img.className==\"edui-video-video\"||img.className.indexOf(\"edui-video-video\")!=-1);return flag?1:0}}};UE.plugins[\"audio\"]=function(){var me=this;function createAudioHtml(url,param){param=param||{};var str=[\"<audio\",param.id?' id=\"'+param.id+'\"':\"\",param.cls?' class=\"'+param.cls+'\"':\"\",\" controls >\",'<source src=\"'+url+'\" type=\"audio/mpeg'+'\" />',\"</audio>\"];return str.join(\"\")}function switchImgAndAudio(root,img2audio){}me.addOutputRule(function(root){switchImgAndAudio(root,true)});me.addInputRule(function(root){switchImgAndAudio(root)});me.commands[\"insertaudio\"]={execCommand:function(cmd,audioObjs,type){audioObjs=utils.isArray(audioObjs)?audioObjs:[audioObjs];if(me.fireEvent(\"beforeinsertaudio\",audioObjs)===true){return}var html=[];for(var i=0,vi,len=audioObjs.length;i<len;i++){vi=audioObjs[i];html.push(createAudioHtml(vi.url,{cls:\"edui-audio-audio\"}))}me.execCommand(\"inserthtml\",html.join(\"\"),true);var rng=this.selection.getRange();me.fireEvent(\"afterinsertaudio\",audioObjs)},queryCommandState:function(){var img=me.selection.getRange().getClosedNode(),flag=img&&(img.className==\"edui-audio-audio\"||img.className.indexOf(\"edui-audio-audio\")!=-1);return flag?1:0}}};(function(){var UETable=UE.UETable=function(table){this.table=table;this.indexTable=[];this.selectedTds=[];this.cellsRange={};this.update(table)};UETable.removeSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.removeClasses(cell,\"selectTdClass\")})};UETable.addSelectedClass=function(cells){utils.each(cells,function(cell){domUtils.addClass(cell,\"selectTdClass\")})};UETable.isEmptyBlock=function(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var i in dtd.$isNotEmpty)if(dtd.$isNotEmpty.hasOwnProperty(i)){if(node.getElementsByTagName(i).length){return 0}}return 1};UETable.getWidth=function(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)};UETable.getTableCellAlignState=function(cells){!utils.isArray(cells)&&(cells=[cells]);var result={},status=[\"align\",\"valign\"],tempStatus=null,isSame=true;utils.each(cells,function(cellNode){utils.each(status,function(currentState){tempStatus=cellNode.getAttribute(currentState);if(!result[currentState]&&tempStatus){result[currentState]=tempStatus}else if(!result[currentState]||tempStatus!==result[currentState]){isSame=false;return false}});return isSame});return isSame?result:null};UETable.getTableItemsByRange=function(editor){var start=editor.selection.getStart();if(start&&start.id&&start.id.indexOf(\"_baidu_bookmark_start_\")===0&&start.nextSibling){start=start.nextSibling}var cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\"],true),tr=cell&&cell.parentNode,table=tr&&domUtils.findParentByTagName(tr,[\"table\"]),caption=table&&table.getElementsByTagName(\"caption\")[0];return{cell:cell,tr:tr,table:table,caption:caption}};UETable.getUETableBySelected=function(editor){var table=UETable.getTableItemsByRange(editor).table;if(table&&table.ueTable&&table.ueTable.selectedTds.length){return table.ueTable}return null};UETable.getDefaultValue=function(editor,table){var borderMap={thin:\"0px\",medium:\"1px\",thick:\"2px\"},tableBorder,tdPadding,tdBorder,tmpValue;if(!table){table=editor.document.createElement(\"table\");table.insertRow(0).insertCell(0).innerHTML=\"xxx\";editor.body.appendChild(table);var td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);domUtils.remove(table);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}else{td=table.getElementsByTagName(\"td\")[0];tmpValue=domUtils.getComputedStyle(table,\"border-left-width\");tableBorder=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"padding-left\");tdPadding=parseInt(borderMap[tmpValue]||tmpValue,10);tmpValue=domUtils.getComputedStyle(td,\"border-left-width\");tdBorder=parseInt(borderMap[tmpValue]||tmpValue,10);return{tableBorder:tableBorder,tdPadding:tdPadding,tdBorder:tdBorder}}};UETable.getUETable=function(tdOrTable){var tag=tdOrTable.tagName.toLowerCase();tdOrTable=tag==\"td\"||tag==\"th\"||tag==\"caption\"?domUtils.findParentByTagName(tdOrTable,\"table\",true):tdOrTable;if(!tdOrTable.ueTable){tdOrTable.ueTable=new UETable(tdOrTable)}return tdOrTable.ueTable};UETable.cloneCell=function(cell,ignoreMerge,keepPro){if(!cell||utils.isString(cell)){return this.table.ownerDocument.createElement(cell||\"td\")}var flag=domUtils.hasClass(cell,\"selectTdClass\");flag&&domUtils.removeClasses(cell,\"selectTdClass\");var tmpCell=cell.cloneNode(true);if(ignoreMerge){tmpCell.rowSpan=tmpCell.colSpan=1}!keepPro&&domUtils.removeAttributes(tmpCell,\"width height\");!keepPro&&domUtils.removeAttributes(tmpCell,\"style\");tmpCell.style.borderLeftStyle=\"\";tmpCell.style.borderTopStyle=\"\";tmpCell.style.borderLeftColor=cell.style.borderRightColor;tmpCell.style.borderLeftWidth=cell.style.borderRightWidth;tmpCell.style.borderTopColor=cell.style.borderBottomColor;tmpCell.style.borderTopWidth=cell.style.borderBottomWidth;flag&&domUtils.addClass(cell,\"selectTdClass\");return tmpCell};UETable.prototype={getMaxRows:function(){var rows=this.table.rows,maxLen=1;for(var i=0,row;row=rows[i];i++){var currentMax=1;for(var j=0,cj;cj=row.cells[j++];){currentMax=Math.max(cj.rowSpan||1,currentMax)}maxLen=Math.max(currentMax+i,maxLen)}return maxLen},getMaxCols:function(){var rows=this.table.rows,maxLen=0,cellRows={};for(var i=0,row;row=rows[i];i++){var cellsNum=0;for(var j=0,cj;cj=row.cells[j++];){cellsNum+=cj.colSpan||1;if(cj.rowSpan&&cj.rowSpan>1){for(var k=1;k<cj.rowSpan;k++){if(!cellRows[\"row_\"+(i+k)]){cellRows[\"row_\"+(i+k)]=cj.colSpan||1}else{cellRows[\"row_\"+(i+k)]++}}}}cellsNum+=cellRows[\"row_\"+i]||0;maxLen=Math.max(cellsNum,maxLen)}return maxLen},getCellColIndex:function(cell){},getHSideCell:function(cell,right){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!right&&(!len?!cellInfo.colIndex:!range.beginColIndex)||right&&(!len?cellInfo.colIndex==this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!len?cellInfo.rowIndex:range.beginRowIndex;previewColIndex=!right?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex+1:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},getTabNextCell:function(cell,preRowIndex){var cellInfo=this.getCellInfo(cell),rowIndex=preRowIndex||cellInfo.rowIndex,colIndex=cellInfo.colIndex+1+(cellInfo.colSpan-1),nextCell;try{nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){try{rowIndex=rowIndex*1+1;colIndex=0;nextCell=this.getCell(this.indexTable[rowIndex][colIndex].rowIndex,this.indexTable[rowIndex][colIndex].cellIndex)}catch(e){}}return nextCell},getVSideCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getSameEndPosCells:function(cell,xOrY){try{var flag=xOrY.toLowerCase()===\"x\",end=domUtils.getXY(cell)[flag?\"x\":\"y\"]+cell[\"offset\"+(flag?\"Width\":\"Height\")],rows=this.table.rows,cells=null,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpEnd=domUtils.getXY(tmpCell)[flag?\"x\":\"y\"]+tmpCell[\"offset\"+(flag?\"Width\":\"Height\")];if(tmpEnd>end&&flag)break;if(cell==tmpCell||end==tmpEnd){if(tmpCell[flag?\"colSpan\":\"rowSpan\"]==1){returns.push(tmpCell)}if(flag)break}}}return returns}catch(e){showError(e)}},setCellContent:function(cell,content){cell.innerHTML=content||(browser.ie?domUtils.fillChar:\"<br />\")},cloneCell:UETable.cloneCell,getSameStartPosXCells:function(cell){try{var start=domUtils.getXY(cell).x+cell.offsetWidth,rows=this.table.rows,cells,returns=[];for(var i=0;i<this.rowsNum;i++){cells=rows[i].cells;for(var j=0,tmpCell;tmpCell=cells[j++];){var tmpStart=domUtils.getXY(tmpCell).x;if(tmpStart>start)break;if(tmpStart==start&&tmpCell.colSpan==1){returns.push(tmpCell);break}}}return returns}catch(e){showError(e)}},update:function(table){this.table=table||this.table;this.selectedTds=[];this.cellsRange={};this.indexTable=[];var rows=this.table.rows,rowsNum=this.getMaxRows(),dNum=rowsNum-rows.length,colsNum=this.getMaxCols();while(dNum--){this.table.insertRow(rows.length)}this.rowsNum=rowsNum;this.colsNum=colsNum;for(var i=0,len=rows.length;i<len;i++){this.indexTable[i]=new Array(colsNum)}for(var rowIndex=0,row;row=rows[rowIndex];rowIndex++){for(var cellIndex=0,cell,cells=row.cells;cell=cells[cellIndex];cellIndex++){if(cell.rowSpan>rowsNum){cell.rowSpan=rowsNum}var colIndex=cellIndex,rowSpan=cell.rowSpan||1,colSpan=cell.colSpan||1;while(this.indexTable[rowIndex][colIndex])colIndex++;for(var j=0;j<rowSpan;j++){for(var k=0;k<colSpan;k++){this.indexTable[rowIndex+j][colIndex+k]={rowIndex:rowIndex,cellIndex:cellIndex,colIndex:colIndex,rowSpan:rowSpan,colSpan:colSpan}}}}}for(j=0;j<rowsNum;j++){for(k=0;k<colsNum;k++){if(this.indexTable[j][k]===undefined){row=rows[j];cell=row.cells[row.cells.length-1];cell=cell?cell.cloneNode(true):this.table.ownerDocument.createElement(\"td\");this.setCellContent(cell);if(cell.colSpan!==1)cell.colSpan=1;if(cell.rowSpan!==1)cell.rowSpan=1;row.appendChild(cell);this.indexTable[j][k]={rowIndex:j,cellIndex:cell.cellIndex,colIndex:k,rowSpan:1,colSpan:1}}}}var tds=domUtils.getElementsByTagName(this.table,\"td\"),selectTds=[];utils.each(tds,function(td){if(domUtils.hasClass(td,\"selectTdClass\")){selectTds.push(td)}});if(selectTds.length){var start=selectTds[0],end=selectTds[selectTds.length-1],startInfo=this.getCellInfo(start),endInfo=this.getCellInfo(end);this.selectedTds=selectTds;this.cellsRange={beginRowIndex:startInfo.rowIndex,beginColIndex:startInfo.colIndex,endRowIndex:endInfo.rowIndex+endInfo.rowSpan-1,endColIndex:endInfo.colIndex+endInfo.colSpan-1}}if(!domUtils.hasClass(this.table.rows[0],\"firstRow\")){domUtils.addClass(this.table.rows[0],\"firstRow\");for(var i=1;i<this.table.rows.length;i++){domUtils.removeClasses(this.table.rows[i],\"firstRow\")}}},getCellInfo:function(cell){if(!cell)return;var cellIndex=cell.cellIndex,rowIndex=cell.parentNode.rowIndex,rowInfo=this.indexTable[rowIndex],numCols=this.colsNum;for(var colIndex=cellIndex;colIndex<numCols;colIndex++){var cellInfo=rowInfo[colIndex];if(cellInfo.rowIndex===rowIndex&&cellInfo.cellIndex===cellIndex){return cellInfo}}},getCell:function(rowIndex,cellIndex){return rowIndex<this.rowsNum&&this.table.rows[rowIndex].cells[cellIndex]||null},deleteCell:function(cell,rowIndex){rowIndex=typeof rowIndex==\"number\"?rowIndex:cell.parentNode.rowIndex;var row=this.table.rows[rowIndex];row.deleteCell(cell.cellIndex)},getCellsRange:function(cellA,cellB){function checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex){var tmpBeginRowIndex=beginRowIndex,tmpBeginColIndex=beginColIndex,tmpEndRowIndex=endRowIndex,tmpEndColIndex=endColIndex,cellInfo,colIndex,rowIndex;if(beginRowIndex>0){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[beginRowIndex][colIndex];rowIndex=cellInfo.rowIndex;if(rowIndex<beginRowIndex){tmpBeginRowIndex=Math.min(rowIndex,tmpBeginRowIndex)}}}if(endColIndex<me.colsNum){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][endColIndex];colIndex=cellInfo.colIndex+cellInfo.colSpan-1;if(colIndex>endColIndex){tmpEndColIndex=Math.max(colIndex,tmpEndColIndex)}}}if(endRowIndex<me.rowsNum){for(colIndex=beginColIndex;colIndex<endColIndex;colIndex++){cellInfo=me.indexTable[endRowIndex][colIndex];rowIndex=cellInfo.rowIndex+cellInfo.rowSpan-1;if(rowIndex>endRowIndex){tmpEndRowIndex=Math.max(rowIndex,tmpEndRowIndex)}}}if(beginColIndex>0){for(rowIndex=beginRowIndex;rowIndex<endRowIndex;rowIndex++){cellInfo=me.indexTable[rowIndex][beginColIndex];colIndex=cellInfo.colIndex;if(colIndex<beginColIndex){tmpBeginColIndex=Math.min(cellInfo.colIndex,tmpBeginColIndex)}}}if(tmpBeginRowIndex!=beginRowIndex||tmpBeginColIndex!=beginColIndex||tmpEndRowIndex!=endRowIndex||tmpEndColIndex!=endColIndex){return checkRange(tmpBeginRowIndex,tmpBeginColIndex,tmpEndRowIndex,tmpEndColIndex)}else{return{beginRowIndex:beginRowIndex,beginColIndex:beginColIndex,endRowIndex:endRowIndex,endColIndex:endColIndex}}}try{var me=this,cellAInfo=me.getCellInfo(cellA);if(cellA===cellB){return{beginRowIndex:cellAInfo.rowIndex,beginColIndex:cellAInfo.colIndex,endRowIndex:cellAInfo.rowIndex+cellAInfo.rowSpan-1,endColIndex:cellAInfo.colIndex+cellAInfo.colSpan-1}}var cellBInfo=me.getCellInfo(cellB);var beginRowIndex=Math.min(cellAInfo.rowIndex,cellBInfo.rowIndex),beginColIndex=Math.min(cellAInfo.colIndex,cellBInfo.colIndex),endRowIndex=Math.max(cellAInfo.rowIndex+cellAInfo.rowSpan-1,cellBInfo.rowIndex+cellBInfo.rowSpan-1),endColIndex=Math.max(cellAInfo.colIndex+cellAInfo.colSpan-1,cellBInfo.colIndex+cellBInfo.colSpan-1);return checkRange(beginRowIndex,beginColIndex,endRowIndex,endColIndex)}catch(e){}},getCells:function(range){this.clearSelected();var beginRowIndex=range.beginRowIndex,beginColIndex=range.beginColIndex,endRowIndex=range.endRowIndex,endColIndex=range.endColIndex,cellInfo,rowIndex,colIndex,tdHash={},returnTds=[];for(var i=beginRowIndex;i<=endRowIndex;i++){for(var j=beginColIndex;j<=endColIndex;j++){cellInfo=this.indexTable[i][j];rowIndex=cellInfo.rowIndex;colIndex=cellInfo.colIndex;var key=rowIndex+\"|\"+colIndex;if(tdHash[key])continue;tdHash[key]=1;if(rowIndex<i||colIndex<j||rowIndex+cellInfo.rowSpan-1>endRowIndex||colIndex+cellInfo.colSpan-1>endColIndex){return null}returnTds.push(this.getCell(rowIndex,cellInfo.cellIndex))}}return returnTds},clearSelected:function(){UETable.removeSelectedClass(this.selectedTds);this.selectedTds=[];this.cellsRange={}},setSelected:function(range){var cells=this.getCells(range);UETable.addSelectedClass(cells);this.selectedTds=cells;this.cellsRange=range},isFullRow:function(){var range=this.cellsRange;return range.endColIndex-range.beginColIndex+1==this.colsNum},isFullCol:function(){var range=this.cellsRange,table=this.table,ths=table.getElementsByTagName(\"th\"),rows=range.endRowIndex-range.beginRowIndex+1;return!ths.length?rows==this.rowsNum:rows==this.rowsNum||rows==this.rowsNum-1},getNextCell:function(cell,bottom,ignoreRange){try{var cellInfo=this.getCellInfo(cell),nextRowIndex,nextColIndex;var len=this.selectedTds.length&&!ignoreRange,range=this.cellsRange;if(!bottom&&cellInfo.rowIndex==0||bottom&&(!len?cellInfo.rowIndex+cellInfo.rowSpan>this.rowsNum-1:range.endRowIndex==this.rowsNum-1))return null;nextRowIndex=!bottom?!len?cellInfo.rowIndex-1:range.beginRowIndex-1:!len?cellInfo.rowIndex+cellInfo.rowSpan:range.endRowIndex+1;nextColIndex=!len?cellInfo.colIndex:range.beginColIndex;return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex,this.indexTable[nextRowIndex][nextColIndex].cellIndex)}catch(e){showError(e)}},getPreviewCell:function(cell,top){try{var cellInfo=this.getCellInfo(cell),previewRowIndex,previewColIndex;var len=this.selectedTds.length,range=this.cellsRange;if(!top&&(!len?!cellInfo.colIndex:!range.beginColIndex)||top&&(!len?cellInfo.rowIndex>this.colsNum-1:range.endColIndex==this.colsNum-1))return null;previewRowIndex=!top?!len?cellInfo.rowIndex:range.beginRowIndex:!len?cellInfo.rowIndex<1?0:cellInfo.rowIndex-1:range.beginRowIndex;previewColIndex=!top?!len?cellInfo.colIndex<1?0:cellInfo.colIndex-1:range.beginColIndex-1:!len?cellInfo.colIndex:range.endColIndex+1;return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex,this.indexTable[previewRowIndex][previewColIndex].cellIndex)}catch(e){showError(e)}},moveContent:function(cellTo,cellFrom){if(UETable.isEmptyBlock(cellFrom))return;if(UETable.isEmptyBlock(cellTo)){cellTo.innerHTML=cellFrom.innerHTML;return}var child=cellTo.lastChild;if(child.nodeType==3||!dtd.$block[child.tagName]){cellTo.appendChild(cellTo.ownerDocument.createElement(\"br\"))}while(child=cellFrom.firstChild){cellTo.appendChild(child)}},mergeRight:function(cell){var cellInfo=this.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan,rightCellInfo=this.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=this.getCell(rightCellInfo.rowIndex,rightCellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+rightCellInfo.colSpan;cell.removeAttribute(\"width\");this.moveContent(cell,rightCell);this.deleteCell(rightCell,rightCellInfo.rowIndex);this.update()},mergeDown:function(cell){var cellInfo=this.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan,downCellInfo=this.indexTable[downRowIndex][cellInfo.colIndex],downCell=this.getCell(downCellInfo.rowIndex,downCellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+downCellInfo.rowSpan;cell.removeAttribute(\"height\");this.moveContent(cell,downCell);this.deleteCell(downCell,downCellInfo.rowIndex);this.update()},mergeRange:function(){var range=this.cellsRange,leftTopCell=this.getCell(range.beginRowIndex,this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex);var cells=this.getCells(range);for(var i=0,ci;ci=cells[i++];){if(ci!==leftTopCell){this.moveContent(leftTopCell,ci);this.deleteCell(ci)}}leftTopCell.rowSpan=range.endRowIndex-range.beginRowIndex+1;leftTopCell.rowSpan>1&&leftTopCell.removeAttribute(\"height\");leftTopCell.colSpan=range.endColIndex-range.beginColIndex+1;leftTopCell.colSpan>1&&leftTopCell.removeAttribute(\"width\");if(leftTopCell.rowSpan==this.rowsNum&&leftTopCell.colSpan!=1){leftTopCell.colSpan=1}if(leftTopCell.colSpan==this.colsNum&&leftTopCell.rowSpan!=1){var rowIndex=leftTopCell.parentNode.rowIndex;if(this.table.deleteRow){for(var i=rowIndex+1,curIndex=rowIndex+1,len=leftTopCell.rowSpan;i<len;i++){this.table.deleteRow(curIndex)}}else{for(var i=0,len=leftTopCell.rowSpan-1;i<len;i++){var row=this.table.rows[rowIndex+1];row.parentNode.removeChild(row)}}leftTopCell.rowSpan=1}this.update()},insertRow:function(rowIndex,sourceCell){var numCols=this.colsNum,table=this.table,row=table.insertRow(rowIndex),cell,thead=null,isInsertTitle=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(colIndex,cell,tableRow){if(colIndex==0){var tr=tableRow.nextSibling||tableRow.previousSibling,th=tr.cells[colIndex];if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}if(rowIndex==0||rowIndex==this.rowsNum){for(var colIndex=0;colIndex<numCols;colIndex++){cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));row.appendChild(cell);if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}if(isInsertTitle){thead=table.createTHead();thead.insertBefore(row,thead.firstChild)}}else{var infoRow=this.indexTable[rowIndex],cellIndex=0;for(colIndex=0;colIndex<numCols;colIndex++){var cellInfo=infoRow[colIndex];if(cellInfo.rowIndex<rowIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.rowSpan=cellInfo.rowSpan+1}else{cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);row.appendChild(cell)}if(!isInsertTitle)replaceTdToTh(colIndex,cell,row)}}this.update();return row},deleteRow:function(rowIndex){var row=this.table.rows[rowIndex],infoRow=this.indexTable[rowIndex],colsNum=this.colsNum,count=0;for(var colIndex=0;colIndex<colsNum;){var cellInfo=infoRow[colIndex],cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(cell.rowSpan>1){if(cellInfo.rowIndex==rowIndex){var clone=cell.cloneNode(true);clone.rowSpan=cell.rowSpan-1;clone.innerHTML=\"\";cell.rowSpan=1;var nextRowIndex=rowIndex+1,nextRow=this.table.rows[nextRowIndex],insertCellIndex,preMerged=this.getPreviewMergedCellsNum(nextRowIndex,colIndex)-count;if(preMerged<colIndex){insertCellIndex=colIndex-preMerged-1;domUtils.insertAfter(nextRow.cells[insertCellIndex],clone)}else{if(nextRow.cells.length)nextRow.insertBefore(clone,nextRow.cells[0])}count+=1}}colIndex+=cell.colSpan||1}var deleteTds=[],cacheMap={};for(colIndex=0;colIndex<colsNum;colIndex++){var tmpRowIndex=infoRow[colIndex].rowIndex,tmpCellIndex=infoRow[colIndex].cellIndex,key=tmpRowIndex+\"_\"+tmpCellIndex;if(cacheMap[key])continue;cacheMap[key]=1;cell=this.getCell(tmpRowIndex,tmpCellIndex);deleteTds.push(cell)}var mergeTds=[];utils.each(deleteTds,function(td){if(td.rowSpan==1){td.parentNode.removeChild(td)}else{mergeTds.push(td)}});utils.each(mergeTds,function(td){td.rowSpan--});row.parentNode.removeChild(row);this.update()},insertCol:function(colIndex,sourceCell,defaultValue){var rowsNum=this.rowsNum,rowIndex=0,tableRow,cell,backWidth=parseInt((this.table.offsetWidth-(this.colsNum+1)*20-(this.colsNum+1))/(this.colsNum+1),10),isInsertTitleCol=typeof sourceCell==\"string\"&&sourceCell.toUpperCase()==\"TH\";function replaceTdToTh(rowIndex,cell,tableRow){if(rowIndex==0){var th=cell.nextSibling||cell.previousSibling;if(th.tagName==\"TH\"){th=cell.ownerDocument.createElement(\"th\");th.appendChild(cell.firstChild);tableRow.insertBefore(th,cell);domUtils.remove(cell)}}else{if(cell.tagName==\"TH\"){var td=cell.ownerDocument.createElement(\"td\");td.appendChild(cell.firstChild);tableRow.insertBefore(td,cell);domUtils.remove(cell)}}}var preCell;if(colIndex==0||colIndex==this.colsNum){for(;rowIndex<rowsNum;rowIndex++){tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[colIndex==0?colIndex:tableRow.cells.length];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));if(!colIndex){tableRow.insertBefore(cell,tableRow.cells[0])}else{domUtils.insertAfter(tableRow.cells[tableRow.cells.length-1],cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}else{for(;rowIndex<rowsNum;rowIndex++){var cellInfo=this.indexTable[rowIndex][colIndex];if(cellInfo.colIndex<colIndex){cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);cell.colSpan=cellInfo.colSpan+1}else{tableRow=this.table.rows[rowIndex];preCell=tableRow.cells[cellInfo.cellIndex];cell=this.cloneCell(sourceCell,true);this.setCellContent(cell);cell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));preCell&&cell.setAttribute(\"width\",preCell.getAttribute(\"width\"));preCell?tableRow.insertBefore(cell,preCell):tableRow.appendChild(cell)}if(!isInsertTitleCol)replaceTdToTh(rowIndex,cell,tableRow)}}this.update();this.updateWidth(backWidth,defaultValue||{tdPadding:10,tdBorder:1})},updateWidth:function(width,defaultValue){var table=this.table,tmpWidth=UETable.getWidth(table)-defaultValue.tdPadding*2-defaultValue.tdBorder+width;if(tmpWidth<table.ownerDocument.body.offsetWidth){table.setAttribute(\"width\",tmpWidth);return}var tds=domUtils.getElementsByTagName(this.table,\"td th\");utils.each(tds,function(td){td.setAttribute(\"width\",width)})},deleteCol:function(colIndex){var indexTable=this.indexTable,tableRows=this.table.rows,backTableWidth=this.table.getAttribute(\"width\"),backTdWidth=0,rowsNum=this.rowsNum,cacheMap={};for(var rowIndex=0;rowIndex<rowsNum;){var infoRow=indexTable[rowIndex],cellInfo=infoRow[colIndex],key=cellInfo.rowIndex+\"_\"+cellInfo.colIndex;if(cacheMap[key])continue;cacheMap[key]=1;var cell=this.getCell(cellInfo.rowIndex,cellInfo.cellIndex);if(!backTdWidth)backTdWidth=cell&&parseInt(cell.offsetWidth/cell.colSpan,10).toFixed(0);if(cell.colSpan>1){cell.colSpan--}else{tableRows[rowIndex].deleteCell(cellInfo.cellIndex)}rowIndex+=cellInfo.rowSpan||1}this.table.setAttribute(\"width\",backTableWidth-backTdWidth);this.update()},splitToCells:function(cell){var me=this,cells=this.splitToRows(cell);utils.each(cells,function(cell){me.splitToCols(cell)})},splitToRows:function(cell){var cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.rowSpan=1;results.push(cell);for(var i=rowIndex,endRow=rowIndex+cellInfo.rowSpan;i<endRow;i++){if(i==rowIndex)continue;var tableRow=this.table.rows[i],tmpCell=tableRow.insertCell(colIndex-this.getPreviewMergedCellsNum(i,colIndex));tmpCell.colSpan=cellInfo.colSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}results.push(tmpCell)}this.update();return results},getPreviewMergedCellsNum:function(rowIndex,colIndex){var indexRow=this.indexTable[rowIndex],num=0;for(var i=0;i<colIndex;){var colSpan=indexRow[i].colSpan,tmpRowIndex=indexRow[i].rowIndex;num+=colSpan-(tmpRowIndex==rowIndex?1:0);i+=colSpan}return num},splitToCols:function(cell){var backWidth=(cell.offsetWidth/cell.colSpan-22).toFixed(0),cellInfo=this.getCellInfo(cell),rowIndex=cellInfo.rowIndex,colIndex=cellInfo.colIndex,results=[];cell.colSpan=1;cell.setAttribute(\"width\",backWidth);results.push(cell);for(var j=colIndex,endCol=colIndex+cellInfo.colSpan;j<endCol;j++){if(j==colIndex)continue;var tableRow=this.table.rows[rowIndex],tmpCell=tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex+1);tmpCell.rowSpan=cellInfo.rowSpan;this.setCellContent(tmpCell);tmpCell.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));tmpCell.setAttribute(\"align\",cell.getAttribute(\"align\"));tmpCell.setAttribute(\"width\",backWidth);if(cell.style.cssText){tmpCell.style.cssText=cell.style.cssText}if(cell.tagName==\"TH\"){var th=cell.ownerDocument.createElement(\"th\");th.appendChild(tmpCell.firstChild);th.setAttribute(\"vAlign\",cell.getAttribute(\"vAlign\"));th.rowSpan=tmpCell.rowSpan;tableRow.insertBefore(th,tmpCell);domUtils.remove(tmpCell)}results.push(tmpCell)}this.update();return results},isLastCell:function(cell,rowsNum,colsNum){rowsNum=rowsNum||this.rowsNum;colsNum=colsNum||this.colsNum;var cellInfo=this.getCellInfo(cell);return cellInfo.rowIndex+cellInfo.rowSpan==rowsNum&&cellInfo.colIndex+cellInfo.colSpan==colsNum},getLastCell:function(cells){cells=cells||this.table.getElementsByTagName(\"td\");var firstInfo=this.getCellInfo(cells[0]);var me=this,last=cells[0],tr=last.parentNode,cellsNum=0,cols=0,rows;utils.each(cells,function(cell){if(cell.parentNode==tr)cols+=cell.colSpan||1;cellsNum+=cell.rowSpan*cell.colSpan||1});rows=cellsNum/cols;utils.each(cells,function(cell){if(me.isLastCell(cell,rows,cols)){last=cell;return false}});return last},selectRow:function(rowIndex){var indexRow=this.indexTable[rowIndex],start=this.getCell(indexRow[0].rowIndex,indexRow[0].cellIndex),end=this.getCell(indexRow[this.colsNum-1].rowIndex,indexRow[this.colsNum-1].cellIndex),range=this.getCellsRange(start,end);this.setSelected(range)},selectTable:function(){var tds=this.table.getElementsByTagName(\"td\"),range=this.getCellsRange(tds[0],tds[tds.length-1]);this.setSelected(range)},setBackground:function(cells,value){if(typeof value===\"string\"){utils.each(cells,function(cell){cell.style.backgroundColor=value})}else if(typeof value===\"object\"){value=utils.extend({repeat:true,colorList:[\"#ddd\",\"#fff\"]},value);var rowIndex=this.getCellInfo(cells[0]).rowIndex,count=0,colors=value.colorList,getColor=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0,cell;cell=cells[i++];){var cellInfo=this.getCellInfo(cell);cell.style.backgroundColor=getColor(colors,rowIndex+count==cellInfo.rowIndex?count:++count,value.repeat)}}},removeBackground:function(cells){utils.each(cells,function(cell){cell.style.backgroundColor=\"\"})}};function showError(e){}})();(function(){var UT=UE.UETable,getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)};UE.commands[\"inserttable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?-1:0},execCommand:function(cmd,opt){function createTable(opt,tdWidth){var html=[],rowsNum=opt.numRows,colsNum=opt.numCols;for(var r=0;r<rowsNum;r++){html.push(\"<tr\"+(r==0?' class=\"firstRow\"':\"\")+\">\");for(var c=0;c<colsNum;c++){html.push('<td width=\"'+tdWidth+'\"  vAlign=\"'+opt.tdvalign+'\" >'+(browser.ie&&browser.version<11?domUtils.fillChar:\"<br/>\")+\"</td>\")}html.push(\"</tr>\")}return\"<table><tbody>\"+html.join(\"\")+\"</tbody></table>\"}if(!opt){opt=utils.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign})}var me=this;var range=this.selection.getRange(),start=range.startContainer,firstParentBlock=domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)},true)||me.body;var defaultValue=getDefaultValue(me),tableWidth=firstParentBlock.offsetWidth,tdWidth=Math.floor(tableWidth/opt.numCols-defaultValue.tdPadding*2-defaultValue.tdBorder);!opt.tdvalign&&(opt.tdvalign=me.options.tdvalign);me.execCommand(\"inserthtml\",createTable(opt,tdWidth))}};UE.commands[\"insertparagraphbeforetable\"]={queryCommandState:function(){return getTableItemsByRange(this).cell?0:-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var p=this.document.createElement(\"p\");p.innerHTML=browser.ie?\"&nbsp;\":\"<br />\";table.parentNode.insertBefore(p,table);this.selection.getRange().setStart(p,0).setCursor()}}};UE.commands[\"deletetable\"]={queryCommandState:function(){var rng=this.selection.getRange();return domUtils.findParentByTagName(rng.startContainer,\"table\",true)?0:-1},execCommand:function(cmd,table){var rng=this.selection.getRange();table=table||domUtils.findParentByTagName(rng.startContainer,\"table\",true);if(table){var next=table.nextSibling;if(!next){next=domUtils.createElement(this.document,\"p\",{innerHTML:browser.ie?domUtils.fillChar:\"<br/>\"});table.parentNode.insertBefore(next,table)}domUtils.remove(table);rng=this.selection.getRange();if(next.nodeType==3){rng.setStartBefore(next)}else{rng.setStart(next,0)}rng.setCursor(false,true);this.fireEvent(\"tablehasdeleted\")}}};UE.commands[\"cellalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,align){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"align\",align)}}}};UE.commands[\"cellvalign\"]={queryCommandState:function(){return getSelectedArr(this).length?0:-1},execCommand:function(cmd,valign){var selectedTds=getSelectedArr(this);if(selectedTds.length){for(var i=0,ci;ci=selectedTds[i++];){ci.setAttribute(\"vAlign\",valign)}}}};UE.commands[\"insertcaption\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){return table.getElementsByTagName(\"caption\").length==0?1:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){var caption=this.document.createElement(\"caption\");caption.innerHTML=browser.ie?domUtils.fillChar:\"<br/>\";table.insertBefore(caption,table.firstChild);var range=this.selection.getRange();range.setStart(caption,0).setCursor()}}};UE.commands[\"deletecaption\"]={queryCommandState:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){return table.getElementsByTagName(\"caption\").length==0?-1:1}return-1},execCommand:function(){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){domUtils.remove(table.getElementsByTagName(\"caption\")[0]);var range=this.selection.getRange();range.setStart(table.rows[0].cells[0],0).setCursor()}}};UE.commands[\"inserttitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()!=\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertRow(0,\"th\")}var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitle\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var firstRow=table.rows[0];return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase()==\"th\"?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){domUtils.remove(table.rows[0])}var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"inserttitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?-1:0}return-1},execCommand:function(cmd){var table=getTableItemsByRange(this).table;if(table){getUETable(table).insertCol(0,\"th\")}resetTdWidth(table,this);var th=table.getElementsByTagName(\"th\")[0];this.selection.getRange().setStart(th,0).setCursor(false,true)}};UE.commands[\"deletetitlecol\"]={queryCommandState:function(){var table=getTableItemsByRange(this).table;if(table){var lastRow=table.rows[table.rows.length-1];return lastRow.getElementsByTagName(\"th\").length?0:-1}return-1},execCommand:function(){var table=getTableItemsByRange(this).table;if(table){for(var i=0;i<table.rows.length;i++){domUtils.remove(table.rows[i].children[0])}}resetTdWidth(table,this);var td=table.getElementsByTagName(\"td\")[0];this.selection.getRange().setStart(td,0).setCursor(false,true)}};UE.commands[\"mergeright\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),rightColIndex=cellInfo.colIndex+cellInfo.colSpan;if(rightColIndex>=ut.colsNum)return-1;var rightCellInfo=ut.indexTable[cellInfo.rowIndex][rightColIndex],rightCell=table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex];if(!rightCell||cell.tagName!=rightCell.tagName)return-1;return rightCellInfo.rowIndex==cellInfo.rowIndex&&rightCellInfo.rowSpan==cellInfo.rowSpan?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeRight(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergedown\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table,cell=tableItems.cell;if(!table||!cell)return-1;var ut=getUETable(table);if(ut.selectedTds.length)return-1;var cellInfo=ut.getCellInfo(cell),downRowIndex=cellInfo.rowIndex+cellInfo.rowSpan;if(downRowIndex>=ut.rowsNum)return-1;var downCellInfo=ut.indexTable[downRowIndex][cellInfo.colIndex],downCell=table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex];if(!downCell||cell.tagName!=downCell.tagName)return-1;return downCellInfo.colIndex==cellInfo.colIndex&&downCellInfo.colSpan==cellInfo.colSpan?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.mergeDown(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"mergecells\"]={queryCommandState:function(){return getUETableBySelected(this)?0:-1},execCommand:function(){var ut=getUETableBySelected(this);if(ut&&ut.selectedTds.length){var cell=ut.selectedTds[0];ut.mergeRange();var rng=this.selection.getRange();if(domUtils.isEmptyBlock(cell)){rng.setStart(cell,0).collapse(true)}else{rng.selectNodeContents(cell)}rng.select()}}};UE.commands[\"insertrow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&tableItems.tr!==tableItems.table.rows[0])&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.beginRowIndex,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertrownext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&cell.tagName==\"TD\"&&getUETable(tableItems.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var tableItems=getTableItemsByRange(this),cell=tableItems.cell,table=tableItems.table,ut=getUETable(table),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertRow(cellInfo.rowIndex+cellInfo.rowSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endRowIndex-range.beginRowIndex+1;i<len;i++){ut.insertRow(range.endRowIndex+1,cell)}}rng.moveToBookmark(bk).select();if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"deleterow\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellsRange=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getVSideCell(cell),nextCell=ut.getVSideCell(cell,true),rng=this.selection.getRange();if(utils.isEmptyObject(cellsRange)){ut.deleteRow(cellInfo.rowIndex)}else{for(var i=cellsRange.beginRowIndex;i<cellsRange.endRowIndex+1;i++){ut.deleteRow(cellsRange.beginRowIndex)}}var table=ut.table;if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(cellInfo.rowSpan==1||cellInfo.rowSpan==cellsRange.endRowIndex-cellsRange.beginRowIndex+1){if(nextCell||preCell)rng.selectNodeContents(nextCell||preCell).setCursor(false,true)}else{var newCell=ut.getCell(cellInfo.rowIndex,ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex);if(newCell)rng.selectNodeContents(newCell).setCursor(false,true)}}if(table.getAttribute(\"interlaced\")===\"enabled\")this.fireEvent(\"interlacetable\",table)}};UE.commands[\"insertcol\"]={queryCommandState:function(cmd){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&(cell.tagName==\"TD\"||cell.tagName==\"TH\"&&cell!==tableItems.tr.cells[0])&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(cmd){var rng=this.selection.getRange(),bk=rng.createBookmark(true);if(this.queryCommandState(cmd)==-1)return;var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.beginColIndex,cell)}}rng.moveToBookmark(bk).select(true)}};UE.commands[\"insertcolnext\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;return cell&&getUETable(tableItems.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),cellInfo=ut.getCellInfo(cell);if(!ut.selectedTds.length){ut.insertCol(cellInfo.colIndex+cellInfo.colSpan,cell)}else{var range=ut.cellsRange;for(var i=0,len=range.endColIndex-range.beginColIndex+1;i<len;i++){ut.insertCol(range.endColIndex+1,cell)}}rng.moveToBookmark(bk).select()}};UE.commands[\"deletecol\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this);return tableItems.cell?0:-1},execCommand:function(){var cell=getTableItemsByRange(this).cell,ut=getUETable(cell),range=ut.cellsRange,cellInfo=ut.getCellInfo(cell),preCell=ut.getHSideCell(cell),nextCell=ut.getHSideCell(cell,true);if(utils.isEmptyObject(range)){ut.deleteCol(cellInfo.colIndex)}else{for(var i=range.beginColIndex;i<range.endColIndex+1;i++){ut.deleteCol(range.beginColIndex)}}var table=ut.table,rng=this.selection.getRange();if(!table.getElementsByTagName(\"td\").length){var nextSibling=table.nextSibling;domUtils.remove(table);if(nextSibling){rng.setStart(nextSibling,0).setCursor(false,true)}}else{if(domUtils.inDoc(cell,this.document)){rng.setStart(cell,0).setCursor(false,true)}else{if(nextCell&&domUtils.inDoc(nextCell,this.document)){rng.selectNodeContents(nextCell).setCursor(false,true)}else{if(preCell&&domUtils.inDoc(preCell,this.document)){rng.selectNodeContents(preCell).setCursor(true,true)}}}}}};UE.commands[\"splittocells\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&(cell.colSpan>1||cell.rowSpan>1)?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCells(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittorows\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.rowSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToRows(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"splittocols\"]={queryCommandState:function(){var tableItems=getTableItemsByRange(this),cell=tableItems.cell;if(!cell)return-1;var ut=getUETable(tableItems.table);if(ut.selectedTds.length>0)return-1;return cell&&cell.colSpan>1?0:-1},execCommand:function(){var rng=this.selection.getRange(),bk=rng.createBookmark(true);var cell=getTableItemsByRange(this).cell,ut=getUETable(cell);ut.splitToCols(cell);rng.moveToBookmark(bk).select()}};UE.commands[\"adaptbytext\"]=UE.commands[\"adaptbywindow\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd){var tableItems=getTableItemsByRange(this),table=tableItems.table;if(table){if(cmd==\"adaptbywindow\"){resetTdWidth(table,this)}else{var cells=domUtils.getElementsByTagName(table,\"td th\");utils.each(cells,function(cell){cell.removeAttribute(\"width\")});table.removeAttribute(\"width\")}}}};UE.commands[\"averagedistributecol\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageWidth(){var tb=ut.table,averageWidth,sumWidth=0,colsNum=0,tbAttr=getDefaultValue(me,tb);if(ut.isFullRow()){sumWidth=tb.offsetWidth;colsNum=ut.colsNum}else{var begin=ut.cellsRange.beginColIndex,end=ut.cellsRange.endColIndex,node;for(var i=begin;i<=end;){node=ut.selectedTds[i];sumWidth+=node.offsetWidth;i+=node.colSpan;colsNum+=1}}averageWidth=Math.ceil(sumWidth/colsNum)-tbAttr.tdBorder*2-tbAttr.tdPadding*2;return averageWidth}function setAverageWidth(averageWidth){utils.each(domUtils.getElementsByTagName(ut.table,\"th\"),function(node){node.setAttribute(\"width\",\"\")});var cells=ut.isFullRow()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.colSpan==1){node.setAttribute(\"width\",averageWidth)}})}if(ut&&ut.selectedTds.length){setAverageWidth(getAverageWidth())}}};UE.commands[\"averagedistributerow\"]={queryCommandState:function(){var ut=getUETableBySelected(this);if(!ut)return-1;if(ut.selectedTds&&/th/gi.test(ut.selectedTds[0].tagName))return-1;return ut.isFullRow()||ut.isFullCol()?0:-1},execCommand:function(cmd){var me=this,ut=getUETableBySelected(me);function getAverageHeight(){var averageHeight,rowNum,sumHeight=0,tb=ut.table,tbAttr=getDefaultValue(me,tb),tdpadding=parseInt(domUtils.getComputedStyle(tb.getElementsByTagName(\"td\")[0],\"padding-top\"));if(ut.isFullCol()){var captionArr=domUtils.getElementsByTagName(tb,\"caption\"),thArr=domUtils.getElementsByTagName(tb,\"th\"),captionHeight,thHeight;if(captionArr.length>0){captionHeight=captionArr[0].offsetHeight}if(thArr.length>0){thHeight=thArr[0].offsetHeight}sumHeight=tb.offsetHeight-(captionHeight||0)-(thHeight||0);rowNum=thArr.length==0?ut.rowsNum:ut.rowsNum-1}else{var begin=ut.cellsRange.beginRowIndex,end=ut.cellsRange.endRowIndex,count=0,trs=domUtils.getElementsByTagName(tb,\"tr\");for(var i=begin;i<=end;i++){sumHeight+=trs[i].offsetHeight;count+=1}rowNum=count}if(browser.ie&&browser.version<9){averageHeight=Math.ceil(sumHeight/rowNum)}else{averageHeight=Math.ceil(sumHeight/rowNum)-tbAttr.tdBorder*2-tdpadding*2}return averageHeight}function setAverageHeight(averageHeight){var cells=ut.isFullCol()?domUtils.getElementsByTagName(ut.table,\"td\"):ut.selectedTds;utils.each(cells,function(node){if(node.rowSpan==1){node.setAttribute(\"height\",averageHeight)}})}if(ut&&ut.selectedTds.length){setAverageHeight(getAverageHeight())}}};UE.commands[\"cellalignment\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,data){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(!/caption/gi.test(cell.tagName)){domUtils.setAttributes(cell,data)}else{cell.style.textAlign=data.align;cell.style.verticalAlign=data.vAlign}me.selection.getRange().setCursor(true)}else{utils.each(ut.selectedTds,function(cell){domUtils.setAttributes(cell,data)})}},queryCommandValue:function(cmd){var activeMenuCell=getTableItemsByRange(this).cell;if(!activeMenuCell){activeMenuCell=getSelectedArr(this)[0]}if(!activeMenuCell){return null}else{var cells=UE.UETable.getUETable(activeMenuCell).selectedTds;!cells.length&&(cells=activeMenuCell);return UE.UETable.getTableCellAlignState(cells)}}};UE.commands[\"tablealignment\"]={queryCommandState:function(){if(browser.ie&&browser.version<8){return-1}return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,value){var me=this,start=me.selection.getStart(),table=start&&domUtils.findParentByTagName(start,[\"table\"],true);if(table){table.setAttribute(\"align\",value)}}};UE.commands[\"edittable\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,color){var rng=this.selection.getRange(),table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var arr=domUtils.getElementsByTagName(table,\"td\").concat(domUtils.getElementsByTagName(table,\"th\"),domUtils.getElementsByTagName(table,\"caption\"));utils.each(arr,function(node){node.style.borderColor=color})}}};UE.commands[\"edittd\"]={queryCommandState:function(){return getTableItemsByRange(this).table?0:-1},execCommand:function(cmd,bkColor){var me=this,ut=getUETableBySelected(me);if(!ut){var start=me.selection.getStart(),cell=start&&domUtils.findParentByTagName(start,[\"td\",\"th\",\"caption\"],true);if(cell){cell.style.backgroundColor=bkColor}}else{utils.each(ut.selectedTds,function(cell){cell.style.backgroundColor=bkColor})}}};UE.commands[\"settablebackground\"]={queryCommandState:function(){return getSelectedArr(this).length>1?0:-1},execCommand:function(cmd,value){var cells,ut;cells=getSelectedArr(this);ut=getUETable(cells[0]);ut.setBackground(cells,value)}};UE.commands[\"cleartablebackground\"]={queryCommandState:function(){var cells=getSelectedArr(this);if(!cells.length)return-1;for(var i=0,cell;cell=cells[i++];){if(cell.style.backgroundColor!==\"\")return 0}return-1},execCommand:function(){var cells=getSelectedArr(this),ut=getUETable(cells[0]);ut.removeBackground(cells)}};UE.commands[\"interlacetable\"]=UE.commands[\"uninterlacetable\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;var interlaced=table.getAttribute(\"interlaced\");if(cmd==\"interlacetable\"){return interlaced===\"enabled\"?-1:0}else{return!interlaced||interlaced===\"disabled\"?-1:0}},execCommand:function(cmd,classList){var table=getTableItemsByRange(this).table;if(cmd==\"interlacetable\"){table.setAttribute(\"interlaced\",\"enabled\");this.fireEvent(\"interlacetable\",table,classList)}else{table.setAttribute(\"interlaced\",\"disabled\");this.fireEvent(\"uninterlacetable\",table)}}};UE.commands[\"setbordervisible\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(!table)return-1;return 0},execCommand:function(){var table=getTableItemsByRange(this).table;utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){td.style.borderWidth=\"1px\";td.style.borderStyle=\"solid\"})}};function resetTdWidth(table,editor){var tds=domUtils.getElementsByTagName(table,\"td th\");utils.each(tds,function(td){td.removeAttribute(\"width\")});table.setAttribute(\"width\",getTableWidth(editor,true,getDefaultValue(editor,table)));var tdsWidths=[];setTimeout(function(){utils.each(tds,function(td){td.colSpan==1&&tdsWidths.push(td.offsetWidth)});utils.each(tds,function(td,i){td.colSpan==1&&td.setAttribute(\"width\",tdsWidths[i]+\"\")})},0)}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getSelectedArr(editor){var cell=getTableItemsByRange(editor).cell;if(cell){var ut=getUETable(cell);return ut.selectedTds.length?ut.selectedTds:[cell]}else{return[]}}})();UE.plugins[\"table\"]=function(){var me=this,tabTimer=null,tableDragTimer=null,tableResizeTimer=null,cellMinWidth=5,isInResizeBuffer=false,cellBorderWidth=5,offsetOfTableCell=10,singleClickState=0,userActionStatus=null,dblclickTime=200,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getUETableBySelected=function(editor){return UT.getUETableBySelected(editor)},getDefaultValue=function(editor,table){return UT.getDefaultValue(editor,table)},removeSelectedClass=function(cells){return UT.removeSelectedClass(cells)};function showError(e){}me.ready(function(){var me=this;var orgGetText=me.selection.getText;me.selection.getText=function(){var table=getUETableBySelected(me);if(table){var str=\"\";utils.each(table.selectedTds,function(td){str+=td[browser.ie?\"innerText\":\"textContent\"]});return str}else{return orgGetText.call(me.selection)}}});var startTd=null,currentTd=null,onDrag=\"\",onBorder=false,dragButton=null,dragOver=false,dragLine=null,dragTd=null;var mousedown=false,needIEHack=true;me.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:\"top\",cursorpath:me.options.UEDITOR_HOME_URL+\"themes/default/images/cursor_\",tableDragable:false,classList:[\"ue-table-interlace-color-single\",\"ue-table-interlace-color-double\"]});me.getUETable=getUETable;var commands={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};me.ready(function(){utils.cssRule(\"table\",\".selectTdClass{background-color:#edf5fa !important}\"+\"table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}\"+\"table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+\"td,th{padding: 5px 10px;border: 1px solid #DDD;}\"+\"caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+\"th{border-top:1px solid #BBB;background-color:#F7F7F7;}\"+\"table tr.firstRow th{border-top-width:2px;}\"+\".ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }\"+\"td p{margin:0;padding:0;}\",me.document);var tableCopyList,isFullCol,isFullRow;me.addListener(\"keydown\",function(cmd,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8){var ut=getUETableBySelected(me);if(ut&&ut.selectedTds.length){if(ut.isFullCol()){me.execCommand(\"deletecol\")}else if(ut.isFullRow()){me.execCommand(\"deleterow\")}else{me.fireEvent(\"delcells\")}domUtils.preventDefault(evt)}var caption=domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true),range=me.selection.getRange();if(range.collapsed&&caption&&isEmptyBlock(caption)){me.fireEvent(\"saveScene\");var table=caption.parentNode;domUtils.remove(caption);if(table){range.setStart(table.rows[0].cells[0],0).setCursor(false,true)}me.fireEvent(\"saveScene\")}}if(keyCode==46){ut=getUETableBySelected(me);if(ut){me.fireEvent(\"saveScene\");for(var i=0,ci;ci=ut.selectedTds[i++];){domUtils.fillNode(me.document,ci)}me.fireEvent(\"saveScene\");domUtils.preventDefault(evt)}}if(keyCode==13){var rng=me.selection.getRange(),caption=domUtils.findParentByTagName(rng.startContainer,\"caption\",true);if(caption){var table=domUtils.findParentByTagName(caption,\"table\");if(!rng.collapsed){rng.deleteContents();me.fireEvent(\"saveScene\")}else{if(caption){rng.setStart(table.rows[0].cells[0],0).setCursor(false,true)}}domUtils.preventDefault(evt);return}if(rng.collapsed){var table=domUtils.findParentByTagName(rng.startContainer,\"table\");if(table){var cell=table.rows[0].cells[0],start=domUtils.findParentByTagName(me.selection.getStart(),[\"td\",\"th\"],true),preNode=table.previousSibling;if(cell===start&&(!preNode||preNode.nodeType==1&&preNode.tagName==\"TABLE\")&&domUtils.isStartInblock(rng)){var first=domUtils.findParent(me.selection.getStart(),function(n){return domUtils.isBlockElm(n)},true);if(first&&(/t(h|d)/i.test(first.tagName)||first===start.firstChild)){me.execCommand(\"insertparagraphbeforetable\");domUtils.preventDefault(evt)}}}}}if((evt.ctrlKey||evt.metaKey)&&evt.keyCode==\"67\"){tableCopyList=null;var ut=getUETableBySelected(me);if(ut){var tds=ut.selectedTds;isFullCol=ut.isFullCol();isFullRow=ut.isFullRow();tableCopyList=[[ut.cloneCell(tds[0],null,true)]];for(var i=1,ci;ci=tds[i];i++){if(ci.parentNode!==tds[i-1].parentNode){tableCopyList.push([ut.cloneCell(ci,null,true)])}else{tableCopyList[tableCopyList.length-1].push(ut.cloneCell(ci,null,true))}}}}});me.addListener(\"tablehasdeleted\",function(){toggleDraggableState(this,false,\"\",null);if(dragButton)domUtils.remove(dragButton)});me.addListener(\"beforepaste\",function(cmd,html){var me=this;var rng=me.selection.getRange();if(domUtils.findParentByTagName(rng.startContainer,\"caption\",true)){var div=me.document.createElement(\"div\");div.innerHTML=html.html;html.html=div[browser.ie9below?\"innerText\":\"textContent\"];return}var table=getUETableBySelected(me);if(tableCopyList){me.fireEvent(\"saveScene\");var rng=me.selection.getRange();var td=domUtils.findParentByTagName(rng.startContainer,[\"td\",\"th\"],true),tmpNode,preNode;if(td){var ut=getUETable(td);if(isFullRow){var rowIndex=ut.getCellInfo(td).rowIndex;if(td.tagName==\"TH\"){rowIndex++}for(var i=0,ci;ci=tableCopyList[i++];){var tr=ut.insertRow(rowIndex++,\"td\");for(var j=0,cj;cj=ci[j];j++){var cell=tr.cells[j];if(!cell){cell=tr.insertCell(j)}cell.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&cell.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&cell.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&cell.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(cell.style.cssText=cj.style.cssText)}for(var j=0,cj;cj=tr.cells[j];j++){if(!ci[j])break;cj.innerHTML=ci[j].innerHTML;ci[j].getAttribute(\"width\")&&cj.setAttribute(\"width\",ci[j].getAttribute(\"width\"));ci[j].getAttribute(\"vAlign\")&&cj.setAttribute(\"vAlign\",ci[j].getAttribute(\"vAlign\"));ci[j].getAttribute(\"align\")&&cj.setAttribute(\"align\",ci[j].getAttribute(\"align\"));ci[j].style.cssText&&(cj.style.cssText=ci[j].style.cssText)}}}else{if(isFullCol){cellInfo=ut.getCellInfo(td);var maxColNum=0;for(var j=0,ci=tableCopyList[0],cj;cj=ci[j++];){maxColNum+=cj.colSpan||1}me.__hasEnterExecCommand=true;for(i=0;i<maxColNum;i++){me.execCommand(\"insertcol\")}me.__hasEnterExecCommand=false;td=ut.table.rows[0].cells[cellInfo.cellIndex];if(td.tagName==\"TH\"){td=ut.table.rows[1].cells[cellInfo.cellIndex]}}for(var i=0,ci;ci=tableCopyList[i++];){tmpNode=td;for(var j=0,cj;cj=ci[j++];){if(td){td.innerHTML=cj.innerHTML;cj.getAttribute(\"width\")&&td.setAttribute(\"width\",cj.getAttribute(\"width\"));cj.getAttribute(\"vAlign\")&&td.setAttribute(\"vAlign\",cj.getAttribute(\"vAlign\"));cj.getAttribute(\"align\")&&td.setAttribute(\"align\",cj.getAttribute(\"align\"));cj.style.cssText&&(td.style.cssText=cj.style.cssText);preNode=td;td=td.nextSibling}else{var cloneTd=cj.cloneNode(true);domUtils.removeAttributes(cloneTd,[\"class\",\"rowSpan\",\"colSpan\"]);preNode.parentNode.appendChild(cloneTd)}}td=ut.getNextCell(tmpNode,true,true);if(!tableCopyList[i])break;if(!td){var cellInfo=ut.getCellInfo(tmpNode);ut.table.insertRow(ut.table.rows.length);ut.update();td=ut.getVSideCell(tmpNode,true)}}}ut.update()}else{table=me.document.createElement(\"table\");for(var i=0,ci;ci=tableCopyList[i++];){var tr=table.insertRow(table.rows.length);for(var j=0,cj;cj=ci[j++];){cloneTd=UT.cloneCell(cj,null,true);domUtils.removeAttributes(cloneTd,[\"class\"]);tr.appendChild(cloneTd)}if(j==2&&cloneTd.rowSpan>1){cloneTd.rowSpan=1}}var defaultValue=getDefaultValue(me),width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0);me.execCommand(\"insertHTML\",\"<table  \"+(isFullCol&&isFullRow?'width=\"'+width+'\"':\"\")+\">\"+table.innerHTML.replace(/>\\s*</g,\"><\").replace(/\\bth\\b/gi,\"td\")+\"</table>\")}me.fireEvent(\"contentchange\");me.fireEvent(\"saveScene\");html.html=\"\";return true}else{var div=me.document.createElement(\"div\"),tables;div.innerHTML=html.html;tables=div.getElementsByTagName(\"table\");if(domUtils.findParentByTagName(me.selection.getStart(),\"table\")){utils.each(tables,function(t){domUtils.remove(t)});if(domUtils.findParentByTagName(me.selection.getStart(),\"caption\",true)){div.innerHTML=div[browser.ie?\"innerText\":\"textContent\"]}}else{utils.each(tables,function(table){removeStyleSize(table,true);domUtils.removeAttributes(table,[\"style\",\"border\"]);utils.each(domUtils.getElementsByTagName(table,\"td\"),function(td){if(isEmptyBlock(td)){domUtils.fillNode(me.document,td)}removeStyleSize(td,true)})})}html.html=div.innerHTML}});me.addListener(\"afterpaste\",function(){utils.each(domUtils.getElementsByTagName(me.body,\"table\"),function(table){if(table.offsetWidth>me.body.offsetWidth){var defaultValue=getDefaultValue(me,table);table.style.width=me.body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(me.body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(me.options.offsetWidth||0)+\"px\"}})});me.addListener(\"blur\",function(){tableCopyList=null});var timer;me.addListener(\"keydown\",function(){clearTimeout(timer);timer=setTimeout(function(){var rng=me.selection.getRange(),cell=domUtils.findParentByTagName(rng.startContainer,[\"th\",\"td\"],true);if(cell){var table=cell.parentNode.parentNode.parentNode;if(table.offsetWidth>table.getAttribute(\"width\")){cell.style.wordBreak=\"break-all\"}}},100)});me.addListener(\"selectionchange\",function(){toggleDraggableState(me,false,\"\",null)});me.addListener(\"contentchange\",function(){var me=this;hideDragLine(me);if(getUETableBySelected(me))return;var rng=me.selection.getRange();var start=rng.startContainer;start=domUtils.findParentByTagName(start,[\"td\",\"th\"],true);utils.each(domUtils.getElementsByTagName(me.document,\"table\"),function(table){if(me.fireEvent(\"excludetable\",table)===true)return;table.ueTable=new UT(table);table.onmouseover=function(){me.fireEvent(\"tablemouseover\",table)};table.onmousemove=function(){me.fireEvent(\"tablemousemove\",table);me.options.tableDragable&&toggleDragButton(true,this,me);utils.defer(function(){me.fireEvent(\"contentchange\",50)},true)};table.onmouseout=function(){me.fireEvent(\"tablemouseout\",table);toggleDraggableState(me,false,\"\",null);hideDragLine(me)};table.onclick=function(evt){evt=me.window.event||evt;var target=getParentTdOrTh(evt.target||evt.srcElement);if(!target)return;var ut=getUETable(target),table=ut.table,cellInfo=ut.getCellInfo(target),cellsRange,rng=me.selection.getRange();if(inTableSide(table,target,evt,true)){var endTdCol=ut.getCell(ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].rowIndex,ut.indexTable[ut.rowsNum-1][cellInfo.colIndex].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdCol){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}else{if(target!==endTdCol){cellsRange=ut.getCellsRange(target,endTdCol);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdCol).select()}}return}if(inTableSide(table,target,evt)){var endTdRow=ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].rowIndex,ut.indexTable[cellInfo.rowIndex][ut.colsNum-1].cellIndex);if(evt.shiftKey&&ut.selectedTds.length){if(ut.selectedTds[0]!==endTdRow){cellsRange=ut.getCellsRange(ut.selectedTds[0],endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}else{if(target!==endTdRow){cellsRange=ut.getCellsRange(target,endTdRow);ut.setSelected(cellsRange)}else{rng&&rng.selectNodeContents(endTdRow).select()}}}}});switchBorderColor(me,true)});domUtils.on(me.document,\"mousemove\",mouseMoveEvent);domUtils.on(me.document,\"mouseout\",function(evt){var target=evt.target||evt.srcElement;if(target.tagName==\"TABLE\"){toggleDraggableState(me,false,\"\",null)}});me.addListener(\"interlacetable\",function(type,table,classList){if(!table)return;var me=this,rows=table.rows,len=rows.length,getClass=function(list,index,repeat){return list[index]?list[index]:repeat?list[index%list.length]:\"\"};for(var i=0;i<len;i++){rows[i].className=getClass(classList||me.options.classList,i,true)}});me.addListener(\"uninterlacetable\",function(type,table){if(!table)return;var me=this,rows=table.rows,classList=me.options.classList,len=rows.length;for(var i=0;i<len;i++){domUtils.removeClasses(rows[i],classList)}});me.addListener(\"mousedown\",mouseDownEvent);me.addListener(\"mouseup\",mouseUpEvent);domUtils.on(me.body,\"dragstart\",function(evt){mouseUpEvent.call(me,\"dragstart\",evt)});me.addOutputRule(function(root){utils.each(root.getNodesByTagName(\"div\"),function(n){if(n.getAttr(\"id\")==\"ue_tableDragLine\"){n.parentNode.removeChild(n)}})});var currentRowIndex=0;me.addListener(\"mousedown\",function(){currentRowIndex=0});me.addListener(\"tabkeydown\",function(){var range=this.selection.getRange(),common=range.getCommonAncestor(true,true),table=domUtils.findParentByTagName(common,\"table\");if(table){if(domUtils.findParentByTagName(common,\"caption\",true)){var cell=domUtils.getElementsByTagName(table,\"th td\");if(cell&&cell.length){range.setStart(cell[0],0).setCursor(false,true)}}else{var cell=domUtils.findParentByTagName(common,[\"td\",\"th\"],true),ua=getUETable(cell);currentRowIndex=cell.rowSpan>1?currentRowIndex:ua.getCellInfo(cell).rowIndex;var nextCell=ua.getTabNextCell(cell,currentRowIndex);if(nextCell){if(isEmptyBlock(nextCell)){range.setStart(nextCell,0).setCursor(false,true)}else{range.selectNodeContents(nextCell).select()}}else{me.fireEvent(\"saveScene\");me.__hasEnterExecCommand=true;this.execCommand(\"insertrownext\");me.__hasEnterExecCommand=false;range=this.selection.getRange();range.setStart(table.rows[table.rows.length-1].cells[0],0).setCursor();me.fireEvent(\"saveScene\")}}return true}});browser.ie&&me.addListener(\"selectionchange\",function(){toggleDraggableState(this,false,\"\",null)});me.addListener(\"keydown\",function(type,evt){var me=this;var keyCode=evt.keyCode||evt.which;if(keyCode==8||keyCode==46){return}var notCtrlKey=!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey;notCtrlKey&&removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td\"));var ut=getUETableBySelected(me);if(!ut)return;notCtrlKey&&ut.clearSelected()});me.addListener(\"beforegetcontent\",function(){switchBorderColor(this,false);browser.ie&&utils.each(this.document.getElementsByTagName(\"caption\"),function(ci){if(domUtils.isEmptyNode(ci)){ci.innerHTML=\"&nbsp;\"}})});me.addListener(\"aftergetcontent\",function(){switchBorderColor(this,true)});me.addListener(\"getAllHtml\",function(){removeSelectedClass(me.document.getElementsByTagName(\"td\"))});me.addListener(\"fullscreenchanged\",function(type,fullscreen){if(!fullscreen){var ratio=this.body.offsetWidth/document.body.offsetWidth,tables=domUtils.getElementsByTagName(this.body,\"table\");utils.each(tables,function(table){if(table.offsetWidth<me.body.offsetWidth)return false;var tds=domUtils.getElementsByTagName(table,\"td\"),backWidths=[];utils.each(tds,function(td){backWidths.push(td.offsetWidth)});for(var i=0,td;td=tds[i];i++){td.setAttribute(\"width\",Math.floor(backWidths[i]*ratio))}table.setAttribute(\"width\",Math.floor(getTableWidth(me,needIEHack,getDefaultValue(me))))})}});var oldExecCommand=me.execCommand;me.execCommand=function(cmd,datatat){var me=this,args=arguments;cmd=cmd.toLowerCase();var ut=getUETableBySelected(me),tds,range=new dom.Range(me.document),cmdFun=me.commands[cmd]||UE.commands[cmd],result;if(!cmdFun)return;if(ut&&!commands[cmd]&&!cmdFun.notNeedUndo&&!me.__hasEnterExecCommand){me.__hasEnterExecCommand=true;me.fireEvent(\"beforeexeccommand\",cmd);tds=ut.selectedTds;var lastState=-2,lastValue=-2,value,state;for(var i=0,td;td=tds[i];i++){if(isEmptyBlock(td)){range.setStart(td,0).setCursor(false,true)}else{range.selectNode(td).select(true)}state=me.queryCommandState(cmd);value=me.queryCommandValue(cmd);if(state!=-1){if(lastState!==state||lastValue!==value){me._ignoreContentChange=true;result=oldExecCommand.apply(me,arguments);me._ignoreContentChange=false}lastState=me.queryCommandState(cmd);lastValue=me.queryCommandValue(cmd);if(domUtils.isEmptyBlock(td)){domUtils.fillNode(me.document,td)}}}range.setStart(tds[0],0).shrinkBoundary(true).setCursor(false,true);me.fireEvent(\"contentchange\");me.fireEvent(\"afterexeccommand\",cmd);me.__hasEnterExecCommand=false;me._selectionChange()}else{result=oldExecCommand.apply(me,arguments)}return result}});function removeStyleSize(obj,replaceToProperty){removeStyle(obj,\"width\",true);removeStyle(obj,\"height\",true)}function removeStyle(obj,styleName,replaceToProperty){if(obj.style[styleName]){replaceToProperty&&obj.setAttribute(styleName,parseInt(obj.style[styleName],10));obj.style[styleName]=\"\"}}function getParentTdOrTh(ele){if(ele.tagName==\"TD\"||ele.tagName==\"TH\")return ele;var td;if(td=domUtils.findParentByTagName(ele,\"td\",true)||domUtils.findParentByTagName(ele,\"th\",true))return td;return null}function isEmptyBlock(node){var reg=new RegExp(domUtils.fillChar,\"g\");if(node[browser.ie?\"innerText\":\"textContent\"].replace(/^\\s*$/,\"\").replace(reg,\"\").length>0){return 0}for(var n in dtd.$isNotEmpty){if(node.getElementsByTagName(n).length){return 0}}return 1}function mouseCoords(evt){if(evt.pageX||evt.pageY){return{x:evt.pageX,y:evt.pageY}}return{x:evt.clientX+me.document.body.scrollLeft-me.document.body.clientLeft,y:evt.clientY+me.document.body.scrollTop-me.document.body.clientTop}}function mouseMoveEvent(evt){if(isEditorDisabled()){return}try{var target=getParentTdOrTh(evt.target||evt.srcElement),pos;if(isInResizeBuffer){me.body.style.webkitUserSelect=\"none\";if(Math.abs(userActionStatus.x-evt.clientX)>offsetOfTableCell||Math.abs(userActionStatus.y-evt.clientY)>offsetOfTableCell){clearTableDragTimer();isInResizeBuffer=false;singleClickState=0;tableBorderDrag(evt)}}if(onDrag&&dragTd){singleClickState=0;me.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();pos=mouseCoords(evt);toggleDraggableState(me,true,onDrag,pos,target);if(onDrag==\"h\"){dragLine.style.left=getPermissionX(dragTd,evt)+\"px\"}else if(onDrag==\"v\"){dragLine.style.top=getPermissionY(dragTd,evt)+\"px\"}return}if(target){if(me.fireEvent(\"excludetable\",target)===true)return;pos=mouseCoords(evt);var state=getRelation(target,pos),table=domUtils.findParentByTagName(target,\"table\",true);if(inTableSide(table,target,evt,true)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"h.png),pointer\"}else if(inTableSide(table,target,evt)){if(me.fireEvent(\"excludetable\",table)===true)return;me.body.style.cursor=\"url(\"+me.options.cursorpath+\"v.png),pointer\"}else{me.body.style.cursor=\"text\";var curCell=target;if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");target=getUETable(target).getPreviewCell(target,state==\"v\")}toggleDraggableState(me,target?!!state:false,target?state:\"\",pos,target)}}else{toggleDragButton(false,table,me)}}catch(e){showError(e)}}var dragButtonTimer;function toggleDragButton(show,table,editor){if(!show){if(dragOver)return;dragButtonTimer=setTimeout(function(){!dragOver&&dragButton&&dragButton.parentNode&&dragButton.parentNode.removeChild(dragButton)},2e3)}else{createDragButton(table,editor)}}function createDragButton(table,editor){var pos=domUtils.getXY(table),doc=table.ownerDocument;if(dragButton&&dragButton.parentNode)return dragButton;dragButton=doc.createElement(\"div\");dragButton.contentEditable=false;dragButton.innerHTML=\"\";dragButton.style.cssText=\"width:15px;height:15px;background-image:url(\"+editor.options.UEDITOR_HOME_URL+\"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\"+(pos.y-15)+\"px;left:\"+pos.x+\"px;\";domUtils.unSelectable(dragButton);dragButton.onmouseover=function(evt){dragOver=true};dragButton.onmouseout=function(evt){dragOver=false};domUtils.on(dragButton,\"click\",function(type,evt){doClick(evt,this)});domUtils.on(dragButton,\"dblclick\",function(type,evt){doDblClick(evt)});domUtils.on(dragButton,\"dragstart\",function(type,evt){domUtils.preventDefault(evt)});var timer;function doClick(evt,button){clearTimeout(timer);timer=setTimeout(function(){editor.fireEvent(\"tableClicked\",table,button)},300)}function doDblClick(evt){clearTimeout(timer);var ut=getUETable(table),start=table.rows[0].cells[0],end=ut.getLastCell(),range=ut.getCellsRange(start,end);editor.selection.getRange().setStart(start,0).setCursor(false,true);ut.setSelected(range)}doc.body.appendChild(dragButton)}function inTableSide(table,cell,evt,top){var pos=mouseCoords(evt),state=getRelation(cell,pos);if(top){var caption=table.getElementsByTagName(\"caption\")[0],capHeight=caption?caption.offsetHeight:0;return state==\"v1\"&&pos.y-domUtils.getXY(table).y-capHeight<8}else{return state==\"h1\"&&pos.x-domUtils.getXY(table).x<8}}function getPermissionX(dragTd,evt){var ut=getUETable(dragTd);if(ut){var preTd=ut.getSameEndPosCells(dragTd,\"x\")[0],nextTd=ut.getSameStartPosXCells(dragTd)[0],mouseX=mouseCoords(evt).x,left=(preTd?domUtils.getXY(preTd).x:domUtils.getXY(ut.table).x)+20,right=nextTd?domUtils.getXY(nextTd).x+nextTd.offsetWidth-20:me.body.offsetWidth+5||parseInt(domUtils.getComputedStyle(me.body,\"width\"),10);left+=cellMinWidth;right-=cellMinWidth;return mouseX<left?left:mouseX>right?right:mouseX}}function getPermissionY(dragTd,evt){try{var top=domUtils.getXY(dragTd).y,mousePosY=mouseCoords(evt).y;return mousePosY<top?top:mousePosY}catch(e){showError(e)}}function toggleDraggableState(editor,draggable,dir,mousePos,cell){try{editor.body.style.cursor=dir==\"h\"?\"col-resize\":dir==\"v\"?\"row-resize\":\"text\";if(browser.ie){if(dir&&!mousedown&&!getUETableBySelected(editor)){getDragLine(editor,editor.document);showDragLineAt(dir,cell)}else{hideDragLine(editor)}}onBorder=draggable}catch(e){showError(e)}}function getResizeLineByUETable(){var lineId=\"_UETableResizeLine\",line=this.document.getElementById(lineId);if(!line){line=this.document.createElement(\"div\");line.id=lineId;line.contnetEditable=false;line.setAttribute(\"unselectable\",\"on\");var styles={width:2*cellBorderWidth+1+\"px\",position:\"absolute\",\"z-index\":1e5,cursor:\"col-resize\",background:\"red\",display:\"none\"};line.onmouseout=function(){this.style.display=\"none\"};utils.extend(line.style,styles);this.document.body.appendChild(line)}return line}function updateResizeLine(cell,uetable){var line=getResizeLineByUETable.call(this),table=uetable.table,styles={top:domUtils.getXY(table).y+\"px\",left:domUtils.getXY(cell).x+cell.offsetWidth-cellBorderWidth+\"px\",display:\"block\",height:table.offsetHeight+\"px\"};utils.extend(line.style,styles)}function showResizeLine(cell){var uetable=getUETable(cell);updateResizeLine.call(this,cell,uetable)}function getRelation(ele,mousePos){var elePos=domUtils.getXY(ele);if(!elePos){return\"\"}if(elePos.x+ele.offsetWidth-mousePos.x<cellBorderWidth){return\"h\"}if(mousePos.x-elePos.x<cellBorderWidth){return\"h1\"}if(elePos.y+ele.offsetHeight-mousePos.y<cellBorderWidth){return\"v\"}if(mousePos.y-elePos.y<cellBorderWidth){return\"v1\"}return\"\"}function mouseDownEvent(type,evt){if(isEditorDisabled()){return}userActionStatus={x:evt.clientX,y:evt.clientY};if(evt.button==2){var ut=getUETableBySelected(me),flag=false;if(ut){var td=getTargetTd(me,evt);utils.each(ut.selectedTds,function(ti){if(ti===td){flag=true}});if(!flag){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"th td\"));ut.clearSelected()}else{td=ut.selectedTds[0];setTimeout(function(){me.selection.getRange().setStart(td,0).setCursor(false,true)},0)}}}else{tableClickHander(evt)}}function clearTableTimer(){tabTimer&&clearTimeout(tabTimer);tabTimer=null}function tableDbclickHandler(evt){singleClickState=0;evt=evt||me.window.event;var target=getParentTdOrTh(evt.target||evt.srcElement);if(target){var h;if(h=getRelation(target,mouseCoords(evt))){hideDragLine(me);if(h==\"h1\"){h=\"h\";if(inTableSide(domUtils.findParentByTagName(target,\"table\"),target,evt)){me.execCommand(\"adaptbywindow\")}else{target=getUETable(target).getPreviewCell(target);if(target){var rng=me.selection.getRange();rng.selectNodeContents(target).setCursor(true,true)}}}if(h==\"h\"){var ut=getUETable(target),table=ut.table,cells=getCellsByMoveBorder(target,table,true);cells=extractArray(cells,\"left\");ut.width=ut.offsetWidth;var oldWidth=[],newWidth=[];utils.each(cells,function(cell){oldWidth.push(cell.offsetWidth)});utils.each(cells,function(cell){cell.removeAttribute(\"width\")});window.setTimeout(function(){var changeable=true;utils.each(cells,function(cell,index){var width=cell.offsetWidth;if(width>oldWidth[index]){changeable=false;return false}newWidth.push(width)});var change=changeable?newWidth:oldWidth;utils.each(cells,function(cell,index){cell.width=change[index]-getTabcellSpace()})},0)}}}}function tableClickHander(evt){removeSelectedClass(domUtils.getElementsByTagName(me.body,\"td th\"));utils.each(me.document.getElementsByTagName(\"table\"),function(t){t.ueTable=null});startTd=getTargetTd(me,evt);if(!startTd)return;var table=domUtils.findParentByTagName(startTd,\"table\",true);ut=getUETable(table);ut&&ut.clearSelected();if(!onBorder){me.document.body.style.webkitUserSelect=\"\";mousedown=true;me.addListener(\"mouseover\",mouseOverEvent)}else{borderActionHandler(evt)}}function borderActionHandler(evt){if(browser.ie){evt=reconstruct(evt)}clearTableDragTimer();isInResizeBuffer=true;tableDragTimer=setTimeout(function(){tableBorderDrag(evt)},dblclickTime)}function extractArray(originArr,key){var result=[],tmp=null;for(var i=0,len=originArr.length;i<len;i++){tmp=originArr[i][key];if(tmp){result.push(tmp)}}return result}function clearTableDragTimer(){tableDragTimer&&clearTimeout(tableDragTimer);tableDragTimer=null}function reconstruct(obj){var attrs=[\"pageX\",\"pageY\",\"clientX\",\"clientY\",\"srcElement\",\"target\"],newObj={};if(obj){for(var i=0,key,val;key=attrs[i];i++){val=obj[key];val&&(newObj[key]=val)}}return newObj}function tableBorderDrag(evt){isInResizeBuffer=false;startTd=evt.target||evt.srcElement;if(!startTd)return;var state=getRelation(startTd,mouseCoords(evt));if(/\\d/.test(state)){state=state.replace(/\\d/,\"\");startTd=getUETable(startTd).getPreviewCell(startTd,state==\"v\")}hideDragLine(me);getDragLine(me,me.document);me.fireEvent(\"saveScene\");showDragLineAt(state,startTd);mousedown=true;onDrag=state;dragTd=startTd}function mouseUpEvent(type,evt){if(isEditorDisabled()){return}clearTableDragTimer();isInResizeBuffer=false;if(onBorder){singleClickState=++singleClickState%3;userActionStatus={x:evt.clientX,y:evt.clientY};tableResizeTimer=setTimeout(function(){singleClickState>0&&singleClickState--},dblclickTime);if(singleClickState===2){singleClickState=0;tableDbclickHandler(evt);return}}if(evt.button==2)return;var me=this;var range=me.selection.getRange(),start=domUtils.findParentByTagName(range.startContainer,\"table\",true),end=domUtils.findParentByTagName(range.endContainer,\"table\",true);if(start||end){if(start===end){start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\",\"caption\"],true);end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\",\"caption\"],true);if(start!==end){me.selection.clearRange()}}else{me.selection.clearRange()}}mousedown=false;me.document.body.style.webkitUserSelect=\"\";if(onDrag&&dragTd){me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();singleClickState=0;dragLine=me.document.getElementById(\"ue_tableDragLine\");if(dragLine){var dragTdPos=domUtils.getXY(dragTd),dragLinePos=domUtils.getXY(dragLine);switch(onDrag){case\"h\":changeColWidth(dragTd,dragLinePos.x-dragTdPos.x);break;case\"v\":changeRowHeight(dragTd,dragLinePos.y-dragTdPos.y-dragTd.offsetHeight);break;default:}onDrag=\"\";dragTd=null;hideDragLine(me);me.fireEvent(\"saveScene\");return}}if(!startTd){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"td\",true);if(!target)target=domUtils.findParentByTagName(evt.target||evt.srcElement,\"th\",true);if(target&&(target.tagName==\"TD\"||target.tagName==\"TH\")){if(me.fireEvent(\"excludetable\",target)===true)return;range=new dom.Range(me.document);range.setStart(target,0).setCursor(false,true)}}else{var ut=getUETable(startTd),cell=ut?ut.selectedTds[0]:null;if(cell){range=new dom.Range(me.document);if(domUtils.isEmptyBlock(cell)){range.setStart(cell,0).setCursor(false,true)}else{range.selectNodeContents(cell).shrinkBoundary().setCursor(false,true)}}else{range=me.selection.getRange().shrinkBoundary();if(!range.collapsed){var start=domUtils.findParentByTagName(range.startContainer,[\"td\",\"th\"],true),end=domUtils.findParentByTagName(range.endContainer,[\"td\",\"th\"],true);if(start&&!end||!start&&end||start&&end&&start!==end){range.setCursor(false,true)}}}startTd=null;me.removeListener(\"mouseover\",mouseOverEvent)}me._selectionChange(250,evt)}function mouseOverEvent(type,evt){if(isEditorDisabled()){return}var me=this,tar=evt.target||evt.srcElement;currentTd=domUtils.findParentByTagName(tar,\"td\",true)||domUtils.findParentByTagName(tar,\"th\",true);if(startTd&&currentTd&&(startTd.tagName==\"TD\"&&currentTd.tagName==\"TD\"||startTd.tagName==\"TH\"&&currentTd.tagName==\"TH\")&&domUtils.findParentByTagName(startTd,\"table\")==domUtils.findParentByTagName(currentTd,\"table\")){var ut=getUETable(currentTd);if(startTd!=currentTd){me.document.body.style.webkitUserSelect=\"none\";me.selection.getNative()[browser.ie9below?\"empty\":\"removeAllRanges\"]();var range=ut.getCellsRange(startTd,currentTd);ut.setSelected(range)}else{me.document.body.style.webkitUserSelect=\"\";ut.clearSelected()}}evt.preventDefault?evt.preventDefault():evt.returnValue=false}function setCellHeight(cell,height,backHeight){var lineHight=parseInt(domUtils.getComputedStyle(cell,\"line-height\"),10),tmpHeight=backHeight+height;height=tmpHeight<lineHight?lineHight:tmpHeight;if(cell.style.height)cell.style.height=\"\";cell.rowSpan==1?cell.setAttribute(\"height\",height):cell.removeAttribute&&cell.removeAttribute(\"height\")}function getWidth(cell){if(!cell)return 0;return parseInt(domUtils.getComputedStyle(cell,\"width\"),10)}function changeColWidth(cell,changeValue){var ut=getUETable(cell);if(ut){var table=ut.table,cells=getCellsByMoveBorder(cell,table);table.style.width=\"\";table.removeAttribute(\"width\");changeValue=correctChangeValue(changeValue,cell,cells);if(cell.nextSibling){var i=0;utils.each(cells,function(cellGroup){cellGroup.left.width=+cellGroup.left.width+changeValue;cellGroup.right&&(cellGroup.right.width=+cellGroup.right.width-changeValue)})}else{utils.each(cells,function(cellGroup){cellGroup.left.width-=-changeValue})}}}function isEditorDisabled(){return me.body.contentEditable===\"false\"}function changeRowHeight(td,changeValue){if(Math.abs(changeValue)<10)return;var ut=getUETable(td);if(ut){var cells=ut.getSameEndPosCells(td,\"y\"),backHeight=cells[0]?cells[0].offsetHeight:0;for(var i=0,cell;cell=cells[i++];){setCellHeight(cell,changeValue,backHeight)}}}function getCellsByMoveBorder(cell,table,isContainMergeCell){if(!table){table=domUtils.findParentByTagName(cell,\"table\")}if(!table){return null}var index=domUtils.getNodeIndex(cell),temp=cell,rows=table.rows,colIndex=0;while(temp){if(temp.nodeType===1){colIndex+=temp.colSpan||1}temp=temp.previousSibling}temp=null;var borderCells=[];utils.each(rows,function(tabRow){var cells=tabRow.cells,currIndex=0;utils.each(cells,function(tabCell){currIndex+=tabCell.colSpan||1;if(currIndex===colIndex){borderCells.push({left:tabCell,right:tabCell.nextSibling||null});return false}else if(currIndex>colIndex){if(isContainMergeCell){borderCells.push({left:tabCell})}return false}})});return borderCells}function getMinWidthByTableCells(cells){var minWidth=Number.MAX_VALUE;for(var i=0,curCell;curCell=cells[i];i++){minWidth=Math.min(minWidth,curCell.width||getTableCellWidth(curCell))}return minWidth}function correctChangeValue(changeValue,relatedCell,cells){changeValue-=getTabcellSpace();if(changeValue<0){return 0}changeValue-=getTableCellWidth(relatedCell);var direction=changeValue<0?\"left\":\"right\";changeValue=Math.abs(changeValue);utils.each(cells,function(cellGroup){var curCell=cellGroup[direction];if(curCell){changeValue=Math.min(changeValue,getTableCellWidth(curCell)-cellMinWidth)}});changeValue=changeValue<0?0:changeValue;return direction===\"left\"?-changeValue:changeValue}function getTableCellWidth(cell){var width=0,offset=0,width=cell.offsetWidth-getTabcellSpace();if(!cell.nextSibling){width-=getTableCellOffset(cell)}width=width<0?0:width;try{cell.width=width}catch(e){}return width}function getTableCellOffset(cell){tab=domUtils.findParentByTagName(cell,\"table\",false);if(tab.offsetVal===undefined){var prev=cell.previousSibling;if(prev){tab.offsetVal=cell.offsetWidth-prev.offsetWidth===UT.borderWidth?UT.borderWidth:0}else{tab.offsetVal=0}}return tab.offsetVal}function getTabcellSpace(){if(UT.tabcellSpace===undefined){var cell=null,tab=me.document.createElement(\"table\"),tbody=me.document.createElement(\"tbody\"),trow=me.document.createElement(\"tr\"),tabcell=me.document.createElement(\"td\"),mirror=null;tabcell.style.cssText=\"border: 0;\";tabcell.width=1;trow.appendChild(tabcell);trow.appendChild(mirror=tabcell.cloneNode(false));tbody.appendChild(trow);tab.appendChild(tbody);tab.style.cssText=\"visibility: hidden;\";me.body.appendChild(tab);UT.paddingSpace=tabcell.offsetWidth-1;var tmpTabWidth=tab.offsetWidth;tabcell.style.cssText=\"\";mirror.style.cssText=\"\";UT.borderWidth=(tab.offsetWidth-tmpTabWidth)/3;UT.tabcellSpace=UT.paddingSpace+UT.borderWidth;me.body.removeChild(tab)}getTabcellSpace=function(){return UT.tabcellSpace};return UT.tabcellSpace}function getDragLine(editor,doc){if(mousedown)return;dragLine=editor.document.createElement(\"div\");domUtils.setAttributes(dragLine,{id:\"ue_tableDragLine\",unselectable:\"on\",contenteditable:false,onresizestart:\"return false\",ondragstart:\"return false\",onselectstart:\"return false\",style:\"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"});editor.body.appendChild(dragLine)}function hideDragLine(editor){if(mousedown)return;var line;while(line=editor.document.getElementById(\"ue_tableDragLine\")){domUtils.remove(line)}}function showDragLineAt(state,cell){if(!cell)return;var table=domUtils.findParentByTagName(cell,\"table\"),caption=table.getElementsByTagName(\"caption\"),width=table.offsetWidth,height=table.offsetHeight-(caption.length>0?caption[0].offsetHeight:0),tablePos=domUtils.getXY(table),cellPos=domUtils.getXY(cell),css;switch(state){case\"h\":css=\"height:\"+height+\"px;top:\"+(tablePos.y+(caption.length>0?caption[0].offsetHeight:0))+\"px;left:\"+(cellPos.x+cell.offsetWidth);dragLine.style.cssText=css+\"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";break;case\"v\":css=\"width:\"+width+\"px;left:\"+tablePos.x+\"px;top:\"+(cellPos.y+cell.offsetHeight);dragLine.style.cssText=css+\"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\";break;default:}}function switchBorderColor(editor,flag){var tableArr=domUtils.getElementsByTagName(editor.body,\"table\"),color;for(var i=0,node;node=tableArr[i++];){var td=domUtils.getElementsByTagName(node,\"td\");if(td[0]){if(flag){color=td[0].style.borderColor.replace(/\\s/g,\"\");if(/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(color))domUtils.addClass(node,\"noBorderTable\")}else{domUtils.removeClasses(node,\"noBorderTable\")}}}}function getTableWidth(editor,needIEHack,defaultValue){var body=editor.body;return body.offsetWidth-(needIEHack?parseInt(domUtils.getComputedStyle(body,\"margin-left\"),10)*2:0)-defaultValue.tableBorder*2-(editor.options.offsetWidth||0)}function getTargetTd(editor,evt){var target=domUtils.findParentByTagName(evt.target||evt.srcElement,[\"td\",\"th\"],true),dir=null;if(!target){return null}dir=getRelation(target,mouseCoords(evt));if(!target){return null}if(dir===\"h1\"&&target.previousSibling){var position=domUtils.getXY(target),cellWidth=target.offsetWidth;if(Math.abs(position.x+cellWidth-evt.clientX)>cellWidth/3){target=target.previousSibling}}else if(dir===\"v1\"&&target.parentNode.previousSibling){var position=domUtils.getXY(target),cellHeight=target.offsetHeight;if(Math.abs(position.y+cellHeight-evt.clientY)>cellHeight/3){target=target.parentNode.previousSibling.firstChild}}return target&&!(editor.fireEvent(\"excludetable\",target)===true)?target:null}};UE.UETable.prototype.sortTable=function(sortByCellIndex,compareFn){var table=this.table,rows=table.rows,trArray=[],flag=rows[0].cells[0].tagName===\"TH\",lastRowIndex=0;if(this.selectedTds.length){var range=this.cellsRange,len=range.endRowIndex+1;for(var i=range.beginRowIndex;i<len;i++){trArray[i]=rows[i]}trArray.splice(0,range.beginRowIndex);lastRowIndex=range.endRowIndex+1===this.rowsNum?0:range.endRowIndex+1}else{for(var i=0,len=rows.length;i<len;i++){trArray[i]=rows[i]}}var Fn={reversecurrent:function(td1,td2){return 1},orderbyasc:function(td1,td2){var value1=td1.innerText||td1.textContent,value2=td2.innerText||td2.textContent;return value1.localeCompare(value2)},reversebyasc:function(td1,td2){var value1=td1.innerHTML,value2=td2.innerHTML;return value2.localeCompare(value1)},orderbynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value1||0)-(value2||0)},reversebynum:function(td1,td2){var value1=td1[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/),value2=td2[browser.ie?\"innerText\":\"textContent\"].match(/\\d+/);if(value1)value1=+value1[0];if(value2)value2=+value2[0];return(value2||0)-(value1||0)}};table.setAttribute(\"data-sort-type\",compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]?compareFn:\"\");flag&&trArray.splice(0,1);trArray=utils.sort(trArray,function(tr1,tr2){var result;if(compareFn&&typeof compareFn===\"function\"){result=compareFn.call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else if(compareFn&&typeof compareFn===\"number\"){result=1}else if(compareFn&&typeof compareFn===\"string\"&&Fn[compareFn]){result=Fn[compareFn].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}else{result=Fn[\"orderbyasc\"].call(this,tr1.cells[sortByCellIndex],tr2.cells[sortByCellIndex])}return result});var fragment=table.ownerDocument.createDocumentFragment();for(var j=0,len=trArray.length;j<len;j++){fragment.appendChild(trArray[j])}var tbody=table.getElementsByTagName(\"tbody\")[0];if(!lastRowIndex){tbody.appendChild(fragment)}else{tbody.insertBefore(fragment,rows[lastRowIndex-range.endRowIndex+range.beginRowIndex-1])}};UE.plugins[\"tablesort\"]=function(){var me=this,UT=UE.UETable,getUETable=function(tdOrTable){return UT.getUETable(tdOrTable)},getTableItemsByRange=function(editor){return UT.getTableItemsByRange(editor)};me.ready(function(){utils.cssRule(\"tablesort\",\"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;\"+\"   background-image:url(\"+me.options.themePath+me.options.theme+\"/images/sortable.png);}\",me.document);me.addListener(\"afterexeccommand\",function(type,cmd){if(cmd==\"mergeright\"||cmd==\"mergedown\"||cmd==\"mergecells\"){this.execCommand(\"disablesort\")}})});UE.commands[\"sorttable\"]={queryCommandState:function(){var me=this,tableItems=getTableItemsByRange(me);if(!tableItems.cell)return-1;var table=tableItems.table,cells=table.getElementsByTagName(\"td\");for(var i=0,cell;cell=cells[i++];){if(cell.rowSpan!=1||cell.colSpan!=1)return-1}return 0},execCommand:function(cmd,fn){var me=this,range=me.selection.getRange(),bk=range.createBookmark(true),tableItems=getTableItemsByRange(me),cell=tableItems.cell,ut=getUETable(tableItems.table),cellInfo=ut.getCellInfo(cell);ut.sortTable(cellInfo.cellIndex,fn);range.moveToBookmark(bk);try{range.select()}catch(e){}}};UE.commands[\"enablesort\"]=UE.commands[\"disablesort\"]={queryCommandState:function(cmd){var table=getTableItemsByRange(this).table;if(table&&cmd==\"enablesort\"){var cells=domUtils.getElementsByTagName(table,\"th td\");for(var i=0;i<cells.length;i++){if(cells[i].getAttribute(\"colspan\")>1||cells[i].getAttribute(\"rowspan\")>1)return-1}}return!table?-1:cmd==\"enablesort\"^table.getAttribute(\"data-sort\")!=\"sortEnabled\"?-1:0},execCommand:function(cmd){var table=getTableItemsByRange(this).table;table.setAttribute(\"data-sort\",cmd==\"enablesort\"?\"sortEnabled\":\"sortDisabled\");cmd==\"enablesort\"?domUtils.addClass(table,\"sortEnabled\"):domUtils.removeClasses(table,\"sortEnabled\")}}};UE.plugins[\"contextmenu\"]=function(){var me=this;me.setOpt(\"enableContextMenu\",me.getOpt(\"enableContextMenu\")||true);if(me.getOpt(\"enableContextMenu\")===false){return}var lang=me.getLang(\"contextMenu\"),menu,items=me.options.contextMenu||[{label:lang[\"selectall\"],cmdName:\"selectall\"},{label:lang.cleardoc,cmdName:\"cleardoc\",exec:function(){if(confirm(lang.confirmclear)){this.execCommand(\"cleardoc\")}}},\"-\",{label:lang.unlink,cmdName:\"unlink\"},\"-\",{group:lang.paragraph,icon:\"justifyjustify\",subMenu:[{label:lang.justifyleft,cmdName:\"justify\",value:\"left\"},{label:lang.justifyright,cmdName:\"justify\",value:\"right\"},{label:lang.justifycenter,cmdName:\"justify\",value:\"center\"},{label:lang.justifyjustify,cmdName:\"justify\",value:\"justify\"}]},\"-\",{group:lang.table,icon:\"table\",subMenu:[{label:lang.inserttable,cmdName:\"inserttable\"},{label:lang.deletetable,cmdName:\"deletetable\"},\"-\",{label:lang.deleterow,cmdName:\"deleterow\"},{label:lang.deletecol,cmdName:\"deletecol\"},{label:lang.insertcol,cmdName:\"insertcol\"},{label:lang.insertcolnext,cmdName:\"insertcolnext\"},{label:lang.insertrow,cmdName:\"insertrow\"},{label:lang.insertrownext,cmdName:\"insertrownext\"},\"-\",{label:lang.insertcaption,cmdName:\"insertcaption\"},{label:lang.deletecaption,cmdName:\"deletecaption\"},{label:lang.inserttitle,cmdName:\"inserttitle\"},{label:lang.deletetitle,cmdName:\"deletetitle\"},{label:lang.inserttitlecol,cmdName:\"inserttitlecol\"},{label:lang.deletetitlecol,cmdName:\"deletetitlecol\"},\"-\",{label:lang.mergecells,cmdName:\"mergecells\"},{label:lang.mergeright,cmdName:\"mergeright\"},{label:lang.mergedown,cmdName:\"mergedown\"},\"-\",{label:lang.splittorows,cmdName:\"splittorows\"},{label:lang.splittocols,cmdName:\"splittocols\"},{label:lang.splittocells,cmdName:\"splittocells\"},\"-\",{label:lang.averageDiseRow,cmdName:\"averagedistributerow\"},{label:lang.averageDisCol,cmdName:\"averagedistributecol\"},\"-\",{label:lang.edittd,cmdName:\"edittd\",exec:function(){if(UE.ui[\"edittd\"]){new UE.ui[\"edittd\"](this)}this.getDialog(\"edittd\").open()}},{label:lang.edittable,cmdName:\"edittable\",exec:function(){if(UE.ui[\"edittable\"]){new UE.ui[\"edittable\"](this)}this.getDialog(\"edittable\").open()}},{label:lang.setbordervisible,cmdName:\"setbordervisible\"}]},{group:lang.tablesort,icon:\"tablesort\",subMenu:[{label:lang.enablesort,cmdName:\"enablesort\"},{label:lang.disablesort,cmdName:\"disablesort\"},\"-\",{label:lang.reversecurrent,cmdName:\"sorttable\",value:\"reversecurrent\"},{label:lang.orderbyasc,cmdName:\"sorttable\",value:\"orderbyasc\"},{label:lang.reversebyasc,cmdName:\"sorttable\",value:\"reversebyasc\"},{label:lang.orderbynum,cmdName:\"sorttable\",value:\"orderbynum\"},{label:lang.reversebynum,cmdName:\"sorttable\",value:\"reversebynum\"}]},{group:lang.borderbk,icon:\"borderBack\",subMenu:[{label:lang.setcolor,cmdName:\"interlacetable\",exec:function(){this.execCommand(\"interlacetable\")}},{label:lang.unsetcolor,cmdName:\"uninterlacetable\",exec:function(){this.execCommand(\"uninterlacetable\")}},{label:lang.setbackground,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#bbb\",\"#ccc\"]})}},{label:lang.unsetbackground,cmdName:\"cleartablebackground\",exec:function(){this.execCommand(\"cleartablebackground\")}},{label:lang.redandblue,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"red\",\"blue\"]})}},{label:lang.threecolorgradient,cmdName:\"settablebackground\",exec:function(){this.execCommand(\"settablebackground\",{repeat:true,colorList:[\"#aaa\",\"#bbb\",\"#ccc\"]})}}]},{group:lang.aligntd,icon:\"aligntd\",subMenu:[{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"top\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"middle\"}},{cmdName:\"cellalignment\",value:{align:\"left\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"center\",vAlign:\"bottom\"}},{cmdName:\"cellalignment\",value:{align:\"right\",vAlign:\"bottom\"}}]},{group:lang.aligntable,icon:\"aligntable\",subMenu:[{cmdName:\"tablealignment\",className:\"left\",label:lang.tableleft,value:\"left\"},{cmdName:\"tablealignment\",className:\"center\",label:lang.tablecenter,value:\"center\"},{cmdName:\"tablealignment\",className:\"right\",label:lang.tableright,value:\"right\"}]},\"-\",{label:lang.insertparagraphbefore,cmdName:\"insertparagraph\",value:true},{label:lang.insertparagraphafter,cmdName:\"insertparagraph\"},{label:lang[\"copy\"],cmdName:\"copy\"},{label:lang[\"paste\"],cmdName:\"paste\"}];if(!items.length){return}var uiUtils=UE.ui.uiUtils;me.addListener(\"contextmenu\",function(type,evt){var offset=uiUtils.getViewportOffsetByEvent(evt);me.fireEvent(\"beforeselectionchange\");if(menu){menu.destroy()}for(var i=0,ti,contextItems=[];ti=items[i];i++){var last;(function(item){if(item==\"-\"){if((last=contextItems[contextItems.length-1])&&last!==\"-\"){contextItems.push(\"-\")}}else if(item.hasOwnProperty(\"group\")){for(var j=0,cj,subMenu=[];cj=item.subMenu[j];j++){(function(subItem){if(subItem==\"-\"){if((last=subMenu[subMenu.length-1])&&last!==\"-\"){subMenu.push(\"-\")}else{subMenu.splice(subMenu.length-1)}}else{if((me.commands[subItem.cmdName]||UE.commands[subItem.cmdName]||subItem.query)&&(subItem.query?subItem.query():me.queryCommandState(subItem.cmdName))>-1){subMenu.push({label:subItem.label||me.getLang(\"contextMenu.\"+subItem.cmdName+(subItem.value||\"\"))||\"\",className:\"edui-for-\"+subItem.cmdName+(subItem.className?\" edui-for-\"+subItem.cmdName+\"-\"+subItem.className:\"\"),onclick:subItem.exec?function(){subItem.exec.call(me)}:function(){me.execCommand(subItem.cmdName,subItem.value)}})}}})(cj)}if(subMenu.length){function getLabel(){switch(item.icon){case\"table\":return me.getLang(\"contextMenu.table\");case\"justifyjustify\":return me.getLang(\"contextMenu.paragraph\");case\"aligntd\":return me.getLang(\"contextMenu.aligntd\");case\"aligntable\":return me.getLang(\"contextMenu.aligntable\");case\"tablesort\":return lang.tablesort;case\"borderBack\":return lang.borderbk;default:return\"\"}}contextItems.push({label:getLabel(),className:\"edui-for-\"+item.icon,subMenu:{items:subMenu,editor:me}})}}else{if((me.commands[item.cmdName]||UE.commands[item.cmdName]||item.query)&&(item.query?item.query.call(me):me.queryCommandState(item.cmdName))>-1){contextItems.push({label:item.label||me.getLang(\"contextMenu.\"+item.cmdName),className:\"edui-for-\"+(item.icon?item.icon:item.cmdName+(item.value||\"\")),onclick:item.exec?function(){item.exec.call(me)}:function(){me.execCommand(item.cmdName,item.value)}})}}})(ti)}if(contextItems[contextItems.length-1]==\"-\"){contextItems.pop()}menu=new UE.ui.Menu({items:contextItems,className:\"edui-contextmenu\",editor:me});menu.render();menu.showAt(offset);me.fireEvent(\"aftershowcontextmenu\",menu);domUtils.preventDefault(evt);if(browser.ie){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}});me.addListener(\"aftershowcontextmenu\",function(type,menu){if(me.zeroclipboard){var items=menu.items;for(var key in items){if(items[key].className==\"edui-for-copy\"){me.zeroclipboard.clip(items[key].getDom())}}}})};UE.plugins[\"shortcutmenu\"]=function(){var me=this,menu,items=me.options.shortcutMenu||[];if(!items.length){return}me.addListener(\"mouseup\",function(type,e){var me=this,customEvt={type:type,target:e.target||e.srcElement,screenX:e.screenX,screenY:e.screenY,clientX:e.clientX,clientY:e.clientY};setTimeout(function(){if(!menu){menu=new baidu.editor.ui.ShortCutMenu({editor:me,items:items.concat([]),theme:me.options.theme,className:\"edui-shortcutmenu\"});menu.render();me.fireEvent(\"afterrendershortcutmenu\",menu)}menu.show(customEvt,!!UE.plugins[\"contextmenu\"])});if(type===\"contextmenu\"){domUtils.preventDefault(e);if(browser.ie9below){var ieRange;try{ieRange=me.selection.getNative().createRange()}catch(e){return}if(ieRange.item){var range=new dom.Range(me.document);range.selectNode(ieRange.item(0)).select(true,true)}}}});me.addListener(\"keydown\",function(type){if(type===\"keydown\"){menu&&!menu.isHidden&&menu.hide()}})};UE.plugins[\"basestyle\"]=function(){var basestyles={bold:[\"strong\",\"b\"],italic:[\"em\",\"i\"],subscript:[\"sub\"],superscript:[\"sup\"]},getObj=function(editor,tagNames){return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames)},me=this;me.addshortcutkey({Bold:\"ctrl+66\",Italic:\"ctrl+73\",Underline:\"ctrl+85\"});me.addInputRule(function(root){utils.each(root.getNodesByTagName(\"b i\"),function(node){switch(node.tagName){case\"b\":node.tagName=\"strong\";break;case\"i\":node.tagName=\"em\"}})});for(var style in basestyles){(function(cmd,tagNames){me.commands[cmd]={execCommand:function(cmdName){var range=me.selection.getRange(),obj=getObj(this,tagNames);if(range.collapsed){if(obj){var tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle(tagNames);range.setStartBefore(tmpText);domUtils.remove(tmpText)}else{var tmpNode=range.document.createElement(tagNames[0]);if(cmdName==\"superscript\"||cmdName==\"subscript\"){tmpText=me.document.createTextNode(\"\");range.insertNode(tmpText).removeInlineStyle([\"sub\",\"sup\"]).setStartBefore(tmpText).collapse(true)}range.insertNode(tmpNode).setStart(tmpNode,0)}range.collapse(true)}else{if(cmdName==\"superscript\"||cmdName==\"subscript\"){if(!obj||obj.tagName.toLowerCase()!=cmdName){range.removeInlineStyle([\"sub\",\"sup\"])}}obj?range.removeInlineStyle(tagNames):range.applyInlineStyle(tagNames[0])}range.select()},queryCommandState:function(){return getObj(this,tagNames)?1:0}}})(style,basestyles[style])}};UE.plugins[\"elementpath\"]=function(){var currentLevel,tagNames,me=this;me.setOpt(\"elementPathEnabled\",true);if(!me.options.elementPathEnabled){return}me.commands[\"elementpath\"]={execCommand:function(cmdName,level){var start=tagNames[level],range=me.selection.getRange();currentLevel=level*1;range.selectNode(start).select()},queryCommandValue:function(){var parents=[].concat(this.selection.getStartElementPath()).reverse(),names=[];tagNames=parents;for(var i=0,ci;ci=parents[i];i++){if(ci.nodeType==3){continue}var name=ci.tagName.toLowerCase();if(name==\"img\"&&ci.getAttribute(\"anchorname\")){name=\"anchor\"}names[i]=name;if(currentLevel==i){currentLevel=-1;break}}return names}}};UE.plugins[\"formatmatch\"]=function(){var me=this,list=[],img,flag=0;me.addListener(\"reset\",function(){list=[];flag=0});function addList(type,evt){if(browser.webkit){var target=evt.target.tagName==\"IMG\"?evt.target:null}function addFormat(range){if(text){range.selectNode(text)}return range.applyInlineStyle(list[list.length-1].tagName,null,list)}me.undoManger&&me.undoManger.save();var range=me.selection.getRange(),imgT=target||range.getClosedNode();if(img&&imgT&&imgT.tagName==\"IMG\"){imgT.style.cssText+=\";float:\"+(img.style.cssFloat||img.style.styleFloat||\"none\")+\";display:\"+(img.style.display||\"inline\");img=null}else{if(!img){var collapsed=range.collapsed;if(collapsed){var text=me.document.createTextNode(\"match\");range.insertNode(text).select()}me.__hasEnterExecCommand=true;var removeFormatAttributes=me.options.removeFormatAttributes;me.options.removeFormatAttributes=\"\";me.execCommand(\"removeformat\");me.options.removeFormatAttributes=removeFormatAttributes;me.__hasEnterExecCommand=false;range=me.selection.getRange();if(list.length){addFormat(range)}if(text){range.setStartBefore(text).collapse(true)}range.select();text&&domUtils.remove(text)}}me.undoManger&&me.undoManger.save();me.removeListener(\"mouseup\",addList);flag=0}me.commands[\"formatmatch\"]={execCommand:function(cmdName){if(flag){flag=0;list=[];me.removeListener(\"mouseup\",addList);return}var range=me.selection.getRange();img=range.getClosedNode();if(!img||img.tagName!=\"IMG\"){range.collapse(true).shrinkBoundary();var start=range.startContainer;list=domUtils.findParents(start,true,function(node){return!domUtils.isBlockElm(node)&&node.nodeType==1});for(var i=0,ci;ci=list[i];i++){if(ci.tagName==\"A\"){list.splice(i,1);break}}}me.addListener(\"mouseup\",addList);flag=1},queryCommandState:function(){return flag},notNeedUndo:1}};UE.plugin.register(\"searchreplace\",function(){var me=this;var _blockElm={table:1,tbody:1,tr:1,ol:1,ul:1};var lastRng=null;function getText(node){var text=node.nodeType==3?node.nodeValue:node[browser.ie?\"innerText\":\"textContent\"];return text.replace(domUtils.fillChar,\"\")}function findTextInString(textContent,opt,currentIndex){var str=opt.searchStr;var reg=new RegExp(str,\"g\"+(opt.casesensitive?\"\":\"i\")),match;if(opt.dir==-1){textContent=textContent.substr(0,currentIndex);textContent=textContent.split(\"\").reverse().join(\"\");str=str.split(\"\").reverse().join(\"\");match=reg.exec(textContent);if(match){return currentIndex-match.index-str.length}}else{textContent=textContent.substr(currentIndex);match=reg.exec(textContent);if(match){return match.index+currentIndex}}return-1}function findTextBlockElm(node,currentIndex,opt){var textContent,index,methodName=opt.all||opt.dir==1?\"getNextDomNode\":\"getPreDomNode\";if(domUtils.isBody(node)){node=node.firstChild}var first=1;while(node){textContent=getText(node);index=findTextInString(textContent,opt,currentIndex);first=0;if(index!=-1){return{node:node,index:index}}node=domUtils[methodName](node);while(node&&_blockElm[node.nodeName.toLowerCase()]){node=domUtils[methodName](node,true)}if(node){currentIndex=opt.dir==-1?getText(node).length:0}}}function findNTextInBlockElm(node,index,str){var currentIndex=0,currentNode=node.firstChild,currentNodeLength=0,result;while(currentNode){if(currentNode.nodeType==3){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){return{node:currentNode,index:currentNodeLength-(currentIndex-index)}}}else if(!dtd.$empty[currentNode.tagName]){currentNodeLength=getText(currentNode).replace(/(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\"\").length;currentIndex+=currentNodeLength;if(currentIndex>=index){result=findNTextInBlockElm(currentNode,currentNodeLength-(currentIndex-index),str);if(result){return result}}}currentNode=domUtils.getNextDomNode(currentNode)}}function searchReplace(me,opt){var rng=lastRng||me.selection.getRange(),startBlockNode,searchStr=opt.searchStr,span=me.document.createElement(\"span\");span.innerHTML=\"$$ueditor_searchreplace_key$$\";rng.shrinkBoundary(true);if(!rng.collapsed){rng.select();var rngText=me.selection.getText();if(new RegExp(\"^\"+opt.searchStr+\"$\",opt.casesensitive?\"\":\"i\").test(rngText)){if(opt.replaceStr!=undefined){replaceText(rng,opt.replaceStr);rng.select();return true}else{rng.collapse(opt.dir==-1)}}}rng.insertNode(span);rng.enlargeToBlockElm(true);startBlockNode=rng.startContainer;var currentIndex=getText(startBlockNode).indexOf(\"$$ueditor_searchreplace_key$$\");rng.setStartBefore(span);domUtils.remove(span);var result=findTextBlockElm(startBlockNode,currentIndex,opt);if(result){var rngStart=findNTextInBlockElm(result.node,result.index,searchStr);var rngEnd=findNTextInBlockElm(result.node,result.index+searchStr.length,searchStr);rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index);if(opt.replaceStr!==undefined){replaceText(rng,opt.replaceStr)}rng.select();return true}else{rng.setCursor()}}function replaceText(rng,str){str=me.document.createTextNode(str);rng.deleteContents().insertNode(str)}return{commands:{searchreplace:{execCommand:function(cmdName,opt){utils.extend(opt,{all:false,casesensitive:false,dir:1},true);var num=0;if(opt.all){lastRng=null;var rng=me.selection.getRange(),first=me.body.firstChild;if(first&&first.nodeType==1){rng.setStart(first,0);rng.shrinkBoundary(true)}else if(first.nodeType==3){rng.setStartBefore(first)}rng.collapse(true).select(true);if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}while(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}else{if(opt.replaceStr!==undefined){me.fireEvent(\"saveScene\")}if(searchReplace(this,opt)){num++;lastRng=me.selection.getRange();lastRng.collapse(opt.dir==-1)}if(num){me.fireEvent(\"saveScene\")}}return num},notNeedUndo:1}},bindEvents:{clearlastSearchResult:function(){lastRng=null}}}});UE.plugins[\"customstyle\"]=function(){var me=this;me.setOpt({customstyle:[{tag:\"h1\",name:\"tc\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;\"},{tag:\"h1\",name:\"tl\",style:\"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;\"},{tag:\"span\",name:\"im\",style:\"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"},{tag:\"span\",name:\"hi\",style:\"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"}]});me.commands[\"customstyle\"]={execCommand:function(cmdName,obj){var me=this,tagName=obj.tag,node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true),range,bk,tmpObj={};for(var p in obj){if(obj[p]!==undefined)tmpObj[p]=obj[p]}delete tmpObj.tag;if(node&&node.getAttribute(\"label\")==obj.label){range=this.selection.getRange();bk=range.createBookmark();if(range.collapsed){if(dtd.$block[node.tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(node,fillNode);node.parentNode.insertBefore(fillNode,node);domUtils.remove(node)}else{domUtils.remove(node,true)}}else{var common=domUtils.getCommonAncestor(bk.start,bk.end),nodes=domUtils.getElementsByTagName(common,tagName);if(new RegExp(tagName,\"i\").test(common.tagName)){nodes.push(common)}for(var i=0,ni;ni=nodes[i++];){if(ni.getAttribute(\"label\")==obj.label){var ps=domUtils.getPosition(ni,bk.start),pe=domUtils.getPosition(ni,bk.end);if((ps&domUtils.POSITION_FOLLOWING||ps&domUtils.POSITION_CONTAINS)&&(pe&domUtils.POSITION_PRECEDING||pe&domUtils.POSITION_CONTAINS))if(dtd.$block[tagName]){var fillNode=me.document.createElement(\"p\");domUtils.moveChild(ni,fillNode);ni.parentNode.insertBefore(fillNode,ni)}domUtils.remove(ni,true)}}node=domUtils.findParent(common,function(node){return node.getAttribute(\"label\")==obj.label},true);if(node){domUtils.remove(node,true)}}range.moveToBookmark(bk).select()}else{if(dtd.$block[tagName]){this.execCommand(\"paragraph\",tagName,tmpObj,\"customstyle\");range=me.selection.getRange();if(!range.collapsed){range.collapse();node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")==obj.label},true);var pNode=me.document.createElement(\"p\");domUtils.insertAfter(node,pNode);domUtils.fillNode(me.document,pNode);range.setStart(pNode,0).setCursor()}}else{range=me.selection.getRange();if(range.collapsed){node=me.document.createElement(tagName);domUtils.setAttributes(node,tmpObj);range.insertNode(node).setStart(node,0).setCursor();return}bk=range.createBookmark();range.applyInlineStyle(tagName,tmpObj).moveToBookmark(bk).select()}}},queryCommandValue:function(){var parent=domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return node.getAttribute(\"label\")});return parent?parent.getAttribute(\"label\"):\"\"}};me.addListener(\"keyup\",function(type,evt){var keyCode=evt.keyCode||evt.which;if(keyCode==32||keyCode==13){var range=me.selection.getRange();if(range.collapsed){var node=domUtils.findParent(me.selection.getStart(),function(node){return node.getAttribute(\"label\")},true);if(node&&dtd.$block[node.tagName]&&domUtils.isEmptyNode(node)){var p=me.document.createElement(\"p\");domUtils.insertAfter(node,p);domUtils.fillNode(me.document,p);domUtils.remove(node);range.setStart(p,0).setCursor()}}}})};UE.plugins[\"catchremoteimage\"]=function(){var me=this,ajax=UE.ajax;if(me.options.catchRemoteImageEnable===false){return}me.setOpt({catchRemoteImageEnable:false});var catcherLocalDomain=me.getOpt(\"catcherLocalDomain\"),catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\")),catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\"),catcherFieldName=me.getOpt(\"catcherFieldName\");me.addListener(\"serverConfigLoaded\",function(){catcherLocalDomain=me.getOpt(\"catcherLocalDomain\");catcherActionUrl=me.getActionUrl(me.getOpt(\"catcherActionName\"));catcherUrlPrefix=me.getOpt(\"catcherUrlPrefix\");catcherFieldName=me.getOpt(\"catcherFieldName\")});me.addListener(\"afterpaste\",function(){me.fireEvent(\"catchremoteimage\")});var catchRemoteImageCatching=false;function sendApi(imgs,callbacks){var params=utils.serializeParam(me.queryCommandValue(\"serverparam\"))||\"\",url=utils.formatUrl(catcherActionUrl+(catcherActionUrl.indexOf(\"?\")===-1?\"?\":\"&\")+params),isJsonp=utils.isCrossDomainUrl(url),opt={method:\"POST\",dataType:isJsonp?\"jsonp\":\"\",timeout:6e4,headers:me.options.serverHeaders||{},onsuccess:callbacks[\"success\"],onerror:callbacks[\"error\"]};opt[catcherFieldName]=imgs;ajax.request(url,opt)}function catchElement(type,ele,imageUrl){sendApi([imageUrl],{success:function(r){try{var info=r.state!==undefined?r:eval(\"(\"+r.responseText+\")\")}catch(e){return}var oldSrc,newSrc,oldBgIMG,newBgIMG,list=info.list;var catchFailList=[];var catchSuccessList=[];var failIMG=me.options.themePath+me.options.theme+\"/images/img-cracked.png\";var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\";var cj=list[0];switch(type){case\"image\":oldSrc=ele.getAttribute(\"_src\")||ele.src||\"\";if(cj.state===\"SUCCESS\"){newSrc=catcherUrlPrefix+cj.url;domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:newSrc,_src:newSrc,\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{domUtils.removeClasses(ele,\"uep-loading\");domUtils.setAttributes(ele,{src:failIMG,_src:failIMG,\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break;case\"background\":oldBgIMG=ele.getAttribute(\"data-background\")||\"\";if(cj.state===\"SUCCESS\"){newBgIMG=catcherUrlPrefix+cj.url;ele.style.cssText=ele.style.cssText.replace(loadingIMG,newBgIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"success\"});catchSuccessList.push(ele)}else{ele.style.cssText=ele.style.cssText.replace(loadingIMG,failIMG);domUtils.removeAttributes(ele,\"data-background\");domUtils.setAttributes(ele,{\"data-catch-result\":\"fail\"});catchFailList.push(ele)}break}me.fireEvent(\"catchremotesuccess\",catchSuccessList,catchFailList);catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)},error:function(){me.fireEvent(\"catchremoteerror\");catchRemoteImageCatching=false;setTimeout(function(){me.fireEvent(\"catchremoteimage\")},0)}})}function catchRemoteImage(){if(catchRemoteImageCatching){return}catchRemoteImageCatching=true;var loadingIMG=me.options.themePath+me.options.theme+\"/images/spacer.gif\",imgs=me.document.querySelectorAll('[style*=\"url\"],img'),test=function(src,urls){if(src.indexOf(location.host)!==-1||/(^\\.)|(^\\/)/.test(src)){return true}if(urls){for(var j=0,url;url=urls[j++];){if(src.indexOf(url)!==-1){return true}}}return false};for(var i=0,ci;ci=imgs[i++];){if(ci.getAttribute(\"data-word-image\")||ci.getAttribute(\"data-catch-result\")){continue}if(ci.nodeName===\"IMG\"){var src=ci.getAttribute(\"_src\")||ci.src||\"\";if(/^(https?|ftp):/i.test(src)&&!test(src,catcherLocalDomain)){catchElement(\"image\",ci,src);domUtils.setAttributes(ci,{class:\"loadingclass\",_src:src,src:loadingIMG});return}}else{var backgroundImageurl=ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/,\"\").replace(/[\\'\\\"]?\\).*/,\"\");if(/^(https?|ftp):/i.test(backgroundImageurl)&&!test(backgroundImageurl,catcherLocalDomain)){catchElement(\"background\",ci,backgroundImageurl);ci.style.cssText=ci.style.cssText.replace(backgroundImageurl,loadingIMG);domUtils.setAttributes(ci,{\"data-background\":backgroundImageurl});return}}}}me.addListener(\"catchremoteimage\",function(){catchRemoteImage()})};UE.commands[\"insertparagraph\"]={execCommand:function(cmdName,front){var me=this,range=me.selection.getRange(),start=range.startContainer,tmpNode;while(start){if(domUtils.isBody(start)){break}tmpNode=start;start=start.parentNode}if(tmpNode){var p=me.document.createElement(\"p\");if(front){tmpNode.parentNode.insertBefore(p,tmpNode)}else{tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling)}domUtils.fillNode(me.document,p);range.setStart(p,0).setCursor(false,true)}}};UE.plugins[\"template\"]=function(){UE.commands[\"template\"]={execCommand:function(cmd,obj){obj.html&&this.execCommand(\"inserthtml\",obj.html)}};this.addListener(\"click\",function(type,evt){var el=evt.target||evt.srcElement,range=this.selection.getRange();var tnode=domUtils.findParent(el,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);tnode&&range.selectNode(tnode).shrinkBoundary().select()});this.addListener(\"keydown\",function(type,evt){var range=this.selection.getRange();if(!range.collapsed){if(!evt.ctrlKey&&!evt.metaKey&&!evt.shiftKey&&!evt.altKey){var tnode=domUtils.findParent(range.startContainer,function(node){if(node.className&&domUtils.hasClass(node,\"ue_t\")){return node}},true);if(tnode){domUtils.removeClasses(tnode,[\"ue_t\"])}}}})};UE.plugin.register(\"autoupload\",function(){function sendAndInsertFile(file,editor){var me=editor;var fieldName,urlPrefix,maxSize,allowFiles,actionUrl,loadingHtml,errorHandler,successHandler,filetype=/image\\/\\w+/i.test(file.type)?\"image\":\"file\",loadingId=\"loading_\"+(+new Date).toString(36);fieldName=me.getOpt(filetype+\"FieldName\");urlPrefix=me.getOpt(filetype+\"UrlPrefix\");maxSize=me.getOpt(filetype+\"MaxSize\");allowFiles=me.getOpt(filetype+\"AllowFiles\");actionUrl=me.getActionUrl(me.getOpt(filetype+\"ActionName\"));errorHandler=function(title){var loader=me.document.getElementById(loadingId);loader&&domUtils.remove(loader);me.fireEvent(\"showmessage\",{id:loadingId,content:title,type:\"error\",timeout:4e3})};if(filetype===\"image\"){loadingHtml='<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">';successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);if(loader){domUtils.removeClasses(loader,\"uep-loading\");loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",data.original||\"\");loader.removeAttribute(\"id\");me.trigger(\"contentchange\",loader)}}}else{loadingHtml=\"<p>\"+'<img class=\"uep-loading\" id=\"'+loadingId+'\" src=\"'+me.options.themePath+me.options.theme+'/images/spacer.gif\">'+\"</p>\";successHandler=function(data){var link=urlPrefix+data.url,loader=me.document.getElementById(loadingId);var rng=me.selection.getRange(),bk=rng.createBookmark();rng.selectNode(loader).select();me.execCommand(\"insertfile\",{url:link});rng.moveToBookmark(bk).select()}}me.execCommand(\"inserthtml\",loadingHtml);if(!me.getOpt(filetype+\"ActionName\")){errorHandler(me.getLang(\"autoupload.errorLoadConfig\"));return}if(file.size>maxSize){errorHandler(me.getLang(\"autoupload.exceedSizeError\"));return}var fileext=file.name?file.name.substr(file.name.lastIndexOf(\".\")):\"\";if(fileext&&filetype!=\"image\"||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")==-1){errorHandler(me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(fieldName,file,file.name);UE.api.requestAction(me,me.getOpt(filetype+\"ActionName\"),{data:formData}).then(function(res){successHandler(res.data)}).catch(function(err){errorHandler(me.getLang(\"autoupload.loadError\"))})};var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(\"image\"===filetype&&imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"AutoUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"AutoUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}}function getPasteImage(e){return e.clipboardData&&e.clipboardData.items&&e.clipboardData.items.length==1&&/^image\\//.test(e.clipboardData.items[0].type)?e.clipboardData.items:null}function getDropImage(e){return e.dataTransfer&&e.dataTransfer.files?e.dataTransfer.files:null}return{outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}});utils.each(root.getNodesByTagName(\"p\"),function(n){if(/\\bloadpara\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},bindEvents:{defaultOptions:{enableDragUpload:true,enablePasteUpload:true},ready:function(e){var me=this;if(window.FormData&&window.FileReader){var handler=function(e){var hasImg=false,items;items=e.type==\"paste\"?getPasteImage(e):getDropImage(e);if(items){var len=items.length,file;while(len--){file=items[len];if(file.getAsFile)file=file.getAsFile();if(file&&file.size>0){sendAndInsertFile(file,me);hasImg=true}}hasImg&&e.preventDefault()}};if(me.getOpt(\"enablePasteUpload\")!==false){domUtils.on(me.body,\"paste \",handler)}if(me.getOpt(\"enableDragUpload\")!==false){domUtils.on(me.body,\"drop\",handler);domUtils.on(me.body,\"dragover\",function(e){if(e.dataTransfer.types[0]==\"Files\"){e.preventDefault()}})}else{if(browser.gecko){domUtils.on(me.body,\"drop\",function(e){if(getDropImage(e)){e.preventDefault()}})}}utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-left:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)}}}}});UE.plugin.register(\"section\",function(){function Section(option){this.tag=\"\";this.level=-1,this.dom=null;this.nextSection=null;this.previousSection=null;this.parentSection=null;this.startAddress=[];this.endAddress=[];this.children=[]}function getSection(option){var section=new Section;return utils.extend(section,option)}function getNodeFromAddress(startAddress,root){var current=root;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var me=this;return{bindMultiEvents:{type:\"aftersetcontent afterscencerestore\",handler:function(){me.fireEvent(\"updateSections\")}},bindEvents:{ready:function(){me.fireEvent(\"updateSections\");domUtils.on(me.body,\"drop paste\",function(){me.fireEvent(\"updateSections\")})},afterexeccommand:function(type,cmd){if(cmd==\"paragraph\"){me.fireEvent(\"updateSections\")}},keyup:function(type,e){var me=this,range=me.selection.getRange();if(range.collapsed!=true){me.fireEvent(\"updateSections\")}else{var keyCode=e.keyCode||e.which;if(keyCode==13||keyCode==8||keyCode==46){me.fireEvent(\"updateSections\")}}}},commands:{getsections:{execCommand:function(cmd,levels){var levelFn=levels||[\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\"];for(var i=0;i<levelFn.length;i++){if(typeof levelFn[i]==\"string\"){levelFn[i]=function(fn){return function(node){return node.tagName==fn.toUpperCase()}}(levelFn[i])}else if(typeof levelFn[i]!=\"function\"){levelFn[i]=function(node){return null}}}function getSectionLevel(node){for(var i=0;i<levelFn.length;i++){if(levelFn[i](node))return i}return-1}var me=this,Directory=getSection({level:-1,title:\"root\"}),previous=Directory;function traversal(node,Directory){var level,tmpSection=null,parent,child,children=node.childNodes;for(var i=0,len=children.length;i<len;i++){child=children[i];level=getSectionLevel(child);if(level>=0){var address=me.selection.getRange().selectNode(child).createAddress(true).startAddress,current=getSection({tag:child.tagName,title:child.innerText||child.textContent||\"\",level:level,dom:child,startAddress:utils.clone(address,[]),endAddress:utils.clone(address,[]),children:[]});previous.nextSection=current;current.previousSection=previous;parent=previous;while(level<=parent.level){parent=parent.parentSection}current.parentSection=parent;parent.children.push(current);tmpSection=previous=current}else{child.nodeType===1&&traversal(child,Directory);tmpSection&&tmpSection.endAddress[tmpSection.endAddress.length-1]++}}}traversal(me.body,Directory);return Directory},notNeedUndo:true},movesection:{execCommand:function(cmd,sourceSection,targetSection,isAfter){var me=this,targetAddress,target;if(!sourceSection||!targetSection||targetSection.level==-1)return;targetAddress=isAfter?targetSection.endAddress:targetSection.startAddress;target=getNodeFromAddress(targetAddress,me.body);if(!targetAddress||!target||isContainsAddress(sourceSection.startAddress,sourceSection.endAddress,targetAddress))return;var startNode=getNodeFromAddress(sourceSection.startAddress,me.body),endNode=getNodeFromAddress(sourceSection.endAddress,me.body),current,nextNode;if(isAfter){current=endNode;while(current&&!(domUtils.getPosition(startNode,current)&domUtils.POSITION_FOLLOWING)){nextNode=current.previousSibling;domUtils.insertAfter(target,current);if(current==startNode)break;current=nextNode}}else{current=startNode;while(current&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;target.parentNode.insertBefore(current,target);if(current==endNode)break;current=nextNode}}me.fireEvent(\"updateSections\");function isContainsAddress(startAddress,endAddress,addressTarget){var isAfterStartAddress=false,isBeforeEndAddress=false;for(var i=0;i<startAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]>startAddress[i]){isAfterStartAddress=true;break}else if(addressTarget[i]<startAddress[i]){break}}for(var i=0;i<endAddress.length;i++){if(i>=addressTarget.length)break;if(addressTarget[i]<startAddress[i]){isBeforeEndAddress=true;break}else if(addressTarget[i]>startAddress[i]){break}}return isAfterStartAddress&&isBeforeEndAddress}}},deletesection:{execCommand:function(cmd,section,keepChildren){var me=this;if(!section)return;function getNodeFromAddress(startAddress){var current=me.body;for(var i=0;i<startAddress.length;i++){if(!current.childNodes)return null;current=current.childNodes[startAddress[i]]}return current}var startNode=getNodeFromAddress(section.startAddress),endNode=getNodeFromAddress(section.endAddress),current=startNode,nextNode;if(!keepChildren){while(current&&domUtils.inDoc(endNode,me.document)&&!(domUtils.getPosition(current,endNode)&domUtils.POSITION_FOLLOWING)){nextNode=current.nextSibling;domUtils.remove(current);current=nextNode}}else{domUtils.remove(current)}me.fireEvent(\"updateSections\")}},selectsection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:utils.clone(section.startAddress,[]),endAddress:utils.clone(section.endAddress,[])};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).select().scrollToView();return true},notNeedUndo:true},scrolltosection:{execCommand:function(cmd,section){if(!section&&!section.dom)return false;var me=this,range=me.selection.getRange(),address={startAddress:section.startAddress,endAddress:section.endAddress};address.endAddress[address.endAddress.length-1]++;range.moveToAddress(address).scrollToView();return true},notNeedUndo:true}}}});UE.plugin.register(\"simpleupload\",function(){var me=this,isLoaded=false,containerBtn;function initUploadBtn(){var input=document.createElement(\"input\");input.style.cssText=\"position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer;font-size:0;opacity:0;\";input.type=\"file\";containerBtn.appendChild(input);domUtils.on(input,\"click\",function(e){var toolbarCallback=me.getOpt(\"toolbarCallback\");if(toolbarCallback){if(true===toolbarCallback(\"simpleupload\",me)){e.stopPropagation();e.preventDefault()}}});domUtils.on(input,\"change\",function(e){var state=me.queryCommandState(\"simpleupload\");if(state===-1){return}if(!input.value){return}var loadingId=UE.dialog.loadingPlaceholder(me);if(!me.getOpt(\"imageActionName\")){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.errorLoadConfig\"));return}var allowFiles=me.getOpt(\"imageAllowFiles\");var filename=input.value,fileext=filename?filename.substr(filename.lastIndexOf(\".\")):\"\";if(!fileext||allowFiles&&(allowFiles.join(\"\")+\".\").indexOf(fileext.toLowerCase()+\".\")===-1){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,me.getLang(\"autoupload.exceedTypeError\"));return}var upload=function(file){const formData=new FormData;formData.append(me.getOpt(\"imageFieldName\"),file,file.name);UE.api.requestAction(me,me.getOpt(\"imageActionName\"),{data:formData}).then(function(res){if(\"SUCCESS\"===res.data.state&&res.data.url){const loader=me.document.getElementById(loadingId);domUtils.removeClasses(loader,\"uep-loading\");const link=me.options.imageUrlPrefix+res.data.url;loader.setAttribute(\"src\",link);loader.setAttribute(\"_src\",link);loader.setAttribute(\"alt\",res.data.original||\"\");loader.removeAttribute(\"id\");me.fireEvent(\"contentchange\");me.fireEvent(\"uploadsuccess\",{res:res.data,type:\"image\"})}else{UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,res.data.state)}}).catch(function(err){UE.dialog.removeLoadingPlaceholder(me,loadingId);UE.dialog.tipError(me,err)})};var file=input.files[0];var imageCompressEnable=me.getOpt(\"imageCompressEnable\"),imageMaxSize=me.getOpt(\"imageMaxSize\"),imageCompressBorder=me.getOpt(\"imageCompressBorder\");if(imageCompressEnable){UE.image.compress(file,{maxSizeMB:imageMaxSize/1024/1024,maxWidthOrHeight:imageCompressBorder}).then(function(compressedFile){if(me.options.debug){console.log(\"SimpleUpload.CompressImage\",(compressedFile.size/file.size*100).toFixed(2)+\"%\")}upload(compressedFile)}).catch(function(err){console.error(\"SimpleUpload.CompressImage.error\",err);upload(file)})}else{upload(file)}});var stateTimer;me.addListener(\"selectionchange\",function(){clearTimeout(stateTimer);stateTimer=setTimeout(function(){var state=me.queryCommandState(\"simpleupload\");if(state===-1){input.disabled=\"disabled\"}else{input.disabled=false}},400)});isLoaded=true}return{bindEvents:{ready:function(){utils.cssRule(\"loading\",\".uep-loading{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;}\\n\"+\".uep-loading-error{display:inline-block;cursor:default;background: url('\"+this.options.themePath+this.options.theme+\"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\"+\"}\",this.document)},simpleuploadbtnready:function(type,container){containerBtn=container;me.afterConfigReady(initUploadBtn)}},outputRule:function(root){utils.each(root.getNodesByTagName(\"img\"),function(n){if(/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))){n.parentNode.removeChild(n)}})},commands:{simpleupload:{queryCommandState:function(){return isLoaded?0:-1}}}}});UE.plugin.register(\"serverparam\",function(){var me=this,serverParam={};return{commands:{serverparam:{execCommand:function(cmd,key,value){if(key===undefined||key===null){serverParam={}}else if(utils.isString(key)){if(value===undefined||value===null){delete serverParam[key]}else{serverParam[key]=value}}else if(utils.isObject(key)){utils.extend(serverParam,key,false)}else if(utils.isFunction(key)){utils.extend(serverParam,key(),false)}},queryCommandValue:function(){return serverParam||{}}}}}});UE.plugin.register(\"insertfile\",function(){var me=this;function getFileIcon(url){var ext=url.substr(url.lastIndexOf(\".\")+1).toLowerCase(),maps={ai:\"ai.svg\",apk:\"apk.svg\",chm:\"chm.svg\",css:\"css.svg\",doc:\"doc.svg\",docx:\"docx.svg\",dwg:\"dwg.svg\",gif:\"gif.svg\",html:\"html.svg\",jpeg:\"jpeg.svg\",jpg:\"jpg.svg\",log:\"log.svg\",mp3:\"mp3.svg\",mp4:\"mp4.svg\",pdf:\"pdf.svg\",png:\"png.svg\",ppt:\"ppt.svg\",pptx:\"pptx.svg\",psd:\"psd.svg\",rar:\"rar.svg\",svg:\"svg.svg\",torrent:\"torrent.svg\",txt:\"txt.svg\",unknown:\"unknown.svg\",xls:\"xls.svg\",xlsx:\"xlsx.svg\",zip:\"zip.svg\"};return maps[ext]?maps[ext]:maps[\"unknown\"]}return{commands:{insertfile:{execCommand:function(command,filelist){filelist=utils.isArray(filelist)?filelist:[filelist];if(me.fireEvent(\"beforeinsertfile\",filelist)===true){return}var i,item,icon,title,html=\"\",URL=me.getOpt(\"UEDITOR_HOME_URL\"),iconDir=me.options.themePath+me.options.theme+\"/exts/\";for(i=0;i<filelist.length;i++){item=filelist[i];icon=iconDir+getFileIcon(item.url);title=item.title||item.url.substr(item.url.lastIndexOf(\"/\")+1);html+=\"<p>\"+'<a style=\"background:#EEE;padding:10px;border-radius:5px;line-height:1.5em;display:inline-flex;align-items:center;\" href=\"'+item.url+'\" title=\"'+title+'\" target=\"_blank\">'+'<img style=\"vertical-align:middle;margin-right:0.5em;height:1.5em;\" src=\"'+icon+'\" _src=\"'+icon+'\" />'+'<span style=\"color:#111111;line-height:1.5em;flex-grow:1;\">'+title+\"</span>\"+\"</a>\"+\"</p>\"}me.execCommand(\"insertHtml\",html);me.fireEvent(\"afterinsertfile\",filelist)}}}}});UE.plugins[\"markdown-shortcut\"]=function(){if(!UE.browser.chrome){return}const me=this;const getCleanHtml=function(node){let html=node.innerHTML;html=html.replace(/[\\u200b]*/g,\"\");return html};let shortCuts=[];for(let i=1;i<=6;i++){const regExp=new RegExp(\"^\\\\t?\"+Array(i+1).join(\"#\")+\"(\\\\s|&nbsp;)\");(function(command){shortCuts.push({name:\"Head\"+i,tagName:[\"P\"],key:[\" \"],offset:[i+1,i+2],match:[regExp],callback:function(param){me.__hasEnterExecCommand=true;me.execCommand(\"paragraph\",command);let range=me.selection.getRange();let node=range.startContainer;let html=getCleanHtml(node);html=html.replace(regExp,\"\");if(!html){html=domUtils.fillChar}node.innerHTML=html;me.__hasEnterExecCommand=false}})})(\"h\"+i)}me.on(\"ready\",function(){domUtils.on(me.body,\"keyup\",function(e){let range=me.selection.getRange();if(range.endOffset!==range.startOffset){return}let key=e.key;let offset=range.startOffset;const node=range.startContainer.parentNode;let html=getCleanHtml(node);let tagName=node.tagName;for(let s of shortCuts){if(!s.tagName.includes(tagName)){continue}if(!s.key.includes(key)){continue}if(!s.offset.includes(offset)){continue}for(let m of s.match){let match=html.match(m);if(match){s.callback({node:node});break}}}})})};UE.plugins[\"quick-operate\"]=function(){if(!UE.browser.chrome){return}return;let me=this;const uiUtils=UE.ui.uiUtils;me.on(\"ready\",function(){let quickOperate=new UE.ui.QuickOperate({className:\"edui-quick-operate\",editor:me});quickOperate.render();let quickOperateNode={root:null,target:null};domUtils.on(quickOperate.el,\"mouseenter\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.add(\"edui-quick-operate-active\")});domUtils.on(quickOperate.el,\"mouseleave\",function(evt){quickOperateNode.root&&quickOperateNode.root.classList&&quickOperateNode.root.classList.remove(\"edui-quick-operate-active\")});domUtils.on(me.body,\"mouseout\",function(evt){});domUtils.on(me.body,\"mouseover\",function(evt){const node=evt.target;let rootNode=node;for(;rootNode.parentNode&&rootNode.parentNode.tagName!==\"BODY\";){rootNode=rootNode.parentNode}quickOperateNode.root=rootNode;quickOperateNode.target=node;const rect=node.getBoundingClientRect();const offset=uiUtils.getClientRect(node);offset.left=offset.left-55;quickOperate.showAt(offset)})})};var baidu=baidu||{};baidu.editor=baidu.editor||{};UE.ui=baidu.editor.ui={};(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils;var magic=\"$EDITORUI\";var root=window[magic]={};var uidMagic=\"ID\"+magic;var uidCount=0;var uiUtils=baidu.editor.ui.uiUtils={uid:function(obj){return obj?obj[uidMagic]||(obj[uidMagic]=++uidCount):++uidCount},hook:function(fn,callback){var dg;if(fn&&fn._callbacks){dg=fn}else{dg=function(){var q;if(fn){q=fn.apply(this,arguments)}var callbacks=dg._callbacks;var k=callbacks.length;while(k--){var r=callbacks[k].apply(this,arguments);if(q===undefined){q=r}}return q};dg._callbacks=[]}dg._callbacks.push(callback);return dg},createElementByHtml:function(html){var el=document.createElement(\"div\");el.innerHTML=html;el=el.firstChild;el.parentNode.removeChild(el);return el},getViewportElement:function(){return browser.ie&&browser.quirks?document.body:document.documentElement},getClientRect:function(element){var bcr;try{bcr=element.getBoundingClientRect()}catch(e){bcr={left:0,top:0,height:0,width:0}}var rect={left:Math.round(bcr.left),top:Math.round(bcr.top),height:Math.round(bcr.bottom-bcr.top),width:Math.round(bcr.right-bcr.left)};var doc;while((doc=element.ownerDocument)!==document&&(element=domUtils.getWindow(doc).frameElement)){bcr=element.getBoundingClientRect();rect.left+=bcr.left;rect.top+=bcr.top}rect.bottom=rect.top+rect.height;rect.right=rect.left+rect.width;return rect},getViewportRect:function(){var viewportEl=uiUtils.getViewportElement();var width=(window.innerWidth||viewportEl.clientWidth)|0;var height=(window.innerHeight||viewportEl.clientHeight)|0;return{left:0,top:0,height:height,width:width,bottom:height,right:width}},setViewportOffset:function(element,offset){var rect;var fixedLayer=uiUtils.getFixedLayer();if(element.parentNode===fixedLayer){element.style.left=offset.left+\"px\";element.style.top=offset.top+\"px\"}else{domUtils.setViewportOffset(element,offset)}},getEventOffset:function(evt){var el=evt.target||evt.srcElement;var rect=uiUtils.getClientRect(el);var offset=uiUtils.getViewportOffsetByEvent(evt);return{left:offset.left-rect.left,top:offset.top-rect.top}},getViewportOffsetByEvent:function(evt){var el=evt.target||evt.srcElement;var frameEl=domUtils.getWindow(el).frameElement;var offset={left:evt.clientX,top:evt.clientY};if(frameEl&&el.ownerDocument!==document){var rect=uiUtils.getClientRect(frameEl);offset.left+=rect.left;offset.top+=rect.top}return offset},setGlobal:function(id,obj){root[id]=obj;return magic+'[\"'+id+'\"]'},unsetGlobal:function(id){delete root[id]},copyAttributes:function(tgt,src){var attributes=src.attributes;var k=attributes.length;while(k--){var attrNode=attributes[k];if(attrNode.nodeName!=\"style\"&&attrNode.nodeName!=\"class\"&&(!browser.ie||attrNode.specified)){tgt.setAttribute(attrNode.nodeName,attrNode.nodeValue)}}if(src.className){domUtils.addClass(tgt,src.className)}if(src.style.cssText){tgt.style.cssText+=\";\"+src.style.cssText}},removeStyle:function(el,styleName){if(el.style.removeProperty){el.style.removeProperty(styleName)}else if(el.style.removeAttribute){el.style.removeAttribute(styleName)}else throw\"\"},contains:function(elA,elB){return elA&&elB&&(elA===elB?false:elA.contains?elA.contains(elB):elA.compareDocumentPosition(elB)&16)},startDrag:function(evt,callbacks,doc){var doc=doc||document;var startX=evt.clientX;var startY=evt.clientY;function handleMouseMove(evt){var x=evt.clientX-startX;var y=evt.clientY-startY;callbacks.ondragmove(x,y,evt);if(evt.stopPropagation){evt.stopPropagation()}else{evt.cancelBubble=true}}if(doc.addEventListener){function handleMouseUp(evt){doc.removeEventListener(\"mousemove\",handleMouseMove,true);doc.removeEventListener(\"mouseup\",handleMouseUp,true);window.removeEventListener(\"mouseup\",handleMouseUp,true);callbacks.ondragstop()}doc.addEventListener(\"mousemove\",handleMouseMove,true);doc.addEventListener(\"mouseup\",handleMouseUp,true);window.addEventListener(\"mouseup\",handleMouseUp,true);evt.preventDefault()}else{var elm=evt.srcElement;elm.setCapture();function releaseCaptrue(){elm.releaseCapture();elm.detachEvent(\"onmousemove\",handleMouseMove);elm.detachEvent(\"onmouseup\",releaseCaptrue);elm.detachEvent(\"onlosecaptrue\",releaseCaptrue);callbacks.ondragstop()}elm.attachEvent(\"onmousemove\",handleMouseMove);elm.attachEvent(\"onmouseup\",releaseCaptrue);elm.attachEvent(\"onlosecaptrue\",releaseCaptrue);evt.returnValue=false}callbacks.ondragstart()},getFixedLayer:function(){var layer=document.getElementById(\"edui_fixedlayer\");if(layer==null){layer=document.createElement(\"div\");layer.id=\"edui_fixedlayer\";document.body.appendChild(layer);if(browser.ie&&browser.version<=8){layer.style.position=\"absolute\";bindFixedLayer();setTimeout(updateFixedOffset)}else{layer.style.position=\"fixed\"}layer.style.left=\"0\";layer.style.top=\"0\";layer.style.width=\"0\";layer.style.height=\"0\";layer.style.margin=\"0\"}return layer},makeUnselectable:function(element){if(browser.opera||browser.ie&&browser.version<9){element.unselectable=\"on\";if(element.hasChildNodes()){for(var i=0;i<element.childNodes.length;i++){if(element.childNodes[i].nodeType===1){uiUtils.makeUnselectable(element.childNodes[i])}}}}else{if(element.style.MozUserSelect!==undefined){element.style.MozUserSelect=\"none\"}else if(element.style.WebkitUserSelect!==undefined){element.style.WebkitUserSelect=\"none\"}else if(element.style.KhtmlUserSelect!==undefined){element.style.KhtmlUserSelect=\"none\"}}}};function updateFixedOffset(){var layer=document.getElementById(\"edui_fixedlayer\");uiUtils.setViewportOffset(layer,{left:0,top:0})}function bindFixedLayer(adjOffset){domUtils.on(window,\"scroll\",updateFixedOffset);domUtils.on(window,\"resize\",baidu.editor.utils.defer(updateFixedOffset,0,true))}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,EventBase=baidu.editor.EventBase,UIBase=baidu.editor.ui.UIBase=function(){};UIBase.prototype={el:null,className:\"\",uiName:\"\",initOptions:function(options){var me=this;for(var k in options){me[k]=options[k]}this.id=this.id||\"edui\"+uiUtils.uid()},initUIBase:function(){this._globalKey=utils.unhtml(uiUtils.setGlobal(this.id,this))},render:function(holder){var html=this.renderHtml();var el=uiUtils.createElementByHtml(html);var list=domUtils.getElementsByTagName(el,\"*\");var theme=\"edui-\"+(this.theme||this.editor.options.theme);var layer=document.getElementById(\"edui_fixedlayer\");for(var i=0,node;node=list[i++];){domUtils.addClass(node,theme)}domUtils.addClass(el,theme);if(layer){layer.className=\"\";domUtils.addClass(layer,theme)}var seatEl=this.getDom();if(seatEl!=null){seatEl.parentNode.replaceChild(el,seatEl);uiUtils.copyAttributes(el,seatEl)}else{if(typeof holder==\"string\"){holder=document.getElementById(holder)}holder=holder||uiUtils.getFixedLayer();domUtils.addClass(holder,theme);holder.appendChild(el)}this.el=el;this.postRender()},getDom:function(name){if(!name){return document.getElementById(this.id)}else{return document.getElementById(this.id+\"_\"+name)}},postRender:function(){this.fireEvent(\"postrender\")},getHtmlTpl:function(){return\"\"},formatHtml:function(tpl){var prefix=\"edui-\"+this.uiName;return tpl.replace(/##/g,this.id).replace(/%%-/g,this.uiName?prefix+\"-\":\"\").replace(/%%/g,(this.uiName?prefix:\"\")+\" \"+this.className).replace(/\\$\\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var box=this.getDom();if(box)baidu.editor.dom.domUtils.remove(box);uiUtils.unsetGlobal(this.id)},uiIsShow:true,uiShowStyleBackupValue:null,uiShow:function(enable){if(enable){if(this.uiIsShow){return}this.getDom().style.display=this.uiShowStyleBackupValue;this.uiIsShow=true}else{if(!this.uiIsShow){return}this.uiShowStyleBackupValue=this.getDom().style.display;this.getDom().style.display=\"none\";this.uiIsShow=false}}};utils.inherits(UIBase,EventBase)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Separator=baidu.editor.ui.Separator=function(options){this.initOptions(options);this.initSeparator()};Separator.prototype={uiName:\"separator\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\"></div>'}};utils.inherits(Separator,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,uiUtils=baidu.editor.ui.uiUtils;var Mask=baidu.editor.ui.Mask=function(options){this.initOptions(options);this.initUIBase()};Mask.prototype={getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>'},postRender:function(){var me=this;domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me._fill()}})})},show:function(zIndex){this._fill();this.getDom().style.display=\"\";this.getDom().style.zIndex=zIndex},hide:function(){this.getDom().style.display=\"none\";this.getDom().style.zIndex=\"\"},isHidden:function(){return this.getDom().style.display==\"none\"},_onMouseDown:function(){return false},_onClick:function(e,target){this.fireEvent(\"click\",e,target)},_fill:function(){var el=this.getDom();var vpRect=uiUtils.getViewportRect();el.style.width=vpRect.width+\"px\";el.style.height=vpRect.height+\"px\"}};utils.inherits(Mask,UIBase)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup=function(options){this.initOptions(options);this.initPopup()};var allPopups=[];function closeAllPopup(evt,el){for(var i=0;i<allPopups.length;i++){var pop=allPopups[i];if(!pop.isHidden()){if(pop.queryAutoHide(el)!==false){if(evt&&/scroll/gi.test(evt.type)&&pop.className===\"edui-wordpastepop\")return;pop.hide()}}}if(allPopups.length)pop.editor.fireEvent(\"afterhidepop\")}Popup.postHide=closeAllPopup;var ANCHOR_CLASSES=[\"edui-anchor-topleft\",\"edui-anchor-topright\",\"edui-anchor-bottomleft\",\"edui-anchor-bottomright\"];Popup.prototype={SHADOW_RADIUS:5,content:null,_hidden:false,autoRender:true,canSideLeft:true,canSideUp:true,initPopup:function(){this.initUIBase();allPopups.push(this)},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\">'+' <div id=\"##_body\" class=\"edui-popup-body\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-popup-content\">'+this.getContentHtmlTpl()+\"  </div>\"+\" </div>\"+\"</div>\"},getContentHtmlTpl:function(){if(this.content){if(typeof this.content==\"string\"){return this.content}return this.content.renderHtml()}else{return\"\"}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){if(this.content instanceof UIBase){this.content.postRender()}if(this.captureWheel&&!this.captured){this.captured=true;var winHeight=(document.documentElement.clientHeight||document.body.clientHeight)-80,_height=this.getDom().offsetHeight,_top=uiUtils.getClientRect(this.combox.getDom()).top,content=this.getDom(\"content\"),ifr=this.getDom(\"body\").getElementsByTagName(\"iframe\"),me=this;ifr.length&&(ifr=ifr[0]);while(_top+_height>winHeight){_height-=30}content.style.height=_height+\"px\";ifr&&(ifr.style.height=_height+\"px\");domUtils.on(content,\"onmousewheel\"in document.body?\"mousewheel\":\"DOMMouseScroll\",function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}if(e.wheelDelta){content.scrollTop-=e.wheelDelta/120*60}else{content.scrollTop-=e.detail/-3*60}})}this.fireEvent(\"postRenderAfter\");this.hide(true);this._UIBase_postRender()},_doAutoRender:function(){if(!this.getDom()&&this.autoRender){this.render()}},mesureSize:function(){var box=this.getDom(\"content\");return uiUtils.getClientRect(box)},fitSize:function(){if(this.captureWheel&&this.sized){return this.__size}this.sized=true;var popBodyEl=this.getDom(\"body\");popBodyEl.style.width=\"\";popBodyEl.style.height=\"\";var size=this.mesureSize();if(this.captureWheel){popBodyEl.style.width=-(-20-size.width)+\"px\";var height=parseInt(this.getDom(\"content\").style.height,10);!window.isNaN(height)&&(size.height=height)}else{popBodyEl.style.width=size.width+\"px\"}popBodyEl.style.height=size.height+\"px\";this.__size=size;this.captureWheel&&(this.getDom(\"content\").style.overflow=\"auto\");return size},showAnchor:function(element,hoz){this.showAnchorRect(uiUtils.getClientRect(element),hoz)},showAnchorRect:function(rect,hoz,adj){this._doAutoRender();var vpRect=uiUtils.getViewportRect();this.getDom().style.visibility=\"hidden\";this._show();var popSize=this.fitSize();var sideLeft,sideUp,left,top;if(hoz){sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.left-popSize.width:rect.right;top=sideUp?rect.bottom-popSize.height:rect.top}else{sideLeft=this.canSideLeft&&(rect.right+popSize.width>vpRect.right&&rect.left>popSize.width);sideUp=this.canSideUp&&(rect.top+popSize.height>vpRect.bottom&&rect.bottom>popSize.height);left=sideLeft?rect.right-popSize.width:rect.left;top=sideUp?rect.top-popSize.height:rect.bottom}if(!sideUp){if(top+popSize.height>vpRect.bottom){top=vpRect.bottom-popSize.height}}var popEl=this.getDom();uiUtils.setViewportOffset(popEl,{left:left,top:top});domUtils.removeClasses(popEl,ANCHOR_CLASSES);popEl.className+=\" \"+ANCHOR_CLASSES[(sideUp?1:0)*2+(sideLeft?1:0)];if(this.editor){popEl.style.zIndex=this.editor.container.style.zIndex*1+10;baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=popEl.style.zIndex-1}this.getDom().style.visibility=\"visible\"},showAt:function(offset){var left=offset.left;var top=offset.top;var rect={left:left,top:top,right:left,bottom:top,height:0,width:0};this.showAnchorRect(rect,false,true)},_show:function(){if(this._hidden){var box=this.getDom();box.style.display=\"\";this._hidden=false;this.fireEvent(\"show\")}},isHidden:function(){return this._hidden},show:function(){this._doAutoRender();this._show()},hide:function(notNofity){if(!this._hidden&&this.getDom()){this.getDom().style.display=\"none\";this._hidden=true;if(!notNofity){this.fireEvent(\"hide\")}}},queryAutoHide:function(el){return!el||!uiUtils.contains(this.getDom(),el)}};utils.inherits(Popup,UIBase);domUtils.on(document,\"mousedown\",function(evt){var el=evt.target||evt.srcElement;closeAllPopup(evt,el)});domUtils.on(window,\"scroll\",function(evt,el){closeAllPopup(evt,el)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,ColorPicker=baidu.editor.ui.ColorPicker=function(options){this.initOptions(options);this.noColorText=this.noColorText||this.editor.getLang(\"clearColor\");this.initUIBase()};ColorPicker.prototype={getHtmlTpl:function(){return genColorPicker(this.noColorText,this.editor)},_onTableClick:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.fireEvent(\"pickcolor\",color)}},_onTableOver:function(evt){var tgt=evt.target||evt.srcElement;var color=tgt.getAttribute(\"data-color\");if(color){this.getDom(\"preview\").style.backgroundColor=color}},_onTableOut:function(){this.getDom(\"preview\").style.backgroundColor=\"\"},_onPickNoColor:function(){this.fireEvent(\"picknocolor\")},_onColorSelect:function(evt){var input=evt.target||evt.srcElement;var color=input.value;if(color){this.fireEvent(\"pickcolor\",color)}}};utils.inherits(ColorPicker,UIBase);var COLORS=(\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,\"+\"f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,\"+\"d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,\"+\"bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,\"+\"a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,\"+\"7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,\"+\"c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\").split(\",\");function genColorPicker(noColorText,editor){var html='<div id=\"##\" class=\"edui-colorpicker %%\">'+'<div class=\"edui-colorpicker-topbar edui-clearfix\">'+'<div id=\"##_preview\" class=\"edui-colorpicker-preview\"><input type=\"color\" id=\"##_input\" onchange=\"$$._onColorSelect(event,this);\" /></div>'+'<div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">'+noColorText+\"</div>\"+\"</div>\"+'<table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\">'+'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">'+editor.getLang(\"themeColor\")+\"</td> </tr>\"+'<tr class=\"edui-colorpicker-tablefirstrow\" >';for(var i=0;i<COLORS.length;i++){if(i&&i%10===0){html+=\"</tr>\"+(i==60?'<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">'+editor.getLang(\"standardColor\")+\"</td></tr>\":\"\")+\"<tr\"+(i==60?' class=\"edui-colorpicker-tablefirstrow\"':\"\")+\">\"}html+=i<70?'<td style=\"padding:2px 2px;\"><a hidefocus title=\"'+COLORS[i]+'\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\"'+' data-color=\"#'+COLORS[i]+'\"'+' style=\"background-color:#'+COLORS[i]+\";border:solid #ccc 1px;\"+'\"'+\"></a></td>\":\"\"}html+=\"</tr>\";html+=\"</table></div>\";return html}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var TablePicker=baidu.editor.ui.TablePicker=function(options){this.initOptions(options);this.initTablePicker()};TablePicker.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this;return'<div id=\"##\" class=\"edui-tablepicker %%\">'+'<div class=\"edui-tablepicker-body\">'+'<div class=\"edui-infoarea\">'+'<span id=\"##_label\" class=\"edui-label\"></span>'+\"</div>\"+'<div class=\"edui-pickarea\"'+' onmousemove=\"$$._onMouseMove(event, this);\"'+' onmouseover=\"$$._onMouseOver(event, this);\"'+' onmouseout=\"$$._onMouseOut(event, this);\"'+' onclick=\"$$._onClick(event, this);\"'+\">\"+'<div id=\"##_overlay\" class=\"edui-overlay\"></div>'+\"</div>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render,render:function(holder){this._UIBase_render(holder);this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_row\")+\" x 0\"+this.editor.getLang(\"t_col\")},_track:function(numCols,numRows){var style=this.getDom(\"overlay\").style;var sideLen=this.lengthOfCellSide;style.width=numCols*sideLen+\"px\";style.height=numRows*sideLen+\"px\";var label=this.getDom(\"label\");label.innerHTML=numCols+this.editor.getLang(\"t_col\")+\" x \"+numRows+this.editor.getLang(\"t_row\");this.numCols=numCols;this.numRows=numRows},_onMouseOver:function(evt,el){var rel=evt.relatedTarget||evt.fromElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"\"}},_onMouseOut:function(evt,el){var rel=evt.relatedTarget||evt.toElement;if(!uiUtils.contains(el,rel)&&el!==rel){this.getDom(\"label\").innerHTML=\"0\"+this.editor.getLang(\"t_col\")+\" x 0\"+this.editor.getLang(\"t_row\");this.getDom(\"overlay\").style.visibility=\"hidden\"}},_onMouseMove:function(evt,el){var style=this.getDom(\"overlay\").style;var offset=uiUtils.getEventOffset(evt);var sideLen=this.lengthOfCellSide;var numCols=Math.ceil(offset.left/sideLen);var numRows=Math.ceil(offset.top/sideLen);this._track(numCols,numRows)},_onClick:function(){this.fireEvent(\"picktable\",this.numCols,this.numRows)}};utils.inherits(TablePicker,UIBase)})();(function(){var browser=baidu.editor.browser,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils;var TPL_STATEFUL='onmousedown=\"$$.Stateful_onMouseDown(event, this);\"'+' onmouseup=\"$$.Stateful_onMouseUp(event, this);\"'+(browser.ie?' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\"'+' onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"':' onmouseover=\"$$.Stateful_onMouseOver(event, this);\"'+' onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');baidu.editor.ui.Stateful={alwalysHoverable:false,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl;this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){var tpl=this._Stateful_dGetHtmlTpl();return tpl.replace(/stateful/g,function(){return TPL_STATEFUL})},Stateful_onMouseEnter:function(evt,el){this.target=el;if(!this.isDisabled()||this.alwalysHoverable){this.addState(\"hover\");this.fireEvent(\"over\")}},Stateful_onMouseLeave:function(evt,el){if(!this.isDisabled()||this.alwalysHoverable){this.removeState(\"hover\");this.removeState(\"active\");this.fireEvent(\"out\")}},Stateful_onMouseOver:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseEnter(evt,el)}},Stateful_onMouseOut:function(evt,el){var rel=evt.relatedTarget;if(!uiUtils.contains(el,rel)&&el!==rel){this.Stateful_onMouseLeave(evt,el)}},Stateful_onMouseDown:function(evt,el){if(!this.isDisabled()){this.addState(\"active\")}},Stateful_onMouseUp:function(evt,el){if(!this.isDisabled()){this.removeState(\"active\")}},Stateful_postRender:function(){if(this.disabled&&!this.hasState(\"disabled\")){this.addState(\"disabled\")}},hasState:function(state){return domUtils.hasClass(this.getStateDom(),\"edui-state-\"+state)},addState:function(state){if(!this.hasState(state)){this.getStateDom().className+=\" edui-state-\"+state}},removeState:function(state){if(this.hasState(state)){domUtils.removeClasses(this.getStateDom(),[\"edui-state-\"+state])}},getStateDom:function(){return this.getDom(\"state\")},isChecked:function(){return this.hasState(\"checked\")},setChecked:function(checked){if(!this.isDisabled()&&checked){this.addState(\"checked\")}else{this.removeState(\"checked\")}},isDisabled:function(){return this.hasState(\"disabled\")},setDisabled:function(disabled){if(disabled){this.removeState(\"hover\");this.removeState(\"checked\");this.removeState(\"active\");this.addState(\"disabled\")}else{this.removeState(\"disabled\")}}}})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,Button=baidu.editor.ui.Button=function(options){if(options.name){var btnName=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+btnName}options.cssRules=\".edui-\"+(options.theme||\"default\")+\" .edui-toolbar .edui-button.edui-for-\"+btnName+\" .edui-icon {\"+cssRules+\"}\"}this.initOptions(options);this.initButton()};Button.prototype={uiName:\"button\",label:\"\",title:\"\",showIcon:true,showText:true,cssRules:\"\",initButton:function(){this.initUIBase();this.Stateful_init();if(this.cssRules){utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+'<div id=\"##_state\" stateful>'+'<div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" '+(this.title?'title=\"'+this.title+'\"':\"\")+' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">'+(this.showIcon?'<div class=\"edui-box edui-icon\"></div>':\"\")+(this.showText?'<div class=\"edui-box edui-label\">'+this.label+\"</div>\":\"\")+\"</div>\"+\"</div>\"+\"</div></div>\"},postRender:function(){this.Stateful_postRender();this.setDisabled(this.disabled)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}},_onClick:function(){if(!this.isDisabled()){this.fireEvent(\"click\")}},setTitle:function(text){var label=this.getDom(\"label\");label.innerHTML=text}};utils.inherits(Button,UIBase);utils.extend(Button.prototype,Stateful)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Stateful=baidu.editor.ui.Stateful,SplitButton=baidu.editor.ui.SplitButton=function(options){this.initOptions(options);this.initSplitButton()};SplitButton.prototype={popup:null,uiName:\"splitbutton\",title:\"\",initSplitButton:function(){this.initUIBase();this.Stateful_init();var me=this;if(this.popup!=null){var popup=this.popup;this.popup=null;this.setPopup(popup)}},_UIBase_postRender:UIBase.prototype.postRender,postRender:function(){this.Stateful_postRender();this._UIBase_postRender()},setPopup:function(popup){if(this.popup===popup)return;if(this.popup!=null){this.popup.dispose()}popup.addListener(\"show\",utils.bind(this._onPopupShow,this));popup.addListener(\"hide\",utils.bind(this._onPopupHide,this));popup.addListener(\"postrender\",utils.bind(function(){popup.getDom(\"body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.popup.id+'_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:'+(uiUtils.getClientRect(this.getDom()).width+20)+'px\"></div>'));popup.getDom().className+=\" \"+this.className},this));this.popup=popup},_onPopupShow:function(){this.addState(\"opened\")},_onPopupHide:function(){this.removeState(\"opened\")},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-box %%\">'+\"<div \"+(this.title?'title=\"'+this.title+'\"':\"\")+' id=\"##_state\" stateful><div class=\"%%-body\">'+'<div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\">'+'<div class=\"edui-box edui-icon\"></div>'+\"</div>\"+'<div class=\"edui-box edui-splitborder\"></div>'+'<div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div>'+\"</div></div></div>\"},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top-=this.popup.SHADOW_RADIUS;rect.height+=this.popup.SHADOW_RADIUS;this.popup.showAnchorRect(rect)},_onArrowClick:function(event,el){if(!this.isDisabled()){this.showPopup()}},_onButtonClick:function(){if(!this.isDisabled()){this.fireEvent(\"buttonclick\")}}};utils.inherits(SplitButton,UIBase);utils.extend(SplitButton.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,ColorPicker=baidu.editor.ui.ColorPicker,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,ColorButton=baidu.editor.ui.ColorButton=function(options){this.initOptions(options);this.initColorButton()};ColorButton.prototype={initColorButton:function(){var me=this;this.popup=new Popup({content:new ColorPicker({noColorText:me.editor.getLang(\"clearColor\"),editor:me.editor,onpickcolor:function(t,color){me._onPickColor(color)},onpicknocolor:function(t,color){me._onPickNoColor(color)}}),editor:me.editor});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.getDom(\"button_body\").appendChild(uiUtils.createElementByHtml('<div id=\"'+this.id+'_colorlump\" class=\"edui-colorlump\"></div>'));this.getDom().className+=\" edui-colorbutton\"},setColor:function(color){this.getDom(\"colorlump\").style.backgroundColor=color;this.color=color},_onPickColor:function(color){if(this.fireEvent(\"pickcolor\",color)!==false){this.setColor(color);this.popup.hide()}},_onPickNoColor:function(color){if(this.fireEvent(\"picknocolor\")!==false){this.popup.hide()}}};utils.inherits(ColorButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,TablePicker=baidu.editor.ui.TablePicker,SplitButton=baidu.editor.ui.SplitButton,TableButton=baidu.editor.ui.TableButton=function(options){this.initOptions(options);this.initTableButton()};TableButton.prototype={initTableButton:function(){var me=this;this.popup=new Popup({content:new TablePicker({editor:me.editor,onpicktable:function(t,numCols,numRows){me._onPickTable(numCols,numRows)}}),editor:me.editor});this.initSplitButton()},_onPickTable:function(numCols,numRows){if(this.fireEvent(\"picktable\",numCols,numRows)!==false){this.popup.hide()}}};utils.inherits(TableButton,SplitButton)})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase;var AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker=function(options){this.initOptions(options);this.initAutoTypeSetPicker()};AutoTypeSetPicker.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},getHtmlTpl:function(){var me=this.editor,opt=me.options.autotypeset,lang=me.getLang(\"autoTypeSet\");var textAlignInputName=\"textAlignValue\"+me.uid,imageBlockInputName=\"imageBlockLineValue\"+me.uid,symbolConverInputName=\"symbolConverValue\"+me.uid;return'<div id=\"##\" class=\"edui-autotypesetpicker %%\">'+'<div class=\"edui-autotypesetpicker-body\">'+\"<table >\"+'<tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" '+(opt[\"mergeEmptyline\"]?\"checked\":\"\")+\">\"+lang.mergeLine+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" '+(opt[\"removeEmptyline\"]?\"checked\":\"\")+\">\"+lang.delLine+\"</td></tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" '+(opt[\"removeClass\"]?\"checked\":\"\")+\">\"+lang.removeFormat+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" '+(opt[\"indent\"]?\"checked\":\"\")+\">\"+lang.indent+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"textAlign\" '+(opt[\"textAlign\"]?\"checked\":\"\")+\">\"+lang.alignment+\"</td>\"+'<td colspan=\"2\" id=\"'+textAlignInputName+'\">'+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"left\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"center\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+textAlignInputName+'\" value=\"right\" '+(opt[\"textAlign\"]&&opt[\"textAlign\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" '+(opt[\"imageBlockLine\"]?\"checked\":\"\")+\">\"+lang.imageFloat+\"</td>\"+'<td nowrap id=\"'+imageBlockInputName+'\">'+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"none\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"none\"?\"checked\":\"\")+\">\"+me.getLang(\"default\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"left\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"left\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyleft\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"center\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"center\"?\"checked\":\"\")+\">\"+me.getLang(\"justifycenter\")+'<input type=\"radio\" name=\"'+imageBlockInputName+'\" value=\"right\" '+(opt[\"imageBlockLine\"]&&opt[\"imageBlockLine\"]==\"right\"?\"checked\":\"\")+\">\"+me.getLang(\"justifyright\")+\"</td>\"+\"</tr>\"+'<tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" '+(opt[\"clearFontSize\"]?\"checked\":\"\")+\">\"+lang.removeFontsize+'</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" '+(opt[\"clearFontFamily\"]?\"checked\":\"\")+\">\"+lang.removeFontFamily+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" '+(opt[\"removeEmptyNode\"]?\"checked\":\"\")+\">\"+lang.removeHtml+\"</td></tr>\"+'<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" '+(opt[\"pasteFilter\"]?\"checked\":\"\")+\">\"+lang.pasteFilter+\"</td></tr>\"+\"<tr>\"+'<td nowrap><input type=\"checkbox\" name=\"symbolConver\" '+(opt[\"bdc2sb\"]||opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.symbol+\"</td>\"+'<td id=\"'+symbolConverInputName+'\">'+'<input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" '+(opt[\"bdc2sb\"]?\"checked\":\"\")+\">\"+lang.bdc2sb+'<input type=\"radio\" name=\"bdc\" value=\"tobdc\" '+(opt[\"tobdc\"]?\"checked\":\"\")+\">\"+lang.tobdc+\"\"+\"</td>\"+'<td nowrap align=\"right\"><button >'+lang.run+\"</button></td>\"+\"</tr>\"+\"</table>\"+\"</div>\"+\"</div>\"},_UIBase_render:UIBase.prototype.render};utils.inherits(AutoTypeSetPicker,UIBase)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,AutoTypeSetPicker=baidu.editor.ui.AutoTypeSetPicker,SplitButton=baidu.editor.ui.SplitButton,AutoTypeSetButton=baidu.editor.ui.AutoTypeSetButton=function(options){this.initOptions(options);this.initAutoTypeSetButton()};function getPara(me){var opt={},cont=me.getDom(),editorId=me.editor.uid,inputType=null,attrName=null,ipts=domUtils.getElementsByTagName(cont,\"input\");for(var i=ipts.length-1,ipt;ipt=ipts[i--];){inputType=ipt.getAttribute(\"type\");if(inputType==\"checkbox\"){attrName=ipt.getAttribute(\"name\");opt[attrName]&&delete opt[attrName];if(ipt.checked){var attrValue=document.getElementById(attrName+\"Value\"+editorId);if(attrValue){if(/input/gi.test(attrValue.tagName)){opt[attrName]=attrValue.value}else{var iptChilds=attrValue.getElementsByTagName(\"input\");for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){if(iptchild.checked){opt[attrName]=iptchild.value;break}}}}else{opt[attrName]=true}}else{opt[attrName]=false}}else{opt[ipt.getAttribute(\"value\")]=ipt.checked}}var selects=domUtils.getElementsByTagName(cont,\"select\");for(var i=0,si;si=selects[i++];){var attr=si.getAttribute(\"name\");opt[attr]=opt[attr]?si.value:\"\"}utils.extend(me.editor.options.autotypeset,opt);me.editor.setPreferences(\"autotypeset\",opt)}AutoTypeSetButton.prototype={initAutoTypeSetButton:function(){var me=this;this.popup=new Popup({content:new AutoTypeSetPicker({editor:me.editor}),editor:me.editor,hide:function(){if(!this._hidden&&this.getDom()){getPara(this);this.getDom().style.display=\"none\";this._hidden=true;this.fireEvent(\"hide\")}}});var flag=0;this.popup.addListener(\"postRenderAfter\",function(){var popupUI=this;if(flag)return;var cont=this.getDom(),btn=cont.getElementsByTagName(\"button\")[0];btn.onclick=function(){getPara(popupUI);me.editor.execCommand(\"autotypeset\");popupUI.hide()};domUtils.on(cont,\"click\",function(e){var target=e.target||e.srcElement,editorId=me.editor.uid;if(target&&target.tagName==\"INPUT\"){if(target.name==\"imageBlockLine\"||target.name==\"textAlign\"||target.name==\"symbolConver\"){var checked=target.checked,radioTd=document.getElementById(target.name+\"Value\"+editorId),radios=radioTd.getElementsByTagName(\"input\"),defalutSelect={imageBlockLine:\"none\",textAlign:\"left\",symbolConver:\"tobdc\"};for(var i=0;i<radios.length;i++){if(checked){if(radios[i].value==defalutSelect[target.name]){radios[i].checked=\"checked\"}}else{radios[i].checked=false}}}if(target.name==\"imageBlockLineValue\"+editorId||target.name==\"textAlignValue\"+editorId||target.name==\"bdc\"){var checkboxs=target.parentNode.previousSibling.getElementsByTagName(\"input\");checkboxs&&(checkboxs[0].checked=true)}getPara(popupUI)}});flag=1});this.initSplitButton()}};utils.inherits(AutoTypeSetButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,UIBase=baidu.editor.ui.UIBase;var CellAlignPicker=baidu.editor.ui.CellAlignPicker=function(options){this.initOptions(options);this.initSelected();this.initCellAlignPicker()};CellAlignPicker.prototype={initSelected:function(){var status={valign:{top:0,middle:1,bottom:2},align:{left:0,center:1,right:2},count:3},result=-1;if(this.selected){this.selectedIndex=status.valign[this.selected.valign]*status.count+status.align[this.selected.align]}},initCellAlignPicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){var alignType=[\"left\",\"center\",\"right\"],COUNT=9,tempClassName=null,tempIndex=-1,tmpl=[];for(var i=0;i<COUNT;i++){tempClassName=this.selectedIndex===i?' class=\"edui-cellalign-selected\" ':\"\";tempIndex=i%3;tempIndex===0&&tmpl.push(\"<tr>\");tmpl.push('<td index=\"'+i+'\" '+tempClassName+' stateful><div class=\"edui-icon edui-'+alignType[tempIndex]+'\"></div></td>');tempIndex===2&&tmpl.push(\"</tr>\")}return'<div id=\"##\" class=\"edui-cellalignpicker %%\">'+'<div class=\"edui-cellalignpicker-body\">'+'<table onclick=\"$$._onClick(event);\">'+tmpl.join(\"\")+\"</table>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},_onClick:function(evt){var target=evt.target||evt.srcElement;if(/icon/.test(target.className)){this.items[target.parentNode.getAttribute(\"index\")].onclick();Popup.postHide(evt)}},_UIBase_render:UIBase.prototype.render};utils.inherits(CellAlignPicker,UIBase);utils.extend(CellAlignPicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,Stateful=baidu.editor.ui.Stateful,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase;var PastePicker=baidu.editor.ui.PastePicker=function(options){this.initOptions(options);this.initPastePicker()};PastePicker.prototype={initPastePicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div>'+'<div class=\"edui-pastecontainer\">'+'<div class=\"edui-title\">'+this.editor.getLang(\"pasteOpt\")+\"</div>\"+'<div class=\"edui-button\">'+'<div title=\"'+this.editor.getLang(\"pasteSourceFormat\")+'\" onclick=\"$$.format(false)\" stateful>'+'<div class=\"edui-richtxticon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"tagFormat\")+'\" onclick=\"$$.format(2)\" stateful>'+'<div class=\"edui-tagicon\"></div></div>'+'<div title=\"'+this.editor.getLang(\"pasteTextFormat\")+'\" onclick=\"$$.format(true)\" stateful>'+'<div class=\"edui-plaintxticon\"></div></div>'+\"</div>\"+\"</div>\"+\"</div>\"},getStateDom:function(){return this.target},format:function(param){this.editor.ui._isTransfer=true;this.editor.fireEvent(\"pasteTransfer\",param)},_onClick:function(cur){var node=domUtils.getNextDomNode(cur),screenHt=uiUtils.getViewportRect().height,subPop=uiUtils.getClientRect(node);if(subPop.top+subPop.height>screenHt)node.style.top=-subPop.height-cur.offsetHeight+\"px\";else node.style.top=\"\";if(/hidden/gi.test(domUtils.getComputedStyle(node,\"visibility\"))){node.style.visibility=\"visible\";domUtils.addClass(cur,\"edui-state-opened\")}else{node.style.visibility=\"hidden\";domUtils.removeClasses(cur,\"edui-state-opened\")}},_UIBase_render:UIBase.prototype.render};utils.inherits(PastePicker,UIBase);utils.extend(PastePicker.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Toolbar=baidu.editor.ui.Toolbar=function(options){this.initOptions(options);this.initToolbar()};Toolbar.prototype={items:null,initToolbar:function(){this.items=this.items||[];this.initUIBase()},add:function(item,index){if(index===undefined){this.items.push(item)}else{this.items.splice(index,0,item)}},getHtmlTpl:function(){var buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}return'<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">'+buff.join(\"\")+\"</div>\"},postRender:function(){var box=this.getDom();for(var i=0;i<this.items.length;i++){this.items[i].postRender()}uiUtils.makeUnselectable(box)},_onMouseDown:function(e){var target=e.target||e.srcElement,tagName=target&&target.tagName&&target.tagName.toLowerCase();if(tagName==\"input\"||tagName==\"object\"||tagName==\"object\"){return false}}};utils.inherits(Toolbar,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,QuickOperate=baidu.editor.ui.QuickOperate=function(options){this.initOptions(options)};QuickOperate.prototype={uiName:\"quick-operate\",_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){return['<div class=\"edui-quick-operate\">',' <div class=\"edui-quick-operate-status\">','   <div class=\"edui-quick-operate-icon\"><i class=\"icon icon-image\"></i></div>','   <div class=\"edui-quick-operate-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" data-icon=\"DragOutlined\"><path d=\"M8.25 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm0 7.25a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm1.75 5.5a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0ZM14.753 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5ZM16.5 12a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0Zm-1.747 9a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Z\" fill=\"currentColor\"></path></svg></div>',\" </div>\",' <div class=\"edui-quick-operate-menu\">','   <div class=\"item\"><i class=\"icon icon-image\"></i> 删除</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 左对齐</div>','   <div class=\"item\"><i class=\"icon icon-image\"></i> 右对齐</div>',\" </div>\",\"</div>\"].join(\"\")},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}},dispose:function(){this.destroy()}};utils.inherits(QuickOperate,Popup)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,Popup=baidu.editor.ui.Popup,Stateful=baidu.editor.ui.Stateful,CellAlignPicker=baidu.editor.ui.CellAlignPicker,Menu=baidu.editor.ui.Menu=function(options){this.initOptions(options);this.initMenu()};var menuSeparator={renderHtml:function(){return'<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>'},postRender:function(){},queryAutoHide:function(){return true}};Menu.prototype={items:null,uiName:\"menu\",initMenu:function(){this.items=this.items||[];this.initPopup();this.initItems()},initItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item==\"-\"){this.items[i]=this.getSeparator()}else if(!(item instanceof MenuItem)){item.editor=this.editor;item.theme=this.editor.options.theme;this.items[i]=this.createItem(item)}}},getSeparator:function(){return menuSeparator},createItem:function(item){item.menu=this;return new MenuItem(item)},_Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(this.items.length==0){return this._Popup_getContentHtmlTpl()}var buff=[];for(var i=0;i<this.items.length;i++){var item=this.items[i];buff[i]=item.renderHtml()}return'<div class=\"%%-body\">'+buff.join(\"\")+\"</div>\"},_Popup_postRender:Popup.prototype.postRender,postRender:function(){var me=this;for(var i=0;i<this.items.length;i++){var item=this.items[i];item.ownerMenu=this;item.postRender()}domUtils.on(this.getDom(),\"mouseover\",function(evt){evt=evt||event;var rel=evt.relatedTarget||evt.fromElement;var el=me.getDom();if(!uiUtils.contains(el,rel)&&el!==rel){me.fireEvent(\"over\")}});this._Popup_postRender()},queryAutoHide:function(el){if(el){if(uiUtils.contains(this.getDom(),el)){return false}for(var i=0;i<this.items.length;i++){var item=this.items[i];if(item.queryAutoHide(el)===false){return false}}}},clearItems:function(){for(var i=0;i<this.items.length;i++){var item=this.items[i];clearTimeout(item._showingTimer);clearTimeout(item._closingTimer);if(item.subMenu){item.subMenu.destroy()}}this.items=[]},destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}this.clearItems()},dispose:function(){this.destroy()}};utils.inherits(Menu,Popup);var MenuItem=baidu.editor.ui.MenuItem=function(options){this.initOptions(options);this.initUIBase();this.Stateful_init();if(this.subMenu&&!(this.subMenu instanceof Menu)){if(options.className&&options.className.indexOf(\"aligntd\")!=-1){var me=this;this.subMenu.selected=this.editor.queryCommandValue(\"cellalignment\");this.subMenu=new Popup({content:new CellAlignPicker(this.subMenu),parentMenu:me,editor:me.editor,destroy:function(){if(this.getDom()){domUtils.remove(this.getDom())}}});this.subMenu.addListener(\"postRenderAfter\",function(){domUtils.on(this.getDom(),\"mouseover\",function(){me.addState(\"opened\")})})}else{this.subMenu=new Menu(this.subMenu)}}};MenuItem.prototype={label:\"\",subMenu:null,ownerMenu:null,uiName:\"menuitem\",alwalysHoverable:true,getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\">'+'<div class=\"%%-body\">'+this.renderLabelHtml()+\"</div>\"+\"</div>\"},postRender:function(){var me=this;this.addListener(\"over\",function(){me.ownerMenu.fireEvent(\"submenuover\",me);if(me.subMenu){me.delayShowSubMenu()}});if(this.subMenu){this.getDom().className+=\" edui-hassubmenu\";this.subMenu.render();this.addListener(\"out\",function(){me.delayHideSubMenu()});this.subMenu.addListener(\"over\",function(){clearTimeout(me._closingTimer);me._closingTimer=null;me.addState(\"opened\")});this.ownerMenu.addListener(\"hide\",function(){me.hideSubMenu()});this.ownerMenu.addListener(\"submenuover\",function(t,subMenu){if(subMenu!==me){me.delayHideSubMenu()}});this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide;this.subMenu.queryAutoHide=function(el){if(el&&uiUtils.contains(me.getDom(),el)){return false}return this._bakQueryAutoHide(el)}}this.getDom().style.tabIndex=\"-1\";uiUtils.makeUnselectable(this.getDom());this.Stateful_postRender()},delayShowSubMenu:function(){var me=this;if(!me.isDisabled()){me.addState(\"opened\");clearTimeout(me._showingTimer);clearTimeout(me._closingTimer);me._closingTimer=null;me._showingTimer=setTimeout(function(){me.showSubMenu()},250)}},delayHideSubMenu:function(){var me=this;if(!me.isDisabled()){me.removeState(\"opened\");clearTimeout(me._showingTimer);if(!me._closingTimer){me._closingTimer=setTimeout(function(){if(!me.hasState(\"opened\")){me.hideSubMenu()}me._closingTimer=null},400)}}},renderLabelHtml:function(){return'<div class=\"edui-arrow\"></div>'+'<div class=\"edui-box edui-icon\"></div>'+'<div class=\"edui-box edui-label %%-label\">'+(this.label||\"\")+\"</div>\"},getStateDom:function(){return this.getDom()},queryAutoHide:function(el){if(this.subMenu&&this.hasState(\"opened\")){return this.subMenu.queryAutoHide(el)}},_onClick:function(event,this_){if(this.hasState(\"disabled\"))return;if(this.fireEvent(\"click\",event,this_)!==false){if(this.subMenu){this.showSubMenu()}else{Popup.postHide(event)}}},showSubMenu:function(){var rect=uiUtils.getClientRect(this.getDom());rect.right-=5;rect.left+=2;rect.width-=7;rect.top-=4;rect.bottom+=4;rect.height+=8;this.subMenu.showAnchorRect(rect,true,true)},hideSubMenu:function(){this.subMenu.hide()}};utils.inherits(MenuItem,UIBase);utils.extend(MenuItem.prototype,Stateful,true)})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,Combox=baidu.editor.ui.Combox=function(options){this.initOptions(options);this.initCombox()};Combox.prototype={uiName:\"combox\",onbuttonclick:function(){this.showPopup()},initCombox:function(){var me=this;this.items=this.items||[];for(var i=0;i<this.items.length;i++){var item=this.items[i];item.uiName=\"listitem\";item.index=i;item.onclick=function(){me.selectByIndex(this.index)}}this.popup=new Menu({items:this.items,uiName:\"list\",editor:this.editor,captureWheel:true,combox:this});this.initSplitButton()},_SplitButton_postRender:SplitButton.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.setLabel(this.label||\"\");this.setValue(this.initValue||\"\")},showPopup:function(){var rect=uiUtils.getClientRect(this.getDom());rect.top+=1;rect.bottom-=1;rect.height-=2;this.popup.showAnchorRect(rect)},getValue:function(){return this.value},setValue:function(value){var index=this.indexByValue(value);if(index!=-1){this.selectedIndex=index;this.setLabel(this.items[index].label);this.value=this.items[index].value}else{this.selectedIndex=-1;this.setLabel(this.getLabelForUnknowValue(value));this.value=value}},setLabel:function(label){this.getDom(\"button_body\").innerHTML=label;this.label=label},getLabelForUnknowValue:function(value){return value},indexByValue:function(value){for(var i=0;i<this.items.length;i++){if(value==this.items[i].value){return i}}return-1},getItem:function(index){return this.items[index]},selectByIndex:function(index){if(index<this.items.length&&this.fireEvent(\"select\",index)!==false){this.selectedIndex=index;this.value=this.items[index].value;this.setLabel(this.items[index].label)}}};utils.inherits(Combox,SplitButton)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,uiUtils=baidu.editor.ui.uiUtils,Mask=baidu.editor.ui.Mask,UIBase=baidu.editor.ui.UIBase,Button=baidu.editor.ui.Button,Dialog=baidu.editor.ui.Dialog=function(options){if(options.name){var name=options.name;var cssRules=options.cssRules;if(!options.className){options.className=\"edui-for-\"+name}if(cssRules){options.cssRules=\".edui-for-\"+name+\" .edui-dialog-content  {\"+cssRules+\"}\"}}this.initOptions(utils.extend({autoReset:true,draggable:true,onok:function(){},oncancel:function(){},onclose:function(t,ok){return ok?this.onok():this.oncancel()},holdScroll:false},options));this.initDialog()};var modalMask;var dragMask;var activeDialog;Dialog.prototype={draggable:false,uiName:\"dialog\",initDialog:function(){var me=this,theme=this.editor.options.theme;if(this.cssRules){this.cssRules=\".edui-\"+theme+\" \"+this.cssRules;utils.cssRule(\"edui-customize-\"+this.name+\"-style\",this.cssRules)}this.initUIBase();this.modalMask=modalMask||(modalMask=new Mask({className:\"edui-dialog-modalmask\",theme:theme,onclick:function(){activeDialog&&activeDialog.close(false)}}));this.dragMask=dragMask||(dragMask=new Mask({className:\"edui-dialog-dragmask\",theme:theme}));this.closeButton=new Button({className:\"edui-dialog-closebutton\",title:me.closeDialog,theme:theme,onclick:function(){me.close(false)}});this.fullscreen&&this.initResizeEvent();if(this.buttons){for(var i=0;i<this.buttons.length;i++){if(!(this.buttons[i]instanceof Button)){this.buttons[i]=new Button(utils.extend(this.buttons[i],{editor:this.editor},true))}}}},initResizeEvent:function(){var me=this;domUtils.on(window,\"resize\",function(){if(me._hidden||me._hidden===undefined){return}if(me.__resizeTimer){window.clearTimeout(me.__resizeTimer)}me.__resizeTimer=window.setTimeout(function(){me.__resizeTimer=null;var dialogWrapNode=me.getDom(),contentNode=me.getDom(\"content\"),wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode),vpRect=uiUtils.getViewportRect();contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";me.fireEvent(\"resize\")},100)})},fitSize:function(){var popBodyEl=this.getDom(\"body\");var $foot=popBodyEl.querySelector(\".edui-dialog-foot\");var heightWithoutBody=70;if(!$foot){heightWithoutBody=30}var size=this.mesureSize();var winSize=uiUtils.getViewportRect();var width=size.width;var height=size.height-heightWithoutBody;var maxWidth=winSize.width-2;var maxHeight=winSize.height-heightWithoutBody-2;if(width>maxWidth){height=height*maxWidth/width;width=maxWidth}if(height>maxHeight){width=width*maxHeight/height;height=maxHeight}var scale=width/size.width;var $content=popBodyEl.querySelector(\".edui-dialog-content\");if(!$content.dataset.dialogScaled){$content.dataset.dialogScaled=true;$content.style.width=width+\"px\";$content.style.height=height+\"px\";var $iframe=popBodyEl.querySelector(\".edui-dialog-content iframe\");$iframe.style.width=size.width+\"px\";$iframe.style.height=size.height-heightWithoutBody+\"px\";$iframe.style.transformOrigin=\"0 0\";$iframe.style.transform=\"scale(\"+scale+\")\";size.width=width;size.height=height+heightWithoutBody}popBodyEl.style.width=size.width+\"px\";popBodyEl.style.height=size.height+\"px\";return size},safeSetOffset:function(offset){var me=this;var el=me.getDom();var vpRect=uiUtils.getViewportRect();var rect=uiUtils.getClientRect(el);var left=offset.left;if(left+rect.width>vpRect.right){left=vpRect.right-rect.width}var top=offset.top;if(top+rect.height>vpRect.bottom){top=vpRect.bottom-rect.height}el.style.left=Math.max(left,0)+\"px\";el.style.top=Math.max(top,0)+\"px\"},showAtCenter:function(){var vpRect=uiUtils.getViewportRect();if(!this.fullscreen){this.getDom().style.display=\"\";var popSize=this.fitSize();var titleHeight=this.getDom(\"titlebar\").offsetHeight|0;var left=vpRect.width/2-popSize.width/2;var top=vpRect.height/2-(popSize.height-titleHeight)/2-titleHeight;var popEl=this.getDom();this.safeSetOffset({left:Math.max(left|0,0),top:Math.max(top|0,0)});if(!domUtils.hasClass(popEl,\"edui-state-centered\")){popEl.className+=\" edui-state-centered\"}}else{var dialogWrapNode=this.getDom(),contentNode=this.getDom(\"content\");dialogWrapNode.style.display=\"block\";var wrapRect=UE.ui.uiUtils.getClientRect(dialogWrapNode),contentRect=UE.ui.uiUtils.getClientRect(contentNode);dialogWrapNode.style.left=\"-100000px\";contentNode.style.width=vpRect.width-wrapRect.width+contentRect.width+\"px\";contentNode.style.height=vpRect.height-wrapRect.height+contentRect.height+\"px\";dialogWrapNode.style.width=vpRect.width+\"px\";dialogWrapNode.style.height=vpRect.height+\"px\";dialogWrapNode.style.left=0;this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}};document.documentElement.style.overflowX=\"hidden\";document.documentElement.style.overflowY=\"hidden\";document.body.style.overflowX=\"hidden\";document.body.style.overflowY=\"hidden\"}this._show()},getContentHtml:function(){var contentHtml=\"\";if(typeof this.content==\"string\"){contentHtml=this.content}else if(this.iframeUrl){contentHtml='<span id=\"'+this.id+'_contmask\" class=\"dialogcontmask\"></span><iframe id=\"'+this.id+'_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"'+this.iframeUrl+'\"></iframe>'}return contentHtml},getHtmlTpl:function(){var footHtml=\"\";if(this.buttons){var buff=[];for(var i=0;i<this.buttons.length;i++){buff[i]=this.buttons[i].renderHtml()}footHtml='<div class=\"%%-foot\">'+'<div id=\"##_buttons\" class=\"%%-buttons\">'+buff.join(\"\")+\"</div>\"+\"</div>\"}return'<div id=\"##\" class=\"%%\"><div '+(!this.fullscreen?'class=\"%%\"':'class=\"%%-wrap edui-dialog-fullscreen-flag\"')+'><div id=\"##_body\" class=\"%%-body\">'+'<div class=\"%%-shadow\"></div>'+'<div id=\"##_titlebar\" class=\"%%-titlebar\">'+'<div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\">'+'<span class=\"%%-caption\">'+(this.title||\"\")+\"</span>\"+\"</div>\"+this.closeButton.renderHtml()+\"</div>\"+'<div id=\"##_content\" class=\"%%-content\">'+(this.autoReset?\"\":this.getContentHtml())+\"</div>\"+footHtml+\"</div></div></div>\"},postRender:function(){if(!this.modalMask.getDom()){this.modalMask.render();this.modalMask.hide()}if(!this.dragMask.getDom()){this.dragMask.render();this.dragMask.hide()}var me=this;this.addListener(\"show\",function(){me.modalMask.show(this.getDom().style.zIndex-2)});this.addListener(\"hide\",function(){me.modalMask.hide()});if(this.buttons){for(var i=0;i<this.buttons.length;i++){this.buttons[i].postRender()}}domUtils.on(window,\"resize\",function(){setTimeout(function(){if(!me.isHidden()){me.safeSetOffset(uiUtils.getClientRect(me.getDom()))}})});this._hide()},mesureSize:function(){var body=this.getDom(\"body\");var width=uiUtils.getClientRect(this.getDom(\"content\")).width;var dialogBodyStyle=body.style;dialogBodyStyle.width=width;return uiUtils.getClientRect(body)},_onTitlebarMouseDown:function(evt,el){if(this.draggable){var rect;var vpRect=uiUtils.getViewportRect();var me=this;uiUtils.startDrag(evt,{ondragstart:function(){rect=uiUtils.getClientRect(me.getDom());me.getDom(\"contmask\").style.visibility=\"visible\";me.dragMask.show(me.getDom().style.zIndex-1)},ondragmove:function(x,y){var left=rect.left+x;var top=rect.top+y;me.safeSetOffset({left:left,top:top})},ondragstop:function(){me.getDom(\"contmask\").style.visibility=\"hidden\";domUtils.removeClasses(me.getDom(),[\"edui-state-centered\"]);me.dragMask.hide()}})}},reset:function(){this.getDom(\"content\").innerHTML=this.getContentHtml();this.fireEvent(\"dialogafterreset\")},_show:function(){if(this._hidden){this.getDom().style.display=\"\";this.editor.container.style.zIndex&&(this.getDom().style.zIndex=this.editor.container.style.zIndex*1+10);this._hidden=false;this.fireEvent(\"show\");baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4}},isHidden:function(){return this._hidden},_hide:function(){if(!this._hidden){var wrapNode=this.getDom();wrapNode.style.display=\"none\";wrapNode.style.zIndex=\"\";wrapNode.style.width=\"\";wrapNode.style.height=\"\";this._hidden=true;this.fireEvent(\"hide\")}},open:function(){if(this.autoReset){try{this.reset()}catch(e){this.render();this.open()}}this.showAtCenter();if(this.iframeUrl){try{this.getDom(\"iframe\").focus()}catch(ex){}}activeDialog=this},_onCloseButtonClick:function(evt,el){this.close(false)},close:function(ok){if(this.fireEvent(\"close\",ok)!==false){if(this.fullscreen){document.documentElement.style.overflowX=this._originalContext.html.overflowX;document.documentElement.style.overflowY=this._originalContext.html.overflowY;document.body.style.overflowX=this._originalContext.body.overflowX;document.body.style.overflowY=this._originalContext.body.overflowY;delete this._originalContext}this._hide();var content=this.getDom(\"content\");var iframe=this.getDom(\"iframe\");if(content&&iframe){var doc=iframe.contentDocument||iframe.contentWindow.document;doc&&(doc.body.innerHTML=\"\");domUtils.remove(content)}}}};utils.inherits(Dialog,UIBase)})();(function(){var utils=baidu.editor.utils,Menu=baidu.editor.ui.Menu,SplitButton=baidu.editor.ui.SplitButton,MenuButton=baidu.editor.ui.MenuButton=function(options){this.initOptions(options);this.initMenuButton()};MenuButton.prototype={initMenuButton:function(){var me=this;this.uiName=\"menubutton\";this.popup=new Menu({items:me.items,className:me.className,editor:me.editor});this.popup.addListener(\"show\",function(){var list=this;for(var i=0;i<list.items.length;i++){list.items[i].removeState(\"checked\");if(list.items[i].value==me._value){list.items[i].addState(\"checked\");this.value=me._value}}});this.initSplitButton()},setValue:function(value){this._value=value}};utils.inherits(MenuButton,SplitButton)})();(function(){var utils=baidu.editor.utils,Popup=baidu.editor.ui.Popup,SplitButton=baidu.editor.ui.SplitButton,MultiMenuPop=baidu.editor.ui.MultiMenuPop=function(options){this.initOptions(options);this.initMultiMenu()};MultiMenuPop.prototype={initMultiMenu:function(){var me=this;this.popup=new Popup({content:\"\",editor:me.editor,iframe_rendered:false,onshow:function(){if(!this.iframe_rendered){this.iframe_rendered=true;this.getDom(\"content\").innerHTML='<iframe id=\"'+me.id+'_iframe\" src=\"'+me.iframeUrl+'\" frameborder=\"0\"></iframe>';me.editor.container.style.zIndex&&(this.getDom().style.zIndex=me.editor.container.style.zIndex*1+1)}}});this.onbuttonclick=function(){this.showPopup()};this.initSplitButton()}};utils.inherits(MultiMenuPop,SplitButton)})();(function(){var UI=baidu.editor.ui,UIBase=UI.UIBase,uiUtils=UI.uiUtils,utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils;var allMenus=[],timeID,isSubMenuShow=false;var ShortCutMenu=UI.ShortCutMenu=function(options){this.initOptions(options);this.initShortCutMenu()};ShortCutMenu.postHide=hideAllMenu;ShortCutMenu.prototype={isHidden:true,SPACE:5,initShortCutMenu:function(){this.items=this.items||[];this.initUIBase();this.initItems();this.initEvent();allMenus.push(this)},initEvent:function(){var me=this,doc=me.editor.document;me.editor.addListener(\"afterhidepop\",function(){if(!me.isHidden){isSubMenuShow=true}})},initItems:function(){if(utils.isArray(this.items)){for(var i=0,len=this.items.length;i<len;i++){if(\"string\"!==typeof this.items[i]){continue}var item=this.items[i].toLowerCase();if(UI[item]){this.items[i]=new UI[item](this.editor);this.items[i].className+=\" edui-short-cut-sub-menu \"}}}},setOpacity:function(el,value){if(browser.ie&&browser.version<9){el.style.filter=\"alpha(opacity = \"+parseFloat(value)*100+\");\"}else{el.style.opacity=value}},getSubMenuMark:function(){isSubMenuShow=false;var layerEle=uiUtils.getFixedLayer();var list=domUtils.getElementsByTagName(layerEle,\"div\",function(node){return domUtils.hasClass(node,\"edui-short-cut-sub-menu edui-popup\")});for(var i=0,node;node=list[i++];){if(node.style.display!==\"none\"){isSubMenuShow=true}}return isSubMenuShow},show:function(e,hasContextmenu){var me=this,offset={},el=this.getDom(),fixedlayer=uiUtils.getFixedLayer();for(let item of this.items){if(\"shouldUiShow\"in item){item.uiShow(item.shouldUiShow())}}function setPos(offset){if(offset.left<0){offset.left=0}if(offset.top<0){offset.top=0}el.style.cssText=\"position:absolute;left:\"+offset.left+\"px;top:\"+offset.top+\"px;\"}function setPosByCxtMenu(menu){if(!menu.tagName){menu=menu.getDom()}offset.left=parseInt(menu.style.left);offset.top=parseInt(menu.style.top);offset.top-=el.offsetHeight+15;setPos(offset)}me.eventType=e.type;el.style.cssText=\"display:block;left:-9999px\";offset=uiUtils.getViewportOffsetByEvent(e);offset.top-=el.offsetHeight+me.SPACE;offset.left+=me.SPACE+20;setPos(offset);me.setOpacity(el,1);me.isHidden=false;me.left=e.screenX+el.offsetWidth/2-me.SPACE;me.top=e.screenY-el.offsetHeight/2-me.SPACE;if(me.editor){el.style.zIndex=me.editor.container.style.zIndex*1+10;fixedlayer.style.zIndex=el.style.zIndex-1}},hide:function(){if(this.getDom()){this.getDom().style.display=\"none\"}this.isHidden=true},postRender:function(){if(utils.isArray(this.items)){for(var i=0,item;item=this.items[i++];){item.postRender()}}},getHtmlTpl:function(){var buff;if(utils.isArray(this.items)){buff=[];for(var i=0;i<this.items.length;i++){buff[i]=this.items[i].renderHtml()}buff=buff.join(\"\")}else{buff=this.items}return'<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >'+buff+\"</div>\"}};utils.inherits(ShortCutMenu,UIBase);function hideAllMenu(e){var tgt=e.target||e.srcElement,cur=domUtils.findParent(tgt,function(node){return domUtils.hasClass(node,\"edui-shortcutmenu\")||domUtils.hasClass(node,\"edui-popup\")},true);if(!cur){for(var i=0,menu;menu=allMenus[i++];){menu.hide()}}}domUtils.on(document,\"mousedown\",function(e){hideAllMenu(e)});domUtils.on(window,\"scroll\",function(e){hideAllMenu(e)})})();(function(){var utils=baidu.editor.utils,UIBase=baidu.editor.ui.UIBase,Breakline=baidu.editor.ui.Breakline=function(options){this.initOptions(options);this.initSeparator()};Breakline.prototype={uiName:\"Breakline\",initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return\"<br/>\"}};utils.inherits(Breakline,UIBase)})();(function(){var utils=baidu.editor.utils,domUtils=baidu.editor.dom.domUtils,UIBase=baidu.editor.ui.UIBase,Message=baidu.editor.ui.Message=function(options){this.initOptions(options);this.initMessage()};Message.prototype={initMessage:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id=\"##\" class=\"edui-message %%\">'+' <div id=\"##_closer\" class=\"edui-message-closer\">×</div>'+' <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\">'+' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>'+' <div class=\"edui-shadow\"></div>'+' <div id=\"##_content\" class=\"edui-message-content\">'+\"  </div>\"+\" </div>\"+\"</div>\"},reset:function(opt){var me=this;if(!opt.keepshow){clearTimeout(this.timer);me.timer=setTimeout(function(){me.hide()},opt.timeout||4e3)}opt.content!==undefined&&me.setContent(opt.content);opt.type!==undefined&&me.setType(opt.type);me.show()},postRender:function(){var me=this,closer=this.getDom(\"closer\");closer&&domUtils.on(closer,\"click\",function(){me.hide()})},setContent:function(content){this.getDom(\"content\").innerHTML=content},setType:function(type){type=type||\"info\";var body=this.getDom(\"body\");body.className=body.className.replace(/edui-message-type-[\\w-]+/,\"edui-message-type-\"+type)},getContent:function(){return this.getDom(\"content\").innerHTML},getType:function(){var arr=this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);return arr?arr[1]:\"\"},show:function(){this.getDom().style.display=\"block\"},hide:function(){var dom=this.getDom();if(dom){dom.style.display=\"none\";dom.parentNode&&dom.parentNode.removeChild(dom)}}};utils.inherits(Message,UIBase)})();(function(){var utils=baidu.editor.utils;var editorui=baidu.editor.ui;var _Dialog=editorui.Dialog;editorui.buttons={};editorui.Dialog=function(options){var dialog=new _Dialog(options);dialog.addListener(\"hide\",function(){if(dialog.editor){var editor=dialog.editor;try{if(browser.gecko){var y=editor.window.scrollY,x=editor.window.scrollX;editor.body.focus();editor.window.scrollTo(x,y)}else{editor.focus()}}catch(ex){}}});return dialog};var btnCmds=[\"undo\",\"redo\",\"formatmatch\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"touppercase\",\"tolowercase\",\"strikethrough\",\"subscript\",\"superscript\",\"source\",\"indent\",\"outdent\",\"blockquote\",\"pasteplain\",\"pagebreak\",\"selectall\",\"print\",\"horizontal\",\"removeformat\",\"time\",\"date\",\"unlink\",\"insertparagraphbeforetable\",\"insertrow\",\"insertcol\",\"mergeright\",\"mergedown\",\"deleterow\",\"deletecol\",\"splittorows\",\"splittocols\",\"splittocells\",\"mergecells\",\"deletetable\"];for(var i=0,ci;ci=btnCmds[i++];){ci=ci.toLowerCase();editorui[ci]=function(cmd){return function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",onclick:function(){editor.execCommand(cmd)},theme:editor.options.theme,showText:false});switch(cmd){case\"bold\":case\"italic\":case\"underline\":case\"strikethrough\":case\"fontborder\":ui.shouldUiShow=function(cmdInternal){return function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmdInternal)!==UE.constants.STATEFUL.DISABLED}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(cmd);if(state===-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}}(ci)}editorui.cleardoc=function(editor){var ui=new editorui.Button({className:\"edui-for-cleardoc\",title:editor.options.labelMap.cleardoc||editor.getLang(\"labelMap.cleardoc\")||\"\",theme:editor.options.theme,onclick:function(){if(confirm(editor.getLang(\"confirmClear\"))){editor.execCommand(\"cleardoc\")}}});editorui.buttons[\"cleardoc\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"cleardoc\")==-1)});return ui};var imageTypeSet=[\"none\",\"left\",\"center\",\"right\"];for(let value of imageTypeSet){(function(value){editorui[\"image\"+value]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+\"image\"+value,title:editor.options.labelMap[\"image\"+value]||editor.getLang(\"labelMap.\"+\"image\"+value)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(\"imagefloat\",value)},shouldUiShow:function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){return false}return editor.queryCommandState(\"imagefloat\")!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[\"image\"+value]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(\"imagefloat\")===UE.constants.STATEFUL.DISABLED);ui.setChecked(editor.queryCommandValue(\"imagefloat\")===value&&!uiReady)});return ui}})(value)}var typeset={justify:[\"left\",\"right\",\"center\",\"justify\"],directionality:[\"ltr\",\"rtl\"]};for(var p in typeset){(function(cmd,val){for(var i=0,ci;ci=val[i++];){(function(cmd2){editorui[cmd.replace(\"float\",\"\")+cmd2]=function(editor){var ui=new editorui.Button({className:\"edui-for-\"+cmd.replace(\"float\",\"\")+cmd2,title:editor.options.labelMap[cmd.replace(\"float\",\"\")+cmd2]||editor.getLang(\"labelMap.\"+cmd.replace(\"float\",\"\")+cmd2)||\"\",theme:editor.options.theme,onclick:function(){editor.execCommand(cmd,cmd2)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){ui.setDisabled(editor.queryCommandState(cmd)==-1);ui.setChecked(editor.queryCommandValue(cmd)==cmd2&&!uiReady)});return ui}})(ci)}})(p,typeset[p])}for(var i=0,ci;ci=[\"backcolor\",\"forecolor\"][i++];){editorui[ci]=function(cmd){return function(editor){var ui=new editorui.ColorButton({className:\"edui-for-\"+cmd,color:\"default\",title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\",editor:editor,onpickcolor:function(t,color){editor.execCommand(cmd,color)},onpicknocolor:function(){editor.execCommand(cmd,\"default\");this.setColor(\"transparent\");this.color=\"default\"},onbuttonclick:function(){editor.execCommand(cmd,this.color)},shouldUiShow:function(){if(!editor.selection.getText()){return false}return editor.queryCommandState(cmd)!==UE.constants.STATEFUL.DISABLED}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui}}(ci)}var dialogIframeUrlMap={anchor:\"~/dialogs/anchor/anchor.html?2f10d082\",insertimage:\"~/dialogs/image/image.html?33811fba\",link:\"~/dialogs/link/link.html?ccbfcf18\",spechars:\"~/dialogs/spechars/spechars.html?3bbeb696\",searchreplace:\"~/dialogs/searchreplace/searchreplace.html?2cb782d2\",insertvideo:\"~/dialogs/video/video.html?918640f8\",insertaudio:\"~/dialogs/audio/audio.html?d1beccf5\",help:\"~/dialogs/help/help.html?05c0c8bf\",preview:\"~/dialogs/preview/preview.html?5d9a0847\",emotion:\"~/dialogs/emotion/emotion.html?a7bc0989\",wordimage:\"~/dialogs/wordimage/wordimage.html?c29fcf85\",formula:\"~/dialogs/formula/formula.html?9a5a1511\",attachment:\"~/dialogs/attachment/attachment.html?abf97d51\",insertframe:\"~/dialogs/insertframe/insertframe.html?807119a5\",edittip:\"~/dialogs/table/edittip.html?fa0ea189\",edittable:\"~/dialogs/table/edittable.html?134e2f06\",edittd:\"~/dialogs/table/edittd.html?9fe1a06e\",scrawl:\"~/dialogs/scrawl/scrawl.html?81bccab9\",template:\"~/dialogs/template/template.html?3c8090b7\",background:\"~/dialogs/background/background.html?c2bb8b05\",contentimport:\"~/dialogs/contentimport/contentimport.html?e298f77b\"};var dialogBtns={noOk:[\"searchreplace\",\"help\",\"spechars\",\"preview\"],ok:[\"attachment\",\"anchor\",\"link\",\"insertimage\",\"insertframe\",\"wordimage\",\"insertvideo\",\"insertaudio\",\"edittip\",\"edittable\",\"edittd\",\"scrawl\",\"template\",\"formula\",\"background\",\"contentimport\"]};for(var p in dialogBtns){(function(type,vals){for(var i=0,ci;ci=vals[i++];){if(browser.opera&&ci===\"searchreplace\"){continue}(function(cmd){editorui[cmd]=function(editor,iframeUrl,title){iframeUrl=iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd];title=editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd)||\"\";var dialog;if(iframeUrl){dialog=new editorui.Dialog(utils.extend({iframeUrl:editor.ui.mapUrl(iframeUrl),editor:editor,className:\"edui-for-\"+cmd,title:title,holdScroll:cmd===\"insertimage\",fullscreen:/preview/.test(cmd),closeDialog:editor.getLang(\"closeDialog\")},type===\"ok\"?{buttons:[{className:\"edui-okbutton\",label:editor.getLang(\"ok\"),editor:editor,onclick:function(){dialog.close(true)}},{className:\"edui-cancelbutton\",label:editor.getLang(\"cancel\"),editor:editor,onclick:function(){dialog.close(false)}}]}:{}));editor.ui._dialogs[cmd+\"Dialog\"]=dialog}var ui=new editorui.Button({className:\"edui-for-\"+cmd,title:title,onclick:function(){if(editor.options.toolbarCallback){if(true===editor.options.toolbarCallback(cmd,editor)){return}}if(dialog){switch(cmd){case\"wordimage\":var images=editor.execCommand(\"wordimage\");if(images&&images.length){dialog.render();dialog.open()}break;case\"scrawl\":if(editor.queryCommandState(\"scrawl\")!==-1){dialog.render();dialog.open()}break;default:dialog.render();dialog.open()}}},theme:editor.options.theme,disabled:cmd===\"scrawl\"&&editor.queryCommandState(\"scrawl\")===-1});switch(cmd){case\"insertimage\":case\"formula\":ui.shouldUiShow=function(cmd){return function(){let closedNode=editor.selection.getRange().getClosedNode();if(!closedNode||closedNode.tagName!==\"IMG\"){return false}if(\"formula\"===cmd&&closedNode.getAttribute(\"data-formula-image\")!==null){return true}if(\"insertimage\"===cmd){return true}return false}}(cmd);break}editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var unNeedCheckState={edittable:1};if(cmd in unNeedCheckState)return;var state=editor.queryCommandState(cmd);if(ui.getDom()){ui.setDisabled(state===-1);ui.setChecked(state)}});return ui}})(ci.toLowerCase())}})(p,dialogBtns[p])}editorui.insertcode=function(editor,list,title){list=editor.options[\"insertcode\"]||[];title=editor.options.labelMap[\"insertcode\"]||editor.getLang(\"labelMap.insertcode\")||\"\";var items=[];utils.each(list,function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" >'+(this.label||\"\")+\"</div>\"}})});var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"insertcode\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-insertcode\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"insertcode\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"insertcode\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"insertcode\");if(!value){ui.setValue(title);return}value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontfamily=function(editor,list,title){list=editor.options[\"fontfamily\"]||[];title=editor.options.labelMap[\"fontfamily\"]||editor.getLang(\"labelMap.fontfamily\")||\"\";if(!list.length)return;for(var i=0,ci,items=[];ci=list[i];i++){var langLabel=editor.getLang(\"fontfamily\")[ci.name]||\"\";(function(key,val){items.push({label:key,value:val,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"font-family:'+utils.unhtml(this.value)+'\">'+(this.label||\"\")+\"</div>\"}})})(ci.label||langLabel,ci.val)}var ui=new editorui.Combox({editor:editor,items:items,onselect:function(t,index){editor.execCommand(\"FontFamily\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},title:title,initValue:title,className:\"edui-for-fontfamily\",indexByValue:function(value){if(value){for(var i=0,ci;ci=this.items[i];i++){if(ci.value.indexOf(value)!=-1)return i}}return-1}});editorui.buttons[\"fontfamily\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontFamily\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"FontFamily\");value&&(value=value.replace(/['\"]/g,\"\").split(\",\")[0]);ui.setValue(value)}}});return ui};editorui.fontsize=function(editor,list,title){title=editor.options.labelMap[\"fontsize\"]||editor.getLang(\"labelMap.fontsize\")||\"\";list=list||editor.options[\"fontsize\"]||[];if(!list.length)return;var items=[];for(var i=0;i<list.length;i++){var size=list[i]+\"px\";items.push({label:size,value:size,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:'+this.value+'\">'+(this.label||\"\")+\"</div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,onselect:function(t,index){editor.execCommand(\"FontSize\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},className:\"edui-for-fontsize\"});editorui.buttons[\"fontsize\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"FontSize\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);ui.setValue(editor.queryCommandValue(\"FontSize\"))}}});return ui};editorui.paragraph=function(editor,list,title){title=editor.options.labelMap[\"paragraph\"]||editor.getLang(\"labelMap.paragraph\")||\"\";list=editor.options[\"paragraph\"]||[];if(utils.isEmptyObject(list))return;var items=[];for(var i in list){items.push({value:i,label:list[i]||editor.getLang(\"paragraph\")[i],theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\"><span class=\"edui-for-'+this.value+'\">'+(this.label||\"\")+\"</span></div>\"}})}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-paragraph\",onselect:function(t,index){editor.execCommand(\"Paragraph\",this.items[index].value)},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"paragraph\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"Paragraph\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"Paragraph\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.customstyle=function(editor){var list=editor.options[\"customstyle\"]||[],title=editor.options.labelMap[\"customstyle\"]||editor.getLang(\"labelMap.customstyle\")||\"\";if(!list.length)return;var langCs=editor.getLang(\"customstyle\");for(var i=0,items=[],t;t=list[i++];){(function(t){var ck={};ck.label=t.label?t.label:langCs[t.name];ck.style=t.style;ck.className=t.className;ck.tag=t.tag;items.push({label:ck.label,value:ck,theme:editor.options.theme,renderLabelHtml:function(){return'<div class=\"edui-label %%-label\">'+\"<\"+ck.tag+\" \"+(ck.className?' class=\"'+ck.className+'\"':\"\")+(ck.style?' style=\"'+ck.style+'\"':\"\")+\">\"+ck.label+\"</\"+ck.tag+\">\"+\"</div>\"}})})(t)}var ui=new editorui.Combox({editor:editor,items:items,title:title,initValue:title,className:\"edui-for-customstyle\",onselect:function(t,index){editor.execCommand(\"customstyle\",this.items[index].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(value){for(var i=0,ti;ti=this.items[i++];){if(ti.label==value){return i-1}}return-1}});editorui.buttons[\"customstyle\"]=ui;editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){if(!uiReady){var state=editor.queryCommandState(\"customstyle\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"customstyle\");var index=ui.indexByValue(value);if(index!=-1){ui.setValue(value)}else{ui.setValue(ui.initValue)}}}});return ui};editorui.inserttable=function(editor,iframeUrl,title){title=editor.options.labelMap[\"inserttable\"]||editor.getLang(\"labelMap.inserttable\")||\"\";var ui=new editorui.TableButton({editor:editor,title:title,className:\"edui-for-inserttable\",onpicktable:function(t,numCols,numRows){editor.execCommand(\"InsertTable\",{numRows:numRows,numCols:numCols,border:1})},onbuttonclick:function(){this.showPopup()}});editorui.buttons[\"inserttable\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"inserttable\")==-1)});return ui};editorui.lineheight=function(editor){var val=editor.options.lineheight||[];if(!val.length)return;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"lineheight\",this.value)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-lineheight\",title:editor.options.labelMap[\"lineheight\"]||editor.getLang(\"labelMap.lineheight\")||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"LineHeight\")||this.value;editor.execCommand(\"LineHeight\",value)}});editorui.buttons[\"lineheight\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"LineHeight\");if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"LineHeight\");value&&ui.setValue((value+\"\").replace(/cm/,\"\"));ui.setChecked(state)}});return ui};var rowspacings=[\"top\",\"bottom\"];for(var r=0,ri;ri=rowspacings[r++];){(function(cmd){editorui[\"rowspacing\"+cmd]=function(editor){var val=editor.options[\"rowspacing\"+cmd]||[];if(!val.length)return null;for(var i=0,ci,items=[];ci=val[i++];){items.push({label:ci,value:ci,theme:editor.options.theme,onclick:function(){editor.execCommand(\"rowspacing\",this.value,cmd)}})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-rowspacing\"+cmd,title:editor.options.labelMap[\"rowspacing\"+cmd]||editor.getLang(\"labelMap.rowspacing\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(\"rowspacing\",cmd)||this.value;editor.execCommand(\"rowspacing\",value,cmd)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"rowspacing\",cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(\"rowspacing\",cmd);value&&ui.setValue((value+\"\").replace(/%/,\"\"));ui.setChecked(state)}});return ui}})(ri)}var lists=[\"insertorderedlist\",\"insertunorderedlist\"];for(var l=0,cl;cl=lists[l++];){(function(cmd){editorui[cmd]=function(editor){var vals=editor.options[cmd],_onMenuClick=function(){editor.execCommand(cmd,this.value)},items=[];for(var i in vals){items.push({label:vals[i]||editor.getLang()[cmd][i]||\"\",value:i,theme:editor.options.theme,onclick:_onMenuClick})}var ui=new editorui.MenuButton({editor:editor,className:\"edui-for-\"+cmd,title:editor.getLang(\"labelMap.\"+cmd)||\"\",items:items,onbuttonclick:function(){var value=editor.queryCommandValue(cmd)||this.value;editor.execCommand(cmd,value)}});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(cmd);if(state==-1){ui.setDisabled(true)}else{ui.setDisabled(false);var value=editor.queryCommandValue(cmd);ui.setValue(value);ui.setChecked(state)}});return ui}})(cl)}editorui.fullscreen=function(editor,title){title=editor.options.labelMap[\"fullscreen\"]||editor.getLang(\"labelMap.fullscreen\")||\"\";var ui=new editorui.Button({className:\"edui-for-fullscreen\",title:title,theme:editor.options.theme,onclick:function(){if(editor.ui){editor.ui.setFullScreen(!editor.ui.isFullScreen())}this.setChecked(editor.ui.isFullScreen())}});editorui.buttons[\"fullscreen\"]=ui;editor.addListener(\"selectionchange\",function(){var state=editor.queryCommandState(\"fullscreen\");ui.setDisabled(state==-1);ui.setChecked(editor.ui.isFullScreen())});return ui};editorui[\"emotion\"]=function(editor,iframeUrl){var cmd=\"emotion\";var ui=new editorui.MultiMenuPop({title:editor.options.labelMap[cmd]||editor.getLang(\"labelMap.\"+cmd+\"\")||\"\",editor:editor,className:\"edui-for-\"+cmd,iframeUrl:editor.ui.mapUrl(iframeUrl||(editor.options.dialogIframeUrlMap||{})[cmd]||dialogIframeUrlMap[cmd])});editorui.buttons[cmd]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(cmd)==-1)});return ui};editorui[\"autotypeset\"]=function(editor){var ui=new editorui.AutoTypeSetButton({editor:editor,title:editor.options.labelMap[\"autotypeset\"]||editor.getLang(\"labelMap.autotypeset\")||\"\",className:\"edui-for-autotypeset\",onbuttonclick:function(){editor.execCommand(\"autotypeset\")}});editorui.buttons[\"autotypeset\"]=ui;editor.addListener(\"selectionchange\",function(){ui.setDisabled(editor.queryCommandState(\"autotypeset\")==-1)});return ui};editorui[\"simpleupload\"]=function(editor){var name=\"simpleupload\",ui=new editorui.Button({className:\"edui-for-\"+name,title:editor.options.labelMap[name]||editor.getLang(\"labelMap.\"+name)||\"\",onclick:function(){},theme:editor.options.theme,showText:false});editorui.buttons[name]=ui;editor.addListener(\"ready\",function(){var b=ui.getDom(\"body\"),iconSpan=b.children[0];editor.fireEvent(\"simpleuploadbtnready\",iconSpan)});editor.addListener(\"selectionchange\",function(type,causeByUi,uiReady){var state=editor.queryCommandState(name);if(state==-1){ui.setDisabled(true);ui.setChecked(false)}else{if(!uiReady){ui.setDisabled(false);ui.setChecked(state)}}});return ui}})();(function(){var utils=baidu.editor.utils,uiUtils=baidu.editor.ui.uiUtils,UIBase=baidu.editor.ui.UIBase,domUtils=baidu.editor.dom.domUtils;var nodeStack=[];function EditorUI(options){this.initOptions(options);this.initEditorUI()}EditorUI.prototype={uiName:\"editor\",initEditorUI:function(){this.editor.ui=this;this._dialogs={};this.initUIBase();this._initToolbars();var editor=this.editor,me=this;editor.addListener(\"ready\",function(){editor.getDialog=function(name){return editor.ui._dialogs[name+\"Dialog\"]};domUtils.on(editor.window,\"scroll\",function(evt){baidu.editor.ui.Popup.postHide(evt)});editor.ui._actualFrameWidth=editor.options.initialFrameWidth;UE.browser.ie&&UE.browser.version===6&&editor.container.ownerDocument.execCommand(\"BackgroundImageCache\",false,true);if(editor.options.elementPathEnabled){editor.ui.getDom(\"elementpath\").innerHTML='<div class=\"edui-editor-breadcrumb\">'+editor.getLang(\"elementPathTip\")+\":</div>\"}if(editor.options.wordCount){function countFn(){setCount(editor,me);domUtils.un(editor.document,\"click\",arguments.callee)}domUtils.on(editor.document,\"click\",countFn);editor.ui.getDom(\"wordcount\").innerHTML=editor.getLang(\"wordCountTip\")}editor.ui._scale();if(editor.options.scaleEnabled){if(editor.autoHeightEnabled){editor.disableAutoHeight()}me.enableScale()}else{me.disableScale()}if(!editor.options.elementPathEnabled&&!editor.options.wordCount&&!editor.options.scaleEnabled){editor.ui.getDom(\"elementpath\").style.display=\"none\";editor.ui.getDom(\"wordcount\").style.display=\"none\";editor.ui.getDom(\"scale\").style.display=\"none\"}if(!editor.selection.isFocus())return;editor.fireEvent(\"selectionchange\",false,true)});editor.addListener(\"mousedown\",function(t,evt){var el=evt.target||evt.srcElement;baidu.editor.ui.Popup.postHide(evt,el);baidu.editor.ui.ShortCutMenu.postHide(evt)});editor.addListener(\"delcells\",function(){if(UE.ui[\"edittip\"]){new UE.ui[\"edittip\"](editor)}editor.getDialog(\"edittip\").open()});var pastePop,isPaste=false,timer;editor.addListener(\"afterpaste\",function(){if(editor.queryCommandState(\"pasteplain\"))return;if(baidu.editor.ui.PastePicker){pastePop=new baidu.editor.ui.Popup({content:new baidu.editor.ui.PastePicker({editor:editor}),editor:editor,className:\"edui-wordpastepop\"});pastePop.render()}isPaste=true});editor.addListener(\"afterinserthtml\",function(){clearTimeout(timer);timer=setTimeout(function(){if(pastePop&&(isPaste||editor.ui._isTransfer)){if(pastePop.isHidden()){var span=domUtils.createElement(editor.document,\"span\",{style:\"line-height:0px;\",innerHTML:\"\\ufeff\"}),range=editor.selection.getRange();range.insertNode(span);var tmp=getDomNode(span,\"firstChild\",\"previousSibling\");tmp&&pastePop.showAnchor(tmp.nodeType==3?tmp.parentNode:tmp);domUtils.remove(span)}else{pastePop.show()}delete editor.ui._isTransfer;isPaste=false}},200)});editor.addListener(\"contextmenu\",function(t,evt){baidu.editor.ui.Popup.postHide(evt)});editor.addListener(\"keydown\",function(t,evt){if(pastePop)pastePop.dispose(evt);var keyCode=evt.keyCode||evt.which;if(evt.altKey&&keyCode==90){UE.ui.buttons[\"fullscreen\"].onclick()}});editor.addListener(\"wordcount\",function(type){setCount(this,me)});function setCount(editor,ui){editor.setOpt({wordCount:true,maximumWords:1e4,wordCountMsg:editor.options.wordCountMsg||editor.getLang(\"wordCountMsg\"),wordOverFlowMsg:editor.options.wordOverFlowMsg||editor.getLang(\"wordOverFlowMsg\")});var opt=editor.options,max=opt.maximumWords,msg=opt.wordCountMsg,errMsg=opt.wordOverFlowMsg,countDom=ui.getDom(\"wordcount\");if(!opt.wordCount){return}var count=editor.getContentLength(true);if(count>max){countDom.innerHTML=errMsg;editor.fireEvent(\"wordcountoverflow\")}else{countDom.innerHTML=msg.replace(\"{#leave}\",max-count).replace(\"{#count}\",count)}}editor.addListener(\"selectionchange\",function(){if(editor.options.elementPathEnabled){me[(editor.queryCommandState(\"elementpath\")==-1?\"dis\":\"en\")+\"ableElementPath\"]()}if(editor.options.scaleEnabled){me[(editor.queryCommandState(\"scale\")==-1?\"dis\":\"en\")+\"ableScale\"]()}});var popup=new baidu.editor.ui.Popup({editor:editor,content:\"\",className:\"edui-bubble\",_onEditButtonClick:function(){this.hide();editor.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(name){this.hide();editor.ui._dialogs[name]&&editor.ui._dialogs[name].open()},_onImgSetFloat:function(value){this.hide();editor.execCommand(\"imagefloat\",value)},_setIframeAlign:function(value){var frame=popup.anchorEl;var newFrame=frame.cloneNode(true);switch(value){case-2:newFrame.setAttribute(\"align\",\"\");break;case-1:newFrame.setAttribute(\"align\",\"left\");break;case 1:newFrame.setAttribute(\"align\",\"right\");break}frame.parentNode.insertBefore(newFrame,frame);domUtils.remove(frame);popup.anchorEl=newFrame;popup.showAnchor(popup.anchorEl)},_updateIframe:function(){var frame=editor._iframe=popup.anchorEl;if(domUtils.hasClass(frame,\"ueditor_baidumap\")){editor.selection.getRange().selectNode(frame).select();editor.ui._dialogs.mapDialog.open();popup.hide()}else{editor.ui._dialogs.insertframeDialog.open();popup.hide()}},_onRemoveButtonClick:function(cmdName){editor.execCommand(cmdName);this.hide()},queryAutoHide:function(el){if(el&&el.ownerDocument==editor.document){if(el.tagName.toLowerCase()==\"img\"||domUtils.findParentByTagName(el,\"a\",true)){return el!==popup.anchorEl}}return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this,el)}});popup.render();if(editor.options.imagePopup){editor.addListener(\"mouseover\",function(t,evt){evt=evt||window.event;var el=evt.target||evt.srcElement;if(editor.ui._dialogs.insertframeDialog&&/iframe/gi.test(el.tagName)){var html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">'+editor.getLang(\"default\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">'+editor.getLang(\"justifyleft\")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">'+editor.getLang(\"justifyright\")+\"</span>&nbsp;&nbsp;\"+' <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span></nobr>\");if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=el;popup.showAnchor(popup.anchorEl)}else{popup.hide()}}});editor.addListener(\"selectionchange\",function(t,causeByUi){if(!causeByUi){return}var html=\"\",str=\"\",closedNode=editor.selection.getRange().getClosedNode(),dialogs=editor.ui._dialogs;if(closedNode&&closedNode.tagName===\"IMG\"){var dialogName=\"insertimageDialog\";if(closedNode.className.indexOf(\"edui-faked-video\")!==-1||closedNode.className.indexOf(\"edui-upload-video\")!==-1){dialogName=\"insertvideoDialog\"}if(closedNode.className.indexOf(\"edui-faked-audio\")!==-1||closedNode.className.indexOf(\"edui-upload-audio\")!==-1){dialogName=\"insertaudioDialog\"}if(closedNode.getAttribute(\"anchorname\")){dialogName=\"anchorDialog\";html=popup.formatHtml(\"<nobr>\"+'<span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">'+editor.getLang(\"modify\")+\"</span>&nbsp;&nbsp;\"+\"<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\"+editor.getLang(\"delete\")+\"</span></nobr>\")}if(domUtils.hasClass(closedNode,\"uep-loading\")||domUtils.hasClass(closedNode,\"uep-loading-error\")){dialogName=\"\"}if(!dialogs[dialogName]){return}var actions=[];if(closedNode.getAttribute(\"data-word-image\")){actions.push(\"<span onclick=\\\"$$._onImgEditButtonClick('wordimageDialog');\\\" class='edui-clickable edui-popup-action-item'>\"+editor.getLang(\"save\")+\"</span>\")}else{}if(actions.length>0){actions.unshift(\"<nobr>\");actions.push(\"</nobr>\")}!html&&(html=popup.formatHtml(actions.join(\"\")))}if(editor.ui._dialogs.linkDialog){var link=editor.queryCommandValue(\"link\");var url;if(link&&(url=link.getAttribute(\"_href\")||link.getAttribute(\"href\",2))){var txt=url;if(url.length>30){txt=url.substring(0,20)+\"...\"}if(html){html+='<div style=\"height:5px;\"></div>'}html+=popup.formatHtml(\"<nobr>\"+editor.getLang(\"anchorMsg\")+': <a target=\"_blank\" href=\"'+url+'\" title=\"'+url+'\" >'+txt+\"</a>\"+' <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">'+editor.getLang(\"modify\")+\"</span>\"+' <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> '+editor.getLang(\"clear\")+\"</span></nobr>\");popup.showAnchor(link)}}if(html){popup.getDom(\"content\").innerHTML=html;popup.anchorEl=closedNode||link;popup.showAnchor(popup.anchorEl)}else{popup.hide()}})}},_initToolbars:function(){var editor=this.editor;var toolbars=this.toolbars||[];if(toolbars[0]){toolbars[0].unshift(\"message\")}var toolbarUis=[];var extraUIs=[];for(var i=0;i<toolbars.length;i++){var toolbar=toolbars[i];var toolbarUi=new baidu.editor.ui.Toolbar({theme:editor.options.theme});for(var j=0;j<toolbar.length;j++){var toolbarItem=toolbar[j];var toolbarItemUi=null;if(typeof toolbarItem==\"string\"){toolbarItem=toolbarItem.toLowerCase();if(toolbarItem===\"|\"){toolbarItem=\"Separator\"}if(toolbarItem===\"||\"){toolbarItem=\"Breakline\"}var ui=baidu.editor.ui[toolbarItem];if(ui){if(utils.isFunction(ui)){toolbarItemUi=new baidu.editor.ui[toolbarItem](editor)}else{if(ui.id&&ui.id!==editor.key){continue}var itemUI=ui.execFn.call(editor,editor,toolbarItem);if(itemUI){if(ui.index===undefined){toolbarUi.add(itemUI);continue}else{extraUIs.push({index:ui.index,itemUI:itemUI})}}}}if(toolbarItem===\"fullscreen\"){if(toolbarUis&&toolbarUis[0]){toolbarUis[0].items.splice(0,0,toolbarItemUi)}else{toolbarItemUi&&toolbarUi.items.splice(0,0,toolbarItemUi)}continue}}else{toolbarItemUi=toolbarItem}if(toolbarItemUi&&toolbarItemUi.id){toolbarUi.add(toolbarItemUi)}}toolbarUis[i]=toolbarUi}utils.each(extraUIs,function(obj){toolbarUi.add(obj.itemUI,obj.index)});this.toolbars=toolbarUis},getHtmlTpl:function(){return'<div id=\"##\" class=\"%%\">'+'<div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">'+(this.toolbars.length?'<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">'+this.renderToolbarBoxHtml()+\"</div></div>\":\"\")+'<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\">'+'<div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">'+this.editor.getLang(\"clickToUpload\")+\"</div>\"+'<div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div>'+'<div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div>'+'<div style=\"height:0;overflow:hidden;clear:both;\"></div>'+\"</div>\"+'<div id=\"##_message_holder\" class=\"%%-messageholder\"></div>'+\"</div>\"+'<div id=\"##_iframeholder\" class=\"%%-iframeholder\">'+\"</div>\"+'<div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr>'+'<td id=\"##_elementpath\" class=\"%%-bottombar\"></td>'+'<td id=\"##_wordcount\" class=\"%%-wordcount\"></td>'+'<td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td>'+\"</tr></table></div>\"+'<div id=\"##_scalelayer\"></div>'+\"</div>\"},showWordImageDialog:function(){this._dialogs[\"wordimageDialog\"].open()},renderToolbarBoxHtml:function(){var buff=[];for(var i=0;i<this.toolbars.length;i++){buff.push(this.toolbars[i].renderHtml())}return buff.join(\"\")},setFullScreen:function(fullscreen){var editor=this.editor,container=editor.container.parentNode.parentNode;if(this._fullscreen!=fullscreen){this._fullscreen=fullscreen;this.editor.fireEvent(\"beforefullscreenchange\",fullscreen);if(baidu.editor.browser.gecko){var bk=editor.selection.getRange().createBookmark()}if(fullscreen){this._bakEditorContaninerWidth=editor.iframe.parentNode.style.width;while(container.tagName!==\"BODY\"){var position=baidu.editor.dom.domUtils.getComputedStyle(container,\"position\");nodeStack.push(position);container.style.position=\"static\";container=container.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow;this._bakBodyOverflow=document.body.style.overflow;this._bakAutoHeight=this.editor.autoHeightEnabled;this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);if(this._bakAutoHeight){editor.autoHeightEnabled=false;this.editor.disableAutoHeight()}document.documentElement.style.overflow=\"hidden\";window.scrollTo(0,window.scrollY);this._bakCssText=this.getDom().style.cssText;this._bakCssText1=this.getDom(\"iframeholder\").style.cssText;editor.iframe.parentNode.style.width=\"\";this._updateFullScreen()}else{while(container.tagName!==\"BODY\"){container.style.position=nodeStack.shift();container=container.parentNode}this.getDom().style.cssText=this._bakCssText;this.getDom(\"iframeholder\").style.cssText=this._bakCssText1;if(this._bakAutoHeight){editor.autoHeightEnabled=true;this.editor.enableAutoHeight()}document.documentElement.style.overflow=this._bakHtmlOverflow;document.body.style.overflow=this._bakBodyOverflow;editor.iframe.parentNode.style.width=this._bakEditorContaninerWidth;window.scrollTo(0,this._bakScrollTop)}if(browser.gecko&&editor.body.contentEditable===\"true\"){var input=document.createElement(\"input\");document.body.appendChild(input);editor.body.contentEditable=false;setTimeout(function(){input.focus();setTimeout(function(){editor.body.contentEditable=true;editor.fireEvent(\"fullscreenchanged\",fullscreen);editor.selection.getRange().moveToBookmark(bk).select(true);baidu.editor.dom.domUtils.remove(input);fullscreen&&window.scroll(0,0)},0)},0)}if(editor.body.contentEditable===\"true\"){this.editor.fireEvent(\"fullscreenchanged\",fullscreen);this.triggerLayout()}}},_updateFullScreen:function(){if(this._fullscreen){var vpRect=uiUtils.getViewportRect();this.getDom().style.cssText=\"border:0;position:absolute;left:0;top:var(--ueditor-top-offset,\"+(this.editor.options.topOffset||0)+\"px);width:\"+vpRect.width+\"px;height:\"+vpRect.height+\"px;z-index:\"+(this.getDom().style.zIndex*1+100);uiUtils.setViewportOffset(this.getDom(),{left:0});this.editor.setHeight(vpRect.height-this.getDom(\"toolbarbox\").offsetHeight-this.getDom(\"bottombar\").offsetHeight-(this.editor.options.topOffset||0),true);if(browser.gecko){try{window.onresize()}catch(e){}}}},_updateElementPath:function(){var bottom=this.getDom(\"elementpath\"),list;if(this.elementPathEnabled&&(list=this.editor.queryCommandValue(\"elementpath\"))){var buff=[];for(var i=0,ci;ci=list[i];i++){buff[i]=this.formatHtml('<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+i+'&quot;);\">'+ci+\"</span>\")}bottom.innerHTML='<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">'+this.editor.getLang(\"elementPathTip\")+\": \"+buff.join(\" &gt; \")+\"</div>\"}else{bottom.style.display=\"none\"}},disableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.innerHTML=\"\";bottom.style.display=\"none\";this.elementPathEnabled=false},enableElementPath:function(){var bottom=this.getDom(\"elementpath\");bottom.style.display=\"\";this.elementPathEnabled=true;this._updateElementPath()},_scale:function(){var doc=document,editor=this.editor,editorHolder=editor.container,editorDocument=editor.document,toolbarBox=this.getDom(\"toolbarbox\"),bottombar=this.getDom(\"bottombar\"),scale=this.getDom(\"scale\"),scalelayer=this.getDom(\"scalelayer\");var isMouseMove=false,position=null,minEditorHeight=0,minEditorWidth=editor.options.minFrameWidth,pageX=0,pageY=0,scaleWidth=0,scaleHeight=0;function down(){position=domUtils.getXY(editorHolder);if(!minEditorHeight){minEditorHeight=editor.options.minFrameHeight+toolbarBox.offsetHeight+bottombar.offsetHeight}scalelayer.style.cssText=\"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\"+editorHolder.offsetWidth+\"px;height:\"+editorHolder.offsetHeight+\"px;z-index:\"+(editor.options.zIndex+1);domUtils.on(doc,\"mousemove\",move);domUtils.on(editorDocument,\"mouseup\",up);domUtils.on(doc,\"mouseup\",up)}var me=this;this.editor.addListener(\"fullscreenchanged\",function(e,fullScreen){if(fullScreen){me.disableScale()}else{if(me.editor.options.scaleEnabled){me.enableScale();var tmpNode=me.editor.document.createElement(\"span\");me.editor.body.appendChild(tmpNode);me.editor.body.style.height=Math.max(domUtils.getXY(tmpNode).y,me.editor.iframe.offsetHeight-20)+\"px\";domUtils.remove(tmpNode)}}});function move(event){clearSelection();var e=event||window.event;pageX=e.pageX||doc.documentElement.scrollLeft+e.clientX;pageY=e.pageY||doc.documentElement.scrollTop+e.clientY;scaleWidth=pageX-position.x;scaleHeight=pageY-position.y;if(scaleWidth>=minEditorWidth){isMouseMove=true;scalelayer.style.width=scaleWidth+\"px\"}if(scaleHeight>=minEditorHeight){isMouseMove=true;scalelayer.style.height=scaleHeight+\"px\"}}function up(){if(isMouseMove){isMouseMove=false;editor.ui._actualFrameWidth=scalelayer.offsetWidth-2;editorHolder.style.width=editor.ui._actualFrameWidth+\"px\";editor.setHeight(scalelayer.offsetHeight-bottombar.offsetHeight-toolbarBox.offsetHeight-2,true)}if(scalelayer){scalelayer.style.display=\"none\"}clearSelection();domUtils.un(doc,\"mousemove\",move);domUtils.un(editorDocument,\"mouseup\",up);domUtils.un(doc,\"mouseup\",up)}function clearSelection(){if(browser.ie)doc.selection.clear();else window.getSelection().removeAllRanges()}this.enableScale=function(){if(editor.queryCommandState(\"source\")==1)return;scale.style.display=\"\";this.scaleEnabled=true;domUtils.on(scale,\"mousedown\",down)};this.disableScale=function(){scale.style.display=\"none\";this.scaleEnabled=false;domUtils.un(scale,\"mousedown\",down)}},isFullScreen:function(){return this._fullscreen},postRender:function(){UIBase.prototype.postRender.call(this);for(var i=0;i<this.toolbars.length;i++){this.toolbars[i].postRender()}var me=this;var timerId,domUtils=baidu.editor.dom.domUtils,updateFullScreenTime=function(){clearTimeout(timerId);timerId=setTimeout(function(){me._updateFullScreen()})};domUtils.on(window,\"resize\",updateFullScreenTime);me.addListener(\"destroy\",function(){domUtils.un(window,\"resize\",updateFullScreenTime);clearTimeout(timerId)})},showToolbarMsg:function(msg,flag){this.getDom(\"toolbarmsg_label\").innerHTML=msg;this.getDom(\"toolbarmsg\").style.display=\"\";if(!flag){var w=this.getDom(\"upload_dialog\");w.style.display=\"none\"}},hideToolbarMsg:function(){this.getDom(\"toolbarmsg\").style.display=\"none\"},mapUrl:function(url){return url?url.replace(\"~/\",this.editor.options.UEDITOR_CORS_URL||\"\"):\"\"},triggerLayout:function(){var dom=this.getDom();if(dom.style.zoom==\"1\"){dom.style.zoom=\"100%\"}else{dom.style.zoom=\"1\"}}};utils.inherits(EditorUI,baidu.editor.ui.UIBase);var instances={};UE.ui.Editor=function(options){var editor=new UE.Editor(options);editor.options.editor=editor;utils.loadFile(document,{href:editor.options.themePath+editor.options.theme+\"/css/ueditor.css?98125a73\",tag:\"link\",type:\"text/css\",rel:\"stylesheet\"});var oldRender=editor.render;editor.render=function(holder){if(holder.constructor===String){editor.key=holder;instances[holder]=editor}utils.domReady(function(){editor.langIsReady?renderUI():editor.addListener(\"langReady\",renderUI);function renderUI(){editor.setOpt({labelMap:editor.options.labelMap||editor.getLang(\"labelMap\")});new EditorUI(editor.options);if(holder){if(holder.constructor===String){holder=document.getElementById(holder)}holder&&holder.getAttribute(\"name\")&&(editor.options.textarea=holder.getAttribute(\"name\"));if(holder&&/script|textarea/gi.test(holder.tagName)){var newDiv=document.createElement(\"div\");holder.parentNode.insertBefore(newDiv,holder);var cont=holder.value||holder.innerHTML;editor.options.initialContent=/^[\\t\\r\\n ]*$/.test(cont)?editor.options.initialContent:cont.replace(/>[\\n\\r\\t]+([ ]{4})+/g,\">\").replace(/[\\n\\r\\t]+([ ]{4})+</g,\"<\").replace(/>[\\n\\r\\t]+</g,\"><\");holder.className&&(newDiv.className=holder.className);holder.style.cssText&&(newDiv.style.cssText=holder.style.cssText);if(/textarea/i.test(holder.tagName)){editor.textarea=holder;editor.textarea.style.display=\"none\"}else{holder.parentNode.removeChild(holder)}if(holder.id){newDiv.id=holder.id;domUtils.removeAttributes(holder,\"id\")}holder=newDiv;holder.innerHTML=\"\"}}domUtils.addClass(holder,\"edui-\"+editor.options.theme);editor.ui.render(holder);var opt=editor.options;editor.container=editor.ui.getDom();var parents=domUtils.findParents(holder,true);var displays=[];for(var i=0,ci;ci=parents[i];i++){displays[i]=ci.style.display;ci.style.display=\"block\"}if(opt.initialFrameWidth){opt.minFrameWidth=opt.initialFrameWidth}else{opt.minFrameWidth=opt.initialFrameWidth=holder.offsetWidth;var styleWidth=holder.style.width;if(/%$/.test(styleWidth)){opt.initialFrameWidth=styleWidth}}if(opt.initialFrameHeight){opt.minFrameHeight=opt.initialFrameHeight}else{opt.initialFrameHeight=opt.minFrameHeight=holder.offsetHeight}for(var i=0,ci;ci=parents[i];i++){ci.style.display=displays[i]}if(holder.style.height){holder.style.height=\"\"}editor.container.style.width=opt.initialFrameWidth+(/%$/.test(opt.initialFrameWidth)?\"\":\"px\");editor.container.style.zIndex=opt.zIndex;oldRender.call(editor,editor.ui.getDom(\"iframeholder\"));editor.fireEvent(\"afteruiready\")}})};return editor};UE.getEditor=function(id,opt){var editor=instances[id];if(!editor){editor=instances[id]=new UE.ui.Editor(opt);editor.render(id)}return editor};UE.delEditor=function(id){var editor;if(editor=instances[id]){editor.key&&editor.destroy();delete instances[id]}};UE.registerUI=function(uiName,fn,index,editorId){utils.each(uiName.split(/\\s+/),function(name){baidu.editor.ui[name]={id:editorId,execFn:fn,index:index}})}})();UE.registerUI(\"message\",function(editor){var editorui=baidu.editor.ui;var Message=editorui.Message;var holder;var _messageItems=[];var me=editor;me.setOpt(\"enableMessageShow\",true);if(me.getOpt(\"enableMessageShow\")===false){return}me.addListener(\"ready\",function(){holder=document.getElementById(me.ui.id+\"_message_holder\");updateHolderPos();setTimeout(function(){updateHolderPos()},500)});me.addListener(\"showmessage\",function(type,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=new Message({timeout:opt.timeout,type:opt.type,content:opt.content,keepshow:opt.keepshow,editor:me}),mid=opt.id||\"msg_\"+(+new Date).toString(36);message.render(holder);_messageItems[mid]=message;message.reset(opt);updateHolderPos();return mid});me.addListener(\"updatemessage\",function(type,id,opt){opt=utils.isString(opt)?{content:opt}:opt;var message=_messageItems[id];message.render(holder);message&&message.reset(opt)});me.addListener(\"hidemessage\",function(type,id){var message=_messageItems[id];message&&message.hide()});function updateHolderPos(){if(!holder||!me.ui)return;var toolbarbox=me.ui.getDom(\"toolbarbox\");if(toolbarbox){holder.style.top=toolbarbox.offsetHeight+3+\"px\"}holder.style.zIndex=Math.max(me.options.zIndex,me.iframe.style.zIndex)+1}})})();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/ueditor.config.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){function a(a,d){return c(a||self.document.URL||self.location.href,d||b())}function b(){var a=document.getElementsByTagName(\"script\");return a[a.length-1].src}function c(a,b){var c=b;return/^(\\/|\\\\\\\\)/.test(b)?c=/^.+?\\w(\\/|\\\\\\\\)/.exec(a)[0]+b.replace(/^(\\/|\\\\\\\\)/,\"\"):/^[a-z]+:/i.test(b)||(a=a.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/,\"\"),c=a+\"\"+b),d(c)}function d(a){var b=/^[a-z]+:\\/\\//.exec(a)[0],c=null,d=[];for(a=a.replace(b,\"\").split(\"?\")[0].split(\"#\")[0],a=a.replace(/\\\\/g,\"/\").split(/\\//),a[a.length-1]=\"\";a.length;)\"..\"===(c=a.shift())?d.pop():\".\"!==c&&d.push(c);return b+d.join(\"/\")}var e,f;e=window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:window.__msCDN?window.__msCDN+\"asset/vendor/ueditor/\":window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":a(),f=window.UEDITOR_CORS_URL?window.UEDITOR_CORS_URL:window.__msRoot?window.__msRoot+\"asset/vendor/ueditor/\":window.UEDITOR_HOME_URL?window.UEDITOR_HOME_URL:a(),window.UEDITOR_CONFIG={UEDITOR_HOME_URL:e,UEDITOR_CORS_URL:f,debug:!1,serverUrl:\"/ueditor-plus/_demo_server/handle.php\",serverHeaders:{},toolbars:[[\"fullscreen\",\"source\",\"|\",\"undo\",\"redo\",\"|\",\"bold\",\"italic\",\"underline\",\"fontborder\",\"strikethrough\",\"superscript\",\"subscript\",\"removeformat\",\"formatmatch\",\"autotypeset\",\"blockquote\",\"pasteplain\",\"|\",\"forecolor\",\"backcolor\",\"insertorderedlist\",\"insertunorderedlist\",\"selectall\",\"cleardoc\",\"|\",\"rowspacingtop\",\"rowspacingbottom\",\"lineheight\",\"|\",\"customstyle\",\"paragraph\",\"fontfamily\",\"fontsize\",\"|\",\"directionalityltr\",\"directionalityrtl\",\"indent\",\"|\",\"justifyleft\",\"justifycenter\",\"justifyright\",\"justifyjustify\",\"|\",\"touppercase\",\"tolowercase\",\"|\",\"link\",\"unlink\",\"anchor\",\"|\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"|\",\"simpleupload\",\"insertimage\",\"emotion\",\"scrawl\",\"insertvideo\",\"insertaudio\",\"attachment\",\"insertframe\",\"insertcode\",\"pagebreak\",\"template\",\"background\",\"formula\",\"|\",\"horizontal\",\"date\",\"time\",\"spechars\",\"wordimage\",\"|\",\"inserttable\",\"deletetable\",\"insertparagraphbeforetable\",\"insertrow\",\"deleterow\",\"insertcol\",\"deletecol\",\"mergecells\",\"mergeright\",\"mergedown\",\"splittocells\",\"splittorows\",\"splittocols\",\"|\",\"print\",\"preview\",\"searchreplace\",\"|\",\"contentimport\",\"help\"]],toolbarCallback:function(a,b){},imageConfig:{disableUpload:!1,disableOnline:!1,selectCallback:null},videoConfig:{disableUpload:!1,selectCallback:null},audioConfig:{disableUpload:!1,selectCallback:null},formulaConfig:{imageUrlTemplate:\"https://r.latexeasy.com/image.svg?{}\",editorMode:\"live\",editorLiveServer:\"https://latexeasy.com\"},autoSaveEnable:!0,autoSaveRestore:!1,autoSaveKey:null,initialContent:\"\",focus:!1,initialStyle:\"\",indentValue:\"2em\",readonly:!1,autoClearEmptyNode:!0,fullscreen:!1,allHtmlEnabled:!1,enableContextMenu:!0,shortcutMenu:[\"bold\",\"italic\",\"underline\",\"strikethrough\",\"fontborder\",\"forecolor\",\"backcolor\",\"imagenone\",\"imageleft\",\"imagecenter\",\"imageright\",\"insertimage\",\"formula\"],elementPathEnabled:!0,wordCount:!0,maximumWords:1e4,maxUndoCount:20,maxInputCount:1,autoHeightEnabled:!0,catchRemoteImageEnable:!0,autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:\"left\",imageBlockLine:\"center\",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:{div:1},indent:!1,indentValue:\"2em\",bdc2sb:!1,tobdc:!1},allowDivTransToP:!0,rgb2Hex:!0},window.UE={getUEBasePath:a}}();"
  },
  {
    "path": "_examples-integrate/vue3/public/static/UEditorPlus/ueditor.parse.js",
    "content": "/*! UEditorPlus v2.0.0*/\n!function(){!function(){UE=window.UE||{};var a=!!window.ActiveXObject,b={removeLastbs:function(a){return a.replace(/\\/$/,\"\")},extend:function(a,b){for(var c=arguments,d=!!this.isBoolean(c[c.length-1])&&c[c.length-1],e=this.isBoolean(c[c.length-1])?c.length-1:c.length,f=1;f<e;f++){var g=c[f];for(var h in g)d&&a.hasOwnProperty(h)||(a[h]=g[h])}return a},isIE:a,cssRule:a?function(a,b,c){var d,e;c=c||document,d=c.indexList?c.indexList:c.indexList={};var f;if(d[a])f=c.styleSheets[d[a]];else{if(void 0===b)return\"\";f=c.createStyleSheet(\"\",e=c.styleSheets.length),d[a]=e}return void 0===b?f.cssText:void(f.cssText=f.cssText+\"\\n\"+(b||\"\"))}:function(a,b,c){c=c||document;var d,e=c.getElementsByTagName(\"head\")[0];if(!(d=c.getElementById(a))){if(void 0===b)return\"\";d=c.createElement(\"style\"),d.id=a,e.appendChild(d)}return void 0===b?d.innerHTML:void(\"\"!==b?d.innerHTML=d.innerHTML+\"\\n\"+b:e.removeChild(d))},domReady:function(b){var c=window.document;\"complete\"===c.readyState?b():a?(!function(){if(!c.isReady){try{c.documentElement.doScroll(\"left\")}catch(a){return void setTimeout(arguments.callee,0)}b()}}(),window.attachEvent(\"onload\",function(){b()})):(c.addEventListener(\"DOMContentLoaded\",function(){c.removeEventListener(\"DOMContentLoaded\",arguments.callee,!1),b()},!1),window.addEventListener(\"load\",function(){b()},!1))},each:function(a,b,c){if(null!=a)if(a.length===+a.length){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d,a)===!1)return!1}else for(var f in a)if(a.hasOwnProperty(f)&&b.call(c,a[f],f,a)===!1)return!1},inArray:function(a,b){var c=-1;return this.each(a,function(a,d){if(a===b)return c=d,!1}),c},pushItem:function(a,b){this.inArray(a,b)==-1&&a.push(b)},trim:function(a){return a.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g,\"\")},indexOf:function(a,b,c){var d=-1;return c=this.isNumber(c)?c:0,this.each(a,function(a,e){if(e>=c&&a===b)return d=e,!1}),d},hasClass:function(a,b){b=b.replace(/(^[ ]+)|([ ]+$)/g,\"\").replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)if(!new RegExp(\"\\\\b\"+c+\"\\\\b\",\"i\").test(e))return!1;return d-1==b.length},addClass:function(a,c){if(a){c=this.trim(c).replace(/[ ]{2,}/g,\" \").split(\" \");for(var d,e=0,f=a.className;d=c[e++];)new RegExp(\"\\\\b\"+d+\"\\\\b\").test(f)||(f+=\" \"+d);a.className=b.trim(f)}},removeClass:function(a,b){b=this.isArray(b)?b:this.trim(b).replace(/[ ]{2,}/g,\" \").split(\" \");for(var c,d=0,e=a.className;c=b[d++];)e=e.replace(new RegExp(\"\\\\b\"+c+\"\\\\b\"),\"\");e=this.trim(e).replace(/[ ]{2,}/g,\" \"),a.className=e,!e&&a.removeAttribute(\"className\")},on:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.addEventListener)a.addEventListener(c,d,!1);else{d._d||(d._d={els:[]});var g=c+d.toString(),h=b.indexOf(d._d.els,a);d._d[g]&&h!=-1||(h==-1&&d._d.els.push(a),d._d[g]||(d._d[g]=function(a){return d.call(a.srcElement,a||window.event)}),a.attachEvent(\"on\"+c,d._d[g]))}a=null},off:function(a,c,d){var e=this.isArray(c)?c:c.split(/\\s+/),f=e.length;if(f)for(;f--;)if(c=e[f],a.removeEventListener)a.removeEventListener(c,d,!1);else{var g=c+d.toString();try{a.detachEvent(\"on\"+c,d._d?d._d[g]:d)}catch(h){}if(d._d&&d._d[g]){var i=b.indexOf(d._d.els,a);i!=-1&&d._d.els.splice(i,1),0==d._d.els.length&&delete d._d[g]}}},loadFile:function(){function a(a,c){try{for(var d,e=0;d=b[e++];)if(d.doc===a&&d.url==(c.src||c.href))return d}catch(f){return null}}var b=[];return function(c,d,e){var f=a(c,d);if(f)return void(f.ready?e&&e():f.funs.push(e));if(b.push({doc:c,url:d.src||d.href,funs:[e]}),!c.body){var g=[];for(var h in d)\"tag\"!=h&&g.push(h+'=\"'+d[h]+'\"');return void c.write(\"<\"+d.tag+\" \"+g.join(\" \")+\" ></\"+d.tag+\">\")}if(!d.id||!c.getElementById(d.id)){var i=c.createElement(d.tag);delete d.tag;for(var h in d)i.setAttribute(h,d[h]);i.onload=i.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){if(f=a(c,d),f.funs.length>0){f.ready=1;for(var b;b=f.funs.pop();)b()}i.onload=i.onreadystatechange=null}},i.onerror=function(){throw Error(\"The load \"+(d.href||d.src)+\" fails,check the url\")},c.getElementsByTagName(\"head\")[0].appendChild(i)}}}()};b.each([\"String\",\"Function\",\"Array\",\"Number\",\"RegExp\",\"Object\",\"Boolean\"],function(a){b[\"is\"+a]=function(b){return Object.prototype.toString.apply(b)==\"[object \"+a+\"]\"}});var c={};UE.parse={register:function(a,b){c[a]=b},load:function(a){b.each(c,function(c){c.call(a,b)})}},uParse=function(a,c){b.domReady(function(){var d;if(document.querySelectorAll)d=document.querySelectorAll(a);else if(/^#/.test(a))d=[document.getElementById(a.replace(/^#/,\"\"))];else if(/^\\./.test(a)){var d=[];b.each(document.getElementsByTagName(\"*\"),function(b){b.className&&new RegExp(\"\\\\b\"+a.replace(/^\\./,\"\")+\"\\\\b\",\"i\").test(b.className)&&d.push(b)})}else d=document.getElementsByTagName(a);b.each(d,function(d){UE.parse.load(b.extend({root:d,selector:a},c))})})}}(),UE.parse.register(\"insertcode\",function(a){var b=this.root.getElementsByTagName(\"pre\");if(b.length)if(\"undefined\"==typeof XRegExp){var c,d;void 0!==this.rootPath?(c=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCore.js\",d=a.removeLastbs(this.rootPath)+\"/third-party/SyntaxHighlighter/shCoreDefault.css\"):(c=this.highlightJsUrl,d=this.highlightCssUrl),a.loadFile(document,{id:\"syntaxhighlighter_css\",tag:\"link\",rel:\"stylesheet\",type:\"text/css\",href:d}),a.loadFile(document,{id:\"syntaxhighlighter_js\",src:c,tag:\"script\",type:\"text/javascript\",defer:\"defer\"},function(){a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})})}else a.each(b,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})}),UE.parse.register(\"table\",function(a){function b(b,c){var d,e=b;for(c=a.isArray(c)?c:[c];e;){for(d=0;d<c.length;d++)if(e.tagName==c[d].toUpperCase())return e;e=e.parentNode}return null}function c(b,c,e){for(var f=b.rows,g=[],h=\"TH\"===f[0].cells[0].tagName,i=0,j=0,k=f.length;j<k;j++)g[j]=f[j];var l={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){var c=a.innerText||a.textContent,d=b.innerText||b.textContent;return c.localeCompare(d)},reversebyasc:function(a,b){var c=a.innerHTML,d=b.innerHTML;return d.localeCompare(c)},orderbynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(d||0)-(e||0)},reversebynum:function(b,c){var d=b[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/),e=c[a.isIE?\"innerText\":\"textContent\"].match(/\\d+/);return d&&(d=+d[0]),e&&(e=+e[0]),(e||0)-(d||0)}};b.setAttribute(\"data-sort-type\",e&&\"string\"==typeof e&&l[e]?e:\"\"),h&&g.splice(0,1),g=d(g,function(a,b){var d;return d=e&&\"function\"==typeof e?e.call(this,a.cells[c],b.cells[c]):e&&\"number\"==typeof e?1:e&&\"string\"==typeof e&&l[e]?l[e].call(this,a.cells[c],b.cells[c]):l.orderbyasc.call(this,a.cells[c],b.cells[c])});for(var m=b.ownerDocument.createDocumentFragment(),n=0,k=g.length;n<k;n++)m.appendChild(g[n]);var o=b.getElementsByTagName(\"tbody\")[0];i?o.insertBefore(m,f[i-range.endRowIndex+range.beginRowIndex-1]):o.appendChild(m)}function d(a,b){b=b||function(a,b){return a.localeCompare(b)};for(var c=0,d=a.length;c<d;c++)for(var e=c,f=a.length;e<f;e++)if(b(a[c],a[e])>0){var g=a[c];a[c]=a[e],a[e]=g}return a}function e(b){if(!a.hasClass(b.rows[0],\"firstRow\")){for(var c=1;c<b.rows.length;c++)a.removeClass(b.rows[c],\"firstRow\");a.addClass(b.rows[0],\"firstRow\")}}var f=this,g=this.root,h=g.getElementsByTagName(\"table\");if(h.length){var i=this.selector;a.cssRule(\"table\",i+\" table.noBorderTable td,\"+i+\" table.noBorderTable th,\"+i+\" table.noBorderTable caption{border:1px dashed #ddd !important}\"+i+\" table.sortEnabled tr.firstRow th,\"+i+\" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;background-position: center right; background-image:url(\"+this.rootPath+\"themes/default/images/sortable.png);}\"+i+\" table.sortEnabled tr.firstRow th:hover,\"+i+\" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\"+i+\" table{margin-bottom:10px;border-collapse:collapse;display:table;}\"+i+\" td,\"+i+\" th{padding: 5px 10px;border: 1px solid #DDD;}\"+i+\" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\"+i+\" th{border-top:1px solid #BBB;background:#F7F7F7;}\"+i+\" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\"+i+\" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\"+i+\" tr.ue-table-interlace-color-double td{ background: #f7faff; }\"+i+\" td p{margin:0;padding:0;width:auto;height:auto;}\",document),a.each(\"td th caption\".split(\" \"),function(b){var c=g.getElementsByTagName(b);c.length&&a.each(c,function(a){a.firstChild||(a.innerHTML=\"&nbsp;\")})});var h=g.getElementsByTagName(\"table\");a.each(h,function(d){/\\bsortEnabled\\b/.test(d.className)&&a.on(d,\"click\",function(d){var g=d.target||d.srcElement,h=b(g,[\"td\",\"th\"]),i=b(g,\"table\"),j=a.indexOf(i.rows[0].cells,h),k=i.getAttribute(\"data-sort-type\");j!=-1&&(c(i,j,f.tableSortCompareFn||k),e(i))})})}}),UE.parse.register(\"background\",function(a){for(var b,c,d=this,e=d.root,f=e.getElementsByTagName(\"p\"),g=0;c=f[g++];)b=c.getAttribute(\"data-background\"),b&&c.parentNode.removeChild(c);b&&a.cssRule(\"ueditor_background\",d.selector+\"{\"+b+\"}\",document)}),UE.parse.register(\"list\",function(a){function b(b){var e=this;a.each(b,function(b){if(b.className&&/custom_/i.test(b.className)){var f=b.className.match(/custom_(\\w+)/)[1];if(\"dash\"==f||\"dot\"==f)a.pushItem(c,h+\" li.list-\"+d[f]+\"{background-image:url(\"+e.liiconpath+d[f]+\".gif)}\"),a.pushItem(c,h+\" ul.custom_\"+f+\"{list-style:none;} \"+h+\" ul.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\");else{var g=1;a.each(b.childNodes,function(b){\"LI\"==b.tagName&&(a.pushItem(c,h+\" li.list-\"+d[f]+g+\"{background-image:url(\"+e.liiconpath+\"list-\"+d[f]+g+\".gif)}\"),g++)}),a.pushItem(c,h+\" ol.custom_\"+f+\"{list-style:none;}\"+h+\" ol.custom_\"+f+\" li{background-position:0 3px;background-repeat:no-repeat}\")}switch(f){case\"cn\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:30px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:55px}\");break;case\"cn2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:40px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:55px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-3{padding-left:68px}\");break;case\"num\":case\"num1\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:25px}\");break;case\"num2\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-1{padding-left:35px}\"),a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft-2{padding-left:40px}\");break;case\"dash\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:35px}\");break;case\"dot\":a.pushItem(c,h+\" li.list-\"+f+\"-paddingleft{padding-left:20px}\")}}})}var c=[],d={cn:\"cn-1-\",cn1:\"cn-2-\",cn2:\"cn-3-\",num:\"num-1-\",num1:\"num-2-\",num2:\"num-3-\",dash:\"dash\",dot:\"dot\"};a.extend(this,{liiconpath:\"http://bs.baidu.com/listicon/\",listDefaultPaddingLeft:\"20\"});var e=this.root,f=e.getElementsByTagName(\"ol\"),g=e.getElementsByTagName(\"ul\"),h=this.selector;f.length&&b.call(this,f),g.length&&b.call(this,g),(f.length||g.length)&&(c.push(h+\" .list-paddingleft-1{padding-left:0}\"),c.push(h+\" .list-paddingleft-2{padding-left:\"+this.listDefaultPaddingLeft+\"px}\"),c.push(h+\" .list-paddingleft-3{padding-left:\"+2*this.listDefaultPaddingLeft+\"px}\"),a.cssRule(\"list\",h+\" ol,\"+h+\" ul{margin:0;padding:0;}\\n\"+h+\" li{clear:both;}\\n\"+c.join(\"\\n\"),document))})}();"
  },
  {
    "path": "_examples-integrate/vue3/src/App.vue",
    "content": "<template>\n    <img alt=\"Vue logo\" src=\"./assets/logo.png\">\n    <div style=\"max-width:800px;margin:0 auto;\">\n        <h2>UEditor Plus Vue3 集成示例</h2>\n        <div>\n            <vue-ueditor-wrap v-model=\"content\"\n                              editor-id=\"editor\"\n                              :config=\"editorConfig\"\n                              :editorDependencies=\"['ueditor.config.js','ueditor.all.js']\"\n                              style=\"height:500px;\"/>\n        </div>\n    </div>\n</template>\n\n<script setup>\nimport {ref} from 'vue';\nconst content = ref('<p>Hello UEditorPlus</p>');\nconst editorConfig = {\n    // 后端服务地址，后端处理参考\n    // https://open.modstart.com/ueditor-plus/backend.html\n    serverUrl: '/api/path/to/server',\n    UEDITOR_HOME_URL: '/static/UEditorPlus/',\n    UEDITOR_CORS_URL: '/static/UEditorPlus/',\n}\n</script>\n\n<style>\n#app {\n    font-family: Avenir, Helvetica, Arial, sans-serif;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    text-align: center;\n    color: #2c3e50;\n    margin-top: 60px;\n}\n</style>\n"
  },
  {
    "path": "_examples-integrate/vue3/src/main.js",
    "content": "import {createApp} from 'vue'\nimport App from './App.vue'\nimport VueUeditorWrap from 'vue-ueditor-wrap';\n\ncreateApp(App).use(VueUeditorWrap).mount('#app')\n"
  },
  {
    "path": "_examples-integrate/vue3/vue.config.js",
    "content": "const { defineConfig } = require('@vue/cli-service')\nmodule.exports = defineConfig({\n  transpileDependencies: true\n})\n"
  },
  {
    "path": "_parse/background.js",
    "content": "UE.parse.register(\"background\", function (utils) {\n    var me = this,\n        root = me.root,\n        p = root.getElementsByTagName(\"p\"),\n        styles;\n\n    for (var i = 0, ci; (ci = p[i++]);) {\n        styles = ci.getAttribute(\"data-background\");\n        if (styles) {\n            ci.parentNode.removeChild(ci);\n        }\n    }\n\n    //追加默认的表格样式\n    styles &&\n    utils.cssRule(\n        \"ueditor_background\",\n        me.selector + \"{\" + styles + \"}\",\n        document\n    );\n});\n"
  },
  {
    "path": "_parse/insertcode.js",
    "content": "UE.parse.register(\"insertcode\", function (utils) {\n    var pres = this.root.getElementsByTagName(\"pre\");\n    if (pres.length) {\n        if (typeof XRegExp == \"undefined\") {\n            var jsurl, cssurl;\n            if (this.rootPath !== undefined) {\n                jsurl =\n                    utils.removeLastbs(this.rootPath) +\n                    \"/third-party/SyntaxHighlighter/shCore.js\";\n                cssurl =\n                    utils.removeLastbs(this.rootPath) +\n                    \"/third-party/SyntaxHighlighter/shCoreDefault.css\";\n            } else {\n                jsurl = this.highlightJsUrl;\n                cssurl = this.highlightCssUrl;\n            }\n            utils.loadFile(document, {\n                id: \"syntaxhighlighter_css\",\n                tag: \"link\",\n                rel: \"stylesheet\",\n                type: \"text/css\",\n                href: cssurl\n            });\n            utils.loadFile(\n                document,\n                {\n                    id: \"syntaxhighlighter_js\",\n                    src: jsurl,\n                    tag: \"script\",\n                    type: \"text/javascript\",\n                    defer: \"defer\"\n                },\n                function () {\n                    utils.each(pres, function (pi) {\n                        if (pi && /brush/i.test(pi.className)) {\n                            SyntaxHighlighter.highlight(pi);\n                        }\n                    });\n                }\n            );\n        } else {\n            utils.each(pres, function (pi) {\n                if (pi && /brush/i.test(pi.className)) {\n                    SyntaxHighlighter.highlight(pi);\n                }\n            });\n        }\n    }\n});\n"
  },
  {
    "path": "_parse/list.js",
    "content": "UE.parse.register(\"list\", function (utils) {\n    var customCss = [],\n        customStyle = {\n            cn: \"cn-1-\",\n            cn1: \"cn-2-\",\n            cn2: \"cn-3-\",\n            num: \"num-1-\",\n            num1: \"num-2-\",\n            num2: \"num-3-\",\n            dash: \"dash\",\n            dot: \"dot\"\n        };\n\n    utils.extend(this, {\n        liiconpath: \"http://bs.baidu.com/listicon/\",\n        listDefaultPaddingLeft: \"20\"\n    });\n\n    var root = this.root,\n        ols = root.getElementsByTagName(\"ol\"),\n        uls = root.getElementsByTagName(\"ul\"),\n        selector = this.selector;\n\n    if (ols.length) {\n        applyStyle.call(this, ols);\n    }\n\n    if (uls.length) {\n        applyStyle.call(this, uls);\n    }\n\n    if (ols.length || uls.length) {\n        customCss.push(selector + \" .list-paddingleft-1{padding-left:0}\");\n        customCss.push(\n            selector +\n            \" .list-paddingleft-2{padding-left:\" +\n            this.listDefaultPaddingLeft +\n            \"px}\"\n        );\n        customCss.push(\n            selector +\n            \" .list-paddingleft-3{padding-left:\" +\n            this.listDefaultPaddingLeft * 2 +\n            \"px}\"\n        );\n\n        utils.cssRule(\n            \"list\",\n            selector +\n            \" ol,\" +\n            selector +\n            \" ul{margin:0;padding:0;}\\n\" +\n            selector +\n            \" li{clear:both;}\\n\" +\n            customCss.join(\"\\n\"),\n            document\n        );\n    }\n\n    function applyStyle(nodes) {\n        var T = this;\n        utils.each(nodes, function (list) {\n            if (list.className && /custom_/i.test(list.className)) {\n                var listStyle = list.className.match(/custom_(\\w+)/)[1];\n                if (listStyle == \"dash\" || listStyle == \"dot\") {\n                    utils.pushItem(\n                        customCss,\n                        selector +\n                        \" li.list-\" +\n                        customStyle[listStyle] +\n                        \"{background-image:url(\" +\n                        T.liiconpath +\n                        customStyle[listStyle] +\n                        \".gif)}\"\n                    );\n                    utils.pushItem(\n                        customCss,\n                        selector +\n                        \" ul.custom_\" +\n                        listStyle +\n                        \"{list-style:none;} \" +\n                        selector +\n                        \" ul.custom_\" +\n                        listStyle +\n                        \" li{background-position:0 3px;background-repeat:no-repeat}\"\n                    );\n                } else {\n                    var index = 1;\n                    utils.each(list.childNodes, function (li) {\n                        if (li.tagName == \"LI\") {\n                            utils.pushItem(\n                                customCss,\n                                selector +\n                                \" li.list-\" +\n                                customStyle[listStyle] +\n                                index +\n                                \"{background-image:url(\" +\n                                T.liiconpath +\n                                \"list-\" +\n                                customStyle[listStyle] +\n                                index +\n                                \".gif)}\"\n                            );\n                            index++;\n                        }\n                    });\n                    utils.pushItem(\n                        customCss,\n                        selector +\n                        \" ol.custom_\" +\n                        listStyle +\n                        \"{list-style:none;}\" +\n                        selector +\n                        \" ol.custom_\" +\n                        listStyle +\n                        \" li{background-position:0 3px;background-repeat:no-repeat}\"\n                    );\n                }\n                switch (listStyle) {\n                    case \"cn\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-1{padding-left:25px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-2{padding-left:40px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-3{padding-left:55px}\"\n                        );\n                        break;\n                    case \"cn1\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-1{padding-left:30px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-2{padding-left:40px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-3{padding-left:55px}\"\n                        );\n                        break;\n                    case \"cn2\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-1{padding-left:40px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-2{padding-left:55px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-3{padding-left:68px}\"\n                        );\n                        break;\n                    case \"num\":\n                    case \"num1\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-1{padding-left:25px}\"\n                        );\n                        break;\n                    case \"num2\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-1{padding-left:35px}\"\n                        );\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft-2{padding-left:40px}\"\n                        );\n                        break;\n                    case \"dash\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft{padding-left:35px}\"\n                        );\n                        break;\n                    case \"dot\":\n                        utils.pushItem(\n                            customCss,\n                            selector +\n                            \" li.list-\" +\n                            listStyle +\n                            \"-paddingleft{padding-left:20px}\"\n                        );\n                }\n            }\n        });\n    }\n});\n"
  },
  {
    "path": "_parse/parse.js",
    "content": "(function () {\n    UE = window.UE || {};\n    var isIE = !!window.ActiveXObject;\n    //定义utils工具\n    var utils = {\n        removeLastbs: function (url) {\n            return url.replace(/\\/$/, \"\");\n        },\n        extend: function (t, s) {\n            var a = arguments,\n                notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,\n                len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;\n            for (var i = 1; i < len; i++) {\n                var x = a[i];\n                for (var k in x) {\n                    if (!notCover || !t.hasOwnProperty(k)) {\n                        t[k] = x[k];\n                    }\n                }\n            }\n            return t;\n        },\n        isIE: isIE,\n        cssRule: isIE\n            ? function (key, style, doc) {\n                var indexList, index;\n                doc = doc || document;\n                if (doc.indexList) {\n                    indexList = doc.indexList;\n                } else {\n                    indexList = doc.indexList = {};\n                }\n                var sheetStyle;\n                if (!indexList[key]) {\n                    if (style === undefined) {\n                        return \"\";\n                    }\n                    sheetStyle = doc.createStyleSheet(\n                        \"\",\n                        (index = doc.styleSheets.length)\n                    );\n                    indexList[key] = index;\n                } else {\n                    sheetStyle = doc.styleSheets[indexList[key]];\n                }\n                if (style === undefined) {\n                    return sheetStyle.cssText;\n                }\n                sheetStyle.cssText = sheetStyle.cssText + \"\\n\" + (style || \"\");\n            }\n            : function (key, style, doc) {\n                doc = doc || document;\n                var head = doc.getElementsByTagName(\"head\")[0],\n                    node;\n                if (!(node = doc.getElementById(key))) {\n                    if (style === undefined) {\n                        return \"\";\n                    }\n                    node = doc.createElement(\"style\");\n                    node.id = key;\n                    head.appendChild(node);\n                }\n                if (style === undefined) {\n                    return node.innerHTML;\n                }\n                if (style !== \"\") {\n                    node.innerHTML = node.innerHTML + \"\\n\" + style;\n                } else {\n                    head.removeChild(node);\n                }\n            },\n        domReady: function (onready) {\n            var doc = window.document;\n            if (doc.readyState === \"complete\") {\n                onready();\n            } else {\n                if (isIE) {\n                    (function () {\n                        if (doc.isReady) return;\n                        try {\n                            doc.documentElement.doScroll(\"left\");\n                        } catch (error) {\n                            setTimeout(arguments.callee, 0);\n                            return;\n                        }\n                        onready();\n                    })();\n                    window.attachEvent(\"onload\", function () {\n                        onready();\n                    });\n                } else {\n                    doc.addEventListener(\n                        \"DOMContentLoaded\",\n                        function () {\n                            doc.removeEventListener(\n                                \"DOMContentLoaded\",\n                                arguments.callee,\n                                false\n                            );\n                            onready();\n                        },\n                        false\n                    );\n                    window.addEventListener(\n                        \"load\",\n                        function () {\n                            onready();\n                        },\n                        false\n                    );\n                }\n            }\n        },\n        each: function (obj, iterator, context) {\n            if (obj == null) return;\n            if (obj.length === +obj.length) {\n                for (var i = 0, l = obj.length; i < l; i++) {\n                    if (iterator.call(context, obj[i], i, obj) === false) return false;\n                }\n            } else {\n                for (var key in obj) {\n                    if (obj.hasOwnProperty(key)) {\n                        if (iterator.call(context, obj[key], key, obj) === false)\n                            return false;\n                    }\n                }\n            }\n        },\n        inArray: function (arr, item) {\n            var index = -1;\n            this.each(arr, function (v, i) {\n                if (v === item) {\n                    index = i;\n                    return false;\n                }\n            });\n            return index;\n        },\n        pushItem: function (arr, item) {\n            if (this.inArray(arr, item) == -1) {\n                arr.push(item);\n            }\n        },\n        trim: function (str) {\n            return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g, \"\");\n        },\n        indexOf: function (array, item, start) {\n            var index = -1;\n            start = this.isNumber(start) ? start : 0;\n            this.each(array, function (v, i) {\n                if (i >= start && v === item) {\n                    index = i;\n                    return false;\n                }\n            });\n            return index;\n        },\n        hasClass: function (element, className) {\n            className = className\n                .replace(/(^[ ]+)|([ ]+$)/g, \"\")\n                .replace(/[ ]{2,}/g, \" \")\n                .split(\" \");\n            for (var i = 0, ci, cls = element.className; (ci = className[i++]);) {\n                if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\", \"i\").test(cls)) {\n                    return false;\n                }\n            }\n            return i - 1 == className.length;\n        },\n        addClass: function (elm, classNames) {\n            if (!elm) return;\n            classNames = this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n            for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]);) {\n                if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\").test(cls)) {\n                    cls += \" \" + ci;\n                }\n            }\n            elm.className = utils.trim(cls);\n        },\n        removeClass: function (elm, classNames) {\n            classNames = this.isArray(classNames)\n                ? classNames\n                : this.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n            for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]);) {\n                cls = cls.replace(new RegExp(\"\\\\b\" + ci + \"\\\\b\"), \"\");\n            }\n            cls = this.trim(cls).replace(/[ ]{2,}/g, \" \");\n            elm.className = cls;\n            !cls && elm.removeAttribute(\"className\");\n        },\n        on: function (element, type, handler) {\n            var types = this.isArray(type) ? type : type.split(/\\s+/),\n                k = types.length;\n            if (k)\n                while (k--) {\n                    type = types[k];\n                    if (element.addEventListener) {\n                        element.addEventListener(type, handler, false);\n                    } else {\n                        if (!handler._d) {\n                            handler._d = {\n                                els: []\n                            };\n                        }\n                        var key = type + handler.toString(),\n                            index = utils.indexOf(handler._d.els, element);\n                        if (!handler._d[key] || index == -1) {\n                            if (index == -1) {\n                                handler._d.els.push(element);\n                            }\n                            if (!handler._d[key]) {\n                                handler._d[key] = function (evt) {\n                                    return handler.call(evt.srcElement, evt || window.event);\n                                };\n                            }\n\n                            element.attachEvent(\"on\" + type, handler._d[key]);\n                        }\n                    }\n                }\n            element = null;\n        },\n        off: function (element, type, handler) {\n            var types = this.isArray(type) ? type : type.split(/\\s+/),\n                k = types.length;\n            if (k)\n                while (k--) {\n                    type = types[k];\n                    if (element.removeEventListener) {\n                        element.removeEventListener(type, handler, false);\n                    } else {\n                        var key = type + handler.toString();\n                        try {\n                            element.detachEvent(\n                                \"on\" + type,\n                                handler._d ? handler._d[key] : handler\n                            );\n                        } catch (e) {\n                        }\n                        if (handler._d && handler._d[key]) {\n                            var index = utils.indexOf(handler._d.els, element);\n                            if (index != -1) {\n                                handler._d.els.splice(index, 1);\n                            }\n                            handler._d.els.length == 0 && delete handler._d[key];\n                        }\n                    }\n                }\n        },\n        loadFile: (function () {\n            var tmpList = [];\n\n            function getItem(doc, obj) {\n                try {\n                    for (var i = 0, ci; (ci = tmpList[i++]);) {\n                        if (ci.doc === doc && ci.url == (obj.src || obj.href)) {\n                            return ci;\n                        }\n                    }\n                } catch (e) {\n                    return null;\n                }\n            }\n\n            return function (doc, obj, fn) {\n                var item = getItem(doc, obj);\n                if (item) {\n                    if (item.ready) {\n                        fn && fn();\n                    } else {\n                        item.funs.push(fn);\n                    }\n                    return;\n                }\n                tmpList.push({\n                    doc: doc,\n                    url: obj.src || obj.href,\n                    funs: [fn]\n                });\n                if (!doc.body) {\n                    var html = [];\n                    for (var p in obj) {\n                        if (p == \"tag\") continue;\n                        html.push(p + '=\"' + obj[p] + '\"');\n                    }\n                    doc.write(\n                        \"<\" + obj.tag + \" \" + html.join(\" \") + \" ></\" + obj.tag + \">\"\n                    );\n                    return;\n                }\n                if (obj.id && doc.getElementById(obj.id)) {\n                    return;\n                }\n                var element = doc.createElement(obj.tag);\n                delete obj.tag;\n                for (var p in obj) {\n                    element.setAttribute(p, obj[p]);\n                }\n                element.onload = element.onreadystatechange = function () {\n                    if (!this.readyState || /loaded|complete/.test(this.readyState)) {\n                        item = getItem(doc, obj);\n                        if (item.funs.length > 0) {\n                            item.ready = 1;\n                            for (var fi; (fi = item.funs.pop());) {\n                                fi();\n                            }\n                        }\n                        element.onload = element.onreadystatechange = null;\n                    }\n                };\n                element.onerror = function () {\n                    throw Error(\n                        \"The load \" + (obj.href || obj.src) + \" fails,check the url\"\n                    );\n                };\n                doc.getElementsByTagName(\"head\")[0].appendChild(element);\n            };\n        })()\n    };\n    utils.each(\n        [\"String\", \"Function\", \"Array\", \"Number\", \"RegExp\", \"Object\", \"Boolean\"],\n        function (v) {\n            utils[\"is\" + v] = function (obj) {\n                return Object.prototype.toString.apply(obj) == \"[object \" + v + \"]\";\n            };\n        }\n    );\n    var parselist = {};\n    UE.parse = {\n        register: function (parseName, fn) {\n            parselist[parseName] = fn;\n        },\n        load: function (opt) {\n            utils.each(parselist, function (v) {\n                v.call(opt, utils);\n            });\n        }\n    };\n    uParse = function (selector, opt) {\n        utils.domReady(function () {\n            var contents;\n            if (document.querySelectorAll) {\n                contents = document.querySelectorAll(selector);\n            } else {\n                if (/^#/.test(selector)) {\n                    contents = [document.getElementById(selector.replace(/^#/, \"\"))];\n                } else if (/^\\./.test(selector)) {\n                    var contents = [];\n                    utils.each(document.getElementsByTagName(\"*\"), function (node) {\n                        if (\n                            node.className &&\n                            new RegExp(\"\\\\b\" + selector.replace(/^\\./, \"\") + \"\\\\b\", \"i\").test(\n                                node.className\n                            )\n                        ) {\n                            contents.push(node);\n                        }\n                    });\n                } else {\n                    contents = document.getElementsByTagName(selector);\n                }\n            }\n            utils.each(contents, function (v) {\n                UE.parse.load(utils.extend({root: v, selector: selector}, opt));\n            });\n        });\n    };\n})();\n"
  },
  {
    "path": "_parse/table.js",
    "content": "UE.parse.register(\"table\", function (utils) {\n    var me = this,\n        root = this.root,\n        tables = root.getElementsByTagName(\"table\");\n    if (tables.length) {\n        var selector = this.selector;\n        //追加默认的表格样式\n        utils.cssRule(\n            \"table\",\n            selector +\n            \" table.noBorderTable td,\" +\n            selector +\n            \" table.noBorderTable th,\" +\n            selector +\n            \" table.noBorderTable caption{border:1px dashed #ddd !important}\" +\n            selector +\n            \" table.sortEnabled tr.firstRow th,\" +\n            selector +\n            \" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;\" +\n            \"background-position: center right; background-image:url(\" +\n            this.rootPath +\n            \"themes/default/images/sortable.png);}\" +\n            selector +\n            \" table.sortEnabled tr.firstRow th:hover,\" +\n            selector +\n            \" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}\" +\n            selector +\n            \" table{margin-bottom:10px;border-collapse:collapse;display:table;}\" +\n            selector +\n            \" td,\" +\n            selector +\n            \" th{padding: 5px 10px;border: 1px solid #DDD;}\" +\n            selector +\n            \" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\" +\n            selector +\n            \" th{border-top:1px solid #BBB;background:#F7F7F7;}\" +\n            selector +\n            \" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}\" +\n            selector +\n            \" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }\" +\n            selector +\n            \" tr.ue-table-interlace-color-double td{ background: #f7faff; }\" +\n            selector +\n            \" td p{margin:0;padding:0;width:auto;height:auto;}\",\n            document\n        );\n        //填充空的单元格\n\n        utils.each(\"td th caption\".split(\" \"), function (tag) {\n            var cells = root.getElementsByTagName(tag);\n            cells.length &&\n            utils.each(cells, function (node) {\n                if (!node.firstChild) {\n                    node.innerHTML = \"&nbsp;\";\n                }\n            });\n        });\n\n        //表格可排序\n        var tables = root.getElementsByTagName(\"table\");\n        utils.each(tables, function (table) {\n            if (/\\bsortEnabled\\b/.test(table.className)) {\n                utils.on(table, \"click\", function (e) {\n                    var target = e.target || e.srcElement,\n                        cell = findParentByTagName(target, [\"td\", \"th\"]);\n                    var table = findParentByTagName(target, \"table\"),\n                        colIndex = utils.indexOf(table.rows[0].cells, cell),\n                        sortType = table.getAttribute(\"data-sort-type\");\n                    if (colIndex != -1) {\n                        sortTable(table, colIndex, me.tableSortCompareFn || sortType);\n                        updateTable(table);\n                    }\n                });\n            }\n        });\n\n        //按照标签名查找父节点\n        function findParentByTagName(target, tagNames) {\n            var i,\n                current = target;\n            tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];\n            while (current) {\n                for (i = 0; i < tagNames.length; i++) {\n                    if (current.tagName == tagNames[i].toUpperCase()) return current;\n                }\n                current = current.parentNode;\n            }\n            return null;\n        }\n\n        //表格排序\n        function sortTable(table, sortByCellIndex, compareFn) {\n            var rows = table.rows,\n                trArray = [],\n                flag = rows[0].cells[0].tagName === \"TH\",\n                lastRowIndex = 0;\n\n            for (var i = 0, len = rows.length; i < len; i++) {\n                trArray[i] = rows[i];\n            }\n\n            var Fn = {\n                reversecurrent: function (td1, td2) {\n                    return 1;\n                },\n                orderbyasc: function (td1, td2) {\n                    var value1 = td1.innerText || td1.textContent,\n                        value2 = td2.innerText || td2.textContent;\n                    return value1.localeCompare(value2);\n                },\n                reversebyasc: function (td1, td2) {\n                    var value1 = td1.innerHTML,\n                        value2 = td2.innerHTML;\n                    return value2.localeCompare(value1);\n                },\n                orderbynum: function (td1, td2) {\n                    var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n                        /\\d+/\n                        ),\n                        value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n                    if (value1) value1 = +value1[0];\n                    if (value2) value2 = +value2[0];\n                    return (value1 || 0) - (value2 || 0);\n                },\n                reversebynum: function (td1, td2) {\n                    var value1 = td1[utils.isIE ? \"innerText\" : \"textContent\"].match(\n                        /\\d+/\n                        ),\n                        value2 = td2[utils.isIE ? \"innerText\" : \"textContent\"].match(/\\d+/);\n                    if (value1) value1 = +value1[0];\n                    if (value2) value2 = +value2[0];\n                    return (value2 || 0) - (value1 || 0);\n                }\n            };\n\n            //对表格设置排序的标记data-sort-type\n            table.setAttribute(\n                \"data-sort-type\",\n                compareFn && typeof compareFn === \"string\" && Fn[compareFn]\n                    ? compareFn\n                    : \"\"\n            );\n\n            //th不参与排序\n            flag && trArray.splice(0, 1);\n            trArray = sort(trArray, function (tr1, tr2) {\n                var result;\n                if (compareFn && typeof compareFn === \"function\") {\n                    result = compareFn.call(\n                        this,\n                        tr1.cells[sortByCellIndex],\n                        tr2.cells[sortByCellIndex]\n                    );\n                } else if (compareFn && typeof compareFn === \"number\") {\n                    result = 1;\n                } else if (\n                    compareFn &&\n                    typeof compareFn === \"string\" &&\n                    Fn[compareFn]\n                ) {\n                    result = Fn[compareFn].call(\n                        this,\n                        tr1.cells[sortByCellIndex],\n                        tr2.cells[sortByCellIndex]\n                    );\n                } else {\n                    result = Fn[\"orderbyasc\"].call(\n                        this,\n                        tr1.cells[sortByCellIndex],\n                        tr2.cells[sortByCellIndex]\n                    );\n                }\n                return result;\n            });\n            var fragment = table.ownerDocument.createDocumentFragment();\n            for (var j = 0, len = trArray.length; j < len; j++) {\n                fragment.appendChild(trArray[j]);\n            }\n            var tbody = table.getElementsByTagName(\"tbody\")[0];\n            if (!lastRowIndex) {\n                tbody.appendChild(fragment);\n            } else {\n                tbody.insertBefore(\n                    fragment,\n                    rows[lastRowIndex - range.endRowIndex + range.beginRowIndex - 1]\n                );\n            }\n        }\n\n        //冒泡排序\n        function sort(array, compareFn) {\n            compareFn =\n                compareFn ||\n                function (item1, item2) {\n                    return item1.localeCompare(item2);\n                };\n            for (var i = 0, len = array.length; i < len; i++) {\n                for (var j = i, length = array.length; j < length; j++) {\n                    if (compareFn(array[i], array[j]) > 0) {\n                        var t = array[i];\n                        array[i] = array[j];\n                        array[j] = t;\n                    }\n                }\n            }\n            return array;\n        }\n\n        //更新表格\n        function updateTable(table) {\n            //给第一行设置firstRow的样式名称,在排序图标的样式上使用到\n            if (!utils.hasClass(table.rows[0], \"firstRow\")) {\n                for (var i = 1; i < table.rows.length; i++) {\n                    utils.removeClass(table.rows[i], \"firstRow\");\n                }\n                utils.addClass(table.rows[0], \"firstRow\");\n            }\n        }\n    }\n});\n"
  },
  {
    "path": "_src/adapter/editor.js",
    "content": "///import core\n///commands 全屏\n///commandsName FullScreen\n///commandsTitle  全屏\n(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        domUtils = baidu.editor.dom.domUtils;\n    var nodeStack = [];\n\n    function EditorUI(options) {\n        this.initOptions(options);\n        this.initEditorUI();\n    }\n\n    EditorUI.prototype = {\n        uiName: \"editor\",\n        initEditorUI: function () {\n            this.editor.ui = this;\n            this._dialogs = {};\n            this.initUIBase();\n            this._initToolbars();\n            var editor = this.editor,\n                me = this;\n\n            editor.addListener(\"ready\", function () {\n                //提供getDialog方法\n                editor.getDialog = function (name) {\n                    return editor.ui._dialogs[name + \"Dialog\"];\n                };\n                domUtils.on(editor.window, \"scroll\", function (evt) {\n                    baidu.editor.ui.Popup.postHide(evt);\n                });\n                //提供编辑器实时宽高(全屏时宽高不变化)\n                editor.ui._actualFrameWidth = editor.options.initialFrameWidth;\n\n                UE.browser.ie &&\n                UE.browser.version === 6 &&\n                editor.container.ownerDocument.execCommand(\n                    \"BackgroundImageCache\",\n                    false,\n                    true\n                );\n\n                //display bottom-bar label based on config\n                if (editor.options.elementPathEnabled) {\n                    editor.ui.getDom(\"elementpath\").innerHTML =\n                        '<div class=\"edui-editor-breadcrumb\">' +\n                        editor.getLang(\"elementPathTip\") +\n                        \":</div>\";\n                }\n                if (editor.options.wordCount) {\n                    function countFn() {\n                        setCount(editor, me);\n                        domUtils.un(editor.document, \"click\", arguments.callee);\n                    }\n\n                    domUtils.on(editor.document, \"click\", countFn);\n                    editor.ui.getDom(\"wordcount\").innerHTML = editor.getLang(\n                        \"wordCountTip\"\n                    );\n                }\n                editor.ui._scale();\n                if (editor.options.scaleEnabled) {\n                    if (editor.autoHeightEnabled) {\n                        editor.disableAutoHeight();\n                    }\n                    me.enableScale();\n                } else {\n                    me.disableScale();\n                }\n                if (\n                    !editor.options.elementPathEnabled &&\n                    !editor.options.wordCount &&\n                    !editor.options.scaleEnabled\n                ) {\n                    editor.ui.getDom(\"elementpath\").style.display = \"none\";\n                    editor.ui.getDom(\"wordcount\").style.display = \"none\";\n                    editor.ui.getDom(\"scale\").style.display = \"none\";\n                }\n\n                if (!editor.selection.isFocus()) return;\n                editor.fireEvent(\"selectionchange\", false, true);\n            });\n\n            editor.addListener(\"mousedown\", function (t, evt) {\n                var el = evt.target || evt.srcElement;\n                baidu.editor.ui.Popup.postHide(evt, el);\n                baidu.editor.ui.ShortCutMenu.postHide(evt);\n            });\n\n            editor.addListener(\"delcells\", function () {\n                if (UE.ui[\"edittip\"]) {\n                    new UE.ui[\"edittip\"](editor);\n                }\n                editor.getDialog(\"edittip\").open();\n            });\n\n            var pastePop,\n                isPaste = false,\n                timer;\n            editor.addListener(\"afterpaste\", function () {\n                if (editor.queryCommandState(\"pasteplain\")) return;\n                if (baidu.editor.ui.PastePicker) {\n                    pastePop = new baidu.editor.ui.Popup({\n                        content: new baidu.editor.ui.PastePicker({editor: editor}),\n                        editor: editor,\n                        className: \"edui-wordpastepop\"\n                    });\n                    pastePop.render();\n                }\n                isPaste = true;\n            });\n\n            editor.addListener(\"afterinserthtml\", function () {\n                clearTimeout(timer);\n                timer = setTimeout(function () {\n                    if (pastePop && (isPaste || editor.ui._isTransfer)) {\n                        if (pastePop.isHidden()) {\n                            var span = domUtils.createElement(editor.document, \"span\", {\n                                    style: \"line-height:0px;\",\n                                    innerHTML: \"\\ufeff\"\n                                }),\n                                range = editor.selection.getRange();\n                            range.insertNode(span);\n                            var tmp = getDomNode(span, \"firstChild\", \"previousSibling\");\n                            tmp &&\n                            pastePop.showAnchor(tmp.nodeType == 3 ? tmp.parentNode : tmp);\n                            domUtils.remove(span);\n                        } else {\n                            pastePop.show();\n                        }\n                        delete editor.ui._isTransfer;\n                        isPaste = false;\n                    }\n                }, 200);\n            });\n            editor.addListener(\"contextmenu\", function (t, evt) {\n                baidu.editor.ui.Popup.postHide(evt);\n            });\n            editor.addListener(\"keydown\", function (t, evt) {\n                if (pastePop) pastePop.dispose(evt);\n                var keyCode = evt.keyCode || evt.which;\n                if (evt.altKey && keyCode == 90) {\n                    UE.ui.buttons[\"fullscreen\"].onclick();\n                }\n            });\n            editor.addListener(\"wordcount\", function (type) {\n                setCount(this, me);\n            });\n\n            function setCount(editor, ui) {\n                editor.setOpt({\n                    wordCount: true,\n                    maximumWords: 10000,\n                    wordCountMsg:\n                        editor.options.wordCountMsg || editor.getLang(\"wordCountMsg\"),\n                    wordOverFlowMsg:\n                        editor.options.wordOverFlowMsg || editor.getLang(\"wordOverFlowMsg\")\n                });\n                var opt = editor.options,\n                    max = opt.maximumWords,\n                    msg = opt.wordCountMsg,\n                    errMsg = opt.wordOverFlowMsg,\n                    countDom = ui.getDom(\"wordcount\");\n                if (!opt.wordCount) {\n                    return;\n                }\n                var count = editor.getContentLength(true);\n                if (count > max) {\n                    countDom.innerHTML = errMsg;\n                    editor.fireEvent(\"wordcountoverflow\");\n                } else {\n                    countDom.innerHTML = msg\n                        .replace(\"{#leave}\", max - count)\n                        .replace(\"{#count}\", count);\n                }\n            }\n\n            editor.addListener(\"selectionchange\", function () {\n                if (editor.options.elementPathEnabled) {\n                    me[\n                    (editor.queryCommandState(\"elementpath\") == -1 ? \"dis\" : \"en\") +\n                    \"ableElementPath\"\n                        ]();\n                }\n                if (editor.options.scaleEnabled) {\n                    me[\n                    (editor.queryCommandState(\"scale\") == -1 ? \"dis\" : \"en\") +\n                    \"ableScale\"\n                        ]();\n                }\n            });\n            var popup = new baidu.editor.ui.Popup({\n                editor: editor,\n                content: \"\",\n                className: \"edui-bubble\",\n                _onEditButtonClick: function () {\n                    this.hide();\n                    editor.ui._dialogs.linkDialog.open();\n                },\n                _onImgEditButtonClick: function (name) {\n                    this.hide();\n                    editor.ui._dialogs[name] && editor.ui._dialogs[name].open();\n                },\n                _onImgSetFloat: function (value) {\n                    this.hide();\n                    editor.execCommand(\"imagefloat\", value);\n                },\n                _setIframeAlign: function (value) {\n                    var frame = popup.anchorEl;\n                    var newFrame = frame.cloneNode(true);\n                    switch (value) {\n                        case -2:\n                            newFrame.setAttribute(\"align\", \"\");\n                            break;\n                        case -1:\n                            newFrame.setAttribute(\"align\", \"left\");\n                            break;\n                        case 1:\n                            newFrame.setAttribute(\"align\", \"right\");\n                            break;\n                    }\n                    frame.parentNode.insertBefore(newFrame, frame);\n                    domUtils.remove(frame);\n                    popup.anchorEl = newFrame;\n                    popup.showAnchor(popup.anchorEl);\n                },\n                _updateIframe: function () {\n                    var frame = (editor._iframe = popup.anchorEl);\n                    if (domUtils.hasClass(frame, \"ueditor_baidumap\")) {\n                        editor.selection.getRange().selectNode(frame).select();\n                        editor.ui._dialogs.mapDialog.open();\n                        popup.hide();\n                    } else {\n                        editor.ui._dialogs.insertframeDialog.open();\n                        popup.hide();\n                    }\n                },\n                _onRemoveButtonClick: function (cmdName) {\n                    editor.execCommand(cmdName);\n                    this.hide();\n                },\n                queryAutoHide: function (el) {\n                    if (el && el.ownerDocument == editor.document) {\n                        if (\n                            el.tagName.toLowerCase() == \"img\" ||\n                            domUtils.findParentByTagName(el, \"a\", true)\n                        ) {\n                            return el !== popup.anchorEl;\n                        }\n                    }\n                    return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el);\n                }\n            });\n            popup.render();\n            if (editor.options.imagePopup) {\n                editor.addListener(\"mouseover\", function (t, evt) {\n                    evt = evt || window.event;\n                    var el = evt.target || evt.srcElement;\n                    if (\n                        editor.ui._dialogs.insertframeDialog &&\n                        /iframe/gi.test(el.tagName)\n                    ) {\n                        var html = popup.formatHtml(\n                            \"<nobr>\" +\n                            '<span onclick=$$._setIframeAlign(-2) class=\"edui-clickable\">' +\n                            editor.getLang(\"default\") +\n                            '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class=\"edui-clickable\">' +\n                            editor.getLang(\"justifyleft\") +\n                            '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class=\"edui-clickable\">' +\n                            editor.getLang(\"justifyright\") +\n                            \"</span>&nbsp;&nbsp;\" +\n                            ' <span onclick=\"$$._updateIframe( this);\" class=\"edui-clickable\">' +\n                            editor.getLang(\"modify\") +\n                            \"</span></nobr>\"\n                        );\n                        if (html) {\n                            popup.getDom(\"content\").innerHTML = html;\n                            popup.anchorEl = el;\n                            popup.showAnchor(popup.anchorEl);\n                        } else {\n                            popup.hide();\n                        }\n                    }\n                });\n                editor.addListener(\"selectionchange\", function (t, causeByUi) {\n                    if (!causeByUi) {\n                        return;\n                    }\n                    var html = \"\",\n                        str = \"\",\n                        closedNode = editor.selection.getRange().getClosedNode(),\n                        dialogs = editor.ui._dialogs;\n                    // 图片选中处理\n                    if (closedNode && closedNode.tagName === \"IMG\") {\n                        var dialogName = \"insertimageDialog\";\n                        if (\n                            closedNode.className.indexOf(\"edui-faked-video\") !== -1 ||\n                            closedNode.className.indexOf(\"edui-upload-video\") !== -1\n                        ) {\n                            dialogName = \"insertvideoDialog\";\n                        }\n                        if (\n                            closedNode.className.indexOf(\"edui-faked-audio\") !== -1 ||\n                            closedNode.className.indexOf(\"edui-upload-audio\") !== -1\n                        ) {\n                            dialogName = \"insertaudioDialog\";\n                        }\n                        if (closedNode.getAttribute(\"anchorname\")) {\n                            dialogName = \"anchorDialog\";\n                            html = popup.formatHtml(\n                                \"<nobr>\" +\n                                '<span onclick=$$._onImgEditButtonClick(\"anchorDialog\") class=\"edui-clickable\">' +\n                                editor.getLang(\"modify\") +\n                                \"</span>&nbsp;&nbsp;\" +\n                                \"<span onclick=$$._onRemoveButtonClick('anchor') class=\\\"edui-clickable\\\">\" +\n                                editor.getLang(\"delete\") +\n                                \"</span></nobr>\"\n                            );\n                        }\n                        // if (img.getAttribute(\"data-word-image\")) {\n                        //   //todo 放到dialog去做查询\n                        //   editor['data-word-image'] = [img.getAttribute(\"data-word-image\")];\n                        //   dialogName = \"wordimageDialog\";\n                        // }\n                        if (\n                            domUtils.hasClass(closedNode, \"uep-loading\") ||\n                            domUtils.hasClass(closedNode, \"uep-loading-error\")\n                        ) {\n                            dialogName = \"\";\n                        }\n                        if (!dialogs[dialogName]) {\n                            return;\n                        }\n\n                        var actions = [];\n                        if (closedNode.getAttribute(\"data-word-image\")) {\n                            actions.push(\"<span onclick=\\\"$$._onImgEditButtonClick('wordimageDialog');\\\" class='edui-clickable edui-popup-action-item'>\" +\n                                editor.getLang(\"save\") +\n                                \"</span>\");\n                        } else {\n                            // actions.push(\"<span onclick=\\\"$$._onImgEditButtonClick('\" + dialogName + '\\');\" class=\"edui-clickable edui-popup-action-item\">' +\n                            //     editor.getLang(\"modify\") +\n                            //     \"</span>\");\n                        }\n\n                        if (actions.length > 0) {\n                            // wrap with <nobr> </nobr>\n                            actions.unshift('<nobr>');\n                            actions.push('</nobr>');\n                        }\n\n                        !html && (html = popup.formatHtml(actions.join(\"\")));\n                    }\n                    // 链接选中处理\n                    if (editor.ui._dialogs.linkDialog) {\n                        var link = editor.queryCommandValue(\"link\");\n                        var url;\n                        if (\n                            link &&\n                            (url = link.getAttribute(\"_href\") || link.getAttribute(\"href\", 2))\n                        ) {\n                            var txt = url;\n                            if (url.length > 30) {\n                                txt = url.substring(0, 20) + \"...\";\n                            }\n                            if (html) {\n                                html += '<div style=\"height:5px;\"></div>';\n                            }\n                            html += popup.formatHtml(\n                                \"<nobr>\" +\n                                editor.getLang(\"anchorMsg\") +\n                                ': <a target=\"_blank\" href=\"' +\n                                url +\n                                '\" title=\"' +\n                                url +\n                                '\" >' +\n                                txt +\n                                \"</a>\" +\n                                ' <span class=\"edui-clickable\" onclick=\"$$._onEditButtonClick();\">' +\n                                editor.getLang(\"modify\") +\n                                \"</span>\" +\n                                ' <span class=\"edui-clickable\" onclick=\"$$._onRemoveButtonClick(\\'unlink\\');\"> ' +\n                                editor.getLang(\"clear\") +\n                                \"</span></nobr>\"\n                            );\n                            popup.showAnchor(link);\n                        }\n                    }\n\n                    if (html) {\n                        popup.getDom(\"content\").innerHTML = html;\n                        popup.anchorEl = closedNode || link;\n                        popup.showAnchor(popup.anchorEl);\n                    } else {\n                        popup.hide();\n                    }\n                });\n            }\n        },\n        _initToolbars: function () {\n            var me = this;\n            var editor = this.editor;\n            var toolbars = this.toolbars || [];\n            if (toolbars[0]) {\n                toolbars[0].unshift(\n                    'message'\n                );\n            }\n            var toolbarUis = [];\n            var extraUIs = [];\n            for (var i = 0; i < toolbars.length; i++) {\n                var toolbar = toolbars[i];\n                var toolbarUi = new baidu.editor.ui.Toolbar({\n                    theme: editor.options.theme\n                });\n                for (var j = 0; j < toolbar.length; j++) {\n                    var toolbarItem = toolbar[j];\n                    var toolbarItemUi = null;\n                    if (typeof toolbarItem == \"string\") {\n                        toolbarItem = toolbarItem.toLowerCase();\n                        if (toolbarItem === \"|\") {\n                            toolbarItem = \"Separator\";\n                        }\n                        if (toolbarItem === \"||\") {\n                            toolbarItem = \"Breakline\";\n                        }\n                        var ui = baidu.editor.ui[toolbarItem];\n                        if (ui) {\n                            if (utils.isFunction(ui)) {\n                                toolbarItemUi = new baidu.editor.ui[toolbarItem](editor);\n                                toolbarItemUi._name = toolbarItem\n                            } else {\n                                if (ui.id && ui.id !== editor.key) {\n                                    continue;\n                                }\n                                var itemUI = ui.execFn.call(editor, editor, toolbarItem);\n                                if (itemUI) {\n                                    itemUI._name = toolbarItem;\n                                    if (ui.index === undefined) {\n                                        toolbarUi.add(itemUI);\n                                        continue;\n                                    } else {\n                                        extraUIs.push({\n                                            index: ui.index,\n                                            itemUI: itemUI\n                                        });\n                                    }\n                                }\n                            }\n                        }\n                        //fullscreen这里单独处理一下，放到首行去\n                        if (toolbarItem === \"fullscreen\") {\n                            if (toolbarUis && toolbarUis[0]) {\n                                toolbarUis[0].items.splice(0, 0, toolbarItemUi);\n                            } else {\n                                toolbarItemUi && toolbarUi.items.splice(0, 0, toolbarItemUi);\n                            }\n                            continue;\n                        }\n                    } else {\n                        toolbarItemUi = toolbarItem;\n                    }\n                    if (toolbarItemUi && toolbarItemUi.id) {\n                        toolbarUi.add(toolbarItemUi);\n                    }\n                }\n                toolbarUis[i] = toolbarUi;\n            }\n\n            //接受外部定制的UI\n\n            utils.each(extraUIs, function (obj) {\n                toolbarUi.add(obj.itemUI, obj.index);\n            });\n            this.toolbars = toolbarUis;\n            editor.addListener('serverConfigLoaded',function(){\n                me.refreshToolbars();\n            });\n            setTimeout(()=>{\n                this.refreshToolbars();\n            },0);\n        },\n        refreshToolbars: function () {\n            var toolbarShows = this.editor.options.toolbarShows;\n            for (var i = 0; i < this.toolbars.length; i++) {\n                for (var j = 0; j < this.toolbars[i].items.length; j++) {\n                    var item = this.toolbars[i].items[j];\n                    if(item._name){\n                        if(item._name in toolbarShows){\n                            item.uiShow(toolbarShows[item._name]);\n                        }\n                    }\n                }\n            }\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"%%\">' +\n                '<div id=\"##_toolbarbox\" class=\"%%-toolbarbox\">' +\n                (this.toolbars.length\n                    ? '<div id=\"##_toolbarboxouter\" class=\"%%-toolbarboxouter\"><div class=\"%%-toolbarboxinner\">' +\n                    this.renderToolbarBoxHtml() +\n                    \"</div></div>\"\n                    : \"\") +\n                '<div id=\"##_toolbarmsg\" class=\"%%-toolbarmsg\" style=\"display:none;\">' +\n                '<div id = \"##_upload_dialog\" class=\"%%-toolbarmsg-upload\" onclick=\"$$.showWordImageDialog();\">' +\n                this.editor.getLang(\"clickToUpload\") +\n                \"</div>\" +\n                '<div class=\"%%-toolbarmsg-close\" onclick=\"$$.hideToolbarMsg();\">x</div>' +\n                '<div id=\"##_toolbarmsg_label\" class=\"%%-toolbarmsg-label\"></div>' +\n                '<div style=\"height:0;overflow:hidden;clear:both;\"></div>' +\n                \"</div>\" +\n                '<div id=\"##_message_holder\" class=\"%%-messageholder\"></div>' +\n                \"</div>\" +\n                '<div id=\"##_iframeholder\" class=\"%%-iframeholder\">' +\n                \"</div>\" +\n                //modify wdcount by matao\n                '<div id=\"##_bottombar\" class=\"%%-bottomContainer\"><table><tr>' +\n                '<td id=\"##_elementpath\" class=\"%%-bottombar\"></td>' +\n                '<td id=\"##_wordcount\" class=\"%%-wordcount\"></td>' +\n                '<td id=\"##_scale\" class=\"%%-scale\"><div class=\"%%-icon\"></div></td>' +\n                \"</tr></table></div>\" +\n                '<div id=\"##_scalelayer\"></div>' +\n                \"</div>\"\n            );\n        },\n        showWordImageDialog: function () {\n            this._dialogs[\"wordimageDialog\"].open();\n        },\n        renderToolbarBoxHtml: function () {\n            var buff = [];\n            for (var i = 0; i < this.toolbars.length; i++) {\n                buff.push(this.toolbars[i].renderHtml());\n            }\n            return buff.join(\"\");\n        },\n        setFullScreen: function (fullscreen) {\n            var editor = this.editor,\n                container = editor.container.parentNode.parentNode;\n            if (this._fullscreen != fullscreen) {\n                this._fullscreen = fullscreen;\n                this.editor.fireEvent(\"beforefullscreenchange\", fullscreen);\n                if (baidu.editor.browser.gecko) {\n                    var bk = editor.selection.getRange().createBookmark();\n                }\n                if (fullscreen) {\n\n                    // add https://gitee.com/modstart-lib/ueditor-plus/issues/I85R7X\n                    this._bakEditorContaninerWidth = editor.iframe.parentNode.style.width;\n\n                    while (container.tagName !== \"BODY\") {\n                        var position = baidu.editor.dom.domUtils.getComputedStyle(\n                            container,\n                            \"position\"\n                        );\n                        nodeStack.push(position);\n                        container.style.position = \"static\";\n                        container = container.parentNode;\n                    }\n                    this._bakHtmlOverflow = document.documentElement.style.overflow;\n                    this._bakBodyOverflow = document.body.style.overflow;\n                    this._bakAutoHeight = this.editor.autoHeightEnabled;\n                    this._bakScrollTop = Math.max(\n                        document.documentElement.scrollTop,\n                        document.body.scrollTop\n                    );\n\n                    // delete https://gitee.com/modstart-lib/ueditor-plus/issues/I85R7X\n                    // this._bakEditorContaninerWidth = editor.iframe.parentNode.offsetWidth;\n\n                    if (this._bakAutoHeight) {\n                        //当全屏时不能执行自动长高\n                        editor.autoHeightEnabled = false;\n                        this.editor.disableAutoHeight();\n                    }\n\n                    document.documentElement.style.overflow = \"hidden\";\n                    //修复，滚动条不收起的问题\n\n                    window.scrollTo(0, window.scrollY);\n                    this._bakCssText = this.getDom().style.cssText;\n                    this._bakCssText1 = this.getDom(\"iframeholder\").style.cssText;\n                    editor.iframe.parentNode.style.width = \"\";\n                    this._updateFullScreen();\n                } else {\n                    while (container.tagName !== \"BODY\") {\n                        container.style.position = nodeStack.shift();\n                        container = container.parentNode;\n                    }\n                    this.getDom().style.cssText = this._bakCssText;\n                    this.getDom(\"iframeholder\").style.cssText = this._bakCssText1;\n                    if (this._bakAutoHeight) {\n                        editor.autoHeightEnabled = true;\n                        this.editor.enableAutoHeight();\n                    }\n\n                    document.documentElement.style.overflow = this._bakHtmlOverflow;\n                    document.body.style.overflow = this._bakBodyOverflow;\n                    // modify https://gitee.com/modstart-lib/ueditor-plus/issues/I85R7X\n                    editor.iframe.parentNode.style.width = this._bakEditorContaninerWidth\n                    // editor.iframe.parentNode.style.width = this._bakEditorContaninerWidth + \"px\";\n                    window.scrollTo(0, this._bakScrollTop);\n                }\n                if (browser.gecko && editor.body.contentEditable === \"true\") {\n                    var input = document.createElement(\"input\");\n                    document.body.appendChild(input);\n                    editor.body.contentEditable = false;\n                    setTimeout(function () {\n                        input.focus();\n                        setTimeout(function () {\n                            editor.body.contentEditable = true;\n                            editor.fireEvent(\"fullscreenchanged\", fullscreen);\n                            editor.selection.getRange().moveToBookmark(bk).select(true);\n                            baidu.editor.dom.domUtils.remove(input);\n                            fullscreen && window.scroll(0, 0);\n                        }, 0);\n                    }, 0);\n                }\n\n                if (editor.body.contentEditable === \"true\") {\n                    this.editor.fireEvent(\"fullscreenchanged\", fullscreen);\n                    this.triggerLayout();\n                }\n            }\n        },\n        _updateFullScreen: function () {\n            if (this._fullscreen) {\n                var vpRect = uiUtils.getViewportRect();\n                this.getDom().style.cssText =\n                    \"border:0;position:fixed;left:0;top:var(--ueditor-top-offset,\" +\n                    (this.editor.options.topOffset || 0) +\n                    \"px);width:\" +\n                    vpRect.width +\n                    \"px;height:\" +\n                    vpRect.height +\n                    \"px;z-index:\" +\n                    (this.getDom().style.zIndex * 1 + 100);\n                uiUtils.setViewportOffset(this.getDom(), {\n                    left: 0,\n                    // top: this.editor.options.topOffset || 0\n                });\n                this.editor.setHeight(\n                    vpRect.height -\n                    this.getDom(\"toolbarbox\").offsetHeight -\n                    this.getDom(\"bottombar\").offsetHeight -\n                    (this.editor.options.topOffset || 0),\n                    true\n                );\n                //不手动调一下，会导致全屏失效\n                if (browser.gecko) {\n                    try {\n                        window.onresize();\n                    } catch (e) {\n                    }\n                }\n            }\n        },\n        _updateElementPath: function () {\n            var bottom = this.getDom(\"elementpath\"),\n                list;\n            if (\n                this.elementPathEnabled &&\n                (list = this.editor.queryCommandValue(\"elementpath\"))\n            ) {\n                var buff = [];\n                for (var i = 0, ci; (ci = list[i]); i++) {\n                    buff[i] = this.formatHtml(\n                        '<span unselectable=\"on\" onclick=\"$$.editor.execCommand(&quot;elementpath&quot;, &quot;' +\n                        i +\n                        '&quot;);\">' +\n                        ci +\n                        \"</span>\"\n                    );\n                }\n                bottom.innerHTML =\n                    '<div class=\"edui-editor-breadcrumb\" onmousedown=\"return false;\">' +\n                    this.editor.getLang(\"elementPathTip\") +\n                    \": \" +\n                    buff.join(\" &gt; \") +\n                    \"</div>\";\n            } else {\n                bottom.style.display = \"none\";\n            }\n        },\n        disableElementPath: function () {\n            var bottom = this.getDom(\"elementpath\");\n            bottom.innerHTML = \"\";\n            bottom.style.display = \"none\";\n            this.elementPathEnabled = false;\n        },\n        enableElementPath: function () {\n            var bottom = this.getDom(\"elementpath\");\n            bottom.style.display = \"\";\n            this.elementPathEnabled = true;\n            this._updateElementPath();\n        },\n        _scale: function () {\n            var doc = document,\n                editor = this.editor,\n                editorHolder = editor.container,\n                editorDocument = editor.document,\n                toolbarBox = this.getDom(\"toolbarbox\"),\n                bottombar = this.getDom(\"bottombar\"),\n                scale = this.getDom(\"scale\"),\n                scalelayer = this.getDom(\"scalelayer\");\n\n            var isMouseMove = false,\n                position = null,\n                minEditorHeight = 0,\n                minEditorWidth = editor.options.minFrameWidth,\n                pageX = 0,\n                pageY = 0,\n                scaleWidth = 0,\n                scaleHeight = 0;\n\n            function down() {\n                position = domUtils.getXY(editorHolder);\n\n                if (!minEditorHeight) {\n                    minEditorHeight =\n                        editor.options.minFrameHeight +\n                        toolbarBox.offsetHeight +\n                        bottombar.offsetHeight;\n                }\n\n                scalelayer.style.cssText =\n                    \"position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:\" +\n                    editorHolder.offsetWidth +\n                    \"px;height:\" +\n                    editorHolder.offsetHeight +\n                    \"px;z-index:\" +\n                    (editor.options.zIndex + 1);\n\n                domUtils.on(doc, \"mousemove\", move);\n                domUtils.on(editorDocument, \"mouseup\", up);\n                domUtils.on(doc, \"mouseup\", up);\n            }\n\n            var me = this;\n            //by xuheng 全屏时关掉缩放\n            this.editor.addListener(\"fullscreenchanged\", function (e, fullScreen) {\n                if (fullScreen) {\n                    me.disableScale();\n                } else {\n                    if (me.editor.options.scaleEnabled) {\n                        me.enableScale();\n                        var tmpNode = me.editor.document.createElement(\"span\");\n                        me.editor.body.appendChild(tmpNode);\n                        me.editor.body.style.height =\n                            Math.max(\n                                domUtils.getXY(tmpNode).y,\n                                me.editor.iframe.offsetHeight - 20\n                            ) + \"px\";\n                        domUtils.remove(tmpNode);\n                    }\n                }\n            });\n\n            function move(event) {\n                clearSelection();\n                var e = event || window.event;\n                pageX = e.pageX || doc.documentElement.scrollLeft + e.clientX;\n                pageY = e.pageY || doc.documentElement.scrollTop + e.clientY;\n                scaleWidth = pageX - position.x;\n                scaleHeight = pageY - position.y;\n\n                if (scaleWidth >= minEditorWidth) {\n                    isMouseMove = true;\n                    scalelayer.style.width = scaleWidth + \"px\";\n                }\n                if (scaleHeight >= minEditorHeight) {\n                    isMouseMove = true;\n                    scalelayer.style.height = scaleHeight + \"px\";\n                }\n            }\n\n            function up() {\n                if (isMouseMove) {\n                    isMouseMove = false;\n                    editor.ui._actualFrameWidth = scalelayer.offsetWidth - 2;\n                    editorHolder.style.width = editor.ui._actualFrameWidth + \"px\";\n\n                    editor.setHeight(\n                        scalelayer.offsetHeight -\n                        bottombar.offsetHeight -\n                        toolbarBox.offsetHeight -\n                        2,\n                        true\n                    );\n                }\n                if (scalelayer) {\n                    scalelayer.style.display = \"none\";\n                }\n                clearSelection();\n                domUtils.un(doc, \"mousemove\", move);\n                domUtils.un(editorDocument, \"mouseup\", up);\n                domUtils.un(doc, \"mouseup\", up);\n            }\n\n            function clearSelection() {\n                if (browser.ie) doc.selection.clear();\n                else window.getSelection().removeAllRanges();\n            }\n\n            this.enableScale = function () {\n                //trace:2868\n                if (editor.queryCommandState(\"source\") == 1) return;\n                scale.style.display = \"\";\n                this.scaleEnabled = true;\n                domUtils.on(scale, \"mousedown\", down);\n            };\n            this.disableScale = function () {\n                scale.style.display = \"none\";\n                this.scaleEnabled = false;\n                domUtils.un(scale, \"mousedown\", down);\n            };\n        },\n        isFullScreen: function () {\n            return this._fullscreen;\n        },\n        postRender: function () {\n            UIBase.prototype.postRender.call(this);\n            for (var i = 0; i < this.toolbars.length; i++) {\n                this.toolbars[i].postRender();\n            }\n            var me = this;\n            var timerId,\n                domUtils = baidu.editor.dom.domUtils,\n                updateFullScreenTime = function () {\n                    clearTimeout(timerId);\n                    timerId = setTimeout(function () {\n                        me._updateFullScreen();\n                    });\n                };\n            domUtils.on(window, \"resize\", updateFullScreenTime);\n\n            me.addListener(\"destroy\", function () {\n                domUtils.un(window, \"resize\", updateFullScreenTime);\n                clearTimeout(timerId);\n            });\n        },\n        showToolbarMsg: function (msg, flag) {\n            this.getDom(\"toolbarmsg_label\").innerHTML = msg;\n            this.getDom(\"toolbarmsg\").style.display = \"\";\n            //\n            if (!flag) {\n                var w = this.getDom(\"upload_dialog\");\n                w.style.display = \"none\";\n            }\n        },\n        hideToolbarMsg: function () {\n            this.getDom(\"toolbarmsg\").style.display = \"none\";\n        },\n        mapUrl: function (url) {\n            return url\n                ? url.replace(\"~/\", this.editor.options.UEDITOR_CORS_URL || \"\")\n                : \"\";\n        },\n        triggerLayout: function () {\n            var dom = this.getDom();\n            if (dom.style.zoom == \"1\") {\n                dom.style.zoom = \"100%\";\n            } else {\n                dom.style.zoom = \"1\";\n            }\n        }\n    };\n    utils.inherits(EditorUI, baidu.editor.ui.UIBase);\n\n    var instances = {};\n\n    UE.ui.Editor = function (options) {\n        var editor = new UE.Editor(options);\n        editor.options.editor = editor;\n        utils.loadFile(document, {\n            href:\n                editor.options.themePath + editor.options.theme + \"/_css/ueditor.css?{timestamp:dist/themes/default/css/ueditor.css}\",\n            tag: \"link\",\n            type: \"text/css\",\n            rel: \"stylesheet\"\n        });\n\n        var oldRender = editor.render;\n        editor.render = function (holder) {\n            if (holder.constructor === String) {\n                editor.key = holder;\n                instances[holder] = editor;\n            }\n            utils.domReady(function () {\n                editor.langIsReady\n                    ? renderUI()\n                    : editor.addListener(\"langReady\", renderUI);\n\n                function renderUI() {\n                    editor.setOpt({\n                        labelMap: editor.options.labelMap || editor.getLang(\"labelMap\")\n                    });\n                    new EditorUI(editor.options);\n                    if (holder) {\n                        if (holder.constructor === String) {\n                            holder = document.getElementById(holder);\n                        }\n                        holder &&\n                        holder.getAttribute(\"name\") &&\n                        (editor.options.textarea = holder.getAttribute(\"name\"));\n                        if (holder && /script|textarea/gi.test(holder.tagName)) {\n                            var newDiv = document.createElement(\"div\");\n                            holder.parentNode.insertBefore(newDiv, holder);\n                            var cont = holder.value || holder.innerHTML;\n                            editor.options.initialContent = /^[\\t\\r\\n ]*$/.test(cont)\n                                ? editor.options.initialContent\n                                : cont\n                                    .replace(/>[\\n\\r\\t]+([ ]{4})+/g, \">\")\n                                    .replace(/[\\n\\r\\t]+([ ]{4})+</g, \"<\")\n                                    .replace(/>[\\n\\r\\t]+</g, \"><\");\n                            holder.className && (newDiv.className = holder.className);\n                            holder.style.cssText &&\n                            (newDiv.style.cssText = holder.style.cssText);\n                            if (/textarea/i.test(holder.tagName)) {\n                                editor.textarea = holder;\n                                editor.textarea.style.display = \"none\";\n                            } else {\n                                holder.parentNode.removeChild(holder);\n                            }\n                            if (holder.id) {\n                                newDiv.id = holder.id;\n                                domUtils.removeAttributes(holder, \"id\");\n                            }\n                            holder = newDiv;\n                            holder.innerHTML = \"\";\n                        }\n                    }\n                    domUtils.addClass(holder, \"edui-\" + editor.options.theme);\n                    editor.ui.render(holder);\n                    var opt = editor.options;\n                    //给实例添加一个编辑器的容器引用\n                    editor.container = editor.ui.getDom();\n                    var parents = domUtils.findParents(holder, true);\n                    var displays = [];\n                    for (var i = 0, ci; (ci = parents[i]); i++) {\n                        displays[i] = ci.style.display;\n                        ci.style.display = \"block\";\n                    }\n                    if (opt.initialFrameWidth) {\n                        opt.minFrameWidth = opt.initialFrameWidth;\n                    } else {\n                        opt.minFrameWidth = opt.initialFrameWidth = holder.offsetWidth;\n                        var styleWidth = holder.style.width;\n                        if (/%$/.test(styleWidth)) {\n                            opt.initialFrameWidth = styleWidth;\n                        }\n                    }\n                    if (opt.initialFrameHeight) {\n                        opt.minFrameHeight = opt.initialFrameHeight;\n                    } else {\n                        opt.initialFrameHeight = opt.minFrameHeight = holder.offsetHeight;\n                    }\n                    for (var i = 0, ci; (ci = parents[i]); i++) {\n                        ci.style.display = displays[i];\n                    }\n                    //编辑器最外容器设置了高度，会导致，编辑器不占位\n                    //todo 先去掉，没有找到原因\n                    if (holder.style.height) {\n                        holder.style.height = \"\";\n                    }\n                    editor.container.style.width =\n                        opt.initialFrameWidth +\n                        (/%$/.test(opt.initialFrameWidth) ? \"\" : \"px\");\n                    editor.container.style.zIndex = opt.zIndex;\n                    oldRender.call(editor, editor.ui.getDom(\"iframeholder\"));\n                    editor.fireEvent(\"afteruiready\");\n                }\n            });\n        };\n        return editor;\n    };\n\n    /**\n     * @file\n     * @name UE\n     * @short UE\n     * @desc UEditor的顶部命名空间\n     */\n    /**\n     * @name getEditor\n     * @since 1.2.4+\n     * @grammar UE.getEditor(id,[opt])  =>  Editor实例\n     * @desc 提供一个全局的方法得到编辑器实例\n     *\n     * * ''id''  放置编辑器的容器id, 如果容器下的编辑器已经存在，就直接返回\n     * * ''opt'' 编辑器的可选参数\n     * @example\n     *  UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例\n     *      this.setContent('hello')\n     *  }});\n     *  UE.getEditor('containerId'); //返回刚创建的实例\n     *\n     */\n    UE.getEditor = function (id, opt) {\n        var editor = instances[id];\n        if (!editor) {\n            editor = instances[id] = new UE.ui.Editor(opt);\n            editor.render(id);\n        }\n        return editor;\n    };\n\n    UE.delEditor = function (id) {\n        var editor;\n        if ((editor = instances[id])) {\n            editor.key && editor.destroy();\n            delete instances[id];\n        }\n    };\n\n    UE.registerUI = function (uiName, fn, index, editorId) {\n        utils.each(uiName.split(/\\s+/), function (name) {\n            baidu.editor.ui[name] = {\n                id: editorId,\n                execFn: fn,\n                index: index\n            };\n        });\n    };\n})();\n"
  },
  {
    "path": "_src/adapter/editorui.js",
    "content": "//ui跟编辑器的适配層\n//那个按钮弹出是dialog，是下拉筐等都是在这个js中配置\n//自己写的ui也要在这里配置，放到baidu.editor.ui下边，当编辑器实例化的时候会根据ueditor.config中的toolbars找到相应的进行实例化\n(function () {\n    var utils = baidu.editor.utils;\n    var editorui = baidu.editor.ui;\n    var _Dialog = editorui.Dialog;\n    editorui.buttons = {};\n\n    editorui.Dialog = function (options) {\n        var dialog = new _Dialog(options);\n        dialog.addListener(\"hide\", function () {\n            if (dialog.editor) {\n                var editor = dialog.editor;\n                try {\n                    if (browser.gecko) {\n                        var y = editor.window.scrollY,\n                            x = editor.window.scrollX;\n                        editor.body.focus();\n                        editor.window.scrollTo(x, y);\n                    } else {\n                        editor.focus();\n                    }\n                } catch (ex) {\n                }\n            }\n        });\n        return dialog;\n    };\n\n    //为工具栏添加按钮，以下都是统一的按钮触发命令，所以写在一起\n    var btnCmds = [\n        \"undo\",\n        \"redo\",\n        \"formatmatch\",\n        \"bold\",\n        \"italic\",\n        \"underline\",\n        \"fontborder\",\n        \"touppercase\",\n        \"tolowercase\",\n        \"strikethrough\",\n        \"subscript\",\n        \"superscript\",\n        \"source\",\n        \"indent\",\n        \"outdent\",\n        \"blockquote\",\n        \"pasteplain\",\n        \"pagebreak\",\n        \"selectall\",\n        \"print\",\n        \"horizontal\",\n        \"removeformat\",\n        \"time\",\n        \"date\",\n        \"unlink\",\n        \"insertparagraphbeforetable\",\n        \"insertrow\",\n        \"insertcol\",\n        \"mergeright\",\n        \"mergedown\",\n        \"deleterow\",\n        \"deletecol\",\n        \"splittorows\",\n        \"splittocols\",\n        \"splittocells\",\n        \"mergecells\",\n        \"deletetable\",\n    ];\n\n    for (var i = 0, ci; (ci = btnCmds[i++]);) {\n        ci = ci.toLowerCase();\n        editorui[ci] = (function (cmd) {\n            return function (editor) {\n                var ui = new editorui.Button({\n                    className: \"edui-for-\" + cmd,\n                    title:\n                        editor.options.labelMap[cmd] ||\n                        editor.getLang(\"labelMap.\" + cmd) ||\n                        \"\",\n                    onclick: function () {\n                        editor.execCommand(cmd);\n                    },\n                    theme: editor.options.theme,\n                    showText: false\n                });\n                switch (cmd) {\n                    case 'bold':\n                    case 'italic':\n                    case 'underline':\n                    case 'strikethrough':\n                    case 'fontborder':\n                        ui.shouldUiShow = (function (cmdInternal) {\n                            return function () {\n                                if (!editor.selection.getText()) {\n                                    return false;\n                                }\n                                return editor.queryCommandState(cmdInternal) !== UE.constants.STATEFUL.DISABLED;\n                            }\n                        })(cmd);\n                        break;\n                }\n                editorui.buttons[cmd] = ui;\n                editor.addListener(\"selectionchange\", function (\n                    type,\n                    causeByUi,\n                    uiReady\n                ) {\n                    var state = editor.queryCommandState(cmd);\n                    if (state === -1) {\n                        ui.setDisabled(true);\n                        ui.setChecked(false);\n                    } else {\n                        if (!uiReady) {\n                            ui.setDisabled(false);\n                            ui.setChecked(state);\n                        }\n                    }\n                });\n                return ui;\n            };\n        })(ci);\n    }\n\n    //清除文档\n    editorui.cleardoc = function (editor) {\n        var ui = new editorui.Button({\n            className: \"edui-for-cleardoc\",\n            title:\n                editor.options.labelMap.cleardoc ||\n                editor.getLang(\"labelMap.cleardoc\") ||\n                \"\",\n            theme: editor.options.theme,\n            onclick: function () {\n                if (confirm(editor.getLang(\"confirmClear\"))) {\n                    editor.execCommand(\"cleardoc\");\n                }\n            }\n        });\n        editorui.buttons[\"cleardoc\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            ui.setDisabled(editor.queryCommandState(\"cleardoc\") == -1);\n        });\n        return ui;\n    };\n\n    var imageTypeSet = [\n        'none', 'left', 'center', 'right'\n    ];\n    for (let value of imageTypeSet) {\n        (function (value) {\n            editorui['image' + value] = function (editor) {\n                var ui = new editorui.Button({\n                    className: \"edui-for-\" + 'image' + value,\n                    title:\n                        editor.options.labelMap['image' + value] ||\n                        editor.getLang(\n                            \"labelMap.\" + 'image' + value\n                        ) ||\n                        \"\",\n                    theme: editor.options.theme,\n                    onclick: function () {\n                        editor.execCommand('imagefloat', value);\n                    },\n                    shouldUiShow: function () {\n                        let closedNode = editor.selection.getRange().getClosedNode();\n                        if (!closedNode || closedNode.tagName !== \"IMG\") {\n                            return false;\n                        }\n                        if (domUtils.hasClass(closedNode, \"uep-loading\") || domUtils.hasClass(closedNode, \"uep-loading-error\")) {\n                            return false;\n                        }\n                        return editor.queryCommandState('imagefloat') !== UE.constants.STATEFUL.DISABLED;\n                    }\n                });\n                editorui.buttons['image' + value] = ui;\n                editor.addListener(\"selectionchange\", function (\n                    type,\n                    causeByUi,\n                    uiReady\n                ) {\n                    ui.setDisabled(editor.queryCommandState('imagefloat') === UE.constants.STATEFUL.DISABLED);\n                    ui.setChecked(editor.queryCommandValue('imagefloat') === value && !uiReady);\n                });\n                return ui;\n            };\n        })(value);\n    }\n\n    //排版，图片排版，文字方向\n    var typeset = {\n        justify: [\"left\", \"right\", \"center\", \"justify\"],\n        directionality: [\"ltr\", \"rtl\"]\n    };\n    for (var p in typeset) {\n        (function (cmd, val) {\n            for (var i = 0, ci; (ci = val[i++]);) {\n                (function (cmd2) {\n                    editorui[cmd.replace(\"float\", \"\") + cmd2] = function (editor) {\n                        var ui = new editorui.Button({\n                            className: \"edui-for-\" + cmd.replace(\"float\", \"\") + cmd2,\n                            title:\n                                editor.options.labelMap[cmd.replace(\"float\", \"\") + cmd2] ||\n                                editor.getLang(\n                                    \"labelMap.\" + cmd.replace(\"float\", \"\") + cmd2\n                                ) ||\n                                \"\",\n                            theme: editor.options.theme,\n                            onclick: function () {\n                                editor.execCommand(cmd, cmd2);\n                            }\n                        });\n                        editorui.buttons[cmd] = ui;\n                        editor.addListener(\"selectionchange\", function (\n                            type,\n                            causeByUi,\n                            uiReady\n                        ) {\n                            ui.setDisabled(editor.queryCommandState(cmd) == -1);\n                            ui.setChecked(editor.queryCommandValue(cmd) == cmd2 && !uiReady);\n                        });\n                        return ui;\n                    };\n                })(ci);\n            }\n        })(p, typeset[p]);\n    }\n\n    //字体颜色和背景颜色\n    for (var i = 0, ci; (ci = [\"backcolor\", \"forecolor\"][i++]);) {\n        editorui[ci] = (function (cmd) {\n            return function (editor) {\n                var ui = new editorui.ColorButton({\n                    className: \"edui-for-\" + cmd,\n                    color: \"default\",\n                    title:\n                        editor.options.labelMap[cmd] ||\n                        editor.getLang(\"labelMap.\" + cmd) ||\n                        \"\",\n                    editor: editor,\n                    onpickcolor: function (t, color) {\n                        editor.execCommand(cmd, color);\n                    },\n                    onpicknocolor: function () {\n                        editor.execCommand(cmd, \"default\");\n                        this.setColor(\"transparent\");\n                        this.color = \"default\";\n                    },\n                    onbuttonclick: function () {\n                        editor.execCommand(cmd, this.color);\n                    },\n                    shouldUiShow: function () {\n                        if (!editor.selection.getText()) {\n                            return false;\n                        }\n                        return editor.queryCommandState(cmd) !== UE.constants.STATEFUL.DISABLED;\n                    }\n                });\n\n                editorui.buttons[cmd] = ui;\n                editor.addListener(\"selectionchange\", function () {\n                    ui.setDisabled(editor.queryCommandState(cmd) == -1);\n                });\n                return ui;\n            };\n        })(ci);\n    }\n\n    var dialogIframeUrlMap = {\n        anchor: \"~/dialogs/anchor/anchor.html?{timestamp}\",\n        insertimage: \"~/dialogs/image/image.html?{timestamp}\",\n        link: \"~/dialogs/link/link.html?{timestamp}\",\n        spechars: \"~/dialogs/spechars/spechars.html?{timestamp}\",\n        searchreplace: \"~/dialogs/searchreplace/searchreplace.html?{timestamp}\",\n        insertvideo: \"~/dialogs/video/video.html?{timestamp}\",\n        insertaudio: \"~/dialogs/audio/audio.html?{timestamp}\",\n        help: \"~/dialogs/help/help.html?{timestamp}\",\n        preview: \"~/dialogs/preview/preview.html?{timestamp}\",\n        emotion: \"~/dialogs/emotion/emotion.html?{timestamp}\",\n        wordimage: \"~/dialogs/wordimage/wordimage.html?{timestamp}\",\n        formula: \"~/dialogs/formula/formula.html?{timestamp}\",\n        attachment: \"~/dialogs/attachment/attachment.html?{timestamp}\",\n        insertframe: \"~/dialogs/insertframe/insertframe.html?{timestamp}\",\n        edittip: \"~/dialogs/table/edittip.html?{timestamp}\",\n        edittable: \"~/dialogs/table/edittable.html?{timestamp}\",\n        edittd: \"~/dialogs/table/edittd.html?{timestamp}\",\n        scrawl: \"~/dialogs/scrawl/scrawl.html?{timestamp}\",\n        template: \"~/dialogs/template/template.html?{timestamp}\",\n        background: \"~/dialogs/background/background.html?{timestamp}\",\n        contentimport: \"~/dialogs/contentimport/contentimport.html?{timestamp}\",\n        ai: \"~/dialogs/ai/ai.html?{timestamp}\",\n    };\n    var dialogBtns = {\n        noOk: [\"searchreplace\", \"help\", \"spechars\", \"preview\"],\n        ok: [\n            \"attachment\",\n            \"anchor\",\n            \"link\",\n            \"insertimage\",\n            \"insertframe\",\n            \"wordimage\",\n            \"insertvideo\",\n            \"insertaudio\",\n            \"edittip\",\n            \"edittable\",\n            \"edittd\",\n            \"scrawl\",\n            \"template\",\n            \"formula\",\n            \"background\",\n            \"contentimport\",\n        ]\n    };\n    for (var p in dialogBtns) {\n        (function (type, vals) {\n            for (var i = 0, ci; (ci = vals[i++]);) {\n                //todo opera下存在问题\n                if (browser.opera && ci === \"searchreplace\") {\n                    continue;\n                }\n                (function (cmd) {\n                    editorui[cmd] = function (editor, iframeUrl, title) {\n                        iframeUrl =\n                            iframeUrl ||\n                            (editor.options.dialogIframeUrlMap || {})[cmd] ||\n                            dialogIframeUrlMap[cmd];\n                        title =\n                            editor.options.labelMap[cmd] ||\n                            editor.getLang(\"labelMap.\" + cmd) ||\n                            \"\";\n\n                        var dialog;\n                        //没有iframeUrl不创建dialog\n                        if (iframeUrl) {\n                            dialog = new editorui.Dialog(\n                                utils.extend(\n                                    {\n                                        iframeUrl: editor.ui.mapUrl(iframeUrl),\n                                        editor: editor,\n                                        className: \"edui-for-\" + cmd,\n                                        title: title,\n                                        holdScroll: cmd === \"insertimage\",\n                                        fullscreen: /preview/.test(cmd),\n                                        closeDialog: editor.getLang(\"closeDialog\")\n                                    },\n                                    type === \"ok\"\n                                        ? {\n                                            buttons: [\n                                                {\n                                                    className: \"edui-okbutton\",\n                                                    label: editor.getLang(\"ok\"),\n                                                    editor: editor,\n                                                    onclick: function () {\n                                                        dialog.close(true);\n                                                    }\n                                                },\n                                                {\n                                                    className: \"edui-cancelbutton\",\n                                                    label: editor.getLang(\"cancel\"),\n                                                    editor: editor,\n                                                    onclick: function () {\n                                                        dialog.close(false);\n                                                    }\n                                                }\n                                            ]\n                                        }\n                                        : {}\n                                )\n                            );\n\n                            editor.ui._dialogs[cmd + \"Dialog\"] = dialog;\n                        }\n\n                        var ui = new editorui.Button({\n                            className: \"edui-for-\" + cmd,\n                            title: title,\n                            onclick: function () {\n                                if (editor.options.toolbarCallback) {\n                                    if (true === editor.options.toolbarCallback(cmd, editor)) {\n                                        return;\n                                    }\n                                }\n                                if (dialog) {\n                                    switch (cmd) {\n                                        case \"wordimage\":\n                                            var images = editor.execCommand(\"wordimage\");\n                                            if (images && images.length) {\n                                                dialog.render();\n                                                dialog.open();\n                                            }\n                                            break;\n                                        case \"scrawl\":\n                                            if (editor.queryCommandState(\"scrawl\") !== -1) {\n                                                dialog.render();\n                                                dialog.open();\n                                            }\n                                            break;\n                                        default:\n                                            dialog.render();\n                                            dialog.open();\n                                    }\n                                }\n                            },\n                            theme: editor.options.theme,\n                            disabled: (cmd === \"scrawl\" && editor.queryCommandState(\"scrawl\") === -1)\n                        });\n                        switch (cmd) {\n                            case 'insertimage':\n                            case 'formula':\n                                ui.shouldUiShow = (function (cmd) {\n                                    return function () {\n                                        let closedNode = editor.selection.getRange().getClosedNode();\n                                        if (!closedNode || closedNode.tagName !== \"IMG\") {\n                                            return false;\n                                        }\n                                        if ('formula' === cmd && closedNode.getAttribute('data-formula-image') !== null) {\n                                            return true;\n                                        }\n                                        if ('insertimage' === cmd) {\n                                            return true;\n                                        }\n                                        return false;\n                                    };\n                                })(cmd);\n                                break;\n                        }\n                        editorui.buttons[cmd] = ui;\n                        editor.addListener(\"selectionchange\", function () {\n                            //只存在于右键菜单而无工具栏按钮的ui不需要检测状态\n                            var unNeedCheckState = {edittable: 1};\n                            if (cmd in unNeedCheckState) return;\n\n                            var state = editor.queryCommandState(cmd);\n                            if (ui.getDom()) {\n                                ui.setDisabled(state === -1);\n                                ui.setChecked(state);\n                            }\n                        });\n\n                        return ui;\n                    };\n                })(ci.toLowerCase());\n            }\n        })(p, dialogBtns[p]);\n    }\n\n    editorui.insertcode = function (editor, list, title) {\n        list = editor.options[\"insertcode\"] || [];\n        title =\n            editor.options.labelMap[\"insertcode\"] ||\n            editor.getLang(\"labelMap.insertcode\") ||\n            \"\";\n        // if (!list.length) return;\n        var items = [];\n        utils.each(list, function (key, val) {\n            items.push({\n                label: key,\n                value: val,\n                theme: editor.options.theme,\n                renderLabelHtml: function () {\n                    return (\n                        '<div class=\"edui-label %%-label\" >' + (this.label || \"\") + \"</div>\"\n                    );\n                }\n            });\n        });\n\n        var ui = new editorui.Combox({\n            editor: editor,\n            items: items,\n            onselect: function (t, index) {\n                editor.execCommand(\"insertcode\", this.items[index].value);\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            },\n            title: title,\n            initValue: title,\n            className: \"edui-for-insertcode\",\n            indexByValue: function (value) {\n                if (value) {\n                    for (var i = 0, ci; (ci = this.items[i]); i++) {\n                        if (ci.value.indexOf(value) != -1) return i;\n                    }\n                }\n\n                return -1;\n            }\n        });\n        editorui.buttons[\"insertcode\"] = ui;\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            if (!uiReady) {\n                var state = editor.queryCommandState(\"insertcode\");\n                if (state == -1) {\n                    ui.setDisabled(true);\n                } else {\n                    ui.setDisabled(false);\n                    var value = editor.queryCommandValue(\"insertcode\");\n                    if (!value) {\n                        ui.setValue(title);\n                        return;\n                    }\n                    //trace:1871 ie下从源码模式切换回来时，字体会带单引号，而且会有逗号\n                    value && (value = value.replace(/['\"]/g, \"\").split(\",\")[0]);\n                    ui.setValue(value);\n                }\n            }\n        });\n        return ui;\n    };\n\n    editorui.fontfamily = function (editor, list, title) {\n        list = editor.options[\"fontfamily\"] || [];\n        title =\n            editor.options.labelMap[\"fontfamily\"] ||\n            editor.getLang(\"labelMap.fontfamily\") ||\n            \"\";\n        if (!list.length) return;\n        for (var i = 0, ci, items = []; (ci = list[i]); i++) {\n            var langLabel = editor.getLang(\"fontfamily\")[ci.name] || \"\";\n            (function (key, val) {\n                items.push({\n                    label: key,\n                    value: val,\n                    theme: editor.options.theme,\n                    renderLabelHtml: function () {\n                        return (\n                            '<div class=\"edui-label %%-label\" style=\"font-family:' +\n                            utils.unhtml(this.value) +\n                            '\">' +\n                            (this.label || \"\") +\n                            \"</div>\"\n                        );\n                    }\n                });\n            })(ci.label || langLabel, ci.val);\n        }\n        var ui = new editorui.Combox({\n            editor: editor,\n            items: items,\n            onselect: function (t, index) {\n                editor.execCommand(\"FontFamily\", this.items[index].value);\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            },\n            title: title,\n            initValue: title,\n            className: \"edui-for-fontfamily\",\n            indexByValue: function (value) {\n                if (value) {\n                    for (var i = 0, ci; (ci = this.items[i]); i++) {\n                        if (ci.value.indexOf(value) != -1) return i;\n                    }\n                }\n                return -1;\n            }\n        });\n        editorui.buttons[\"fontfamily\"] = ui;\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            if (!uiReady) {\n                var state = editor.queryCommandState(\"FontFamily\");\n                if (state == -1) {\n                    ui.setDisabled(true);\n                } else {\n                    ui.setDisabled(false);\n                    var value = editor.queryCommandValue(\"FontFamily\");\n                    //trace:1871 ie下从源码模式切换回来时，字体会带单引号，而且会有逗号\n                    value && (value = value.replace(/['\"]/g, \"\").split(\",\")[0]);\n                    ui.setValue(value);\n                }\n            }\n        });\n        return ui;\n    };\n\n    editorui.fontsize = function (editor, list, title) {\n        title =\n            editor.options.labelMap[\"fontsize\"] ||\n            editor.getLang(\"labelMap.fontsize\") ||\n            \"\";\n        list = list || editor.options[\"fontsize\"] || [];\n        if (!list.length) return;\n        var items = [];\n        for (var i = 0; i < list.length; i++) {\n            var size = list[i] + \"px\";\n            items.push({\n                label: size,\n                value: size,\n                theme: editor.options.theme,\n                renderLabelHtml: function () {\n                    return (\n                        '<div class=\"edui-label %%-label\" style=\"line-height:1;font-size:' +\n                        this.value +\n                        '\">' +\n                        (this.label || \"\") +\n                        \"</div>\"\n                    );\n                }\n            });\n        }\n        var ui = new editorui.Combox({\n            editor: editor,\n            items: items,\n            title: title,\n            initValue: title,\n            onselect: function (t, index) {\n                editor.execCommand(\"FontSize\", this.items[index].value);\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            },\n            className: \"edui-for-fontsize\"\n        });\n        editorui.buttons[\"fontsize\"] = ui;\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            if (!uiReady) {\n                var state = editor.queryCommandState(\"FontSize\");\n                if (state == -1) {\n                    ui.setDisabled(true);\n                } else {\n                    ui.setDisabled(false);\n                    ui.setValue(editor.queryCommandValue(\"FontSize\"));\n                }\n            }\n        });\n        return ui;\n    };\n\n    editorui.paragraph = function (editor, list, title) {\n        title =\n            editor.options.labelMap[\"paragraph\"] ||\n            editor.getLang(\"labelMap.paragraph\") ||\n            \"\";\n        list = editor.options[\"paragraph\"] || [];\n        if (utils.isEmptyObject(list)) return;\n        var items = [];\n        for (var i in list) {\n            items.push({\n                value: i,\n                label: list[i] || editor.getLang(\"paragraph\")[i],\n                theme: editor.options.theme,\n                renderLabelHtml: function () {\n                    return (\n                        '<div class=\"edui-label %%-label\"><span class=\"edui-for-' +\n                        this.value +\n                        '\">' +\n                        (this.label || \"\") +\n                        \"</span></div>\"\n                    );\n                }\n            });\n        }\n        var ui = new editorui.Combox({\n            editor: editor,\n            items: items,\n            title: title,\n            initValue: title,\n            className: \"edui-for-paragraph\",\n            onselect: function (t, index) {\n                editor.execCommand(\"Paragraph\", this.items[index].value);\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            }\n        });\n        editorui.buttons[\"paragraph\"] = ui;\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            if (!uiReady) {\n                var state = editor.queryCommandState(\"Paragraph\");\n                if (state == -1) {\n                    ui.setDisabled(true);\n                } else {\n                    ui.setDisabled(false);\n                    var value = editor.queryCommandValue(\"Paragraph\");\n                    var index = ui.indexByValue(value);\n                    if (index != -1) {\n                        ui.setValue(value);\n                    } else {\n                        ui.setValue(ui.initValue);\n                    }\n                }\n            }\n        });\n        return ui;\n    };\n\n    //自定义标题\n    editorui.customstyle = function (editor) {\n        var list = editor.options[\"customstyle\"] || [],\n            title =\n                editor.options.labelMap[\"customstyle\"] ||\n                editor.getLang(\"labelMap.customstyle\") ||\n                \"\";\n        if (!list.length) return;\n        var langCs = editor.getLang(\"customstyle\");\n        for (var i = 0, items = [], t; (t = list[i++]);) {\n            (function (t) {\n                var ck = {};\n                ck.label = t.label ? t.label : langCs[t.name];\n                ck.style = t.style;\n                ck.className = t.className;\n                ck.tag = t.tag;\n                items.push({\n                    label: ck.label,\n                    value: ck,\n                    theme: editor.options.theme,\n                    renderLabelHtml: function () {\n                        return (\n                            '<div class=\"edui-label %%-label\">' +\n                            \"<\" +\n                            ck.tag +\n                            \" \" +\n                            (ck.className ? ' class=\"' + ck.className + '\"' : \"\") +\n                            (ck.style ? ' style=\"' + ck.style + '\"' : \"\") +\n                            \">\" +\n                            ck.label +\n                            \"</\" +\n                            ck.tag +\n                            \">\" +\n                            \"</div>\"\n                        );\n                    }\n                });\n            })(t);\n        }\n\n        var ui = new editorui.Combox({\n            editor: editor,\n            items: items,\n            title: title,\n            initValue: title,\n            className: \"edui-for-customstyle\",\n            onselect: function (t, index) {\n                editor.execCommand(\"customstyle\", this.items[index].value);\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            },\n            indexByValue: function (value) {\n                for (var i = 0, ti; (ti = this.items[i++]);) {\n                    if (ti.label == value) {\n                        return i - 1;\n                    }\n                }\n                return -1;\n            }\n        });\n        editorui.buttons[\"customstyle\"] = ui;\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            if (!uiReady) {\n                var state = editor.queryCommandState(\"customstyle\");\n                if (state == -1) {\n                    ui.setDisabled(true);\n                } else {\n                    ui.setDisabled(false);\n                    var value = editor.queryCommandValue(\"customstyle\");\n                    var index = ui.indexByValue(value);\n                    if (index != -1) {\n                        ui.setValue(value);\n                    } else {\n                        ui.setValue(ui.initValue);\n                    }\n                }\n            }\n        });\n        return ui;\n    };\n\n    editorui.inserttable = function (editor, iframeUrl, title) {\n        title =\n            editor.options.labelMap[\"inserttable\"] ||\n            editor.getLang(\"labelMap.inserttable\") ||\n            \"\";\n        var ui = new editorui.TableButton({\n            editor: editor,\n            title: title,\n            className: \"edui-for-inserttable\",\n            onpicktable: function (t, numCols, numRows) {\n                editor.execCommand(\"InsertTable\", {\n                    numRows: numRows,\n                    numCols: numCols,\n                    border: 1\n                });\n            },\n            onbuttonclick: function () {\n                this.showPopup();\n            }\n        });\n        editorui.buttons[\"inserttable\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            ui.setDisabled(editor.queryCommandState(\"inserttable\") == -1);\n        });\n        return ui;\n    };\n\n    editorui.lineheight = function (editor) {\n        var val = editor.options.lineheight || [];\n        if (!val.length) return;\n        for (var i = 0, ci, items = []; (ci = val[i++]);) {\n            items.push({\n                //todo:写死了\n                label: ci,\n                value: ci,\n                theme: editor.options.theme,\n                onclick: function () {\n                    editor.execCommand(\"lineheight\", this.value);\n                }\n            });\n        }\n        var ui = new editorui.MenuButton({\n            editor: editor,\n            className: \"edui-for-lineheight\",\n            title:\n                editor.options.labelMap[\"lineheight\"] ||\n                editor.getLang(\"labelMap.lineheight\") ||\n                \"\",\n            items: items,\n            onbuttonclick: function () {\n                var value = editor.queryCommandValue(\"LineHeight\") || this.value;\n                editor.execCommand(\"LineHeight\", value);\n            }\n        });\n        editorui.buttons[\"lineheight\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            var state = editor.queryCommandState(\"LineHeight\");\n            if (state == -1) {\n                ui.setDisabled(true);\n            } else {\n                ui.setDisabled(false);\n                var value = editor.queryCommandValue(\"LineHeight\");\n                value && ui.setValue((value + \"\").replace(/cm/, \"\"));\n                ui.setChecked(state);\n            }\n        });\n        return ui;\n    };\n\n    var rowspacings = [\"top\", \"bottom\"];\n    for (var r = 0, ri; (ri = rowspacings[r++]);) {\n        (function (cmd) {\n            editorui[\"rowspacing\" + cmd] = function (editor) {\n                var val = editor.options[\"rowspacing\" + cmd] || [];\n                if (!val.length) return null;\n                for (var i = 0, ci, items = []; (ci = val[i++]);) {\n                    items.push({\n                        label: ci,\n                        value: ci,\n                        theme: editor.options.theme,\n                        onclick: function () {\n                            editor.execCommand(\"rowspacing\", this.value, cmd);\n                        }\n                    });\n                }\n                var ui = new editorui.MenuButton({\n                    editor: editor,\n                    className: \"edui-for-rowspacing\" + cmd,\n                    title:\n                        editor.options.labelMap[\"rowspacing\" + cmd] ||\n                        editor.getLang(\"labelMap.rowspacing\" + cmd) ||\n                        \"\",\n                    items: items,\n                    onbuttonclick: function () {\n                        var value =\n                            editor.queryCommandValue(\"rowspacing\", cmd) || this.value;\n                        editor.execCommand(\"rowspacing\", value, cmd);\n                    }\n                });\n                editorui.buttons[cmd] = ui;\n                editor.addListener(\"selectionchange\", function () {\n                    var state = editor.queryCommandState(\"rowspacing\", cmd);\n                    if (state == -1) {\n                        ui.setDisabled(true);\n                    } else {\n                        ui.setDisabled(false);\n                        var value = editor.queryCommandValue(\"rowspacing\", cmd);\n                        value && ui.setValue((value + \"\").replace(/%/, \"\"));\n                        ui.setChecked(state);\n                    }\n                });\n                return ui;\n            };\n        })(ri);\n    }\n\n    //有序，无序列表\n    var lists = [\"insertorderedlist\", \"insertunorderedlist\"];\n    for (var l = 0, cl; (cl = lists[l++]);) {\n        (function (cmd) {\n            editorui[cmd] = function (editor) {\n                var vals = editor.options[cmd],\n                    _onMenuClick = function () {\n                        editor.execCommand(cmd, this.value);\n                    },\n                    items = [];\n                for (var i in vals) {\n                    items.push({\n                        label: vals[i] || editor.getLang()[cmd][i] || \"\",\n                        value: i,\n                        theme: editor.options.theme,\n                        onclick: _onMenuClick\n                    });\n                }\n                var ui = new editorui.MenuButton({\n                    editor: editor,\n                    className: \"edui-for-\" + cmd,\n                    title: editor.getLang(\"labelMap.\" + cmd) || \"\",\n                    items: items,\n                    onbuttonclick: function () {\n                        var value = editor.queryCommandValue(cmd) || this.value;\n                        editor.execCommand(cmd, value);\n                    }\n                });\n                editorui.buttons[cmd] = ui;\n                editor.addListener(\"selectionchange\", function () {\n                    var state = editor.queryCommandState(cmd);\n                    if (state == -1) {\n                        ui.setDisabled(true);\n                    } else {\n                        ui.setDisabled(false);\n                        var value = editor.queryCommandValue(cmd);\n                        ui.setValue(value);\n                        ui.setChecked(state);\n                    }\n                });\n                return ui;\n            };\n        })(cl);\n    }\n\n    editorui.fullscreen = function (editor, title) {\n        title =\n            editor.options.labelMap[\"fullscreen\"] ||\n            editor.getLang(\"labelMap.fullscreen\") ||\n            \"\";\n        var ui = new editorui.Button({\n            className: \"edui-for-fullscreen\",\n            title: title,\n            theme: editor.options.theme,\n            onclick: function () {\n                if (editor.ui) {\n                    editor.ui.setFullScreen(!editor.ui.isFullScreen());\n                }\n                this.setChecked(editor.ui.isFullScreen());\n            }\n        });\n        editorui.buttons[\"fullscreen\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            var state = editor.queryCommandState(\"fullscreen\");\n            ui.setDisabled(state == -1);\n            ui.setChecked(editor.ui.isFullScreen());\n        });\n        return ui;\n    };\n\n    // 表情\n    editorui['emotion'] = function (editor, iframeUrl) {\n        var cmd = \"emotion\";\n        var ui = new editorui.MultiMenuPop({\n            title:\n                editor.options.labelMap[cmd] ||\n                editor.getLang(\"labelMap.\" + cmd + \"\") ||\n                \"\",\n            editor: editor,\n            className: \"edui-for-\" + cmd,\n            iframeUrl: editor.ui.mapUrl(\n                iframeUrl ||\n                (editor.options.dialogIframeUrlMap || {})[cmd] ||\n                dialogIframeUrlMap[cmd]\n            )\n        });\n        editorui.buttons[cmd] = ui;\n\n        editor.addListener(\"selectionchange\", function () {\n            ui.setDisabled(editor.queryCommandState(cmd) == -1);\n        });\n        return ui;\n    };\n\n    editorui['autotypeset'] = function (editor) {\n        var ui = new editorui.AutoTypeSetButton({\n            editor: editor,\n            title:\n                editor.options.labelMap[\"autotypeset\"] ||\n                editor.getLang(\"labelMap.autotypeset\") ||\n                \"\",\n            className: \"edui-for-autotypeset\",\n            onbuttonclick: function () {\n                editor.execCommand(\"autotypeset\");\n            }\n        });\n        editorui.buttons[\"autotypeset\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            ui.setDisabled(editor.queryCommandState(\"autotypeset\") == -1);\n        });\n        return ui;\n    };\n\n    /** AI智能助手 */\n    editorui['ai'] = function (editor, iframeUrl, title) {\n        iframeUrl = iframeUrl || (editor.options.dialogIframeUrlMap || {})['ai'] || dialogIframeUrlMap['ai'];\n        title = editor.options.labelMap['ai'] || editor.getLang(\"labelMap.ai\") || \"\";\n\n        var dialog = new editorui.Dialog({\n            iframeUrl: editor.ui.mapUrl(iframeUrl),\n            editor: editor,\n            className: \"edui-for-ai\",\n            title: title,\n            holdScroll: true,\n            fullscreen: false,\n            closeDialog: editor.getLang(\"closeDialog\")\n        });\n\n        editor.ui._dialogs[\"aiDialog\"] = dialog;\n\n        var ui = new editorui.Button({\n            className: \"edui-for-ai\",\n            title: title,\n            onclick: function () {\n                if (editor.options.toolbarCallback) {\n                    if (true === editor.options.toolbarCallback('ai', editor)) {\n                        return;\n                    }\n                }\n                dialog.render();\n                dialog.open();\n            },\n            theme: editor.options.theme,\n            disabled: false\n        });\n        editorui.buttons['ai'] = ui;\n        return ui;\n    };\n\n    /* 简单上传插件 */\n    editorui['simpleupload'] = function (editor) {\n        var name = \"simpleupload\",\n            ui = new editorui.Button({\n                className: \"edui-for-\" + name,\n                title:\n                    editor.options.labelMap[name] ||\n                    editor.getLang(\"labelMap.\" + name) ||\n                    \"\",\n                onclick: function () {\n                },\n                theme: editor.options.theme,\n                showText: false\n            });\n        editorui.buttons[name] = ui;\n        editor.addListener(\"ready\", function () {\n            var b = ui.getDom(\"body\"),\n                iconSpan = b.children[0];\n            editor.fireEvent(\"simpleuploadbtnready\", iconSpan);\n        });\n        editor.addListener(\"selectionchange\", function (type, causeByUi, uiReady) {\n            var state = editor.queryCommandState(name);\n            if (state == -1) {\n                ui.setDisabled(true);\n                ui.setChecked(false);\n            } else {\n                if (!uiReady) {\n                    ui.setDisabled(false);\n                    ui.setChecked(state);\n                }\n            }\n        });\n        return ui;\n    };\n\n    /* 字间距 */\n    editorui.letterspacing = function (editor) {\n        var val = editor.options.letterspacing || [];\n        if (!val.length) return;\n        for (var i = 0, ci, items = []; (ci = val[i++]); ) {\n            items.push({\n                //todo:写死了\n                label: ci,\n                value: ci,\n                theme: editor.options.theme,\n                onclick: function () {\n                    editor.execCommand(\"letterspacing\", this.value);\n                },\n            });\n        }\n        var ui = new editorui.MenuButton({\n            editor: editor,\n            className: \"edui-for-letterspacing\",\n            title: editor.options.labelMap[\"letterspacing\"] || editor.getLang(\"labelMap.letterspacing\") || \"\",\n            items: items,\n            onbuttonclick: function () {\n                var value = editor.queryCommandValue(\"LetterSpacing\") || this.value;\n                editor.execCommand(\"LetterSpacing\", value);\n            },\n        });\n        editorui.buttons[\"letterspacing\"] = ui;\n        editor.addListener(\"selectionchange\", function () {\n            var state = editor.queryCommandState(\"LetterSpacing\");\n            if (state == -1) {\n                ui.setDisabled(true);\n            } else {\n                ui.setDisabled(false);\n                var value = editor.queryCommandValue(\"LetterSpacing\");\n                value && ui.setValue((value + \"\").replace(/cm/, \"\"));\n                ui.setChecked(state);\n            }\n        });\n        return ui;\n    };\n})();\n"
  },
  {
    "path": "_src/adapter/message.js",
    "content": "UE.registerUI(\"message\", function (editor) {\n    var editorui = baidu.editor.ui;\n    var Message = editorui.Message;\n    var holder;\n    var _messageItems = [];\n    var me = editor;\n\n    me.setOpt(\"enableMessageShow\", true);\n    if (me.getOpt(\"enableMessageShow\") === false) {\n        return;\n    }\n\n    me.addListener(\"ready\", function () {\n        holder = document.getElementById(me.ui.id + \"_message_holder\");\n        updateHolderPos();\n        setTimeout(function () {\n            updateHolderPos();\n        }, 500);\n    });\n\n    me.addListener(\"showmessage\", function (type, opt) {\n        opt = utils.isString(opt)\n            ? {\n                content: opt\n            }\n            : opt;\n        var message = new Message({\n                timeout: opt.timeout,\n                type: opt.type,\n                content: opt.content,\n                keepshow: opt.keepshow,\n                editor: me\n            }),\n            mid = opt.id || \"msg_\" + (+new Date()).toString(36);\n        message.render(holder);\n        _messageItems[mid] = message;\n        message.reset(opt);\n        updateHolderPos();\n        return mid;\n    });\n\n    me.addListener(\"updatemessage\", function (type, id, opt) {\n        opt = utils.isString(opt)\n            ? {\n                content: opt\n            }\n            : opt;\n        var message = _messageItems[id];\n        message.render(holder);\n        message && message.reset(opt);\n    });\n\n    me.addListener(\"hidemessage\", function (type, id) {\n        var message = _messageItems[id];\n        message && message.hide();\n    });\n\n    function updateHolderPos() {\n        if (!holder || !me.ui) return;\n        var toolbarbox = me.ui.getDom(\"toolbarbox\");\n        if (toolbarbox) {\n            holder.style.top = toolbarbox.offsetHeight + 3 + \"px\";\n        }\n        holder.style.zIndex =\n            Math.max(me.options.zIndex, me.iframe.style.zIndex) + 1;\n    }\n});\n"
  },
  {
    "path": "_src/api.js",
    "content": "/**\n * 该文件定义了API文档所使用到的本地函数的说明\n * @file\n * @module Native\n */\n\n/**\n * 辅助接口说明\n * @module Native\n * @unfile\n */\n\n/**\n * 原生String对象， 字符串\n * @class String\n */\n\n/**\n * 原生Function对象， 函数\n * @class Function\n */\n\n/**\n * 原生Object对象， 普通对象\n * @remind 如果某一方法的参数类型为Object时， 表示该参数应该接受一个key-value集合\n * @class Object\n */\n\n/**\n * 原生Boolean对象， 布尔值\n * @class Boolean\n */\n\n/**\n * 原生Number对象， 数值\n * @class Number\n */\n\n/**\n * 原生NULL对象， 空\n * @class NULL\n */\n\n/**\n * 原生Array对象， 数组\n * @class Array\n */\n\n/**\n * 浏览器Node， dom节点\n * @class Node\n */\n\n/**\n * 浏览器Element， dom元素\n * @class Element\n */\n\n/**\n * UEditor模拟dom节点对象\n * @class uNode\n */\n"
  },
  {
    "path": "_src/core/Editor.defaultoptions.js",
    "content": "//维护编辑器一下默认的不在插件中的配置项\nUE.Editor.defaultOptions = function (editor) {\n    var _url = editor.options.UEDITOR_HOME_URL;\n    return {\n        isShow: true,\n        initialContent: \"\",\n        initialStyle: \"\",\n        autoClearinitialContent: false,\n        iframeCssUrl: _url + \"themes/iframe.css?{timestamp}\",\n        iframeCssUrlsAddition: [],\n        iframeCssStylesAddition: [],\n        textarea: '',\n        focus: false,\n        focusInEnd: true,\n        autoClearEmptyNode: true,\n        fullscreen: false,\n        readonly: false,\n        zIndex: 999,\n        imagePopup: true,\n        enterTag: \"p\",\n        customDomain: false,\n        lang: \"zh-cn\",\n        langPath: _url + \"lang/\",\n        theme: \"default\",\n        themePath: _url + \"themes/\",\n        allHtmlEnabled: false,\n        scaleEnabled: false,\n        tableNativeEditInFF: false,\n        autoSyncData: true,\n        fileNameFormat: \"{time}{rand:6}\"\n    };\n};\n"
  },
  {
    "path": "_src/core/Editor.js",
    "content": "/**\n * 编辑器主类，包含编辑器提供的大部分公用接口\n * @file\n * @module UE\n * @class Editor\n * @since 1.2.6.1\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @unfile\n * @module UE\n */\n\n/**\n * UEditor的核心类，为用户提供与编辑器交互的接口。\n * @unfile\n * @module UE\n * @class Editor\n */\n\n(function () {\n    var uid = 0,\n        _selectionChangeTimer;\n\n    /**\n     * 获取编辑器的html内容，赋值到编辑器所在表单的textarea文本域里面\n     * @private\n     * @method setValue\n     * @param { UE.Editor } editor 编辑器事例\n     */\n    function setValue(form, editor) {\n        if (!editor.options.textarea) {\n            return;\n        }\n        var textarea;\n        textarea = editor.textarea;\n        if (!textarea) {\n            textarea = domUtils.getElementsByTagName(form, \"textarea\", function (node) {\n                return node.id === 'ueditor_textarea_' + editor.options.textarea;\n            })[0];\n        }\n        if (!textarea) {\n            textarea = domUtils.getElementsByTagName(form, \"textarea\", function (node) {\n                return node.name === editor.options.textarea;\n            })[0];\n        }\n        if (!textarea) {\n            form.appendChild(\n                (textarea = domUtils.createElement(document, \"textarea\", {\n                    name: editor.options.textarea,\n                    id: \"ueditor_textarea_\" + editor.options.textarea,\n                    style: \"display:none\"\n                }))\n            );\n            editor.textareaAutoCreate = textarea;\n        }\n        if (textarea && !editor.textarea) {\n            editor.textarea = textarea;\n        }\n        !textarea.getAttribute(\"name\") &&\n        textarea.setAttribute(\"name\", editor.options.textarea);\n        textarea.value = editor.hasContents()\n            ? editor.options.allHtmlEnabled\n                ? editor.getAllHtml()\n                : editor.getContent(null, null, true)\n            : \"\";\n    }\n\n    function loadPlugins(me) {\n        //初始化插件\n        for (var pi in UE.plugins) {\n            UE.plugins[pi].call(me);\n        }\n    }\n\n    function checkCurLang(I18N) {\n        for (var lang in I18N) {\n            return lang;\n        }\n    }\n\n    function langReadied(me) {\n        me.langIsReady = true;\n\n        me.fireEvent(\"langReady\");\n    }\n\n    /**\n     * 编辑器准备就绪后会触发该事件\n     * @module UE\n     * @class Editor\n     * @event ready\n     * @remind render方法执行完成之后,会触发该事件\n     * @remind\n     * @example\n     * ```javascript\n     * editor.addListener( 'ready', function( editor ) {\n     *     editor.execCommand( 'focus' ); //编辑器家在完成后，让编辑器拿到焦点\n     * } );\n     * ```\n     */\n    /**\n     * 执行destroy方法,会触发该事件\n     * @module UE\n     * @class Editor\n     * @event destroy\n     * @see UE.Editor:destroy()\n     */\n    /**\n     * 执行reset方法,会触发该事件\n     * @module UE\n     * @class Editor\n     * @event reset\n     * @see UE.Editor:reset()\n     */\n    /**\n     * 执行focus方法,会触发该事件\n     * @module UE\n     * @class Editor\n     * @event focus\n     * @see UE.Editor:focus(Boolean)\n     */\n    /**\n     * 语言加载完成会触发该事件\n     * @module UE\n     * @class Editor\n     * @event langReady\n     */\n    /**\n     * 运行命令之后会触发该命令\n     * @module UE\n     * @class Editor\n     * @event beforeExecCommand\n     */\n    /**\n     * 运行命令之后会触发该命令\n     * @module UE\n     * @class Editor\n     * @event afterExecCommand\n     */\n    /**\n     * 运行命令之前会触发该命令\n     * @module UE\n     * @class Editor\n     * @event firstBeforeExecCommand\n     */\n    /**\n     * 在getContent方法执行之前会触发该事件\n     * @module UE\n     * @class Editor\n     * @event beforeGetContent\n     * @see UE.Editor:getContent()\n     */\n    /**\n     * 在getContent方法执行之后会触发该事件\n     * @module UE\n     * @class Editor\n     * @event afterGetContent\n     * @see UE.Editor:getContent()\n     */\n    /**\n     * 在getAllHtml方法执行时会触发该事件\n     * @module UE\n     * @class Editor\n     * @event getAllHtml\n     * @see UE.Editor:getAllHtml()\n     */\n    /**\n     * 在setContent方法执行之前会触发该事件\n     * @module UE\n     * @class Editor\n     * @event beforeSetContent\n     * @see UE.Editor:setContent(String)\n     */\n    /**\n     * 在setContent方法执行之后会触发该事件\n     * @module UE\n     * @class Editor\n     * @event afterSetContent\n     * @see UE.Editor:setContent(String)\n     */\n    /**\n     * 每当编辑器内部选区发生改变时，将触发该事件\n     * @event selectionchange\n     * @warning 该事件的触发非常频繁，不建议在该事件的处理过程中做重量级的处理\n     * @example\n     * ```javascript\n     * editor.addListener( 'selectionchange', function( editor ) {\n     *     console.log('选区发生改变');\n     * }\n     */\n    /**\n     * 在所有selectionchange的监听函数执行之前，会触发该事件\n     * @module UE\n     * @class Editor\n     * @event beforeSelectionChange\n     * @see UE.Editor:selectionchange\n     */\n    /**\n     * 在所有selectionchange的监听函数执行完之后，会触发该事件\n     * @module UE\n     * @class Editor\n     * @event afterSelectionChange\n     * @see UE.Editor:selectionchange\n     */\n    /**\n     * 编辑器内容发生改变时会触发该事件\n     * @module UE\n     * @class Editor\n     * @event contentChange\n     */\n\n    /**\n     * 以默认参数构建一个编辑器实例\n     * @constructor\n     * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面\n     * @example\n     * ```javascript\n     * var editor = new UE.Editor();\n     * editor.execCommand('blod');\n     * ```\n     * @see UE.Config\n     */\n\n    /**\n     * 以给定的参数集合创建一个编辑器实例，对于未指定的参数，将应用默认参数。\n     * @constructor\n     * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面\n     * @param { Object } setting 创建编辑器的参数\n     * @example\n     * ```javascript\n     * var editor = new UE.Editor();\n     * editor.execCommand('blod');\n     * ```\n     * @see UE.Config\n     */\n    var Editor = (UE.Editor = function (options) {\n        var me = this;\n        me.uid = uid++;\n        EventBase.call(me);\n        me.commands = {};\n        me.options = utils.extend(utils.clone(options || {}), UEDITOR_CONFIG, true);\n        me.shortcutkeys = {};\n        me.inputRules = [];\n        me.outputRules = [];\n        //设置默认的常用属性\n        me.setOpt(Editor.defaultOptions(me));\n\n        /* 尝试异步加载后台配置 */\n        me.loadServerConfig();\n\n        if (!utils.isEmptyObject(UE.I18N)) {\n            //修改默认的语言类型\n            me.options.lang = checkCurLang(UE.I18N);\n            UE.plugin.load(me);\n            langReadied(me);\n        } else {\n            utils.loadFile(\n                document,\n                {\n                    src:\n                        me.options.langPath +\n                        me.options.lang +\n                        \"/\" +\n                        me.options.lang +\n                        \".js?{timestamp:dist/lang/zh-cn/zh-cn.js}\",\n                    tag: \"script\",\n                    type: \"text/javascript\",\n                    defer: \"defer\"\n                },\n                function () {\n                    UE.plugin.load(me);\n                    langReadied(me);\n                }\n            );\n        }\n\n        UE.instants[\"ueditorInstant\" + me.uid] = me;\n    });\n    Editor.prototype = {\n        registerCommand: function (name, obj) {\n            this.commands[name] = obj;\n        },\n        /**\n         * 编辑器对外提供的监听ready事件的接口， 通过调用该方法，达到的效果与监听ready事件是一致的\n         * @method ready\n         * @param { Function } fn 编辑器ready之后所执行的回调, 如果在注册事件之前编辑器已经ready，将会\n         * 立即触发该回调。\n         * @remind 需要等待编辑器加载完成后才能执行的代码,可以使用该方法传入\n         * @example\n         * ```javascript\n         * editor.ready( function( editor ) {\n         *     editor.setContent('初始化完毕');\n         * } );\n         * ```\n         * @see UE.Editor.event:ready\n         */\n        ready: function (fn) {\n            var me = this;\n            if (fn) {\n                me.isReady ? fn.apply(me) : me.addListener(\"ready\", fn);\n            }\n        },\n\n        /**\n         * 该方法是提供给插件里面使用，设置配置项默认值\n         * @method setOpt\n         * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置\n         * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用，其他地方不能调用。\n         * @param { String } key 编辑器的可接受的选项名称\n         * @param { * } val  该选项可接受的值\n         * @example\n         * ```javascript\n         * editor.setOpt( 'initContent', '欢迎使用编辑器' );\n         * ```\n         */\n\n        /**\n         * 该方法是提供给插件里面使用，以{key:value}集合的方式设置插件内用到的配置项默认值\n         * @method setOpt\n         * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置\n         * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用，其他地方不能调用。\n         * @param { Object } options 将要设置的选项的键值对对象\n         * @example\n         * ```javascript\n         * editor.setOpt( {\n         *     'initContent': '欢迎使用编辑器'\n         * } );\n         * ```\n         */\n        setOpt: function (key, val) {\n            var obj = {};\n            if (utils.isString(key)) {\n                obj[key] = val;\n            } else {\n                obj = key;\n            }\n            utils.extend(this.options, obj, true);\n        },\n        getOpt: function (key) {\n            return this.options[key];\n        },\n        /**\n         * 销毁编辑器实例，使用textarea代替\n         * @method destroy\n         * @example\n         * ```javascript\n         * editor.destroy();\n         * ```\n         */\n        destroy: function () {\n            var me = this;\n            me.fireEvent(\"destroy\");\n            var container = me.container.parentNode;\n            var textarea = me.textarea;\n            if (!textarea) {\n                textarea = document.createElement(\"textarea\");\n                container.parentNode.insertBefore(textarea, container);\n            } else {\n                textarea.style.display = \"\";\n            }\n\n            textarea.style.width = me.iframe.offsetWidth + \"px\";\n            textarea.style.height = me.iframe.offsetHeight + \"px\";\n            textarea.value = me.getContent();\n            textarea.id = me.key;\n            container.innerHTML = \"\";\n            domUtils.remove(container);\n            if(me.textareaAutoCreate && textarea===me.textareaAutoCreate){\n                me.textareaAutoCreate.remove();\n            }\n            var key = me.key;\n            //trace:2004\n            for (var p in me) {\n                if (me.hasOwnProperty(p)) {\n                    delete this[p];\n                }\n            }\n            UE.delEditor(key);\n        },\n\n        /**\n         * 渲染编辑器的DOM到指定容器\n         * @method render\n         * @param { String } containerId 指定一个容器ID\n         * @remind 执行该方法,会触发ready事件\n         * @warning 必须且只能调用一次\n         */\n\n        /**\n         * 渲染编辑器的DOM到指定容器\n         * @method render\n         * @param { Element } containerDom 直接指定容器对象\n         * @remind 执行该方法,会触发ready事件\n         * @warning 必须且只能调用一次\n         */\n        render: function (container) {\n            var me = this,\n                options = me.options,\n                getStyleValue = function (attr) {\n                    return parseInt(domUtils.getComputedStyle(container, attr));\n                };\n            if (utils.isString(container)) {\n                container = document.getElementById(container);\n            }\n            if (container) {\n                if (options.initialFrameWidth) {\n                    options.minFrameWidth = options.initialFrameWidth;\n                } else {\n                    options.minFrameWidth = options.initialFrameWidth =\n                        container.offsetWidth;\n                }\n                if (options.initialFrameHeight) {\n                    options.minFrameHeight = options.initialFrameHeight;\n                } else {\n                    options.initialFrameHeight = options.minFrameHeight =\n                        container.offsetHeight;\n                }\n\n                container.style.width = /%$/.test(options.initialFrameWidth)\n                    ? \"100%\"\n                    : options.initialFrameWidth -\n                    getStyleValue(\"padding-left\") -\n                    getStyleValue(\"padding-right\") +\n                    \"px\";\n                container.style.height = /%$/.test(options.initialFrameHeight)\n                    ? \"100%\"\n                    : options.initialFrameHeight -\n                    getStyleValue(\"padding-top\") -\n                    getStyleValue(\"padding-bottom\") +\n                    \"px\";\n\n                container.style.zIndex = options.zIndex;\n                var additionCssHtml = [];\n                for (var i in options.iframeCssUrlsAddition) {\n                    additionCssHtml.push(\"<link rel='stylesheet' type='text/css' href='\" + utils.unhtml(options.iframeCssUrlsAddition[i]) + \"'/>\")\n                }\n                var additionStylesHtml = [];\n                for (var i in options.iframeCssStylesAddition) {\n                    additionStylesHtml.push(\"<style type='text/css'>\" + options.iframeCssStylesAddition[i] + \"</style>\")\n                }\n                var html =\n                    (ie && browser.version < 9 ? \"\" : \"<!DOCTYPE html>\") +\n                    \"<html xmlns='http://www.w3.org/1999/xhtml' class='view' >\" +\n                    \"<head>\" +\n                    \"<style type='text/css'>\" +\n                    //设置四周的留边\n                    \".view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\\n\" +\n                    //设置默认字体和字号\n                    //font-family不能呢随便改，在safari下fillchar会有解析问题\n                    \"body{margin:8px;font-family:sans-serif;font-size:16px;}\" +\n                    //设置段落间距\n                    \"p{margin:5px 0;}</style>\" +\n                    (options.iframeCssUrl\n                        ? \"<link rel='stylesheet' type='text/css' href='\" +\n                        utils.unhtml(options.iframeCssUrl) +\n                        \"'/>\"\n                        : \"\") +\n                    (options.initialStyle\n                        ? \"<style>\" + options.initialStyle + \"</style>\"\n                        : \"\") +\n                    additionCssHtml.join(\"\") +\n                    additionStylesHtml.join(\"\") +\n                    \"</head>\" +\n                    \"<body class='view' ></body>\" +\n                    \"<script type='text/javascript' \" +\n                    (ie ? \"defer='defer'\" : \"\") +\n                    \" id='_initialScript'>\" +\n                    \"setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant\" +\n                    me.uid +\n                    \"'];editor._setup(document);},0);\" +\n                    \"var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);\" +\n                    \"</script>\" +\n                    (options.iframeJsUrl\n                        ? \"<script type='text/javascript' src='\" +\n                        utils.unhtml(options.iframeJsUrl) +\n                        \"'></script>\"\n                        : \"\") +\n                    \"</html>\";\n\n                container.appendChild(\n                    domUtils.createElement(document, \"iframe\", {\n                        id: \"ueditor_\" + me.uid,\n                        width: \"100%\",\n                        height: \"100%\",\n                        frameborder: \"0\",\n                        //先注释掉了，加的原因忘记了，但开启会直接导致全屏模式下内容多时不会出现滚动条\n                        //                    scrolling :'no',\n                        src:\n                            \"javascript:void(function(){document.open();\" +\n                            (options.customDomain && document.domain != location.hostname\n                                ? 'document.domain=\"' + document.domain + '\";'\n                                : \"\") +\n                            'document.write(\"' +\n                            html +\n                            '\");document.close();}())'\n                    })\n                );\n                container.style.overflow = \"hidden\";\n                //解决如果是给定的百分比，会导致高度算不对的问题\n                setTimeout(function () {\n                    if (/%$/.test(options.initialFrameWidth)) {\n                        options.minFrameWidth = options.initialFrameWidth =\n                            container.offsetWidth;\n                        //如果这里给定宽度，会导致ie在拖动窗口大小时，编辑区域不随着变化\n                        //                        container.style.width = options.initialFrameWidth + 'px';\n                    }\n                    if (/%$/.test(options.initialFrameHeight)) {\n                        options.minFrameHeight = options.initialFrameHeight =\n                            container.offsetHeight;\n                        container.style.height = options.initialFrameHeight + \"px\";\n                    }\n                });\n            }\n        },\n\n        /**\n         * 编辑器初始化\n         * @method _setup\n         * @private\n         * @param { Element } doc 编辑器Iframe中的文档对象\n         */\n        _setup: function (doc) {\n            var me = this,\n                options = me.options;\n            if (ie) {\n                doc.body.disabled = true;\n                doc.body.contentEditable = true;\n                doc.body.disabled = false;\n            } else {\n                doc.body.contentEditable = true;\n            }\n            doc.body.spellcheck = false;\n            me.document = doc;\n            me.window = doc.defaultView || doc.parentWindow;\n            me.iframe = me.window.frameElement;\n            me.body = doc.body;\n            me.selection = new dom.Selection(doc);\n            //gecko初始化就能得到range,无法判断isFocus了\n            var geckoSel;\n            if (browser.gecko && (geckoSel = this.selection.getNative())) {\n                geckoSel.removeAllRanges();\n            }\n            this._initEvents();\n            //为form提交提供一个隐藏的textarea\n            for (\n                var form = this.iframe.parentNode;\n                !domUtils.isBody(form);\n                form = form.parentNode\n            ) {\n                if (form.tagName === \"FORM\") {\n                    me.form = form;\n                    if (me.options.autoSyncData) {\n                        domUtils.on(me.window, \"blur\", function () {\n                            setValue(form, me);\n                        });\n                        domUtils.on(form, \"submit\", function () {\n                            me.fireEvent(\"beforesubmit\");\n                        });\n                    } else {\n                        domUtils.on(form, \"submit\", function () {\n                            setValue(this, me);\n                            me.fireEvent(\"beforesubmit\");\n                        });\n                    }\n                    break;\n                }\n            }\n            if (options.initialContent) {\n                if (options.autoClearinitialContent) {\n                    var oldExecCommand = me.execCommand;\n                    me.execCommand = function () {\n                        me.fireEvent(\"firstBeforeExecCommand\");\n                        return oldExecCommand.apply(me, arguments);\n                    };\n                    this._setDefaultContent(options.initialContent);\n                } else this.setContent(options.initialContent, false, true);\n            }\n\n            //编辑器不能为空内容\n\n            if (domUtils.isEmptyNode(me.body)) {\n                me.body.innerHTML = \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\";\n            }\n            //如果要求focus, 就把光标定位到内容开始\n            if (options.focus) {\n                setTimeout(function () {\n                    me.focus(me.options.focusInEnd);\n                    //如果自动清除开着，就不需要做selectionchange;\n                    !me.options.autoClearinitialContent && me._selectionChange();\n                }, 0);\n            }\n            if (!me.container) {\n                me.container = this.iframe.parentNode;\n            }\n            if (options.fullscreen && me.ui) {\n                me.ui.setFullScreen(true);\n            }\n\n            try {\n                me.document.execCommand(\"2D-position\", false, false);\n            } catch (e) {\n            }\n            try {\n                me.document.execCommand(\"enableInlineTableEditing\", false, false);\n            } catch (e) {\n            }\n            try {\n                me.document.execCommand(\"enableObjectResizing\", false, false);\n            } catch (e) {\n            }\n\n            //挂接快捷键\n            me._bindshortcutKeys();\n            me.isReady = 1;\n            me.fireEvent(\"ready\");\n            options.onready && options.onready.call(me);\n            if (!browser.ie9below) {\n                domUtils.on(me.window, [\"blur\", \"focus\"], function (e) {\n                    //chrome下会出现alt+tab切换时，导致选区位置不对\n                    if (e.type == \"blur\") {\n                        me._bakRange = me.selection.getRange();\n                        try {\n                            me._bakNativeRange = me.selection.getNative().getRangeAt(0);\n                            me.selection.getNative().removeAllRanges();\n                        } catch (e) {\n                            me._bakNativeRange = null;\n                        }\n                    } else {\n                        try {\n                            me._bakRange && me._bakRange.select();\n                        } catch (e) {\n                        }\n                    }\n                });\n            }\n            //trace:1518 ff3.6body不够寛，会导致点击空白处无法获得焦点\n            if (browser.gecko && browser.version <= 10902) {\n                //修复ff3.6初始化进来，不能点击获得焦点\n                me.body.contentEditable = false;\n                setTimeout(function () {\n                    me.body.contentEditable = true;\n                }, 100);\n                setInterval(function () {\n                    me.body.style.height = me.iframe.offsetHeight - 20 + \"px\";\n                }, 100);\n            }\n\n            !options.isShow && me.setHide();\n            options.readonly && me.setDisabled();\n        },\n\n        /**\n         * 同步数据到编辑器所在的form\n         * 从编辑器的容器节点向上查找form元素，若找到，就同步编辑内容到找到的form里，为提交数据做准备，主要用于是手动提交的情况\n         * 后台取得数据的键值，使用你容器上的name属性，如果没有就使用参数里的textarea项\n         * @method sync\n         * @example\n         * ```javascript\n         * editor.sync();\n         * form.sumbit(); //form变量已经指向了form元素\n         * ```\n         */\n\n        /**\n         * 根据传入的formId，在页面上查找要同步数据的表单，若找到，就同步编辑内容到找到的form里，为提交数据做准备\n         * 后台取得数据的键值，该键值默认使用给定的编辑器容器的name属性，如果没有name属性则使用参数项里给定的“textarea”项\n         * @method sync\n         * @param { String } formID 指定一个要同步数据的form的id,编辑器的数据会同步到你指定form下\n         */\n        sync: function (formId) {\n            var me = this,\n                form = formId\n                    ? document.getElementById(formId)\n                    : domUtils.findParent(\n                        me.iframe.parentNode,\n                        function (node) {\n                            return node.tagName === \"FORM\";\n                        },\n                        true\n                    );\n            form && setValue(form, me);\n        },\n\n        /**\n         * 手动触发更新按钮栏状态\n         */\n        syncCommandState: function () {\n            this.fireEvent(\"selectionchange\");\n        },\n\n        /**\n         * 设置编辑器宽度\n         * @param width\n         */\n        setWidth: function (width) {\n            if (width !== parseInt(this.iframe.parentNode.parentNode.style.width)) {\n                this.iframe.parentNode.parentNode.style.width = width + \"px\";\n            }\n        },\n\n        /**\n         * 设置编辑器高度\n         * @method setHeight\n         * @remind 当配置项autoHeightEnabled为真时,该方法无效\n         * @param { Number } number 设置的高度值，纯数值，不带单位\n         * @example\n         * ```javascript\n         * editor.setHeight(number);\n         * ```\n         */\n        setHeight: function (height, notSetHeight) {\n            if (height !== parseInt(this.iframe.parentNode.style.height)) {\n                this.iframe.parentNode.style.height = height + \"px\";\n            }\n            !notSetHeight &&\n            (this.options.minFrameHeight = this.options.initialFrameHeight = height);\n            this.body.style.height = height + \"px\";\n            !notSetHeight && this.trigger(\"setHeight\");\n        },\n\n        /**\n         * 为编辑器的编辑命令提供快捷键\n         * 这个接口是为插件扩展提供的接口,主要是为新添加的插件，如果需要添加快捷键，所提供的接口\n         * @method addshortcutkey\n         * @param { Object } keyset 命令名和快捷键键值对对象，多个按钮的快捷键用“＋”分隔\n         * @example\n         * ```javascript\n         * editor.addshortcutkey({\n         *     \"Bold\" : \"ctrl+66\",//^B\n         *     \"Italic\" : \"ctrl+73\", //^I\n         * });\n         * ```\n         */\n        /**\n         * 这个接口是为插件扩展提供的接口,主要是为新添加的插件，如果需要添加快捷键，所提供的接口\n         * @method addshortcutkey\n         * @param { String } cmd 触发快捷键时，响应的命令\n         * @param { String } keys 快捷键的字符串，多个按钮用“＋”分隔\n         * @example\n         * ```javascript\n         * editor.addshortcutkey(\"Underline\", \"ctrl+85\"); //^U\n         * ```\n         */\n        addshortcutkey: function (cmd, keys) {\n            var obj = {};\n            if (keys) {\n                obj[cmd] = keys;\n            } else {\n                obj = cmd;\n            }\n            utils.extend(this.shortcutkeys, obj);\n        },\n\n        /**\n         * 对编辑器设置keydown事件监听，绑定快捷键和命令，当快捷键组合触发成功，会响应对应的命令\n         * @method _bindshortcutKeys\n         * @private\n         */\n        _bindshortcutKeys: function () {\n            var me = this,\n                shortcutkeys = this.shortcutkeys;\n            me.addListener(\"keydown\", function (type, e) {\n                var keyCode = e.keyCode || e.which;\n                // 快捷键\n                for (var i in shortcutkeys) {\n                    var tmp = shortcutkeys[i].split(\",\");\n                    for (var t = 0, ti; (ti = tmp[t++]);) {\n                        ti = ti.split(\":\");\n                        var key = ti[0],\n                            param = ti[1];\n                        if (\n                            /^(ctrl)(\\+shift)?\\+(\\d+)$/.test(key.toLowerCase()) ||\n                            /^(\\d+)$/.test(key)\n                        ) {\n                            if (\n                                ((RegExp.$1 == \"ctrl\" ? e.ctrlKey || e.metaKey : 0) &&\n                                    (RegExp.$2 != \"\" ? e[RegExp.$2.slice(1) + \"Key\"] : 1) &&\n                                    keyCode == RegExp.$3) ||\n                                keyCode == RegExp.$1\n                            ) {\n                                if (me.queryCommandState(i, param) != -1)\n                                    me.execCommand(i, param);\n                                domUtils.preventDefault(e);\n                            }\n                        }\n                    }\n                }\n                // 其他一些特殊处理\n                var code = e.code\n                // 如视频之类的组建，不能删除\n                if (code) {\n                    if (code === 'Backspace') {\n                        if (e.target) {\n                            if (e.target.tagName === 'VIDEO') {\n                                e.target.remove()\n                            }\n                        }\n                    }\n                }\n            });\n        },\n\n        /**\n         * 获取编辑器的内容\n         * @method getContent\n         * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容\n         * @return { String } 编辑器的内容字符串, 如果编辑器的内容为空，或者是空的标签内容（如:”&lt;p&gt;&lt;br/&gt;&lt;/p&gt;“）， 则返回空字符串\n         * @example\n         * ```javascript\n         * //编辑器html内容:<p>1<strong>2<em>34</em>5</strong>6</p>\n         * var content = editor.getContent(); //返回值:<p>1<strong>2<em>34</em>5</strong>6</p>\n         * ```\n         */\n\n        /**\n         * 获取编辑器的内容。 可以通过参数定义编辑器内置的判空规则\n         * @method getContent\n         * @param { Function } fn 自定的判空规则， 要求该方法返回一个boolean类型的值，\n         *                      代表当前编辑器的内容是否空，\n         *                      如果返回true， 则该方法将直接返回空字符串；如果返回false，则编辑器将返回\n         *                      经过内置过滤规则处理后的内容。\n         * @remind 该方法在处理包含有初始化内容的时候能起到很好的作用。\n         * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容\n         * @return { String } 编辑器的内容字符串\n         * @example\n         * ```javascript\n         * // editor 是一个编辑器的实例\n         * var content = editor.getContent( function ( editor ) {\n         *      return editor.body.innerHTML === '欢迎使用UEditor'; //返回空字符串\n         * } );\n         * ```\n         */\n        getContent: function (cmd, fn, notSetCursor, ignoreBlank, formatter) {\n            var me = this;\n            if (cmd && utils.isFunction(cmd)) {\n                fn = cmd;\n                cmd = \"\";\n            }\n            if (fn ? !fn() : !this.hasContents()) {\n                return \"\";\n            }\n            me.fireEvent(\"beforegetcontent\");\n            var root = UE.htmlparser(me.body.innerHTML, ignoreBlank);\n            me.filterOutputRule(root);\n            me.fireEvent(\"aftergetcontent\", cmd, root);\n            return root.toHtml(formatter);\n        },\n\n        /**\n         * 取得完整的html代码，可以直接显示成完整的html文档\n         * @method getAllHtml\n         * @return { String } 编辑器的内容html文档字符串\n         * @eaxmple\n         * ```javascript\n         * editor.getAllHtml(); //返回格式大致是: <html><head>...</head><body>...</body></html>\n         * ```\n         */\n        getAllHtml: function () {\n            var me = this,\n                headHtml = [],\n                html = \"\";\n            me.fireEvent(\"getAllHtml\", headHtml);\n            if (browser.ie && browser.version > 8) {\n                var headHtmlForIE9 = \"\";\n                utils.each(me.document.styleSheets, function (si) {\n                    headHtmlForIE9 += si.href\n                        ? '<link rel=\"stylesheet\" type=\"text/css\" href=\"' + si.href + '\" />'\n                        : \"<style>\" + si.cssText + \"</style>\";\n                });\n                utils.each(me.document.getElementsByTagName(\"script\"), function (si) {\n                    headHtmlForIE9 += si.outerHTML;\n                });\n            }\n            return (\n                \"<html><head>\" +\n                (me.options.charset\n                    ? '<meta http-equiv=\"Content-Type\" content=\"text/html; charset=' +\n                    me.options.charset +\n                    '\"/>'\n                    : \"\") +\n                (headHtmlForIE9 ||\n                    me.document.getElementsByTagName(\"head\")[0].innerHTML) +\n                headHtml.join(\"\\n\") +\n                \"</head>\" +\n                \"<body \" +\n                (ie && browser.version < 9 ? 'class=\"view\"' : \"\") +\n                \">\" +\n                me.getContent(null, null, true) +\n                \"</body></html>\"\n            );\n        },\n\n        /**\n         * 得到编辑器的纯文本内容，但会保留段落格式\n         * @method getPlainTxt\n         * @return { String } 编辑器带段落格式的纯文本内容字符串\n         * @example\n         * ```javascript\n         * //编辑器html内容:<p><strong>1</strong></p><p><strong>2</strong></p>\n         * console.log(editor.getPlainTxt()); //输出:\"1\\n2\\n\n         * ```\n         */\n        getPlainTxt: function () {\n            var reg = new RegExp(domUtils.fillChar, \"g\"),\n                html = this.body.innerHTML.replace(/[\\n\\r]/g, \"\"); //ie要先去了\\n在处理\n            html = html\n                .replace(/<(p|div)[^>]*>(<br\\/?>|&nbsp;)<\\/\\1>/gi, \"\\n\")\n                .replace(/<br\\/?>/gi, \"\\n\")\n                .replace(/<[^>/]+>/g, \"\")\n                .replace(/(\\n)?<\\/([^>]+)>/g, function (a, b, c) {\n                    return dtd.$block[c] ? \"\\n\" : b ? b : \"\";\n                });\n            //取出来的空格会有c2a0会变成乱码，处理这种情况\\u00a0\n            return html\n                .replace(reg, \"\")\n                .replace(/\\u00a0/g, \" \")\n                .replace(/&nbsp;/g, \" \");\n        },\n\n        /**\n         * 获取编辑器中的纯文本内容,没有段落格式\n         * @method getContentTxt\n         * @return { String } 编辑器不带段落格式的纯文本内容字符串\n         * @example\n         * ```javascript\n         * //编辑器html内容:<p><strong>1</strong></p><p><strong>2</strong></p>\n         * console.log(editor.getPlainTxt()); //输出:\"12\n         * ```\n         */\n        getContentTxt: function () {\n            var reg = new RegExp(domUtils.fillChar, \"g\");\n            //取出来的空格会有c2a0会变成乱码，处理这种情况\\u00a0\n            return this.body[browser.ie ? \"innerText\" : \"textContent\"]\n                .replace(reg, \"\")\n                .replace(/\\u00a0/g, \" \");\n        },\n\n        /**\n         * 设置编辑器的内容，可修改编辑器当前的html内容\n         * @method setContent\n         * @warning 通过该方法插入的内容，是经过编辑器内置的过滤规则进行过滤后得到的内容\n         * @warning 该方法会触发selectionchange事件\n         * @param { String } html 要插入的html内容\n         * @example\n         * ```javascript\n         * editor.getContent('<p>test</p>');\n         * ```\n         */\n\n        /**\n         * 设置编辑器的内容，可修改编辑器当前的html内容\n         * @method setContent\n         * @warning 通过该方法插入的内容，是经过编辑器内置的过滤规则进行过滤后得到的内容\n         * @warning 该方法会触发selectionchange事件\n         * @param { String } html 要插入的html内容\n         * @param { Boolean } isAppendTo 若传入true，不清空原来的内容，在最后插入内容，否则，清空内容再插入\n         * @param { Boolean } notFireSelectionchange 是否阻止触发选区变化，true为阻止，false为不阻止\n         * @example\n         * ```javascript\n         * //假设设置前的编辑器内容是 <p>old text</p>\n         * editor.setContent('<p>new text</p>', true); //插入的结果是<p>old text</p><p>new text</p>\n         * ```\n         */\n        setContent: function (html, isAppendTo, notFireSelectionchange) {\n            var me = this;\n\n            me.fireEvent(\"beforesetcontent\", html);\n            var root = UE.htmlparser(html);\n            me.filterInputRule(root);\n            html = root.toHtml();\n\n            me.body.innerHTML = (isAppendTo ? me.body.innerHTML : \"\") + html;\n\n            function isCdataDiv(node) {\n                return node.tagName == \"DIV\" && node.getAttribute(\"cdata_tag\");\n            }\n\n            //给文本或者inline节点套p标签\n            if (me.options.enterTag == \"p\") {\n                var child = this.body.firstChild,\n                    tmpNode;\n                if (\n                    !child ||\n                    (child.nodeType == 1 &&\n                        (dtd.$cdata[child.tagName] ||\n                            isCdataDiv(child) ||\n                            domUtils.isCustomeNode(child)) &&\n                        child === this.body.lastChild)\n                ) {\n                    this.body.innerHTML =\n                        \"<p>\" +\n                        (browser.ie ? \"&nbsp;\" : \"<br/>\") +\n                        \"</p>\" +\n                        this.body.innerHTML;\n                } else {\n                    var p = me.document.createElement(\"p\");\n                    while (child) {\n                        while (\n                            child &&\n                            (child.nodeType == 3 ||\n                                (child.nodeType == 1 &&\n                                    dtd.p[child.tagName] &&\n                                    !dtd.$cdata[child.tagName]))\n                            ) {\n                            tmpNode = child.nextSibling;\n                            p.appendChild(child);\n                            child = tmpNode;\n                        }\n                        if (p.firstChild) {\n                            if (!child) {\n                                me.body.appendChild(p);\n                                break;\n                            } else {\n                                child.parentNode.insertBefore(p, child);\n                                p = me.document.createElement(\"p\");\n                            }\n                        }\n                        child = child.nextSibling;\n                    }\n                }\n            }\n            me.fireEvent(\"aftersetcontent\");\n            me.fireEvent(\"contentchange\");\n\n            !notFireSelectionchange && me._selectionChange();\n            //清除保存的选区\n            me._bakRange = me._bakIERange = me._bakNativeRange = null;\n            //trace:1742 setContent后gecko能得到焦点问题\n            var geckoSel;\n            if (browser.gecko && (geckoSel = this.selection.getNative())) {\n                geckoSel.removeAllRanges();\n            }\n            if (me.options.autoSyncData) {\n                me.form && setValue(me.form, me);\n            }\n        },\n\n        /**\n         * 让编辑器获得焦点，默认focus到编辑器头部\n         * @method focus\n         * @example\n         * ```javascript\n         * editor.focus()\n         * ```\n         */\n\n        /**\n         * 让编辑器获得焦点，toEnd确定focus位置\n         * @method focus\n         * @param { Boolean } toEnd 默认focus到编辑器头部，toEnd为true时focus到内容尾部\n         * @example\n         * ```javascript\n         * editor.focus(true)\n         * ```\n         */\n        focus: function (toEnd) {\n            try {\n                var me = this,\n                    rng = me.selection.getRange();\n                if (toEnd) {\n                    var node = me.body.lastChild;\n                    if (node && node.nodeType == 1 && !dtd.$empty[node.tagName]) {\n                        if (domUtils.isEmptyBlock(node)) {\n                            rng.setStartAtFirst(node);\n                        } else {\n                            rng.setStartAtLast(node);\n                        }\n                        rng.collapse(true);\n                    }\n                    rng.setCursor(true);\n                } else {\n                    if (\n                        !rng.collapsed &&\n                        domUtils.isBody(rng.startContainer) &&\n                        rng.startOffset == 0\n                    ) {\n                        var node = me.body.firstChild;\n                        if (node && node.nodeType == 1 && !dtd.$empty[node.tagName]) {\n                            rng.setStartAtFirst(node).collapse(true);\n                        }\n                    }\n\n                    rng.select(true);\n                }\n                this.fireEvent(\"focus selectionchange\");\n            } catch (e) {\n            }\n        },\n        isFocus: function () {\n            return this.selection.isFocus();\n        },\n        blur: function () {\n            var sel = this.selection.getNative();\n            if (sel.empty && browser.ie) {\n                var nativeRng = document.body.createTextRange();\n                nativeRng.moveToElementText(document.body);\n                nativeRng.collapse(true);\n                nativeRng.select();\n                sel.empty();\n            } else {\n                sel.removeAllRanges();\n            }\n\n            //this.fireEvent('blur selectionchange');\n        },\n        /**\n         * 初始化UE事件及部分事件代理\n         * @method _initEvents\n         * @private\n         */\n        _initEvents: function () {\n            var me = this,\n                doc = me.document,\n                win = me.window;\n            me._proxyDomEvent = utils.bind(me._proxyDomEvent, me);\n            domUtils.on(\n                doc,\n                [\n                    \"click\",\n                    \"contextmenu\",\n                    \"mousedown\",\n                    \"keydown\",\n                    \"keyup\",\n                    \"keypress\",\n                    \"mouseup\",\n                    \"mouseover\",\n                    \"mouseout\",\n                    \"selectstart\"\n                ],\n                me._proxyDomEvent\n            );\n            domUtils.on(win, [\"focus\", \"blur\"], me._proxyDomEvent);\n            domUtils.on(me.body, \"drop\", function (e) {\n                //阻止ff下默认的弹出新页面打开图片\n                if (browser.gecko && e.stopPropagation) {\n                    e.stopPropagation();\n                }\n                me.fireEvent(\"contentchange\");\n            });\n            // 当内容最末尾为非字符时，比较难以在最后插入字符，所以在点击时，自动添加一个空的p标签\n            domUtils.on(me.body, \"dblclick\", function (e) {\n                try {\n                    var node = me.body.lastChild;\n                    if (!node) {\n                        return;\n                    }\n                    var rect = node.getBoundingClientRect();\n                    if (e.clientY > rect.top + rect.height) {\n                        var p = document.createElement('p');\n                        p.innerHTML = '<br />';\n                        me.body.appendChild(p);\n                        setTimeout(function () {\n                            me.focus(true);\n                        }, 100);\n                    }\n                } catch (e) {\n                    console.error('auto insert p at end', e);\n                }\n            });\n            domUtils.on(doc, [\"mouseup\", \"keydown\"], function (evt) {\n                //特殊键不触发selectionchange\n                if (\n                    evt.type === \"keydown\" &&\n                    (evt.ctrlKey || evt.metaKey || evt.shiftKey || evt.altKey)\n                ) {\n                    return;\n                }\n                if (evt.button === 2) return;\n                me._selectionChange(250, evt);\n            });\n        },\n        /**\n         * 触发事件代理\n         * @method _proxyDomEvent\n         * @private\n         * @return { * } fireEvent的返回值\n         * @see UE.EventBase:fireEvent(String)\n         */\n        _proxyDomEvent: function (evt) {\n            if (\n                this.fireEvent(\"before\" + evt.type.replace(/^on/, \"\").toLowerCase()) ===\n                false\n            ) {\n                return false;\n            }\n            if (this.fireEvent(evt.type.replace(/^on/, \"\"), evt) === false) {\n                return false;\n            }\n            return this.fireEvent(\n                \"after\" + evt.type.replace(/^on/, \"\").toLowerCase()\n            );\n        },\n        /**\n         * 变化选区\n         * @method _selectionChange\n         * @private\n         */\n        _selectionChange: function (delay, evt) {\n            var me = this;\n            //有光标才做selectionchange 为了解决未focus时点击source不能触发更改工具栏状态的问题（source命令notNeedUndo=1）\n            //            if ( !me.selection.isFocus() ){\n            //                return;\n            //            }\n\n            var hackForMouseUp = false;\n            var mouseX, mouseY;\n            if (browser.ie && browser.version < 9 && evt && evt.type == \"mouseup\") {\n                var range = this.selection.getRange();\n                if (!range.collapsed) {\n                    hackForMouseUp = true;\n                    mouseX = evt.clientX;\n                    mouseY = evt.clientY;\n                }\n            }\n            clearTimeout(_selectionChangeTimer);\n            _selectionChangeTimer = setTimeout(function () {\n                if (!me.selection || !me.selection.getNative()) {\n                    return;\n                }\n                //修复一个IE下的bug: 鼠标点击一段已选择的文本中间时，可能在mouseup后的一段时间内取到的range是在selection的type为None下的错误值.\n                //IE下如果用户是拖拽一段已选择文本，则不会触发mouseup事件，所以这里的特殊处理不会对其有影响\n                var ieRange;\n                if (hackForMouseUp && me.selection.getNative().type == \"None\") {\n                    ieRange = me.document.body.createTextRange();\n                    try {\n                        ieRange.moveToPoint(mouseX, mouseY);\n                    } catch (ex) {\n                        ieRange = null;\n                    }\n                }\n                var bakGetIERange;\n                if (ieRange) {\n                    bakGetIERange = me.selection.getIERange;\n                    me.selection.getIERange = function () {\n                        return ieRange;\n                    };\n                }\n                me.selection.cache();\n                if (bakGetIERange) {\n                    me.selection.getIERange = bakGetIERange;\n                }\n                if (me.selection._cachedRange && me.selection._cachedStartElement) {\n                    me.fireEvent(\"beforeselectionchange\");\n                    // 第二个参数causeByUi为true代表由用户交互造成的selectionchange.\n                    me.fireEvent(\"selectionchange\", !!evt);\n                    me.fireEvent(\"afterselectionchange\");\n                    me.selection.clear();\n                }\n            }, delay || 50);\n        },\n\n        /**\n         * 执行编辑命令\n         * @method _callCmdFn\n         * @private\n         * @param { String } fnName 函数名称\n         * @param { * } args 传给命令函数的参数\n         * @return { * } 返回命令函数运行的返回值\n         */\n        _callCmdFn: function (fnName, args) {\n            var cmdName = args[0].toLowerCase(),\n                cmd,\n                cmdFn;\n            cmd = this.commands[cmdName] || UE.commands[cmdName];\n            cmdFn = cmd && cmd[fnName];\n            //没有querycommandstate或者没有command的都默认返回0\n            if ((!cmd || !cmdFn) && fnName == \"queryCommandState\") {\n                return 0;\n            } else if (cmdFn) {\n                return cmdFn.apply(this, args);\n            }\n        },\n\n        /**\n         * 执行编辑命令cmdName，完成富文本编辑效果\n         * @method execCommand\n         * @param { String } cmdName 需要执行的命令\n         * @remind 具体命令的使用请参考<a href=\"#COMMAND.LIST\">命令列表</a>\n         * @return { * } 返回命令函数运行的返回值\n         * @example\n         * ```javascript\n         * editor.execCommand(cmdName);\n         * ```\n         */\n        execCommand: function (cmdName) {\n            cmdName = cmdName.toLowerCase();\n            var me = this,\n                result,\n                cmd = me.commands[cmdName] || UE.commands[cmdName];\n            if (!cmd || !cmd.execCommand) {\n                return null;\n            }\n            if (!cmd.notNeedUndo && !me.__hasEnterExecCommand) {\n                me.__hasEnterExecCommand = true;\n                if (me.queryCommandState.apply(me, arguments) != -1) {\n                    me.fireEvent(\"saveScene\");\n                    me.fireEvent.apply(\n                        me,\n                        [\"beforeexeccommand\", cmdName].concat(arguments)\n                    );\n                    result = this._callCmdFn(\"execCommand\", arguments);\n                    //保存场景时，做了内容对比，再看是否进行contentchange触发，这里多触发了一次，去掉\n                    //                    (!cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange');\n                    me.fireEvent.apply(\n                        me,\n                        [\"afterexeccommand\", cmdName].concat(arguments)\n                    );\n                    me.fireEvent(\"saveScene\");\n                }\n                me.__hasEnterExecCommand = false;\n            } else {\n                result = this._callCmdFn(\"execCommand\", arguments);\n                !me.__hasEnterExecCommand &&\n                !cmd.ignoreContentChange &&\n                !me._ignoreContentChange &&\n                me.fireEvent(\"contentchange\");\n            }\n            !me.__hasEnterExecCommand &&\n            !cmd.ignoreContentChange &&\n            !me._ignoreContentChange &&\n            me._selectionChange();\n            return result;\n        },\n\n        /**\n         * 根据传入的command命令，查选编辑器当前的选区，返回命令的状态\n         * @method  queryCommandState\n         * @param { String } cmdName 需要查询的命令名称\n         * @remind 具体命令的使用请参考<a href=\"#COMMAND.LIST\">命令列表</a>\n         * @return { Number } number 返回放前命令的状态，返回值三种情况：(-1|0|1)\n         * @example\n         * ```javascript\n         * editor.queryCommandState(cmdName)  => (-1|0|1)\n         * ```\n         * @see COMMAND.LIST\n         */\n        queryCommandState: function (cmdName) {\n            return this._callCmdFn(\"queryCommandState\", arguments);\n        },\n\n        /**\n         * 根据传入的command命令，查选编辑器当前的选区，根据命令返回相关的值\n         * @method queryCommandValue\n         * @param { String } cmdName 需要查询的命令名称\n         * @remind 具体命令的使用请参考<a href=\"#COMMAND.LIST\">命令列表</a>\n         * @remind 只有部分插件有此方法\n         * @return { * } 返回每个命令特定的当前状态值\n         * @grammar editor.queryCommandValue(cmdName)  =>  {*}\n         * @see COMMAND.LIST\n         */\n        queryCommandValue: function (cmdName) {\n            return this._callCmdFn(\"queryCommandValue\", arguments);\n        },\n\n        /**\n         * 检查编辑区域中是否有内容\n         * @method  hasContents\n         * @remind 默认有文本内容，或者有以下节点都不认为是空\n         * table,ul,ol,dl,iframe,area,base,col,hr,img,embed,input,link,meta,param\n         * @return { Boolean } 检查有内容返回true，否则返回false\n         * @example\n         * ```javascript\n         * editor.hasContents()\n         * ```\n         */\n\n        /**\n         * 检查编辑区域中是否有内容，若包含参数tags中的节点类型，直接返回true\n         * @method  hasContents\n         * @param { Array } tags 传入数组判断时用到的节点类型\n         * @return { Boolean } 若文档中包含tags数组里对应的tag，返回true，否则返回false\n         * @example\n         * ```javascript\n         * editor.hasContents(['span']);\n         * ```\n         */\n        hasContents: function (tags) {\n            if (tags) {\n                for (var i = 0, ci; (ci = tags[i++]);) {\n                    if (this.document.getElementsByTagName(ci).length > 0) {\n                        return true;\n                    }\n                }\n            }\n            if (!domUtils.isEmptyBlock(this.body)) {\n                return true;\n            }\n            // 随时添加,定义的特殊标签如果存在，不能认为是空\n            tags = [\"div\"];\n            for (i = 0; (ci = tags[i++]);) {\n                var nodes = domUtils.getElementsByTagName(this.document, ci);\n                for (var n = 0, cn; (cn = nodes[n++]);) {\n                    if (domUtils.isCustomeNode(cn)) {\n                        return true;\n                    }\n                }\n            }\n            // 部分如媒体标签，不能认为为空\n            tags = [\"video\", \"iframe\"]\n            for (i = 0; (ci = tags[i++]);) {\n                var nodes = domUtils.getElementsByTagName(this.document, ci);\n                for (var n = 0, cn; (cn = nodes[n++]);) {\n                    return true;\n                }\n            }\n            return false;\n        },\n\n        /**\n         * 重置编辑器，可用来做多个tab 使用同一个编辑器实例\n         * @method  reset\n         * @remind 此方法会清空编辑器内容，清空回退列表，会触发reset事件\n         * @example\n         * ```javascript\n         * editor.reset()\n         * ```\n         */\n        reset: function () {\n            this.clear();\n            this.fireEvent(\"reset\");\n        },\n\n        /**\n         * 清空编辑器内容\n         * @method clear\n         * @remind 此方法会清空编辑器内容\n         * @example\n         * ```javascript\n         * editor.clear()\n         * ```\n         */\n        clear: function () {\n            this.setContent(\"\");\n        },\n\n        /**\n         * 设置当前编辑区域可以编辑\n         * @method setEnabled\n         * @example\n         * ```javascript\n         * editor.setEnabled()\n         * ```\n         */\n        setEnabled: function () {\n            var me = this,\n                range;\n            if (me.body.contentEditable === \"false\") {\n                me.body.contentEditable = true;\n                range = me.selection.getRange();\n                //有可能内容丢失了\n                try {\n                    range.moveToBookmark(me.lastBk);\n                    delete me.lastBk;\n                } catch (e) {\n                    range.setStartAtFirst(me.body).collapse(true);\n                }\n                range.select(true);\n                if (me.bkqueryCommandState) {\n                    me.queryCommandState = me.bkqueryCommandState;\n                    delete me.bkqueryCommandState;\n                }\n                if (me.bkqueryCommandValue) {\n                    me.queryCommandValue = me.bkqueryCommandValue;\n                    delete me.bkqueryCommandValue;\n                }\n                me.fireEvent(\"selectionchange\");\n            }\n        },\n        enable: function () {\n            return this.setEnabled();\n        },\n\n        /** 设置当前编辑区域不可编辑\n         * @method setDisabled\n         */\n\n        /** 设置当前编辑区域不可编辑,except中的命令除外\n         * @method setDisabled\n         * @param { String } except 例外命令的字符串\n         * @remind 即使设置了disable，此处配置的例外命令仍然可以执行\n         * @example\n         * ```javascript\n         * editor.setDisabled('bold'); //禁用工具栏中除加粗之外的所有功能\n         * ```\n         */\n\n        /** 设置当前编辑区域不可编辑,except中的命令除外\n         * @method setDisabled\n         * @param { Array } except 例外命令的字符串数组，数组中的命令仍然可以执行\n         * @remind 即使设置了disable，此处配置的例外命令仍然可以执行\n         * @example\n         * ```javascript\n         * editor.setDisabled(['bold','insertimage']); //禁用工具栏中除加粗和插入图片之外的所有功能\n         * ```\n         */\n        setDisabled: function (except) {\n            var me = this;\n            except = except ? (utils.isArray(except) ? except : [except]) : [];\n            if (me.body.contentEditable == \"true\") {\n                if (!me.lastBk) {\n                    me.lastBk = me.selection.getRange().createBookmark(true);\n                }\n                me.body.contentEditable = false;\n                me.bkqueryCommandState = me.queryCommandState;\n                me.bkqueryCommandValue = me.queryCommandValue;\n                me.queryCommandState = function (type) {\n                    if (utils.indexOf(except, type) != -1) {\n                        return me.bkqueryCommandState.apply(me, arguments);\n                    }\n                    return -1;\n                };\n                me.queryCommandValue = function (type) {\n                    if (utils.indexOf(except, type) != -1) {\n                        return me.bkqueryCommandValue.apply(me, arguments);\n                    }\n                    return null;\n                };\n                me.fireEvent(\"selectionchange\");\n            }\n        },\n        disable: function (except) {\n            return this.setDisabled(except);\n        },\n\n        /**\n         * 设置默认内容\n         * @method _setDefaultContent\n         * @private\n         * @param  { String } cont 要存入的内容\n         */\n        _setDefaultContent: (function () {\n            function clear() {\n                var me = this;\n                if (me.document.getElementById(\"initContent\")) {\n                    me.body.innerHTML = \"<p>\" + (ie ? \"\" : \"<br/>\") + \"</p>\";\n                    me.removeListener(\"firstBeforeExecCommand focus\", clear);\n                    setTimeout(function () {\n                        me.focus();\n                        me._selectionChange();\n                    }, 0);\n                }\n            }\n\n            return function (cont) {\n                var me = this;\n                me.body.innerHTML = '<p id=\"initContent\">' + cont + \"</p>\";\n\n                me.addListener(\"firstBeforeExecCommand focus\", clear);\n            };\n        })(),\n\n        /**\n         * 显示编辑器\n         * @method setShow\n         * @example\n         * ```javascript\n         * editor.setShow()\n         * ```\n         */\n        setShow: function () {\n            var me = this,\n                range = me.selection.getRange();\n            if (me.container.style.display == \"none\") {\n                //有可能内容丢失了\n                try {\n                    range.moveToBookmark(me.lastBk);\n                    delete me.lastBk;\n                } catch (e) {\n                    range.setStartAtFirst(me.body).collapse(true);\n                }\n                //ie下focus实效，所以做了个延迟\n                setTimeout(function () {\n                    range.select(true);\n                }, 100);\n                me.container.style.display = \"\";\n            }\n        },\n        show: function () {\n            return this.setShow();\n        },\n        /**\n         * 隐藏编辑器\n         * @method setHide\n         * @example\n         * ```javascript\n         * editor.setHide()\n         * ```\n         */\n        setHide: function () {\n            var me = this;\n            if (!me.lastBk) {\n                me.lastBk = me.selection.getRange().createBookmark(true);\n            }\n            me.container.style.display = \"none\";\n        },\n        hide: function () {\n            return this.setHide();\n        },\n\n        /**\n         * 根据指定的路径，获取对应的语言资源\n         * @method getLang\n         * @param { String } path 路径根据的是lang目录下的语言文件的路径结构\n         * @return { Object | String } 根据路径返回语言资源的Json格式对象或者语言字符串\n         * @example\n         * ```javascript\n         * editor.getLang('contextMenu.delete'); //如果当前是中文，那返回是的是'删除'\n         * ```\n         */\n        getLang: function (path) {\n            var lang = UE.I18N[this.options.lang];\n            if (!lang) {\n                throw Error(\"not import language file\");\n            }\n            path = (path || \"\").split(\".\");\n            for (var i = 0, ci; (ci = path[i++]);) {\n                lang = lang[ci];\n                if (!lang) break;\n            }\n            return lang;\n        },\n\n        /**\n         * 计算编辑器html内容字符串的长度\n         * @method  getContentLength\n         * @return { Number } 返回计算的长度\n         * @example\n         * ```javascript\n         * //编辑器html内容<p><strong>132</strong></p>\n         * editor.getContentLength() //返回27\n         * ```\n         */\n        /**\n         * 计算编辑器当前纯文本内容的长度\n         * @method  getContentLength\n         * @param { Boolean } ingoneHtml 传入true时，只按照纯文本来计算\n         * @return { Number } 返回计算的长度，内容中有hr/img/iframe标签，长度加1\n         * @example\n         * ```javascript\n         * //编辑器html内容<p><strong>132</strong></p>\n         * editor.getContentLength() //返回3\n         * ```\n         */\n        getContentLength: function (ingoneHtml, tagNames) {\n            var count = this.getContent(false, false, true).length;\n            if (ingoneHtml) {\n                tagNames = (tagNames || []).concat([\"hr\", \"img\", \"iframe\"]);\n                count = this.getContentTxt().replace(/[\\t\\r\\n]+/g, \"\").length;\n                for (var i = 0, ci; (ci = tagNames[i++]);) {\n                    count += this.document.getElementsByTagName(ci).length;\n                }\n            }\n            return count;\n        },\n\n        getScrollTop: function () {\n            return Math.max(this.document.documentElement.scrollTop, this.document.body.scrollTop);\n        },\n        getScrollLeft: function () {\n            return Math.max(this.document.documentElement.scrollLeft, this.document.body.scrollLeft);\n        },\n\n        /**\n         * 注册输入过滤规则\n         * @method  addInputRule\n         * @param { Function } rule 要添加的过滤规则\n         * @example\n         * ```javascript\n         * editor.addInputRule(function(root){\n         *   $.each(root.getNodesByTagName('div'),function(i,node){\n         *       node.tagName=\"p\";\n         *   });\n         * });\n         * ```\n         */\n        addInputRule: function (rule) {\n            this.inputRules.push(rule);\n        },\n\n        /**\n         * 执行注册的过滤规则\n         * @method  filterInputRule\n         * @param { UE.uNode } root 要过滤的uNode节点\n         * @remind 执行editor.setContent方法和执行'inserthtml'命令后，会运行该过滤函数\n         * @example\n         * ```javascript\n         * editor.filterInputRule(editor.body);\n         * ```\n         * @see UE.Editor:addInputRule\n         */\n        filterInputRule: function (root) {\n            for (var i = 0, ci; (ci = this.inputRules[i++]);) {\n                ci.call(this, root);\n            }\n        },\n\n        /**\n         * 注册输出过滤规则\n         * @method  addOutputRule\n         * @param { Function } rule 要添加的过滤规则\n         * @example\n         * ```javascript\n         * editor.addOutputRule(function(root){\n         *   $.each(root.getNodesByTagName('p'),function(i,node){\n         *       node.tagName=\"div\";\n         *   });\n         * });\n         * ```\n         */\n        addOutputRule: function (rule) {\n            this.outputRules.push(rule);\n        },\n\n        /**\n         * 根据输出过滤规则，过滤编辑器内容\n         * @method  filterOutputRule\n         * @remind 执行editor.getContent方法的时候，会先运行该过滤函数\n         * @param { UE.uNode } root 要过滤的uNode节点\n         * @example\n         * ```javascript\n         * editor.filterOutputRule(editor.body);\n         * ```\n         * @see UE.Editor:addOutputRule\n         */\n        filterOutputRule: function (root) {\n            for (var i = 0, ci; (ci = this.outputRules[i++]);) {\n                ci.call(this, root);\n            }\n        },\n\n        /**\n         * 根据action名称获取请求的路径\n         * @method  getActionUrl\n         * @remind 假如没有设置serverUrl,会根据imageUrl设置默认的controller路径\n         * @param { String } action action名称\n         * @example\n         * ```javascript\n         * editor.getActionUrl('config'); //返回 \"/ueditor/php/controller.php?action=config\"\n         * editor.getActionUrl('image'); //返回 \"/ueditor/php/controller.php?action=uplaodimage\"\n         * editor.getActionUrl('scrawl'); //返回 \"/ueditor/php/controller.php?action=uplaodscrawl\"\n         * editor.getActionUrl('imageManager'); //返回 \"/ueditor/php/controller.php?action=listimage\"\n         * ```\n         */\n        getActionUrl: function (action) {\n            var serverUrl = this.getOpt(\"serverUrl\")\n            if (!action) {\n                return serverUrl;\n            }\n            var actionName = this.getOpt(action) || action,\n                imageUrl = this.getOpt(\"imageUrl\");\n\n            if (!serverUrl && imageUrl) {\n                serverUrl = imageUrl.replace(/^(.*[\\/]).+([\\.].+)$/, \"$1controller$2\");\n            }\n            if (serverUrl) {\n                serverUrl =\n                    serverUrl +\n                    (serverUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\") +\n                    \"action=\" +\n                    (actionName || \"\");\n                return utils.formatUrl(serverUrl);\n            } else {\n                return \"\";\n            }\n        },\n        tipError: function (msg, option) {\n            this.tip(msg, Object.assign({\n                type: 'error',\n            }, option));\n        },\n        tipSuccess: function (msg, option) {\n            this.tip(msg, Object.assign({\n                type: 'success',\n            }, option));\n        },\n        tip: function (msg, option) {\n            var exists = document.getElementById('EditorTipBox');\n            if (exists) {\n                document.body.removeChild(exists);\n            }\n            option = Object.assign({\n                type: 'success',\n                duration: 3000,\n            }, option)\n            var html = [\n                '<div class=\"editor-tip editor-tip-' + option.type + '\" style=\"opacity:0;position: fixed; top: 10px; left: 50%; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); background: #FFF; z-index: 9999; border-radius: 5px; font-size: 13px; line-height: 30px; padding: 0 10px;\">',\n                option.type === 'error' ? '<i class=\"edui-iconfont\" style=\"color:#d31919;margin-right:5px;font-size:16px;vertical-align:top;\">&#xe6a7;</i>' : '',\n                option.type === 'success' ? '<i class=\"edui-iconfont\" style=\"color:#19ba21;margin-right:5px;font-size:16px;vertical-align:top;\">&#xe7fc;</i>' : '',\n                msg,\n                '</div>'\n            ].join('');\n            var tip = document.createElement('div');\n            tip.innerHTML = html;\n            tip.id = 'EditorTipBox';\n            document.body.appendChild(tip);\n            var tipBox = tip.querySelector('.editor-tip');\n            var tipBoxWidth = tipBox.offsetWidth;\n            tipBox.style.marginLeft = -tipBoxWidth / 2 + 'px';\n            tipBox.style.opacity = 1;\n            setTimeout(function () {\n                document.body.removeChild(tip);\n            }, option.duration);\n        },\n    };\n    utils.inherits(Editor, EventBase);\n})();\n"
  },
  {
    "path": "_src/core/EventBase.js",
    "content": "/**\n * UE采用的事件基类\n * @file\n * @module UE\n * @class EventBase\n * @since 1.2.6.1\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @unfile\n * @module UE\n */\n\n/**\n * UE采用的事件基类，继承此类的对应类将获取addListener,removeListener,fireEvent方法。\n * 在UE中，Editor以及所有ui实例都继承了该类，故可以在对应的ui对象以及editor对象上使用上述方法。\n * @unfile\n * @module UE\n * @class EventBase\n */\n\n/**\n * 通过此构造器，子类可以继承EventBase获取事件监听的方法\n * @constructor\n * @example\n * ```javascript\n * UE.EventBase.call(editor);\n * ```\n */\nvar EventBase = (UE.EventBase = function () {\n});\n\nEventBase.prototype = {\n    /**\n     * 注册事件监听器\n     * @method addListener\n     * @param { String } types 监听的事件名称，同时监听多个事件使用空格分隔\n     * @param { Function } fn 监听的事件被触发时，会执行该回调函数\n     * @waining 事件被触发时，监听的函数假如返回的值恒等于true，回调函数的队列中后面的函数将不执行\n     * @example\n     * ```javascript\n     * editor.addListener('selectionchange',function(){\n     *      console.log(\"选区已经变化！\");\n     * })\n     * editor.addListener('beforegetcontent aftergetcontent',function(type){\n     *         if(type == 'beforegetcontent'){\n     *             //do something\n     *         }else{\n     *             //do something\n     *         }\n     *         console.log(this.getContent) // this是注册的事件的编辑器实例\n     * })\n     * ```\n     * @see UE.EventBase:fireEvent(String)\n     */\n    addListener: function (types, listener) {\n        types = utils.trim(types).split(/\\s+/);\n        for (var i = 0, ti; (ti = types[i++]);) {\n            getListener(this, ti, true).push(listener);\n        }\n    },\n\n    on: function (types, listener) {\n        return this.addListener(types, listener);\n    },\n    off: function (types, listener) {\n        return this.removeListener(types, listener);\n    },\n    trigger: function () {\n        return this.fireEvent.apply(this, arguments);\n    },\n    /**\n     * 移除事件监听器\n     * @method removeListener\n     * @param { String } types 移除的事件名称，同时移除多个事件使用空格分隔\n     * @param { Function } fn 移除监听事件的函数引用\n     * @example\n     * ```javascript\n     * //changeCallback为方法体\n     * editor.removeListener(\"selectionchange\",changeCallback);\n     * ```\n     */\n    removeListener: function (types, listener) {\n        types = utils.trim(types).split(/\\s+/);\n        for (var i = 0, ti; (ti = types[i++]);) {\n            utils.removeItem(getListener(this, ti) || [], listener);\n        }\n    },\n\n    /**\n     * 触发事件\n     * @method fireEvent\n     * @param { String } types 触发的事件名称，同时触发多个事件使用空格分隔\n     * @remind 该方法会触发addListener\n     * @return { * } 返回触发事件的队列中，最后执行的回调函数的返回值\n     * @example\n     * ```javascript\n     * editor.fireEvent(\"selectionchange\");\n     * ```\n     */\n\n    /**\n     * 触发事件\n     * @method fireEvent\n     * @param { String } types 触发的事件名称，同时触发多个事件使用空格分隔\n     * @param { *... } options 可选参数，可以传入一个或多个参数，会传给事件触发的回调函数\n     * @return { * } 返回触发事件的队列中，最后执行的回调函数的返回值\n     * @example\n     * ```javascript\n     *\n     * editor.addListener( \"selectionchange\", function ( type, arg1, arg2 ) {\n     *\n     *     console.log( arg1 + \" \" + arg2 );\n     *\n     * } );\n     *\n     * //触发selectionchange事件， 会执行上面的事件监听器\n     * //output: Hello World\n     * editor.fireEvent(\"selectionchange\", \"Hello\", \"World\");\n     * ```\n     */\n    fireEvent: function () {\n        var types = arguments[0];\n        types = utils.trim(types).split(\" \");\n        for (var i = 0, ti; (ti = types[i++]);) {\n            var listeners = getListener(this, ti),\n                r,\n                t,\n                k;\n            if (listeners) {\n                k = listeners.length;\n                while (k--) {\n                    if (!listeners[k]) continue;\n                    t = listeners[k].apply(this, arguments);\n                    if (t === true) {\n                        return t;\n                    }\n                    if (t !== undefined) {\n                        r = t;\n                    }\n                }\n            }\n            if ((t = this[\"on\" + ti.toLowerCase()])) {\n                r = t.apply(this, arguments);\n            }\n        }\n        return r;\n    }\n};\n\n/**\n * 获得对象所拥有监听类型的所有监听器\n * @unfile\n * @module UE\n * @since 1.2.6.1\n * @method getListener\n * @public\n * @param { Object } obj  查询监听器的对象\n * @param { String } type 事件类型\n * @param { Boolean } force  为true且当前所有type类型的侦听器不存在时，创建一个空监听器数组\n * @return { Array } 监听器数组\n */\nfunction getListener(obj, type, force) {\n    var allListeners;\n    type = type.toLowerCase();\n    return (\n        (allListeners =\n            obj.__allListeners || (force && (obj.__allListeners = {}))) &&\n        (allListeners[type] || (force && (allListeners[type] = [])))\n    );\n}\n"
  },
  {
    "path": "_src/core/Range.js",
    "content": "/**\n * Range封装\n * @file\n * @module UE.dom\n * @class Range\n * @since 1.2.6.1\n */\n\n/**\n * dom操作封装\n * @unfile\n * @module UE.dom\n */\n\n/**\n * Range实现类，本类是UEditor底层核心类，封装不同浏览器之间的Range操作。\n * @unfile\n * @module UE.dom\n * @class Range\n */\n\n(function () {\n    var guid = 0,\n        fillChar = domUtils.fillChar,\n        fillData;\n\n    /**\n     * 更新range的collapse状态\n     * @param  {Range}   range    range对象\n     */\n    function updateCollapse(range) {\n        range.collapsed =\n            range.startContainer &&\n            range.endContainer &&\n            range.startContainer === range.endContainer &&\n            range.startOffset === range.endOffset;\n    }\n\n    function selectOneNode(rng) {\n        return (\n            !rng.collapsed &&\n            rng.startContainer.nodeType === 1 &&\n            rng.startContainer === rng.endContainer &&\n            rng.endOffset - rng.startOffset === 1\n        );\n    }\n\n    function setEndPoint(toStart, node, offset, range) {\n        //如果node是自闭合标签要处理\n        if (\n            node.nodeType === 1 &&\n            (dtd.$empty[node.tagName] || dtd.$nonChild[node.tagName])\n        ) {\n            offset = domUtils.getNodeIndex(node) + (toStart ? 0 : 1);\n            node = node.parentNode;\n        }\n        if (toStart) {\n            range.startContainer = node;\n            range.startOffset = offset;\n            if (!range.endContainer) {\n                range.collapse(true);\n            }\n        } else {\n            range.endContainer = node;\n            range.endOffset = offset;\n            if (!range.startContainer) {\n                range.collapse(false);\n            }\n        }\n        updateCollapse(range);\n        return range;\n    }\n\n    function execContentsAction(range, action) {\n        //调整边界\n        //range.includeBookmark();\n        var start = range.startContainer,\n            end = range.endContainer,\n            startOffset = range.startOffset,\n            endOffset = range.endOffset,\n            doc = range.document,\n            frag = doc.createDocumentFragment(),\n            tmpStart,\n            tmpEnd;\n        if (start.nodeType == 1) {\n            start =\n                start.childNodes[startOffset] ||\n                (tmpStart = start.appendChild(doc.createTextNode(\"\")));\n        }\n        if (end.nodeType == 1) {\n            end =\n                end.childNodes[endOffset] ||\n                (tmpEnd = end.appendChild(doc.createTextNode(\"\")));\n        }\n        if (start === end && start.nodeType == 3) {\n            frag.appendChild(\n                doc.createTextNode(\n                    start.substringData(startOffset, endOffset - startOffset)\n                )\n            );\n            //is not clone\n            if (action) {\n                start.deleteData(startOffset, endOffset - startOffset);\n                range.collapse(true);\n            }\n            return frag;\n        }\n        var current,\n            currentLevel,\n            clone = frag,\n            startParents = domUtils.findParents(start, true),\n            endParents = domUtils.findParents(end, true);\n        for (var i = 0; startParents[i] == endParents[i];) {\n            i++;\n        }\n        for (var j = i, si; (si = startParents[j]); j++) {\n            current = si.nextSibling;\n            if (si == start) {\n                if (!tmpStart) {\n                    if (range.startContainer.nodeType == 3) {\n                        clone.appendChild(\n                            doc.createTextNode(start.nodeValue.slice(startOffset))\n                        );\n                        //is not clone\n                        if (action) {\n                            start.deleteData(\n                                startOffset,\n                                start.nodeValue.length - startOffset\n                            );\n                        }\n                    } else {\n                        clone.appendChild(!action ? start.cloneNode(true) : start);\n                    }\n                }\n            } else {\n                currentLevel = si.cloneNode(false);\n                clone.appendChild(currentLevel);\n            }\n            while (current) {\n                if (current === end || current === endParents[j]) {\n                    break;\n                }\n                si = current.nextSibling;\n                clone.appendChild(!action ? current.cloneNode(true) : current);\n                current = si;\n            }\n            clone = currentLevel;\n        }\n        clone = frag;\n        if (!startParents[i]) {\n            clone.appendChild(startParents[i - 1].cloneNode(false));\n            clone = clone.firstChild;\n        }\n        for (var j = i, ei; (ei = endParents[j]); j++) {\n            current = ei.previousSibling;\n            if (ei == end) {\n                if (!tmpEnd && range.endContainer.nodeType == 3) {\n                    clone.appendChild(\n                        doc.createTextNode(end.substringData(0, endOffset))\n                    );\n                    //is not clone\n                    if (action) {\n                        end.deleteData(0, endOffset);\n                    }\n                }\n            } else {\n                currentLevel = ei.cloneNode(false);\n                clone.appendChild(currentLevel);\n            }\n            //如果两端同级，右边第一次已经被开始做了\n            if (j != i || !startParents[i]) {\n                while (current) {\n                    if (current === start) {\n                        break;\n                    }\n                    ei = current.previousSibling;\n                    clone.insertBefore(\n                        !action ? current.cloneNode(true) : current,\n                        clone.firstChild\n                    );\n                    current = ei;\n                }\n            }\n            clone = currentLevel;\n        }\n        if (action) {\n            range\n                .setStartBefore(\n                    !endParents[i]\n                        ? endParents[i - 1]\n                        : !startParents[i] ? startParents[i - 1] : endParents[i]\n                )\n                .collapse(true);\n        }\n        tmpStart && domUtils.remove(tmpStart);\n        tmpEnd && domUtils.remove(tmpEnd);\n        return frag;\n    }\n\n    /**\n     * 创建一个跟document绑定的空的Range实例\n     * @constructor\n     * @param { Document } document 新建的选区所属的文档对象\n     */\n\n    /**\n     * @property { Node } startContainer 当前Range的开始边界的容器节点, 可以是一个元素节点或者是文本节点\n     */\n\n    /**\n     * @property { Node } startOffset 当前Range的开始边界容器节点的偏移量, 如果是元素节点，\n     *                              该值就是childNodes中的第几个节点， 如果是文本节点就是文本内容的第几个字符\n     */\n\n    /**\n     * @property { Node } endContainer 当前Range的结束边界的容器节点, 可以是一个元素节点或者是文本节点\n     */\n\n    /**\n     * @property { Node } endOffset 当前Range的结束边界容器节点的偏移量, 如果是元素节点，\n     *                              该值就是childNodes中的第几个节点， 如果是文本节点就是文本内容的第几个字符\n     */\n\n    /**\n     * @property { Boolean } collapsed 当前Range是否闭合\n     * @default true\n     * @remind Range是闭合的时候， startContainer === endContainer && startOffset === endOffset\n     */\n\n    /**\n     * @property { Document } document 当前Range所属的Document对象\n     * @remind 不同range的的document属性可以是不同的\n     */\n    var Range = (dom.Range = function (document) {\n        var me = this;\n        me.startContainer = me.startOffset = me.endContainer = me.endOffset = null;\n        me.document = document;\n        me.collapsed = true;\n    });\n\n    /**\n     * 删除fillData\n     * @param doc\n     * @param excludeNode\n     */\n    function removeFillData(doc, excludeNode) {\n        try {\n            if (fillData && domUtils.inDoc(fillData, doc)) {\n                if (!fillData.nodeValue.replace(fillCharReg, \"\").length) {\n                    var tmpNode = fillData.parentNode;\n                    domUtils.remove(fillData);\n                    while (\n                        tmpNode &&\n                        domUtils.isEmptyInlineElement(tmpNode) &&\n                        //safari的contains有bug\n                        (browser.safari\n                            ? !(\n                                domUtils.getPosition(tmpNode, excludeNode) &\n                                domUtils.POSITION_CONTAINS\n                            )\n                            : !tmpNode.contains(excludeNode))\n                        ) {\n                        fillData = tmpNode.parentNode;\n                        domUtils.remove(tmpNode);\n                        tmpNode = fillData;\n                    }\n                } else {\n                    fillData.nodeValue = fillData.nodeValue.replace(fillCharReg, \"\");\n                }\n            }\n        } catch (e) {\n        }\n    }\n\n    /**\n     * @param node\n     * @param dir\n     */\n    function mergeSibling(node, dir) {\n        var tmpNode;\n        node = node[dir];\n        while (node && domUtils.isFillChar(node)) {\n            tmpNode = node[dir];\n            domUtils.remove(node);\n            node = tmpNode;\n        }\n    }\n\n    Range.prototype = {\n        /**\n         * 克隆选区的内容到一个DocumentFragment里\n         * @method cloneContents\n         * @return { DocumentFragment | NULL } 如果选区是闭合的将返回null， 否则， 返回包含所clone内容的DocumentFragment元素\n         * @example\n         * ```html\n         * <body>\n         *      <!-- 中括号表示选区 -->\n         *      <b>x<i>x[x</i>xx]x</b>\n         *\n         *      <script>\n         *          //range是已选中的选区\n         *          var fragment = range.cloneContents(),\n         *              node = document.createElement(\"div\");\n         *\n         *          node.appendChild( fragment );\n         *\n         *          //output: <i>x</i>xx\n         *          console.log( node.innerHTML );\n         *\n         *      </script>\n         * </body>\n         * ```\n         */\n        cloneContents: function () {\n            return this.collapsed ? null : execContentsAction(this, 0);\n        },\n\n        /**\n         * 删除当前选区范围中的所有内容\n         * @method deleteContents\n         * @remind 执行完该操作后， 当前Range对象变成了闭合状态\n         * @return { UE.dom.Range } 当前操作的Range对象\n         * @example\n         * ```html\n         * <body>\n         *      <!-- 中括号表示选区 -->\n         *      <b>x<i>x[x</i>xx]x</b>\n         *\n         *      <script>\n         *          //range是已选中的选区\n         *          range.deleteContents();\n         *\n         *          //竖线表示闭合后的选区位置\n         *          //output: <b>x<i>x</i>|x</b>\n         *          console.log( document.body.innerHTML );\n         *\n         *          //此时， range的各项属性为\n         *          //output: B\n         *          console.log( range.startContainer.tagName );\n         *          //output: 2\n         *          console.log( range.startOffset );\n         *          //output: B\n         *          console.log( range.endContainer.tagName );\n         *          //output: 2\n         *          console.log( range.endOffset );\n         *          //output: true\n         *          console.log( range.collapsed );\n         *\n         *      </script>\n         * </body>\n         * ```\n         */\n        deleteContents: function () {\n            var txt;\n            if (!this.collapsed) {\n                execContentsAction(this, 1);\n            }\n            if (browser.webkit) {\n                txt = this.startContainer;\n                if (txt.nodeType == 3 && !txt.nodeValue.length) {\n                    this.setStartBefore(txt).collapse(true);\n                    domUtils.remove(txt);\n                }\n            }\n            return this;\n        },\n\n        /**\n         * 将当前选区的内容提取到一个DocumentFragment里\n         * @method extractContents\n         * @remind 执行该操作后， 选区将变成闭合状态\n         * @warning 执行该操作后， 原来选区所选中的内容将从dom树上剥离出来\n         * @return { DocumentFragment } 返回包含所提取内容的DocumentFragment对象\n         * @example\n         * ```html\n         * <body>\n         *      <!-- 中括号表示选区 -->\n         *      <b>x<i>x[x</i>xx]x</b>\n         *\n         *      <script>\n         *          //range是已选中的选区\n         *          var fragment = range.extractContents(),\n         *              node = document.createElement( \"div\" );\n         *\n         *          node.appendChild( fragment );\n         *\n         *          //竖线表示闭合后的选区位置\n         *\n         *          //output: <b>x<i>x</i>|x</b>\n         *          console.log( document.body.innerHTML );\n         *          //output: <i>x</i>xx\n         *          console.log( node.innerHTML );\n         *\n         *          //此时， range的各项属性为\n         *          //output: B\n         *          console.log( range.startContainer.tagName );\n         *          //output: 2\n         *          console.log( range.startOffset );\n         *          //output: B\n         *          console.log( range.endContainer.tagName );\n         *          //output: 2\n         *          console.log( range.endOffset );\n         *          //output: true\n         *          console.log( range.collapsed );\n         *\n         *      </script>\n         * </body>\n         */\n        extractContents: function () {\n            return this.collapsed ? null : execContentsAction(this, 2);\n        },\n\n        /**\n         * 设置Range的开始容器节点和偏移量\n         * @method  setStart\n         * @remind 如果给定的节点是元素节点，那么offset指的是其子元素中索引为offset的元素，\n         *          如果是文本节点，那么offset指的是其文本内容的第offset个字符\n         * @remind 如果提供的容器节点是一个不能包含子元素的节点， 则该选区的开始容器将被设置\n         *          为该节点的父节点， 此时， 其距离开始容器的偏移量也变成了该节点在其父节点\n         *          中的索引\n         * @param { Node } node 将被设为当前选区开始边界容器的节点对象\n         * @param { int } offset 选区的开始位置偏移量\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <!-- 选区 -->\n         * <b>xxx<i>x<span>xx</span>xx<em>xx</em>xxx</i>[xxx]</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.setStart( document.getElementsByTagName(\"i\")[0], 1 );\n         *\n         *     //此时， 选区变成了\n         *     //<b>xxx<i>x[<span>xx</span>xx<em>xx</em>xxx</i>xxx]</b>\n         *\n         * </script>\n         * ```\n         * @example\n         * ```html\n         * <!-- 选区 -->\n         * <b>xxx<img>[xx]x</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.setStart( document.getElementsByTagName(\"img\")[0], 3 );\n         *\n         *     //此时， 选区变成了\n         *     //<b>xxx[<img>xx]x</b>\n         *\n         * </script>\n         * ```\n         */\n        setStart: function (node, offset) {\n            return setEndPoint(true, node, offset, this);\n        },\n\n        /**\n         * 设置Range的结束容器和偏移量\n         * @method  setEnd\n         * @param { Node } node 作为当前选区结束边界容器的节点对象\n         * @param { int } offset 结束边界的偏移量\n         * @see UE.dom.Range:setStart(Node,int)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setEnd: function (node, offset) {\n            return setEndPoint(false, node, offset, this);\n        },\n\n        /**\n         * 将Range开始位置设置到node节点之后\n         * @method  setStartAfter\n         * @remind 该操作将会把给定节点的父节点作为range的开始容器， 且偏移量是该节点在其父节点中的位置索引+1\n         * @param { Node } node 选区的开始边界将紧接着该节点之后\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>xx[x</span>xxx]</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.setStartAfter( document.getElementsByTagName(\"i\")[0] );\n         *\n         *     //结果选区\n         *     //<b>xx<i>xxx</i>[<span>xxx</span>xxx]</b>\n         *\n         * </script>\n         * ```\n         */\n        setStartAfter: function (node) {\n            return this.setStart(node.parentNode, domUtils.getNodeIndex(node) + 1);\n        },\n\n        /**\n         * 将Range开始位置设置到node节点之前\n         * @method  setStartBefore\n         * @remind 该操作将会把给定节点的父节点作为range的开始容器， 且偏移量是该节点在其父节点中的位置索引\n         * @param { Node } node 新的选区开始位置在该节点之前\n         * @see UE.dom.Range:setStartAfter(Node)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setStartBefore: function (node) {\n            return this.setStart(node.parentNode, domUtils.getNodeIndex(node));\n        },\n\n        /**\n         * 将Range结束位置设置到node节点之后\n         * @method  setEndAfter\n         * @remind 该操作将会把给定节点的父节点作为range的结束容器， 且偏移量是该节点在其父节点中的位置索引+1\n         * @param { Node } node 目标节点\n         * @see UE.dom.Range:setStartAfter(Node)\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>[xx<i>xxx</i><span>xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.setStartAfter( document.getElementsByTagName(\"span\")[0] );\n         *\n         *     //结果选区\n         *     //<b>[xx<i>xxx</i><span>xxx</span>]xxx</b>\n         *\n         * </script>\n         * ```\n         */\n        setEndAfter: function (node) {\n            return this.setEnd(node.parentNode, domUtils.getNodeIndex(node) + 1);\n        },\n\n        /**\n         * 将Range结束位置设置到node节点之前\n         * @method  setEndBefore\n         * @remind 该操作将会把给定节点的父节点作为range的结束容器， 且偏移量是该节点在其父节点中的位置索引\n         * @param { Node } node 目标节点\n         * @see UE.dom.Range:setEndAfter(Node)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setEndBefore: function (node) {\n            return this.setEnd(node.parentNode, domUtils.getNodeIndex(node));\n        },\n\n        /**\n         * 设置Range的开始位置到node节点内的第一个子节点之前\n         * @method  setStartAtFirst\n         * @remind 选区的开始容器将变成给定的节点， 且偏移量为0\n         * @remind 如果给定的节点是元素节点， 则该节点必须是允许包含子节点的元素。\n         * @param { Node } node 目标节点\n         * @see UE.dom.Range:setStartBefore(Node)\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.setStartAtFirst( document.getElementsByTagName(\"i\")[0] );\n         *\n         *     //结果选区\n         *     //<b>xx<i>[xxx</i><span>xx]x</span>xxx</b>\n         *\n         * </script>\n         * ```\n         */\n        setStartAtFirst: function (node) {\n            return this.setStart(node, 0);\n        },\n\n        /**\n         * 设置Range的开始位置到node节点内的最后一个节点之后\n         * @method setStartAtLast\n         * @remind 选区的开始容器将变成给定的节点， 且偏移量为该节点的子节点数\n         * @remind 如果给定的节点是元素节点， 则该节点必须是允许包含子节点的元素。\n         * @param { Node } node 目标节点\n         * @see UE.dom.Range:setStartAtFirst(Node)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setStartAtLast: function (node) {\n            return this.setStart(\n                node,\n                node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n            );\n        },\n\n        /**\n         * 设置Range的结束位置到node节点内的第一个节点之前\n         * @method  setEndAtFirst\n         * @param { Node } node 目标节点\n         * @remind 选区的结束容器将变成给定的节点， 且偏移量为0\n         * @remind node必须是一个元素节点， 且必须是允许包含子节点的元素。\n         * @see UE.dom.Range:setStartAtFirst(Node)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setEndAtFirst: function (node) {\n            return this.setEnd(node, 0);\n        },\n\n        /**\n         * 设置Range的结束位置到node节点内的最后一个节点之后\n         * @method  setEndAtLast\n         * @param { Node } node 目标节点\n         * @remind 选区的结束容器将变成给定的节点， 且偏移量为该节点的子节点数量\n         * @remind node必须是一个元素节点， 且必须是允许包含子节点的元素。\n         * @see UE.dom.Range:setStartAtFirst(Node)\n         * @return { UE.dom.Range } 当前range对象\n         */\n        setEndAtLast: function (node) {\n            return this.setEnd(\n                node,\n                node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length\n            );\n        },\n\n        /**\n         * 选中给定节点\n         * @method  selectNode\n         * @remind 此时， 选区的开始容器和结束容器都是该节点的父节点， 其startOffset是该节点在父节点中的位置索引，\n         *          而endOffset为startOffset+1\n         * @param { Node } node 需要选中的节点\n         * @return { UE.dom.Range } 当前range对象，此时的range仅包含当前给定的节点对象\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.selectNode( document.getElementsByTagName(\"i\")[0] );\n         *\n         *     //结果选区\n         *     //<b>xx[<i>xxx</i>]<span>xxx</span>xxx</b>\n         *\n         * </script>\n         * ```\n         */\n        selectNode: function (node) {\n            return this.setStartBefore(node).setEndAfter(node);\n        },\n\n        /**\n         * 选中给定节点内部的所有节点\n         * @method  selectNodeContents\n         * @remind 此时， 选区的开始容器和结束容器都是该节点， 其startOffset为0，\n         *          而endOffset是该节点的子节点数。\n         * @param { Node } node 目标节点， 当前range将包含该节点内的所有节点\n         * @return { UE.dom.Range } 当前range对象， 此时range仅包含给定节点的所有子节点\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.selectNode( document.getElementsByTagName(\"b\")[0] );\n         *\n         *     //结果选区\n         *     //<b>[xx<i>xxx</i><span>xxx</span>xxx]</b>\n         *\n         * </script>\n         * ```\n         */\n        selectNodeContents: function (node) {\n            return this.setStart(node, 0).setEndAtLast(node);\n        },\n\n        /**\n         * clone当前Range对象\n         * @method  cloneRange\n         * @remind 返回的range是一个全新的range对象， 其内部所有属性与当前被clone的range相同。\n         * @return { UE.dom.Range } 当前range对象的一个副本\n         */\n        cloneRange: function () {\n            var me = this;\n            return new Range(me.document)\n                .setStart(me.startContainer, me.startOffset)\n                .setEnd(me.endContainer, me.endOffset);\n        },\n\n        /**\n         * 向当前选区的结束处闭合选区\n         * @method  collapse\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.collapse();\n         *\n         *     //结果选区\n         *     //“|”表示选区已闭合\n         *     //<b>xx<i>xxx</i><span>xx|x</span>xxx</b>\n         *\n         * </script>\n         * ```\n         */\n\n        /**\n         * 闭合当前选区，根据给定的toStart参数项决定是向当前选区开始处闭合还是向结束处闭合，\n         * 如果toStart的值为true，则向开始位置闭合， 反之，向结束位置闭合。\n         * @method  collapse\n         * @param { Boolean } toStart 是否向选区开始处闭合\n         * @return { UE.dom.Range } 当前range对象，此时range对象处于闭合状态\n         * @see UE.dom.Range:collapse()\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>\n         *\n         * <script>\n         *\n         *     //执行操作\n         *     range.collapse( true );\n         *\n         *     //结果选区\n         *     //“|”表示选区已闭合\n         *     //<b>xx<i>xxx</i><span>|xxx</span>xxx</b>\n         *\n         * </script>\n         * ```\n         */\n        collapse: function (toStart) {\n            var me = this;\n            if (toStart) {\n                me.endContainer = me.startContainer;\n                me.endOffset = me.startOffset;\n            } else {\n                me.startContainer = me.endContainer;\n                me.startOffset = me.endOffset;\n            }\n            me.collapsed = true;\n            return me;\n        },\n\n        /**\n         * 调整range的开始位置和结束位置，使其\"收缩\"到最小的位置\n         * @method  shrinkBoundary\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         * <span>xx<b>xx[</b>xxxxx]</span> => <span>xx<b>xx</b>[xxxxx]</span>\n         * ```\n         *\n         * @example\n         * ```html\n         * <!-- 选区示例 -->\n         * <b>x[xx</b><i>]xxx</i>\n         *\n         * <script>\n         *\n         *     //执行收缩\n         *     range.shrinkBoundary();\n         *\n         *     //结果选区\n         *     //<b>x[xx]</b><i>xxx</i>\n         * </script>\n         * ```\n         *\n         * @example\n         * ```html\n         * [<b><i>xxxx</i>xxxxxxx</b>] => <b><i>[xxxx</i>xxxxxxx]</b>\n         * ```\n         */\n\n        /**\n         * 调整range的开始位置和结束位置，使其\"收缩\"到最小的位置，\n         * 如果ignoreEnd的值为true，则忽略对结束位置的调整\n         * @method  shrinkBoundary\n         * @param { Boolean } ignoreEnd 是否忽略对结束位置的调整\n         * @return { UE.dom.Range } 当前range对象\n         * @see UE.dom.domUtils.Range:shrinkBoundary()\n         */\n        shrinkBoundary: function (ignoreEnd) {\n            var me = this,\n                child,\n                collapsed = me.collapsed;\n\n            function check(node) {\n                return (\n                    node.nodeType == 1 &&\n                    !domUtils.isBookmarkNode(node) &&\n                    !dtd.$empty[node.tagName] &&\n                    !dtd.$nonChild[node.tagName]\n                );\n            }\n\n            while (\n                me.startContainer.nodeType == 1 && //是element\n                (child = me.startContainer.childNodes[me.startOffset]) && //子节点也是element\n                check(child)\n                ) {\n                me.setStart(child, 0);\n            }\n            if (collapsed) {\n                return me.collapse(true);\n            }\n            if (!ignoreEnd) {\n                while (\n                    me.endContainer.nodeType == 1 && //是element\n                    me.endOffset > 0 && //如果是空元素就退出 endOffset=0那么endOffst-1为负值，childNodes[endOffset]报错\n                    (child = me.endContainer.childNodes[me.endOffset - 1]) && //子节点也是element\n                    check(child)\n                    ) {\n                    me.setEnd(child, child.childNodes.length);\n                }\n            }\n            return me;\n        },\n\n        /**\n         * 获取离当前选区内包含的所有节点最近的公共祖先节点，\n         * @method  getCommonAncestor\n         * @remind 返回的公共祖先节点一定不是range自身的容器节点， 但有可能是一个文本节点\n         * @return { Node } 当前range对象内所有节点的公共祖先节点\n         * @example\n         * ```html\n         * //选区示例\n         * <span>xxx<b>x[x<em>xx]x</em>xxx</b>xx</span>\n         * <script>\n         *\n         *     var node = range.getCommonAncestor();\n         *\n         *     //公共祖先节点是： b节点\n         *     //输出： B\n         *     console.log(node.tagName);\n         *\n         * </script>\n         * ```\n         */\n\n        /**\n         * 获取当前选区所包含的所有节点的公共祖先节点， 可以根据给定的参数 includeSelf 决定获取到\n         * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点， 如果 includeSelf\n         * 的取值为true， 则返回的节点可以是自身的容器节点， 否则， 则不能是容器节点\n         * @method  getCommonAncestor\n         * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点\n         * @return { Node } 当前range对象内所有节点的公共祖先节点\n         * @see UE.dom.Range:getCommonAncestor()\n         * @example\n         * ```html\n         * <body>\n         *\n         *     <!-- 选区示例 -->\n         *     <b>xxx<i>xxxx<span>xx[x</span>xx]x</i>xxxxxxx</b>\n         *\n         *     <script>\n         *\n         *         var node = range.getCommonAncestor( false );\n         *\n         *         //这里的公共祖先节点是B而不是I， 是因为参数限制了获取到的节点不能是容器节点\n         *         //output: B\n         *         console.log( node.tagName );\n         *\n         *     </script>\n         *\n         * </body>\n         * ```\n         */\n\n        /**\n         * 获取当前选区所包含的所有节点的公共祖先节点， 可以根据给定的参数 includeSelf 决定获取到\n         * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点， 如果 includeSelf\n         * 的取值为true， 则返回的节点可以是自身的容器节点， 否则， 则不能是容器节点； 同时可以根据\n         * ignoreTextNode 参数的取值决定是否忽略类型为文本节点的祖先节点。\n         * @method  getCommonAncestor\n         * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点\n         * @param { Boolean } ignoreTextNode 获取祖先节点的过程中是否忽略类型为文本节点的祖先节点\n         * @return { Node } 当前range对象内所有节点的公共祖先节点\n         * @see UE.dom.Range:getCommonAncestor()\n         * @see UE.dom.Range:getCommonAncestor(Boolean)\n         * @example\n         * ```html\n         * <body>\n         *\n         *     <!-- 选区示例 -->\n         *     <b>xxx<i>xxxx<span>x[x]x</span>xxx</i>xxxxxxx</b>\n         *\n         *     <script>\n         *\n         *         var node = range.getCommonAncestor( true, false );\n         *\n         *         //output: SPAN\n         *         console.log( node.tagName );\n         *\n         *     </script>\n         *\n         * </body>\n         * ```\n         */\n        getCommonAncestor: function (includeSelf, ignoreTextNode) {\n            var me = this,\n                start = me.startContainer,\n                end = me.endContainer;\n            if (start === end) {\n                if (includeSelf && selectOneNode(this)) {\n                    start = start.childNodes[me.startOffset];\n                    if (start.nodeType == 1) return start;\n                }\n                //只有在上来就相等的情况下才会出现是文本的情况\n                return ignoreTextNode && start.nodeType == 3 ? start.parentNode : start;\n            }\n            return domUtils.getCommonAncestor(start, end);\n        },\n\n        /**\n         * 调整当前Range的开始和结束边界容器，如果是容器节点是文本节点,就调整到包含该文本节点的父节点上\n         * @method trimBoundary\n         * @remind 该操作有可能会引起文本节点被切开\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         *\n         * //选区示例\n         * <b>xxx<i>[xxxxx]</i>xxx</b>\n         *\n         * <script>\n         *     //未调整前， 选区的开始容器和结束都是文本节点\n         *     //执行调整\n         *     range.trimBoundary();\n         *\n         *     //调整之后， 容器节点变成了i节点\n         *     //<b>xxx[<i>xxxxx</i>]xxx</b>\n         * </script>\n         * ```\n         */\n\n        /**\n         * 调整当前Range的开始和结束边界容器，如果是容器节点是文本节点,就调整到包含该文本节点的父节点上，\n         * 可以根据 ignoreEnd 参数的值决定是否调整对结束边界的调整\n         * @method trimBoundary\n         * @param { Boolean } ignoreEnd 是否忽略对结束边界的调整\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         *\n         * //选区示例\n         * <b>xxx<i>[xxxxx]</i>xxx</b>\n         *\n         * <script>\n         *     //未调整前， 选区的开始容器和结束都是文本节点\n         *     //执行调整\n         *     range.trimBoundary( true );\n         *\n         *     //调整之后， 开始容器节点变成了i节点\n         *     //但是， 结束容器没有发生变化\n         *     //<b>xxx[<i>xxxxx]</i>xxx</b>\n         * </script>\n         * ```\n         */\n        trimBoundary: function (ignoreEnd) {\n            this.txtToElmBoundary();\n            var start = this.startContainer,\n                offset = this.startOffset,\n                collapsed = this.collapsed,\n                end = this.endContainer;\n            if (start.nodeType == 3) {\n                if (offset == 0) {\n                    this.setStartBefore(start);\n                } else {\n                    if (offset >= start.nodeValue.length) {\n                        this.setStartAfter(start);\n                    } else {\n                        var textNode = domUtils.split(start, offset);\n                        //跟新结束边界\n                        if (start === end) {\n                            this.setEnd(textNode, this.endOffset - offset);\n                        } else if (start.parentNode === end) {\n                            this.endOffset += 1;\n                        }\n                        this.setStartBefore(textNode);\n                    }\n                }\n                if (collapsed) {\n                    return this.collapse(true);\n                }\n            }\n            if (!ignoreEnd) {\n                offset = this.endOffset;\n                end = this.endContainer;\n                if (end.nodeType == 3) {\n                    if (offset == 0) {\n                        this.setEndBefore(end);\n                    } else {\n                        offset < end.nodeValue.length && domUtils.split(end, offset);\n                        this.setEndAfter(end);\n                    }\n                }\n            }\n            return this;\n        },\n\n        /**\n         * 如果选区在文本的边界上，就扩展选区到文本的父节点上, 如果当前选区是闭合的， 则什么也不做\n         * @method txtToElmBoundary\n         * @remind 该操作不会修改dom节点\n         * @return { UE.dom.Range } 当前range对象\n         */\n\n        /**\n         * 如果选区在文本的边界上，就扩展选区到文本的父节点上, 如果当前选区是闭合的， 则根据参数项\n         * ignoreCollapsed 的值决定是否执行该调整\n         * @method txtToElmBoundary\n         * @param { Boolean } ignoreCollapsed 是否忽略选区的闭合状态， 如果该参数取值为true， 则\n         *                      不论选区是否闭合， 都会执行该操作， 反之， 则不会对闭合的选区执行该操作\n         * @return { UE.dom.Range } 当前range对象\n         */\n        txtToElmBoundary: function (ignoreCollapsed) {\n            function adjust(r, c) {\n                var container = r[c + \"Container\"],\n                    offset = r[c + \"Offset\"];\n                if (container.nodeType == 3) {\n                    if (!offset) {\n                        r[\n                        \"set\" +\n                        c.replace(/(\\w)/, function (a) {\n                            return a.toUpperCase();\n                        }) +\n                        \"Before\"\n                            ](container);\n                    } else if (offset >= container.nodeValue.length) {\n                        r[\n                        \"set\" +\n                        c.replace(/(\\w)/, function (a) {\n                            return a.toUpperCase();\n                        }) +\n                        \"After\"\n                            ](container);\n                    }\n                }\n            }\n\n            if (ignoreCollapsed || !this.collapsed) {\n                adjust(this, \"start\");\n                adjust(this, \"end\");\n            }\n            return this;\n        },\n\n        /**\n         * 在当前选区的开始位置前插入节点，新插入的节点会被该range包含\n         * @method  insertNode\n         * @param { Node } node 需要插入的节点\n         * @remind 插入的节点可以是一个DocumentFragment依次插入多个节点\n         * @return { UE.dom.Range } 当前range对象\n         */\n        insertNode: function (node) {\n            var first = node,\n                length = 1;\n            if (node.nodeType == 11) {\n                first = node.firstChild;\n                length = node.childNodes.length;\n            }\n            this.trimBoundary(true);\n            var start = this.startContainer,\n                offset = this.startOffset;\n            var nextNode = start.childNodes[offset];\n            if (nextNode) {\n                start.insertBefore(node, nextNode);\n            } else {\n                start.appendChild(node);\n            }\n            if (first.parentNode === this.endContainer) {\n                this.endOffset = this.endOffset + length;\n            }\n            return this.setStartBefore(first);\n        },\n\n        /**\n         * 闭合选区到当前选区的开始位置， 并且定位光标到闭合后的位置\n         * @method  setCursor\n         * @return { UE.dom.Range } 当前range对象\n         * @see UE.dom.Range:collapse()\n         */\n\n        /**\n         * 闭合选区，可以根据参数toEnd的值控制选区是向前闭合还是向后闭合， 并且定位光标到闭合后的位置。\n         * @method  setCursor\n         * @param { Boolean } toEnd 是否向后闭合， 如果为true， 则闭合选区时， 将向结束容器方向闭合，\n         *                      反之，则向开始容器方向闭合\n         * @return { UE.dom.Range } 当前range对象\n         * @see UE.dom.Range:collapse(Boolean)\n         */\n        setCursor: function (toEnd, noFillData) {\n            return this.collapse(!toEnd).select(noFillData);\n        },\n\n        /**\n         * 创建当前range的一个书签，记录下当前range的位置，方便当dom树改变时，还能找回原来的选区位置\n         * @method createBookmark\n         * @param { Boolean } serialize 控制返回的标记位置是对当前位置的引用还是ID，如果该值为true，则\n         *                              返回标记位置的ID， 反之则返回标记位置节点的引用\n         * @return { Object } 返回一个书签记录键值对， 其包含的key有： start => 开始标记的ID或者引用，\n         *                          end => 结束标记的ID或引用， id => 当前标记的类型， 如果为true，则表示\n         *                          返回的记录的类型为ID， 反之则为引用\n         */\n        createBookmark: function (serialize, same) {\n            var endNode,\n                startNode = this.document.createElement(\"span\");\n            startNode.style.cssText = \"display:none;line-height:0px;\";\n            startNode.appendChild(this.document.createTextNode(\"\\u200D\"));\n            startNode.id = \"_baidu_bookmark_start_\" + (same ? \"\" : guid++);\n\n            if (!this.collapsed) {\n                endNode = startNode.cloneNode(true);\n                endNode.id = \"_baidu_bookmark_end_\" + (same ? \"\" : guid++);\n            }\n            this.insertNode(startNode);\n            if (endNode) {\n                this.collapse().insertNode(endNode).setEndBefore(endNode);\n            }\n            this.setStartAfter(startNode);\n            return {\n                start: serialize ? startNode.id : startNode,\n                end: endNode ? (serialize ? endNode.id : endNode) : null,\n                id: serialize\n            };\n        },\n\n        /**\n         *  调整当前range的边界到书签位置，并删除该书签对象所标记的位置内的节点\n         *  @method  moveToBookmark\n         *  @param { BookMark } bookmark createBookmark所创建的标签对象\n         *  @return { UE.dom.Range } 当前range对象\n         *  @see UE.dom.Range:createBookmark(Boolean)\n         */\n        moveToBookmark: function (bookmark) {\n            var start = bookmark.id\n                ? this.document.getElementById(bookmark.start)\n                : bookmark.start,\n                end = bookmark.end && bookmark.id\n                    ? this.document.getElementById(bookmark.end)\n                    : bookmark.end;\n            this.setStartBefore(start);\n            domUtils.remove(start);\n            if (end) {\n                this.setEndBefore(end);\n                domUtils.remove(end);\n            } else {\n                this.collapse(true);\n            }\n            return this;\n        },\n\n        /**\n         * 调整range的边界，使其\"放大\"到最近的父节点\n         * @method  enlarge\n         * @remind 会引起选区的变化\n         * @return { UE.dom.Range } 当前range对象\n         */\n\n        /**\n         * 调整range的边界，使其\"放大\"到最近的父节点，根据参数 toBlock 的取值， 可以\n         * 要求扩大之后的父节点是block节点\n         * @method  enlarge\n         * @param { Boolean } toBlock 是否要求扩大之后的父节点必须是block节点\n         * @return { UE.dom.Range } 当前range对象\n         */\n        enlarge: function (toBlock, stopFn) {\n            var isBody = domUtils.isBody,\n                pre,\n                node,\n                tmp = this.document.createTextNode(\"\");\n            if (toBlock) {\n                node = this.startContainer;\n                if (node.nodeType == 1) {\n                    if (node.childNodes[this.startOffset]) {\n                        pre = node = node.childNodes[this.startOffset];\n                    } else {\n                        node.appendChild(tmp);\n                        pre = node = tmp;\n                    }\n                } else {\n                    pre = node;\n                }\n                while (1) {\n                    if (domUtils.isBlockElm(node)) {\n                        node = pre;\n                        while ((pre = node.previousSibling) && !domUtils.isBlockElm(pre)) {\n                            node = pre;\n                        }\n                        this.setStartBefore(node);\n                        break;\n                    }\n                    pre = node;\n                    node = node.parentNode;\n                }\n                node = this.endContainer;\n                if (node.nodeType == 1) {\n                    if ((pre = node.childNodes[this.endOffset])) {\n                        node.insertBefore(tmp, pre);\n                    } else {\n                        node.appendChild(tmp);\n                    }\n                    pre = node = tmp;\n                } else {\n                    pre = node;\n                }\n                while (1) {\n                    if (domUtils.isBlockElm(node)) {\n                        node = pre;\n                        while ((pre = node.nextSibling) && !domUtils.isBlockElm(pre)) {\n                            node = pre;\n                        }\n                        this.setEndAfter(node);\n                        break;\n                    }\n                    pre = node;\n                    node = node.parentNode;\n                }\n                if (tmp.parentNode === this.endContainer) {\n                    this.endOffset--;\n                }\n                domUtils.remove(tmp);\n            }\n\n            // 扩展边界到最大\n            if (!this.collapsed) {\n                while (this.startOffset == 0) {\n                    if (stopFn && stopFn(this.startContainer)) {\n                        break;\n                    }\n                    if (isBody(this.startContainer)) {\n                        break;\n                    }\n                    this.setStartBefore(this.startContainer);\n                }\n                while (\n                    this.endOffset ==\n                    (this.endContainer.nodeType == 1\n                        ? this.endContainer.childNodes.length\n                        : this.endContainer.nodeValue.length)\n                    ) {\n                    if (stopFn && stopFn(this.endContainer)) {\n                        break;\n                    }\n                    if (isBody(this.endContainer)) {\n                        break;\n                    }\n                    this.setEndAfter(this.endContainer);\n                }\n            }\n            return this;\n        },\n        enlargeToBlockElm: function (ignoreEnd) {\n            while (!domUtils.isBlockElm(this.startContainer)) {\n                this.setStartBefore(this.startContainer);\n            }\n            if (!ignoreEnd) {\n                while (!domUtils.isBlockElm(this.endContainer)) {\n                    this.setEndAfter(this.endContainer);\n                }\n            }\n            return this;\n        },\n        /**\n         * 调整Range的边界，使其\"缩小\"到最合适的位置\n         * @method adjustmentBoundary\n         * @return { UE.dom.Range } 当前range对象\n         * @see UE.dom.Range:shrinkBoundary()\n         */\n        adjustmentBoundary: function () {\n            if (!this.collapsed) {\n                while (\n                    !domUtils.isBody(this.startContainer) &&\n                    this.startOffset ==\n                    this.startContainer[\n                        this.startContainer.nodeType == 3 ? \"nodeValue\" : \"childNodes\"\n                        ].length &&\n                    this.startContainer[\n                        this.startContainer.nodeType == 3 ? \"nodeValue\" : \"childNodes\"\n                        ].length\n                    ) {\n                    this.setStartAfter(this.startContainer);\n                }\n                while (\n                    !domUtils.isBody(this.endContainer) &&\n                    !this.endOffset &&\n                    this.endContainer[\n                        this.endContainer.nodeType == 3 ? \"nodeValue\" : \"childNodes\"\n                        ].length\n                    ) {\n                    this.setEndBefore(this.endContainer);\n                }\n            }\n            return this;\n        },\n\n        /**\n         * 给range选区中的内容添加给定的inline标签\n         * @method applyInlineStyle\n         * @param { String } tagName 需要添加的标签名\n         * @example\n         * ```html\n         * <p>xxxx[xxxx]x</p>  ==>  range.applyInlineStyle(\"strong\")  ==>  <p>xxxx[<strong>xxxx</strong>]x</p>\n         * ```\n         */\n\n        /**\n         * 给range选区中的内容添加给定的inline标签， 并且为标签附加上一些初始化属性。\n         * @method applyInlineStyle\n         * @param { String } tagName 需要添加的标签名\n         * @param { Object } attrs 跟随新添加的标签的属性\n         * @return { UE.dom.Range } 当前选区\n         * @example\n         * ```html\n         * <p>xxxx[xxxx]x</p>\n         *\n         * ==>\n         *\n         * <!-- 执行操作 -->\n         * range.applyInlineStyle(\"strong\",{\"style\":\"font-size:12px\"})\n         *\n         * ==>\n         *\n         * <p>xxxx[<strong style=\"font-size:12px\">xxxx</strong>]x</p>\n         * ```\n         */\n        applyInlineStyle: function (tagName, attrs, list) {\n            if (this.collapsed) return this;\n            this.trimBoundary()\n                .enlarge(false, function (node) {\n                    return node.nodeType == 1 && domUtils.isBlockElm(node);\n                })\n                .adjustmentBoundary();\n            var bookmark = this.createBookmark(),\n                end = bookmark.end,\n                filterFn = function (node) {\n                    return node.nodeType == 1\n                        ? node.tagName.toLowerCase() != \"br\"\n                        : !domUtils.isWhitespace(node);\n                },\n                current = domUtils.getNextDomNode(bookmark.start, false, filterFn),\n                node,\n                pre,\n                range = this.cloneRange();\n            while (\n                current &&\n                domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING\n                ) {\n                if (current.nodeType == 3 || dtd[tagName][current.tagName]) {\n                    range.setStartBefore(current);\n                    node = current;\n                    while (\n                        node &&\n                        (node.nodeType == 3 || dtd[tagName][node.tagName]) &&\n                        node !== end\n                        ) {\n                        pre = node;\n                        node = domUtils.getNextDomNode(\n                            node,\n                            node.nodeType == 1,\n                            null,\n                            function (parent) {\n                                return dtd[tagName][parent.tagName];\n                            }\n                        );\n                    }\n                    var frag = range.setEndAfter(pre).extractContents(),\n                        elm;\n                    if (list && list.length > 0) {\n                        var level, top;\n                        top = level = list[0].cloneNode(false);\n                        for (var i = 1, ci; (ci = list[i++]);) {\n                            level.appendChild(ci.cloneNode(false));\n                            level = level.firstChild;\n                        }\n                        elm = level;\n                    } else {\n                        elm = range.document.createElement(tagName);\n                    }\n                    if (attrs) {\n                        domUtils.setAttributes(elm, attrs);\n                    }\n                    elm.appendChild(frag);\n                    //针对嵌套span的全局样式指定，做容错处理\n                    if (elm.tagName == \"SPAN\" && attrs && attrs.style) {\n                        utils.each(elm.getElementsByTagName(\"span\"), function (s) {\n                            s.style.cssText = s.style.cssText + \";\" + attrs.style;\n                        });\n                    }\n                    range.insertNode(list ? top : elm);\n                    //处理下滑线在a上的情况\n                    var aNode;\n                    if (\n                        tagName == \"span\" &&\n                        attrs.style &&\n                        /text\\-decoration/.test(attrs.style) &&\n                        (aNode = domUtils.findParentByTagName(elm, \"a\", true))\n                    ) {\n                        domUtils.setAttributes(aNode, attrs);\n                        domUtils.remove(elm, true);\n                        elm = aNode;\n                    } else {\n                        domUtils.mergeSibling(elm);\n                        domUtils.clearEmptySibling(elm);\n                    }\n                    //去除子节点相同的\n                    domUtils.mergeChild(elm, attrs);\n                    current = domUtils.getNextDomNode(elm, false, filterFn);\n                    domUtils.mergeToParent(elm);\n                    if (node === end) {\n                        break;\n                    }\n                } else {\n                    current = domUtils.getNextDomNode(current, true, filterFn);\n                }\n            }\n            return this.moveToBookmark(bookmark);\n        },\n\n        /**\n         * 移除当前选区内指定的inline标签，但保留其中的内容\n         * @method removeInlineStyle\n         * @param { String } tagName 需要移除的标签名\n         * @return { UE.dom.Range } 当前的range对象\n         * @example\n         * ```html\n         * xx[x<span>xxx<em>yyy</em>zz]z</span>  => range.removeInlineStyle([\"em\"])  => xx[x<span>xxxyyyzz]z</span>\n         * ```\n         */\n\n        /**\n         * 移除当前选区内指定的一组inline标签，但保留其中的内容\n         * @method removeInlineStyle\n         * @param { Array } tagNameArr 需要移除的标签名的数组\n         * @return { UE.dom.Range } 当前的range对象\n         * @see UE.dom.Range:removeInlineStyle(String)\n         */\n        removeInlineStyle: function (tagNames) {\n            if (this.collapsed) return this;\n            tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];\n            this.shrinkBoundary().adjustmentBoundary();\n            var start = this.startContainer,\n                end = this.endContainer;\n            while (1) {\n                if (start.nodeType == 1) {\n                    if (utils.indexOf(tagNames, start.tagName.toLowerCase()) > -1) {\n                        break;\n                    }\n                    if (start.tagName.toLowerCase() == \"body\") {\n                        start = null;\n                        break;\n                    }\n                }\n                start = start.parentNode;\n            }\n            while (1) {\n                if (end.nodeType == 1) {\n                    if (utils.indexOf(tagNames, end.tagName.toLowerCase()) > -1) {\n                        break;\n                    }\n                    if (end.tagName.toLowerCase() == \"body\") {\n                        end = null;\n                        break;\n                    }\n                }\n                end = end.parentNode;\n            }\n            var bookmark = this.createBookmark(),\n                frag,\n                tmpRange;\n            if (start) {\n                tmpRange = this.cloneRange()\n                    .setEndBefore(bookmark.start)\n                    .setStartBefore(start);\n                frag = tmpRange.extractContents();\n                tmpRange.insertNode(frag);\n                domUtils.clearEmptySibling(start, true);\n                start.parentNode.insertBefore(bookmark.start, start);\n            }\n            if (end) {\n                tmpRange = this.cloneRange()\n                    .setStartAfter(bookmark.end)\n                    .setEndAfter(end);\n                frag = tmpRange.extractContents();\n                tmpRange.insertNode(frag);\n                domUtils.clearEmptySibling(end, false, true);\n                end.parentNode.insertBefore(bookmark.end, end.nextSibling);\n            }\n            var current = domUtils.getNextDomNode(bookmark.start, false, function (\n                node\n                ) {\n                    return node.nodeType == 1;\n                }),\n                next;\n            while (current && current !== bookmark.end) {\n                next = domUtils.getNextDomNode(current, true, function (node) {\n                    return node.nodeType == 1;\n                });\n                if (utils.indexOf(tagNames, current.tagName.toLowerCase()) > -1) {\n                    domUtils.remove(current, true);\n                }\n                current = next;\n            }\n            return this.moveToBookmark(bookmark);\n        },\n\n        /**\n         * 获取当前选中的自闭合的节点\n         * @method  getClosedNode\n         * @return { Node | NULL } 如果当前选中的是自闭合节点， 则返回该节点， 否则返回NULL\n         */\n        getClosedNode: function () {\n            var node;\n            if (!this.collapsed) {\n                var range = this.cloneRange().adjustmentBoundary().shrinkBoundary();\n                if (selectOneNode(range)) {\n                    var child = range.startContainer.childNodes[range.startOffset];\n                    if (\n                        child &&\n                        child.nodeType === 1 &&\n                        (dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName])\n                    ) {\n                        node = child;\n                    }\n                }\n            }\n            return node;\n        },\n\n        /**\n         * 在页面上高亮range所表示的选区\n         * @method select\n         * @return { UE.dom.Range } 返回当前Range对象\n         */\n        //这里不区分ie9以上，trace:3824\n        select: browser.ie\n            ? function (noFillData, textRange) {\n                var nativeRange;\n                if (!this.collapsed) this.shrinkBoundary();\n                var node = this.getClosedNode();\n                if (node && !textRange) {\n                    try {\n                        nativeRange = this.document.body.createControlRange();\n                        nativeRange.addElement(node);\n                        nativeRange.select();\n                    } catch (e) {\n                    }\n                    return this;\n                }\n                var bookmark = this.createBookmark(),\n                    start = bookmark.start,\n                    end;\n                nativeRange = this.document.body.createTextRange();\n                nativeRange.moveToElementText(start);\n                nativeRange.moveStart(\"character\", 1);\n                if (!this.collapsed) {\n                    var nativeRangeEnd = this.document.body.createTextRange();\n                    end = bookmark.end;\n                    nativeRangeEnd.moveToElementText(end);\n                    nativeRange.setEndPoint(\"EndToEnd\", nativeRangeEnd);\n                } else {\n                    if (!noFillData && this.startContainer.nodeType != 3) {\n                        //使用<span>|x<span>固定住光标\n                        var tmpText = this.document.createTextNode(fillChar),\n                            tmp = this.document.createElement(\"span\");\n                        tmp.appendChild(this.document.createTextNode(fillChar));\n                        start.parentNode.insertBefore(tmp, start);\n                        start.parentNode.insertBefore(tmpText, start);\n                        //当点b,i,u时，不能清除i上边的b\n                        removeFillData(this.document, tmpText);\n                        fillData = tmpText;\n                        mergeSibling(tmp, \"previousSibling\");\n                        mergeSibling(start, \"nextSibling\");\n                        nativeRange.moveStart(\"character\", -1);\n                        nativeRange.collapse(true);\n                    }\n                }\n                this.moveToBookmark(bookmark);\n                tmp && domUtils.remove(tmp);\n                //IE在隐藏状态下不支持range操作，catch一下\n                try {\n                    nativeRange.select();\n                } catch (e) {\n                }\n                return this;\n            }\n            : function (notInsertFillData) {\n                function checkOffset(rng) {\n                    function check(node, offset, dir) {\n                        if (node.nodeType == 3 && node.nodeValue.length < offset) {\n                            rng[dir + \"Offset\"] = node.nodeValue.length;\n                        }\n                    }\n\n                    check(rng.startContainer, rng.startOffset, \"start\");\n                    check(rng.endContainer, rng.endOffset, \"end\");\n                }\n\n                var win = domUtils.getWindow(this.document),\n                    sel = win.getSelection(),\n                    txtNode;\n                //FF下关闭自动长高时滚动条在关闭dialog时会跳\n                //ff下如果不body.focus将不能定位闭合光标到编辑器内\n                browser.gecko ? this.document.body.focus() : win.focus();\n                if (sel) {\n                    sel.removeAllRanges();\n                    // trace:870 chrome/safari后边是br对于闭合得range不能定位 所以去掉了判断\n                    // this.startContainer.nodeType != 3 &&! ((child = this.startContainer.childNodes[this.startOffset]) && child.nodeType == 1 && child.tagName == 'BR'\n                    if (this.collapsed && !notInsertFillData) {\n                        //                    //opear如果没有节点接着，原生的不能够定位,不能在body的第一级插入空白节点\n                        //                    if (notInsertFillData && browser.opera && !domUtils.isBody(this.startContainer) && this.startContainer.nodeType == 1) {\n                        //                        var tmp = this.document.createTextNode('');\n                        //                        this.insertNode(tmp).setStart(tmp, 0).collapse(true);\n                        //                    }\n                        //\n                        //处理光标落在文本节点的情况\n                        //处理以下的情况\n                        //<b>|xxxx</b>\n                        //<b>xxxx</b>|xxxx\n                        //xxxx<b>|</b>\n                        var start = this.startContainer,\n                            child = start;\n                        if (start.nodeType == 1) {\n                            child = start.childNodes[this.startOffset];\n                        }\n                        if (\n                            !(start.nodeType == 3 && this.startOffset) &&\n                            (child\n                                ? !child.previousSibling ||\n                                child.previousSibling.nodeType != 3\n                                : !start.lastChild || start.lastChild.nodeType != 3)\n                        ) {\n                            txtNode = this.document.createTextNode(fillChar);\n                            //跟着前边走\n                            this.insertNode(txtNode);\n                            removeFillData(this.document, txtNode);\n                            mergeSibling(txtNode, \"previousSibling\");\n                            mergeSibling(txtNode, \"nextSibling\");\n                            fillData = txtNode;\n                            this.setStart(txtNode, browser.webkit ? 1 : 0).collapse(true);\n                        }\n                    }\n                    var nativeRange = this.document.createRange();\n                    if (\n                        this.collapsed &&\n                        browser.opera &&\n                        this.startContainer.nodeType == 1\n                    ) {\n                        var child = this.startContainer.childNodes[this.startOffset];\n                        if (!child) {\n                            //往前靠拢\n                            child = this.startContainer.lastChild;\n                            if (child && domUtils.isBr(child)) {\n                                this.setStartBefore(child).collapse(true);\n                            }\n                        } else {\n                            //向后靠拢\n                            while (child && domUtils.isBlockElm(child)) {\n                                if (child.nodeType == 1 && child.childNodes[0]) {\n                                    child = child.childNodes[0];\n                                } else {\n                                    break;\n                                }\n                            }\n                            child && this.setStartBefore(child).collapse(true);\n                        }\n                    }\n                    //是createAddress最后一位算的不准，现在这里进行微调\n                    checkOffset(this);\n                    nativeRange.setStart(this.startContainer, this.startOffset);\n                    nativeRange.setEnd(this.endContainer, this.endOffset);\n                    sel.addRange(nativeRange);\n                }\n                return this;\n            },\n\n        /**\n         * 滚动到当前range开始的位置\n         * @method scrollToView\n         * @param { Window } win 当前range对象所属的window对象\n         * @return { UE.dom.Range } 当前Range对象\n         */\n\n        /**\n         * 滚动到距离当前range开始位置 offset 的位置处\n         * @method scrollToView\n         * @param { Window } win 当前range对象所属的window对象\n         * @param { Number } offset 距离range开始位置处的偏移量， 如果为正数， 则向下偏移， 反之， 则向上偏移\n         * @return { UE.dom.Range } 当前Range对象\n         */\n        scrollToView: function (win, offset) {\n            win = win ? window : domUtils.getWindow(this.document);\n            offset = offset || (win.innerHeight - 100);\n            // console.log('xxx',win, offset);\n            var me = this,\n                span = me.document.createElement(\"span\");\n            //trace:717\n            span.innerHTML = \"&nbsp;\";\n            me.cloneRange().insertNode(span);\n            domUtils.scrollToView(span, win, offset);\n            domUtils.remove(span);\n            return me;\n        },\n\n        /**\n         * 判断当前选区内容是否占位符\n         * @private\n         * @method inFillChar\n         * @return { Boolean } 如果是占位符返回true，否则返回false\n         */\n        inFillChar: function () {\n            var start = this.startContainer;\n            if (\n                this.collapsed &&\n                start.nodeType == 3 &&\n                start.nodeValue.replace(new RegExp(\"^\" + domUtils.fillChar), \"\")\n                    .length +\n                1 ==\n                start.nodeValue.length\n            ) {\n                return true;\n            }\n            return false;\n        },\n\n        /**\n         * 保存\n         * @method createAddress\n         * @private\n         * @return { Boolean } 返回开始和结束的位置\n         * @example\n         * ```html\n         * <body>\n         *     <p>\n         *         aaaa\n         *         <em>\n         *             <!-- 选区开始 -->\n         *             bbbb\n         *             <!-- 选区结束 -->\n         *         </em>\n         *     </p>\n         *\n         *     <script>\n         *         //output: {startAddress:[0,1,0,0],endAddress:[0,1,0,4]}\n         *         console.log( range.createAddress() );\n         *     </script>\n         * </body>\n         * ```\n         */\n        createAddress: function (ignoreEnd, ignoreTxt) {\n            var addr = {},\n                me = this;\n\n            function getAddress(isStart) {\n                var node = isStart ? me.startContainer : me.endContainer;\n                var parents = domUtils.findParents(node, true, function (node) {\n                        return !domUtils.isBody(node);\n                    }),\n                    addrs = [];\n                for (var i = 0, ci; (ci = parents[i++]);) {\n                    addrs.push(domUtils.getNodeIndex(ci, ignoreTxt));\n                }\n                var firstIndex = 0;\n\n                if (ignoreTxt) {\n                    if (node.nodeType == 3) {\n                        var tmpNode = node.previousSibling;\n                        while (tmpNode && tmpNode.nodeType == 3) {\n                            firstIndex += tmpNode.nodeValue.replace(fillCharReg, \"\").length;\n                            tmpNode = tmpNode.previousSibling;\n                        }\n                        firstIndex += isStart ? me.startOffset : me.endOffset; // - (fillCharReg.test(node.nodeValue) ? 1 : 0 )\n                    } else {\n                        node = node.childNodes[isStart ? me.startOffset : me.endOffset];\n                        if (node) {\n                            firstIndex = domUtils.getNodeIndex(node, ignoreTxt);\n                        } else {\n                            node = isStart ? me.startContainer : me.endContainer;\n                            var first = node.firstChild;\n                            while (first) {\n                                if (domUtils.isFillChar(first)) {\n                                    first = first.nextSibling;\n                                    continue;\n                                }\n                                firstIndex++;\n                                if (first.nodeType == 3) {\n                                    while (first && first.nodeType == 3) {\n                                        first = first.nextSibling;\n                                    }\n                                } else {\n                                    first = first.nextSibling;\n                                }\n                            }\n                        }\n                    }\n                } else {\n                    firstIndex = isStart\n                        ? domUtils.isFillChar(node) ? 0 : me.startOffset\n                        : me.endOffset;\n                }\n                if (firstIndex < 0) {\n                    firstIndex = 0;\n                }\n                addrs.push(firstIndex);\n                return addrs;\n            }\n\n            addr.startAddress = getAddress(true);\n            if (!ignoreEnd) {\n                addr.endAddress = me.collapsed\n                    ? [].concat(addr.startAddress)\n                    : getAddress();\n            }\n            return addr;\n        },\n\n        /**\n         * 保存\n         * @method createAddress\n         * @private\n         * @return { Boolean } 返回开始和结束的位置\n         * @example\n         * ```html\n         * <body>\n         *     <p>\n         *         aaaa\n         *         <em>\n         *             <!-- 选区开始 -->\n         *             bbbb\n         *             <!-- 选区结束 -->\n         *         </em>\n         *     </p>\n         *\n         *     <script>\n         *         var range = editor.selection.getRange();\n         *         range.moveToAddress({startAddress:[0,1,0,0],endAddress:[0,1,0,4]});\n         *         range.select();\n         *         //output: 'bbbb'\n         *         console.log(editor.selection.getText());\n         *     </script>\n         * </body>\n         * ```\n         */\n        moveToAddress: function (addr, ignoreEnd) {\n            var me = this;\n\n            function getNode(address, isStart) {\n                var tmpNode = me.document.body,\n                    parentNode,\n                    offset;\n                for (var i = 0, ci, l = address.length; i < l; i++) {\n                    ci = address[i];\n                    parentNode = tmpNode;\n                    tmpNode = tmpNode.childNodes[ci];\n                    if (!tmpNode) {\n                        offset = ci;\n                        break;\n                    }\n                }\n                if (isStart) {\n                    if (tmpNode) {\n                        me.setStartBefore(tmpNode);\n                    } else {\n                        me.setStart(parentNode, offset);\n                    }\n                } else {\n                    if (tmpNode) {\n                        me.setEndBefore(tmpNode);\n                    } else {\n                        me.setEnd(parentNode, offset);\n                    }\n                }\n            }\n\n            getNode(addr.startAddress, true);\n            !ignoreEnd && addr.endAddress && getNode(addr.endAddress);\n            return me;\n        },\n\n        /**\n         * 判断给定的Range对象是否和当前Range对象表示的是同一个选区\n         * @method equals\n         * @param { UE.dom.Range } 需要判断的Range对象\n         * @return { Boolean } 如果给定的Range对象与当前Range对象表示的是同一个选区， 则返回true， 否则返回false\n         */\n        equals: function (rng) {\n            for (var p in this) {\n                if (this.hasOwnProperty(p)) {\n                    if (this[p] !== rng[p]) return false;\n                }\n            }\n            return true;\n        },\n\n        /**\n         * 遍历range内的节点。每当遍历一个节点时， 都会执行参数项 doFn 指定的函数， 该函数的接受当前遍历的节点\n         * 作为其参数。\n         * @method traversal\n         * @param { Function }  doFn 对每个遍历的节点要执行的方法， 该方法接受当前遍历的节点作为其参数\n         * @return { UE.dom.Range } 当前range对象\n         * @example\n         * ```html\n         *\n         * <body>\n         *\n         *     <!-- 选区开始 -->\n         *     <span></span>\n         *     <a></a>\n         *     <!-- 选区结束 -->\n         * </body>\n         *\n         * <script>\n         *\n         *     //output: <span></span><a></a>\n         *     console.log( range.cloneContents() );\n         *\n         *     range.traversal( function ( node ) {\n         *\n         *         if ( node.nodeType === 1 ) {\n         *             node.className = \"test\";\n         *         }\n         *\n         *     } );\n         *\n         *     //output: <span class=\"test\"></span><a class=\"test\"></a>\n         *     console.log( range.cloneContents() );\n         *\n         * </script>\n         * ```\n         */\n\n        /**\n         * 遍历range内的节点。\n         * 每当遍历一个节点时， 都会执行参数项 doFn 指定的函数， 该函数的接受当前遍历的节点\n         * 作为其参数。\n         * 可以通过参数项 filterFn 来指定一个过滤器， 只有符合该过滤器过滤规则的节点才会触\n         * 发doFn函数的执行\n         * @method traversal\n         * @param { Function } doFn 对每个遍历的节点要执行的方法， 该方法接受当前遍历的节点作为其参数\n         * @param { Function } filterFn 过滤器， 该函数接受当前遍历的节点作为参数， 如果该节点满足过滤\n         *                      规则， 请返回true， 该节点会触发doFn， 否则， 请返回false， 则该节点不\n         *                      会触发doFn。\n         * @return { UE.dom.Range } 当前range对象\n         * @see UE.dom.Range:traversal(Function)\n         * @example\n         * ```html\n         *\n         * <body>\n         *\n         *     <!-- 选区开始 -->\n         *     <span></span>\n         *     <a></a>\n         *     <!-- 选区结束 -->\n         * </body>\n         *\n         * <script>\n         *\n         *     //output: <span></span><a></a>\n         *     console.log( range.cloneContents() );\n         *\n         *     range.traversal( function ( node ) {\n         *\n         *         node.className = \"test\";\n         *\n         *     }, function ( node ) {\n         *          return node.nodeType === 1;\n         *     } );\n         *\n         *     //output: <span class=\"test\"></span><a class=\"test\"></a>\n         *     console.log( range.cloneContents() );\n         *\n         * </script>\n         * ```\n         */\n        traversal: function (doFn, filterFn) {\n            if (this.collapsed) return this;\n            var bookmark = this.createBookmark(),\n                end = bookmark.end,\n                current = domUtils.getNextDomNode(bookmark.start, false, filterFn);\n            while (\n                current &&\n                current !== end &&\n                domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING\n                ) {\n                var tmpNode = domUtils.getNextDomNode(current, false, filterFn);\n                doFn(current);\n                current = tmpNode;\n            }\n            return this.moveToBookmark(bookmark);\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/Selection.js",
    "content": "/**\n * 选集\n * @file\n * @module UE.dom\n * @class Selection\n * @since 1.2.6.1\n */\n\n/**\n * 选区集合\n * @unfile\n * @module UE.dom\n * @class Selection\n */\n(function () {\n    function getBoundaryInformation(range, start) {\n        var getIndex = domUtils.getNodeIndex;\n        range = range.duplicate();\n        range.collapse(start);\n        var parent = range.parentElement();\n        //如果节点里没有子节点，直接退出\n        if (!parent.hasChildNodes()) {\n            return {container: parent, offset: 0};\n        }\n        var siblings = parent.children,\n            child,\n            testRange = range.duplicate(),\n            startIndex = 0,\n            endIndex = siblings.length - 1,\n            index = -1,\n            distance;\n        while (startIndex <= endIndex) {\n            index = Math.floor((startIndex + endIndex) / 2);\n            child = siblings[index];\n            testRange.moveToElementText(child);\n            var position = testRange.compareEndPoints(\"StartToStart\", range);\n            if (position > 0) {\n                endIndex = index - 1;\n            } else if (position < 0) {\n                startIndex = index + 1;\n            } else {\n                //trace:1043\n                return {container: parent, offset: getIndex(child)};\n            }\n        }\n        if (index == -1) {\n            testRange.moveToElementText(parent);\n            testRange.setEndPoint(\"StartToStart\", range);\n            distance = testRange.text.replace(/(\\r\\n|\\r)/g, \"\\n\").length;\n            siblings = parent.childNodes;\n            if (!distance) {\n                child = siblings[siblings.length - 1];\n                return {container: child, offset: child.nodeValue.length};\n            }\n\n            var i = siblings.length;\n            while (distance > 0) {\n                distance -= siblings[--i].nodeValue.length;\n            }\n            return {container: siblings[i], offset: -distance};\n        }\n        testRange.collapse(position > 0);\n        testRange.setEndPoint(position > 0 ? \"StartToStart\" : \"EndToStart\", range);\n        distance = testRange.text.replace(/(\\r\\n|\\r)/g, \"\\n\").length;\n        if (!distance) {\n            return dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName]\n                ? {\n                    container: parent,\n                    offset: getIndex(child) + (position > 0 ? 0 : 1)\n                }\n                : {\n                    container: child,\n                    offset: position > 0 ? 0 : child.childNodes.length\n                };\n        }\n        while (distance > 0) {\n            try {\n                var pre = child;\n                child = child[position > 0 ? \"previousSibling\" : \"nextSibling\"];\n                distance -= child.nodeValue.length;\n            } catch (e) {\n                return {container: parent, offset: getIndex(pre)};\n            }\n        }\n        return {\n            container: child,\n            offset: position > 0 ? -distance : child.nodeValue.length + distance\n        };\n    }\n\n    /**\n     * 将ieRange转换为Range对象\n     * @param {Range}   ieRange    ieRange对象\n     * @param {Range}   range      Range对象\n     * @return  {Range}  range       返回转换后的Range对象\n     */\n    function transformIERangeToRange(ieRange, range) {\n        if (ieRange.item) {\n            range.selectNode(ieRange.item(0));\n        } else {\n            var bi = getBoundaryInformation(ieRange, true);\n            range.setStart(bi.container, bi.offset);\n            if (ieRange.compareEndPoints(\"StartToEnd\", ieRange) != 0) {\n                bi = getBoundaryInformation(ieRange, false);\n                range.setEnd(bi.container, bi.offset);\n            }\n        }\n        return range;\n    }\n\n    /**\n     * 获得ieRange\n     * @param {Selection} sel    Selection对象\n     * @return {ieRange}    得到ieRange\n     */\n    function _getIERange(sel) {\n        var ieRange;\n        //ie下有可能报错\n        try {\n            ieRange = sel.getNative().createRange();\n        } catch (e) {\n            return null;\n        }\n        var el = ieRange.item ? ieRange.item(0) : ieRange.parentElement();\n        if ((el.ownerDocument || el) === sel.document) {\n            return ieRange;\n        }\n        return null;\n    }\n\n    var Selection = (dom.Selection = function (doc) {\n        var me = this,\n            iframe;\n        me.document = doc;\n        if (browser.ie9below) {\n            iframe = domUtils.getWindow(doc).frameElement;\n            domUtils.on(iframe, \"beforedeactivate\", function () {\n                me._bakIERange = me.getIERange();\n            });\n            domUtils.on(iframe, \"activate\", function () {\n                try {\n                    if (!_getIERange(me) && me._bakIERange) {\n                        me._bakIERange.select();\n                    }\n                } catch (ex) {\n                }\n                me._bakIERange = null;\n            });\n        }\n        iframe = doc = null;\n    });\n\n    Selection.prototype = {\n        rangeInBody: function (rng, txtRange) {\n            var node = browser.ie9below || txtRange\n                ? rng.item ? rng.item() : rng.parentElement()\n                : rng.startContainer;\n\n            return node === this.document.body || domUtils.inDoc(node, this.document);\n        },\n\n        /**\n         * 获取原生seleciton对象\n         * @method getNative\n         * @return { Object } 获得selection对象\n         * @example\n         * ```javascript\n         * editor.selection.getNative();\n         * ```\n         */\n        getNative: function () {\n            var doc = this.document;\n            try {\n                return !doc\n                    ? null\n                    : browser.ie9below\n                        ? doc.selection\n                        : domUtils.getWindow(doc).getSelection();\n            } catch (e) {\n                return null;\n            }\n        },\n\n        /**\n         * 获得ieRange\n         * @method getIERange\n         * @return { Object } 返回ie原生的Range\n         * @example\n         * ```javascript\n         * editor.selection.getIERange();\n         * ```\n         */\n        getIERange: function () {\n            var ieRange = _getIERange(this);\n            if (!ieRange) {\n                if (this._bakIERange) {\n                    return this._bakIERange;\n                }\n            }\n            return ieRange;\n        },\n\n        /**\n         * 缓存当前选区的range和选区的开始节点\n         * @method cache\n         */\n        cache: function () {\n            this.clear();\n            this._cachedRange = this.getRange();\n            this._cachedStartElement = this.getStart();\n            this._cachedStartElementPath = this.getStartElementPath();\n        },\n\n        /**\n         * 获取选区开始位置的父节点到body\n         * @method getStartElementPath\n         * @return { Array } 返回父节点集合\n         * @example\n         * ```javascript\n         * editor.selection.getStartElementPath();\n         * ```\n         */\n        getStartElementPath: function () {\n            if (this._cachedStartElementPath) {\n                return this._cachedStartElementPath;\n            }\n            var start = this.getStart();\n            if (start) {\n                return domUtils.findParents(start, true, null, true);\n            }\n            return [];\n        },\n\n        /**\n         * 清空缓存\n         * @method clear\n         */\n        clear: function () {\n            this._cachedStartElementPath = this._cachedRange = this._cachedStartElement = null;\n        },\n\n        /**\n         * 编辑器是否得到了选区\n         * @method isFocus\n         */\n        isFocus: function () {\n            try {\n                if (browser.ie9below) {\n                    var nativeRange = _getIERange(this);\n                    return !!(nativeRange && this.rangeInBody(nativeRange));\n                } else {\n                    return !!this.getNative().rangeCount;\n                }\n            } catch (e) {\n                return false;\n            }\n        },\n\n        /**\n         * 获取选区对应的Range\n         * @method getRange\n         * @return { Object } 得到Range对象\n         * @example\n         * ```javascript\n         * editor.selection.getRange();\n         * ```\n         */\n        getRange: function () {\n            var me = this;\n\n            function optimze(range) {\n                var child = me.document.body.firstChild,\n                    collapsed = range.collapsed;\n                while (child && child.firstChild) {\n                    range.setStart(child, 0);\n                    child = child.firstChild;\n                }\n                if (!range.startContainer) {\n                    range.setStart(me.document.body, 0);\n                }\n                if (collapsed) {\n                    range.collapse(true);\n                }\n            }\n\n            if (me._cachedRange != null) {\n                return this._cachedRange;\n            }\n            var range = new baidu.editor.dom.Range(me.document);\n\n            if (browser.ie9below) {\n                var nativeRange = me.getIERange();\n                if (nativeRange) {\n                    //备份的_bakIERange可能已经实效了，dom树发生了变化比如从源码模式切回来，所以try一下，实效就放到body开始位置\n                    try {\n                        transformIERangeToRange(nativeRange, range);\n                    } catch (e) {\n                        optimze(range);\n                    }\n                } else {\n                    optimze(range);\n                }\n            } else {\n                var sel = me.getNative();\n                if (sel && sel.rangeCount) {\n                    var firstRange = sel.getRangeAt(0);\n                    var lastRange = sel.getRangeAt(sel.rangeCount - 1);\n                    range\n                        .setStart(firstRange.startContainer, firstRange.startOffset)\n                        .setEnd(lastRange.endContainer, lastRange.endOffset);\n                    if (\n                        range.collapsed &&\n                        domUtils.isBody(range.startContainer) &&\n                        !range.startOffset\n                    ) {\n                        optimze(range);\n                    }\n                } else {\n                    //trace:1734 有可能已经不在dom树上了，标识的节点\n                    if (\n                        this._bakRange &&\n                        domUtils.inDoc(this._bakRange.startContainer, this.document)\n                    ) {\n                        return this._bakRange;\n                    }\n                    optimze(range);\n                }\n            }\n            return (this._bakRange = range);\n        },\n\n        /**\n         * 获取开始元素，用于状态反射\n         * @method getStart\n         * @return { Element } 获得开始元素\n         * @example\n         * ```javascript\n         * editor.selection.getStart();\n         * ```\n         */\n        getStart: function () {\n            if (this._cachedStartElement) {\n                return this._cachedStartElement;\n            }\n            var range = browser.ie9below ? this.getIERange() : this.getRange(),\n                tmpRange,\n                start,\n                tmp,\n                parent;\n            if (browser.ie9below) {\n                if (!range) {\n                    //todo 给第一个值可能会有问题\n                    return this.document.body.firstChild;\n                }\n                //control元素\n                if (range.item) {\n                    return range.item(0);\n                }\n                tmpRange = range.duplicate();\n                //修正ie下<b>x</b>[xx] 闭合后 <b>x|</b>xx\n                tmpRange.text.length > 0 && tmpRange.moveStart(\"character\", 1);\n                tmpRange.collapse(1);\n                start = tmpRange.parentElement();\n                parent = tmp = range.parentElement();\n                while ((tmp = tmp.parentNode)) {\n                    if (tmp == start) {\n                        start = parent;\n                        break;\n                    }\n                }\n            } else {\n                range.shrinkBoundary();\n                start = range.startContainer;\n                if (start.nodeType == 1 && start.hasChildNodes()) {\n                    start =\n                        start.childNodes[\n                            Math.min(start.childNodes.length - 1, range.startOffset)\n                            ];\n                }\n                if (start.nodeType == 3) {\n                    return start.parentNode;\n                }\n            }\n            return start;\n        },\n\n        /**\n         * 得到选区中的文本\n         * @method getText\n         * @return { String } 选区中包含的文本\n         * @example\n         * ```javascript\n         * editor.selection.getText();\n         * ```\n         */\n        getText: function () {\n            var nativeSel, nativeRange;\n            if (this.isFocus() && (nativeSel = this.getNative())) {\n                nativeRange = browser.ie9below\n                    ? nativeSel.createRange()\n                    : nativeSel.getRangeAt(0);\n                return browser.ie9below ? nativeRange.text : nativeRange.toString();\n            }\n            return \"\";\n        },\n\n        /**\n         * 清除选区\n         * @method clearRange\n         * @example\n         * ```javascript\n         * editor.selection.clearRange();\n         * ```\n         */\n        clearRange: function () {\n            this.getNative()[browser.ie9below ? \"empty\" : \"removeAllRanges\"]();\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/ajax.js",
    "content": "/**\n * @file\n * @module UE.ajax\n * @since 1.2.6.1\n */\n\n/**\n * 提供对ajax请求的支持\n * @module UE.ajax\n */\nUE.ajax = (function () {\n    //创建一个ajaxRequest对象\n    var fnStr = \"XMLHttpRequest()\";\n    try {\n        new ActiveXObject(\"Msxml2.XMLHTTP\");\n        fnStr = \"ActiveXObject('Msxml2.XMLHTTP')\";\n    } catch (e) {\n        try {\n            new ActiveXObject(\"Microsoft.XMLHTTP\");\n            fnStr = \"ActiveXObject('Microsoft.XMLHTTP')\";\n        } catch (e) {\n        }\n    }\n    var creatAjaxRequest = new Function(\"return new \" + fnStr);\n\n    /**\n     * 将json参数转化成适合ajax提交的参数列表\n     * @param json\n     */\n    function json2str(json) {\n        var strArr = [];\n        for (var i in json) {\n            //忽略默认的几个参数\n            if (\n                i == \"method\" ||\n                i == \"timeout\" ||\n                i == \"async\" ||\n                i == \"dataType\" ||\n                i == \"callback\"\n            )\n                continue;\n            //忽略控制\n            if (json[i] == undefined || json[i] == null) continue;\n            //传递过来的对象和函数不在提交之列\n            if (\n                !(\n                    (typeof json[i]).toLowerCase() == \"function\" ||\n                    (typeof json[i]).toLowerCase() == \"object\"\n                )\n            ) {\n                strArr.push(encodeURIComponent(i) + \"=\" + encodeURIComponent(json[i]));\n            } else if (utils.isArray(json[i])) {\n                //支持传数组内容\n                for (var j = 0; j < json[i].length; j++) {\n                    strArr.push(\n                        encodeURIComponent(i) + \"[]=\" + encodeURIComponent(json[i][j])\n                    );\n                }\n            }\n        }\n        return strArr.join(\"&\");\n    }\n\n    function doAjax(url, ajaxOptions) {\n        var xhr = creatAjaxRequest(),\n            //是否超时\n            timeIsOut = false,\n            //默认参数\n            defaultAjaxOptions = {\n                method: \"POST\",\n                timeout: 5000,\n                async: true,\n                headers: {},\n                data: {}, //需要传递对象的话只能覆盖\n                onsuccess: function () {\n                },\n                onerror: function () {\n                }\n            };\n\n        if (typeof url === \"object\") {\n            ajaxOptions = url;\n            url = ajaxOptions.url;\n        }\n        if (!xhr || !url) return;\n        var ajaxOpts = ajaxOptions\n            ? utils.extend(defaultAjaxOptions, ajaxOptions)\n            : defaultAjaxOptions;\n\n        // console.log('ajaxOpts',ajaxOpts);\n\n        var submitStr = json2str(ajaxOpts); // { name:\"Jim\",city:\"Beijing\" } --> \"name=Jim&city=Beijing\"\n        //如果用户直接通过data参数传递json对象过来，则也要将此json对象转化为字符串\n        if (!utils.isEmptyObject(ajaxOpts.data)) {\n            submitStr += (submitStr ? \"&\" : \"\") + json2str(ajaxOpts.data);\n        }\n        //超时检测\n        var timerID = setTimeout(function () {\n            if (xhr.readyState !== 4) {\n                timeIsOut = true;\n                xhr.abort();\n                clearTimeout(timerID);\n            }\n        }, ajaxOpts.timeout);\n\n        var method = ajaxOpts.method.toUpperCase();\n        var str =\n            url +\n            (url.indexOf(\"?\") === -1 ? \"?\" : \"&\") +\n            (method === \"POST\" ? \"\" : submitStr + \"&noCache=\" + +new Date());\n        xhr.open(method, str, ajaxOpts.async);\n        xhr.onreadystatechange = function () {\n            if (xhr.readyState === 4) {\n                if (!timeIsOut && xhr.status === 200) {\n                    ajaxOpts.onsuccess(xhr);\n                } else {\n                    ajaxOpts.onerror(xhr);\n                }\n            }\n        };\n        if (ajaxOpts.headers) {\n            for (var key in ajaxOpts.headers) {\n                xhr.setRequestHeader(key, ajaxOpts.headers[key]);\n            }\n        }\n        if (method === \"POST\") {\n            xhr.setRequestHeader(\"Content-Type\", \"application/x-www-form-urlencoded\");\n            xhr.send(submitStr);\n        } else {\n            xhr.send(null);\n        }\n    }\n\n    function doJsonp(url, opts) {\n        var successhandler = opts.onsuccess || function () {\n            },\n            scr = document.createElement(\"SCRIPT\"),\n            options = opts || {},\n            charset = options[\"charset\"],\n            callbackField = options[\"jsonp\"] || \"callback\",\n            callbackFnName,\n            timeOut = options[\"timeOut\"] || 0,\n            timer,\n            reg = new RegExp(\"(\\\\?|&)\" + callbackField + \"=([^&]*)\"),\n            matches;\n\n        if (utils.isFunction(successhandler)) {\n            callbackFnName =\n                \"bd__editor__\" + Math.floor(Math.random() * 2147483648).toString(36);\n            window[callbackFnName] = getCallBack(0);\n        } else if (utils.isString(successhandler)) {\n            callbackFnName = successhandler;\n        } else {\n            if ((matches = reg.exec(url))) {\n                callbackFnName = matches[2];\n            }\n        }\n\n        url = url.replace(reg, \"\\x241\" + callbackField + \"=\" + callbackFnName);\n\n        if (url.search(reg) < 0) {\n            url +=\n                (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n                callbackField +\n                \"=\" +\n                callbackFnName;\n        }\n\n        var queryStr = json2str(opts); // { name:\"Jim\",city:\"Beijing\" } --> \"name=Jim&city=Beijing\"\n        //如果用户直接通过data参数传递json对象过来，则也要将此json对象转化为字符串\n        if (!utils.isEmptyObject(opts.data)) {\n            queryStr += (queryStr ? \"&\" : \"\") + json2str(opts.data);\n        }\n        if (queryStr) {\n            url = url.replace(/\\?/, \"?\" + queryStr + \"&\");\n        }\n\n        scr.onerror = getCallBack(1);\n        if (timeOut) {\n            timer = setTimeout(getCallBack(1), timeOut);\n        }\n        createScriptTag(scr, url, charset);\n\n        function createScriptTag(scr, url, charset) {\n            scr.setAttribute(\"type\", \"text/javascript\");\n            scr.setAttribute(\"defer\", \"defer\");\n            charset && scr.setAttribute(\"charset\", charset);\n            scr.setAttribute(\"src\", url);\n            document.getElementsByTagName(\"head\")[0].appendChild(scr);\n        }\n\n        function getCallBack(onTimeOut) {\n            return function () {\n                try {\n                    if (onTimeOut) {\n                        options.onerror && options.onerror();\n                    } else {\n                        try {\n                            clearTimeout(timer);\n                            successhandler.apply(window, arguments);\n                        } catch (e) {\n                        }\n                    }\n                } catch (exception) {\n                    options.onerror && options.onerror.call(window, exception);\n                } finally {\n                    options.oncomplete && options.oncomplete.apply(window, arguments);\n                    scr.parentNode && scr.parentNode.removeChild(scr);\n                    window[callbackFnName] = null;\n                    try {\n                        delete window[callbackFnName];\n                    } catch (e) {\n                    }\n                }\n            };\n        }\n    }\n\n    return {\n        /**\n         * 根据给定的参数项，向指定的url发起一个ajax请求。 ajax请求完成后，会根据请求结果调用相应回调： 如果请求\n         * 成功， 则调用onsuccess回调， 失败则调用 onerror 回调\n         * @method request\n         * @param { URLString } url ajax请求的url地址\n         * @param { Object } ajaxOptions ajax请求选项的键值对，支持的选项如下：\n         * @example\n         * ```javascript\n         * //向sayhello.php发起一个异步的Ajax GET请求, 请求超时时间为10s， 请求完成后执行相应的回调。\n         * UE.ajax.requeset( 'sayhello.php', {\n         *\n         *     //请求方法。可选值： 'GET', 'POST'，默认值是'POST'\n         *     method: 'GET',\n         *\n         *     //超时时间。 默认为5000， 单位是ms\n         *     timeout: 10000,\n         *\n         *     //是否是异步请求。 true为异步请求， false为同步请求\n         *     async: true,\n         *\n         *     //请求携带的数据。如果请求为GET请求， data会经过stringify后附加到请求url之后。\n         *     data: {\n         *         name: 'ueditor'\n         *     },\n         *\n         *     //请求成功后的回调， 该回调接受当前的XMLHttpRequest对象作为参数。\n         *     onsuccess: function ( xhr ) {\n         *         console.log( xhr.responseText );\n         *     },\n         *\n         *     //请求失败或者超时后的回调。\n         *     onerror: function ( xhr ) {\n         *          alert( 'Ajax请求失败' );\n         *     }\n         *\n         * } );\n         * ```\n         */\n\n        /**\n         * 根据给定的参数项发起一个ajax请求， 参数项里必须包含一个url地址。 ajax请求完成后，会根据请求结果调用相应回调： 如果请求\n         * 成功， 则调用onsuccess回调， 失败则调用 onerror 回调。\n         * @method request\n         * @warning 如果在参数项里未提供一个key为“url”的地址值，则该请求将直接退出。\n         * @param { Object } ajaxOptions ajax请求选项的键值对，支持的选项如下：\n         * @example\n         * ```javascript\n         *\n         * //向sayhello.php发起一个异步的Ajax POST请求, 请求超时时间为5s， 请求完成后不执行任何回调。\n         * UE.ajax.requeset( 'sayhello.php', {\n         *\n         *     //请求的地址， 该项是必须的。\n         *     url: 'sayhello.php'\n         *\n         * } );\n         * ```\n         */\n        request: function (url, opts) {\n            if (opts && opts.dataType === \"jsonp\") {\n                doJsonp(url, opts);\n            } else {\n                doAjax(url, opts);\n            }\n        },\n        getJSONP: function (url, data, fn) {\n            var opts = {\n                data: data,\n                oncomplete: fn\n            };\n            doJsonp(url, opts);\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/api.js",
    "content": "UE.api = (function () {\n    // axios import\n    var axios = null;\n    !function (e, t) {\n        axios = t()\n    }(this, (function () {\n        \"use strict\";\n\n        function e(t) {\n            return e = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (e) {\n                return typeof e\n            } : function (e) {\n                return e && \"function\" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? \"symbol\" : typeof e\n            }, e(t)\n        }\n\n        function t(e, t) {\n            if (!(e instanceof t)) throw new TypeError(\"Cannot call a class as a function\")\n        }\n\n        function n(e, t) {\n            for (var n = 0; n < t.length; n++) {\n                var r = t[n];\n                r.enumerable = r.enumerable || !1, r.configurable = !0, \"value\" in r && (r.writable = !0), Object.defineProperty(e, r.key, r)\n            }\n        }\n\n        function r(e, t, r) {\n            return t && n(e.prototype, t), r && n(e, r), Object.defineProperty(e, \"prototype\", {writable: !1}), e\n        }\n\n        function o(e, t) {\n            return function (e) {\n                if (Array.isArray(e)) return e\n            }(e) || function (e, t) {\n                var n = null == e ? null : \"undefined\" != typeof Symbol && e[Symbol.iterator] || e[\"@@iterator\"];\n                if (null == n) return;\n                var r, o, i = [], a = !0, s = !1;\n                try {\n                    for (n = n.call(e); !(a = (r = n.next()).done) && (i.push(r.value), !t || i.length !== t); a = !0) ;\n                } catch (e) {\n                    s = !0, o = e\n                } finally {\n                    try {\n                        a || null == n.return || n.return()\n                    } finally {\n                        if (s) throw o\n                    }\n                }\n                return i\n            }(e, t) || function (e, t) {\n                if (!e) return;\n                if (\"string\" == typeof e) return i(e, t);\n                var n = Object.prototype.toString.call(e).slice(8, -1);\n                \"Object\" === n && e.constructor && (n = e.constructor.name);\n                if (\"Map\" === n || \"Set\" === n) return Array.from(e);\n                if (\"Arguments\" === n || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return i(e, t)\n            }(e, t) || function () {\n                throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")\n            }()\n        }\n\n        function i(e, t) {\n            (null == t || t > e.length) && (t = e.length);\n            for (var n = 0, r = new Array(t); n < t; n++) r[n] = e[n];\n            return r\n        }\n\n        function a(e, t) {\n            return function () {\n                return e.apply(t, arguments)\n            }\n        }\n\n        var s, u = Object.prototype.toString, c = Object.getPrototypeOf, f = (s = Object.create(null), function (e) {\n            var t = u.call(e);\n            return s[t] || (s[t] = t.slice(8, -1).toLowerCase())\n        }), l = function (e) {\n            return e = e.toLowerCase(), function (t) {\n                return f(t) === e\n            }\n        }, d = function (t) {\n            return function (n) {\n                return e(n) === t\n            }\n        }, p = Array.isArray, h = d(\"undefined\");\n        var m = l(\"ArrayBuffer\");\n        var y = d(\"string\"), v = d(\"function\"), b = d(\"number\"), g = function (t) {\n            return null !== t && \"object\" === e(t)\n        }, w = function (e) {\n            if (\"object\" !== f(e)) return !1;\n            var t = c(e);\n            return !(null !== t && t !== Object.prototype && null !== Object.getPrototypeOf(t) || Symbol.toStringTag in e || Symbol.iterator in e)\n        }, E = l(\"Date\"), O = l(\"File\"), S = l(\"Blob\"), R = l(\"FileList\"), A = l(\"URLSearchParams\");\n\n        function T(t, n) {\n            var r, o, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : {}, a = i.allOwnKeys,\n                s = void 0 !== a && a;\n            if (null != t) if (\"object\" !== e(t) && (t = [t]), p(t)) for (r = 0, o = t.length; r < o; r++) n.call(null, t[r], r, t); else {\n                var u, c = s ? Object.getOwnPropertyNames(t) : Object.keys(t), f = c.length;\n                for (r = 0; r < f; r++) u = c[r], n.call(null, t[u], u, t)\n            }\n        }\n\n        function j(e, t) {\n            t = t.toLowerCase();\n            for (var n, r = Object.keys(e), o = r.length; o-- > 0;) if (t === (n = r[o]).toLowerCase()) return n;\n            return null\n        }\n\n        var N = \"undefined\" != typeof globalThis ? globalThis : \"undefined\" != typeof self ? self : \"undefined\" != typeof window ? window : global,\n            C = function (e) {\n                return !h(e) && e !== N\n            };\n        var x, P = (x = \"undefined\" != typeof Uint8Array && c(Uint8Array), function (e) {\n                return x && e instanceof x\n            }), k = l(\"HTMLFormElement\"), U = function (e) {\n                var t = Object.prototype.hasOwnProperty;\n                return function (e, n) {\n                    return t.call(e, n)\n                }\n            }(), _ = l(\"RegExp\"), F = function (e, t) {\n                var n = Object.getOwnPropertyDescriptors(e), r = {};\n                T(n, (function (n, o) {\n                    !1 !== t(n, o, e) && (r[o] = n)\n                })), Object.defineProperties(e, r)\n            }, B = \"abcdefghijklmnopqrstuvwxyz\", L = \"0123456789\",\n            D = {DIGIT: L, ALPHA: B, ALPHA_DIGIT: B + B.toUpperCase() + L};\n        var I = l(\"AsyncFunction\"), q = {\n            isArray: p,\n            isArrayBuffer: m,\n            isBuffer: function (e) {\n                return null !== e && !h(e) && null !== e.constructor && !h(e.constructor) && v(e.constructor.isBuffer) && e.constructor.isBuffer(e)\n            },\n            isFormData: function (e) {\n                var t;\n                return e && (\"function\" == typeof FormData && e instanceof FormData || v(e.append) && (\"formdata\" === (t = f(e)) || \"object\" === t && v(e.toString) && \"[object FormData]\" === e.toString()))\n            },\n            isArrayBufferView: function (e) {\n                return \"undefined\" != typeof ArrayBuffer && ArrayBuffer.isView ? ArrayBuffer.isView(e) : e && e.buffer && m(e.buffer)\n            },\n            isString: y,\n            isNumber: b,\n            isBoolean: function (e) {\n                return !0 === e || !1 === e\n            },\n            isObject: g,\n            isPlainObject: w,\n            isUndefined: h,\n            isDate: E,\n            isFile: O,\n            isBlob: S,\n            isRegExp: _,\n            isFunction: v,\n            isStream: function (e) {\n                return g(e) && v(e.pipe)\n            },\n            isURLSearchParams: A,\n            isTypedArray: P,\n            isFileList: R,\n            forEach: T,\n            merge: function e() {\n                for (var t = C(this) && this || {}, n = t.caseless, r = {}, o = function (t, o) {\n                    var i = n && j(r, o) || o;\n                    w(r[i]) && w(t) ? r[i] = e(r[i], t) : w(t) ? r[i] = e({}, t) : p(t) ? r[i] = t.slice() : r[i] = t\n                }, i = 0, a = arguments.length; i < a; i++) arguments[i] && T(arguments[i], o);\n                return r\n            },\n            extend: function (e, t, n) {\n                var r = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : {}, o = r.allOwnKeys;\n                return T(t, (function (t, r) {\n                    n && v(t) ? e[r] = a(t, n) : e[r] = t\n                }), {allOwnKeys: o}), e\n            },\n            trim: function (e) {\n                return e.trim ? e.trim() : e.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, \"\")\n            },\n            stripBOM: function (e) {\n                return 65279 === e.charCodeAt(0) && (e = e.slice(1)), e\n            },\n            inherits: function (e, t, n, r) {\n                e.prototype = Object.create(t.prototype, r), e.prototype.constructor = e, Object.defineProperty(e, \"super\", {value: t.prototype}), n && Object.assign(e.prototype, n)\n            },\n            toFlatObject: function (e, t, n, r) {\n                var o, i, a, s = {};\n                if (t = t || {}, null == e) return t;\n                do {\n                    for (i = (o = Object.getOwnPropertyNames(e)).length; i-- > 0;) a = o[i], r && !r(a, e, t) || s[a] || (t[a] = e[a], s[a] = !0);\n                    e = !1 !== n && c(e)\n                } while (e && (!n || n(e, t)) && e !== Object.prototype);\n                return t\n            },\n            kindOf: f,\n            kindOfTest: l,\n            endsWith: function (e, t, n) {\n                e = String(e), (void 0 === n || n > e.length) && (n = e.length), n -= t.length;\n                var r = e.indexOf(t, n);\n                return -1 !== r && r === n\n            },\n            toArray: function (e) {\n                if (!e) return null;\n                if (p(e)) return e;\n                var t = e.length;\n                if (!b(t)) return null;\n                for (var n = new Array(t); t-- > 0;) n[t] = e[t];\n                return n\n            },\n            forEachEntry: function (e, t) {\n                for (var n, r = (e && e[Symbol.iterator]).call(e); (n = r.next()) && !n.done;) {\n                    var o = n.value;\n                    t.call(e, o[0], o[1])\n                }\n            },\n            matchAll: function (e, t) {\n                for (var n, r = []; null !== (n = e.exec(t));) r.push(n);\n                return r\n            },\n            isHTMLForm: k,\n            hasOwnProperty: U,\n            hasOwnProp: U,\n            reduceDescriptors: F,\n            freezeMethods: function (e) {\n                F(e, (function (t, n) {\n                    if (v(e) && -1 !== [\"arguments\", \"caller\", \"callee\"].indexOf(n)) return !1;\n                    var r = e[n];\n                    v(r) && (t.enumerable = !1, \"writable\" in t ? t.writable = !1 : t.set || (t.set = function () {\n                        throw Error(\"Can not rewrite read-only method '\" + n + \"'\")\n                    }))\n                }))\n            },\n            toObjectSet: function (e, t) {\n                var n = {}, r = function (e) {\n                    e.forEach((function (e) {\n                        n[e] = !0\n                    }))\n                };\n                return p(e) ? r(e) : r(String(e).split(t)), n\n            },\n            toCamelCase: function (e) {\n                return e.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g, (function (e, t, n) {\n                    return t.toUpperCase() + n\n                }))\n            },\n            noop: function () {\n            },\n            toFiniteNumber: function (e, t) {\n                return e = +e, Number.isFinite(e) ? e : t\n            },\n            findKey: j,\n            global: N,\n            isContextDefined: C,\n            ALPHABET: D,\n            generateString: function () {\n                for (var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 16, t = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : D.ALPHA_DIGIT, n = \"\", r = t.length; e--;) n += t[Math.random() * r | 0];\n                return n\n            },\n            isSpecCompliantForm: function (e) {\n                return !!(e && v(e.append) && \"FormData\" === e[Symbol.toStringTag] && e[Symbol.iterator])\n            },\n            toJSONObject: function (e) {\n                var t = new Array(10);\n                return function e(n, r) {\n                    if (g(n)) {\n                        if (t.indexOf(n) >= 0) return;\n                        if (!(\"toJSON\" in n)) {\n                            t[r] = n;\n                            var o = p(n) ? [] : {};\n                            return T(n, (function (t, n) {\n                                var i = e(t, r + 1);\n                                !h(i) && (o[n] = i)\n                            })), t[r] = void 0, o\n                        }\n                    }\n                    return n\n                }(e, 0)\n            },\n            isAsyncFn: I,\n            isThenable: function (e) {\n                return e && (g(e) || v(e)) && v(e.then) && v(e.catch)\n            }\n        };\n\n        function M(e, t, n, r, o) {\n            Error.call(this), Error.captureStackTrace ? Error.captureStackTrace(this, this.constructor) : this.stack = (new Error).stack, this.message = e, this.name = \"AxiosError\", t && (this.code = t), n && (this.config = n), r && (this.request = r), o && (this.response = o)\n        }\n\n        q.inherits(M, Error, {\n            toJSON: function () {\n                return {\n                    message: this.message,\n                    name: this.name,\n                    description: this.description,\n                    number: this.number,\n                    fileName: this.fileName,\n                    lineNumber: this.lineNumber,\n                    columnNumber: this.columnNumber,\n                    stack: this.stack,\n                    config: q.toJSONObject(this.config),\n                    code: this.code,\n                    status: this.response && this.response.status ? this.response.status : null\n                }\n            }\n        });\n        var z = M.prototype, H = {};\n        [\"ERR_BAD_OPTION_VALUE\", \"ERR_BAD_OPTION\", \"ECONNABORTED\", \"ETIMEDOUT\", \"ERR_NETWORK\", \"ERR_FR_TOO_MANY_REDIRECTS\", \"ERR_DEPRECATED\", \"ERR_BAD_RESPONSE\", \"ERR_BAD_REQUEST\", \"ERR_CANCELED\", \"ERR_NOT_SUPPORT\", \"ERR_INVALID_URL\"].forEach((function (e) {\n            H[e] = {value: e}\n        })), Object.defineProperties(M, H), Object.defineProperty(z, \"isAxiosError\", {value: !0}), M.from = function (e, t, n, r, o, i) {\n            var a = Object.create(z);\n            return q.toFlatObject(e, a, (function (e) {\n                return e !== Error.prototype\n            }), (function (e) {\n                return \"isAxiosError\" !== e\n            })), M.call(a, e.message, t, n, r, o), a.cause = e, a.name = e.name, i && Object.assign(a, i), a\n        };\n\n        function J(e) {\n            return q.isPlainObject(e) || q.isArray(e)\n        }\n\n        function W(e) {\n            return q.endsWith(e, \"[]\") ? e.slice(0, -2) : e\n        }\n\n        function K(e, t, n) {\n            return e ? e.concat(t).map((function (e, t) {\n                return e = W(e), !n && t ? \"[\" + e + \"]\" : e\n            })).join(n ? \".\" : \"\") : t\n        }\n\n        var V = q.toFlatObject(q, {}, null, (function (e) {\n            return /^is[A-Z]/.test(e)\n        }));\n\n        function G(t, n, r) {\n            if (!q.isObject(t)) throw new TypeError(\"target must be an object\");\n            n = n || new FormData;\n            var o = (r = q.toFlatObject(r, {metaTokens: !0, dots: !1, indexes: !1}, !1, (function (e, t) {\n                    return !q.isUndefined(t[e])\n                }))).metaTokens, i = r.visitor || f, a = r.dots, s = r.indexes,\n                u = (r.Blob || \"undefined\" != typeof Blob && Blob) && q.isSpecCompliantForm(n);\n            if (!q.isFunction(i)) throw new TypeError(\"visitor must be a function\");\n\n            function c(e) {\n                if (null === e) return \"\";\n                if (q.isDate(e)) return e.toISOString();\n                if (!u && q.isBlob(e)) throw new M(\"Blob is not supported. Use a Buffer instead.\");\n                return q.isArrayBuffer(e) || q.isTypedArray(e) ? u && \"function\" == typeof Blob ? new Blob([e]) : Buffer.from(e) : e\n            }\n\n            function f(t, r, i) {\n                var u = t;\n                if (t && !i && \"object\" === e(t)) if (q.endsWith(r, \"{}\")) r = o ? r : r.slice(0, -2), t = JSON.stringify(t); else if (q.isArray(t) && function (e) {\n                    return q.isArray(e) && !e.some(J)\n                }(t) || (q.isFileList(t) || q.endsWith(r, \"[]\")) && (u = q.toArray(t))) return r = W(r), u.forEach((function (e, t) {\n                    !q.isUndefined(e) && null !== e && n.append(!0 === s ? K([r], t, a) : null === s ? r : r + \"[]\", c(e))\n                })), !1;\n                return !!J(t) || (n.append(K(i, r, a), c(t)), !1)\n            }\n\n            var l = [], d = Object.assign(V, {defaultVisitor: f, convertValue: c, isVisitable: J});\n            if (!q.isObject(t)) throw new TypeError(\"data must be an object\");\n            return function e(t, r) {\n                if (!q.isUndefined(t)) {\n                    if (-1 !== l.indexOf(t)) throw Error(\"Circular reference detected in \" + r.join(\".\"));\n                    l.push(t), q.forEach(t, (function (t, o) {\n                        !0 === (!(q.isUndefined(t) || null === t) && i.call(n, t, q.isString(o) ? o.trim() : o, r, d)) && e(t, r ? r.concat(o) : [o])\n                    })), l.pop()\n                }\n            }(t), n\n        }\n\n        function $(e) {\n            var t = {\"!\": \"%21\", \"'\": \"%27\", \"(\": \"%28\", \")\": \"%29\", \"~\": \"%7E\", \"%20\": \"+\", \"%00\": \"\\0\"};\n            return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g, (function (e) {\n                return t[e]\n            }))\n        }\n\n        function X(e, t) {\n            this._pairs = [], e && G(e, this, t)\n        }\n\n        var Q = X.prototype;\n\n        function Z(e) {\n            return encodeURIComponent(e).replace(/%3A/gi, \":\").replace(/%24/g, \"$\").replace(/%2C/gi, \",\").replace(/%20/g, \"+\").replace(/%5B/gi, \"[\").replace(/%5D/gi, \"]\")\n        }\n\n        function Y(e, t, n) {\n            if (!t) return e;\n            var r, o = n && n.encode || Z, i = n && n.serialize;\n            if (r = i ? i(t, n) : q.isURLSearchParams(t) ? t.toString() : new X(t, n).toString(o)) {\n                var a = e.indexOf(\"#\");\n                -1 !== a && (e = e.slice(0, a)), e += (-1 === e.indexOf(\"?\") ? \"?\" : \"&\") + r\n            }\n            return e\n        }\n\n        Q.append = function (e, t) {\n            this._pairs.push([e, t])\n        }, Q.toString = function (e) {\n            var t = e ? function (t) {\n                return e.call(this, t, $)\n            } : $;\n            return this._pairs.map((function (e) {\n                return t(e[0]) + \"=\" + t(e[1])\n            }), \"\").join(\"&\")\n        };\n        var ee, te = function () {\n            function e() {\n                t(this, e), this.handlers = []\n            }\n\n            return r(e, [{\n                key: \"use\", value: function (e, t, n) {\n                    return this.handlers.push({\n                        fulfilled: e,\n                        rejected: t,\n                        synchronous: !!n && n.synchronous,\n                        runWhen: n ? n.runWhen : null\n                    }), this.handlers.length - 1\n                }\n            }, {\n                key: \"eject\", value: function (e) {\n                    this.handlers[e] && (this.handlers[e] = null)\n                }\n            }, {\n                key: \"clear\", value: function () {\n                    this.handlers && (this.handlers = [])\n                }\n            }, {\n                key: \"forEach\", value: function (e) {\n                    q.forEach(this.handlers, (function (t) {\n                        null !== t && e(t)\n                    }))\n                }\n            }]), e\n        }(), ne = {silentJSONParsing: !0, forcedJSONParsing: !0, clarifyTimeoutError: !1}, re = {\n            isBrowser: !0,\n            classes: {\n                URLSearchParams: \"undefined\" != typeof URLSearchParams ? URLSearchParams : X,\n                FormData: \"undefined\" != typeof FormData ? FormData : null,\n                Blob: \"undefined\" != typeof Blob ? Blob : null\n            },\n            isStandardBrowserEnv: (\"undefined\" == typeof navigator || \"ReactNative\" !== (ee = navigator.product) && \"NativeScript\" !== ee && \"NS\" !== ee) && \"undefined\" != typeof window && \"undefined\" != typeof document,\n            isStandardBrowserWebWorkerEnv: \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope && \"function\" == typeof self.importScripts,\n            protocols: [\"http\", \"https\", \"file\", \"blob\", \"url\", \"data\"]\n        };\n\n        function oe(e) {\n            function t(e, n, r, o) {\n                var i = e[o++], a = Number.isFinite(+i), s = o >= e.length;\n                return i = !i && q.isArray(r) ? r.length : i, s ? (q.hasOwnProp(r, i) ? r[i] = [r[i], n] : r[i] = n, !a) : (r[i] && q.isObject(r[i]) || (r[i] = []), t(e, n, r[i], o) && q.isArray(r[i]) && (r[i] = function (e) {\n                    var t, n, r = {}, o = Object.keys(e), i = o.length;\n                    for (t = 0; t < i; t++) r[n = o[t]] = e[n];\n                    return r\n                }(r[i])), !a)\n            }\n\n            if (q.isFormData(e) && q.isFunction(e.entries)) {\n                var n = {};\n                return q.forEachEntry(e, (function (e, r) {\n                    t(function (e) {\n                        return q.matchAll(/\\w+|\\[(\\w*)]/g, e).map((function (e) {\n                            return \"[]\" === e[0] ? \"\" : e[1] || e[0]\n                        }))\n                    }(e), r, n, 0)\n                })), n\n            }\n            return null\n        }\n\n        var ie = {\"Content-Type\": void 0};\n        var ae = {\n            transitional: ne,\n            adapter: [\"xhr\", \"http\"],\n            transformRequest: [function (e, t) {\n                var n, r = t.getContentType() || \"\", o = r.indexOf(\"application/json\") > -1, i = q.isObject(e);\n                if (i && q.isHTMLForm(e) && (e = new FormData(e)), q.isFormData(e)) return o && o ? JSON.stringify(oe(e)) : e;\n                if (q.isArrayBuffer(e) || q.isBuffer(e) || q.isStream(e) || q.isFile(e) || q.isBlob(e)) return e;\n                if (q.isArrayBufferView(e)) return e.buffer;\n                if (q.isURLSearchParams(e)) return t.setContentType(\"application/x-www-form-urlencoded;charset=utf-8\", !1), e.toString();\n                if (i) {\n                    if (r.indexOf(\"application/x-www-form-urlencoded\") > -1) return function (e, t) {\n                        return G(e, new re.classes.URLSearchParams, Object.assign({\n                            visitor: function (e, t, n, r) {\n                                return re.isNode && q.isBuffer(e) ? (this.append(t, e.toString(\"base64\")), !1) : r.defaultVisitor.apply(this, arguments)\n                            }\n                        }, t))\n                    }(e, this.formSerializer).toString();\n                    if ((n = q.isFileList(e)) || r.indexOf(\"multipart/form-data\") > -1) {\n                        var a = this.env && this.env.FormData;\n                        return G(n ? {\"files[]\": e} : e, a && new a, this.formSerializer)\n                    }\n                }\n                return i || o ? (t.setContentType(\"application/json\", !1), function (e, t, n) {\n                    if (q.isString(e)) try {\n                        return (t || JSON.parse)(e), q.trim(e)\n                    } catch (e) {\n                        if (\"SyntaxError\" !== e.name) throw e\n                    }\n                    return (n || JSON.stringify)(e)\n                }(e)) : e\n            }],\n            transformResponse: [function (e) {\n                var t = this.transitional || ae.transitional, n = t && t.forcedJSONParsing,\n                    r = \"json\" === this.responseType;\n                if (e && q.isString(e) && (n && !this.responseType || r)) {\n                    var o = !(t && t.silentJSONParsing) && r;\n                    try {\n                        return JSON.parse(e)\n                    } catch (e) {\n                        if (o) {\n                            if (\"SyntaxError\" === e.name) throw M.from(e, M.ERR_BAD_RESPONSE, this, null, this.response);\n                            throw e\n                        }\n                    }\n                }\n                return e\n            }],\n            timeout: 0,\n            xsrfCookieName: \"XSRF-TOKEN\",\n            xsrfHeaderName: \"X-XSRF-TOKEN\",\n            maxContentLength: -1,\n            maxBodyLength: -1,\n            env: {FormData: re.classes.FormData, Blob: re.classes.Blob},\n            validateStatus: function (e) {\n                return e >= 200 && e < 300\n            },\n            headers: {common: {Accept: \"application/json, text/plain, */*\"}}\n        };\n        q.forEach([\"delete\", \"get\", \"head\"], (function (e) {\n            ae.headers[e] = {}\n        })), q.forEach([\"post\", \"put\", \"patch\"], (function (e) {\n            ae.headers[e] = q.merge(ie)\n        }));\n        var se = ae,\n            ue = q.toObjectSet([\"age\", \"authorization\", \"content-length\", \"content-type\", \"etag\", \"expires\", \"from\", \"host\", \"if-modified-since\", \"if-unmodified-since\", \"last-modified\", \"location\", \"max-forwards\", \"proxy-authorization\", \"referer\", \"retry-after\", \"user-agent\"]),\n            ce = Symbol(\"internals\");\n\n        function fe(e) {\n            return e && String(e).trim().toLowerCase()\n        }\n\n        function le(e) {\n            return !1 === e || null == e ? e : q.isArray(e) ? e.map(le) : String(e)\n        }\n\n        function de(e, t, n, r, o) {\n            return q.isFunction(r) ? r.call(this, t, n) : (o && (t = n), q.isString(t) ? q.isString(r) ? -1 !== t.indexOf(r) : q.isRegExp(r) ? r.test(t) : void 0 : void 0)\n        }\n\n        var pe = function (e, n) {\n            function i(e) {\n                t(this, i), e && this.set(e)\n            }\n\n            return r(i, [{\n                key: \"set\", value: function (e, t, n) {\n                    var r = this;\n\n                    function o(e, t, n) {\n                        var o = fe(t);\n                        if (!o) throw new Error(\"header name must be a non-empty string\");\n                        var i = q.findKey(r, o);\n                        (!i || void 0 === r[i] || !0 === n || void 0 === n && !1 !== r[i]) && (r[i || t] = le(e))\n                    }\n\n                    var i, a, s, u, c, f = function (e, t) {\n                        return q.forEach(e, (function (e, n) {\n                            return o(e, n, t)\n                        }))\n                    };\n                    return q.isPlainObject(e) || e instanceof this.constructor ? f(e, t) : q.isString(e) && (e = e.trim()) && !/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()) ? f((c = {}, (i = e) && i.split(\"\\n\").forEach((function (e) {\n                        u = e.indexOf(\":\"), a = e.substring(0, u).trim().toLowerCase(), s = e.substring(u + 1).trim(), !a || c[a] && ue[a] || (\"set-cookie\" === a ? c[a] ? c[a].push(s) : c[a] = [s] : c[a] = c[a] ? c[a] + \", \" + s : s)\n                    })), c), t) : null != e && o(t, e, n), this\n                }\n            }, {\n                key: \"get\", value: function (e, t) {\n                    if (e = fe(e)) {\n                        var n = q.findKey(this, e);\n                        if (n) {\n                            var r = this[n];\n                            if (!t) return r;\n                            if (!0 === t) return function (e) {\n                                for (var t, n = Object.create(null), r = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g; t = r.exec(e);) n[t[1]] = t[2];\n                                return n\n                            }(r);\n                            if (q.isFunction(t)) return t.call(this, r, n);\n                            if (q.isRegExp(t)) return t.exec(r);\n                            throw new TypeError(\"parser must be boolean|regexp|function\")\n                        }\n                    }\n                }\n            }, {\n                key: \"has\", value: function (e, t) {\n                    if (e = fe(e)) {\n                        var n = q.findKey(this, e);\n                        return !(!n || void 0 === this[n] || t && !de(0, this[n], n, t))\n                    }\n                    return !1\n                }\n            }, {\n                key: \"delete\", value: function (e, t) {\n                    var n = this, r = !1;\n\n                    function o(e) {\n                        if (e = fe(e)) {\n                            var o = q.findKey(n, e);\n                            !o || t && !de(0, n[o], o, t) || (delete n[o], r = !0)\n                        }\n                    }\n\n                    return q.isArray(e) ? e.forEach(o) : o(e), r\n                }\n            }, {\n                key: \"clear\", value: function (e) {\n                    for (var t = Object.keys(this), n = t.length, r = !1; n--;) {\n                        var o = t[n];\n                        e && !de(0, this[o], o, e, !0) || (delete this[o], r = !0)\n                    }\n                    return r\n                }\n            }, {\n                key: \"normalize\", value: function (e) {\n                    var t = this, n = {};\n                    return q.forEach(this, (function (r, o) {\n                        var i = q.findKey(n, o);\n                        if (i) return t[i] = le(r), void delete t[o];\n                        var a = e ? function (e) {\n                            return e.trim().toLowerCase().replace(/([a-z\\d])(\\w*)/g, (function (e, t, n) {\n                                return t.toUpperCase() + n\n                            }))\n                        }(o) : String(o).trim();\n                        a !== o && delete t[o], t[a] = le(r), n[a] = !0\n                    })), this\n                }\n            }, {\n                key: \"concat\", value: function () {\n                    for (var e, t = arguments.length, n = new Array(t), r = 0; r < t; r++) n[r] = arguments[r];\n                    return (e = this.constructor).concat.apply(e, [this].concat(n))\n                }\n            }, {\n                key: \"toJSON\", value: function (e) {\n                    var t = Object.create(null);\n                    return q.forEach(this, (function (n, r) {\n                        null != n && !1 !== n && (t[r] = e && q.isArray(n) ? n.join(\", \") : n)\n                    })), t\n                }\n            }, {\n                key: Symbol.iterator, value: function () {\n                    return Object.entries(this.toJSON())[Symbol.iterator]()\n                }\n            }, {\n                key: \"toString\", value: function () {\n                    return Object.entries(this.toJSON()).map((function (e) {\n                        var t = o(e, 2);\n                        return t[0] + \": \" + t[1]\n                    })).join(\"\\n\")\n                }\n            }, {\n                key: Symbol.toStringTag, get: function () {\n                    return \"AxiosHeaders\"\n                }\n            }], [{\n                key: \"from\", value: function (e) {\n                    return e instanceof this ? e : new this(e)\n                }\n            }, {\n                key: \"concat\", value: function (e) {\n                    for (var t = new this(e), n = arguments.length, r = new Array(n > 1 ? n - 1 : 0), o = 1; o < n; o++) r[o - 1] = arguments[o];\n                    return r.forEach((function (e) {\n                        return t.set(e)\n                    })), t\n                }\n            }, {\n                key: \"accessor\", value: function (e) {\n                    var t = (this[ce] = this[ce] = {accessors: {}}).accessors, n = this.prototype;\n\n                    function r(e) {\n                        var r = fe(e);\n                        t[r] || (!function (e, t) {\n                            var n = q.toCamelCase(\" \" + t);\n                            [\"get\", \"set\", \"has\"].forEach((function (r) {\n                                Object.defineProperty(e, r + n, {\n                                    value: function (e, n, o) {\n                                        return this[r].call(this, t, e, n, o)\n                                    }, configurable: !0\n                                })\n                            }))\n                        }(n, e), t[r] = !0)\n                    }\n\n                    return q.isArray(e) ? e.forEach(r) : r(e), this\n                }\n            }]), i\n        }();\n        pe.accessor([\"Content-Type\", \"Content-Length\", \"Accept\", \"Accept-Encoding\", \"User-Agent\", \"Authorization\"]), q.freezeMethods(pe.prototype), q.freezeMethods(pe);\n        var he = pe;\n\n        function me(e, t) {\n            var n = this || se, r = t || n, o = he.from(r.headers), i = r.data;\n            return q.forEach(e, (function (e) {\n                i = e.call(n, i, o.normalize(), t ? t.status : void 0)\n            })), o.normalize(), i\n        }\n\n        function ye(e) {\n            return !(!e || !e.__CANCEL__)\n        }\n\n        function ve(e, t, n) {\n            M.call(this, null == e ? \"canceled\" : e, M.ERR_CANCELED, t, n), this.name = \"CanceledError\"\n        }\n\n        q.inherits(ve, M, {__CANCEL__: !0});\n        var be = re.isStandardBrowserEnv ? {\n            write: function (e, t, n, r, o, i) {\n                var a = [];\n                a.push(e + \"=\" + encodeURIComponent(t)), q.isNumber(n) && a.push(\"expires=\" + new Date(n).toGMTString()), q.isString(r) && a.push(\"path=\" + r), q.isString(o) && a.push(\"domain=\" + o), !0 === i && a.push(\"secure\"), document.cookie = a.join(\"; \")\n            }, read: function (e) {\n                var t = document.cookie.match(new RegExp(\"(^|;\\\\s*)(\" + e + \")=([^;]*)\"));\n                return t ? decodeURIComponent(t[3]) : null\n            }, remove: function (e) {\n                this.write(e, \"\", Date.now() - 864e5)\n            }\n        } : {\n            write: function () {\n            }, read: function () {\n                return null\n            }, remove: function () {\n            }\n        };\n\n        function ge(e, t) {\n            return e && !/^([a-z][a-z\\d+\\-.]*:)?\\/\\//i.test(t) ? function (e, t) {\n                return t ? e.replace(/\\/+$/, \"\") + \"/\" + t.replace(/^\\/+/, \"\") : e\n            }(e, t) : t\n        }\n\n        var we = re.isStandardBrowserEnv ? function () {\n            var e, t = /(msie|trident)/i.test(navigator.userAgent), n = document.createElement(\"a\");\n\n            function r(e) {\n                var r = e;\n                return t && (n.setAttribute(\"href\", r), r = n.href), n.setAttribute(\"href\", r), {\n                    href: n.href,\n                    protocol: n.protocol ? n.protocol.replace(/:$/, \"\") : \"\",\n                    host: n.host,\n                    search: n.search ? n.search.replace(/^\\?/, \"\") : \"\",\n                    hash: n.hash ? n.hash.replace(/^#/, \"\") : \"\",\n                    hostname: n.hostname,\n                    port: n.port,\n                    pathname: \"/\" === n.pathname.charAt(0) ? n.pathname : \"/\" + n.pathname\n                }\n            }\n\n            return e = r(window.location.href), function (t) {\n                var n = q.isString(t) ? r(t) : t;\n                return n.protocol === e.protocol && n.host === e.host\n            }\n        }() : function () {\n            return !0\n        };\n\n        function Ee(e, t) {\n            var n = 0, r = function (e, t) {\n                e = e || 10;\n                var n, r = new Array(e), o = new Array(e), i = 0, a = 0;\n                return t = void 0 !== t ? t : 1e3, function (s) {\n                    var u = Date.now(), c = o[a];\n                    n || (n = u), r[i] = s, o[i] = u;\n                    for (var f = a, l = 0; f !== i;) l += r[f++], f %= e;\n                    if ((i = (i + 1) % e) === a && (a = (a + 1) % e), !(u - n < t)) {\n                        var d = c && u - c;\n                        return d ? Math.round(1e3 * l / d) : void 0\n                    }\n                }\n            }(50, 250);\n            return function (o) {\n                var i = o.loaded, a = o.lengthComputable ? o.total : void 0, s = i - n, u = r(s);\n                n = i;\n                var c = {\n                    loaded: i,\n                    total: a,\n                    progress: a ? i / a : void 0,\n                    bytes: s,\n                    rate: u || void 0,\n                    estimated: u && a && i <= a ? (a - i) / u : void 0,\n                    event: o\n                };\n                c[t ? \"download\" : \"upload\"] = !0, e(c)\n            }\n        }\n\n        var Oe = {\n            http: null, xhr: \"undefined\" != typeof XMLHttpRequest && function (e) {\n                return new Promise((function (t, n) {\n                    var r, o = e.data, i = he.from(e.headers).normalize(), a = e.responseType;\n\n                    function s() {\n                        e.cancelToken && e.cancelToken.unsubscribe(r), e.signal && e.signal.removeEventListener(\"abort\", r)\n                    }\n\n                    q.isFormData(o) && (re.isStandardBrowserEnv || re.isStandardBrowserWebWorkerEnv ? i.setContentType(!1) : i.setContentType(\"multipart/form-data;\", !1));\n                    var u = new XMLHttpRequest;\n                    if (e.auth) {\n                        var c = e.auth.username || \"\",\n                            f = e.auth.password ? unescape(encodeURIComponent(e.auth.password)) : \"\";\n                        i.set(\"Authorization\", \"Basic \" + btoa(c + \":\" + f))\n                    }\n                    var l = ge(e.baseURL, e.url);\n\n                    function d() {\n                        if (u) {\n                            var r = he.from(\"getAllResponseHeaders\" in u && u.getAllResponseHeaders());\n                            !function (e, t, n) {\n                                var r = n.config.validateStatus;\n                                n.status && r && !r(n.status) ? t(new M(\"Request failed with status code \" + n.status, [M.ERR_BAD_REQUEST, M.ERR_BAD_RESPONSE][Math.floor(n.status / 100) - 4], n.config, n.request, n)) : e(n)\n                            }((function (e) {\n                                t(e), s()\n                            }), (function (e) {\n                                n(e), s()\n                            }), {\n                                data: a && \"text\" !== a && \"json\" !== a ? u.response : u.responseText,\n                                status: u.status,\n                                statusText: u.statusText,\n                                headers: r,\n                                config: e,\n                                request: u\n                            }), u = null\n                        }\n                    }\n\n                    if (u.open(e.method.toUpperCase(), Y(l, e.params, e.paramsSerializer), !0), u.timeout = e.timeout, \"onloadend\" in u ? u.onloadend = d : u.onreadystatechange = function () {\n                        u && 4 === u.readyState && (0 !== u.status || u.responseURL && 0 === u.responseURL.indexOf(\"file:\")) && setTimeout(d)\n                    }, u.onabort = function () {\n                        u && (n(new M(\"Request aborted\", M.ECONNABORTED, e, u)), u = null)\n                    }, u.onerror = function () {\n                        n(new M(\"Network Error\", M.ERR_NETWORK, e, u)), u = null\n                    }, u.ontimeout = function () {\n                        var t = e.timeout ? \"timeout of \" + e.timeout + \"ms exceeded\" : \"timeout exceeded\",\n                            r = e.transitional || ne;\n                        e.timeoutErrorMessage && (t = e.timeoutErrorMessage), n(new M(t, r.clarifyTimeoutError ? M.ETIMEDOUT : M.ECONNABORTED, e, u)), u = null\n                    }, re.isStandardBrowserEnv) {\n                        var p = (e.withCredentials || we(l)) && e.xsrfCookieName && be.read(e.xsrfCookieName);\n                        p && i.set(e.xsrfHeaderName, p)\n                    }\n                    void 0 === o && i.setContentType(null), \"setRequestHeader\" in u && q.forEach(i.toJSON(), (function (e, t) {\n                        u.setRequestHeader(t, e)\n                    })), q.isUndefined(e.withCredentials) || (u.withCredentials = !!e.withCredentials), a && \"json\" !== a && (u.responseType = e.responseType), \"function\" == typeof e.onDownloadProgress && u.addEventListener(\"progress\", Ee(e.onDownloadProgress, !0)), \"function\" == typeof e.onUploadProgress && u.upload && u.upload.addEventListener(\"progress\", Ee(e.onUploadProgress)), (e.cancelToken || e.signal) && (r = function (t) {\n                        u && (n(!t || t.type ? new ve(null, e, u) : t), u.abort(), u = null)\n                    }, e.cancelToken && e.cancelToken.subscribe(r), e.signal && (e.signal.aborted ? r() : e.signal.addEventListener(\"abort\", r)));\n                    var h, m = (h = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(l)) && h[1] || \"\";\n                    m && -1 === re.protocols.indexOf(m) ? n(new M(\"Unsupported protocol \" + m + \":\", M.ERR_BAD_REQUEST, e)) : u.send(o || null)\n                }))\n            }\n        };\n        q.forEach(Oe, (function (e, t) {\n            if (e) {\n                try {\n                    Object.defineProperty(e, \"name\", {value: t})\n                } catch (e) {\n                }\n                Object.defineProperty(e, \"adapterName\", {value: t})\n            }\n        }));\n        var Se = function (e) {\n            for (var t, n, r = (e = q.isArray(e) ? e : [e]).length, o = 0; o < r && (t = e[o], !(n = q.isString(t) ? Oe[t.toLowerCase()] : t)); o++) ;\n            if (!n) {\n                if (!1 === n) throw new M(\"Adapter \".concat(t, \" is not supported by the environment\"), \"ERR_NOT_SUPPORT\");\n                throw new Error(q.hasOwnProp(Oe, t) ? \"Adapter '\".concat(t, \"' is not available in the build\") : \"Unknown adapter '\".concat(t, \"'\"))\n            }\n            if (!q.isFunction(n)) throw new TypeError(\"adapter is not a function\");\n            return n\n        };\n\n        function Re(e) {\n            if (e.cancelToken && e.cancelToken.throwIfRequested(), e.signal && e.signal.aborted) throw new ve(null, e)\n        }\n\n        function Ae(e) {\n            return Re(e), e.headers = he.from(e.headers), e.data = me.call(e, e.transformRequest), -1 !== [\"post\", \"put\", \"patch\"].indexOf(e.method) && e.headers.setContentType(\"application/x-www-form-urlencoded\", !1), Se(e.adapter || se.adapter)(e).then((function (t) {\n                return Re(e), t.data = me.call(e, e.transformResponse, t), t.headers = he.from(t.headers), t\n            }), (function (t) {\n                return ye(t) || (Re(e), t && t.response && (t.response.data = me.call(e, e.transformResponse, t.response), t.response.headers = he.from(t.response.headers))), Promise.reject(t)\n            }))\n        }\n\n        var Te = function (e) {\n            return e instanceof he ? e.toJSON() : e\n        };\n\n        function je(e, t) {\n            t = t || {};\n            var n = {};\n\n            function r(e, t, n) {\n                return q.isPlainObject(e) && q.isPlainObject(t) ? q.merge.call({caseless: n}, e, t) : q.isPlainObject(t) ? q.merge({}, t) : q.isArray(t) ? t.slice() : t\n            }\n\n            function o(e, t, n) {\n                return q.isUndefined(t) ? q.isUndefined(e) ? void 0 : r(void 0, e, n) : r(e, t, n)\n            }\n\n            function i(e, t) {\n                if (!q.isUndefined(t)) return r(void 0, t)\n            }\n\n            function a(e, t) {\n                return q.isUndefined(t) ? q.isUndefined(e) ? void 0 : r(void 0, e) : r(void 0, t)\n            }\n\n            function s(n, o, i) {\n                return i in t ? r(n, o) : i in e ? r(void 0, n) : void 0\n            }\n\n            var u = {\n                url: i,\n                method: i,\n                data: i,\n                baseURL: a,\n                transformRequest: a,\n                transformResponse: a,\n                paramsSerializer: a,\n                timeout: a,\n                timeoutMessage: a,\n                withCredentials: a,\n                adapter: a,\n                responseType: a,\n                xsrfCookieName: a,\n                xsrfHeaderName: a,\n                onUploadProgress: a,\n                onDownloadProgress: a,\n                decompress: a,\n                maxContentLength: a,\n                maxBodyLength: a,\n                beforeRedirect: a,\n                transport: a,\n                httpAgent: a,\n                httpsAgent: a,\n                cancelToken: a,\n                socketPath: a,\n                responseEncoding: a,\n                validateStatus: s,\n                headers: function (e, t) {\n                    return o(Te(e), Te(t), !0)\n                }\n            };\n            return q.forEach(Object.keys(Object.assign({}, e, t)), (function (r) {\n                var i = u[r] || o, a = i(e[r], t[r], r);\n                q.isUndefined(a) && i !== s || (n[r] = a)\n            })), n\n        }\n\n        var Ne = \"1.4.0\", Ce = {};\n        [\"object\", \"boolean\", \"number\", \"function\", \"string\", \"symbol\"].forEach((function (t, n) {\n            Ce[t] = function (r) {\n                return e(r) === t || \"a\" + (n < 1 ? \"n \" : \" \") + t\n            }\n        }));\n        var xe = {};\n        Ce.transitional = function (e, t, n) {\n            function r(e, t) {\n                return \"[Axios v1.4.0] Transitional option '\" + e + \"'\" + t + (n ? \". \" + n : \"\")\n            }\n\n            return function (n, o, i) {\n                if (!1 === e) throw new M(r(o, \" has been removed\" + (t ? \" in \" + t : \"\")), M.ERR_DEPRECATED);\n                return t && !xe[o] && (xe[o] = !0, console.warn(r(o, \" has been deprecated since v\" + t + \" and will be removed in the near future\"))), !e || e(n, o, i)\n            }\n        };\n        var Pe = {\n            assertOptions: function (t, n, r) {\n                if (\"object\" !== e(t)) throw new M(\"options must be an object\", M.ERR_BAD_OPTION_VALUE);\n                for (var o = Object.keys(t), i = o.length; i-- > 0;) {\n                    var a = o[i], s = n[a];\n                    if (s) {\n                        var u = t[a], c = void 0 === u || s(u, a, t);\n                        if (!0 !== c) throw new M(\"option \" + a + \" must be \" + c, M.ERR_BAD_OPTION_VALUE)\n                    } else if (!0 !== r) throw new M(\"Unknown option \" + a, M.ERR_BAD_OPTION)\n                }\n            }, validators: Ce\n        }, ke = Pe.validators, Ue = function () {\n            function e(n) {\n                t(this, e), this.defaults = n, this.interceptors = {request: new te, response: new te}\n            }\n\n            return r(e, [{\n                key: \"request\", value: function (e, t) {\n                    \"string\" == typeof e ? (t = t || {}).url = e : t = e || {};\n                    var n, r = t = je(this.defaults, t), o = r.transitional, i = r.paramsSerializer, a = r.headers;\n                    void 0 !== o && Pe.assertOptions(o, {\n                        silentJSONParsing: ke.transitional(ke.boolean),\n                        forcedJSONParsing: ke.transitional(ke.boolean),\n                        clarifyTimeoutError: ke.transitional(ke.boolean)\n                    }, !1), null != i && (q.isFunction(i) ? t.paramsSerializer = {serialize: i} : Pe.assertOptions(i, {\n                        encode: ke.function,\n                        serialize: ke.function\n                    }, !0)), t.method = (t.method || this.defaults.method || \"get\").toLowerCase(), (n = a && q.merge(a.common, a[t.method])) && q.forEach([\"delete\", \"get\", \"head\", \"post\", \"put\", \"patch\", \"common\"], (function (e) {\n                        delete a[e]\n                    })), t.headers = he.concat(n, a);\n                    var s = [], u = !0;\n                    this.interceptors.request.forEach((function (e) {\n                        \"function\" == typeof e.runWhen && !1 === e.runWhen(t) || (u = u && e.synchronous, s.unshift(e.fulfilled, e.rejected))\n                    }));\n                    var c, f = [];\n                    this.interceptors.response.forEach((function (e) {\n                        f.push(e.fulfilled, e.rejected)\n                    }));\n                    var l, d = 0;\n                    if (!u) {\n                        var p = [Ae.bind(this), void 0];\n                        for (p.unshift.apply(p, s), p.push.apply(p, f), l = p.length, c = Promise.resolve(t); d < l;) c = c.then(p[d++], p[d++]);\n                        return c\n                    }\n                    l = s.length;\n                    var h = t;\n                    for (d = 0; d < l;) {\n                        var m = s[d++], y = s[d++];\n                        try {\n                            h = m(h)\n                        } catch (e) {\n                            y.call(this, e);\n                            break\n                        }\n                    }\n                    try {\n                        c = Ae.call(this, h)\n                    } catch (e) {\n                        return Promise.reject(e)\n                    }\n                    for (d = 0, l = f.length; d < l;) c = c.then(f[d++], f[d++]);\n                    return c\n                }\n            }, {\n                key: \"getUri\", value: function (e) {\n                    return Y(ge((e = je(this.defaults, e)).baseURL, e.url), e.params, e.paramsSerializer)\n                }\n            }]), e\n        }();\n        q.forEach([\"delete\", \"get\", \"head\", \"options\"], (function (e) {\n            Ue.prototype[e] = function (t, n) {\n                return this.request(je(n || {}, {method: e, url: t, data: (n || {}).data}))\n            }\n        })), q.forEach([\"post\", \"put\", \"patch\"], (function (e) {\n            function t(t) {\n                return function (n, r, o) {\n                    return this.request(je(o || {}, {\n                        method: e,\n                        headers: t ? {\"Content-Type\": \"multipart/form-data\"} : {},\n                        url: n,\n                        data: r\n                    }))\n                }\n            }\n\n            Ue.prototype[e] = t(), Ue.prototype[e + \"Form\"] = t(!0)\n        }));\n        var _e = Ue, Fe = function () {\n            function e(n) {\n                if (t(this, e), \"function\" != typeof n) throw new TypeError(\"executor must be a function.\");\n                var r;\n                this.promise = new Promise((function (e) {\n                    r = e\n                }));\n                var o = this;\n                this.promise.then((function (e) {\n                    if (o._listeners) {\n                        for (var t = o._listeners.length; t-- > 0;) o._listeners[t](e);\n                        o._listeners = null\n                    }\n                })), this.promise.then = function (e) {\n                    var t, n = new Promise((function (e) {\n                        o.subscribe(e), t = e\n                    })).then(e);\n                    return n.cancel = function () {\n                        o.unsubscribe(t)\n                    }, n\n                }, n((function (e, t, n) {\n                    o.reason || (o.reason = new ve(e, t, n), r(o.reason))\n                }))\n            }\n\n            return r(e, [{\n                key: \"throwIfRequested\", value: function () {\n                    if (this.reason) throw this.reason\n                }\n            }, {\n                key: \"subscribe\", value: function (e) {\n                    this.reason ? e(this.reason) : this._listeners ? this._listeners.push(e) : this._listeners = [e]\n                }\n            }, {\n                key: \"unsubscribe\", value: function (e) {\n                    if (this._listeners) {\n                        var t = this._listeners.indexOf(e);\n                        -1 !== t && this._listeners.splice(t, 1)\n                    }\n                }\n            }], [{\n                key: \"source\", value: function () {\n                    var t;\n                    return {\n                        token: new e((function (e) {\n                            t = e\n                        })), cancel: t\n                    }\n                }\n            }]), e\n        }();\n        var Be = {\n            Continue: 100,\n            SwitchingProtocols: 101,\n            Processing: 102,\n            EarlyHints: 103,\n            Ok: 200,\n            Created: 201,\n            Accepted: 202,\n            NonAuthoritativeInformation: 203,\n            NoContent: 204,\n            ResetContent: 205,\n            PartialContent: 206,\n            MultiStatus: 207,\n            AlreadyReported: 208,\n            ImUsed: 226,\n            MultipleChoices: 300,\n            MovedPermanently: 301,\n            Found: 302,\n            SeeOther: 303,\n            NotModified: 304,\n            UseProxy: 305,\n            Unused: 306,\n            TemporaryRedirect: 307,\n            PermanentRedirect: 308,\n            BadRequest: 400,\n            Unauthorized: 401,\n            PaymentRequired: 402,\n            Forbidden: 403,\n            NotFound: 404,\n            MethodNotAllowed: 405,\n            NotAcceptable: 406,\n            ProxyAuthenticationRequired: 407,\n            RequestTimeout: 408,\n            Conflict: 409,\n            Gone: 410,\n            LengthRequired: 411,\n            PreconditionFailed: 412,\n            PayloadTooLarge: 413,\n            UriTooLong: 414,\n            UnsupportedMediaType: 415,\n            RangeNotSatisfiable: 416,\n            ExpectationFailed: 417,\n            ImATeapot: 418,\n            MisdirectedRequest: 421,\n            UnprocessableEntity: 422,\n            Locked: 423,\n            FailedDependency: 424,\n            TooEarly: 425,\n            UpgradeRequired: 426,\n            PreconditionRequired: 428,\n            TooManyRequests: 429,\n            RequestHeaderFieldsTooLarge: 431,\n            UnavailableForLegalReasons: 451,\n            InternalServerError: 500,\n            NotImplemented: 501,\n            BadGateway: 502,\n            ServiceUnavailable: 503,\n            GatewayTimeout: 504,\n            HttpVersionNotSupported: 505,\n            VariantAlsoNegotiates: 506,\n            InsufficientStorage: 507,\n            LoopDetected: 508,\n            NotExtended: 510,\n            NetworkAuthenticationRequired: 511\n        };\n        Object.entries(Be).forEach((function (e) {\n            var t = o(e, 2), n = t[0], r = t[1];\n            Be[r] = n\n        }));\n        var Le = Be;\n        var De = function e(t) {\n            var n = new _e(t), r = a(_e.prototype.request, n);\n            return q.extend(r, _e.prototype, n, {allOwnKeys: !0}), q.extend(r, n, null, {allOwnKeys: !0}), r.create = function (n) {\n                return e(je(t, n))\n            }, r\n        }(se);\n        return De.Axios = _e, De.CanceledError = ve, De.CancelToken = Fe, De.isCancel = ye, De.VERSION = Ne, De.toFormData = G, De.AxiosError = M, De.Cancel = De.CanceledError, De.all = function (e) {\n            return Promise.all(e)\n        }, De.spread = function (e) {\n            return function (t) {\n                return e.apply(null, t)\n            }\n        }, De.isAxiosError = function (e) {\n            return q.isObject(e) && !0 === e.isAxiosError\n        }, De.mergeConfig = je, De.AxiosHeaders = he, De.formToJSON = function (e) {\n            return oe(q.isHTMLForm(e) ? new FormData(e) : e)\n        }, De.HttpStatusCode = Le, De.default = De, De\n    }));\n    return {\n        requestAction: function (me, action, config) {\n            // config.url = me.getOpt('serverUrl');\n            config.url = me.getActionUrl();\n            config.method = 'post';\n            config.params = config.params || {};\n            config.params = Object.assign(config.params, me.getOpt('serverparam'));\n            config.params.action = action;\n            return this.request(me, config);\n        },\n        request: function (me, config) {\n            config.headers = config.headers || {};\n            var customHeaders = me.getOpt('serverHeaders');\n            if (customHeaders) {\n                for (var key in customHeaders) {\n                    config.headers[key] = customHeaders[key];\n                }\n            }\n            return axios(config);\n        }\n    }\n})();\n"
  },
  {
    "path": "_src/core/browser.js",
    "content": "/**\n * 浏览器判断模块\n * @file\n * @module UE.browser\n * @since 1.2.6.1\n */\n\n/**\n * 提供浏览器检测的模块\n * @unfile\n * @module UE.browser\n */\nvar browser = (UE.browser = (function () {\n    var agent = navigator.userAgent.toLowerCase(),\n        opera = window.opera,\n        browser = {\n            /**\n             * @property {boolean} ie 检测当前浏览器是否为IE\n             * @example\n             * ```javascript\n             * if ( UE.browser.ie ) {\n             *     console.log( '当前浏览器是IE' );\n             * }\n             * ```\n             */\n            ie: /(msie\\s|trident.*rv:)([\\w.]+)/i.test(agent),\n\n            /**\n             * @property {boolean} opera 检测当前浏览器是否为Opera\n             * @example\n             * ```javascript\n             * if ( UE.browser.opera ) {\n             *     console.log( '当前浏览器是Opera' );\n             * }\n             * ```\n             */\n            opera: !!opera && opera.version,\n\n            /**\n             * @property {boolean} webkit 检测当前浏览器是否是webkit内核的浏览器\n             * @example\n             * ```javascript\n             * if ( UE.browser.webkit ) {\n             *     console.log( '当前浏览器是webkit内核浏览器' );\n             * }\n             * ```\n             */\n            webkit: agent.indexOf(\" applewebkit/\") > -1,\n\n            /**\n             * @property {boolean} mac 检测当前浏览器是否是运行在mac平台下\n             * @example\n             * ```javascript\n             * if ( UE.browser.mac ) {\n             *     console.log( '当前浏览器运行在mac平台下' );\n             * }\n             * ```\n             */\n            mac: agent.indexOf(\"macintosh\") > -1,\n\n            /**\n             * @property {boolean} quirks 检测当前浏览器是否处于“怪异模式”下\n             * @example\n             * ```javascript\n             * if ( UE.browser.quirks ) {\n             *     console.log( '当前浏览器运行处于“怪异模式”' );\n             * }\n             * ```\n             */\n            quirks: document.compatMode == \"BackCompat\"\n        };\n\n    /**\n     * @property {boolean} gecko 检测当前浏览器内核是否是gecko内核\n     * @example\n     * ```javascript\n     * if ( UE.browser.gecko ) {\n     *     console.log( '当前浏览器内核是gecko内核' );\n     * }\n     * ```\n     */\n    browser.gecko =\n        navigator.product == \"Gecko\" &&\n        !browser.webkit &&\n        !browser.opera &&\n        !browser.ie;\n\n    var version = 0;\n\n    // Internet Explorer 6.0+\n    if (browser.ie) {\n        var v1 = agent.match(/(?:msie\\s([\\w.]+))/);\n        var v2 = agent.match(/(?:trident.*rv:([\\w.]+))/);\n        if (v1 && v2 && v1[1] && v2[1]) {\n            version = Math.max(v1[1] * 1, v2[1] * 1);\n        } else if (v1 && v1[1]) {\n            version = v1[1] * 1;\n        } else if (v2 && v2[1]) {\n            version = v2[1] * 1;\n        } else {\n            version = 0;\n        }\n\n        browser.ie11Compat = document.documentMode == 11;\n        /**\n         * @property { boolean } ie9Compat 检测浏览器模式是否为 IE9 兼容模式\n         * @warning 如果浏览器不是IE， 则该值为undefined\n         * @example\n         * ```javascript\n         * if ( UE.browser.ie9Compat ) {\n         *     console.log( '当前浏览器运行在IE9兼容模式下' );\n         * }\n         * ```\n         */\n        browser.ie9Compat = document.documentMode == 9;\n\n        /**\n         * @property { boolean } ie8 检测浏览器是否是IE8浏览器\n         * @warning 如果浏览器不是IE， 则该值为undefined\n         * @example\n         * ```javascript\n         * if ( UE.browser.ie8 ) {\n         *     console.log( '当前浏览器是IE8浏览器' );\n         * }\n         * ```\n         */\n        browser.ie8 = !!document.documentMode;\n\n        /**\n         * @property { boolean } ie8Compat 检测浏览器模式是否为 IE8 兼容模式\n         * @warning 如果浏览器不是IE， 则该值为undefined\n         * @example\n         * ```javascript\n         * if ( UE.browser.ie8Compat ) {\n         *     console.log( '当前浏览器运行在IE8兼容模式下' );\n         * }\n         * ```\n         */\n        browser.ie8Compat = document.documentMode == 8;\n\n        /**\n         * @property { boolean } ie7Compat 检测浏览器模式是否为 IE7 兼容模式\n         * @warning 如果浏览器不是IE， 则该值为undefined\n         * @example\n         * ```javascript\n         * if ( UE.browser.ie7Compat ) {\n         *     console.log( '当前浏览器运行在IE7兼容模式下' );\n         * }\n         * ```\n         */\n        browser.ie7Compat =\n            (version == 7 && !document.documentMode) || document.documentMode == 7;\n\n        /**\n         * @property { boolean } ie6Compat 检测浏览器模式是否为 IE6 模式 或者怪异模式\n         * @warning 如果浏览器不是IE， 则该值为undefined\n         * @example\n         * ```javascript\n         * if ( UE.browser.ie6Compat ) {\n         *     console.log( '当前浏览器运行在IE6模式或者怪异模式下' );\n         * }\n         * ```\n         */\n        browser.ie6Compat = version < 7 || browser.quirks;\n\n        browser.ie9above = version > 8;\n\n        browser.ie9below = version < 9;\n\n        browser.ie11above = version > 10;\n\n        browser.ie11below = version < 11;\n    }\n\n    // Gecko.\n    if (browser.gecko) {\n        var geckoRelease = agent.match(/rv:([\\d\\.]+)/);\n        if (geckoRelease) {\n            geckoRelease = geckoRelease[1].split(\".\");\n            version =\n                geckoRelease[0] * 10000 +\n                (geckoRelease[1] || 0) * 100 +\n                (geckoRelease[2] || 0) * 1;\n        }\n    }\n\n    /**\n     * @property { Number } chrome 检测当前浏览器是否为Chrome, 如果是，则返回Chrome的大版本号\n     * @warning 如果浏览器不是chrome， 则该值为undefined\n     * @example\n     * ```javascript\n     * if ( UE.browser.chrome ) {\n     *     console.log( '当前浏览器是Chrome' );\n     * }\n     * ```\n     */\n    if (/chrome\\/(\\d+\\.\\d)/i.test(agent)) {\n        browser.chrome = +RegExp[\"\\x241\"];\n    }\n\n    /**\n     * @property { Number } safari 检测当前浏览器是否为Safari, 如果是，则返回Safari的大版本号\n     * @warning 如果浏览器不是safari， 则该值为undefined\n     * @example\n     * ```javascript\n     * if ( UE.browser.safari ) {\n     *     console.log( '当前浏览器是Safari' );\n     * }\n     * ```\n     */\n    if (\n        /(\\d+\\.\\d)?(?:\\.\\d)?\\s+safari\\/?(\\d+\\.\\d+)?/i.test(agent) &&\n        !/chrome/i.test(agent)\n    ) {\n        browser.safari = +(RegExp[\"\\x241\"] || RegExp[\"\\x242\"]);\n    }\n\n    // Opera 9.50+\n    if (browser.opera) version = parseFloat(opera.version());\n\n    // WebKit 522+ (Safari 3+)\n    if (browser.webkit)\n        version = parseFloat(agent.match(/ applewebkit\\/(\\d+)/)[1]);\n\n    /**\n     * @property { Number } version 检测当前浏览器版本号\n     * @remind\n     * <ul>\n     *     <li>IE系列返回值为5,6,7,8,9,10等</li>\n     *     <li>gecko系列会返回10900，158900等</li>\n     *     <li>webkit系列会返回其build号 (如 522等)</li>\n     * </ul>\n     * @example\n     * ```javascript\n     * console.log( '当前浏览器版本号是： ' + UE.browser.version );\n     * ```\n     */\n    browser.version = version;\n\n    /**\n     * @property { boolean } isCompatible 检测当前浏览器是否能够与UEditor良好兼容\n     * @example\n     * ```javascript\n     * if ( UE.browser.isCompatible ) {\n     *     console.log( '浏览器与UEditor能够良好兼容' );\n     * }\n     * ```\n     */\n    browser.isCompatible =\n        !browser.mobile &&\n        ((browser.ie && version >= 6) ||\n            (browser.gecko && version >= 10801) ||\n            (browser.opera && version >= 9.5) ||\n            (browser.air && version >= 1) ||\n            (browser.webkit && version >= 522) ||\n            false);\n    return browser;\n})());\n//快捷方式\nvar ie = browser.ie,\n    webkit = browser.webkit,\n    gecko = browser.gecko,\n    opera = browser.opera;\n"
  },
  {
    "path": "_src/core/dialog.js",
    "content": "UE.dialog = (function () {\n    return {\n        loadingPlaceholder: function (me) {\n            var loadingId = \"loading_\" + (+new Date()).toString(36);\n            me.focus();\n            me.execCommand(\n                \"inserthtml\",\n                '<img class=\"uep-loading\" id=\"' +\n                loadingId +\n                '\" src=\"' +\n                me.options.themePath +\n                me.options.theme +\n                '/images/spacer.gif\">'\n            );\n            return loadingId;\n        },\n        removeLoadingPlaceholder: function (me, loadingId) {\n            var loader = me.document.getElementById(loadingId);\n            if (loader) {\n                domUtils.remove(loader, false);\n            }\n        },\n        tipError: function (me, title) {\n            me.fireEvent(\"showmessage\", {\n                content: title,\n                type: \"error\",\n                timeout: 4000\n            });\n        }\n    }\n})();\n"
  },
  {
    "path": "_src/core/domUtils.js",
    "content": "/**\n * Dom操作工具包\n * @file\n * @module UE.dom.domUtils\n * @since 1.2.6.1\n */\n\n/**\n * Dom操作工具包\n * @unfile\n * @module UE.dom.domUtils\n */\nfunction getDomNode(node, start, ltr, startFromChild, fn, guard) {\n    var tmpNode = startFromChild && node[start],\n        parent;\n    !tmpNode && (tmpNode = node[ltr]);\n    while (!tmpNode && (parent = (parent || node).parentNode)) {\n        if (parent.tagName == \"BODY\" || (guard && !guard(parent))) {\n            return null;\n        }\n        tmpNode = parent[ltr];\n    }\n    if (tmpNode && fn && !fn(tmpNode)) {\n        return getDomNode(tmpNode, start, ltr, false, fn);\n    }\n    return tmpNode;\n}\n\nvar attrFix = ie && browser.version < 9\n    ? {\n        tabindex: \"tabIndex\",\n        readonly: \"readOnly\",\n        for: \"htmlFor\",\n        class: \"className\",\n        maxlength: \"maxLength\",\n        cellspacing: \"cellSpacing\",\n        cellpadding: \"cellPadding\",\n        rowspan: \"rowSpan\",\n        colspan: \"colSpan\",\n        usemap: \"useMap\",\n        frameborder: \"frameBorder\"\n    }\n    : {\n        tabindex: \"tabIndex\",\n        readonly: \"readOnly\"\n    },\n    styleBlock = utils.listToMap([\n        \"-webkit-box\",\n        \"-moz-box\",\n        \"block\",\n        \"list-item\",\n        \"table\",\n        \"table-row-group\",\n        \"table-header-group\",\n        \"table-footer-group\",\n        \"table-row\",\n        \"table-column-group\",\n        \"table-column\",\n        \"table-cell\",\n        \"table-caption\"\n    ]);\nvar domUtils = (dom.domUtils = {\n    //节点常量\n    NODE_ELEMENT: 1,\n    NODE_DOCUMENT: 9,\n    NODE_TEXT: 3,\n    NODE_COMMENT: 8,\n    NODE_DOCUMENT_FRAGMENT: 11,\n\n    //位置关系\n    POSITION_IDENTICAL: 0,\n    POSITION_DISCONNECTED: 1,\n    POSITION_FOLLOWING: 2,\n    POSITION_PRECEDING: 4,\n    POSITION_IS_CONTAINED: 8,\n    POSITION_CONTAINS: 16,\n    //ie6使用其他的会有一段空白出现\n    fillChar: ie && browser.version === \"6\" ? \"\\ufeff\" : \"\\u200B\",\n    //-------------------------Node部分--------------------------------\n    keys: {\n        /*Backspace*/ 8: 1,\n        /*Delete*/ 46: 1,\n        /*Shift*/ 16: 1,\n        /*Ctrl*/ 17: 1,\n        /*Alt*/ 18: 1,\n        37: 1,\n        38: 1,\n        39: 1,\n        40: 1,\n        13: 1 /*enter*/\n    },\n    /**\n     * 获取节点A相对于节点B的位置关系\n     * @method getPosition\n     * @param { Node } nodeA 需要查询位置关系的节点A\n     * @param { Node } nodeB 需要查询位置关系的节点B\n     * @return { Number } 节点A与节点B的关系\n     * @example\n     * ```javascript\n     * //output: 20\n     * var position = UE.dom.domUtils.getPosition( document.documentElement, document.body );\n     *\n     * switch ( position ) {\n     *\n     *      //0\n     *      case UE.dom.domUtils.POSITION_IDENTICAL:\n     *          console.log('元素相同');\n     *          break;\n     *      //1\n     *      case UE.dom.domUtils.POSITION_DISCONNECTED:\n     *          console.log('两个节点在不同的文档中');\n     *          break;\n     *      //2\n     *      case UE.dom.domUtils.POSITION_FOLLOWING:\n     *          console.log('节点A在节点B之后');\n     *          break;\n     *      //4\n     *      case UE.dom.domUtils.POSITION_PRECEDING;\n     *          console.log('节点A在节点B之前');\n     *          break;\n     *      //8\n     *      case UE.dom.domUtils.POSITION_IS_CONTAINED:\n     *          console.log('节点A被节点B包含');\n     *          break;\n     *      case 10:\n     *          console.log('节点A被节点B包含且节点A在节点B之后');\n     *          break;\n     *      //16\n     *      case UE.dom.domUtils.POSITION_CONTAINS:\n     *          console.log('节点A包含节点B');\n     *          break;\n     *      case 20:\n     *          console.log('节点A包含节点B且节点A在节点B之前');\n     *          break;\n     *\n     * }\n     * ```\n     */\n    getPosition: function (nodeA, nodeB) {\n        // 如果两个节点是同一个节点\n        if (nodeA === nodeB) {\n            // domUtils.POSITION_IDENTICAL\n            return 0;\n        }\n        var node,\n            parentsA = [nodeA],\n            parentsB = [nodeB];\n        node = nodeA;\n        while ((node = node.parentNode)) {\n            // 如果nodeB是nodeA的祖先节点\n            if (node === nodeB) {\n                // domUtils.POSITION_IS_CONTAINED + domUtils.POSITION_FOLLOWING\n                return 10;\n            }\n            parentsA.push(node);\n        }\n        node = nodeB;\n        while ((node = node.parentNode)) {\n            // 如果nodeA是nodeB的祖先节点\n            if (node === nodeA) {\n                // domUtils.POSITION_CONTAINS + domUtils.POSITION_PRECEDING\n                return 20;\n            }\n            parentsB.push(node);\n        }\n        parentsA.reverse();\n        parentsB.reverse();\n        if (parentsA[0] !== parentsB[0]) {\n            // domUtils.POSITION_DISCONNECTED\n            return 1;\n        }\n        var i = -1;\n        while ((i++, parentsA[i] === parentsB[i])) {\n        }\n        nodeA = parentsA[i];\n        nodeB = parentsB[i];\n        while ((nodeA = nodeA.nextSibling)) {\n            if (nodeA === nodeB) {\n                // domUtils.POSITION_PRECEDING\n                return 4;\n            }\n        }\n        // domUtils.POSITION_FOLLOWING\n        return 2;\n    },\n\n    /**\n     * 检测节点node在父节点中的索引位置\n     * @method getNodeIndex\n     * @param { Node } node 需要检测的节点对象\n     * @return { Number } 该节点在父节点中的位置\n     * @see UE.dom.domUtils.getNodeIndex(Node,Boolean)\n     */\n\n    /**\n     * 检测节点node在父节点中的索引位置， 根据给定的mergeTextNode参数决定是否要合并多个连续的文本节点为一个节点\n     * @method getNodeIndex\n     * @param { Node } node 需要检测的节点对象\n     * @param { Boolean } mergeTextNode 是否合并多个连续的文本节点为一个节点\n     * @return { Number } 该节点在父节点中的位置\n     * @example\n     * ```javascript\n     *\n     *      var node = document.createElement(\"div\");\n     *\n     *      node.appendChild( document.createTextNode( \"hello\" ) );\n     *      node.appendChild( document.createTextNode( \"world\" ) );\n     *      node.appendChild( node = document.createElement( \"div\" ) );\n     *\n     *      //output: 2\n     *      console.log( UE.dom.domUtils.getNodeIndex( node ) );\n     *\n     *      //output: 1\n     *      console.log( UE.dom.domUtils.getNodeIndex( node, true ) );\n     *\n     * ```\n     */\n    getNodeIndex: function (node, ignoreTextNode) {\n        var preNode = node,\n            i = 0;\n        while ((preNode = preNode.previousSibling)) {\n            if (ignoreTextNode && preNode.nodeType == 3) {\n                if (preNode.nodeType != preNode.nextSibling.nodeType) {\n                    i++;\n                }\n                continue;\n            }\n            i++;\n        }\n        return i;\n    },\n\n    /**\n     * 检测节点node是否在给定的document对象上\n     * @method inDoc\n     * @param { Node } node 需要检测的节点对象\n     * @param { DomDocument } doc 需要检测的document对象\n     * @return { Boolean } 该节点node是否在给定的document的dom树上\n     * @example\n     * ```javascript\n     *\n     * var node = document.createElement(\"div\");\n     *\n     * //output: false\n     * console.log( UE.do.domUtils.inDoc( node, document ) );\n     *\n     * document.body.appendChild( node );\n     *\n     * //output: true\n     * console.log( UE.do.domUtils.inDoc( node, document ) );\n     *\n     * ```\n     */\n    inDoc: function (node, doc) {\n        return domUtils.getPosition(node, doc) === 10;\n    },\n    /**\n     * 根据给定的过滤规则filterFn， 查找符合该过滤规则的node节点的第一个祖先节点，\n     * 查找的起点是给定node节点的父节点。\n     * @method findParent\n     * @param { Node } node 需要查找的节点\n     * @param { Function } filterFn 自定义的过滤方法。\n     * @warning 查找的终点是到body节点为止\n     * @remind 自定义的过滤方法filterFn接受一个Node对象作为参数， 该对象代表当前执行检测的祖先节点。 如果该\n     *          节点满足过滤条件， 则要求返回true， 这时将直接返回该节点作为findParent()的结果， 否则， 请返回false。\n     * @return { Node | Null } 如果找到符合过滤条件的节点， 就返回该节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var filterNode = UE.dom.domUtils.findParent( document.body.firstChild, function ( node ) {\n     *\n     *     //由于查找的终点是body节点， 所以永远也不会匹配当前过滤器的条件， 即这里永远会返回false\n     *     return node.tagName === \"HTML\";\n     *\n     * } );\n     *\n     * //output: true\n     * console.log( filterNode === null );\n     * ```\n     */\n\n    /**\n     * 根据给定的过滤规则filterFn， 查找符合该过滤规则的node节点的第一个祖先节点，\n     * 如果includeSelf的值为true，则查找的起点是给定的节点node， 否则， 起点是node的父节点\n     * @method findParent\n     * @param { Node } node 需要查找的节点\n     * @param { Function } filterFn 自定义的过滤方法。\n     * @param { Boolean } includeSelf 查找过程是否包含自身\n     * @warning 查找的终点是到body节点为止\n     * @remind 自定义的过滤方法filterFn接受一个Node对象作为参数， 该对象代表当前执行检测的祖先节点。 如果该\n     *          节点满足过滤条件， 则要求返回true， 这时将直接返回该节点作为findParent()的结果， 否则， 请返回false。\n     * @remind 如果includeSelf为true， 则过滤器第一次执行时的参数会是节点本身。\n     *          反之， 过滤器第一次执行时的参数将是该节点的父节点。\n     * @return { Node | Null } 如果找到符合过滤条件的节点， 就返回该节点， 否则返回NULL\n     * @example\n     * ```html\n     * <body>\n     *\n     *      <div id=\"test\">\n     *      </div>\n     *\n     *      <script type=\"text/javascript\">\n     *\n     *          //output: DIV, BODY\n     *          var filterNode = UE.dom.domUtils.findParent( document.getElementById( \"test\" ), function ( node ) {\n     *\n     *              console.log( node.tagName );\n     *              return false;\n     *\n     *          }, true );\n     *\n     *      </script>\n     * </body>\n     * ```\n     */\n    findParent: function (node, filterFn, includeSelf) {\n        if (node && !domUtils.isBody(node)) {\n            node = includeSelf ? node : node.parentNode;\n            while (node) {\n                if (!filterFn || filterFn(node) || domUtils.isBody(node)) {\n                    return filterFn && !filterFn(node) && domUtils.isBody(node)\n                        ? null\n                        : node;\n                }\n                node = node.parentNode;\n            }\n        }\n        return null;\n    },\n    /**\n     * 查找node的节点名为tagName的第一个祖先节点， 查找的起点是node节点的父节点。\n     * @method findParentByTagName\n     * @param { Node } node 需要查找的节点对象\n     * @param { Array } tagNames 需要查找的父节点的名称数组\n     * @warning 查找的终点是到body节点为止\n     * @return { Node | NULL } 如果找到符合条件的节点， 则返回该节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var node = UE.dom.domUtils.findParentByTagName( document.getElementsByTagName(\"div\")[0], [ \"BODY\" ] );\n     * //output: BODY\n     * console.log( node.tagName );\n     * ```\n     */\n\n    /**\n     * 查找node的节点名为tagName的祖先节点， 如果includeSelf的值为true，则查找的起点是给定的节点node，\n     * 否则， 起点是node的父节点。\n     * @method findParentByTagName\n     * @param { Node } node 需要查找的节点对象\n     * @param { Array } tagNames 需要查找的父节点的名称数组\n     * @param { Boolean } includeSelf 查找过程是否包含node节点自身\n     * @warning 查找的终点是到body节点为止\n     * @return { Node | NULL } 如果找到符合条件的节点， 则返回该节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var queryTarget = document.getElementsByTagName(\"div\")[0];\n     * var node = UE.dom.domUtils.findParentByTagName( queryTarget, [ \"DIV\" ], true );\n     * //output: true\n     * console.log( queryTarget === node );\n     * ```\n     */\n    findParentByTagName: function (node, tagNames, includeSelf, excludeFn) {\n        tagNames = utils.listToMap(utils.isArray(tagNames) ? tagNames : [tagNames]);\n        return domUtils.findParent(\n            node,\n            function (node) {\n                return tagNames[node.tagName] && !(excludeFn && excludeFn(node));\n            },\n            includeSelf\n        );\n    },\n    /**\n     * 查找节点node的祖先节点集合， 查找的起点是给定节点的父节点，结果集中不包含给定的节点。\n     * @method findParents\n     * @param { Node } node 需要查找的节点对象\n     * @return { Array } 给定节点的祖先节点数组\n     * @grammar UE.dom.domUtils.findParents(node)  => Array  //返回一个祖先节点数组集合，不包含自身\n     * @grammar UE.dom.domUtils.findParents(node,includeSelf)  => Array  //返回一个祖先节点数组集合，includeSelf指定是否包含自身\n     * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn)  => Array  //返回一个祖先节点数组集合，filterFn指定过滤条件，返回true的node将被选取\n     * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn,closerFirst)  => Array  //返回一个祖先节点数组集合，closerFirst为true的话，node的直接父亲节点是数组的第0个\n     */\n\n    /**\n     * 查找节点node的祖先节点集合， 如果includeSelf的值为true，\n     * 则返回的结果集中允许出现当前给定的节点， 否则， 该节点不会出现在其结果集中。\n     * @method findParents\n     * @param { Node } node 需要查找的节点对象\n     * @param { Boolean } includeSelf 查找的结果中是否允许包含当前查找的节点对象\n     * @return { Array } 给定节点的祖先节点数组\n     */\n    findParents: function (node, includeSelf, filterFn, closerFirst) {\n        var parents = includeSelf && ((filterFn && filterFn(node)) || !filterFn)\n            ? [node]\n            : [];\n        while ((node = domUtils.findParent(node, filterFn))) {\n            parents.push(node);\n        }\n        return closerFirst ? parents : parents.reverse();\n    },\n\n    /**\n     * 在节点node后面插入新节点newNode\n     * @method insertAfter\n     * @param { Node } node 目标节点\n     * @param { Node } newNode 新插入的节点， 该节点将置于目标节点之后\n     * @return { Node } 新插入的节点\n     */\n    insertAfter: function (node, newNode) {\n        return node.nextSibling\n            ? node.parentNode.insertBefore(newNode, node.nextSibling)\n            : node.parentNode.appendChild(newNode);\n    },\n\n    /**\n     * 删除节点node及其下属的所有节点\n     * @method remove\n     * @param { Node } node 需要删除的节点对象\n     * @return { Node } 返回刚删除的节点对象\n     * @example\n     * ```html\n     * <div id=\"test\">\n     *     <div id=\"child\">你好</div>\n     * </div>\n     * <script>\n     *     UE.dom.domUtils.remove( document.body, false );\n     *     //output: false\n     *     console.log( document.getElementById( \"child\" ) !== null );\n     * </script>\n     * ```\n     */\n\n    /**\n     * 删除节点node，并根据keepChildren的值决定是否保留子节点\n     * @method remove\n     * @param { Node } node 需要删除的节点对象\n     * @param { Boolean } keepChildren 是否需要保留子节点\n     * @return { Node } 返回刚删除的节点对象\n     * @example\n     * ```html\n     * <div id=\"test\">\n     *     <div id=\"child\">你好</div>\n     * </div>\n     * <script>\n     *     UE.dom.domUtils.remove( document.body, true );\n     *     //output: true\n     *     console.log( document.getElementById( \"child\" ) !== null );\n     * </script>\n     * ```\n     */\n    remove: function (node, keepChildren) {\n        var parent = node.parentNode,\n            child;\n        if (parent) {\n            if (keepChildren && node.hasChildNodes()) {\n                while ((child = node.firstChild)) {\n                    parent.insertBefore(child, node);\n                }\n            }\n            parent.removeChild(node);\n        }\n        return node;\n    },\n\n    /**\n     * 取得node节点的下一个兄弟节点， 如果该节点其后没有兄弟节点， 则递归查找其父节点之后的第一个兄弟节点，\n     * 直到找到满足条件的节点或者递归到BODY节点之后才会结束。\n     * @method getNextDomNode\n     * @param { Node } node 需要获取其后的兄弟节点的节点对象\n     * @return { Node | NULL } 如果找满足条件的节点， 则返回该节点， 否则返回NULL\n     * @example\n     * ```html\n     *     <body>\n     *      <div id=\"test\">\n     *          <span></span>\n     *      </div>\n     *      <i>xxx</i>\n     * </body>\n     * <script>\n     *\n     *     //output: i节点\n     *     console.log( UE.dom.domUtils.getNextDomNode( document.getElementById( \"test\" ) ) );\n     *\n     * </script>\n     * ```\n     * @example\n     * ```html\n     * <body>\n     *      <div>\n     *          <span></span>\n     *          <i id=\"test\">xxx</i>\n     *      </div>\n     *      <b>xxx</b>\n     * </body>\n     * <script>\n     *\n     *     //由于id为test的i节点之后没有兄弟节点， 则查找其父节点（div）后面的兄弟节点\n     *     //output: b节点\n     *     console.log( UE.dom.domUtils.getNextDomNode( document.getElementById( \"test\" ) ) );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 取得node节点的下一个兄弟节点， 如果startFromChild的值为ture，则先获取其子节点，\n     * 如果有子节点则直接返回第一个子节点；如果没有子节点或者startFromChild的值为false，\n     * 则执行<a href=\"#UE.dom.domUtils.getNextDomNode(Node)\">getNextDomNode(Node node)</a>的查找过程。\n     * @method getNextDomNode\n     * @param { Node } node 需要获取其后的兄弟节点的节点对象\n     * @param { Boolean } startFromChild 查找过程是否从其子节点开始\n     * @return { Node | NULL } 如果找满足条件的节点， 则返回该节点， 否则返回NULL\n     * @see UE.dom.domUtils.getNextDomNode(Node)\n     */\n    getNextDomNode: function (node, startFromChild, filterFn, guard) {\n        return getDomNode(\n            node,\n            \"firstChild\",\n            \"nextSibling\",\n            startFromChild,\n            filterFn,\n            guard\n        );\n    },\n    getPreDomNode: function (node, startFromChild, filterFn, guard) {\n        return getDomNode(\n            node,\n            \"lastChild\",\n            \"previousSibling\",\n            startFromChild,\n            filterFn,\n            guard\n        );\n    },\n    /**\n     * 检测节点node是否属是UEditor定义的bookmark节点\n     * @method isBookmarkNode\n     * @private\n     * @param { Node } node 需要检测的节点对象\n     * @return { Boolean } 是否是bookmark节点\n     * @example\n     * ```html\n     * <span id=\"_baidu_bookmark_1\"></span>\n     * <script>\n     *      var bookmarkNode = document.getElementById(\"_baidu_bookmark_1\");\n     *      //output: true\n     *      console.log( UE.dom.domUtils.isBookmarkNode( bookmarkNode ) );\n     * </script>\n     * ```\n     */\n    isBookmarkNode: function (node) {\n        return node.nodeType == 1 && node.id && /^_baidu_bookmark_/i.test(node.id);\n    },\n    /**\n     * 获取节点node所属的window对象\n     * @method  getWindow\n     * @param { Node } node 节点对象\n     * @return { Window } 当前节点所属的window对象\n     * @example\n     * ```javascript\n     * //output: true\n     * console.log( UE.dom.domUtils.getWindow( document.body ) === window );\n     * ```\n     */\n    getWindow: function (node) {\n        var doc = node.ownerDocument || node;\n        return doc.defaultView || doc.parentWindow;\n    },\n    /**\n     * 获取离nodeA与nodeB最近的公共的祖先节点\n     * @method  getCommonAncestor\n     * @param { Node } nodeA 第一个节点\n     * @param { Node } nodeB 第二个节点\n     * @remind 如果给定的两个节点是同一个节点， 将直接返回该节点。\n     * @return { Node | NULL } 如果未找到公共节点， 返回NULL， 否则返回最近的公共祖先节点。\n     * @example\n     * ```javascript\n     * var commonAncestor = UE.dom.domUtils.getCommonAncestor( document.body, document.body.firstChild );\n     * //output: true\n     * console.log( commonAncestor.tagName.toLowerCase() === 'body' );\n     * ```\n     */\n    getCommonAncestor: function (nodeA, nodeB) {\n        if (nodeA === nodeB) return nodeA;\n        var parentsA = [nodeA],\n            parentsB = [nodeB],\n            parent = nodeA,\n            i = -1;\n        while ((parent = parent.parentNode)) {\n            if (parent === nodeB) {\n                return parent;\n            }\n            parentsA.push(parent);\n        }\n        parent = nodeB;\n        while ((parent = parent.parentNode)) {\n            if (parent === nodeA) return parent;\n            parentsB.push(parent);\n        }\n        parentsA.reverse();\n        parentsB.reverse();\n        while ((i++, parentsA[i] === parentsB[i])) {\n        }\n        return i == 0 ? null : parentsA[i - 1];\n    },\n    /**\n     * 清除node节点左右连续为空的兄弟inline节点\n     * @method clearEmptySibling\n     * @param { Node } node 执行的节点对象， 如果该节点的左右连续的兄弟节点是空的inline节点，\n     * 则这些兄弟节点将被删除\n     * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext)  //ignoreNext指定是否忽略右边空节点\n     * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext,ignorePre)  //ignorePre指定是否忽略左边空节点\n     * @example\n     * ```html\n     * <body>\n     *     <div></div>\n     *     <span id=\"test\"></span>\n     *     <i></i>\n     *     <b></b>\n     *     <em>xxx</em>\n     *     <span></span>\n     * </body>\n     * <script>\n     *\n     *      UE.dom.domUtils.clearEmptySibling( document.getElementById( \"test\" ) );\n     *\n     *      //output: <div></div><span id=\"test\"></span><em>xxx</em><span></span>\n     *      console.log( document.body.innerHTML );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 清除node节点左右连续为空的兄弟inline节点， 如果ignoreNext的值为true，\n     * 则忽略对右边兄弟节点的操作。\n     * @method clearEmptySibling\n     * @param { Node } node 执行的节点对象， 如果该节点的左右连续的兄弟节点是空的inline节点，\n     * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作\n     * 则这些兄弟节点将被删除\n     * @see UE.dom.domUtils.clearEmptySibling(Node)\n     */\n\n    /**\n     * 清除node节点左右连续为空的兄弟inline节点， 如果ignoreNext的值为true，\n     * 则忽略对右边兄弟节点的操作， 如果ignorePre的值为true，则忽略对左边兄弟节点的操作。\n     * @method clearEmptySibling\n     * @param { Node } node 执行的节点对象， 如果该节点的左右连续的兄弟节点是空的inline节点，\n     * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作\n     * @param { Boolean } ignorePre 是否忽略忽略对左边的兄弟节点的操作\n     * 则这些兄弟节点将被删除\n     * @see UE.dom.domUtils.clearEmptySibling(Node)\n     */\n    clearEmptySibling: function (node, ignoreNext, ignorePre) {\n        function clear(next, dir) {\n            var tmpNode;\n            while (\n                next &&\n                !domUtils.isBookmarkNode(next) &&\n                (domUtils.isEmptyInlineElement(next) ||\n                    //这里不能把空格算进来会吧空格干掉，出现文字间的空格丢掉了\n                    !new RegExp(\"[^\\t\\n\\r\" + domUtils.fillChar + \"]\").test(\n                        next.nodeValue\n                    ))\n                ) {\n                tmpNode = next[dir];\n                domUtils.remove(next);\n                next = tmpNode;\n            }\n        }\n\n        !ignoreNext && clear(node.nextSibling, \"nextSibling\");\n        !ignorePre && clear(node.previousSibling, \"previousSibling\");\n    },\n    /**\n     * 将一个文本节点textNode拆分成两个文本节点，offset指定拆分位置\n     * @method split\n     * @param { Node } textNode 需要拆分的文本节点对象\n     * @param { int } offset 需要拆分的位置， 位置计算从0开始\n     * @return { Node } 拆分后形成的新节点\n     * @example\n     * ```html\n     * <div id=\"test\">abcdef</div>\n     * <script>\n     *      var newNode = UE.dom.domUtils.split( document.getElementById( \"test\" ).firstChild, 3 );\n     *      //output: def\n     *      console.log( newNode.nodeValue );\n     * </script>\n     * ```\n     */\n    split: function (node, offset) {\n        var doc = node.ownerDocument;\n        if (browser.ie && offset == node.nodeValue.length) {\n            var next = doc.createTextNode(\"\");\n            return domUtils.insertAfter(node, next);\n        }\n        var retval = node.splitText(offset);\n        //ie8下splitText不会跟新childNodes,我们手动触发他的更新\n        if (browser.ie8) {\n            var tmpNode = doc.createTextNode(\"\");\n            domUtils.insertAfter(retval, tmpNode);\n            domUtils.remove(tmpNode);\n        }\n        return retval;\n    },\n\n    /**\n     * 检测文本节点textNode是否为空节点（包括空格、换行、占位符等字符）\n     * @method  isWhitespace\n     * @param { Node } node 需要检测的节点对象\n     * @return { Boolean } 检测的节点是否为空\n     * @example\n     * ```html\n     * <div id=\"test\">\n     *\n     * </div>\n     * <script>\n     *      //output: true\n     *      console.log( UE.dom.domUtils.isWhitespace( document.getElementById(\"test\").firstChild ) );\n     * </script>\n     * ```\n     */\n    isWhitespace: function (node) {\n        return !new RegExp(\"[^ \\t\\n\\r\" + domUtils.fillChar + \"]\").test(\n            node.nodeValue\n        );\n    },\n    /**\n     * 获取元素element相对于viewport的位置坐标\n     * @method getXY\n     * @param { Node } element 需要计算位置的节点对象\n     * @return { Object } 返回形如{x:left,y:top}的一个key-value映射对象， 其中键x代表水平偏移距离，\n     *                          y代表垂直偏移距离。\n     *\n     * @example\n     * ```javascript\n     * var location = UE.dom.domUtils.getXY( document.getElementById(\"test\") );\n     * //output: test的坐标为: 12, 24\n     * console.log( 'test的坐标为： ', location.x, ',', location.y );\n     * ```\n     */\n    getXY: function (element) {\n        var x = 0,\n            y = 0;\n        while (element.offsetParent) {\n            y += element.offsetTop;\n            x += element.offsetLeft;\n            element = element.offsetParent;\n        }\n        return {x: x, y: y};\n    },\n    /**\n     * 为元素element绑定原生DOM事件，type为事件类型，handler为处理函数\n     * @method on\n     * @param { Node } element 需要绑定事件的节点对象\n     * @param { String } type 绑定的事件类型\n     * @param { Function } handler 事件处理器\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.on(document.body,\"click\",function(e){\n     *     //e为事件对象，this为被点击元素对戏那个\n     * });\n     * ```\n     */\n\n    /**\n     * 为元素element绑定原生DOM事件，type为事件类型，handler为处理函数\n     * @method on\n     * @param { Node } element 需要绑定事件的节点对象\n     * @param {string} type 绑定的事件类型数组\n     * @param { Function } handler 事件处理器\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.on(document.body,[\"click\",\"mousedown\"],function(evt){\n     *     //evt为事件对象，this为被点击元素对象\n     * });\n     * ```\n     */\n    on: function (element, type, handler) {\n        var types = utils.isArray(type) ? type : utils.trim(type).split(/\\s+/),\n            k = types.length;\n        if (k)\n            while (k--) {\n                type = types[k];\n                if (element.addEventListener) {\n                    element.addEventListener(type, handler, false);\n                } else {\n                    if (!handler._d) {\n                        handler._d = {\n                            els: []\n                        };\n                    }\n                    var key = type + handler.toString(),\n                        index = utils.indexOf(handler._d.els, element);\n                    if (!handler._d[key] || index == -1) {\n                        if (index == -1) {\n                            handler._d.els.push(element);\n                        }\n                        if (!handler._d[key]) {\n                            handler._d[key] = function (evt) {\n                                return handler.call(evt.srcElement, evt || window.event);\n                            };\n                        }\n\n                        element.attachEvent(\"on\" + type, handler._d[key]);\n                    }\n                }\n            }\n        element = null;\n    },\n    /**\n     * 解除DOM事件绑定\n     * @method un\n     * @param { Node } element 需要解除事件绑定的节点对象\n     * @param { String } type 需要接触绑定的事件类型\n     * @param { Function } handler 对应的事件处理器\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.un(document.body,\"click\",function(evt){\n     *     //evt为事件对象，this为被点击元素对象\n     * });\n     * ```\n     */\n\n    /**\n     * 解除DOM事件绑定\n     * @method un\n     * @param { Node } element 需要解除事件绑定的节点对象\n     * @param { Array } type 需要接触绑定的事件类型数组\n     * @param { Function } handler 对应的事件处理器\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.un(document.body, [\"click\",\"mousedown\"],function(evt){\n     *     //evt为事件对象，this为被点击元素对象\n     * });\n     * ```\n     */\n    un: function (element, type, handler) {\n        var types = utils.isArray(type) ? type : utils.trim(type).split(/\\s+/),\n            k = types.length;\n        if (k)\n            while (k--) {\n                type = types[k];\n                if (element.removeEventListener) {\n                    element.removeEventListener(type, handler, false);\n                } else {\n                    var key = type + handler.toString();\n                    try {\n                        element.detachEvent(\n                            \"on\" + type,\n                            handler._d ? handler._d[key] : handler\n                        );\n                    } catch (e) {\n                    }\n                    if (handler._d && handler._d[key]) {\n                        var index = utils.indexOf(handler._d.els, element);\n                        if (index != -1) {\n                            handler._d.els.splice(index, 1);\n                        }\n                        handler._d.els.length == 0 && delete handler._d[key];\n                    }\n                }\n            }\n    },\n\n    /**\n     * 比较节点nodeA与节点nodeB是否具有相同的标签名、属性名以及属性值\n     * @method  isSameElement\n     * @param { Node } nodeA 需要比较的节点\n     * @param { Node } nodeB 需要比较的节点\n     * @return { Boolean } 两个节点是否具有相同的标签名、属性名以及属性值\n     * @example\n     * ```html\n     * <span style=\"font-size:12px\">ssss</span>\n     * <span style=\"font-size:12px\">bbbbb</span>\n     * <span style=\"font-size:13px\">ssss</span>\n     * <span style=\"font-size:14px\">bbbbb</span>\n     *\n     * <script>\n     *\n     *     var nodes = document.getElementsByTagName( \"span\" );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isSameElement( nodes[0], nodes[1] ) );\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.isSameElement( nodes[2], nodes[3] ) );\n     *\n     * </script>\n     * ```\n     */\n    isSameElement: function (nodeA, nodeB) {\n        if (nodeA.tagName != nodeB.tagName) {\n            return false;\n        }\n        var thisAttrs = nodeA.attributes,\n            otherAttrs = nodeB.attributes;\n        if (!ie && thisAttrs.length != otherAttrs.length) {\n            return false;\n        }\n        var attrA,\n            attrB,\n            al = 0,\n            bl = 0;\n        for (var i = 0; (attrA = thisAttrs[i++]);) {\n            if (attrA.nodeName == \"style\") {\n                if (attrA.specified) {\n                    al++;\n                }\n                if (domUtils.isSameStyle(nodeA, nodeB)) {\n                    continue;\n                } else {\n                    return false;\n                }\n            }\n            if (ie) {\n                if (attrA.specified) {\n                    al++;\n                    attrB = otherAttrs.getNamedItem(attrA.nodeName);\n                } else {\n                    continue;\n                }\n            } else {\n                attrB = nodeB.attributes[attrA.nodeName];\n            }\n            if (!attrB.specified || attrA.nodeValue != attrB.nodeValue) {\n                return false;\n            }\n        }\n        // 有可能attrB的属性包含了attrA的属性之外还有自己的属性\n        if (ie) {\n            for (i = 0; (attrB = otherAttrs[i++]);) {\n                if (attrB.specified) {\n                    bl++;\n                }\n            }\n            if (al != bl) {\n                return false;\n            }\n        }\n        return true;\n    },\n\n    /**\n     * 判断节点nodeA与节点nodeB的元素的style属性是否一致\n     * @method isSameStyle\n     * @param { Node } nodeA 需要比较的节点\n     * @param { Node } nodeB 需要比较的节点\n     * @return { Boolean } 两个节点是否具有相同的style属性值\n     * @example\n     * ```html\n     * <span style=\"font-size:12px\">ssss</span>\n     * <span style=\"font-size:12px\">bbbbb</span>\n     * <span style=\"font-size:13px\">ssss</span>\n     * <span style=\"font-size:14px\">bbbbb</span>\n     *\n     * <script>\n     *\n     *     var nodes = document.getElementsByTagName( \"span\" );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isSameStyle( nodes[0], nodes[1] ) );\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.isSameStyle( nodes[2], nodes[3] ) );\n     *\n     * </script>\n     * ```\n     */\n    isSameStyle: function (nodeA, nodeB) {\n        var styleA = nodeA.style.cssText\n                .replace(/( ?; ?)/g, \";\")\n                .replace(/( ?: ?)/g, \":\"),\n            styleB = nodeB.style.cssText\n                .replace(/( ?; ?)/g, \";\")\n                .replace(/( ?: ?)/g, \":\");\n        if (browser.opera) {\n            styleA = nodeA.style;\n            styleB = nodeB.style;\n            if (styleA.length != styleB.length) return false;\n            for (var p in styleA) {\n                if (/^(\\d+|csstext)$/i.test(p)) {\n                    continue;\n                }\n                if (styleA[p] != styleB[p]) {\n                    return false;\n                }\n            }\n            return true;\n        }\n        if (!styleA || !styleB) {\n            return styleA == styleB;\n        }\n        styleA = styleA.split(\";\");\n        styleB = styleB.split(\";\");\n        if (styleA.length != styleB.length) {\n            return false;\n        }\n        for (var i = 0, ci; (ci = styleA[i++]);) {\n            if (utils.indexOf(styleB, ci) == -1) {\n                return false;\n            }\n        }\n        return true;\n    },\n    /**\n     * 检查节点node是否为block元素\n     * @method isBlockElm\n     * @param { Node } node 需要检测的节点对象\n     * @return { Boolean } 是否是block元素节点\n     * @warning 该方法的判断规则如下： 如果该元素原本是block元素， 则不论该元素当前的css样式是什么都会返回true；\n     *          否则，检测该元素的css样式， 如果该元素当前是block元素， 则返回true。 其余情况下都返回false。\n     * @example\n     * ```html\n     * <span id=\"test1\" style=\"display: block\"></span>\n     * <span id=\"test2\"></span>\n     * <div id=\"test3\" style=\"display: inline\"></div>\n     *\n     * <script>\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById(\"test1\") ) );\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById(\"test2\") ) );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById(\"test3\") ) );\n     *\n     * </script>\n     * ```\n     */\n    isBlockElm: function (node) {\n        return (\n            node.nodeType == 1 &&\n            (dtd.$block[node.tagName] ||\n                styleBlock[domUtils.getComputedStyle(node, \"display\")]) &&\n            !dtd.$nonChild[node.tagName]\n        );\n    },\n    /**\n     * 检测node节点是否为body节点\n     * @method isBody\n     * @param { Element } node 需要检测的dom元素\n     * @return { Boolean } 给定的元素是否是body元素\n     * @example\n     * ```javascript\n     * //output: true\n     * console.log( UE.dom.domUtils.isBody( document.body ) );\n     * ```\n     */\n    isBody: function (node) {\n        return node && node.nodeType == 1 && node.tagName.toLowerCase() == \"body\";\n    },\n    /**\n     * 以node节点为分界，将该节点的指定祖先节点parent拆分成两个独立的节点，\n     * 拆分形成的两个节点之间是node节点\n     * @method breakParent\n     * @param { Node } node 作为分界的节点对象\n     * @param { Node } parent 该节点必须是node节点的祖先节点， 且是block节点。\n     * @return { Node } 给定的node分界节点\n     * @example\n     * ```javascript\n     *\n     *      var node = document.createElement(\"span\"),\n     *          wrapNode = document.createElement( \"div\" ),\n     *          parent = document.createElement(\"p\");\n     *\n     *      parent.appendChild( node );\n     *      wrapNode.appendChild( parent );\n     *\n     *      //拆分前\n     *      //output: <p><span></span></p>\n     *      console.log( wrapNode.innerHTML );\n     *\n     *\n     *      UE.dom.domUtils.breakParent( node, parent );\n     *      //拆分后\n     *      //output: <p></p><span></span><p></p>\n     *      console.log( wrapNode.innerHTML );\n     *\n     * ```\n     */\n    breakParent: function (node, parent) {\n        var tmpNode,\n            parentClone = node,\n            clone = node,\n            leftNodes,\n            rightNodes;\n        do {\n            parentClone = parentClone.parentNode;\n            if (leftNodes) {\n                tmpNode = parentClone.cloneNode(false);\n                tmpNode.appendChild(leftNodes);\n                leftNodes = tmpNode;\n                tmpNode = parentClone.cloneNode(false);\n                tmpNode.appendChild(rightNodes);\n                rightNodes = tmpNode;\n            } else {\n                leftNodes = parentClone.cloneNode(false);\n                rightNodes = leftNodes.cloneNode(false);\n            }\n            while ((tmpNode = clone.previousSibling)) {\n                leftNodes.insertBefore(tmpNode, leftNodes.firstChild);\n            }\n            while ((tmpNode = clone.nextSibling)) {\n                rightNodes.appendChild(tmpNode);\n            }\n            clone = parentClone;\n        } while (parent !== parentClone);\n        tmpNode = parent.parentNode;\n        tmpNode.insertBefore(leftNodes, parent);\n        tmpNode.insertBefore(rightNodes, parent);\n        tmpNode.insertBefore(node, rightNodes);\n        domUtils.remove(parent);\n        return node;\n    },\n    /**\n     * 检查节点node是否是空inline节点\n     * @method  isEmptyInlineElement\n     * @param { Node } node 需要检测的节点对象\n     * @return { Number }  如果给定的节点是空的inline节点， 则返回1, 否则返回0。\n     * @example\n     * ```html\n     * <b><i></i></b> => 1\n     * <b><i></i><u></u></b> => 1\n     * <b></b> => 1\n     * <b>xx<i></i></b> => 0\n     * ```\n     */\n    isEmptyInlineElement: function (node) {\n        if (node.nodeType != 1 || !dtd.$removeEmpty[node.tagName]) {\n            return 0;\n        }\n        node = node.firstChild;\n        while (node) {\n            //如果是创建的bookmark就跳过\n            if (domUtils.isBookmarkNode(node)) {\n                return 0;\n            }\n            if (\n                (node.nodeType == 1 && !domUtils.isEmptyInlineElement(node)) ||\n                (node.nodeType == 3 && !domUtils.isWhitespace(node))\n            ) {\n                return 0;\n            }\n            node = node.nextSibling;\n        }\n        return 1;\n    },\n\n    /**\n     * 删除node节点下首尾两端的空白文本子节点\n     * @method trimWhiteTextNode\n     * @param { Element } node 需要执行删除操作的元素对象\n     * @example\n     * ```javascript\n     *      var node = document.createElement(\"div\");\n     *\n     *      node.appendChild( document.createTextNode( \"\" ) );\n     *\n     *      node.appendChild( document.createElement(\"div\") );\n     *\n     *      node.appendChild( document.createTextNode( \"\" ) );\n     *\n     *      //3\n     *      console.log( node.childNodes.length );\n     *\n     *      UE.dom.domUtils.trimWhiteTextNode( node );\n     *\n     *      //1\n     *      console.log( node.childNodes.length );\n     * ```\n     */\n    trimWhiteTextNode: function (node) {\n        function remove(dir) {\n            var child;\n            while (\n                (child = node[dir]) &&\n                child.nodeType == 3 &&\n                domUtils.isWhitespace(child)\n                ) {\n                node.removeChild(child);\n            }\n        }\n\n        remove(\"firstChild\");\n        remove(\"lastChild\");\n    },\n\n    /**\n     * 合并node节点下相同的子节点\n     * @name mergeChild\n     * @desc\n     * UE.dom.domUtils.mergeChild(node,tagName) //tagName要合并的子节点的标签\n     * @example\n     * <p><span style=\"font-size:12px;\">xx<span style=\"font-size:12px;\">aa</span>xx</span></p>\n     * ==> UE.dom.domUtils.mergeChild(node,'span')\n     * <p><span style=\"font-size:12px;\">xxaaxx</span></p>\n     */\n    mergeChild: function (node, tagName, attrs) {\n        var list = domUtils.getElementsByTagName(node, node.tagName.toLowerCase());\n        for (var i = 0, ci; (ci = list[i++]);) {\n            if (!ci.parentNode || domUtils.isBookmarkNode(ci)) {\n                continue;\n            }\n            //span单独处理\n            if (ci.tagName.toLowerCase() == \"span\") {\n                if (node === ci.parentNode) {\n                    domUtils.trimWhiteTextNode(node);\n                    if (node.childNodes.length == 1) {\n                        node.style.cssText = ci.style.cssText + \";\" + node.style.cssText;\n                        domUtils.remove(ci, true);\n                        continue;\n                    }\n                }\n                ci.style.cssText = node.style.cssText + \";\" + ci.style.cssText;\n                if (attrs) {\n                    var style = attrs.style;\n                    if (style) {\n                        style = style.split(\";\");\n                        for (var j = 0, s; (s = style[j++]);) {\n                            ci.style[utils.cssStyleToDomStyle(s.split(\":\")[0])] = s.split(\n                                \":\"\n                            )[1];\n                        }\n                    }\n                }\n                if (domUtils.isSameStyle(ci, node)) {\n                    domUtils.remove(ci, true);\n                }\n                continue;\n            }\n            if (domUtils.isSameElement(node, ci)) {\n                domUtils.remove(ci, true);\n            }\n        }\n    },\n\n    /**\n     * 原生方法getElementsByTagName的封装\n     * @method getElementsByTagName\n     * @param { Node } node 目标节点对象\n     * @param { String } tagName 需要查找的节点的tagName， 多个tagName以空格分割\n     * @return { Array } 符合条件的节点集合\n     */\n    getElementsByTagName: function (node, tagName, filter) {\n        if (filter && utils.isString(filter)) {\n            var className = filter;\n            filter = function (node) {\n                return domUtils.hasClass(node, className);\n            };\n        }\n        tagName = utils.trim(tagName).replace(/[ ]{2,}/g, \" \").split(\" \");\n        var arr = [];\n        for (var n = 0, ni; (ni = tagName[n++]);) {\n            var list = node.getElementsByTagName(ni);\n            for (var i = 0, ci; (ci = list[i++]);) {\n                if (!filter || filter(ci)) arr.push(ci);\n            }\n        }\n\n        return arr;\n    },\n    /**\n     * 将节点node提取到父节点上\n     * @method mergeToParent\n     * @param { Element } node 需要提取的元素对象\n     * @example\n     * ```html\n     * <div id=\"parent\">\n     *     <div id=\"sub\">\n     *         <span id=\"child\"></span>\n     *     </div>\n     * </div>\n     *\n     * <script>\n     *\n     *     var child = document.getElementById( \"child\" );\n     *\n     *     //output: sub\n     *     console.log( child.parentNode.id );\n     *\n     *     UE.dom.domUtils.mergeToParent( child );\n     *\n     *     //output: parent\n     *     console.log( child.parentNode.id );\n     *\n     * </script>\n     * ```\n     */\n    mergeToParent: function (node) {\n        var parent = node.parentNode;\n        while (parent && dtd.$removeEmpty[parent.tagName]) {\n            if (parent.tagName == node.tagName || parent.tagName == \"A\") {\n                //针对a标签单独处理\n                domUtils.trimWhiteTextNode(parent);\n                //span需要特殊处理  不处理这样的情况 <span stlye=\"color:#fff\">xxx<span style=\"color:#ccc\">xxx</span>xxx</span>\n                if (\n                    (parent.tagName == \"SPAN\" && !domUtils.isSameStyle(parent, node)) ||\n                    (parent.tagName == \"A\" && node.tagName == \"SPAN\")\n                ) {\n                    if (parent.childNodes.length > 1 || parent !== node.parentNode) {\n                        node.style.cssText =\n                            parent.style.cssText + \";\" + node.style.cssText;\n                        parent = parent.parentNode;\n                        continue;\n                    } else {\n                        parent.style.cssText += \";\" + node.style.cssText;\n                        //trace:952 a标签要保持下划线\n                        if (parent.tagName == \"A\") {\n                            parent.style.textDecoration = \"underline\";\n                        }\n                    }\n                }\n                if (parent.tagName != \"A\") {\n                    parent === node.parentNode && domUtils.remove(node, true);\n                    break;\n                }\n            }\n            parent = parent.parentNode;\n        }\n    },\n    /**\n     * 合并节点node的左右兄弟节点\n     * @method mergeSibling\n     * @param { Element } node 需要合并的目标节点\n     * @example\n     * ```html\n     * <b>xxxx</b><b id=\"test\">ooo</b><b>xxxx</b>\n     *\n     * <script>\n     *     var demoNode = document.getElementById(\"test\");\n     *     UE.dom.domUtils.mergeSibling( demoNode );\n     *     //output: xxxxoooxxxx\n     *     console.log( demoNode.innerHTML );\n     * </script>\n     * ```\n     */\n\n    /**\n     * 合并节点node的左右兄弟节点， 可以根据给定的条件选择是否忽略合并左节点。\n     * @method mergeSibling\n     * @param { Element } node 需要合并的目标节点\n     * @param { Boolean } ignorePre 是否忽略合并左节点\n     * @example\n     * ```html\n     * <b>xxxx</b><b id=\"test\">ooo</b><b>xxxx</b>\n     *\n     * <script>\n     *     var demoNode = document.getElementById(\"test\");\n     *     UE.dom.domUtils.mergeSibling( demoNode, true );\n     *     //output: oooxxxx\n     *     console.log( demoNode.innerHTML );\n     * </script>\n     * ```\n     */\n\n    /**\n     * 合并节点node的左右兄弟节点，可以根据给定的条件选择是否忽略合并左右节点。\n     * @method mergeSibling\n     * @param { Element } node 需要合并的目标节点\n     * @param { Boolean } ignorePre 是否忽略合并左节点\n     * @param { Boolean } ignoreNext 是否忽略合并右节点\n     * @remind 如果同时忽略左右节点， 则该操作什么也不会做\n     * @example\n     * ```html\n     * <b>xxxx</b><b id=\"test\">ooo</b><b>xxxx</b>\n     *\n     * <script>\n     *     var demoNode = document.getElementById(\"test\");\n     *     UE.dom.domUtils.mergeSibling( demoNode, false, true );\n     *     //output: xxxxooo\n     *     console.log( demoNode.innerHTML );\n     * </script>\n     * ```\n     */\n    mergeSibling: function (node, ignorePre, ignoreNext) {\n        function merge(rtl, start, node) {\n            var next;\n            if (\n                (next = node[rtl]) &&\n                !domUtils.isBookmarkNode(next) &&\n                next.nodeType == 1 &&\n                domUtils.isSameElement(node, next)\n            ) {\n                while (next.firstChild) {\n                    if (start == \"firstChild\") {\n                        node.insertBefore(next.lastChild, node.firstChild);\n                    } else {\n                        node.appendChild(next.firstChild);\n                    }\n                }\n                domUtils.remove(next);\n            }\n        }\n\n        !ignorePre && merge(\"previousSibling\", \"firstChild\", node);\n        !ignoreNext && merge(\"nextSibling\", \"lastChild\", node);\n    },\n\n    /**\n     * 设置节点node及其子节点不会被选中\n     * @method unSelectable\n     * @param { Element } node 需要执行操作的dom元素\n     * @remind 执行该操作后的节点， 将不能被鼠标选中\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.unSelectable( document.body );\n     * ```\n     */\n    unSelectable: (ie && browser.ie9below) || browser.opera\n        ? function (node) {\n            //for ie9\n            node.onselectstart = function () {\n                return false;\n            };\n            node.onclick = node.onkeyup = node.onkeydown = function () {\n                return false;\n            };\n            node.unselectable = \"on\";\n            node.setAttribute(\"unselectable\", \"on\");\n            for (var i = 0, ci; (ci = node.all[i++]);) {\n                switch (ci.tagName.toLowerCase()) {\n                    case \"iframe\":\n                    case \"textarea\":\n                    case \"input\":\n                    case \"select\":\n                        break;\n                    default:\n                        ci.unselectable = \"on\";\n                        node.setAttribute(\"unselectable\", \"on\");\n                }\n            }\n        }\n        : function (node) {\n            node.style.MozUserSelect = node.style.webkitUserSelect = node.style.msUserSelect = node.style.KhtmlUserSelect =\n                \"none\";\n        },\n    /**\n     * 删除节点node上的指定属性名称的属性\n     * @method  removeAttributes\n     * @param { Node } node 需要删除属性的节点对象\n     * @param { String } attrNames 可以是空格隔开的多个属性名称，该操作将会依次删除相应的属性\n     * @example\n     * ```html\n     * <div id=\"wrap\">\n     *      <span style=\"font-size:14px;\" id=\"test\" name=\"followMe\">xxxxx</span>\n     * </div>\n     *\n     * <script>\n     *\n     *     UE.dom.domUtils.removeAttributes( document.getElementById( \"test\" ), \"id name\" );\n     *\n     *     //output: <span style=\"font-size:14px;\">xxxxx</span>\n     *     console.log( document.getElementById(\"wrap\").innerHTML );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 删除节点node上的指定属性名称的属性\n     * @method  removeAttributes\n     * @param { Node } node 需要删除属性的节点对象\n     * @param { Array } attrNames 需要删除的属性名数组\n     * @example\n     * ```html\n     * <div id=\"wrap\">\n     *      <span style=\"font-size:14px;\" id=\"test\" name=\"followMe\">xxxxx</span>\n     * </div>\n     *\n     * <script>\n     *\n     *     UE.dom.domUtils.removeAttributes( document.getElementById( \"test\" ), [\"id\", \"name\"] );\n     *\n     *     //output: <span style=\"font-size:14px;\">xxxxx</span>\n     *     console.log( document.getElementById(\"wrap\").innerHTML );\n     *\n     * </script>\n     * ```\n     */\n    removeAttributes: function (node, attrNames) {\n        attrNames = utils.isArray(attrNames)\n            ? attrNames\n            : utils.trim(attrNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n        for (var i = 0, ci; (ci = attrNames[i++]);) {\n            ci = attrFix[ci] || ci;\n            switch (ci) {\n                case \"className\":\n                    node[ci] = \"\";\n                    break;\n                case \"style\":\n                    node.style.cssText = \"\";\n                    var val = node.getAttributeNode(\"style\");\n                    !browser.ie && val && node.removeAttributeNode(val);\n            }\n            node.removeAttribute(ci);\n        }\n    },\n    /**\n     * 在doc下创建一个标签名为tag，属性为attrs的元素\n     * @method createElement\n     * @param { DomDocument } doc 新创建的元素属于该document节点创建\n     * @param { String } tagName 需要创建的元素的标签名\n     * @param { Object } attrs 新创建的元素的属性key-value集合\n     * @return { Element } 新创建的元素对象\n     * @example\n     * ```javascript\n     * var ele = UE.dom.domUtils.createElement( document, 'div', {\n     *     id: 'test'\n     * } );\n     *\n     * //output: DIV\n     * console.log( ele.tagName );\n     *\n     * //output: test\n     * console.log( ele.id );\n     *\n     * ```\n     */\n    createElement: function (doc, tag, attrs) {\n        return domUtils.setAttributes(doc.createElement(tag), attrs);\n    },\n    /**\n     * 为节点node添加属性attrs，attrs为属性键值对\n     * @method setAttributes\n     * @param { Element } node 需要设置属性的元素对象\n     * @param { Object } attrs 需要设置的属性名-值对\n     * @return { Element } 设置属性的元素对象\n     * @example\n     * ```html\n     * <span id=\"test\"></span>\n     *\n     * <script>\n     *\n     *     var testNode = UE.dom.domUtils.setAttributes( document.getElementById( \"test\" ), {\n     *         id: 'demo'\n     *     } );\n     *\n     *     //output: demo\n     *     console.log( testNode.id );\n     *\n     * </script>\n     *\n     */\n    setAttributes: function (node, attrs) {\n        for (var attr in attrs) {\n            if ('_propertyDelete' === attr) {\n                for (var j = 0; j < attrs[attr].length; j++) {\n                    if (node.hasAttribute(attrs[attr][j])) {\n                        node.removeAttribute(attrs[attr][j]);\n                    }\n                }\n                continue;\n            }\n            if (attrs.hasOwnProperty(attr)) {\n                var value = attrs[attr];\n                switch (attr) {\n                    case \"class\":\n                        //ie下要这样赋值，setAttribute不起作用\n                        node.className = value;\n                        break;\n                    case \"style\":\n                        node.style.cssText = node.style.cssText + \";\" + value;\n                        break;\n                    case \"innerHTML\":\n                        node[attr] = value;\n                        break;\n                    case \"value\":\n                        node.value = value;\n                        break;\n                    default:\n                        node.setAttribute(attrFix[attr] || attr, value);\n                }\n            }\n        }\n        return node;\n    },\n\n    /**\n     * 获取元素element经过计算后的样式值\n     * @method getComputedStyle\n     * @param { Element } element 需要获取样式的元素对象\n     * @param { String } styleName 需要获取的样式名\n     * @return { String } 获取到的样式值\n     * @example\n     * ```html\n     * <style type=\"text/css\">\n     *      #test {\n     *          font-size: 15px;\n     *      }\n     * </style>\n     *\n     * <span id=\"test\"></span>\n     *\n     * <script>\n     *     //output: 15px\n     *     console.log( UE.dom.domUtils.getComputedStyle( document.getElementById( \"test\" ), 'font-size' ) );\n     * </script>\n     * ```\n     */\n    getComputedStyle: function (element, styleName) {\n        //以下的属性单独处理\n        var pros = \"width height top left\";\n\n        if (pros.indexOf(styleName) > -1) {\n            return (\n                element[\n                \"offset\" +\n                styleName.replace(/^\\w/, function (s) {\n                    return s.toUpperCase();\n                })\n                    ] + \"px\"\n            );\n        }\n        //忽略文本节点\n        if (element.nodeType === 3) {\n            element = element.parentNode;\n        }\n        //ie下font-size若body下定义了font-size，则从currentStyle里会取到这个font-size. 取不到实际值，故此修改.\n        if (\n            browser.ie &&\n            browser.version < 9 &&\n            styleName === \"font-size\" &&\n            !element.style.fontSize &&\n            !dtd.$empty[element.tagName] &&\n            !dtd.$nonChild[element.tagName]\n        ) {\n            var span = element.ownerDocument.createElement(\"span\");\n            span.style.cssText = \"padding:0;border:0;font-family:simsun;\";\n            span.innerHTML = \".\";\n            element.appendChild(span);\n            var result = span.offsetHeight;\n            element.removeChild(span);\n            span = null;\n            return result + \"px\";\n        }\n        try {\n            var value =\n                domUtils.getStyle(element, styleName) ||\n                (window.getComputedStyle\n                    ? domUtils\n                        .getWindow(element)\n                        .getComputedStyle(element, \"\")\n                        .getPropertyValue(styleName)\n                    : (element.currentStyle || element.style)[\n                        utils.cssStyleToDomStyle(styleName)\n                        ]);\n        } catch (e) {\n            return \"\";\n        }\n        return utils.transUnitToPx(utils.fixColor(styleName, value));\n    },\n    /**\n     * 删除元素element指定的className\n     * @method removeClasses\n     * @param { Element } ele 需要删除class的元素节点\n     * @param { String } classNames 需要删除的className， 多个className之间以空格分开\n     * @example\n     * ```html\n     * <span id=\"test\" class=\"test1 test2 test3\">xxx</span>\n     *\n     * <script>\n     *\n     *     var testNode = document.getElementById( \"test\" );\n     *     UE.dom.domUtils.removeClasses( testNode, \"test1 test2\" );\n     *\n     *     //output: test3\n     *     console.log( testNode.className );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 删除元素element指定的className\n     * @method removeClasses\n     * @param { Element } ele 需要删除class的元素节点\n     * @param { Array } classNames 需要删除的className数组\n     * @example\n     * ```html\n     * <span id=\"test\" class=\"test1 test2 test3\">xxx</span>\n     *\n     * <script>\n     *\n     *     var testNode = document.getElementById( \"test\" );\n     *     UE.dom.domUtils.removeClasses( testNode, [\"test1\", \"test2\"] );\n     *\n     *     //output: test3\n     *     console.log( testNode.className );\n     *\n     * </script>\n     * ```\n     */\n    removeClasses: function (elm, classNames) {\n        classNames = utils.isArray(classNames)\n            ? classNames\n            : utils.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n        for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]);) {\n            cls = cls.replace(new RegExp(\"\\\\b\" + ci + \"\\\\b\"), \"\");\n        }\n        cls = utils.trim(cls).replace(/[ ]{2,}/g, \" \");\n        if (cls) {\n            elm.className = cls;\n        } else {\n            domUtils.removeAttributes(elm, [\"class\"]);\n        }\n    },\n    /**\n     * 给元素element添加className\n     * @method addClass\n     * @param { Node } ele 需要增加className的元素\n     * @param { String } classNames 需要添加的className， 多个className之间以空格分割\n     * @remind 相同的类名不会被重复添加\n     * @example\n     * ```html\n     * <span id=\"test\" class=\"cls1 cls2\"></span>\n     *\n     * <script>\n     *     var testNode = document.getElementById(\"test\");\n     *\n     *     UE.dom.domUtils.addClass( testNode, \"cls2 cls3 cls4\" );\n     *\n     *     //output: cl1 cls2 cls3 cls4\n     *     console.log( testNode.className );\n     *\n     * <script>\n     * ```\n     */\n\n    /**\n     * 给元素element添加className\n     * @method addClass\n     * @param { Node } ele 需要增加className的元素\n     * @param { Array } classNames 需要添加的className的数组\n     * @remind 相同的类名不会被重复添加\n     * @example\n     * ```html\n     * <span id=\"test\" class=\"cls1 cls2\"></span>\n     *\n     * <script>\n     *     var testNode = document.getElementById(\"test\");\n     *\n     *     UE.dom.domUtils.addClass( testNode, [\"cls2\", \"cls3\", \"cls4\"] );\n     *\n     *     //output: cl1 cls2 cls3 cls4\n     *     console.log( testNode.className );\n     *\n     * <script>\n     * ```\n     */\n    addClass: function (elm, classNames) {\n        if (!elm) return;\n        classNames = utils.trim(classNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n        for (var i = 0, ci, cls = elm.className; (ci = classNames[i++]);) {\n            if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\").test(cls)) {\n                cls += \" \" + ci;\n            }\n        }\n        elm.className = utils.trim(cls);\n    },\n    /**\n     * 判断元素element是否包含给定的样式类名className\n     * @method hasClass\n     * @param { Node } ele 需要检测的元素\n     * @param { String } classNames 需要检测的className， 多个className之间用空格分割\n     * @return { Boolean } 元素是否包含所有给定的className\n     * @example\n     * ```html\n     * <span id=\"test1\" class=\"cls1 cls2\"></span>\n     *\n     * <script>\n     *     var test1 = document.getElementById(\"test1\");\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.hasClass( test1, \"cls2 cls1 cls3\" ) );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.hasClass( test1, \"cls2 cls1\" ) );\n     * </script>\n     * ```\n     */\n\n    /**\n     * 判断元素element是否包含给定的样式类名className\n     * @method hasClass\n     * @param { Node } ele 需要检测的元素\n     * @param { Array } classNames 需要检测的className数组\n     * @return { Boolean } 元素是否包含所有给定的className\n     * @example\n     * ```html\n     * <span id=\"test1\" class=\"cls1 cls2\"></span>\n     *\n     * <script>\n     *     var test1 = document.getElementById(\"test1\");\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.hasClass( test1, [ \"cls2\", \"cls1\", \"cls3\" ] ) );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.hasClass( test1, [ \"cls2\", \"cls1\" ]) );\n     * </script>\n     * ```\n     */\n    hasClass: function (element, className) {\n        if (utils.isRegExp(className)) {\n            return className.test(element.className);\n        }\n        className = utils.trim(className).replace(/[ ]{2,}/g, \" \").split(\" \");\n        for (var i = 0, ci, cls = element.className; (ci = className[i++]);) {\n            if (!new RegExp(\"\\\\b\" + ci + \"\\\\b\", \"i\").test(cls)) {\n                return false;\n            }\n        }\n        return i - 1 == className.length;\n    },\n\n    /**\n     * 阻止事件默认行为\n     * @method preventDefault\n     * @param { Event } evt 需要阻止默认行为的事件对象\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.preventDefault( evt );\n     * ```\n     */\n    preventDefault: function (evt) {\n        evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);\n    },\n    /**\n     * 删除元素element指定的样式\n     * @method removeStyle\n     * @param { Element } element 需要删除样式的元素\n     * @param { String } styleName 需要删除的样式名\n     * @example\n     * ```html\n     * <span id=\"test\" style=\"color: red; background: blue;\"></span>\n     *\n     * <script>\n     *\n     *     var testNode = document.getElementById(\"test\");\n     *\n     *     UE.dom.domUtils.removeStyle( testNode, 'color' );\n     *\n     *     //output: background: blue;\n     *     console.log( testNode.style.cssText );\n     *\n     * </script>\n     * ```\n     */\n    removeStyle: function (element, name) {\n        if (browser.ie) {\n            //针对color先单独处理一下\n            if (name == \"color\") {\n                name = \"(^|;)\" + name;\n            }\n            element.style.cssText = element.style.cssText.replace(\n                new RegExp(name + \"[^:]*:[^;]+;?\", \"ig\"),\n                \"\"\n            );\n        } else {\n            if (element.style.removeProperty) {\n                element.style.removeProperty(name);\n            } else {\n                element.style.removeAttribute(utils.cssStyleToDomStyle(name));\n            }\n        }\n\n        if (!element.style.cssText) {\n            domUtils.removeAttributes(element, [\"style\"]);\n        }\n    },\n    /**\n     * 获取元素element的style属性的指定值\n     * @method getStyle\n     * @param { Element } element 需要获取属性值的元素\n     * @param { String } styleName 需要获取的style的名称\n     * @warning 该方法仅获取元素style属性中所标明的值\n     * @return { String } 该元素包含指定的style属性值\n     * @example\n     * ```html\n     * <div id=\"test\" style=\"color: red;\"></div>\n     *\n     * <script>\n     *\n     *      var testNode = document.getElementById( \"test\" );\n     *\n     *      //output: red\n     *      console.log( UE.dom.domUtils.getStyle( testNode, \"color\" ) );\n     *\n     *      //output: \"\"\n     *      console.log( UE.dom.domUtils.getStyle( testNode, \"background\" ) );\n     *\n     * </script>\n     * ```\n     */\n    getStyle: function (element, name) {\n        var value = element.style[utils.cssStyleToDomStyle(name)];\n        return utils.fixColor(name, value);\n    },\n    /**\n     * 为元素element设置样式属性值\n     * @method setStyle\n     * @param { Element } element 需要设置样式的元素\n     * @param { String } styleName 样式名\n     * @param { String } styleValue 样式值\n     * @example\n     * ```html\n     * <div id=\"test\"></div>\n     *\n     * <script>\n     *\n     *      var testNode = document.getElementById( \"test\" );\n     *\n     *      //output: \"\"\n     *      console.log( testNode.style.color );\n     *\n     *      UE.dom.domUtils.setStyle( testNode, 'color', 'red' );\n     *      //output: \"red\"\n     *      console.log( testNode.style.color );\n     *\n     * </script>\n     * ```\n     */\n    setStyle: function (element, name, value) {\n        element.style[utils.cssStyleToDomStyle(name)] = value;\n        if (!utils.trim(element.style.cssText)) {\n            this.removeAttributes(element, \"style\");\n        }\n    },\n    /**\n     * 为元素element设置多个样式属性值\n     * @method setStyles\n     * @param { Element } element 需要设置样式的元素\n     * @param { Object } styles 样式名值对\n     * @example\n     * ```html\n     * <div id=\"test\"></div>\n     *\n     * <script>\n     *\n     *      var testNode = document.getElementById( \"test\" );\n     *\n     *      //output: \"\"\n     *      console.log( testNode.style.color );\n     *\n     *      UE.dom.domUtils.setStyles( testNode, {\n     *          'color': 'red'\n     *      } );\n     *      //output: \"red\"\n     *      console.log( testNode.style.color );\n     *\n     * </script>\n     * ```\n     */\n    setStyles: function (element, styles) {\n        for (var name in styles) {\n            if (styles.hasOwnProperty(name)) {\n                domUtils.setStyle(element, name, styles[name]);\n            }\n        }\n    },\n    /**\n     * 删除_moz_dirty属性\n     * @private\n     * @method removeDirtyAttr\n     */\n    removeDirtyAttr: function (node) {\n        for (\n            var i = 0, ci, nodes = node.getElementsByTagName(\"*\");\n            (ci = nodes[i++]);\n        ) {\n            ci.removeAttribute(\"_moz_dirty\");\n        }\n        node.removeAttribute(\"_moz_dirty\");\n    },\n    /**\n     * 获取子节点的数量\n     * @method getChildCount\n     * @param { Element } node 需要检测的元素\n     * @return { Number } 给定的node元素的子节点数量\n     * @example\n     * ```html\n     * <div id=\"test\">\n     *      <span></span>\n     * </div>\n     *\n     * <script>\n     *\n     *     //output: 3\n     *     console.log( UE.dom.domUtils.getChildCount( document.getElementById(\"test\") ) );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 根据给定的过滤规则， 获取符合条件的子节点的数量\n     * @method getChildCount\n     * @param { Element } node 需要检测的元素\n     * @param { Function } fn 过滤器， 要求对符合条件的子节点返回true， 反之则要求返回false\n     * @return { Number } 符合过滤条件的node元素的子节点数量\n     * @example\n     * ```html\n     * <div id=\"test\">\n     *      <span></span>\n     * </div>\n     *\n     * <script>\n     *\n     *     //output: 1\n     *     console.log( UE.dom.domUtils.getChildCount( document.getElementById(\"test\"), function ( node ) {\n     *\n     *         return node.nodeType === 1;\n     *\n     *     } ) );\n     *\n     * </script>\n     * ```\n     */\n    getChildCount: function (node, fn) {\n        var count = 0,\n            first = node.firstChild;\n        fn =\n            fn ||\n            function () {\n                return 1;\n            };\n        while (first) {\n            if (fn(first)) {\n                count++;\n            }\n            first = first.nextSibling;\n        }\n        return count;\n    },\n\n    /**\n     * 判断给定节点是否为空节点\n     * @method isEmptyNode\n     * @param { Node } node 需要检测的节点对象\n     * @return { Boolean } 节点是否为空\n     * @example\n     * ```javascript\n     * UE.dom.domUtils.isEmptyNode( document.body );\n     * ```\n     */\n    isEmptyNode: function (node) {\n        return (\n            !node.firstChild ||\n            domUtils.getChildCount(node, function (node) {\n                return (\n                    !domUtils.isBr(node) &&\n                    !domUtils.isBookmarkNode(node) &&\n                    !domUtils.isWhitespace(node)\n                );\n            }) == 0\n        );\n    },\n    clearSelectedArr: function (nodes) {\n        var node;\n        while ((node = nodes.pop())) {\n            domUtils.removeAttributes(node, [\"class\"]);\n        }\n    },\n    /**\n     * 将显示区域滚动到指定节点的位置\n     * @method scrollToView\n     * @param    {Node}   node    节点\n     * @param    {window}   win      window对象\n     * @param    {Number}    offsetTop    距离上方的偏移量\n     */\n    scrollToView: function (node, win, offsetTop) {\n        offsetTop = offsetTop || 0\n        var getViewPaneSize = function () {\n                var doc = win.document,\n                    mode = doc.compatMode == \"CSS1Compat\";\n                return {\n                    width:\n                        (mode ? doc.documentElement.clientWidth : doc.body.clientWidth) || 0,\n                    height:\n                        (mode ? doc.documentElement.clientHeight : doc.body.clientHeight) || 0\n                };\n            },\n            getScrollPosition = function (win) {\n                if (\"pageXOffset\" in win) {\n                    return {\n                        x: win.pageXOffset || 0,\n                        y: win.pageYOffset || 0\n                    };\n                } else {\n                    var doc = win.document;\n                    return {\n                        x: doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,\n                        y: doc.documentElement.scrollTop || doc.body.scrollTop || 0\n                    };\n                }\n            };\n        var winHeight = getViewPaneSize().height,\n            offset = winHeight * -1 + offsetTop;\n        offset += node.offsetHeight || 0;\n        var elementPosition = domUtils.getXY(node);\n        offset += elementPosition.y;\n        var currentScroll = getScrollPosition(win).y;\n        // console.log({currentScroll,winHeight,offset,y:elementPosition.y});\n        // offset += 50;\n        if (offset > currentScroll || offset < currentScroll - winHeight) {\n            win.scrollTo({\n                top: offset + (offset < 0 ? -20 : 20),\n                behavior: \"smooth\"\n            });\n        }\n    },\n    /**\n     * 判断给定节点是否为br\n     * @method isBr\n     * @param { Node } node 需要判断的节点对象\n     * @return { Boolean } 给定的节点是否是br节点\n     */\n    isBr: function (node) {\n        return node.nodeType == 1 && node.tagName == \"BR\";\n    },\n    /**\n     * 判断给定的节点是否是一个“填充”节点\n     * @private\n     * @method isFillChar\n     * @param { Node } node 需要判断的节点\n     * @param { Boolean } isInStart 是否从节点内容的开始位置匹配\n     * @returns { Boolean } 节点是否是填充节点\n     */\n    isFillChar: function (node, isInStart) {\n        if (node.nodeType != 3) return false;\n        var text = node.nodeValue;\n        if (isInStart) {\n            return new RegExp(\"^\" + domUtils.fillChar).test(text);\n        }\n        return !text.replace(new RegExp(domUtils.fillChar, \"g\"), \"\").length;\n    },\n    isStartInblock: function (range) {\n        var tmpRange = range.cloneRange(),\n            flag = 0,\n            start = tmpRange.startContainer,\n            tmp;\n        if (start.nodeType == 1 && start.childNodes[tmpRange.startOffset]) {\n            start = start.childNodes[tmpRange.startOffset];\n            var pre = start.previousSibling;\n            while (pre && domUtils.isFillChar(pre)) {\n                start = pre;\n                pre = pre.previousSibling;\n            }\n        }\n        if (this.isFillChar(start, true) && tmpRange.startOffset == 1) {\n            tmpRange.setStartBefore(start);\n            start = tmpRange.startContainer;\n        }\n\n        while (start && domUtils.isFillChar(start)) {\n            tmp = start;\n            start = start.previousSibling;\n        }\n        if (tmp) {\n            tmpRange.setStartBefore(tmp);\n            start = tmpRange.startContainer;\n        }\n        if (\n            start.nodeType == 1 &&\n            domUtils.isEmptyNode(start) &&\n            tmpRange.startOffset == 1\n        ) {\n            tmpRange.setStart(start, 0).collapse(true);\n        }\n        while (!tmpRange.startOffset) {\n            start = tmpRange.startContainer;\n            if (domUtils.isBlockElm(start) || domUtils.isBody(start)) {\n                flag = 1;\n                break;\n            }\n            var pre = tmpRange.startContainer.previousSibling,\n                tmpNode;\n            if (!pre) {\n                tmpRange.setStartBefore(tmpRange.startContainer);\n            } else {\n                while (pre && domUtils.isFillChar(pre)) {\n                    tmpNode = pre;\n                    pre = pre.previousSibling;\n                }\n                if (tmpNode) {\n                    tmpRange.setStartBefore(tmpNode);\n                } else {\n                    tmpRange.setStartBefore(tmpRange.startContainer);\n                }\n            }\n        }\n        return flag && !domUtils.isBody(tmpRange.startContainer) ? 1 : 0;\n    },\n\n    /**\n     * 判断给定的元素是否是一个空元素\n     * @method isEmptyBlock\n     * @param { Element } node 需要判断的元素\n     * @return { Boolean } 是否是空元素\n     * @example\n     * ```html\n     * <div id=\"test\"></div>\n     *\n     * <script>\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isEmptyBlock( document.getElementById(\"test\") ) );\n     * </script>\n     * ```\n     */\n\n    /**\n     * 根据指定的判断规则判断给定的元素是否是一个空元素\n     * @method isEmptyBlock\n     * @param { Element } node 需要判断的元素\n     * @param { RegExp } reg 对内容执行判断的正则表达式对象\n     * @return { Boolean } 是否是空元素\n     */\n    isEmptyBlock: function (node, reg) {\n        if (node.nodeType != 1) return 0;\n        reg = reg || new RegExp(\"[ \\xa0\\t\\r\\n\" + domUtils.fillChar + \"]\", \"g\");\n\n        if (\n            node[browser.ie ? \"innerText\" : \"textContent\"].replace(reg, \"\").length > 0\n        ) {\n            return 0;\n        }\n        for (var n in dtd.$isNotEmpty) {\n            if (node.getElementsByTagName(n).length) {\n                return 0;\n            }\n        }\n        return 1;\n    },\n\n    /**\n     * 移动元素使得该元素的位置移动指定的偏移量的距离\n     * @method setViewportOffset\n     * @param { Element } element 需要设置偏移量的元素\n     * @param { Object } offset 偏移量， 形如{ left: 100, top: 50 }的一个键值对， 表示该元素将在\n     *                                  现有的位置上向水平方向偏移offset.left的距离， 在竖直方向上偏移\n     *                                  offset.top的距离\n     * @example\n     * ```html\n     * <div id=\"test\" style=\"top: 100px; left: 50px; position: absolute;\"></div>\n     *\n     * <script>\n     *\n     *     var testNode = document.getElementById(\"test\");\n     *\n     *     UE.dom.domUtils.setViewportOffset( testNode, {\n     *         left: 200,\n     *         top: 50\n     *     } );\n     *\n     *     //output: top: 300px; left: 100px; position: absolute;\n     *     console.log( testNode.style.cssText );\n     *\n     * </script>\n     * ```\n     */\n    setViewportOffset: function (element, offset) {\n        var left = parseInt(element.style.left) | 0;\n        var top = parseInt(element.style.top) | 0;\n        var rect = element.getBoundingClientRect();\n        var offsetLeft = offset.left - rect.left;\n        var offsetTop = offset.top - rect.top;\n        if (offsetLeft) {\n            element.style.left = left + offsetLeft + \"px\";\n        }\n        if (offsetTop) {\n            element.style.top = top + offsetTop + \"px\";\n        }\n    },\n\n    /**\n     * 用“填充字符”填充节点\n     * @method fillNode\n     * @private\n     * @param { DomDocument } doc 填充的节点所在的docment对象\n     * @param { Node } node 需要填充的节点对象\n     * @example\n     * ```html\n     * <div id=\"test\"></div>\n     *\n     * <script>\n     *     var testNode = document.getElementById(\"test\");\n     *\n     *     //output: 0\n     *     console.log( testNode.childNodes.length );\n     *\n     *     UE.dom.domUtils.fillNode( document, testNode );\n     *\n     *     //output: 1\n     *     console.log( testNode.childNodes.length );\n     *\n     * </script>\n     * ```\n     */\n    fillNode: function (doc, node) {\n        var tmpNode = browser.ie\n            ? doc.createTextNode(domUtils.fillChar)\n            : doc.createElement(\"br\");\n        node.innerHTML = \"\";\n        node.appendChild(tmpNode);\n    },\n\n    /**\n     * 把节点src的所有子节点追加到另一个节点tag上去\n     * @method moveChild\n     * @param { Node } src 源节点， 该节点下的所有子节点将被移除\n     * @param { Node } tag 目标节点， 从源节点移除的子节点将被追加到该节点下\n     * @example\n     * ```html\n     * <div id=\"test1\">\n     *      <span></span>\n     * </div>\n     * <div id=\"test2\">\n     *     <div></div>\n     * </div>\n     *\n     * <script>\n     *\n     *     var test1 = document.getElementById(\"test1\"),\n     *         test2 = document.getElementById(\"test2\");\n     *\n     *     UE.dom.domUtils.moveChild( test1, test2 );\n     *\n     *     //output: \"\"（空字符串）\n     *     console.log( test1.innerHTML );\n     *\n     *     //output: \"<div></div><span></span>\"\n     *     console.log( test2.innerHTML );\n     *\n     * </script>\n     * ```\n     */\n\n    /**\n     * 把节点src的所有子节点移动到另一个节点tag上去, 可以通过dir参数控制附加的行为是“追加”还是“插入顶部”\n     * @method moveChild\n     * @param { Node } src 源节点， 该节点下的所有子节点将被移除\n     * @param { Node } tag 目标节点， 从源节点移除的子节点将被附加到该节点下\n     * @param { Boolean } dir 附加方式， 如果为true， 则附加进去的节点将被放到目标节点的顶部， 反之，则放到末尾\n     * @example\n     * ```html\n     * <div id=\"test1\">\n     *      <span></span>\n     * </div>\n     * <div id=\"test2\">\n     *     <div></div>\n     * </div>\n     *\n     * <script>\n     *\n     *     var test1 = document.getElementById(\"test1\"),\n     *         test2 = document.getElementById(\"test2\");\n     *\n     *     UE.dom.domUtils.moveChild( test1, test2, true );\n     *\n     *     //output: \"\"（空字符串）\n     *     console.log( test1.innerHTML );\n     *\n     *     //output: \"<span></span><div></div>\"\n     *     console.log( test2.innerHTML );\n     *\n     * </script>\n     * ```\n     */\n    moveChild: function (src, tag, dir) {\n        while (src.firstChild) {\n            if (dir && tag.firstChild) {\n                tag.insertBefore(src.lastChild, tag.firstChild);\n            } else {\n                tag.appendChild(src.firstChild);\n            }\n        }\n    },\n\n    /**\n     * 判断节点的标签上是否不存在任何属性\n     * @method hasNoAttributes\n     * @private\n     * @param { Node } node 需要检测的节点对象\n     * @return { Boolean } 节点是否不包含任何属性\n     * @example\n     * ```html\n     * <div id=\"test\"><span>xxxx</span></div>\n     *\n     * <script>\n     *\n     *     //output: false\n     *     console.log( UE.dom.domUtils.hasNoAttributes( document.getElementById(\"test\") ) );\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.hasNoAttributes( document.getElementById(\"test\").firstChild ) );\n     *\n     * </script>\n     * ```\n     */\n    hasNoAttributes: function (node) {\n        return browser.ie\n            ? /^<\\w+\\s*?>/.test(node.outerHTML)\n            : node.attributes.length == 0;\n    },\n\n    /**\n     * 检测节点是否是UEditor所使用的辅助节点\n     * @method isCustomeNode\n     * @private\n     * @param { Node } node 需要检测的节点\n     * @remind 辅助节点是指编辑器要完成工作临时添加的节点， 在输出的时候将会从编辑器内移除， 不会影响最终的结果。\n     * @return { Boolean } 给定的节点是否是一个辅助节点\n     */\n    isCustomeNode: function (node) {\n        return node.nodeType == 1 && node.getAttribute(\"_ue_custom_node_\");\n    },\n\n    /**\n     * 检测节点的标签是否是给定的标签\n     * @method isTagNode\n     * @param { Node } node 需要检测的节点对象\n     * @param { String } tagName 标签\n     * @return { Boolean } 节点的标签是否是给定的标签\n     * @example\n     * ```html\n     * <div id=\"test\"></div>\n     *\n     * <script>\n     *\n     *     //output: true\n     *     console.log( UE.dom.domUtils.isTagNode( document.getElementById(\"test\"), \"div\" ) );\n     *\n     * </script>\n     * ```\n     */\n    isTagNode: function (node, tagNames) {\n        return (\n            node.nodeType == 1 &&\n            new RegExp(\"\\\\b\" + node.tagName + \"\\\\b\", \"i\").test(tagNames)\n        );\n    },\n\n    /**\n     * 给定一个节点数组，在通过指定的过滤器过滤后， 获取其中满足过滤条件的第一个节点\n     * @method filterNodeList\n     * @param { Array } nodeList 需要过滤的节点数组\n     * @param { Function } fn 过滤器， 对符合条件的节点， 执行结果返回true， 反之则返回false\n     * @return { Node | NULL } 如果找到符合过滤条件的节点， 则返回该节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var divNodes = document.getElementsByTagName(\"div\");\n     * divNodes = [].slice.call( divNodes, 0 );\n     *\n     * //output: null\n     * console.log( UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {\n     *     return node.tagName.toLowerCase() !== 'div';\n     * } ) );\n     * ```\n     */\n\n    /**\n     * 给定一个节点数组nodeList和一组标签名tagNames， 获取其中能够匹配标签名的节点集合中的第一个节点\n     * @method filterNodeList\n     * @param { Array } nodeList 需要过滤的节点数组\n     * @param { String } tagNames 需要匹配的标签名， 多个标签名之间用空格分割\n     * @return { Node | NULL } 如果找到标签名匹配的节点， 则返回该节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var divNodes = document.getElementsByTagName(\"div\");\n     * divNodes = [].slice.call( divNodes, 0 );\n     *\n     * //output: null\n     * console.log( UE.dom.domUtils.filterNodeList( divNodes, 'a span' ) );\n     * ```\n     */\n\n    /**\n     * 给定一个节点数组，在通过指定的过滤器过滤后， 如果参数forAll为true， 则会返回所有满足过滤\n     * 条件的节点集合， 否则， 返回满足条件的节点集合中的第一个节点\n     * @method filterNodeList\n     * @param { Array } nodeList 需要过滤的节点数组\n     * @param { Function } fn 过滤器， 对符合条件的节点， 执行结果返回true， 反之则返回false\n     * @param { Boolean } forAll 是否返回整个节点数组, 如果该参数为false， 则返回节点集合中的第一个节点\n     * @return { Array | Node | NULL } 如果找到符合过滤条件的节点， 则根据参数forAll的值决定返回满足\n     *                                      过滤条件的节点数组或第一个节点， 否则返回NULL\n     * @example\n     * ```javascript\n     * var divNodes = document.getElementsByTagName(\"div\");\n     * divNodes = [].slice.call( divNodes, 0 );\n     *\n     * //output: 3（假定有3个div）\n     * console.log( divNodes.length );\n     *\n     * var nodes = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {\n     *     return node.tagName.toLowerCase() === 'div';\n     * }, true );\n     *\n     * //output: 3\n     * console.log( nodes.length );\n     *\n     * var node = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {\n     *     return node.tagName.toLowerCase() === 'div';\n     * }, false );\n     *\n     * //output: div\n     * console.log( node.nodeName );\n     * ```\n     */\n    filterNodeList: function (nodelist, filter, forAll) {\n        var results = [];\n        if (!utils.isFunction(filter)) {\n            var str = filter;\n            filter = function (n) {\n                return (\n                    utils.indexOf(\n                        utils.isArray(str) ? str : str.split(\" \"),\n                        n.tagName.toLowerCase()\n                    ) != -1\n                );\n            };\n        }\n        utils.each(nodelist, function (n) {\n            filter(n) && results.push(n);\n        });\n        return results.length == 0\n            ? null\n            : results.length == 1 || !forAll ? results[0] : results;\n    },\n\n    /**\n     * 查询给定的range选区是否在给定的node节点内，且在该节点的最末尾\n     * @method isInNodeEndBoundary\n     * @param { UE.dom.Range } rng 需要判断的range对象， 该对象的startContainer不能为NULL\n     * @param node 需要检测的节点对象\n     * @return { Number } 如果给定的选取range对象是在node内部的最末端， 则返回1, 否则返回0\n     */\n    isInNodeEndBoundary: function (rng, node) {\n        var start = rng.startContainer;\n        if (start.nodeType == 3 && rng.startOffset != start.nodeValue.length) {\n            return 0;\n        }\n        if (start.nodeType == 1 && rng.startOffset != start.childNodes.length) {\n            return 0;\n        }\n        while (start !== node) {\n            if (start.nextSibling) {\n                return 0;\n            }\n            start = start.parentNode;\n        }\n        return 1;\n    },\n    isBoundaryNode: function (node, dir) {\n        var tmp;\n        while (!domUtils.isBody(node)) {\n            tmp = node;\n            node = node.parentNode;\n            if (tmp !== node[dir]) {\n                return false;\n            }\n        }\n        return true;\n    },\n    fillHtml: browser.ie11below ? \"&nbsp;\" : \"<br/>\",\n    loadScript: function (url, cb) {\n        var script;\n        script = document.createElement('script');\n        script.src = url;\n        script.onload = function () {\n            cb && cb({isNew: true})\n        };\n        document.getElementsByTagName('head')[0].appendChild(script);\n    }\n});\nvar fillCharReg = new RegExp(domUtils.fillChar, \"g\");\n"
  },
  {
    "path": "_src/core/dtd.js",
    "content": "///import editor.js\n///import core/dom/dom.js\n///import core/utils.js\n/**\n * dtd html语义化的体现类\n * @constructor\n * @namespace dtd\n */\nvar dtd = (dom.dtd = (function () {\n    function _(s) {\n        for (var k in s) {\n            s[k.toUpperCase()] = s[k];\n        }\n        return s;\n    }\n\n    var X = utils.extend2;\n    var A = _({isindex: 1, fieldset: 1}),\n        B = _({input: 1, button: 1, select: 1, textarea: 1, label: 1}),\n        C = X(_({a: 1}), B),\n        D = X({iframe: 1}, C),\n        E = _({\n            hr: 1,\n            ul: 1,\n            menu: 1,\n            div: 1,\n            blockquote: 1,\n            noscript: 1,\n            table: 1,\n            center: 1,\n            address: 1,\n            dir: 1,\n            pre: 1,\n            h5: 1,\n            dl: 1,\n            h4: 1,\n            noframes: 1,\n            h6: 1,\n            ol: 1,\n            h1: 1,\n            h3: 1,\n            h2: 1\n        }),\n        F = _({ins: 1, del: 1, script: 1, style: 1}),\n        G = X(\n            _({\n                mark: 1,\n                b: 1,\n                acronym: 1,\n                bdo: 1,\n                var: 1,\n                \"#\": 1,\n                abbr: 1,\n                code: 1,\n                br: 1,\n                i: 1,\n                cite: 1,\n                kbd: 1,\n                u: 1,\n                strike: 1,\n                s: 1,\n                tt: 1,\n                strong: 1,\n                q: 1,\n                samp: 1,\n                em: 1,\n                dfn: 1,\n                span: 1\n            }),\n            F\n        ),\n        H = X(\n            _({\n                sub: 1,\n                img: 1,\n                embed: 1,\n                object: 1,\n                sup: 1,\n                basefont: 1,\n                map: 1,\n                applet: 1,\n                font: 1,\n                big: 1,\n                small: 1\n            }),\n            G\n        ),\n        I = X(_({p: 1}), H),\n        J = X(_({iframe: 1}), H, B),\n        K = _({\n            img: 1,\n            embed: 1,\n            noscript: 1,\n            br: 1,\n            kbd: 1,\n            center: 1,\n            button: 1,\n            basefont: 1,\n            h5: 1,\n            h4: 1,\n            samp: 1,\n            h6: 1,\n            ol: 1,\n            h1: 1,\n            h3: 1,\n            h2: 1,\n            form: 1,\n            font: 1,\n            \"#\": 1,\n            select: 1,\n            menu: 1,\n            ins: 1,\n            abbr: 1,\n            label: 1,\n            code: 1,\n            table: 1,\n            script: 1,\n            cite: 1,\n            input: 1,\n            iframe: 1,\n            strong: 1,\n            textarea: 1,\n            noframes: 1,\n            big: 1,\n            small: 1,\n            span: 1,\n            hr: 1,\n            sub: 1,\n            bdo: 1,\n            var: 1,\n            div: 1,\n            object: 1,\n            sup: 1,\n            strike: 1,\n            dir: 1,\n            map: 1,\n            dl: 1,\n            applet: 1,\n            del: 1,\n            isindex: 1,\n            fieldset: 1,\n            ul: 1,\n            b: 1,\n            acronym: 1,\n            a: 1,\n            blockquote: 1,\n            i: 1,\n            u: 1,\n            s: 1,\n            tt: 1,\n            address: 1,\n            q: 1,\n            pre: 1,\n            p: 1,\n            em: 1,\n            dfn: 1\n        }),\n        L = X(_({a: 0}), J), //a不能被切开，所以把他\n        M = _({tr: 1}),\n        N = _({\"#\": 1}),\n        O = X(_({param: 1}), K),\n        P = X(_({form: 1}), A, D, E, I),\n        Q = _({li: 1, ol: 1, ul: 1}),\n        R = _({style: 1, script: 1}),\n        S = _({base: 1, link: 1, meta: 1, title: 1}),\n        T = X(S, R),\n        U = _({head: 1, body: 1}),\n        V = _({html: 1});\n\n    var block = _({\n            address: 1,\n            blockquote: 1,\n            center: 1,\n            dir: 1,\n            div: 1,\n            dl: 1,\n            fieldset: 1,\n            form: 1,\n            h1: 1,\n            h2: 1,\n            h3: 1,\n            h4: 1,\n            h5: 1,\n            h6: 1,\n            hr: 1,\n            isindex: 1,\n            menu: 1,\n            noframes: 1,\n            ol: 1,\n            p: 1,\n            pre: 1,\n            table: 1,\n            ul: 1\n        }),\n        empty = _({\n            area: 1,\n            base: 1,\n            basefont: 1,\n            br: 1,\n            col: 1,\n            command: 1,\n            dialog: 1,\n            embed: 1,\n            hr: 1,\n            img: 1,\n            input: 1,\n            isindex: 1,\n            keygen: 1,\n            link: 1,\n            meta: 1,\n            param: 1,\n            source: 1,\n            track: 1,\n            wbr: 1\n        });\n\n    return _({\n        // $ 表示自定的属性\n\n        // body外的元素列表.\n        $nonBodyContent: X(V, U, S),\n\n        //块结构元素列表\n        $block: block,\n\n        //内联元素列表\n        $inline: L,\n\n        $inlineWithA: X(_({a: 1}), L),\n\n        $body: X(_({script: 1, style: 1}), block),\n\n        $cdata: _({script: 1, style: 1}),\n\n        //自闭和元素\n        $empty: empty,\n\n        //不是自闭合，但不能让range选中里边\n        $nonChild: _({iframe: 1, textarea: 1}),\n        //列表元素列表\n        $listItem: _({dd: 1, dt: 1, li: 1}),\n\n        //列表根元素列表\n        $list: _({ul: 1, ol: 1, dl: 1}),\n\n        //不能认为是空的元素\n        $isNotEmpty: _({\n            table: 1,\n            ul: 1,\n            ol: 1,\n            dl: 1,\n            iframe: 1,\n            area: 1,\n            base: 1,\n            col: 1,\n            hr: 1,\n            img: 1,\n            embed: 1,\n            input: 1,\n            textarea: 1,\n            link: 1,\n            meta: 1,\n            param: 1,\n            h1: 1,\n            h2: 1,\n            h3: 1,\n            h4: 1,\n            h5: 1,\n            h6: 1\n        }),\n\n        //如果没有子节点就可以删除的元素列表，像span,a\n        $removeEmpty: _({\n            a: 1,\n            abbr: 1,\n            acronym: 1,\n            address: 1,\n            b: 1,\n            bdo: 1,\n            big: 1,\n            cite: 1,\n            code: 1,\n            del: 1,\n            dfn: 1,\n            em: 1,\n            font: 1,\n            i: 1,\n            ins: 1,\n            label: 1,\n            kbd: 1,\n            q: 1,\n            s: 1,\n            samp: 1,\n            small: 1,\n            span: 1,\n            strike: 1,\n            strong: 1,\n            sub: 1,\n            sup: 1,\n            tt: 1,\n            u: 1,\n            var: 1\n        }),\n\n        $removeEmptyBlock: _({p: 1, div: 1}),\n\n        //在table元素里的元素列表\n        $tableContent: _({\n            caption: 1,\n            col: 1,\n            colgroup: 1,\n            tbody: 1,\n            td: 1,\n            tfoot: 1,\n            th: 1,\n            thead: 1,\n            tr: 1,\n            table: 1\n        }),\n        //不转换的标签\n        $notTransContent: _({pre: 1, script: 1, style: 1, textarea: 1}),\n        html: U,\n        head: T,\n        style: N,\n        script: N,\n        body: P,\n        base: {},\n        link: {},\n        meta: {},\n        title: N,\n        col: {},\n        tr: _({td: 1, th: 1}),\n        img: {},\n        embed: {},\n        colgroup: _({thead: 1, col: 1, tbody: 1, tr: 1, tfoot: 1}),\n        noscript: P,\n        td: P,\n        br: {},\n        th: P,\n        center: P,\n        kbd: L,\n        button: X(I, E),\n        basefont: {},\n        h5: L,\n        h4: L,\n        samp: L,\n        h6: L,\n        ol: Q,\n        h1: L,\n        h3: L,\n        option: N,\n        h2: L,\n        form: X(A, D, E, I),\n        select: _({optgroup: 1, option: 1}),\n        font: L,\n        ins: L,\n        menu: Q,\n        abbr: L,\n        label: L,\n        table: _({\n            thead: 1,\n            col: 1,\n            tbody: 1,\n            tr: 1,\n            colgroup: 1,\n            caption: 1,\n            tfoot: 1\n        }),\n        code: L,\n        tfoot: M,\n        cite: L,\n        li: P,\n        input: {},\n        iframe: P,\n        strong: L,\n        textarea: N,\n        noframes: P,\n        big: L,\n        small: L,\n        //trace:\n        span: _({\n            \"#\": 1,\n            br: 1,\n            b: 1,\n            strong: 1,\n            u: 1,\n            i: 1,\n            em: 1,\n            sub: 1,\n            sup: 1,\n            strike: 1,\n            span: 1\n        }),\n        hr: L,\n        dt: L,\n        sub: L,\n        optgroup: _({option: 1}),\n        param: {},\n        bdo: L,\n        var: L,\n        div: P,\n        object: O,\n        sup: L,\n        dd: P,\n        strike: L,\n        area: {},\n        dir: Q,\n        map: X(_({area: 1, form: 1, p: 1}), A, F, E),\n        applet: O,\n        dl: _({dt: 1, dd: 1}),\n        del: L,\n        isindex: {},\n        fieldset: X(_({legend: 1}), K),\n        thead: M,\n        ul: Q,\n        acronym: L,\n        b: L,\n        a: X(_({a: 1}), J),\n        blockquote: X(_({td: 1, tr: 1, tbody: 1, li: 1}), P),\n        caption: L,\n        i: L,\n        u: L,\n        tbody: M,\n        s: L,\n        address: X(D, I),\n        tt: L,\n        legend: L,\n        q: L,\n        pre: X(G, C),\n        p: X(_({a: 1}), L),\n        em: L,\n        dfn: L,\n        mark: L\n    });\n})());\n"
  },
  {
    "path": "_src/core/filternode.js",
    "content": "/**\n * UE过滤节点的静态方法\n * @file\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @module UE\n */\n\n/**\n * 根据传入节点和过滤规则过滤相应节点\n * @module UE\n * @since 1.2.6.1\n * @method filterNode\n * @param { Object } root 指定root节点\n * @param { Object } rules 过滤规则json对象\n * @example\n * ```javascript\n * UE.filterNode(root,editor.options.filterRules);\n * ```\n */\nvar filterNode = (UE.filterNode = (function () {\n    function filterNode(node, rules) {\n        switch (node.type) {\n            case \"text\":\n                break;\n            case \"element\":\n                var val;\n                if ((val = rules[node.tagName])) {\n                    if (val === \"-\") {\n                        node.parentNode.removeChild(node);\n                    } else if (utils.isFunction(val)) {\n                        var parentNode = node.parentNode,\n                            index = node.getIndex();\n                        val(node);\n                        if (node.parentNode) {\n                            if (node.children) {\n                                for (var i = 0, ci; (ci = node.children[i]);) {\n                                    filterNode(ci, rules);\n                                    if (ci.parentNode) {\n                                        i++;\n                                    }\n                                }\n                            }\n                        } else {\n                            for (var i = index, ci; (ci = parentNode.children[i]);) {\n                                filterNode(ci, rules);\n                                if (ci.parentNode) {\n                                    i++;\n                                }\n                            }\n                        }\n                    } else {\n                        var attrs = val[\"$\"];\n                        if (attrs && node.attrs) {\n                            var tmpAttrs = {},\n                                tmpVal;\n                            for (var a in attrs) {\n                                tmpVal = node.getAttr(a);\n                                //todo 只先对style单独处理\n                                if (a == \"style\" && utils.isArray(attrs[a])) {\n                                    var tmpCssStyle = [];\n                                    utils.each(attrs[a], function (v) {\n                                        var tmp;\n                                        if ((tmp = node.getStyle(v))) {\n                                            tmpCssStyle.push(v + \":\" + tmp);\n                                        }\n                                    });\n                                    tmpVal = tmpCssStyle.join(\";\");\n                                }\n                                if (tmpVal) {\n                                    tmpAttrs[a] = tmpVal;\n                                }\n                            }\n                            node.attrs = tmpAttrs;\n                        }\n                        if (node.children) {\n                            for (var i = 0, ci; (ci = node.children[i]);) {\n                                filterNode(ci, rules);\n                                if (ci.parentNode) {\n                                    i++;\n                                }\n                            }\n                        }\n                    }\n                } else {\n                    //如果不在名单里扣出子节点并删除该节点,cdata除外\n                    if (dtd.$cdata[node.tagName]) {\n                        node.parentNode.removeChild(node);\n                    } else {\n                        var parentNode = node.parentNode,\n                            index = node.getIndex();\n                        node.parentNode.removeChild(node, true);\n                        for (var i = index, ci; (ci = parentNode.children[i]);) {\n                            filterNode(ci, rules);\n                            if (ci.parentNode) {\n                                i++;\n                            }\n                        }\n                    }\n                }\n                break;\n            case \"comment\":\n                node.parentNode.removeChild(node);\n        }\n    }\n\n    return function (root, rules) {\n        if (utils.isEmptyObject(rules)) {\n            return root;\n        }\n        var val;\n        if ((val = rules[\"-\"])) {\n            utils.each(val.split(\" \"), function (k) {\n                rules[k] = \"-\";\n            });\n        }\n        for (var i = 0, ci; (ci = root.children[i]);) {\n            filterNode(ci, rules);\n            if (ci.parentNode) {\n                i++;\n            }\n        }\n        return root;\n    };\n})());\n"
  },
  {
    "path": "_src/core/filterword.js",
    "content": "/**\n * UE过滤word的静态方法\n * @file\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @module UE\n */\n\n/**\n * 根据传入html字符串过滤word\n * @module UE\n * @since 1.2.6.1\n * @method filterWord\n * @param { String } html html字符串\n * @return { String } 已过滤后的结果字符串\n * @example\n * ```javascript\n * UE.filterWord(html);\n * ```\n */\nvar filterWord = (UE.filterWord = (function () {\n    //是否是word过来的内容\n    function isWordDocument(str) {\n        return /(class=\"?Mso|style=\"[^\"]*\\bmso\\-|w:WordDocument|<(v|o):|lang=)/gi.test(\n            str\n        );\n    }\n\n    //去掉小数\n    function transUnit(v) {\n        v = v.replace(/[\\d.]+\\w+/g, function (m) {\n            return utils.transUnitToPx(m);\n        });\n        return v;\n    }\n\n    function filterPasteWord(str) {\n        return (\n            str\n                .replace(/[\\t\\r\\n]+/g, \" \")\n                .replace(/<!--[\\s\\S]*?-->/gi, \"\")\n                //转换图片\n                .replace(/<v:shape [^>]*>[\\s\\S]*?.<\\/v:shape>/gi, function (str) {\n                    //opera能自己解析出image所这里直接返回空\n                    if (browser.opera) {\n                        return \"\";\n                    }\n                    try {\n                        //有可能是bitmap占为图，无用，直接过滤掉，主要体现在粘贴excel表格中\n                        if (/Bitmap/i.test(str)) {\n                            return \"\";\n                        }\n                        var width = str.match(/width:([ \\d.]*p[tx])/i)[1],\n                            height = str.match(/height:([ \\d.]*p[tx])/i)[1],\n                            src = str.match(/src=\\s*\"([^\"]*)\"/i)[1];\n                        return (\n                            '<img width=\"' +\n                            transUnit(width) +\n                            '\" height=\"' +\n                            transUnit(height) +\n                            '\" src=\"' +\n                            src +\n                            '\" />'\n                        );\n                    } catch (e) {\n                        return \"\";\n                    }\n                })\n                //针对wps添加的多余标签处理\n                .replace(/<\\/?div[^>]*>/g, \"\")\n                //去掉多余的属性\n                .replace(/v:\\w+=([\"']?)[^'\"]+\\1/g, \"\")\n                .replace(\n                    /<(!|script[^>]*>.*?<\\/script(?=[>\\s])|\\/?(\\?xml(:\\w+)?|xml|meta|link|style|\\w+:\\w+)(?=[\\s\\/>]))[^>]*>/gi,\n                    \"\"\n                )\n                .replace(\n                    /<p [^>]*class=\"?MsoHeading\"?[^>]*>(.*?)<\\/p>/gi,\n                    \"<p><strong>$1</strong></p>\"\n                )\n                //去掉多余的属性\n                .replace(/\\s+(class|lang|align)\\s*=\\s*(['\"]?)([\\w-]+)\\2/gi, function (\n                    str,\n                    name,\n                    marks,\n                    val\n                ) {\n                    //保留list的标示\n                    return name == \"class\" && val == \"MsoListParagraph\" ? str : \"\";\n                })\n                //清除多余的font/span不能匹配&nbsp;有可能是空格\n                .replace(/<(font|span)[^>]*>(\\s*)<\\/\\1>/gi, function (a, b, c) {\n                    return c.replace(/[\\t\\r\\n ]+/g, \" \");\n                })\n                //处理style的问题\n                .replace(/(<[a-z][^>]*)\\sstyle=([\"'])([^\\2]*?)\\2/gi, function (\n                    str,\n                    tag,\n                    tmp,\n                    style\n                ) {\n                    var n = [],\n                        s = style\n                            .replace(/^\\s+|\\s+$/, \"\")\n                            .replace(/&#39;/g, \"'\")\n                            .replace(/&quot;/gi, \"'\")\n                            .replace(/[\\d.]+(cm|pt)/g, function (str) {\n                                return utils.transUnitToPx(str);\n                            })\n                            .split(/;\\s*/g);\n\n                    for (var i = 0, v; (v = s[i]); i++) {\n                        var name,\n                            value,\n                            parts = v.split(\":\");\n\n                        if (parts.length == 2) {\n                            name = parts[0].toLowerCase();\n                            value = parts[1].toLowerCase();\n                            if (\n                                (/^(background)\\w*/.test(name) &&\n                                    value.replace(/(initial|\\s)/g, \"\").length == 0) ||\n                                (/^(margin)\\w*/.test(name) && /^0\\w+$/.test(value))\n                            ) {\n                                continue;\n                            }\n\n                            switch (name) {\n                                case \"mso-padding-alt\":\n                                case \"mso-padding-top-alt\":\n                                case \"mso-padding-right-alt\":\n                                case \"mso-padding-bottom-alt\":\n                                case \"mso-padding-left-alt\":\n                                case \"mso-margin-alt\":\n                                case \"mso-margin-top-alt\":\n                                case \"mso-margin-right-alt\":\n                                case \"mso-margin-bottom-alt\":\n                                case \"mso-margin-left-alt\":\n                                //ie下会出现挤到一起的情况\n                                //case \"mso-table-layout-alt\":\n                                case \"mso-height\":\n                                case \"mso-width\":\n                                case \"mso-vertical-align-alt\":\n                                    //trace:1819 ff下会解析出padding在table上\n                                    if (!/<table/.test(tag))\n                                        n[i] =\n                                            name.replace(/^mso-|-alt$/g, \"\") + \":\" + transUnit(value);\n                                    continue;\n                                case \"horiz-align\":\n                                    n[i] = \"text-align:\" + value;\n                                    continue;\n\n                                case \"vert-align\":\n                                    n[i] = \"vertical-align:\" + value;\n                                    continue;\n\n                                case \"font-color\":\n                                case \"mso-foreground\":\n                                    n[i] = \"color:\" + value;\n                                    continue;\n\n                                case \"mso-background\":\n                                case \"mso-highlight\":\n                                    n[i] = \"background:\" + value;\n                                    continue;\n\n                                case \"mso-default-height\":\n                                    n[i] = \"min-height:\" + transUnit(value);\n                                    continue;\n\n                                case \"mso-default-width\":\n                                    n[i] = \"min-width:\" + transUnit(value);\n                                    continue;\n\n                                case \"mso-padding-between-alt\":\n                                    n[i] =\n                                        \"border-collapse:separate;border-spacing:\" +\n                                        transUnit(value);\n                                    continue;\n\n                                case \"text-line-through\":\n                                    if (value == \"single\" || value == \"double\") {\n                                        n[i] = \"text-decoration:line-through\";\n                                    }\n                                    continue;\n                                case \"mso-zero-height\":\n                                    if (value == \"yes\") {\n                                        n[i] = \"display:none\";\n                                    }\n                                    continue;\n                                //                                case 'background':\n                                //                                    break;\n                                case \"margin\":\n                                    if (!/[1-9]/.test(value)) {\n                                        continue;\n                                    }\n                            }\n\n                            if (\n                                /^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(\n                                    name\n                                ) ||\n                                (/text\\-indent|padding|margin/.test(name) &&\n                                    /\\-[\\d.]+/.test(value))\n                            ) {\n                                continue;\n                            }\n\n                            n[i] = name + \":\" + parts[1];\n                        }\n                    }\n                    return (\n                        tag +\n                        (n.length\n                            ? ' style=\"' + n.join(\";\").replace(/;{2,}/g, \";\") + '\"'\n                            : \"\")\n                    );\n                })\n        );\n    }\n\n    return function (html) {\n        return isWordDocument(html) ? filterPasteWord(html) : html;\n    };\n})());\n"
  },
  {
    "path": "_src/core/htmlparser.js",
    "content": "/**\n * html字符串转换成uNode节点\n * @file\n * @module UE\n * @since 1.2.6.1\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @unfile\n * @module UE\n */\n\n/**\n * html字符串转换成uNode节点的静态方法\n * @method htmlparser\n * @param { String } htmlstr 要转换的html代码\n * @param { Boolean } ignoreBlank 若设置为true，转换的时候忽略\\n\\r\\t等空白字符\n * @return { uNode } 给定的html片段转换形成的uNode对象\n * @example\n * ```javascript\n * var root = UE.htmlparser('<p><b>htmlparser</b></p>', true);\n * ```\n */\n\nvar htmlparser = (UE.htmlparser = function (htmlstr, ignoreBlank) {\n    //todo 原来的方式  [^\"'<>\\/] 有\\/就不能配对上 <TD vAlign=top background=../AAA.JPG> 这样的标签了\n    //先去掉了，加上的原因忘了，这里先记录\n    //var re_tag = /<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\s\\/<>]+)\\s*((?:(?:\"[^\"]*\")|(?:'[^']*')|[^\"'<>])*)\\/?>))/g,\n    //以上的正则表达式无法匹配:<div style=\"text-align:center;font-family:\" font-size:14px;\"=\"\"><img src=\"http://hs-album.oss.aliyuncs.com/static/27/78/35/image/20161206/20161206174331_41105.gif\" alt=\"\" /><br /></div>\n    //修改为如下正则表达式:\n    var re_tag = /<(?:(?:\\/([^>]+)>)|(?:!--([\\S|\\s]*?)-->)|(?:([^\\/\\s>]+)((?:\\s+[\\w\\-:.]+(?:\\s*=\\s*?(?:(?:\"[^\"]*\")|(?:'[^']*')|[^\\s\"'\\/>]+))?)*)[\\S\\s]*?(\\/?)>))/g,\n        re_attr = /([\\w\\-:.]+)(?:(?:\\s*=\\s*(?:(?:\"([^\"]*)\")|(?:'([^']*)')|([^\\s>]+)))|(?=\\s|$))/g;\n\n    //ie下取得的html可能会有\\n存在，要去掉，在处理replace(/[\\t\\r\\n]*/g,'');代码高量的\\n不能去除\n    var allowEmptyTags = {\n        b: 1,\n        code: 1,\n        i: 1,\n        u: 1,\n        strike: 1,\n        s: 1,\n        tt: 1,\n        strong: 1,\n        q: 1,\n        samp: 1,\n        em: 1,\n        span: 1,\n        sub: 1,\n        img: 1,\n        sup: 1,\n        font: 1,\n        big: 1,\n        small: 1,\n        iframe: 1,\n        a: 1,\n        br: 1,\n        pre: 1\n    };\n    htmlstr = htmlstr.replace(new RegExp(domUtils.fillChar, \"g\"), \"\");\n    if (!ignoreBlank) {\n        htmlstr = htmlstr.replace(\n            new RegExp(\n                \"[\\\\r\\\\t\\\\n\" +\n                (ignoreBlank ? \"\" : \" \") +\n                \"]*</?(\\\\w+)\\\\s*(?:[^>]*)>[\\\\r\\\\t\\\\n\" +\n                (ignoreBlank ? \"\" : \" \") +\n                \"]*\",\n                \"g\"\n            ),\n            function (a, b) {\n                //br暂时单独处理\n                if (b && allowEmptyTags[b.toLowerCase()]) {\n                    return a.replace(/(^[\\n\\r]+)|([\\n\\r]+$)/g, \"\");\n                }\n                return a\n                    .replace(new RegExp(\"^[\\\\r\\\\n\" + (ignoreBlank ? \"\" : \" \") + \"]+\"), \"\")\n                    .replace(\n                        new RegExp(\"[\\\\r\\\\n\" + (ignoreBlank ? \"\" : \" \") + \"]+$\"),\n                        \"\"\n                    );\n            }\n        );\n    }\n\n    var notTransAttrs = {\n        href: 1,\n        src: 1\n    };\n\n    var uNode = UE.uNode,\n        needParentNode = {\n            td: \"tr\",\n            tr: [\"tbody\", \"thead\", \"tfoot\"],\n            tbody: \"table\",\n            th: \"tr\",\n            thead: \"table\",\n            tfoot: \"table\",\n            caption: \"table\",\n            li: [\"ul\", \"ol\"],\n            dt: \"dl\",\n            dd: \"dl\",\n            option: \"select\"\n        },\n        needChild = {\n            ol: \"li\",\n            ul: \"li\"\n        };\n\n    function text(parent, data) {\n        if (needChild[parent.tagName]) {\n            var tmpNode = uNode.createElement(needChild[parent.tagName]);\n            parent.appendChild(tmpNode);\n            tmpNode.appendChild(uNode.createText(data));\n            parent = tmpNode;\n        } else {\n            parent.appendChild(uNode.createText(data));\n        }\n    }\n\n    function element(parent, tagName, htmlattr) {\n        var needParentTag;\n        if ((needParentTag = needParentNode[tagName])) {\n            var tmpParent = parent,\n                hasParent;\n            while (tmpParent.type != \"root\") {\n                if (\n                    utils.isArray(needParentTag)\n                        ? utils.indexOf(needParentTag, tmpParent.tagName) != -1\n                        : needParentTag == tmpParent.tagName\n                ) {\n                    parent = tmpParent;\n                    hasParent = true;\n                    break;\n                }\n                tmpParent = tmpParent.parentNode;\n            }\n            if (!hasParent) {\n                parent = element(\n                    parent,\n                    utils.isArray(needParentTag) ? needParentTag[0] : needParentTag\n                );\n            }\n        }\n        //按dtd处理嵌套\n        //        if(parent.type != 'root' && !dtd[parent.tagName][tagName])\n        //            parent = parent.parentNode;\n        var elm = new uNode({\n            parentNode: parent,\n            type: \"element\",\n            tagName: tagName.toLowerCase(),\n            //是自闭合的处理一下\n            children: dtd.$empty[tagName] ? null : []\n        });\n        //如果属性存在，处理属性\n        if (htmlattr) {\n            var attrs = {},\n                match;\n            while ((match = re_attr.exec(htmlattr))) {\n                attrs[match[1].toLowerCase()] = notTransAttrs[match[1].toLowerCase()]\n                    ? match[2] || match[3] || match[4]\n                    : utils.unhtml(match[2] || match[3] || match[4]);\n            }\n            elm.attrs = attrs;\n        }\n        //trace:3970\n        //        //如果parent下不能放elm\n        //        if(dtd.$inline[parent.tagName] && dtd.$block[elm.tagName] && !dtd[parent.tagName][elm.tagName]){\n        //            parent = parent.parentNode;\n        //            elm.parentNode = parent;\n        //        }\n        parent.children.push(elm);\n        //如果是自闭合节点返回父亲节点\n        return dtd.$empty[tagName] ? parent : elm;\n    }\n\n    function comment(parent, data) {\n        parent.children.push(\n            new uNode({\n                type: \"comment\",\n                data: data,\n                parentNode: parent\n            })\n        );\n    }\n\n    var match,\n        currentIndex = 0,\n        nextIndex = 0;\n    //设置根节点\n    var root = new uNode({\n        type: \"root\",\n        children: []\n    });\n    var currentParent = root;\n\n    while ((match = re_tag.exec(htmlstr))) {\n        currentIndex = match.index;\n        try {\n            if (currentIndex > nextIndex) {\n                //text node\n                text(currentParent, htmlstr.slice(nextIndex, currentIndex));\n            }\n            if (match[3]) {\n                if (dtd.$cdata[currentParent.tagName]) {\n                    text(currentParent, match[0]);\n                } else {\n                    //start tag\n                    currentParent = element(\n                        currentParent,\n                        match[3].toLowerCase(),\n                        match[4]\n                    );\n                }\n            } else if (match[1]) {\n                if (currentParent.type != \"root\") {\n                    if (dtd.$cdata[currentParent.tagName] && !dtd.$cdata[match[1]]) {\n                        text(currentParent, match[0]);\n                    } else {\n                        var tmpParent = currentParent;\n                        while (\n                            currentParent.type == \"element\" &&\n                            currentParent.tagName != match[1].toLowerCase()\n                            ) {\n                            currentParent = currentParent.parentNode;\n                            if (currentParent.type == \"root\") {\n                                currentParent = tmpParent;\n                                throw \"break\";\n                            }\n                        }\n                        //end tag\n                        currentParent = currentParent.parentNode;\n                    }\n                }\n            } else if (match[2]) {\n                //comment\n                comment(currentParent, match[2]);\n            }\n        } catch (e) {\n        }\n\n        nextIndex = re_tag.lastIndex;\n    }\n    //如果结束是文本，就有可能丢掉，所以这里手动判断一下\n    //例如 <li>sdfsdfsdf<li>sdfsdfsdfsdf\n    if (nextIndex < htmlstr.length) {\n        text(currentParent, htmlstr.slice(nextIndex));\n    }\n    return root;\n});\n"
  },
  {
    "path": "_src/core/image.js",
    "content": "UE.image = (function () {\n    // import browser-image-compression\n    // https://www.npmjs.com/package/browser-image-compression\n    var imageCompression = null;\n    !function (e, t) {\n        imageCompression = t();\n    }(this, (function () {\n        \"use strict\";\n\n        function _mergeNamespaces(e, t) {\n            return t.forEach((function (t) {\n                t && \"string\" != typeof t && !Array.isArray(t) && Object.keys(t).forEach((function (r) {\n                    if (\"default\" !== r && !(r in e)) {\n                        var i = Object.getOwnPropertyDescriptor(t, r);\n                        Object.defineProperty(e, r, i.get ? i : {\n                            enumerable: !0, get: function () {\n                                return t[r]\n                            }\n                        })\n                    }\n                }))\n            })), Object.freeze(e)\n        }\n\n        function copyExifWithoutOrientation(e, t) {\n            return new Promise((function (r, i) {\n                let o;\n                return getApp1Segment(e).then((function (e) {\n                    try {\n                        return o = e, r(new Blob([t.slice(0, 2), o, t.slice(2)], {type: \"image/jpeg\"}))\n                    } catch (e) {\n                        return i(e)\n                    }\n                }), i)\n            }))\n        }\n\n        const getApp1Segment = e => new Promise(((t, r) => {\n            const i = new FileReader;\n            i.addEventListener(\"load\", (({target: {result: e}}) => {\n                const i = new DataView(e);\n                let o = 0;\n                if (65496 !== i.getUint16(o)) return r(\"not a valid JPEG\");\n                for (o += 2; ;) {\n                    const a = i.getUint16(o);\n                    if (65498 === a) break;\n                    const s = i.getUint16(o + 2);\n                    if (65505 === a && 1165519206 === i.getUint32(o + 4)) {\n                        const a = o + 10;\n                        let f;\n                        switch (i.getUint16(a)) {\n                            case 18761:\n                                f = !0;\n                                break;\n                            case 19789:\n                                f = !1;\n                                break;\n                            default:\n                                return r(\"TIFF header contains invalid endian\")\n                        }\n                        if (42 !== i.getUint16(a + 2, f)) return r(\"TIFF header contains invalid version\");\n                        const l = i.getUint32(a + 4, f), c = a + l + 2 + 12 * i.getUint16(a + l, f);\n                        for (let e = a + l + 2; e < c; e += 12) {\n                            if (274 == i.getUint16(e, f)) {\n                                if (3 !== i.getUint16(e + 2, f)) return r(\"Orientation data type is invalid\");\n                                if (1 !== i.getUint32(e + 4, f)) return r(\"Orientation data count is invalid\");\n                                i.setUint16(e + 8, 1, f);\n                                break\n                            }\n                        }\n                        return t(e.slice(o, o + 2 + s))\n                    }\n                    o += 2 + s\n                }\n                return t(new Blob)\n            })), i.readAsArrayBuffer(e)\n        }));\n        var e = {};\n        !function (e) {\n            var t, r, UZIP = {};\n            e.exports = UZIP, UZIP.parse = function (e, t) {\n                for (var r = UZIP.bin.readUshort, i = UZIP.bin.readUint, o = 0, a = {}, s = new Uint8Array(e), f = s.length - 4; 101010256 != i(s, f);) f--;\n                o = f;\n                o += 4;\n                var l = r(s, o += 4);\n                r(s, o += 2);\n                var c = i(s, o += 2), u = i(s, o += 4);\n                o += 4, o = u;\n                for (var h = 0; h < l; h++) {\n                    i(s, o), o += 4, o += 4, o += 4, i(s, o += 4);\n                    c = i(s, o += 4);\n                    var d = i(s, o += 4), A = r(s, o += 4), g = r(s, o + 2), p = r(s, o + 4);\n                    o += 6;\n                    var m = i(s, o += 8);\n                    o += 4, o += A + g + p, UZIP._readLocal(s, m, a, c, d, t)\n                }\n                return a\n            }, UZIP._readLocal = function (e, t, r, i, o, a) {\n                var s = UZIP.bin.readUshort, f = UZIP.bin.readUint;\n                f(e, t), s(e, t += 4), s(e, t += 2);\n                var l = s(e, t += 2);\n                f(e, t += 2), f(e, t += 4), t += 4;\n                var c = s(e, t += 8), u = s(e, t += 2);\n                t += 2;\n                var h = UZIP.bin.readUTF8(e, t, c);\n                if (t += c, t += u, a) r[h] = {size: o, csize: i}; else {\n                    var d = new Uint8Array(e.buffer, t);\n                    if (0 == l) r[h] = new Uint8Array(d.buffer.slice(t, t + i)); else {\n                        if (8 != l) throw\"unknown compression method: \" + l;\n                        var A = new Uint8Array(o);\n                        UZIP.inflateRaw(d, A), r[h] = A\n                    }\n                }\n            }, UZIP.inflateRaw = function (e, t) {\n                return UZIP.F.inflate(e, t)\n            }, UZIP.inflate = function (e, t) {\n                return e[0], e[1], UZIP.inflateRaw(new Uint8Array(e.buffer, e.byteOffset + 2, e.length - 6), t)\n            }, UZIP.deflate = function (e, t) {\n                null == t && (t = {level: 6});\n                var r = 0, i = new Uint8Array(50 + Math.floor(1.1 * e.length));\n                i[r] = 120, i[r + 1] = 156, r += 2, r = UZIP.F.deflateRaw(e, i, r, t.level);\n                var o = UZIP.adler(e, 0, e.length);\n                return i[r + 0] = o >>> 24 & 255, i[r + 1] = o >>> 16 & 255, i[r + 2] = o >>> 8 & 255, i[r + 3] = o >>> 0 & 255, new Uint8Array(i.buffer, 0, r + 4)\n            }, UZIP.deflateRaw = function (e, t) {\n                null == t && (t = {level: 6});\n                var r = new Uint8Array(50 + Math.floor(1.1 * e.length)), i = UZIP.F.deflateRaw(e, r, i, t.level);\n                return new Uint8Array(r.buffer, 0, i)\n            }, UZIP.encode = function (e, t) {\n                null == t && (t = !1);\n                var r = 0, i = UZIP.bin.writeUint, o = UZIP.bin.writeUshort, a = {};\n                for (var s in e) {\n                    var f = !UZIP._noNeed(s) && !t, l = e[s], c = UZIP.crc.crc(l, 0, l.length);\n                    a[s] = {cpr: f, usize: l.length, crc: c, file: f ? UZIP.deflateRaw(l) : l}\n                }\n                for (var s in a) r += a[s].file.length + 30 + 46 + 2 * UZIP.bin.sizeUTF8(s);\n                r += 22;\n                var u = new Uint8Array(r), h = 0, d = [];\n                for (var s in a) {\n                    var A = a[s];\n                    d.push(h), h = UZIP._writeHeader(u, h, s, A, 0)\n                }\n                var g = 0, p = h;\n                for (var s in a) {\n                    A = a[s];\n                    d.push(h), h = UZIP._writeHeader(u, h, s, A, 1, d[g++])\n                }\n                var m = h - p;\n                return i(u, h, 101010256), h += 4, o(u, h += 4, g), o(u, h += 2, g), i(u, h += 2, m), i(u, h += 4, p), h += 4, h += 2, u.buffer\n            }, UZIP._noNeed = function (e) {\n                var t = e.split(\".\").pop().toLowerCase();\n                return -1 != \"png,jpg,jpeg,zip\".indexOf(t)\n            }, UZIP._writeHeader = function (e, t, r, i, o, a) {\n                var s = UZIP.bin.writeUint, f = UZIP.bin.writeUshort, l = i.file;\n                return s(e, t, 0 == o ? 67324752 : 33639248), t += 4, 1 == o && (t += 2), f(e, t, 20), f(e, t += 2, 0), f(e, t += 2, i.cpr ? 8 : 0), s(e, t += 2, 0), s(e, t += 4, i.crc), s(e, t += 4, l.length), s(e, t += 4, i.usize), f(e, t += 4, UZIP.bin.sizeUTF8(r)), f(e, t += 2, 0), t += 2, 1 == o && (t += 2, t += 2, s(e, t += 6, a), t += 4), t += UZIP.bin.writeUTF8(e, t, r), 0 == o && (e.set(l, t), t += l.length), t\n            }, UZIP.crc = {\n                table: function () {\n                    for (var e = new Uint32Array(256), t = 0; t < 256; t++) {\n                        for (var r = t, i = 0; i < 8; i++) 1 & r ? r = 3988292384 ^ r >>> 1 : r >>>= 1;\n                        e[t] = r\n                    }\n                    return e\n                }(), update: function (e, t, r, i) {\n                    for (var o = 0; o < i; o++) e = UZIP.crc.table[255 & (e ^ t[r + o])] ^ e >>> 8;\n                    return e\n                }, crc: function (e, t, r) {\n                    return 4294967295 ^ UZIP.crc.update(4294967295, e, t, r)\n                }\n            }, UZIP.adler = function (e, t, r) {\n                for (var i = 1, o = 0, a = t, s = t + r; a < s;) {\n                    for (var f = Math.min(a + 5552, s); a < f;) o += i += e[a++];\n                    i %= 65521, o %= 65521\n                }\n                return o << 16 | i\n            }, UZIP.bin = {\n                readUshort: function (e, t) {\n                    return e[t] | e[t + 1] << 8\n                }, writeUshort: function (e, t, r) {\n                    e[t] = 255 & r, e[t + 1] = r >> 8 & 255\n                }, readUint: function (e, t) {\n                    return 16777216 * e[t + 3] + (e[t + 2] << 16 | e[t + 1] << 8 | e[t])\n                }, writeUint: function (e, t, r) {\n                    e[t] = 255 & r, e[t + 1] = r >> 8 & 255, e[t + 2] = r >> 16 & 255, e[t + 3] = r >> 24 & 255\n                }, readASCII: function (e, t, r) {\n                    for (var i = \"\", o = 0; o < r; o++) i += String.fromCharCode(e[t + o]);\n                    return i\n                }, writeASCII: function (e, t, r) {\n                    for (var i = 0; i < r.length; i++) e[t + i] = r.charCodeAt(i)\n                }, pad: function (e) {\n                    return e.length < 2 ? \"0\" + e : e\n                }, readUTF8: function (e, t, r) {\n                    for (var i, o = \"\", a = 0; a < r; a++) o += \"%\" + UZIP.bin.pad(e[t + a].toString(16));\n                    try {\n                        i = decodeURIComponent(o)\n                    } catch (i) {\n                        return UZIP.bin.readASCII(e, t, r)\n                    }\n                    return i\n                }, writeUTF8: function (e, t, r) {\n                    for (var i = r.length, o = 0, a = 0; a < i; a++) {\n                        var s = r.charCodeAt(a);\n                        if (0 == (4294967168 & s)) e[t + o] = s, o++; else if (0 == (4294965248 & s)) e[t + o] = 192 | s >> 6, e[t + o + 1] = 128 | s >> 0 & 63, o += 2; else if (0 == (4294901760 & s)) e[t + o] = 224 | s >> 12, e[t + o + 1] = 128 | s >> 6 & 63, e[t + o + 2] = 128 | s >> 0 & 63, o += 3; else {\n                            if (0 != (4292870144 & s)) throw\"e\";\n                            e[t + o] = 240 | s >> 18, e[t + o + 1] = 128 | s >> 12 & 63, e[t + o + 2] = 128 | s >> 6 & 63, e[t + o + 3] = 128 | s >> 0 & 63, o += 4\n                        }\n                    }\n                    return o\n                }, sizeUTF8: function (e) {\n                    for (var t = e.length, r = 0, i = 0; i < t; i++) {\n                        var o = e.charCodeAt(i);\n                        if (0 == (4294967168 & o)) r++; else if (0 == (4294965248 & o)) r += 2; else if (0 == (4294901760 & o)) r += 3; else {\n                            if (0 != (4292870144 & o)) throw\"e\";\n                            r += 4\n                        }\n                    }\n                    return r\n                }\n            }, UZIP.F = {}, UZIP.F.deflateRaw = function (e, t, r, i) {\n                var o = [[0, 0, 0, 0, 0], [4, 4, 8, 4, 0], [4, 5, 16, 8, 0], [4, 6, 16, 16, 0], [4, 10, 16, 32, 0], [8, 16, 32, 32, 0], [8, 16, 128, 128, 0], [8, 32, 128, 256, 0], [32, 128, 258, 1024, 1], [32, 258, 258, 4096, 1]][i],\n                    a = UZIP.F.U, s = UZIP.F._goodIndex;\n                UZIP.F._hash;\n                var f = UZIP.F._putsE, l = 0, c = r << 3, u = 0, h = e.length;\n                if (0 == i) {\n                    for (; l < h;) {\n                        f(t, c, l + (_ = Math.min(65535, h - l)) == h ? 1 : 0), c = UZIP.F._copyExact(e, l, _, t, c + 8), l += _\n                    }\n                    return c >>> 3\n                }\n                var d = a.lits, A = a.strt, g = a.prev, p = 0, m = 0, w = 0, v = 0, b = 0, y = 0;\n                for (h > 2 && (A[y = UZIP.F._hash(e, 0)] = 0), l = 0; l < h; l++) {\n                    if (b = y, l + 1 < h - 2) {\n                        y = UZIP.F._hash(e, l + 1);\n                        var E = l + 1 & 32767;\n                        g[E] = A[y], A[y] = E\n                    }\n                    if (u <= l) {\n                        (p > 14e3 || m > 26697) && h - l > 100 && (u < l && (d[p] = l - u, p += 2, u = l), c = UZIP.F._writeBlock(l == h - 1 || u == h ? 1 : 0, d, p, v, e, w, l - w, t, c), p = m = v = 0, w = l);\n                        var F = 0;\n                        l < h - 2 && (F = UZIP.F._bestMatch(e, l, g, b, Math.min(o[2], h - l), o[3]));\n                        var _ = F >>> 16, B = 65535 & F;\n                        if (0 != F) {\n                            B = 65535 & F;\n                            var U = s(_ = F >>> 16, a.of0);\n                            a.lhst[257 + U]++;\n                            var C = s(B, a.df0);\n                            a.dhst[C]++, v += a.exb[U] + a.dxb[C], d[p] = _ << 23 | l - u, d[p + 1] = B << 16 | U << 8 | C, p += 2, u = l + _\n                        } else a.lhst[e[l]]++;\n                        m++\n                    }\n                }\n                for (w == l && 0 != e.length || (u < l && (d[p] = l - u, p += 2, u = l), c = UZIP.F._writeBlock(1, d, p, v, e, w, l - w, t, c), p = 0, m = 0, p = m = v = 0, w = l); 0 != (7 & c);) c++;\n                return c >>> 3\n            }, UZIP.F._bestMatch = function (e, t, r, i, o, a) {\n                var s = 32767 & t, f = r[s], l = s - f + 32768 & 32767;\n                if (f == s || i != UZIP.F._hash(e, t - l)) return 0;\n                for (var c = 0, u = 0, h = Math.min(32767, t); l <= h && 0 != --a && f != s;) {\n                    if (0 == c || e[t + c] == e[t + c - l]) {\n                        var d = UZIP.F._howLong(e, t, l);\n                        if (d > c) {\n                            if (u = l, (c = d) >= o) break;\n                            l + 2 < d && (d = l + 2);\n                            for (var A = 0, g = 0; g < d - 2; g++) {\n                                var p = t - l + g + 32768 & 32767, m = p - r[p] + 32768 & 32767;\n                                m > A && (A = m, f = p)\n                            }\n                        }\n                    }\n                    l += (s = f) - (f = r[s]) + 32768 & 32767\n                }\n                return c << 16 | u\n            }, UZIP.F._howLong = function (e, t, r) {\n                if (e[t] != e[t - r] || e[t + 1] != e[t + 1 - r] || e[t + 2] != e[t + 2 - r]) return 0;\n                var i = t, o = Math.min(e.length, t + 258);\n                for (t += 3; t < o && e[t] == e[t - r];) t++;\n                return t - i\n            }, UZIP.F._hash = function (e, t) {\n                return (e[t] << 8 | e[t + 1]) + (e[t + 2] << 4) & 65535\n            }, UZIP.saved = 0, UZIP.F._writeBlock = function (e, t, r, i, o, a, s, f, l) {\n                var c, u, h, d, A, g, p, m, w, v = UZIP.F.U, b = UZIP.F._putsF, y = UZIP.F._putsE;\n                v.lhst[256]++, u = (c = UZIP.F.getTrees())[0], h = c[1], d = c[2], A = c[3], g = c[4], p = c[5], m = c[6], w = c[7];\n                var E = 32 + (0 == (l + 3 & 7) ? 0 : 8 - (l + 3 & 7)) + (s << 3),\n                    F = i + UZIP.F.contSize(v.fltree, v.lhst) + UZIP.F.contSize(v.fdtree, v.dhst),\n                    _ = i + UZIP.F.contSize(v.ltree, v.lhst) + UZIP.F.contSize(v.dtree, v.dhst);\n                _ += 14 + 3 * p + UZIP.F.contSize(v.itree, v.ihst) + (2 * v.ihst[16] + 3 * v.ihst[17] + 7 * v.ihst[18]);\n                for (var B = 0; B < 286; B++) v.lhst[B] = 0;\n                for (B = 0; B < 30; B++) v.dhst[B] = 0;\n                for (B = 0; B < 19; B++) v.ihst[B] = 0;\n                var U = E < F && E < _ ? 0 : F < _ ? 1 : 2;\n                if (b(f, l, e), b(f, l + 1, U), l += 3, 0 == U) {\n                    for (; 0 != (7 & l);) l++;\n                    l = UZIP.F._copyExact(o, a, s, f, l)\n                } else {\n                    var C, I;\n                    if (1 == U && (C = v.fltree, I = v.fdtree), 2 == U) {\n                        UZIP.F.makeCodes(v.ltree, u), UZIP.F.revCodes(v.ltree, u), UZIP.F.makeCodes(v.dtree, h), UZIP.F.revCodes(v.dtree, h), UZIP.F.makeCodes(v.itree, d), UZIP.F.revCodes(v.itree, d), C = v.ltree, I = v.dtree, y(f, l, A - 257), y(f, l += 5, g - 1), y(f, l += 5, p - 4), l += 4;\n                        for (var Q = 0; Q < p; Q++) y(f, l + 3 * Q, v.itree[1 + (v.ordr[Q] << 1)]);\n                        l += 3 * p, l = UZIP.F._codeTiny(m, v.itree, f, l), l = UZIP.F._codeTiny(w, v.itree, f, l)\n                    }\n                    for (var M = a, x = 0; x < r; x += 2) {\n                        for (var T = t[x], S = T >>> 23, R = M + (8388607 & T); M < R;) l = UZIP.F._writeLit(o[M++], C, f, l);\n                        if (0 != S) {\n                            var O = t[x + 1], P = O >> 16, H = O >> 8 & 255, L = 255 & O;\n                            y(f, l = UZIP.F._writeLit(257 + H, C, f, l), S - v.of0[H]), l += v.exb[H], b(f, l = UZIP.F._writeLit(L, I, f, l), P - v.df0[L]), l += v.dxb[L], M += S\n                        }\n                    }\n                    l = UZIP.F._writeLit(256, C, f, l)\n                }\n                return l\n            }, UZIP.F._copyExact = function (e, t, r, i, o) {\n                var a = o >>> 3;\n                return i[a] = r, i[a + 1] = r >>> 8, i[a + 2] = 255 - i[a], i[a + 3] = 255 - i[a + 1], a += 4, i.set(new Uint8Array(e.buffer, t, r), a), o + (r + 4 << 3)\n            }, UZIP.F.getTrees = function () {\n                for (var e = UZIP.F.U, t = UZIP.F._hufTree(e.lhst, e.ltree, 15), r = UZIP.F._hufTree(e.dhst, e.dtree, 15), i = [], o = UZIP.F._lenCodes(e.ltree, i), a = [], s = UZIP.F._lenCodes(e.dtree, a), f = 0; f < i.length; f += 2) e.ihst[i[f]]++;\n                for (f = 0; f < a.length; f += 2) e.ihst[a[f]]++;\n                for (var l = UZIP.F._hufTree(e.ihst, e.itree, 7), c = 19; c > 4 && 0 == e.itree[1 + (e.ordr[c - 1] << 1)];) c--;\n                return [t, r, l, o, s, c, i, a]\n            }, UZIP.F.getSecond = function (e) {\n                for (var t = [], r = 0; r < e.length; r += 2) t.push(e[r + 1]);\n                return t\n            }, UZIP.F.nonZero = function (e) {\n                for (var t = \"\", r = 0; r < e.length; r += 2) 0 != e[r + 1] && (t += (r >> 1) + \",\");\n                return t\n            }, UZIP.F.contSize = function (e, t) {\n                for (var r = 0, i = 0; i < t.length; i++) r += t[i] * e[1 + (i << 1)];\n                return r\n            }, UZIP.F._codeTiny = function (e, t, r, i) {\n                for (var o = 0; o < e.length; o += 2) {\n                    var a = e[o], s = e[o + 1];\n                    i = UZIP.F._writeLit(a, t, r, i);\n                    var f = 16 == a ? 2 : 17 == a ? 3 : 7;\n                    a > 15 && (UZIP.F._putsE(r, i, s, f), i += f)\n                }\n                return i\n            }, UZIP.F._lenCodes = function (e, t) {\n                for (var r = e.length; 2 != r && 0 == e[r - 1];) r -= 2;\n                for (var i = 0; i < r; i += 2) {\n                    var o = e[i + 1], a = i + 3 < r ? e[i + 3] : -1, s = i + 5 < r ? e[i + 5] : -1,\n                        f = 0 == i ? -1 : e[i - 1];\n                    if (0 == o && a == o && s == o) {\n                        for (var l = i + 5; l + 2 < r && e[l + 2] == o;) l += 2;\n                        (c = Math.min(l + 1 - i >>> 1, 138)) < 11 ? t.push(17, c - 3) : t.push(18, c - 11), i += 2 * c - 2\n                    } else if (o == f && a == o && s == o) {\n                        for (l = i + 5; l + 2 < r && e[l + 2] == o;) l += 2;\n                        var c = Math.min(l + 1 - i >>> 1, 6);\n                        t.push(16, c - 3), i += 2 * c - 2\n                    } else t.push(o, 0)\n                }\n                return r >>> 1\n            }, UZIP.F._hufTree = function (e, t, r) {\n                var i = [], o = e.length, a = t.length, s = 0;\n                for (s = 0; s < a; s += 2) t[s] = 0, t[s + 1] = 0;\n                for (s = 0; s < o; s++) 0 != e[s] && i.push({lit: s, f: e[s]});\n                var f = i.length, l = i.slice(0);\n                if (0 == f) return 0;\n                if (1 == f) {\n                    var c = i[0].lit;\n                    l = 0 == c ? 1 : 0;\n                    return t[1 + (c << 1)] = 1, t[1 + (l << 1)] = 1, 1\n                }\n                i.sort((function (e, t) {\n                    return e.f - t.f\n                }));\n                var u = i[0], h = i[1], d = 0, A = 1, g = 2;\n                for (i[0] = {\n                    lit: -1,\n                    f: u.f + h.f,\n                    l: u,\n                    r: h,\n                    d: 0\n                }; A != f - 1;) u = d != A && (g == f || i[d].f < i[g].f) ? i[d++] : i[g++], h = d != A && (g == f || i[d].f < i[g].f) ? i[d++] : i[g++], i[A++] = {\n                    lit: -1,\n                    f: u.f + h.f,\n                    l: u,\n                    r: h\n                };\n                var p = UZIP.F.setDepth(i[A - 1], 0);\n                for (p > r && (UZIP.F.restrictDepth(l, r, p), p = r), s = 0; s < f; s++) t[1 + (l[s].lit << 1)] = l[s].d;\n                return p\n            }, UZIP.F.setDepth = function (e, t) {\n                return -1 != e.lit ? (e.d = t, t) : Math.max(UZIP.F.setDepth(e.l, t + 1), UZIP.F.setDepth(e.r, t + 1))\n            }, UZIP.F.restrictDepth = function (e, t, r) {\n                var i = 0, o = 1 << r - t, a = 0;\n                for (e.sort((function (e, t) {\n                    return t.d == e.d ? e.f - t.f : t.d - e.d\n                })), i = 0; i < e.length && e[i].d > t; i++) {\n                    var s = e[i].d;\n                    e[i].d = t, a += o - (1 << r - s)\n                }\n                for (a >>>= r - t; a > 0;) {\n                    (s = e[i].d) < t ? (e[i].d++, a -= 1 << t - s - 1) : i++\n                }\n                for (; i >= 0; i--) e[i].d == t && a < 0 && (e[i].d--, a++);\n                0 != a && console.log(\"debt left\")\n            }, UZIP.F._goodIndex = function (e, t) {\n                var r = 0;\n                return t[16 | r] <= e && (r |= 16), t[8 | r] <= e && (r |= 8), t[4 | r] <= e && (r |= 4), t[2 | r] <= e && (r |= 2), t[1 | r] <= e && (r |= 1), r\n            }, UZIP.F._writeLit = function (e, t, r, i) {\n                return UZIP.F._putsF(r, i, t[e << 1]), i + t[1 + (e << 1)]\n            }, UZIP.F.inflate = function (e, t) {\n                var r = Uint8Array;\n                if (3 == e[0] && 0 == e[1]) return t || new r(0);\n                var i = UZIP.F, o = i._bitsF, a = i._bitsE, s = i._decodeTiny, f = i.makeCodes, l = i.codes2map,\n                    c = i._get17, u = i.U, h = null == t;\n                h && (t = new r(e.length >>> 2 << 3));\n                for (var d, A, g = 0, p = 0, m = 0, w = 0, v = 0, b = 0, y = 0, E = 0, F = 0; 0 == g;) if (g = o(e, F, 1), p = o(e, F + 1, 2), F += 3, 0 != p) {\n                    if (h && (t = UZIP.F._check(t, E + (1 << 17))), 1 == p && (d = u.flmap, A = u.fdmap, b = 511, y = 31), 2 == p) {\n                        m = a(e, F, 5) + 257, w = a(e, F + 5, 5) + 1, v = a(e, F + 10, 4) + 4, F += 14;\n                        for (var _ = 0; _ < 38; _ += 2) u.itree[_] = 0, u.itree[_ + 1] = 0;\n                        var B = 1;\n                        for (_ = 0; _ < v; _++) {\n                            var U = a(e, F + 3 * _, 3);\n                            u.itree[1 + (u.ordr[_] << 1)] = U, U > B && (B = U)\n                        }\n                        F += 3 * v, f(u.itree, B), l(u.itree, B, u.imap), d = u.lmap, A = u.dmap, F = s(u.imap, (1 << B) - 1, m + w, e, F, u.ttree);\n                        var C = i._copyOut(u.ttree, 0, m, u.ltree);\n                        b = (1 << C) - 1;\n                        var I = i._copyOut(u.ttree, m, w, u.dtree);\n                        y = (1 << I) - 1, f(u.ltree, C), l(u.ltree, C, d), f(u.dtree, I), l(u.dtree, I, A)\n                    }\n                    for (; ;) {\n                        var Q = d[c(e, F) & b];\n                        F += 15 & Q;\n                        var M = Q >>> 4;\n                        if (M >>> 8 == 0) t[E++] = M; else {\n                            if (256 == M) break;\n                            var x = E + M - 254;\n                            if (M > 264) {\n                                var T = u.ldef[M - 257];\n                                x = E + (T >>> 3) + a(e, F, 7 & T), F += 7 & T\n                            }\n                            var S = A[c(e, F) & y];\n                            F += 15 & S;\n                            var R = S >>> 4, O = u.ddef[R], P = (O >>> 4) + o(e, F, 15 & O);\n                            for (F += 15 & O, h && (t = UZIP.F._check(t, E + (1 << 17))); E < x;) t[E] = t[E++ - P], t[E] = t[E++ - P], t[E] = t[E++ - P], t[E] = t[E++ - P];\n                            E = x\n                        }\n                    }\n                } else {\n                    0 != (7 & F) && (F += 8 - (7 & F));\n                    var H = 4 + (F >>> 3), L = e[H - 4] | e[H - 3] << 8;\n                    h && (t = UZIP.F._check(t, E + L)), t.set(new r(e.buffer, e.byteOffset + H, L), E), F = H + L << 3, E += L\n                }\n                return t.length == E ? t : t.slice(0, E)\n            }, UZIP.F._check = function (e, t) {\n                var r = e.length;\n                if (t <= r) return e;\n                var i = new Uint8Array(Math.max(r << 1, t));\n                return i.set(e, 0), i\n            }, UZIP.F._decodeTiny = function (e, t, r, i, o, a) {\n                for (var s = UZIP.F._bitsE, f = UZIP.F._get17, l = 0; l < r;) {\n                    var c = e[f(i, o) & t];\n                    o += 15 & c;\n                    var u = c >>> 4;\n                    if (u <= 15) a[l] = u, l++; else {\n                        var h = 0, d = 0;\n                        16 == u ? (d = 3 + s(i, o, 2), o += 2, h = a[l - 1]) : 17 == u ? (d = 3 + s(i, o, 3), o += 3) : 18 == u && (d = 11 + s(i, o, 7), o += 7);\n                        for (var A = l + d; l < A;) a[l] = h, l++\n                    }\n                }\n                return o\n            }, UZIP.F._copyOut = function (e, t, r, i) {\n                for (var o = 0, a = 0, s = i.length >>> 1; a < r;) {\n                    var f = e[a + t];\n                    i[a << 1] = 0, i[1 + (a << 1)] = f, f > o && (o = f), a++\n                }\n                for (; a < s;) i[a << 1] = 0, i[1 + (a << 1)] = 0, a++;\n                return o\n            }, UZIP.F.makeCodes = function (e, t) {\n                for (var r, i, o, a, s = UZIP.F.U, f = e.length, l = s.bl_count, c = 0; c <= t; c++) l[c] = 0;\n                for (c = 1; c < f; c += 2) l[e[c]]++;\n                var u = s.next_code;\n                for (r = 0, l[0] = 0, i = 1; i <= t; i++) r = r + l[i - 1] << 1, u[i] = r;\n                for (o = 0; o < f; o += 2) 0 != (a = e[o + 1]) && (e[o] = u[a], u[a]++)\n            }, UZIP.F.codes2map = function (e, t, r) {\n                for (var i = e.length, o = UZIP.F.U.rev15, a = 0; a < i; a += 2) if (0 != e[a + 1]) for (var s = a >> 1, f = e[a + 1], l = s << 4 | f, c = t - f, u = e[a] << c, h = u + (1 << c); u != h;) {\n                    r[o[u] >>> 15 - t] = l, u++\n                }\n            }, UZIP.F.revCodes = function (e, t) {\n                for (var r = UZIP.F.U.rev15, i = 15 - t, o = 0; o < e.length; o += 2) {\n                    var a = e[o] << t - e[o + 1];\n                    e[o] = r[a] >>> i\n                }\n            }, UZIP.F._putsE = function (e, t, r) {\n                r <<= 7 & t;\n                var i = t >>> 3;\n                e[i] |= r, e[i + 1] |= r >>> 8\n            }, UZIP.F._putsF = function (e, t, r) {\n                r <<= 7 & t;\n                var i = t >>> 3;\n                e[i] |= r, e[i + 1] |= r >>> 8, e[i + 2] |= r >>> 16\n            }, UZIP.F._bitsE = function (e, t, r) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8) >>> (7 & t) & (1 << r) - 1\n            }, UZIP.F._bitsF = function (e, t, r) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t) & (1 << r) - 1\n            }, UZIP.F._get17 = function (e, t) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t)\n            }, UZIP.F._get25 = function (e, t) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16 | e[3 + (t >>> 3)] << 24) >>> (7 & t)\n            }, UZIP.F.U = (t = Uint16Array, r = Uint32Array, {\n                next_code: new t(16),\n                bl_count: new t(16),\n                ordr: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n                of0: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\n                exb: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\n                ldef: new t(32),\n                df0: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\n                dxb: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\n                ddef: new r(32),\n                flmap: new t(512),\n                fltree: [],\n                fdmap: new t(32),\n                fdtree: [],\n                lmap: new t(32768),\n                ltree: [],\n                ttree: [],\n                dmap: new t(32768),\n                dtree: [],\n                imap: new t(512),\n                itree: [],\n                rev15: new t(32768),\n                lhst: new r(286),\n                dhst: new r(30),\n                ihst: new r(19),\n                lits: new r(15e3),\n                strt: new t(65536),\n                prev: new t(32768)\n            }), function () {\n                for (var e = UZIP.F.U, t = 0; t < 32768; t++) {\n                    var r = t;\n                    r = (4278255360 & (r = (4042322160 & (r = (3435973836 & (r = (2863311530 & r) >>> 1 | (1431655765 & r) << 1)) >>> 2 | (858993459 & r) << 2)) >>> 4 | (252645135 & r) << 4)) >>> 8 | (16711935 & r) << 8, e.rev15[t] = (r >>> 16 | r << 16) >>> 17\n                }\n\n                function pushV(e, t, r) {\n                    for (; 0 != t--;) e.push(0, r)\n                }\n\n                for (t = 0; t < 32; t++) e.ldef[t] = e.of0[t] << 3 | e.exb[t], e.ddef[t] = e.df0[t] << 4 | e.dxb[t];\n                pushV(e.fltree, 144, 8), pushV(e.fltree, 112, 9), pushV(e.fltree, 24, 7), pushV(e.fltree, 8, 8), UZIP.F.makeCodes(e.fltree, 9), UZIP.F.codes2map(e.fltree, 9, e.flmap), UZIP.F.revCodes(e.fltree, 9), pushV(e.fdtree, 32, 5), UZIP.F.makeCodes(e.fdtree, 5), UZIP.F.codes2map(e.fdtree, 5, e.fdmap), UZIP.F.revCodes(e.fdtree, 5), pushV(e.itree, 19, 0), pushV(e.ltree, 286, 0), pushV(e.dtree, 30, 0), pushV(e.ttree, 320, 0)\n            }()\n        }({\n            get exports() {\n                return e\n            }, set exports(t) {\n                e = t\n            }\n        });\n        var UZIP = _mergeNamespaces({__proto__: null, default: e}, [e]);\n        const UPNG = function () {\n            var e = {\n                nextZero(e, t) {\n                    for (; 0 != e[t];) t++;\n                    return t\n                },\n                readUshort: (e, t) => e[t] << 8 | e[t + 1],\n                writeUshort(e, t, r) {\n                    e[t] = r >> 8 & 255, e[t + 1] = 255 & r\n                },\n                readUint: (e, t) => 16777216 * e[t] + (e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]),\n                writeUint(e, t, r) {\n                    e[t] = r >> 24 & 255, e[t + 1] = r >> 16 & 255, e[t + 2] = r >> 8 & 255, e[t + 3] = 255 & r\n                },\n                readASCII(e, t, r) {\n                    let i = \"\";\n                    for (let o = 0; o < r; o++) i += String.fromCharCode(e[t + o]);\n                    return i\n                },\n                writeASCII(e, t, r) {\n                    for (let i = 0; i < r.length; i++) e[t + i] = r.charCodeAt(i)\n                },\n                readBytes(e, t, r) {\n                    const i = [];\n                    for (let o = 0; o < r; o++) i.push(e[t + o]);\n                    return i\n                },\n                pad: e => e.length < 2 ? `0${e}` : e,\n                readUTF8(t, r, i) {\n                    let o, a = \"\";\n                    for (let o = 0; o < i; o++) a += `%${e.pad(t[r + o].toString(16))}`;\n                    try {\n                        o = decodeURIComponent(a)\n                    } catch (o) {\n                        return e.readASCII(t, r, i)\n                    }\n                    return o\n                }\n            };\n\n            function decodeImage(t, r, i, o) {\n                const a = r * i, s = _getBPP(o), f = Math.ceil(r * s / 8), l = new Uint8Array(4 * a),\n                    c = new Uint32Array(l.buffer), {ctype: u} = o, {depth: h} = o, d = e.readUshort;\n                if (6 == u) {\n                    const e = a << 2;\n                    if (8 == h) for (var A = 0; A < e; A += 4) l[A] = t[A], l[A + 1] = t[A + 1], l[A + 2] = t[A + 2], l[A + 3] = t[A + 3];\n                    if (16 == h) for (A = 0; A < e; A++) l[A] = t[A << 1]\n                } else if (2 == u) {\n                    const e = o.tabs.tRNS;\n                    if (null == e) {\n                        if (8 == h) for (A = 0; A < a; A++) {\n                            var g = 3 * A;\n                            c[A] = 255 << 24 | t[g + 2] << 16 | t[g + 1] << 8 | t[g]\n                        }\n                        if (16 == h) for (A = 0; A < a; A++) {\n                            g = 6 * A;\n                            c[A] = 255 << 24 | t[g + 4] << 16 | t[g + 2] << 8 | t[g]\n                        }\n                    } else {\n                        var p = e[0];\n                        const r = e[1], i = e[2];\n                        if (8 == h) for (A = 0; A < a; A++) {\n                            var m = A << 2;\n                            g = 3 * A;\n                            c[A] = 255 << 24 | t[g + 2] << 16 | t[g + 1] << 8 | t[g], t[g] == p && t[g + 1] == r && t[g + 2] == i && (l[m + 3] = 0)\n                        }\n                        if (16 == h) for (A = 0; A < a; A++) {\n                            m = A << 2, g = 6 * A;\n                            c[A] = 255 << 24 | t[g + 4] << 16 | t[g + 2] << 8 | t[g], d(t, g) == p && d(t, g + 2) == r && d(t, g + 4) == i && (l[m + 3] = 0)\n                        }\n                    }\n                } else if (3 == u) {\n                    const e = o.tabs.PLTE, s = o.tabs.tRNS, c = s ? s.length : 0;\n                    if (1 == h) for (var w = 0; w < i; w++) {\n                        var v = w * f, b = w * r;\n                        for (A = 0; A < r; A++) {\n                            m = b + A << 2;\n                            var y = 3 * (E = t[v + (A >> 3)] >> 7 - ((7 & A) << 0) & 1);\n                            l[m] = e[y], l[m + 1] = e[y + 1], l[m + 2] = e[y + 2], l[m + 3] = E < c ? s[E] : 255\n                        }\n                    }\n                    if (2 == h) for (w = 0; w < i; w++) for (v = w * f, b = w * r, A = 0; A < r; A++) {\n                        m = b + A << 2, y = 3 * (E = t[v + (A >> 2)] >> 6 - ((3 & A) << 1) & 3);\n                        l[m] = e[y], l[m + 1] = e[y + 1], l[m + 2] = e[y + 2], l[m + 3] = E < c ? s[E] : 255\n                    }\n                    if (4 == h) for (w = 0; w < i; w++) for (v = w * f, b = w * r, A = 0; A < r; A++) {\n                        m = b + A << 2, y = 3 * (E = t[v + (A >> 1)] >> 4 - ((1 & A) << 2) & 15);\n                        l[m] = e[y], l[m + 1] = e[y + 1], l[m + 2] = e[y + 2], l[m + 3] = E < c ? s[E] : 255\n                    }\n                    if (8 == h) for (A = 0; A < a; A++) {\n                        var E;\n                        m = A << 2, y = 3 * (E = t[A]);\n                        l[m] = e[y], l[m + 1] = e[y + 1], l[m + 2] = e[y + 2], l[m + 3] = E < c ? s[E] : 255\n                    }\n                } else if (4 == u) {\n                    if (8 == h) for (A = 0; A < a; A++) {\n                        m = A << 2;\n                        var F = t[_ = A << 1];\n                        l[m] = F, l[m + 1] = F, l[m + 2] = F, l[m + 3] = t[_ + 1]\n                    }\n                    if (16 == h) for (A = 0; A < a; A++) {\n                        var _;\n                        m = A << 2, F = t[_ = A << 2];\n                        l[m] = F, l[m + 1] = F, l[m + 2] = F, l[m + 3] = t[_ + 2]\n                    }\n                } else if (0 == u) for (p = o.tabs.tRNS ? o.tabs.tRNS : -1, w = 0; w < i; w++) {\n                    const e = w * f, i = w * r;\n                    if (1 == h) for (var B = 0; B < r; B++) {\n                        var U = (F = 255 * (t[e + (B >>> 3)] >>> 7 - (7 & B) & 1)) == 255 * p ? 0 : 255;\n                        c[i + B] = U << 24 | F << 16 | F << 8 | F\n                    } else if (2 == h) for (B = 0; B < r; B++) {\n                        U = (F = 85 * (t[e + (B >>> 2)] >>> 6 - ((3 & B) << 1) & 3)) == 85 * p ? 0 : 255;\n                        c[i + B] = U << 24 | F << 16 | F << 8 | F\n                    } else if (4 == h) for (B = 0; B < r; B++) {\n                        U = (F = 17 * (t[e + (B >>> 1)] >>> 4 - ((1 & B) << 2) & 15)) == 17 * p ? 0 : 255;\n                        c[i + B] = U << 24 | F << 16 | F << 8 | F\n                    } else if (8 == h) for (B = 0; B < r; B++) {\n                        U = (F = t[e + B]) == p ? 0 : 255;\n                        c[i + B] = U << 24 | F << 16 | F << 8 | F\n                    } else if (16 == h) for (B = 0; B < r; B++) {\n                        F = t[e + (B << 1)], U = d(t, e + (B << 1)) == p ? 0 : 255;\n                        c[i + B] = U << 24 | F << 16 | F << 8 | F\n                    }\n                }\n                return l\n            }\n\n            function _decompress(e, r, i, o) {\n                const a = _getBPP(e), s = Math.ceil(i * a / 8), f = new Uint8Array((s + 1 + e.interlace) * o);\n                return r = e.tabs.CgBI ? t(r, f) : _inflate(r, f), 0 == e.interlace ? r = _filterZero(r, e, 0, i, o) : 1 == e.interlace && (r = function _readInterlace(e, t) {\n                    const r = t.width, i = t.height, o = _getBPP(t), a = o >> 3, s = Math.ceil(r * o / 8),\n                        f = new Uint8Array(i * s);\n                    let l = 0;\n                    const c = [0, 0, 4, 0, 2, 0, 1], u = [0, 4, 0, 2, 0, 1, 0], h = [8, 8, 8, 4, 4, 2, 2],\n                        d = [8, 8, 4, 4, 2, 2, 1];\n                    let A = 0;\n                    for (; A < 7;) {\n                        const p = h[A], m = d[A];\n                        let w = 0, v = 0, b = c[A];\n                        for (; b < i;) b += p, v++;\n                        let y = u[A];\n                        for (; y < r;) y += m, w++;\n                        const E = Math.ceil(w * o / 8);\n                        _filterZero(e, t, l, w, v);\n                        let F = 0, _ = c[A];\n                        for (; _ < i;) {\n                            let t = u[A], i = l + F * E << 3;\n                            for (; t < r;) {\n                                var g;\n                                if (1 == o) g = (g = e[i >> 3]) >> 7 - (7 & i) & 1, f[_ * s + (t >> 3)] |= g << 7 - ((7 & t) << 0);\n                                if (2 == o) g = (g = e[i >> 3]) >> 6 - (7 & i) & 3, f[_ * s + (t >> 2)] |= g << 6 - ((3 & t) << 1);\n                                if (4 == o) g = (g = e[i >> 3]) >> 4 - (7 & i) & 15, f[_ * s + (t >> 1)] |= g << 4 - ((1 & t) << 2);\n                                if (o >= 8) {\n                                    const r = _ * s + t * a;\n                                    for (let t = 0; t < a; t++) f[r + t] = e[(i >> 3) + t]\n                                }\n                                i += o, t += m\n                            }\n                            F++, _ += p\n                        }\n                        w * v != 0 && (l += v * (1 + E)), A += 1\n                    }\n                    return f\n                }(r, e)), r\n            }\n\n            function _inflate(e, r) {\n                return t(new Uint8Array(e.buffer, 2, e.length - 6), r)\n            }\n\n            var t = function () {\n                const e = {H: {}};\n                return e.H.N = function (t, r) {\n                    const i = Uint8Array;\n                    let o, a, s = 0, f = 0, l = 0, c = 0, u = 0, h = 0, d = 0, A = 0, g = 0;\n                    if (3 == t[0] && 0 == t[1]) return r || new i(0);\n                    const p = e.H, m = p.b, w = p.e, v = p.R, b = p.n, y = p.A, E = p.Z, F = p.m, _ = null == r;\n                    for (_ && (r = new i(t.length >>> 2 << 5)); 0 == s;) if (s = m(t, g, 1), f = m(t, g + 1, 2), g += 3, 0 != f) {\n                        if (_ && (r = e.H.W(r, A + (1 << 17))), 1 == f && (o = F.J, a = F.h, h = 511, d = 31), 2 == f) {\n                            l = w(t, g, 5) + 257, c = w(t, g + 5, 5) + 1, u = w(t, g + 10, 4) + 4, g += 14;\n                            let e = 1;\n                            for (var B = 0; B < 38; B += 2) F.Q[B] = 0, F.Q[B + 1] = 0;\n                            for (B = 0; B < u; B++) {\n                                const r = w(t, g + 3 * B, 3);\n                                F.Q[1 + (F.X[B] << 1)] = r, r > e && (e = r)\n                            }\n                            g += 3 * u, b(F.Q, e), y(F.Q, e, F.u), o = F.w, a = F.d, g = v(F.u, (1 << e) - 1, l + c, t, g, F.v);\n                            const r = p.V(F.v, 0, l, F.C);\n                            h = (1 << r) - 1;\n                            const i = p.V(F.v, l, c, F.D);\n                            d = (1 << i) - 1, b(F.C, r), y(F.C, r, o), b(F.D, i), y(F.D, i, a)\n                        }\n                        for (; ;) {\n                            const e = o[E(t, g) & h];\n                            g += 15 & e;\n                            const i = e >>> 4;\n                            if (i >>> 8 == 0) r[A++] = i; else {\n                                if (256 == i) break;\n                                {\n                                    let e = A + i - 254;\n                                    if (i > 264) {\n                                        const r = F.q[i - 257];\n                                        e = A + (r >>> 3) + w(t, g, 7 & r), g += 7 & r\n                                    }\n                                    const o = a[E(t, g) & d];\n                                    g += 15 & o;\n                                    const s = o >>> 4, f = F.c[s], l = (f >>> 4) + m(t, g, 15 & f);\n                                    for (g += 15 & f; A < e;) r[A] = r[A++ - l], r[A] = r[A++ - l], r[A] = r[A++ - l], r[A] = r[A++ - l];\n                                    A = e\n                                }\n                            }\n                        }\n                    } else {\n                        0 != (7 & g) && (g += 8 - (7 & g));\n                        const o = 4 + (g >>> 3), a = t[o - 4] | t[o - 3] << 8;\n                        _ && (r = e.H.W(r, A + a)), r.set(new i(t.buffer, t.byteOffset + o, a), A), g = o + a << 3, A += a\n                    }\n                    return r.length == A ? r : r.slice(0, A)\n                }, e.H.W = function (e, t) {\n                    const r = e.length;\n                    if (t <= r) return e;\n                    const i = new Uint8Array(r << 1);\n                    return i.set(e, 0), i\n                }, e.H.R = function (t, r, i, o, a, s) {\n                    const f = e.H.e, l = e.H.Z;\n                    let c = 0;\n                    for (; c < i;) {\n                        const e = t[l(o, a) & r];\n                        a += 15 & e;\n                        const i = e >>> 4;\n                        if (i <= 15) s[c] = i, c++; else {\n                            let e = 0, t = 0;\n                            16 == i ? (t = 3 + f(o, a, 2), a += 2, e = s[c - 1]) : 17 == i ? (t = 3 + f(o, a, 3), a += 3) : 18 == i && (t = 11 + f(o, a, 7), a += 7);\n                            const r = c + t;\n                            for (; c < r;) s[c] = e, c++\n                        }\n                    }\n                    return a\n                }, e.H.V = function (e, t, r, i) {\n                    let o = 0, a = 0;\n                    const s = i.length >>> 1;\n                    for (; a < r;) {\n                        const r = e[a + t];\n                        i[a << 1] = 0, i[1 + (a << 1)] = r, r > o && (o = r), a++\n                    }\n                    for (; a < s;) i[a << 1] = 0, i[1 + (a << 1)] = 0, a++;\n                    return o\n                }, e.H.n = function (t, r) {\n                    const i = e.H.m, o = t.length;\n                    let a, s, f;\n                    let l;\n                    const c = i.j;\n                    for (var u = 0; u <= r; u++) c[u] = 0;\n                    for (u = 1; u < o; u += 2) c[t[u]]++;\n                    const h = i.K;\n                    for (a = 0, c[0] = 0, s = 1; s <= r; s++) a = a + c[s - 1] << 1, h[s] = a;\n                    for (f = 0; f < o; f += 2) l = t[f + 1], 0 != l && (t[f] = h[l], h[l]++)\n                }, e.H.A = function (t, r, i) {\n                    const o = t.length, a = e.H.m.r;\n                    for (let e = 0; e < o; e += 2) if (0 != t[e + 1]) {\n                        const o = e >> 1, s = t[e + 1], f = o << 4 | s, l = r - s;\n                        let c = t[e] << l;\n                        const u = c + (1 << l);\n                        for (; c != u;) {\n                            i[a[c] >>> 15 - r] = f, c++\n                        }\n                    }\n                }, e.H.l = function (t, r) {\n                    const i = e.H.m.r, o = 15 - r;\n                    for (let e = 0; e < t.length; e += 2) {\n                        const a = t[e] << r - t[e + 1];\n                        t[e] = i[a] >>> o\n                    }\n                }, e.H.M = function (e, t, r) {\n                    r <<= 7 & t;\n                    const i = t >>> 3;\n                    e[i] |= r, e[i + 1] |= r >>> 8\n                }, e.H.I = function (e, t, r) {\n                    r <<= 7 & t;\n                    const i = t >>> 3;\n                    e[i] |= r, e[i + 1] |= r >>> 8, e[i + 2] |= r >>> 16\n                }, e.H.e = function (e, t, r) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8) >>> (7 & t) & (1 << r) - 1\n                }, e.H.b = function (e, t, r) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t) & (1 << r) - 1\n                }, e.H.Z = function (e, t) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t)\n                }, e.H.i = function (e, t) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16 | e[3 + (t >>> 3)] << 24) >>> (7 & t)\n                }, e.H.m = function () {\n                    const e = Uint16Array, t = Uint32Array;\n                    return {\n                        K: new e(16),\n                        j: new e(16),\n                        X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n                        S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\n                        T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\n                        q: new e(32),\n                        p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\n                        z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\n                        c: new t(32),\n                        J: new e(512),\n                        _: [],\n                        h: new e(32),\n                        $: [],\n                        w: new e(32768),\n                        C: [],\n                        v: [],\n                        d: new e(32768),\n                        D: [],\n                        u: new e(512),\n                        Q: [],\n                        r: new e(32768),\n                        s: new t(286),\n                        Y: new t(30),\n                        a: new t(19),\n                        t: new t(15e3),\n                        k: new e(65536),\n                        g: new e(32768)\n                    }\n                }(), function () {\n                    const t = e.H.m;\n                    for (var r = 0; r < 32768; r++) {\n                        let e = r;\n                        e = (2863311530 & e) >>> 1 | (1431655765 & e) << 1, e = (3435973836 & e) >>> 2 | (858993459 & e) << 2, e = (4042322160 & e) >>> 4 | (252645135 & e) << 4, e = (4278255360 & e) >>> 8 | (16711935 & e) << 8, t.r[r] = (e >>> 16 | e << 16) >>> 17\n                    }\n\n                    function n(e, t, r) {\n                        for (; 0 != t--;) e.push(0, r)\n                    }\n\n                    for (r = 0; r < 32; r++) t.q[r] = t.S[r] << 3 | t.T[r], t.c[r] = t.p[r] << 4 | t.z[r];\n                    n(t._, 144, 8), n(t._, 112, 9), n(t._, 24, 7), n(t._, 8, 8), e.H.n(t._, 9), e.H.A(t._, 9, t.J), e.H.l(t._, 9), n(t.$, 32, 5), e.H.n(t.$, 5), e.H.A(t.$, 5, t.h), e.H.l(t.$, 5), n(t.Q, 19, 0), n(t.C, 286, 0), n(t.D, 30, 0), n(t.v, 320, 0)\n                }(), e.H.N\n            }();\n\n            function _getBPP(e) {\n                return [1, null, 3, 1, 2, null, 4][e.ctype] * e.depth\n            }\n\n            function _filterZero(e, t, r, i, o) {\n                let a = _getBPP(t);\n                const s = Math.ceil(i * a / 8);\n                let f, l;\n                a = Math.ceil(a / 8);\n                let c = e[r], u = 0;\n                if (c > 1 && (e[r] = [0, 0, 1][c - 2]), 3 == c) for (u = a; u < s; u++) e[u + 1] = e[u + 1] + (e[u + 1 - a] >>> 1) & 255;\n                for (let t = 0; t < o; t++) if (f = r + t * s, l = f + t + 1, c = e[l - 1], u = 0, 0 == c) for (; u < s; u++) e[f + u] = e[l + u]; else if (1 == c) {\n                    for (; u < a; u++) e[f + u] = e[l + u];\n                    for (; u < s; u++) e[f + u] = e[l + u] + e[f + u - a]\n                } else if (2 == c) for (; u < s; u++) e[f + u] = e[l + u] + e[f + u - s]; else if (3 == c) {\n                    for (; u < a; u++) e[f + u] = e[l + u] + (e[f + u - s] >>> 1);\n                    for (; u < s; u++) e[f + u] = e[l + u] + (e[f + u - s] + e[f + u - a] >>> 1)\n                } else {\n                    for (; u < a; u++) e[f + u] = e[l + u] + _paeth(0, e[f + u - s], 0);\n                    for (; u < s; u++) e[f + u] = e[l + u] + _paeth(e[f + u - a], e[f + u - s], e[f + u - a - s])\n                }\n                return e\n            }\n\n            function _paeth(e, t, r) {\n                const i = e + t - r, o = i - e, a = i - t, s = i - r;\n                return o * o <= a * a && o * o <= s * s ? e : a * a <= s * s ? t : r\n            }\n\n            function _IHDR(t, r, i) {\n                i.width = e.readUint(t, r), r += 4, i.height = e.readUint(t, r), r += 4, i.depth = t[r], r++, i.ctype = t[r], r++, i.compress = t[r], r++, i.filter = t[r], r++, i.interlace = t[r], r++\n            }\n\n            function _copyTile(e, t, r, i, o, a, s, f, l) {\n                const c = Math.min(t, o), u = Math.min(r, a);\n                let h = 0, d = 0;\n                for (let r = 0; r < u; r++) for (let a = 0; a < c; a++) if (s >= 0 && f >= 0 ? (h = r * t + a << 2, d = (f + r) * o + s + a << 2) : (h = (-f + r) * t - s + a << 2, d = r * o + a << 2), 0 == l) i[d] = e[h], i[d + 1] = e[h + 1], i[d + 2] = e[h + 2], i[d + 3] = e[h + 3]; else if (1 == l) {\n                    var A = e[h + 3] * (1 / 255), g = e[h] * A, p = e[h + 1] * A, m = e[h + 2] * A,\n                        w = i[d + 3] * (1 / 255), v = i[d] * w, b = i[d + 1] * w, y = i[d + 2] * w;\n                    const t = 1 - A, r = A + w * t, o = 0 == r ? 0 : 1 / r;\n                    i[d + 3] = 255 * r, i[d + 0] = (g + v * t) * o, i[d + 1] = (p + b * t) * o, i[d + 2] = (m + y * t) * o\n                } else if (2 == l) {\n                    A = e[h + 3], g = e[h], p = e[h + 1], m = e[h + 2], w = i[d + 3], v = i[d], b = i[d + 1], y = i[d + 2];\n                    A == w && g == v && p == b && m == y ? (i[d] = 0, i[d + 1] = 0, i[d + 2] = 0, i[d + 3] = 0) : (i[d] = g, i[d + 1] = p, i[d + 2] = m, i[d + 3] = A)\n                } else if (3 == l) {\n                    A = e[h + 3], g = e[h], p = e[h + 1], m = e[h + 2], w = i[d + 3], v = i[d], b = i[d + 1], y = i[d + 2];\n                    if (A == w && g == v && p == b && m == y) continue;\n                    if (A < 220 && w > 20) return !1\n                }\n                return !0\n            }\n\n            return {\n                decode: function decode(r) {\n                    const i = new Uint8Array(r);\n                    let o = 8;\n                    const a = e, s = a.readUshort, f = a.readUint, l = {tabs: {}, frames: []},\n                        c = new Uint8Array(i.length);\n                    let u, h = 0, d = 0;\n                    const A = [137, 80, 78, 71, 13, 10, 26, 10];\n                    for (var g = 0; g < 8; g++) if (i[g] != A[g]) throw\"The input is not a PNG file!\";\n                    for (; o < i.length;) {\n                        const e = a.readUint(i, o);\n                        o += 4;\n                        const r = a.readASCII(i, o, 4);\n                        if (o += 4, \"IHDR\" == r) _IHDR(i, o, l); else if (\"iCCP\" == r) {\n                            for (var p = o; 0 != i[p];) p++;\n                            a.readASCII(i, o, p - o), i[p + 1];\n                            const s = i.slice(p + 2, o + e);\n                            let f = null;\n                            try {\n                                f = _inflate(s)\n                            } catch (e) {\n                                f = t(s)\n                            }\n                            l.tabs[r] = f\n                        } else if (\"CgBI\" == r) l.tabs[r] = i.slice(o, o + 4); else if (\"IDAT\" == r) {\n                            for (g = 0; g < e; g++) c[h + g] = i[o + g];\n                            h += e\n                        } else if (\"acTL\" == r) l.tabs[r] = {\n                            num_frames: f(i, o),\n                            num_plays: f(i, o + 4)\n                        }, u = new Uint8Array(i.length); else if (\"fcTL\" == r) {\n                            if (0 != d) (E = l.frames[l.frames.length - 1]).data = _decompress(l, u.slice(0, d), E.rect.width, E.rect.height), d = 0;\n                            const e = {x: f(i, o + 12), y: f(i, o + 16), width: f(i, o + 4), height: f(i, o + 8)};\n                            let t = s(i, o + 22);\n                            t = s(i, o + 20) / (0 == t ? 100 : t);\n                            const r = {rect: e, delay: Math.round(1e3 * t), dispose: i[o + 24], blend: i[o + 25]};\n                            l.frames.push(r)\n                        } else if (\"fdAT\" == r) {\n                            for (g = 0; g < e - 4; g++) u[d + g] = i[o + g + 4];\n                            d += e - 4\n                        } else if (\"pHYs\" == r) l.tabs[r] = [a.readUint(i, o), a.readUint(i, o + 4), i[o + 8]]; else if (\"cHRM\" == r) {\n                            l.tabs[r] = [];\n                            for (g = 0; g < 8; g++) l.tabs[r].push(a.readUint(i, o + 4 * g))\n                        } else if (\"tEXt\" == r || \"zTXt\" == r) {\n                            null == l.tabs[r] && (l.tabs[r] = {});\n                            var m = a.nextZero(i, o), w = a.readASCII(i, o, m - o), v = o + e - m - 1;\n                            if (\"tEXt\" == r) y = a.readASCII(i, m + 1, v); else {\n                                var b = _inflate(i.slice(m + 2, m + 2 + v));\n                                y = a.readUTF8(b, 0, b.length)\n                            }\n                            l.tabs[r][w] = y\n                        } else if (\"iTXt\" == r) {\n                            null == l.tabs[r] && (l.tabs[r] = {});\n                            m = 0, p = o;\n                            m = a.nextZero(i, p);\n                            w = a.readASCII(i, p, m - p);\n                            const t = i[p = m + 1];\n                            var y;\n                            i[p + 1], p += 2, m = a.nextZero(i, p), a.readASCII(i, p, m - p), p = m + 1, m = a.nextZero(i, p), a.readUTF8(i, p, m - p);\n                            v = e - ((p = m + 1) - o);\n                            if (0 == t) y = a.readUTF8(i, p, v); else {\n                                b = _inflate(i.slice(p, p + v));\n                                y = a.readUTF8(b, 0, b.length)\n                            }\n                            l.tabs[r][w] = y\n                        } else if (\"PLTE\" == r) l.tabs[r] = a.readBytes(i, o, e); else if (\"hIST\" == r) {\n                            const e = l.tabs.PLTE.length / 3;\n                            l.tabs[r] = [];\n                            for (g = 0; g < e; g++) l.tabs[r].push(s(i, o + 2 * g))\n                        } else if (\"tRNS\" == r) 3 == l.ctype ? l.tabs[r] = a.readBytes(i, o, e) : 0 == l.ctype ? l.tabs[r] = s(i, o) : 2 == l.ctype && (l.tabs[r] = [s(i, o), s(i, o + 2), s(i, o + 4)]); else if (\"gAMA\" == r) l.tabs[r] = a.readUint(i, o) / 1e5; else if (\"sRGB\" == r) l.tabs[r] = i[o]; else if (\"bKGD\" == r) 0 == l.ctype || 4 == l.ctype ? l.tabs[r] = [s(i, o)] : 2 == l.ctype || 6 == l.ctype ? l.tabs[r] = [s(i, o), s(i, o + 2), s(i, o + 4)] : 3 == l.ctype && (l.tabs[r] = i[o]); else if (\"IEND\" == r) break;\n                        o += e, a.readUint(i, o), o += 4\n                    }\n                    var E;\n                    return 0 != d && ((E = l.frames[l.frames.length - 1]).data = _decompress(l, u.slice(0, d), E.rect.width, E.rect.height)), l.data = _decompress(l, c, l.width, l.height), delete l.compress, delete l.interlace, delete l.filter, l\n                }, toRGBA8: function toRGBA8(e) {\n                    const t = e.width, r = e.height;\n                    if (null == e.tabs.acTL) return [decodeImage(e.data, t, r, e).buffer];\n                    const i = [];\n                    null == e.frames[0].data && (e.frames[0].data = e.data);\n                    const o = t * r * 4, a = new Uint8Array(o), s = new Uint8Array(o), f = new Uint8Array(o);\n                    for (let c = 0; c < e.frames.length; c++) {\n                        const u = e.frames[c], h = u.rect.x, d = u.rect.y, A = u.rect.width, g = u.rect.height,\n                            p = decodeImage(u.data, A, g, e);\n                        if (0 != c) for (var l = 0; l < o; l++) f[l] = a[l];\n                        if (0 == u.blend ? _copyTile(p, A, g, a, t, r, h, d, 0) : 1 == u.blend && _copyTile(p, A, g, a, t, r, h, d, 1), i.push(a.buffer.slice(0)), 0 == u.dispose) ; else if (1 == u.dispose) _copyTile(s, A, g, a, t, r, h, d, 0); else if (2 == u.dispose) for (l = 0; l < o; l++) a[l] = f[l]\n                    }\n                    return i\n                }, _paeth: _paeth, _copyTile: _copyTile, _bin: e\n            }\n        }();\n        !function () {\n            const {_copyTile: e} = UPNG, {_bin: t} = UPNG, r = UPNG._paeth;\n            var i = {\n                table: function () {\n                    const e = new Uint32Array(256);\n                    for (let t = 0; t < 256; t++) {\n                        let r = t;\n                        for (let e = 0; e < 8; e++) 1 & r ? r = 3988292384 ^ r >>> 1 : r >>>= 1;\n                        e[t] = r\n                    }\n                    return e\n                }(), update(e, t, r, o) {\n                    for (let a = 0; a < o; a++) e = i.table[255 & (e ^ t[r + a])] ^ e >>> 8;\n                    return e\n                }, crc: (e, t, r) => 4294967295 ^ i.update(4294967295, e, t, r)\n            };\n\n            function addErr(e, t, r, i) {\n                t[r] += e[0] * i >> 4, t[r + 1] += e[1] * i >> 4, t[r + 2] += e[2] * i >> 4, t[r + 3] += e[3] * i >> 4\n            }\n\n            function N(e) {\n                return Math.max(0, Math.min(255, e))\n            }\n\n            function D(e, t) {\n                const r = e[0] - t[0], i = e[1] - t[1], o = e[2] - t[2], a = e[3] - t[3];\n                return r * r + i * i + o * o + a * a\n            }\n\n            function dither(e, t, r, i, o, a, s) {\n                null == s && (s = 1);\n                const f = i.length, l = [];\n                for (var c = 0; c < f; c++) {\n                    const e = i[c];\n                    l.push([e >>> 0 & 255, e >>> 8 & 255, e >>> 16 & 255, e >>> 24 & 255])\n                }\n                for (c = 0; c < f; c++) {\n                    let e = 4294967295;\n                    for (var u = 0, h = 0; h < f; h++) {\n                        var d = D(l[c], l[h]);\n                        h != c && d < e && (e = d, u = h)\n                    }\n                }\n                const A = new Uint32Array(o.buffer), g = new Int16Array(t * r * 4),\n                    p = [0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5];\n                for (c = 0; c < p.length; c++) p[c] = 255 * ((p[c] + .5) / 16 - .5);\n                for (let o = 0; o < r; o++) for (let w = 0; w < t; w++) {\n                    var m;\n                    c = 4 * (o * t + w);\n                    if (2 != s) m = [N(e[c] + g[c]), N(e[c + 1] + g[c + 1]), N(e[c + 2] + g[c + 2]), N(e[c + 3] + g[c + 3])]; else {\n                        d = p[4 * (3 & o) + (3 & w)];\n                        m = [N(e[c] + d), N(e[c + 1] + d), N(e[c + 2] + d), N(e[c + 3] + d)]\n                    }\n                    u = 0;\n                    let v = 16777215;\n                    for (h = 0; h < f; h++) {\n                        const e = D(m, l[h]);\n                        e < v && (v = e, u = h)\n                    }\n                    const b = l[u], y = [m[0] - b[0], m[1] - b[1], m[2] - b[2], m[3] - b[3]];\n                    1 == s && (w != t - 1 && addErr(y, g, c + 4, 7), o != r - 1 && (0 != w && addErr(y, g, c + 4 * t - 4, 3), addErr(y, g, c + 4 * t, 5), w != t - 1 && addErr(y, g, c + 4 * t + 4, 1))), a[c >> 2] = u, A[c >> 2] = i[u]\n                }\n            }\n\n            function _main(e, r, o, a, s) {\n                null == s && (s = {});\n                const {crc: f} = i, l = t.writeUint, c = t.writeUshort, u = t.writeASCII;\n                let h = 8;\n                const d = e.frames.length > 1;\n                let A, g = !1, p = 33 + (d ? 20 : 0);\n                if (null != s.sRGB && (p += 13), null != s.pHYs && (p += 21), null != s.iCCP && (A = pako.deflate(s.iCCP), p += 21 + A.length + 4), 3 == e.ctype) {\n                    for (var m = e.plte.length, w = 0; w < m; w++) e.plte[w] >>> 24 != 255 && (g = !0);\n                    p += 8 + 3 * m + 4 + (g ? 8 + 1 * m + 4 : 0)\n                }\n                for (var v = 0; v < e.frames.length; v++) {\n                    d && (p += 38), p += (F = e.frames[v]).cimg.length + 12, 0 != v && (p += 4)\n                }\n                p += 12;\n                const b = new Uint8Array(p), y = [137, 80, 78, 71, 13, 10, 26, 10];\n                for (w = 0; w < 8; w++) b[w] = y[w];\n                if (l(b, h, 13), h += 4, u(b, h, \"IHDR\"), h += 4, l(b, h, r), h += 4, l(b, h, o), h += 4, b[h] = e.depth, h++, b[h] = e.ctype, h++, b[h] = 0, h++, b[h] = 0, h++, b[h] = 0, h++, l(b, h, f(b, h - 17, 17)), h += 4, null != s.sRGB && (l(b, h, 1), h += 4, u(b, h, \"sRGB\"), h += 4, b[h] = s.sRGB, h++, l(b, h, f(b, h - 5, 5)), h += 4), null != s.iCCP) {\n                    const e = 13 + A.length;\n                    l(b, h, e), h += 4, u(b, h, \"iCCP\"), h += 4, u(b, h, \"ICC profile\"), h += 11, h += 2, b.set(A, h), h += A.length, l(b, h, f(b, h - (e + 4), e + 4)), h += 4\n                }\n                if (null != s.pHYs && (l(b, h, 9), h += 4, u(b, h, \"pHYs\"), h += 4, l(b, h, s.pHYs[0]), h += 4, l(b, h, s.pHYs[1]), h += 4, b[h] = s.pHYs[2], h++, l(b, h, f(b, h - 13, 13)), h += 4), d && (l(b, h, 8), h += 4, u(b, h, \"acTL\"), h += 4, l(b, h, e.frames.length), h += 4, l(b, h, null != s.loop ? s.loop : 0), h += 4, l(b, h, f(b, h - 12, 12)), h += 4), 3 == e.ctype) {\n                    l(b, h, 3 * (m = e.plte.length)), h += 4, u(b, h, \"PLTE\"), h += 4;\n                    for (w = 0; w < m; w++) {\n                        const t = 3 * w, r = e.plte[w], i = 255 & r, o = r >>> 8 & 255, a = r >>> 16 & 255;\n                        b[h + t + 0] = i, b[h + t + 1] = o, b[h + t + 2] = a\n                    }\n                    if (h += 3 * m, l(b, h, f(b, h - 3 * m - 4, 3 * m + 4)), h += 4, g) {\n                        l(b, h, m), h += 4, u(b, h, \"tRNS\"), h += 4;\n                        for (w = 0; w < m; w++) b[h + w] = e.plte[w] >>> 24 & 255;\n                        h += m, l(b, h, f(b, h - m - 4, m + 4)), h += 4\n                    }\n                }\n                let E = 0;\n                for (v = 0; v < e.frames.length; v++) {\n                    var F = e.frames[v];\n                    d && (l(b, h, 26), h += 4, u(b, h, \"fcTL\"), h += 4, l(b, h, E++), h += 4, l(b, h, F.rect.width), h += 4, l(b, h, F.rect.height), h += 4, l(b, h, F.rect.x), h += 4, l(b, h, F.rect.y), h += 4, c(b, h, a[v]), h += 2, c(b, h, 1e3), h += 2, b[h] = F.dispose, h++, b[h] = F.blend, h++, l(b, h, f(b, h - 30, 30)), h += 4);\n                    const t = F.cimg;\n                    l(b, h, (m = t.length) + (0 == v ? 0 : 4)), h += 4;\n                    const r = h;\n                    u(b, h, 0 == v ? \"IDAT\" : \"fdAT\"), h += 4, 0 != v && (l(b, h, E++), h += 4), b.set(t, h), h += m, l(b, h, f(b, r, h - r)), h += 4\n                }\n                return l(b, h, 0), h += 4, u(b, h, \"IEND\"), h += 4, l(b, h, f(b, h - 4, 4)), h += 4, b.buffer\n            }\n\n            function compressPNG(e, t, r) {\n                for (let i = 0; i < e.frames.length; i++) {\n                    const o = e.frames[i];\n                    o.rect.width;\n                    const a = o.rect.height, s = new Uint8Array(a * o.bpl + a);\n                    o.cimg = _filterZero(o.img, a, o.bpp, o.bpl, s, t, r)\n                }\n            }\n\n            function compress(t, r, i, o, a) {\n                const s = a[0], f = a[1], l = a[2], c = a[3], u = a[4], h = a[5];\n                let d = 6, A = 8, g = 255;\n                for (var p = 0; p < t.length; p++) {\n                    const e = new Uint8Array(t[p]);\n                    for (var m = e.length, w = 0; w < m; w += 4) g &= e[w + 3]\n                }\n                const v = 255 != g, b = function framize(t, r, i, o, a, s) {\n                    const f = [];\n                    for (var l = 0; l < t.length; l++) {\n                        const h = new Uint8Array(t[l]), A = new Uint32Array(h.buffer);\n                        var c;\n                        let g = 0, p = 0, m = r, w = i, v = o ? 1 : 0;\n                        if (0 != l) {\n                            const b = s || o || 1 == l || 0 != f[l - 2].dispose ? 1 : 2;\n                            let y = 0, E = 1e9;\n                            for (let e = 0; e < b; e++) {\n                                var u = new Uint8Array(t[l - 1 - e]);\n                                const o = new Uint32Array(t[l - 1 - e]);\n                                let s = r, f = i, c = -1, h = -1;\n                                for (let e = 0; e < i; e++) for (let t = 0; t < r; t++) {\n                                    A[d = e * r + t] != o[d] && (t < s && (s = t), t > c && (c = t), e < f && (f = e), e > h && (h = e))\n                                }\n                                -1 == c && (s = f = c = h = 0), a && (1 == (1 & s) && s--, 1 == (1 & f) && f--);\n                                const v = (c - s + 1) * (h - f + 1);\n                                v < E && (E = v, y = e, g = s, p = f, m = c - s + 1, w = h - f + 1)\n                            }\n                            u = new Uint8Array(t[l - 1 - y]);\n                            1 == y && (f[l - 1].dispose = 2), c = new Uint8Array(m * w * 4), e(u, r, i, c, m, w, -g, -p, 0), v = e(h, r, i, c, m, w, -g, -p, 3) ? 1 : 0, 1 == v ? _prepareDiff(h, r, i, c, {\n                                x: g,\n                                y: p,\n                                width: m,\n                                height: w\n                            }) : e(h, r, i, c, m, w, -g, -p, 0)\n                        } else c = h.slice(0);\n                        f.push({rect: {x: g, y: p, width: m, height: w}, img: c, blend: v, dispose: 0})\n                    }\n                    if (o) for (l = 0; l < f.length; l++) {\n                        if (1 == (A = f[l]).blend) continue;\n                        const e = A.rect, o = f[l - 1].rect, s = Math.min(e.x, o.x), c = Math.min(e.y, o.y), u = {\n                            x: s,\n                            y: c,\n                            width: Math.max(e.x + e.width, o.x + o.width) - s,\n                            height: Math.max(e.y + e.height, o.y + o.height) - c\n                        };\n                        f[l - 1].dispose = 1, l - 1 != 0 && _updateFrame(t, r, i, f, l - 1, u, a), _updateFrame(t, r, i, f, l, u, a)\n                    }\n                    let h = 0;\n                    if (1 != t.length) for (var d = 0; d < f.length; d++) {\n                        var A;\n                        h += (A = f[d]).rect.width * A.rect.height\n                    }\n                    return f\n                }(t, r, i, s, f, l), y = {}, E = [], F = [];\n                if (0 != o) {\n                    const e = [];\n                    for (w = 0; w < b.length; w++) e.push(b[w].img.buffer);\n                    const t = function concatRGBA(e) {\n                        let t = 0;\n                        for (var r = 0; r < e.length; r++) t += e[r].byteLength;\n                        const i = new Uint8Array(t);\n                        let o = 0;\n                        for (r = 0; r < e.length; r++) {\n                            const t = new Uint8Array(e[r]), a = t.length;\n                            for (let e = 0; e < a; e += 4) {\n                                let r = t[e], a = t[e + 1], s = t[e + 2];\n                                const f = t[e + 3];\n                                0 == f && (r = a = s = 0), i[o + e] = r, i[o + e + 1] = a, i[o + e + 2] = s, i[o + e + 3] = f\n                            }\n                            o += a\n                        }\n                        return i.buffer\n                    }(e), r = quantize(t, o);\n                    for (w = 0; w < r.plte.length; w++) E.push(r.plte[w].est.rgba);\n                    let i = 0;\n                    for (w = 0; w < b.length; w++) {\n                        const e = (B = b[w]).img.length;\n                        var _ = new Uint8Array(r.inds.buffer, i >> 2, e >> 2);\n                        F.push(_);\n                        const t = new Uint8Array(r.abuf, i, e);\n                        h && dither(B.img, B.rect.width, B.rect.height, E, t, _), B.img.set(t), i += e\n                    }\n                } else for (p = 0; p < b.length; p++) {\n                    var B = b[p];\n                    const e = new Uint32Array(B.img.buffer);\n                    var U = B.rect.width;\n                    m = e.length, _ = new Uint8Array(m);\n                    F.push(_);\n                    for (w = 0; w < m; w++) {\n                        const t = e[w];\n                        if (0 != w && t == e[w - 1]) _[w] = _[w - 1]; else if (w > U && t == e[w - U]) _[w] = _[w - U]; else {\n                            let e = y[t];\n                            if (null == e && (y[t] = e = E.length, E.push(t), E.length >= 300)) break;\n                            _[w] = e\n                        }\n                    }\n                }\n                const C = E.length;\n                C <= 256 && 0 == u && (A = C <= 2 ? 1 : C <= 4 ? 2 : C <= 16 ? 4 : 8, A = Math.max(A, c));\n                for (p = 0; p < b.length; p++) {\n                    (B = b[p]).rect.x, B.rect.y;\n                    U = B.rect.width;\n                    const e = B.rect.height;\n                    let t = B.img;\n                    new Uint32Array(t.buffer);\n                    let r = 4 * U, i = 4;\n                    if (C <= 256 && 0 == u) {\n                        r = Math.ceil(A * U / 8);\n                        var I = new Uint8Array(r * e);\n                        const o = F[p];\n                        for (let t = 0; t < e; t++) {\n                            w = t * r;\n                            const e = t * U;\n                            if (8 == A) for (var Q = 0; Q < U; Q++) I[w + Q] = o[e + Q]; else if (4 == A) for (Q = 0; Q < U; Q++) I[w + (Q >> 1)] |= o[e + Q] << 4 - 4 * (1 & Q); else if (2 == A) for (Q = 0; Q < U; Q++) I[w + (Q >> 2)] |= o[e + Q] << 6 - 2 * (3 & Q); else if (1 == A) for (Q = 0; Q < U; Q++) I[w + (Q >> 3)] |= o[e + Q] << 7 - 1 * (7 & Q)\n                        }\n                        t = I, d = 3, i = 1\n                    } else if (0 == v && 1 == b.length) {\n                        I = new Uint8Array(U * e * 3);\n                        const o = U * e;\n                        for (w = 0; w < o; w++) {\n                            const e = 3 * w, r = 4 * w;\n                            I[e] = t[r], I[e + 1] = t[r + 1], I[e + 2] = t[r + 2]\n                        }\n                        t = I, d = 2, i = 3, r = 3 * U\n                    }\n                    B.img = t, B.bpl = r, B.bpp = i\n                }\n                return {ctype: d, depth: A, plte: E, frames: b}\n            }\n\n            function _updateFrame(t, r, i, o, a, s, f) {\n                const l = Uint8Array, c = Uint32Array, u = new l(t[a - 1]), h = new c(t[a - 1]),\n                    d = a + 1 < t.length ? new l(t[a + 1]) : null, A = new l(t[a]), g = new c(A.buffer);\n                let p = r, m = i, w = -1, v = -1;\n                for (let e = 0; e < s.height; e++) for (let t = 0; t < s.width; t++) {\n                    const i = s.x + t, f = s.y + e, l = f * r + i, c = g[l];\n                    0 == c || 0 == o[a - 1].dispose && h[l] == c && (null == d || 0 != d[4 * l + 3]) || (i < p && (p = i), i > w && (w = i), f < m && (m = f), f > v && (v = f))\n                }\n                -1 == w && (p = m = w = v = 0), f && (1 == (1 & p) && p--, 1 == (1 & m) && m--), s = {\n                    x: p,\n                    y: m,\n                    width: w - p + 1,\n                    height: v - m + 1\n                };\n                const b = o[a];\n                b.rect = s, b.blend = 1, b.img = new Uint8Array(s.width * s.height * 4), 0 == o[a - 1].dispose ? (e(u, r, i, b.img, s.width, s.height, -s.x, -s.y, 0), _prepareDiff(A, r, i, b.img, s)) : e(A, r, i, b.img, s.width, s.height, -s.x, -s.y, 0)\n            }\n\n            function _prepareDiff(t, r, i, o, a) {\n                e(t, r, i, o, a.width, a.height, -a.x, -a.y, 2)\n            }\n\n            function _filterZero(e, t, r, i, o, a, s) {\n                const f = [];\n                let l, c = [0, 1, 2, 3, 4];\n                -1 != a ? c = [a] : (t * i > 5e5 || 1 == r) && (c = [0]), s && (l = {level: 0});\n                const u = UZIP;\n                for (var h = 0; h < c.length; h++) {\n                    for (let a = 0; a < t; a++) _filterLine(o, e, a, i, r, c[h]);\n                    f.push(u.deflate(o, l))\n                }\n                let d, A = 1e9;\n                for (h = 0; h < f.length; h++) f[h].length < A && (d = h, A = f[h].length);\n                return f[d]\n            }\n\n            function _filterLine(e, t, i, o, a, s) {\n                const f = i * o;\n                let l = f + i;\n                if (e[l] = s, l++, 0 == s) if (o < 500) for (var c = 0; c < o; c++) e[l + c] = t[f + c]; else e.set(new Uint8Array(t.buffer, f, o), l); else if (1 == s) {\n                    for (c = 0; c < a; c++) e[l + c] = t[f + c];\n                    for (c = a; c < o; c++) e[l + c] = t[f + c] - t[f + c - a] + 256 & 255\n                } else if (0 == i) {\n                    for (c = 0; c < a; c++) e[l + c] = t[f + c];\n                    if (2 == s) for (c = a; c < o; c++) e[l + c] = t[f + c];\n                    if (3 == s) for (c = a; c < o; c++) e[l + c] = t[f + c] - (t[f + c - a] >> 1) + 256 & 255;\n                    if (4 == s) for (c = a; c < o; c++) e[l + c] = t[f + c] - r(t[f + c - a], 0, 0) + 256 & 255\n                } else {\n                    if (2 == s) for (c = 0; c < o; c++) e[l + c] = t[f + c] + 256 - t[f + c - o] & 255;\n                    if (3 == s) {\n                        for (c = 0; c < a; c++) e[l + c] = t[f + c] + 256 - (t[f + c - o] >> 1) & 255;\n                        for (c = a; c < o; c++) e[l + c] = t[f + c] + 256 - (t[f + c - o] + t[f + c - a] >> 1) & 255\n                    }\n                    if (4 == s) {\n                        for (c = 0; c < a; c++) e[l + c] = t[f + c] + 256 - r(0, t[f + c - o], 0) & 255;\n                        for (c = a; c < o; c++) e[l + c] = t[f + c] + 256 - r(t[f + c - a], t[f + c - o], t[f + c - a - o]) & 255\n                    }\n                }\n            }\n\n            function quantize(e, t) {\n                const r = new Uint8Array(e), i = r.slice(0), o = new Uint32Array(i.buffer), a = getKDtree(i, t),\n                    s = a[0], f = a[1], l = r.length, c = new Uint8Array(l >> 2);\n                let u;\n                if (r.length < 2e7) for (var h = 0; h < l; h += 4) {\n                    u = getNearest(s, d = r[h] * (1 / 255), A = r[h + 1] * (1 / 255), g = r[h + 2] * (1 / 255), p = r[h + 3] * (1 / 255)), c[h >> 2] = u.ind, o[h >> 2] = u.est.rgba\n                } else for (h = 0; h < l; h += 4) {\n                    var d = r[h] * (1 / 255), A = r[h + 1] * (1 / 255), g = r[h + 2] * (1 / 255),\n                        p = r[h + 3] * (1 / 255);\n                    for (u = s; u.left;) u = planeDst(u.est, d, A, g, p) <= 0 ? u.left : u.right;\n                    c[h >> 2] = u.ind, o[h >> 2] = u.est.rgba\n                }\n                return {abuf: i.buffer, inds: c, plte: f}\n            }\n\n            function getKDtree(e, t, r) {\n                null == r && (r = 1e-4);\n                const i = new Uint32Array(e.buffer),\n                    o = {i0: 0, i1: e.length, bst: null, est: null, tdst: 0, left: null, right: null};\n                o.bst = stats(e, o.i0, o.i1), o.est = estats(o.bst);\n                const a = [o];\n                for (; a.length < t;) {\n                    let t = 0, o = 0;\n                    for (var s = 0; s < a.length; s++) a[s].est.L > t && (t = a[s].est.L, o = s);\n                    if (t < r) break;\n                    const f = a[o], l = splitPixels(e, i, f.i0, f.i1, f.est.e, f.est.eMq255);\n                    if (f.i0 >= l || f.i1 <= l) {\n                        f.est.L = 0;\n                        continue\n                    }\n                    const c = {i0: f.i0, i1: l, bst: null, est: null, tdst: 0, left: null, right: null};\n                    c.bst = stats(e, c.i0, c.i1), c.est = estats(c.bst);\n                    const u = {i0: l, i1: f.i1, bst: null, est: null, tdst: 0, left: null, right: null};\n                    u.bst = {R: [], m: [], N: f.bst.N - c.bst.N};\n                    for (s = 0; s < 16; s++) u.bst.R[s] = f.bst.R[s] - c.bst.R[s];\n                    for (s = 0; s < 4; s++) u.bst.m[s] = f.bst.m[s] - c.bst.m[s];\n                    u.est = estats(u.bst), f.left = c, f.right = u, a[o] = c, a.push(u)\n                }\n                a.sort(((e, t) => t.bst.N - e.bst.N));\n                for (s = 0; s < a.length; s++) a[s].ind = s;\n                return [o, a]\n            }\n\n            function getNearest(e, t, r, i, o) {\n                if (null == e.left) return e.tdst = function dist(e, t, r, i, o) {\n                    const a = t - e[0], s = r - e[1], f = i - e[2], l = o - e[3];\n                    return a * a + s * s + f * f + l * l\n                }(e.est.q, t, r, i, o), e;\n                const a = planeDst(e.est, t, r, i, o);\n                let s = e.left, f = e.right;\n                a > 0 && (s = e.right, f = e.left);\n                const l = getNearest(s, t, r, i, o);\n                if (l.tdst <= a * a) return l;\n                const c = getNearest(f, t, r, i, o);\n                return c.tdst < l.tdst ? c : l\n            }\n\n            function planeDst(e, t, r, i, o) {\n                const {e: a} = e;\n                return a[0] * t + a[1] * r + a[2] * i + a[3] * o - e.eMq\n            }\n\n            function splitPixels(e, t, r, i, o, a) {\n                for (i -= 4; r < i;) {\n                    for (; vecDot(e, r, o) <= a;) r += 4;\n                    for (; vecDot(e, i, o) > a;) i -= 4;\n                    if (r >= i) break;\n                    const s = t[r >> 2];\n                    t[r >> 2] = t[i >> 2], t[i >> 2] = s, r += 4, i -= 4\n                }\n                for (; vecDot(e, r, o) > a;) r -= 4;\n                return r + 4\n            }\n\n            function vecDot(e, t, r) {\n                return e[t] * r[0] + e[t + 1] * r[1] + e[t + 2] * r[2] + e[t + 3] * r[3]\n            }\n\n            function stats(e, t, r) {\n                const i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], o = [0, 0, 0, 0], a = r - t >> 2;\n                for (let a = t; a < r; a += 4) {\n                    const t = e[a] * (1 / 255), r = e[a + 1] * (1 / 255), s = e[a + 2] * (1 / 255),\n                        f = e[a + 3] * (1 / 255);\n                    o[0] += t, o[1] += r, o[2] += s, o[3] += f, i[0] += t * t, i[1] += t * r, i[2] += t * s, i[3] += t * f, i[5] += r * r, i[6] += r * s, i[7] += r * f, i[10] += s * s, i[11] += s * f, i[15] += f * f\n                }\n                return i[4] = i[1], i[8] = i[2], i[9] = i[6], i[12] = i[3], i[13] = i[7], i[14] = i[11], {\n                    R: i,\n                    m: o,\n                    N: a\n                }\n            }\n\n            function estats(e) {\n                const {R: t} = e, {m: r} = e, {N: i} = e, a = r[0], s = r[1], f = r[2], l = r[3],\n                    c = 0 == i ? 0 : 1 / i,\n                    u = [t[0] - a * a * c, t[1] - a * s * c, t[2] - a * f * c, t[3] - a * l * c, t[4] - s * a * c, t[5] - s * s * c, t[6] - s * f * c, t[7] - s * l * c, t[8] - f * a * c, t[9] - f * s * c, t[10] - f * f * c, t[11] - f * l * c, t[12] - l * a * c, t[13] - l * s * c, t[14] - l * f * c, t[15] - l * l * c],\n                    h = u, d = o;\n                let A = [Math.random(), Math.random(), Math.random(), Math.random()], g = 0, p = 0;\n                if (0 != i) for (let e = 0; e < 16 && (A = d.multVec(h, A), p = Math.sqrt(d.dot(A, A)), A = d.sml(1 / p, A), !(0 != e && Math.abs(p - g) < 1e-9)); e++) g = p;\n                const m = [a * c, s * c, f * c, l * c];\n                return {\n                    Cov: u,\n                    q: m,\n                    e: A,\n                    L: g,\n                    eMq255: d.dot(d.sml(255, m), A),\n                    eMq: d.dot(A, m),\n                    rgba: (Math.round(255 * m[3]) << 24 | Math.round(255 * m[2]) << 16 | Math.round(255 * m[1]) << 8 | Math.round(255 * m[0]) << 0) >>> 0\n                }\n            }\n\n            var o = {\n                multVec: (e, t) => [e[0] * t[0] + e[1] * t[1] + e[2] * t[2] + e[3] * t[3], e[4] * t[0] + e[5] * t[1] + e[6] * t[2] + e[7] * t[3], e[8] * t[0] + e[9] * t[1] + e[10] * t[2] + e[11] * t[3], e[12] * t[0] + e[13] * t[1] + e[14] * t[2] + e[15] * t[3]],\n                dot: (e, t) => e[0] * t[0] + e[1] * t[1] + e[2] * t[2] + e[3] * t[3],\n                sml: (e, t) => [e * t[0], e * t[1], e * t[2], e * t[3]]\n            };\n            UPNG.encode = function encode(e, t, r, i, o, a, s) {\n                null == i && (i = 0), null == s && (s = !1);\n                const f = compress(e, t, r, i, [!1, !1, !1, 0, s, !1]);\n                return compressPNG(f, -1), _main(f, t, r, o, a)\n            }, UPNG.encodeLL = function encodeLL(e, t, r, i, o, a, s, f) {\n                const l = {ctype: 0 + (1 == i ? 0 : 2) + (0 == o ? 0 : 4), depth: a, frames: []}, c = (i + o) * a,\n                    u = c * t;\n                for (let i = 0; i < e.length; i++) l.frames.push({\n                    rect: {x: 0, y: 0, width: t, height: r},\n                    img: new Uint8Array(e[i]),\n                    blend: 0,\n                    dispose: 1,\n                    bpp: Math.ceil(c / 8),\n                    bpl: Math.ceil(u / 8)\n                });\n                return compressPNG(l, 0, !0), _main(l, t, r, s, f)\n            }, UPNG.encode.compress = compress, UPNG.encode.dither = dither, UPNG.quantize = quantize, UPNG.quantize.getKDtree = getKDtree, UPNG.quantize.getNearest = getNearest\n        }();\n        const t = {\n            toArrayBuffer(e, r) {\n                const i = e.width, o = e.height, a = i << 2, s = e.getContext(\"2d\").getImageData(0, 0, i, o),\n                    f = new Uint32Array(s.data.buffer), l = (32 * i + 31) / 32 << 2, c = l * o, u = 122 + c,\n                    h = new ArrayBuffer(u), d = new DataView(h), A = 1 << 20;\n                let g, p, m, w, v = A, b = 0, y = 0, E = 0;\n\n                function set16(e) {\n                    d.setUint16(y, e, !0), y += 2\n                }\n\n                function set32(e) {\n                    d.setUint32(y, e, !0), y += 4\n                }\n\n                function seek(e) {\n                    y += e\n                }\n\n                set16(19778), set32(u), seek(4), set32(122), set32(108), set32(i), set32(-o >>> 0), set16(1), set16(32), set32(3), set32(c), set32(2835), set32(2835), seek(8), set32(16711680), set32(65280), set32(255), set32(4278190080), set32(1466527264), function convert() {\n                    for (; b < o && v > 0;) {\n                        for (w = 122 + b * l, g = 0; g < a;) v--, p = f[E++], m = p >>> 24, d.setUint32(w + g, p << 8 | m), g += 4;\n                        b++\n                    }\n                    E < f.length ? (v = A, setTimeout(convert, t._dly)) : r(h)\n                }()\n            }, toBlob(e, t) {\n                this.toArrayBuffer(e, (e => {\n                    t(new Blob([e], {type: \"image/bmp\"}))\n                }))\n            }, _dly: 9\n        };\n        var r = {\n            CHROME: \"CHROME\",\n            FIREFOX: \"FIREFOX\",\n            DESKTOP_SAFARI: \"DESKTOP_SAFARI\",\n            IE: \"IE\",\n            IOS: \"IOS\",\n            ETC: \"ETC\"\n        }, i = {\n            [r.CHROME]: 16384,\n            [r.FIREFOX]: 11180,\n            [r.DESKTOP_SAFARI]: 16384,\n            [r.IE]: 8192,\n            [r.IOS]: 4096,\n            [r.ETC]: 8192\n        };\n        const o = \"undefined\" != typeof window,\n            a = \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope,\n            s = o && window.cordova && window.cordova.require && window.cordova.require(\"cordova/modulemapper\"),\n            CustomFile = (o || a) && (s && s.getOriginalSymbol(window, \"File\") || \"undefined\" != typeof File && File),\n            CustomFileReader = (o || a) && (s && s.getOriginalSymbol(window, \"FileReader\") || \"undefined\" != typeof FileReader && FileReader);\n\n        function getFilefromDataUrl(e, t, r = Date.now()) {\n            return new Promise((i => {\n                const o = e.split(\",\"), a = o[0].match(/:(.*?);/)[1], s = globalThis.atob(o[1]);\n                let f = s.length;\n                const l = new Uint8Array(f);\n                for (; f--;) l[f] = s.charCodeAt(f);\n                const c = new Blob([l], {type: a});\n                c.name = t, c.lastModified = r, i(c)\n            }))\n        }\n\n        function getDataUrlFromFile(e) {\n            return new Promise(((t, r) => {\n                const i = new CustomFileReader;\n                i.onload = () => t(i.result), i.onerror = e => r(e), i.readAsDataURL(e)\n            }))\n        }\n\n        function loadImage(e) {\n            return new Promise(((t, r) => {\n                const i = new Image;\n                i.onload = () => t(i), i.onerror = e => r(e), i.src = e\n            }))\n        }\n\n        function getBrowserName() {\n            if (void 0 !== getBrowserName.cachedResult) return getBrowserName.cachedResult;\n            let e = r.ETC;\n            const {userAgent: t} = navigator;\n            return /Chrom(e|ium)/i.test(t) ? e = r.CHROME : /iP(ad|od|hone)/i.test(t) && /WebKit/i.test(t) ? e = r.IOS : /Safari/i.test(t) ? e = r.DESKTOP_SAFARI : /Firefox/i.test(t) ? e = r.FIREFOX : (/MSIE/i.test(t) || !0 == !!document.documentMode) && (e = r.IE), getBrowserName.cachedResult = e, getBrowserName.cachedResult\n        }\n\n        function approximateBelowMaximumCanvasSizeOfBrowser(e, t) {\n            const r = getBrowserName(), o = i[r];\n            let a = e, s = t, f = a * s;\n            const l = a > s ? s / a : a / s;\n            for (; f > o * o;) {\n                const e = (o + a) / 2, t = (o + s) / 2;\n                e < t ? (s = t, a = t * l) : (s = e * l, a = e), f = a * s\n            }\n            return {width: a, height: s}\n        }\n\n        function getNewCanvasAndCtx(e, t) {\n            let r, i;\n            try {\n                if (r = new OffscreenCanvas(e, t), i = r.getContext(\"2d\"), null === i) throw new Error(\"getContext of OffscreenCanvas returns null\")\n            } catch (e) {\n                r = document.createElement(\"canvas\"), i = r.getContext(\"2d\")\n            }\n            return r.width = e, r.height = t, [r, i]\n        }\n\n        function drawImageInCanvas(e, t) {\n            const {\n                width: r,\n                height: i\n            } = approximateBelowMaximumCanvasSizeOfBrowser(e.width, e.height), [o, a] = getNewCanvasAndCtx(r, i);\n            return t && /jpe?g/.test(t) && (a.fillStyle = \"white\", a.fillRect(0, 0, o.width, o.height)), a.drawImage(e, 0, 0, o.width, o.height), o\n        }\n\n        function isIOS() {\n            return void 0 !== isIOS.cachedResult || (isIOS.cachedResult = [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || navigator.userAgent.includes(\"Mac\") && \"undefined\" != typeof document && \"ontouchend\" in document), isIOS.cachedResult\n        }\n\n        function drawFileInCanvas(e, t = {}) {\n            return new Promise((function (i, o) {\n                let a, s;\n                var $Try_2_Post = function () {\n                    try {\n                        return s = drawImageInCanvas(a, t.fileType || e.type), i([a, s])\n                    } catch (e) {\n                        return o(e)\n                    }\n                }, $Try_2_Catch = function (t) {\n                    try {\n                        0;\n                        var $Try_3_Catch = function (e) {\n                            try {\n                                throw e\n                            } catch (e) {\n                                return o(e)\n                            }\n                        };\n                        try {\n                            let t;\n                            return getDataUrlFromFile(e).then((function (e) {\n                                try {\n                                    return t = e, loadImage(t).then((function (e) {\n                                        try {\n                                            return a = e, function () {\n                                                try {\n                                                    return $Try_2_Post()\n                                                } catch (e) {\n                                                    return o(e)\n                                                }\n                                            }()\n                                        } catch (e) {\n                                            return $Try_3_Catch(e)\n                                        }\n                                    }), $Try_3_Catch)\n                                } catch (e) {\n                                    return $Try_3_Catch(e)\n                                }\n                            }), $Try_3_Catch)\n                        } catch (e) {\n                            $Try_3_Catch(e)\n                        }\n                    } catch (e) {\n                        return o(e)\n                    }\n                };\n                try {\n                    if (isIOS() || [r.DESKTOP_SAFARI, r.MOBILE_SAFARI].includes(getBrowserName())) throw new Error(\"Skip createImageBitmap on IOS and Safari\");\n                    return createImageBitmap(e).then((function (e) {\n                        try {\n                            return a = e, $Try_2_Post()\n                        } catch (e) {\n                            return $Try_2_Catch()\n                        }\n                    }), $Try_2_Catch)\n                } catch (e) {\n                    $Try_2_Catch()\n                }\n            }))\n        }\n\n        function canvasToFile(e, r, i, o, a = 1) {\n            return new Promise((function (s, f) {\n                let l;\n                if (\"image/png\" === r) {\n                    let c, u, h;\n                    return c = e.getContext(\"2d\"), ({data: u} = c.getImageData(0, 0, e.width, e.height)), h = UPNG.encode([u.buffer], e.width, e.height, 4096 * a), l = new Blob([h], {type: r}), l.name = i, l.lastModified = o, $If_4.call(this)\n                }\n                {\n                    if (\"image/bmp\" === r) return new Promise((r => t.toBlob(e, r))).then(function (e) {\n                        try {\n                            return l = e, l.name = i, l.lastModified = o, $If_5.call(this)\n                        } catch (e) {\n                            return f(e)\n                        }\n                    }.bind(this), f);\n                    {\n                        if (\"function\" == typeof OffscreenCanvas && e instanceof OffscreenCanvas) return e.convertToBlob({\n                            type: r,\n                            quality: a\n                        }).then(function (e) {\n                            try {\n                                return l = e, l.name = i, l.lastModified = o, $If_6.call(this)\n                            } catch (e) {\n                                return f(e)\n                            }\n                        }.bind(this), f);\n                        {\n                            let d;\n                            return d = e.toDataURL(r, a), getFilefromDataUrl(d, i, o).then(function (e) {\n                                try {\n                                    return l = e, $If_6.call(this)\n                                } catch (e) {\n                                    return f(e)\n                                }\n                            }.bind(this), f)\n                        }\n\n                        function $If_6() {\n                            return $If_5.call(this)\n                        }\n                    }\n\n                    function $If_5() {\n                        return $If_4.call(this)\n                    }\n                }\n\n                function $If_4() {\n                    return s(l)\n                }\n            }))\n        }\n\n        function cleanupCanvasMemory(e) {\n            e.width = 0, e.height = 0\n        }\n\n        function isAutoOrientationInBrowser() {\n            return new Promise((function (e, t) {\n                let r, i, o, a, s;\n                return void 0 !== isAutoOrientationInBrowser.cachedResult ? e(isAutoOrientationInBrowser.cachedResult) : (r = \"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\", getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\", \"test.jpg\", Date.now()).then((function (r) {\n                    try {\n                        return i = r, drawFileInCanvas(i).then((function (r) {\n                            try {\n                                return o = r[1], canvasToFile(o, i.type, i.name, i.lastModified).then((function (r) {\n                                    try {\n                                        return a = r, cleanupCanvasMemory(o), drawFileInCanvas(a).then((function (r) {\n                                            try {\n                                                return s = r[0], isAutoOrientationInBrowser.cachedResult = 1 === s.width && 2 === s.height, e(isAutoOrientationInBrowser.cachedResult)\n                                            } catch (e) {\n                                                return t(e)\n                                            }\n                                        }), t)\n                                    } catch (e) {\n                                        return t(e)\n                                    }\n                                }), t)\n                            } catch (e) {\n                                return t(e)\n                            }\n                        }), t)\n                    } catch (e) {\n                        return t(e)\n                    }\n                }), t))\n            }))\n        }\n\n        function getExifOrientation(e) {\n            return new Promise(((t, r) => {\n                const i = new CustomFileReader;\n                i.onload = e => {\n                    const r = new DataView(e.target.result);\n                    if (65496 != r.getUint16(0, !1)) return t(-2);\n                    const i = r.byteLength;\n                    let o = 2;\n                    for (; o < i;) {\n                        if (r.getUint16(o + 2, !1) <= 8) return t(-1);\n                        const e = r.getUint16(o, !1);\n                        if (o += 2, 65505 == e) {\n                            if (1165519206 != r.getUint32(o += 2, !1)) return t(-1);\n                            const e = 18761 == r.getUint16(o += 6, !1);\n                            o += r.getUint32(o + 4, e);\n                            const i = r.getUint16(o, e);\n                            o += 2;\n                            for (let a = 0; a < i; a++) if (274 == r.getUint16(o + 12 * a, e)) return t(r.getUint16(o + 12 * a + 8, e))\n                        } else {\n                            if (65280 != (65280 & e)) break;\n                            o += r.getUint16(o, !1)\n                        }\n                    }\n                    return t(-1)\n                }, i.onerror = e => r(e), i.readAsArrayBuffer(e)\n            }))\n        }\n\n        function handleMaxWidthOrHeight(e, t) {\n            const {width: r} = e, {height: i} = e, {maxWidthOrHeight: o} = t;\n            let a, s = e;\n            return isFinite(o) && (r > o || i > o) && ([s, a] = getNewCanvasAndCtx(r, i), r > i ? (s.width = o, s.height = i / r * o) : (s.width = r / i * o, s.height = o), a.drawImage(e, 0, 0, s.width, s.height), cleanupCanvasMemory(e)), s\n        }\n\n        function followExifOrientation(e, t) {\n            const {width: r} = e, {height: i} = e, [o, a] = getNewCanvasAndCtx(r, i);\n            switch (t > 4 && t < 9 ? (o.width = i, o.height = r) : (o.width = r, o.height = i), t) {\n                case 2:\n                    a.transform(-1, 0, 0, 1, r, 0);\n                    break;\n                case 3:\n                    a.transform(-1, 0, 0, -1, r, i);\n                    break;\n                case 4:\n                    a.transform(1, 0, 0, -1, 0, i);\n                    break;\n                case 5:\n                    a.transform(0, 1, 1, 0, 0, 0);\n                    break;\n                case 6:\n                    a.transform(0, 1, -1, 0, i, 0);\n                    break;\n                case 7:\n                    a.transform(0, -1, -1, 0, i, r);\n                    break;\n                case 8:\n                    a.transform(0, -1, 1, 0, 0, r)\n            }\n            return a.drawImage(e, 0, 0, r, i), cleanupCanvasMemory(e), o\n        }\n\n        function compress(e, t, r = 0) {\n            return new Promise((function (i, o) {\n                let a, s, f, l, c, u, h, d, A, g, p, m, w, v, b, y, E, F, _, B;\n\n                function incProgress(e = 5) {\n                    if (t.signal && t.signal.aborted) throw t.signal.reason;\n                    a += e, t.onProgress(Math.min(a, 100))\n                }\n\n                function setProgress(e) {\n                    if (t.signal && t.signal.aborted) throw t.signal.reason;\n                    a = Math.min(Math.max(e, a), 100), t.onProgress(a)\n                }\n\n                return a = r, s = t.maxIteration || 10, f = 1024 * t.maxSizeMB * 1024, incProgress(), drawFileInCanvas(e, t).then(function (r) {\n                    try {\n                        return [, l] = r, incProgress(), c = handleMaxWidthOrHeight(l, t), incProgress(), new Promise((function (r, i) {\n                            var o;\n                            if (!(o = t.exifOrientation)) return getExifOrientation(e).then(function (e) {\n                                try {\n                                    return o = e, $If_2.call(this)\n                                } catch (e) {\n                                    return i(e)\n                                }\n                            }.bind(this), i);\n\n                            function $If_2() {\n                                return r(o)\n                            }\n\n                            return $If_2.call(this)\n                        })).then(function (r) {\n                            try {\n                                return u = r, incProgress(), isAutoOrientationInBrowser().then(function (r) {\n                                    try {\n                                        return h = r ? c : followExifOrientation(c, u), incProgress(), d = t.initialQuality || 1, A = t.fileType || e.type, canvasToFile(h, A, e.name, e.lastModified, d).then(function (r) {\n                                            try {\n                                                {\n                                                    if (g = r, incProgress(), p = g.size > f, m = g.size > e.size, !p && !m) return setProgress(100), i(g);\n                                                    var a;\n\n                                                    function $Loop_3() {\n                                                        if (s-- && (b > f || b > w)) {\n                                                            let t, r;\n                                                            return t = B ? .95 * _.width : _.width, r = B ? .95 * _.height : _.height, [E, F] = getNewCanvasAndCtx(t, r), F.drawImage(_, 0, 0, t, r), d *= \"image/png\" === A ? .85 : .95, canvasToFile(E, A, e.name, e.lastModified, d).then((function (e) {\n                                                                try {\n                                                                    return y = e, cleanupCanvasMemory(_), _ = E, b = y.size, setProgress(Math.min(99, Math.floor((v - b) / (v - f) * 100))), $Loop_3\n                                                                } catch (e) {\n                                                                    return o(e)\n                                                                }\n                                                            }), o)\n                                                        }\n                                                        return [1]\n                                                    }\n\n                                                    return w = e.size, v = g.size, b = v, _ = h, B = !t.alwaysKeepResolution && p, (a = function (e) {\n                                                        for (; e;) {\n                                                            if (e.then) return void e.then(a, o);\n                                                            try {\n                                                                if (e.pop) {\n                                                                    if (e.length) return e.pop() ? $Loop_3_exit.call(this) : e;\n                                                                    e = $Loop_3\n                                                                } else e = e.call(this)\n                                                            } catch (e) {\n                                                                return o(e)\n                                                            }\n                                                        }\n                                                    }.bind(this))($Loop_3);\n\n                                                    function $Loop_3_exit() {\n                                                        return cleanupCanvasMemory(_), cleanupCanvasMemory(E), cleanupCanvasMemory(c), cleanupCanvasMemory(h), cleanupCanvasMemory(l), setProgress(100), i(y)\n                                                    }\n                                                }\n                                            } catch (u) {\n                                                return o(u)\n                                            }\n                                        }.bind(this), o)\n                                    } catch (e) {\n                                        return o(e)\n                                    }\n                                }.bind(this), o)\n                            } catch (e) {\n                                return o(e)\n                            }\n                        }.bind(this), o)\n                    } catch (e) {\n                        return o(e)\n                    }\n                }.bind(this), o)\n            }))\n        }\n\n        const f = \"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";\n        let l;\n\n        function compressOnWebWorker(e, t) {\n            return new Promise(((r, i) => {\n                l || (l = function createWorkerScriptURL(e) {\n                    const t = [];\n                    return \"function\" == typeof e ? t.push(`(${e})()`) : t.push(e), URL.createObjectURL(new Blob(t))\n                }(f));\n                const o = new Worker(l);\n                o.addEventListener(\"message\", (function handler(e) {\n                    if (t.signal && t.signal.aborted) o.terminate(); else if (void 0 === e.data.progress) {\n                        if (e.data.error) return i(new Error(e.data.error)), void o.terminate();\n                        r(e.data.file), o.terminate()\n                    } else t.onProgress(e.data.progress)\n                })), o.addEventListener(\"error\", i), t.signal && t.signal.addEventListener(\"abort\", (() => {\n                    i(t.signal.reason), o.terminate()\n                })), o.postMessage({\n                    file: e,\n                    imageCompressionLibUrl: t.libURL,\n                    options: {...t, onProgress: void 0, signal: void 0}\n                })\n            }))\n        }\n\n        function imageCompression(e, t) {\n            return new Promise((function (r, i) {\n                let o, a, s, f, l, c;\n                if (o = {...t}, s = 0, ({onProgress: f} = o), o.maxSizeMB = o.maxSizeMB || Number.POSITIVE_INFINITY, l = \"boolean\" != typeof o.useWebWorker || o.useWebWorker, delete o.useWebWorker, o.onProgress = e => {\n                    s = e, \"function\" == typeof f && f(s)\n                }, !(1 || e instanceof Blob || e instanceof CustomFile)) return i(new Error(\"The file given is not an instance of Blob or File\"));\n                if (!/^image/.test(e.type)) return i(new Error(\"The file given is not an image\"));\n                if (c = \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope, !l || \"function\" != typeof Worker || c) return compress(e, o).then(function (e) {\n                    try {\n                        return a = e, $If_4.call(this)\n                    } catch (e) {\n                        return i(e)\n                    }\n                }.bind(this), i);\n                var u = function () {\n                    try {\n                        return $If_4.call(this)\n                    } catch (e) {\n                        return i(e)\n                    }\n                }.bind(this), $Try_1_Catch = function (t) {\n                    try {\n                        return compress(e, o).then((function (e) {\n                            try {\n                                return a = e, u()\n                            } catch (e) {\n                                return i(e)\n                            }\n                        }), i)\n                    } catch (e) {\n                        return i(e)\n                    }\n                };\n                try {\n                    return o.libURL = o.libURL || \"https://cdn.bootcdn.net/ajax/libs/browser-image-compression/2.0.2/browser-image-compression.js\", compressOnWebWorker(e, o).then((function (e) {\n                        try {\n                            return a = e, u()\n                        } catch (e) {\n                            return $Try_1_Catch()\n                        }\n                    }), $Try_1_Catch)\n                } catch (e) {\n                    $Try_1_Catch()\n                }\n\n                function $If_4() {\n                    try {\n                        a.name = e.name, a.lastModified = e.lastModified\n                    } catch (e) {\n                    }\n                    try {\n                        o.preserveExif && \"image/jpeg\" === e.type && (!o.fileType || o.fileType && o.fileType === e.type) && (a = copyExifWithoutOrientation(e, a))\n                    } catch (e) {\n                    }\n                    return r(a)\n                }\n            }))\n        }\n\n        return imageCompression.getDataUrlFromFile = getDataUrlFromFile, imageCompression.getFilefromDataUrl = getFilefromDataUrl, imageCompression.loadImage = loadImage, imageCompression.drawImageInCanvas = drawImageInCanvas, imageCompression.drawFileInCanvas = drawFileInCanvas, imageCompression.canvasToFile = canvasToFile, imageCompression.getExifOrientation = getExifOrientation, imageCompression.handleMaxWidthOrHeight = handleMaxWidthOrHeight, imageCompression.followExifOrientation = followExifOrientation, imageCompression.cleanupCanvasMemory = cleanupCanvasMemory, imageCompression.isAutoOrientationInBrowser = isAutoOrientationInBrowser, imageCompression.approximateBelowMaximumCanvasSizeOfBrowser = approximateBelowMaximumCanvasSizeOfBrowser, imageCompression.copyExifWithoutOrientation = copyExifWithoutOrientation, imageCompression.getBrowserName = getBrowserName, imageCompression.version = \"2.0.2\", imageCompression\n    }));\n    return {\n        // {\n        //   maxSizeMB: number,            // (default: Number.POSITIVE_INFINITY)\n        //     maxWidthOrHeight: number,     // compressedFile will scale down by ratio to a point that width or height is smaller than maxWidthOrHeight (default: undefined)\n        //   // but, automatically reduce the size to smaller than the maximum Canvas size supported by each browser.\n        //   // Please check the Caveat part for details.\n        //   onProgress: Function,         // optional, a function takes one progress argument (percentage from 0 to 100)\n        //   useWebWorker: boolean,        // optional, use multi-thread web worker, fallback to run in main-thread (default: true)\n        //   libURL: string,               // optional, the libURL of this library for importing script in Web Worker (default: https://cdn.jsdelivr.net/npm/browser-image-compression/dist/browser-image-compression.js)\n        //   preserveExif: boolean,        // optional, use preserve Exif metadata for JPEG image e.g., Camera model, Focal length, etc (default: false)\n        //\n        //   signal: AbortSignal,          // optional, to abort / cancel the compression\n        //\n        //   // following options are for advanced users\n        //   maxIteration: number,         // optional, max number of iteration to compress the image (default: 10)\n        //   exifOrientation: number,      // optional, see https://stackoverflow.com/a/32490603/10395024\n        //   fileType: string,             // optional, fileType override e.g., 'image/jpeg', 'image/png' (default: file.type)\n        //   initialQuality: number,       // optional, initial quality value between 0 and 1 (default: 1)\n        //   alwaysKeepResolution: boolean // optional, only reduce quality, always keep width and height (default: false)\n        // }\n        compress: function (file, option) {\n            return imageCompression(file, option);\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/keymap.js",
    "content": "var keymap = (UE.keymap = {\n    Backspace: 8,\n    Tab: 9,\n    Enter: 13,\n\n    Shift: 16,\n    Control: 17,\n    Alt: 18,\n    CapsLock: 20,\n\n    Esc: 27,\n\n    Spacebar: 32,\n\n    PageUp: 33,\n    PageDown: 34,\n    End: 35,\n    Home: 36,\n\n    Left: 37,\n    Up: 38,\n    Right: 39,\n    Down: 40,\n\n    Insert: 45,\n\n    Del: 46,\n\n    NumLock: 144,\n\n    Cmd: 91,\n\n    \"=\": 187,\n    \"-\": 189,\n\n    b: 66,\n    i: 73,\n    //回退\n    z: 90,\n    y: 89,\n    //粘贴\n    v: 86,\n    x: 88,\n\n    s: 83,\n\n    n: 78\n});\n"
  },
  {
    "path": "_src/core/loadconfig.js",
    "content": "(function () {\n    UE.Editor.prototype.loadServerConfig = function () {\n        var me = this;\n        setTimeout(function () {\n\n            if(me.options.loadConfigFromServer===false){\n                return;\n            }\n\n            try {\n                me.options.imageUrl &&\n                me.setOpt(\n                    \"serverUrl\",\n                    me.options.imageUrl.replace(\n                        /^(.*[\\/]).+([\\.].+)$/,\n                        \"$1controller$2\"\n                    )\n                );\n\n                var configUrl = me.getActionUrl(\"config\"),\n                    isJsonp = utils.isCrossDomainUrl(configUrl);\n\n                /* 发出ajax请求 */\n                me._serverConfigLoaded = false;\n\n                configUrl &&\n                UE.ajax.request(configUrl, {\n                    method: \"GET\",\n                    dataType: isJsonp ? \"jsonp\" : \"\",\n                    headers: me.options.serverHeaders || {},\n                    onsuccess: function (r) {\n                        try {\n                            var config = isJsonp ? r : eval(\"(\" + r.responseText + \")\");\n                            config = me.options.serverResponsePrepare( config )\n                            // console.log('me.options.before', me.options.audioConfig);\n                            me.options = utils.merge(me.options, config);\n                            // console.log('server.config', config.audioConfig);\n                            // console.log('me.options.after', me.options.audioConfig);\n                            me.fireEvent(\"serverConfigLoaded\");\n                            me._serverConfigLoaded = true;\n                        } catch (e) {\n                            showErrorMsg(me.getLang(\"loadconfigFormatError\")+':'+e);\n                        }\n                    },\n                    onerror: function () {\n                        showErrorMsg(me.getLang(\"loadconfigHttpError\"));\n                    }\n                });\n\n\n            } catch (e) {\n                showErrorMsg(me.getLang(\"loadconfigError\"));\n            }\n        });\n\n        function showErrorMsg(msg) {\n            console && console.error(msg);\n            //me.fireEvent('showMessage', {\n            //    'title': msg,\n            //    'type': 'error'\n            //});\n        }\n    };\n\n    UE.Editor.prototype.isServerConfigLoaded = function () {\n        var me = this;\n        return me._serverConfigLoaded || false;\n    };\n\n    UE.Editor.prototype.afterConfigReady = function (handler) {\n        if (!handler || !utils.isFunction(handler)) return;\n        var me = this;\n        var readyHandler = function () {\n            handler.apply(me, arguments);\n            me.removeListener(\"serverConfigLoaded\", readyHandler);\n        };\n\n        if (me.isServerConfigLoaded()) {\n            handler.call(me, \"serverConfigLoaded\");\n        } else {\n            me.addListener(\"serverConfigLoaded\", readyHandler);\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/localstorage.js",
    "content": "var LocalStorage = (UE.LocalStorage = (function () {\n\n    var storage = window.localStorage\n\n    return {\n        saveLocalData: function (key, data) {\n            // console.log('saveLocalData', key, data);\n            if (!storage) {\n                return false;\n            }\n            storage.setItem(key, data);\n            return true;\n        },\n        getLocalData: function (key) {\n            // console.log('getLocalData', key);\n            if (!storage) {\n                return null;\n            }\n            return storage.getItem(key) || null;\n        },\n        removeItem: function (key) {\n            // console.log('removeItem', key);\n            storage && storage.removeItem(key);\n        }\n    };\n\n})());\n\n(function () {\n\n    var ROOT_KEY = \"UEditorPlusPref\";\n\n    UE.Editor.prototype.setPreferences = function (key, value) {\n        // console.log('setPreferences', key, value);\n        var obj = {};\n        if (utils.isString(key)) {\n            obj[key] = value;\n        } else {\n            obj = key;\n        }\n        var data = LocalStorage.getLocalData(ROOT_KEY);\n        if (data && (data = utils.str2json(data))) {\n            utils.extend(data, obj);\n        } else {\n            data = obj;\n        }\n        data && LocalStorage.saveLocalData(ROOT_KEY, utils.json2str(data));\n    };\n\n    UE.Editor.prototype.getPreferences = function (key) {\n        // console.log('getPreferences', key);\n        var data = LocalStorage.getLocalData(ROOT_KEY);\n        if (data && (data = utils.str2json(data))) {\n            return key ? data[key] : data;\n        }\n        return null;\n    };\n\n    UE.Editor.prototype.removePreferences = function (key) {\n        // console.log('removePreferences', key);\n        var data = LocalStorage.getLocalData(ROOT_KEY);\n        if (data && (data = utils.str2json(data))) {\n            data[key] = undefined;\n            delete data[key];\n        }\n        data && LocalStorage.saveLocalData(ROOT_KEY, utils.json2str(data));\n    };\n})();\n"
  },
  {
    "path": "_src/core/node.js",
    "content": "/**\n * 编辑器模拟的节点类\n * @file\n * @module UE\n * @class uNode\n * @since 1.2.6.1\n */\n\n/**\n * UEditor公用空间，UEditor所有的功能都挂载在该空间下\n * @unfile\n * @module UE\n */\n\n(function () {\n    /**\n     * 编辑器模拟的节点类\n     * @unfile\n     * @module UE\n     * @class uNode\n     */\n\n    /**\n     * 通过一个键值对，创建一个uNode对象\n     * @constructor\n     * @param { Object } attr 传入要创建的uNode的初始属性\n     * @example\n     * ```javascript\n     * var node = new uNode({\n     *     type:'element',\n     *     tagName:'span',\n     *     attrs:{style:'font-size:14px;'}\n     * })\n     * ```\n     */\n    var uNode = (UE.uNode = function (obj) {\n        this.type = obj.type;\n        this.data = obj.data;\n        this.tagName = obj.tagName;\n        this.parentNode = obj.parentNode;\n        this.attrs = obj.attrs || {};\n        this.children = obj.children;\n    });\n\n    var notTransAttrs = {\n        href: 1,\n        src: 1,\n        _src: 1,\n        _href: 1,\n        cdata_data: 1\n    };\n\n    var notTransTagName = {\n        style: 1,\n        script: 1\n    };\n\n    var indentChar = \"    \",\n        breakChar = \"\\n\";\n\n    function insertLine(arr, current, begin) {\n        arr.push(breakChar);\n        return current + (begin ? 1 : -1);\n    }\n\n    function insertIndent(arr, current) {\n        //插入缩进\n        for (var i = 0; i < current; i++) {\n            arr.push(indentChar);\n        }\n    }\n\n    //创建uNode的静态方法\n    //支持标签和html\n    uNode.createElement = function (html) {\n        if (/[<>]/.test(html)) {\n            return UE.htmlparser(html).children[0];\n        } else {\n            return new uNode({\n                type: \"element\",\n                children: [],\n                tagName: html\n            });\n        }\n    };\n    uNode.createText = function (data, noTrans) {\n        return new UE.uNode({\n            type: \"text\",\n            data: noTrans ? data : utils.unhtml(data || \"\")\n        });\n    };\n\n    function nodeToHtml(node, arr, formatter, current) {\n        switch (node.type) {\n            case \"root\":\n                for (var i = 0, ci; (ci = node.children[i++]);) {\n                    //插入新行\n                    if (\n                        formatter &&\n                        ci.type == \"element\" &&\n                        !dtd.$inlineWithA[ci.tagName] &&\n                        i > 1\n                    ) {\n                        insertLine(arr, current, true);\n                        insertIndent(arr, current);\n                    }\n                    nodeToHtml(ci, arr, formatter, current);\n                }\n                break;\n            case \"text\":\n                isText(node, arr);\n                break;\n            case \"element\":\n                isElement(node, arr, formatter, current);\n                break;\n            case \"comment\":\n                isComment(node, arr, formatter);\n        }\n        return arr;\n    }\n\n    function isText(node, arr) {\n        if (node.parentNode.tagName == \"pre\") {\n            //源码模式下输入html标签，不能做转换处理，直接输出\n            arr.push(node.data);\n        } else {\n            arr.push(\n                notTransTagName[node.parentNode.tagName]\n                    ? utils.html(node.data)\n                    : node.data.replace(/[ ]{2}/g, \" &nbsp;\")\n            );\n        }\n    }\n\n    function isElement(node, arr, formatter, current) {\n        var attrhtml = \"\";\n        if (node.attrs) {\n            attrhtml = [];\n            var attrs = node.attrs;\n            for (var a in attrs) {\n                //这里就针对\n                //<p>'<img src='http://nsclick.baidu.com/u.gif?&asdf=\\\"sdf&asdfasdfs;asdf'></p>\n                //这里边的\\\"做转换，要不用innerHTML直接被截断了，属性src\n                //有可能做的不够\n                attrhtml.push(\n                    a +\n                    (attrs[a] !== undefined\n                        ? '=\"' +\n                        (notTransAttrs[a]\n                            ? utils.html(attrs[a]).replace(/[\"]/g, function (a) {\n                                return \"&quot;\";\n                            })\n                            : utils.unhtml(attrs[a])) +\n                        '\"'\n                        : \"\")\n                );\n            }\n            attrhtml = attrhtml.join(\" \");\n        }\n        arr.push(\n            \"<\" +\n            node.tagName +\n            (attrhtml ? \" \" + attrhtml : \"\") +\n            (dtd.$empty[node.tagName] ? \"/\" : \"\") +\n            \">\"\n        );\n        //插入新行\n        if (formatter && !dtd.$inlineWithA[node.tagName] && node.tagName != \"pre\") {\n            if (node.children && node.children.length) {\n                current = insertLine(arr, current, true);\n                insertIndent(arr, current);\n            }\n        }\n        if (node.children && node.children.length) {\n            for (var i = 0, ci; (ci = node.children[i++]);) {\n                if (\n                    formatter &&\n                    ci.type == \"element\" &&\n                    !dtd.$inlineWithA[ci.tagName] &&\n                    i > 1\n                ) {\n                    insertLine(arr, current);\n                    insertIndent(arr, current);\n                }\n                nodeToHtml(ci, arr, formatter, current);\n            }\n        }\n        if (!dtd.$empty[node.tagName]) {\n            if (\n                formatter &&\n                !dtd.$inlineWithA[node.tagName] &&\n                node.tagName != \"pre\"\n            ) {\n                if (node.children && node.children.length) {\n                    current = insertLine(arr, current);\n                    insertIndent(arr, current);\n                }\n            }\n            arr.push(\"</\" + node.tagName + \">\");\n        }\n    }\n\n    function isComment(node, arr) {\n        arr.push(\"<!--\" + node.data + \"-->\");\n    }\n\n    function getNodeById(root, id) {\n        var node;\n        if (root.type == \"element\" && root.getAttr(\"id\") == id) {\n            return root;\n        }\n        if (root.children && root.children.length) {\n            for (var i = 0, ci; (ci = root.children[i++]);) {\n                if ((node = getNodeById(ci, id))) {\n                    return node;\n                }\n            }\n        }\n    }\n\n    function getNodesByTagName(node, tagName, arr) {\n        if (node.type == \"element\" && node.tagName == tagName) {\n            arr.push(node);\n        }\n        if (node.children && node.children.length) {\n            for (var i = 0, ci; (ci = node.children[i++]);) {\n                getNodesByTagName(ci, tagName, arr);\n            }\n        }\n    }\n\n    function nodeTraversal(root, fn) {\n        if (root.children && root.children.length) {\n            for (var i = 0, ci; (ci = root.children[i]);) {\n                nodeTraversal(ci, fn);\n                //ci被替换的情况，这里就不再走 fn了\n                if (ci.parentNode) {\n                    if (ci.children && ci.children.length) {\n                        fn(ci);\n                    }\n                    if (ci.parentNode) i++;\n                }\n            }\n        } else {\n            fn(root);\n        }\n    }\n\n    uNode.prototype = {\n        /**\n         * 当前节点对象，转换成html文本\n         * @method toHtml\n         * @return { String } 返回转换后的html字符串\n         * @example\n         * ```javascript\n         * node.toHtml();\n         * ```\n         */\n\n        /**\n         * 当前节点对象，转换成html文本\n         * @method toHtml\n         * @param { Boolean } formatter 是否格式化返回值\n         * @return { String } 返回转换后的html字符串\n         * @example\n         * ```javascript\n         * node.toHtml( true );\n         * ```\n         */\n        toHtml: function (formatter) {\n            var arr = [];\n            nodeToHtml(this, arr, formatter, 0);\n            return arr.join(\"\");\n        },\n\n        /**\n         * 获取节点的html内容\n         * @method innerHTML\n         * @warning 假如节点的type不是'element'，或节点的标签名称不在dtd列表里，直接返回当前节点\n         * @return { String } 返回节点的html内容\n         * @example\n         * ```javascript\n         * var htmlstr = node.innerHTML();\n         * ```\n         */\n\n        /**\n         * 设置节点的html内容\n         * @method innerHTML\n         * @warning 假如节点的type不是'element'，或节点的标签名称不在dtd列表里，直接返回当前节点\n         * @param { String } htmlstr 传入要设置的html内容\n         * @return { UE.uNode } 返回节点本身\n         * @example\n         * ```javascript\n         * node.innerHTML('<span>text</span>');\n         * ```\n         */\n        innerHTML: function (htmlstr) {\n            if (this.type != \"element\" || dtd.$empty[this.tagName]) {\n                return this;\n            }\n            if (utils.isString(htmlstr)) {\n                if (this.children) {\n                    for (var i = 0, ci; (ci = this.children[i++]);) {\n                        ci.parentNode = null;\n                    }\n                }\n                this.children = [];\n                var tmpRoot = UE.htmlparser(htmlstr);\n                for (var i = 0, ci; (ci = tmpRoot.children[i++]);) {\n                    this.children.push(ci);\n                    ci.parentNode = this;\n                }\n                return this;\n            } else {\n                var tmpRoot = new UE.uNode({\n                    type: \"root\",\n                    children: this.children\n                });\n                return tmpRoot.toHtml();\n            }\n        },\n\n        /**\n         * 获取节点的纯文本内容\n         * @method innerText\n         * @warning 假如节点的type不是'element'，或节点的标签名称不在dtd列表里，直接返回当前节点\n         * @return { String } 返回节点的存文本内容\n         * @example\n         * ```javascript\n         * var textStr = node.innerText();\n         * ```\n         */\n\n        /**\n         * 设置节点的纯文本内容\n         * @method innerText\n         * @warning 假如节点的type不是'element'，或节点的标签名称不在dtd列表里，直接返回当前节点\n         * @param { String } textStr 传入要设置的文本内容\n         * @return { UE.uNode } 返回节点本身\n         * @example\n         * ```javascript\n         * node.innerText('<span>text</span>');\n         * ```\n         */\n        innerText: function (textStr, noTrans) {\n            if (this.type != \"element\" || dtd.$empty[this.tagName]) {\n                return this;\n            }\n            if (textStr) {\n                if (this.children) {\n                    for (var i = 0, ci; (ci = this.children[i++]);) {\n                        ci.parentNode = null;\n                    }\n                }\n                this.children = [];\n                this.appendChild(uNode.createText(textStr, noTrans));\n                return this;\n            } else {\n                return this.toHtml().replace(/<[^>]+>/g, \"\");\n            }\n        },\n\n        /**\n         * 获取当前对象的data属性\n         * @method getData\n         * @return { Object } 若节点的type值是elemenet，返回空字符串，否则返回节点的data属性\n         * @example\n         * ```javascript\n         * node.getData();\n         * ```\n         */\n        getData: function () {\n            if (this.type == \"element\") return \"\";\n            return this.data;\n        },\n\n        /**\n         * 获取当前节点下的第一个子节点\n         * @method firstChild\n         * @return { UE.uNode } 返回第一个子节点\n         * @example\n         * ```javascript\n         * node.firstChild(); //返回第一个子节点\n         * ```\n         */\n        firstChild: function () {\n            //            if (this.type != 'element' || dtd.$empty[this.tagName]) {\n            //                return this;\n            //            }\n            return this.children ? this.children[0] : null;\n        },\n\n        /**\n         * 获取当前节点下的最后一个子节点\n         * @method lastChild\n         * @return { UE.uNode } 返回最后一个子节点\n         * @example\n         * ```javascript\n         * node.lastChild(); //返回最后一个子节点\n         * ```\n         */\n        lastChild: function () {\n            //            if (this.type != 'element' || dtd.$empty[this.tagName] ) {\n            //                return this;\n            //            }\n            return this.children ? this.children[this.children.length - 1] : null;\n        },\n\n        /**\n         * 获取和当前节点有相同父亲节点的前一个节点\n         * @method previousSibling\n         * @return { UE.uNode } 返回前一个节点\n         * @example\n         * ```javascript\n         * node.children[2].previousSibling(); //返回子节点node.children[1]\n         * ```\n         */\n        previousSibling: function () {\n            var parent = this.parentNode;\n            for (var i = 0, ci; (ci = parent.children[i]); i++) {\n                if (ci === this) {\n                    return i == 0 ? null : parent.children[i - 1];\n                }\n            }\n        },\n\n        /**\n         * 获取和当前节点有相同父亲节点的后一个节点\n         * @method nextSibling\n         * @return { UE.uNode } 返回后一个节点,找不到返回null\n         * @example\n         * ```javascript\n         * node.children[2].nextSibling(); //如果有，返回子节点node.children[3]\n         * ```\n         */\n        nextSibling: function () {\n            var parent = this.parentNode;\n            for (var i = 0, ci; (ci = parent.children[i++]);) {\n                if (ci === this) {\n                    return parent.children[i];\n                }\n            }\n        },\n\n        /**\n         * 用新的节点替换当前节点\n         * @method replaceChild\n         * @param { UE.uNode } target 要替换成该节点参数\n         * @param { UE.uNode } source 要被替换掉的节点\n         * @return { UE.uNode } 返回替换之后的节点对象\n         * @example\n         * ```javascript\n         * node.replaceChild(newNode, childNode); //用newNode替换childNode,childNode是node的子节点\n         * ```\n         */\n        replaceChild: function (target, source) {\n            if (this.children) {\n                if (target.parentNode) {\n                    target.parentNode.removeChild(target);\n                }\n                for (var i = 0, ci; (ci = this.children[i]); i++) {\n                    if (ci === source) {\n                        this.children.splice(i, 1, target);\n                        source.parentNode = null;\n                        target.parentNode = this;\n                        return target;\n                    }\n                }\n            }\n        },\n\n        /**\n         * 在节点的子节点列表最后位置插入一个节点\n         * @method appendChild\n         * @param { UE.uNode } node 要插入的节点\n         * @return { UE.uNode } 返回刚插入的子节点\n         * @example\n         * ```javascript\n         * node.appendChild( newNode ); //在node内插入子节点newNode\n         * ```\n         */\n        appendChild: function (node) {\n            if (\n                this.type == \"root\" ||\n                (this.type == \"element\" && !dtd.$empty[this.tagName])\n            ) {\n                if (!this.children) {\n                    this.children = [];\n                }\n                if (node.parentNode) {\n                    node.parentNode.removeChild(node);\n                }\n                for (var i = 0, ci; (ci = this.children[i]); i++) {\n                    if (ci === node) {\n                        this.children.splice(i, 1);\n                        break;\n                    }\n                }\n                this.children.push(node);\n                node.parentNode = this;\n                return node;\n            }\n        },\n\n        /**\n         * 在传入节点的前面插入一个节点\n         * @method insertBefore\n         * @param { UE.uNode } target 要插入的节点\n         * @param { UE.uNode } source 在该参数节点前面插入\n         * @return { UE.uNode } 返回刚插入的子节点\n         * @example\n         * ```javascript\n         * node.parentNode.insertBefore(newNode, node); //在node节点后面插入newNode\n         * ```\n         */\n        insertBefore: function (target, source) {\n            if (this.children) {\n                if (target.parentNode) {\n                    target.parentNode.removeChild(target);\n                }\n                for (var i = 0, ci; (ci = this.children[i]); i++) {\n                    if (ci === source) {\n                        this.children.splice(i, 0, target);\n                        target.parentNode = this;\n                        return target;\n                    }\n                }\n            }\n        },\n\n        /**\n         * 在传入节点的后面插入一个节点\n         * @method insertAfter\n         * @param { UE.uNode } target 要插入的节点\n         * @param { UE.uNode } source 在该参数节点后面插入\n         * @return { UE.uNode } 返回刚插入的子节点\n         * @example\n         * ```javascript\n         * node.parentNode.insertAfter(newNode, node); //在node节点后面插入newNode\n         * ```\n         */\n        insertAfter: function (target, source) {\n            if (this.children) {\n                if (target.parentNode) {\n                    target.parentNode.removeChild(target);\n                }\n                for (var i = 0, ci; (ci = this.children[i]); i++) {\n                    if (ci === source) {\n                        this.children.splice(i + 1, 0, target);\n                        target.parentNode = this;\n                        return target;\n                    }\n                }\n            }\n        },\n\n        /**\n         * 从当前节点的子节点列表中，移除节点\n         * @method removeChild\n         * @param { UE.uNode } node 要移除的节点引用\n         * @param { Boolean } keepChildren 是否保留移除节点的子节点，若传入true，自动把移除节点的子节点插入到移除的位置\n         * @return { * } 返回刚移除的子节点\n         * @example\n         * ```javascript\n         * node.removeChild(childNode,true); //在node的子节点列表中移除child节点，并且吧child的子节点插入到移除的位置\n         * ```\n         */\n        removeChild: function (node, keepChildren) {\n            if (this.children) {\n                for (var i = 0, ci; (ci = this.children[i]); i++) {\n                    if (ci === node) {\n                        this.children.splice(i, 1);\n                        ci.parentNode = null;\n                        if (keepChildren && ci.children && ci.children.length) {\n                            for (var j = 0, cj; (cj = ci.children[j]); j++) {\n                                this.children.splice(i + j, 0, cj);\n                                cj.parentNode = this;\n                            }\n                        }\n                        return ci;\n                    }\n                }\n            }\n        },\n\n        /**\n         * 获取当前节点所代表的元素属性，即获取attrs对象下的属性值\n         * @method getAttr\n         * @param { String } attrName 要获取的属性名称\n         * @return { * } 返回attrs对象下的属性值\n         * @example\n         * ```javascript\n         * node.getAttr('title');\n         * ```\n         */\n        getAttr: function (attrName) {\n            return this.attrs && this.attrs[attrName.toLowerCase()];\n        },\n\n        /**\n         * 设置当前节点所代表的元素属性，即设置attrs对象下的属性值\n         * @method setAttr\n         * @param { String } attrName 要设置的属性名称\n         * @param { * } attrVal 要设置的属性值，类型视设置的属性而定\n         * @return { * } 返回attrs对象下的属性值\n         * @example\n         * ```javascript\n         * node.setAttr('title','标题');\n         * ```\n         */\n        setAttr: function (attrName, attrVal) {\n            if (!attrName) {\n                delete this.attrs;\n                return;\n            }\n            if (!this.attrs) {\n                this.attrs = {};\n            }\n            if (utils.isObject(attrName)) {\n                for (var a in attrName) {\n                    if (!attrName[a]) {\n                        delete this.attrs[a];\n                    } else {\n                        this.attrs[a.toLowerCase()] = attrName[a];\n                    }\n                }\n            } else {\n                if (!attrVal) {\n                    delete this.attrs[attrName];\n                } else {\n                    this.attrs[attrName.toLowerCase()] = attrVal;\n                }\n            }\n        },\n\n        /**\n         * 获取当前节点在父节点下的位置索引\n         * @method getIndex\n         * @return { Number } 返回索引数值，如果没有父节点，返回-1\n         * @example\n         * ```javascript\n         * node.getIndex();\n         * ```\n         */\n        getIndex: function () {\n            var parent = this.parentNode;\n            for (var i = 0, ci; (ci = parent.children[i]); i++) {\n                if (ci === this) {\n                    return i;\n                }\n            }\n            return -1;\n        },\n\n        /**\n         * 在当前节点下，根据id查找节点\n         * @method getNodeById\n         * @param { String } id 要查找的id\n         * @return { UE.uNode } 返回找到的节点\n         * @example\n         * ```javascript\n         * node.getNodeById('textId');\n         * ```\n         */\n        getNodeById: function (id) {\n            var node;\n            if (this.children && this.children.length) {\n                for (var i = 0, ci; (ci = this.children[i++]);) {\n                    if ((node = getNodeById(ci, id))) {\n                        return node;\n                    }\n                }\n            }\n        },\n\n        /**\n         * 在当前节点下，根据元素名称查找节点列表\n         * @method getNodesByTagName\n         * @param { String } tagNames 要查找的元素名称\n         * @return { Array } 返回找到的节点列表\n         * @example\n         * ```javascript\n         * node.getNodesByTagName('span');\n         * ```\n         */\n        getNodesByTagName: function (tagNames) {\n            tagNames = utils.trim(tagNames).replace(/[ ]{2,}/g, \" \").split(\" \");\n            var arr = [],\n                me = this;\n            utils.each(tagNames, function (tagName) {\n                if (me.children && me.children.length) {\n                    for (var i = 0, ci; (ci = me.children[i++]);) {\n                        getNodesByTagName(ci, tagName, arr);\n                    }\n                }\n            });\n            return arr;\n        },\n\n        /**\n         * 根据样式名称，获取节点的样式值\n         * @method getStyle\n         * @param { String } name 要获取的样式名称\n         * @return { String } 返回样式值\n         * @example\n         * ```javascript\n         * node.getStyle('font-size');\n         * ```\n         */\n        getStyle: function (name) {\n            var cssStyle = this.getAttr(\"style\");\n            if (!cssStyle) {\n                return \"\";\n            }\n            var reg = new RegExp(\"(^|;)\\\\s*\" + name + \":([^;]+)\", \"i\");\n            var match = cssStyle.match(reg);\n            if (match && match[0]) {\n                return match[2];\n            }\n            return \"\";\n        },\n\n        /**\n         * 给节点设置样式\n         * @method setStyle\n         * @param { String } name 要设置的的样式名称\n         * @param { String } val 要设置的的样值\n         * @example\n         * ```javascript\n         * node.setStyle('font-size', '12px');\n         * ```\n         */\n        setStyle: function (name, val) {\n            function exec(name, val) {\n                var reg = new RegExp(\"(^|;)\\\\s*\" + name + \":([^;]+;?)\", \"gi\");\n                cssStyle = cssStyle.replace(reg, \"$1\");\n                if (val) {\n                    cssStyle = name + \":\" + utils.unhtml(val) + \";\" + cssStyle;\n                }\n            }\n\n            var cssStyle = this.getAttr(\"style\");\n            if (!cssStyle) {\n                cssStyle = \"\";\n            }\n            if (utils.isObject(name)) {\n                for (var a in name) {\n                    exec(a, name[a]);\n                }\n            } else {\n                exec(name, val);\n            }\n            this.setAttr(\"style\", utils.trim(cssStyle));\n        },\n\n        /**\n         * 传入一个函数，递归遍历当前节点下的所有节点\n         * @method traversal\n         * @param { Function } fn 遍历到节点的时，传入节点作为参数，运行此函数\n         * @example\n         * ```javascript\n         * traversal(node, function(){\n         *     console.log(node.type);\n         * });\n         * ```\n         */\n        traversal: function (fn) {\n            if (this.children && this.children.length) {\n                nodeTraversal(this, fn);\n            }\n            return this;\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/plugin.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: campaign\n * Date: 10/8/13\n * Time: 6:15 PM\n * To change this template use File | Settings | File Templates.\n */\nUE.plugin = (function () {\n    var _plugins = {};\n    return {\n        register: function (pluginName, fn, oldOptionName, afterDisabled) {\n            if (oldOptionName && utils.isFunction(oldOptionName)) {\n                afterDisabled = oldOptionName;\n                oldOptionName = null;\n            }\n            _plugins[pluginName] = {\n                optionName: oldOptionName || pluginName,\n                execFn: fn,\n                //当插件被禁用时执行\n                afterDisabled: afterDisabled\n            };\n        },\n        load: function (editor) {\n            utils.each(_plugins, function (plugin) {\n                var _export = plugin.execFn.call(editor);\n                if (editor.options[plugin.optionName] !== false) {\n                    if (_export) {\n                        //后边需要再做扩展\n                        utils.each(_export, function (v, k) {\n                            switch (k.toLowerCase()) {\n                                case \"shortcutkey\":\n                                    editor.addshortcutkey(v);\n                                    break;\n                                case \"bindevents\":\n                                    utils.each(v, function (fn, eventName) {\n                                        editor.addListener(eventName, fn);\n                                    });\n                                    break;\n                                case \"bindmultievents\":\n                                    utils.each(utils.isArray(v) ? v : [v], function (event) {\n                                        var types = utils.trim(event.type).split(/\\s+/);\n                                        utils.each(types, function (eventName) {\n                                            editor.addListener(eventName, event.handler);\n                                        });\n                                    });\n                                    break;\n                                case \"commands\":\n                                    utils.each(v, function (execFn, execName) {\n                                        editor.commands[execName] = execFn;\n                                    });\n                                    break;\n                                case \"outputrule\":\n                                    editor.addOutputRule(v);\n                                    break;\n                                case \"inputrule\":\n                                    editor.addInputRule(v);\n                                    break;\n                                case \"defaultoptions\":\n                                    editor.setOpt(v);\n                            }\n                        });\n                    }\n                } else if (plugin.afterDisabled) {\n                    plugin.afterDisabled.call(editor);\n                }\n            });\n            //向下兼容\n            utils.each(UE.plugins, function (plugin) {\n                plugin.call(editor);\n            });\n        },\n        run: function (pluginName, editor) {\n            var plugin = _plugins[pluginName];\n            if (plugin) {\n                plugin.exeFn.call(editor);\n            }\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/core/utils.js",
    "content": "/**\n * 工具函数包\n * @file\n * @module UE.utils\n * @since 1.2.6.1\n */\n\n/**\n * UEditor封装使用的静态工具函数\n * @module UE.utils\n * @unfile\n */\n\nvar utils = (UE.utils = {\n    /**\n     * 用给定的迭代器遍历对象\n     * @method each\n     * @param { Object } obj 需要遍历的对象\n     * @param { Function } iterator 迭代器， 该方法接受两个参数， 第一个参数是当前所处理的value， 第二个参数是当前遍历对象的key\n     * @example\n     * ```javascript\n     * var demoObj = {\n     *     key1: 1,\n     *     key2: 2\n     * };\n     *\n     * //output: key1: 1, key2: 2\n     * UE.utils.each( demoObj, funciton ( value, key ) {\n     *\n     *     console.log( key + \":\" + value );\n     *\n     * } );\n     * ```\n     */\n\n    /**\n     * 用给定的迭代器遍历数组或类数组对象\n     * @method each\n     * @param { Array } array 需要遍历的数组或者类数组\n     * @param { Function } iterator 迭代器， 该方法接受两个参数， 第一个参数是当前所处理的value， 第二个参数是当前遍历对象的key\n     * @example\n     * ```javascript\n     * var divs = document.getElmentByTagNames( \"div\" );\n     *\n     * //output: 0: DIV, 1: DIV ...\n     * UE.utils.each( divs, funciton ( value, key ) {\n     *\n     *     console.log( key + \":\" + value.tagName );\n     *\n     * } );\n     * ```\n     */\n    each: function (obj, iterator, context) {\n        if (obj == null) return;\n        if (obj.length === +obj.length) {\n            for (var i = 0, l = obj.length; i < l; i++) {\n                if (iterator.call(context, obj[i], i, obj) === false) return false;\n            }\n        } else {\n            for (var key in obj) {\n                if (obj.hasOwnProperty(key)) {\n                    if (iterator.call(context, obj[key], key, obj) === false)\n                        return false;\n                }\n            }\n        }\n    },\n\n    /**\n     * 以给定对象作为原型创建一个新对象\n     * @method makeInstance\n     * @param { Object } protoObject 该对象将作为新创建对象的原型\n     * @return { Object } 新的对象， 该对象的原型是给定的protoObject对象\n     * @example\n     * ```javascript\n     *\n     * var protoObject = { sayHello: function () { console.log('Hello UEditor!'); } };\n     *\n     * var newObject = UE.utils.makeInstance( protoObject );\n     * //output: Hello UEditor!\n     * newObject.sayHello();\n     * ```\n     */\n    makeInstance: function (obj) {\n        var noop = new Function();\n        noop.prototype = obj;\n        obj = new noop();\n        noop.prototype = null;\n        return obj;\n    },\n\n    isObject: function (item) {\n        return (item && typeof item === 'object' && !Array.isArray(item));\n    },\n\n    merge: function (target, source) {\n        var output = Object.assign({}, target);\n        if (this.isObject(target) && this.isObject(source)) {\n            Object.keys(source).forEach(key => {\n                if (this.isObject(source[key])) {\n                    if (!(key in target)) {\n                        Object.assign(output, {[key]: source[key]});\n                    } else {\n                        output[key] = this.merge(target[key], source[key]);\n                    }\n                } else {\n                    Object.assign(output, {[key]: source[key]});\n                }\n            });\n        }\n        return output;\n    },\n\n    /**\n     * 将source对象中的属性扩展到target对象上， 根据指定的isKeepTarget值决定是否保留目标对象中与\n     * 源对象属性名相同的属性值。\n     * @method extend\n     * @param { Object } target 目标对象， 新的属性将附加到该对象上\n     * @param { Object } source 源对象， 该对象的属性会被附加到target对象上\n     * @param { Boolean } isKeepTarget 是否保留目标对象中与源对象中属性名相同的属性\n     * @return { Object } 返回target对象\n     * @example\n     * ```javascript\n     *\n     * var target = { name: 'target', sex: 1 },\n     *      source = { name: 'source', age: 17 };\n     *\n     * UE.utils.extend( target, source, true );\n     *\n     * //output: { name: 'target', sex: 1, age: 17 }\n     * console.log( target );\n     *\n     * ```\n     */\n    extend: function (t, s, b) {\n        if (s) {\n            for (var k in s) {\n                if (!b || !t.hasOwnProperty(k)) {\n                    t[k] = s[k];\n                }\n            }\n        }\n        return t;\n    },\n\n    /**\n     * 将给定的多个对象的属性复制到目标对象target上\n     * @method extend2\n     * @remind 该方法将强制把源对象上的属性复制到target对象上\n     * @remind 该方法支持两个及以上的参数， 从第二个参数开始， 其属性都会被复制到第一个参数上。 如果遇到同名的属性，\n     *          将会覆盖掉之前的值。\n     * @param { Object } target 目标对象， 新的属性将附加到该对象上\n     * @param { Object... } source 源对象， 支持多个对象， 该对象的属性会被附加到target对象上\n     * @return { Object } 返回target对象\n     * @example\n     * ```javascript\n     *\n     * var target = {},\n     *     source1 = { name: 'source', age: 17 },\n     *     source2 = { title: 'dev' };\n     *\n     * UE.utils.extend2( target, source1, source2 );\n     *\n     * //output: { name: 'source', age: 17, title: 'dev' }\n     * console.log( target );\n     *\n     * ```\n     */\n    extend2: function (t) {\n        var a = arguments;\n        for (var i = 1; i < a.length; i++) {\n            var x = a[i];\n            for (var k in x) {\n                if (!t.hasOwnProperty(k)) {\n                    t[k] = x[k];\n                }\n            }\n        }\n        return t;\n    },\n\n    /**\n     * 模拟继承机制， 使得subClass继承自superClass\n     * @method inherits\n     * @param { Object } subClass 子类对象\n     * @param { Object } superClass 超类对象\n     * @warning 该方法只能让subClass继承超类的原型， subClass对象自身的属性和方法不会被继承\n     * @return { Object } 继承superClass后的子类对象\n     * @example\n     * ```javascript\n     * function SuperClass(){\n     *     this.name = \"小李\";\n     * }\n     *\n     * SuperClass.prototype = {\n     *     hello:function(str){\n     *         console.log(this.name + str);\n     *     }\n     * }\n     *\n     * function SubClass(){\n     *     this.name = \"小张\";\n     * }\n     *\n     * UE.utils.inherits(SubClass,SuperClass);\n     *\n     * var sub = new SubClass();\n     * //output: '小张早上好!\n     * sub.hello(\"早上好!\");\n     * ```\n     */\n    inherits: function (subClass, superClass) {\n        var oldP = subClass.prototype,\n            newP = utils.makeInstance(superClass.prototype);\n        utils.extend(newP, oldP, true);\n        subClass.prototype = newP;\n        return (newP.constructor = subClass);\n    },\n\n    /**\n     * 用指定的context对象作为函数fn的上下文\n     * @method bind\n     * @param { Function } fn 需要绑定上下文的函数对象\n     * @param { Object } content 函数fn新的上下文对象\n     * @return { Function } 一个新的函数， 该函数作为原始函数fn的代理， 将完成fn的上下文调换工作。\n     * @example\n     * ```javascript\n     *\n     * var name = 'window',\n     *     newTest = null;\n     *\n     * function test () {\n     *     console.log( this.name );\n     * }\n     *\n     * newTest = UE.utils.bind( test, { name: 'object' } );\n     *\n     * //output: object\n     * newTest();\n     *\n     * //output: window\n     * test();\n     *\n     * ```\n     */\n    bind: function (fn, context) {\n        return function () {\n            return fn.apply(context, arguments);\n        };\n    },\n\n    /**\n     * 创建延迟指定时间后执行的函数fn\n     * @method defer\n     * @param { Function } fn 需要延迟执行的函数对象\n     * @param { int } delay 延迟的时间， 单位是毫秒\n     * @warning 该方法的时间控制是不精确的，仅仅只能保证函数的执行是在给定的时间之后，\n     *           而不能保证刚好到达延迟时间时执行。\n     * @return { Function } 目标函数fn的代理函数， 只有执行该函数才能起到延时效果\n     * @example\n     * ```javascript\n     * var start = 0;\n     *\n     * function test(){\n     *     console.log( new Date() - start );\n     * }\n     *\n     * var testDefer = UE.utils.defer( test, 1000 );\n     * //\n     * start = new Date();\n     * //output: (大约在1000毫秒之后输出) 1000\n     * testDefer();\n     * ```\n     */\n\n    /**\n     * 创建延迟指定时间后执行的函数fn, 如果在延迟时间内再次执行该方法， 将会根据指定的exclusion的值，\n     * 决定是否取消前一次函数的执行， 如果exclusion的值为true， 则取消执行，反之，将继续执行前一个方法。\n     * @method defer\n     * @param { Function } fn 需要延迟执行的函数对象\n     * @param { int } delay 延迟的时间， 单位是毫秒\n     * @param { Boolean } exclusion 如果在延迟时间内再次执行该函数，该值将决定是否取消执行前一次函数的执行，\n     *                     值为true表示取消执行， 反之则将在执行前一次函数之后才执行本次函数调用。\n     * @warning 该方法的时间控制是不精确的，仅仅只能保证函数的执行是在给定的时间之后，\n     *           而不能保证刚好到达延迟时间时执行。\n     * @return { Function } 目标函数fn的代理函数， 只有执行该函数才能起到延时效果\n     * @example\n     * ```javascript\n     *\n     * function test(){\n     *     console.log(1);\n     * }\n     *\n     * var testDefer = UE.utils.defer( test, 1000, true );\n     *\n     * //output: (两次调用仅有一次输出) 1\n     * testDefer();\n     * testDefer();\n     * ```\n     */\n    defer: function (fn, delay, exclusion) {\n        var timerID;\n        return function () {\n            if (exclusion) {\n                clearTimeout(timerID);\n            }\n            timerID = setTimeout(fn, delay);\n        };\n    },\n\n    /**\n     * 获取元素item在数组array中首次出现的位置, 如果未找到item， 则返回-1\n     * @method indexOf\n     * @remind 该方法的匹配过程使用的是恒等“===”\n     * @param { Array } array 需要查找的数组对象\n     * @param { * } item 需要在目标数组中查找的值\n     * @return { int } 返回item在目标数组array中首次出现的位置， 如果在数组中未找到item， 则返回-1\n     * @example\n     * ```javascript\n     * var item = 1,\n     *     arr = [ 3, 4, 6, 8, 1, 1, 2 ];\n     *\n     * //output: 4\n     * console.log( UE.utils.indexOf( arr, item ) );\n     * ```\n     */\n\n    /**\n     * 获取元素item数组array中首次出现的位置, 如果未找到item， 则返回-1。通过start的值可以指定搜索的起始位置。\n     * @method indexOf\n     * @remind 该方法的匹配过程使用的是恒等“===”\n     * @param { Array } array 需要查找的数组对象\n     * @param { * } item 需要在目标数组中查找的值\n     * @param { int } start 搜索的起始位置\n     * @return { int } 返回item在目标数组array中的start位置之后首次出现的位置， 如果在数组中未找到item， 则返回-1\n     * @example\n     * ```javascript\n     * var item = 1,\n     *     arr = [ 3, 4, 6, 8, 1, 2, 8, 3, 2, 1, 1, 4 ];\n     *\n     * //output: 9\n     * console.log( UE.utils.indexOf( arr, item, 5 ) );\n     * ```\n     */\n    indexOf: function (array, item, start) {\n        var index = -1;\n        start = this.isNumber(start) ? start : 0;\n        this.each(array, function (v, i) {\n            if (i >= start && v === item) {\n                index = i;\n                return false;\n            }\n        });\n        return index;\n    },\n\n    /**\n     * 移除数组array中所有的元素item\n     * @method removeItem\n     * @param { Array } array 要移除元素的目标数组\n     * @param { * } item 将要被移除的元素\n     * @remind 该方法的匹配过程使用的是恒等“===”\n     * @example\n     * ```javascript\n     * var arr = [ 4, 5, 7, 1, 3, 4, 6 ];\n     *\n     * UE.utils.removeItem( arr, 4 );\n     * //output: [ 5, 7, 1, 3, 6 ]\n     * console.log( arr );\n     *\n     * ```\n     */\n    removeItem: function (array, item) {\n        for (var i = 0, l = array.length; i < l; i++) {\n            if (array[i] === item) {\n                array.splice(i, 1);\n                i--;\n            }\n        }\n    },\n\n    /**\n     * 删除字符串str的首尾空格\n     * @method trim\n     * @param { String } str 需要删除首尾空格的字符串\n     * @return { String } 删除了首尾的空格后的字符串\n     * @example\n     * ```javascript\n     *\n     * var str = \" UEdtior \";\n     *\n     * //output: 9\n     * console.log( str.length );\n     *\n     * //output: 7\n     * console.log( UE.utils.trim( \" UEdtior \" ).length );\n     *\n     * //output: 9\n     * console.log( str.length );\n     *\n     *  ```\n     */\n    trim: function (str) {\n        return str.replace(/(^[ \\t\\n\\r]+)|([ \\t\\n\\r]+$)/g, \"\");\n    },\n\n    /**\n     * 将字符串str以','分隔成数组后，将该数组转换成哈希对象， 其生成的hash对象的key为数组中的元素， value为1\n     * @method listToMap\n     * @warning 该方法在生成的hash对象中，会为每一个key同时生成一个另一个全大写的key。\n     * @param { String } str 该字符串将被以','分割为数组， 然后进行转化\n     * @return { Object } 转化之后的hash对象\n     * @example\n     * ```javascript\n     *\n     * //output: Object {UEdtior: 1, UEDTIOR: 1, Hello: 1, HELLO: 1}\n     * console.log( UE.utils.listToMap( 'UEdtior,Hello' ) );\n     *\n     * ```\n     */\n\n    /**\n     * 将字符串数组转换成哈希对象， 其生成的hash对象的key为数组中的元素， value为1\n     * @method listToMap\n     * @warning 该方法在生成的hash对象中，会为每一个key同时生成一个另一个全大写的key。\n     * @param { Array } arr 字符串数组\n     * @return { Object } 转化之后的hash对象\n     * @example\n     * ```javascript\n     *\n     * //output: Object {UEdtior: 1, UEDTIOR: 1, Hello: 1, HELLO: 1}\n     * console.log( UE.utils.listToMap( [ 'UEdtior', 'Hello' ] ) );\n     *\n     * ```\n     */\n    listToMap: function (list) {\n        if (!list) return {};\n        list = utils.isArray(list) ? list : list.split(\",\");\n        for (var i = 0, ci, obj = {}; (ci = list[i++]);) {\n            obj[ci.toUpperCase()] = obj[ci] = 1;\n        }\n        return obj;\n    },\n\n    /**\n     * 将str中的html符号转义,将转义“'，&，<，\"，>，”，“”七个字符\n     * @method unhtml\n     * @param { String } str 需要转义的字符串\n     * @return { String } 转义后的字符串\n     * @example\n     * ```javascript\n     * var html = '<body>&</body>';\n     *\n     * //output: &lt;body&gt;&amp;&lt;/body&gt;\n     * console.log( UE.utils.unhtml( html ) );\n     *\n     * ```\n     */\n    unhtml: function (str, reg) {\n        return str\n            ? str.replace(\n                reg || /[&<\">'](?:(amp|lt|ldquo|rdquo|quot|gt|#39|nbsp|#\\d+);)?/g,\n                function (a, b) {\n                    if (b) {\n                        return a;\n                    } else {\n                        return {\n                            \"<\": \"&lt;\",\n                            \"&\": \"&amp;\",\n                            '\"': \"&quot;\",\n                            \"“\": \"&ldquo;\",\n                            \"”\": \"&rdquo;\",\n                            \">\": \"&gt;\",\n                            \"'\": \"&#39;\"\n                        }[a];\n                    }\n                }\n            )\n            : \"\";\n    },\n\n    /**\n     * 将str中的转义字符还原成html字符\n     * @see UE.utils.unhtml(String);\n     * @method html\n     * @param { String } str 需要逆转义的字符串\n     * @return { String } 逆转义后的字符串\n     * @example\n     * ```javascript\n     *\n     * var str = '&lt;body&gt;&amp;&lt;/body&gt;';\n     *\n     * //output: <body>&</body>\n     * console.log( UE.utils.html( str ) );\n     *\n     * ```\n     */\n    html: function (str) {\n        return str\n            ? str.replace(/&((g|l|quo|ldquo|rdquo)t|amp|#39|nbsp);/g, function (m) {\n                return {\n                    \"&lt;\": \"<\",\n                    \"&amp;\": \"&\",\n                    \"&quot;\": '\"',\n                    \"&ldquo;\": \"“\",\n                    \"&rdquo;\": \"”\",\n                    \"&gt;\": \">\",\n                    \"&#39;\": \"'\",\n                    \"&nbsp;\": \" \"\n                }[m];\n            })\n            : \"\";\n    },\n\n    /**\n     * 将css样式转换为驼峰的形式\n     * @method cssStyleToDomStyle\n     * @param { String } cssName 需要转换的css样式名\n     * @return { String } 转换成驼峰形式后的css样式名\n     * @example\n     * ```javascript\n     *\n     * var str = 'border-top';\n     *\n     * //output: borderTop\n     * console.log( UE.utils.cssStyleToDomStyle( str ) );\n     *\n     * ```\n     */\n    cssStyleToDomStyle: (function () {\n        var test = document.createElement(\"div\").style,\n            cache = {\n                float: test.cssFloat !== undefined\n                    ? \"cssFloat\"\n                    : test.styleFloat !== undefined ? \"styleFloat\" : \"float\"\n            };\n\n        return function (cssName) {\n            return (\n                cache[cssName] ||\n                (cache[cssName] = cssName.toLowerCase().replace(/-./g, function (match) {\n                    return match.charAt(1).toUpperCase();\n                }))\n            );\n        };\n    })(),\n\n    /**\n     * 动态加载文件到doc中\n     * @method loadFile\n     * @param { DomDocument } document 需要加载资源文件的文档对象\n     * @param { Object } options 加载资源文件的属性集合， 取值请参考代码示例\n     * @example\n     * ```javascript\n     *\n     * UE.utils.loadFile( document, {\n     *     src:\"test.js\",\n     *     tag:\"script\",\n     *     type:\"text/javascript\",\n     *     defer:\"defer\"\n     * } );\n     *\n     * ```\n     */\n\n    /**\n     * 动态加载文件到doc中，加载成功后执行的回调函数fn\n     * @method loadFile\n     * @param { DomDocument } document 需要加载资源文件的文档对象\n     * @param { Object } options 加载资源文件的属性集合， 该集合支持的值是script标签和style标签支持的所有属性。\n     * @param { Function } fn 资源文件加载成功之后执行的回调\n     * @warning 对于在同一个文档中多次加载同一URL的文件， 该方法会在第一次加载之后缓存该请求，\n     *           在此之后的所有同一URL的请求， 将会直接触发回调。\n     * @example\n     * ```javascript\n     *\n     * UE.utils.loadFile( document, {\n     *     src:\"test.js\",\n     *     tag:\"script\",\n     *     type:\"text/javascript\",\n     *     defer:\"defer\"\n     * }, function () {\n     *     console.log('加载成功');\n     * } );\n     *\n     * ```\n     */\n    loadFile: (function () {\n        var tmpList = [];\n\n        function getItem(doc, obj) {\n            try {\n                for (var i = 0, ci; (ci = tmpList[i++]);) {\n                    if (ci.doc === doc && ci.url == (obj.src || obj.href)) {\n                        return ci;\n                    }\n                }\n            } catch (e) {\n                return null;\n            }\n        }\n\n        return function (doc, obj, fn) {\n            var item = getItem(doc, obj);\n            if (item) {\n                if (item.ready) {\n                    fn && fn();\n                } else {\n                    item.funs.push(fn);\n                }\n                return;\n            }\n            tmpList.push({\n                doc: doc,\n                url: obj.src || obj.href,\n                funs: [fn]\n            });\n            if (!doc.body) {\n                var html = [];\n                for (var p in obj) {\n                    if (p == \"tag\") continue;\n                    html.push(p + '=\"' + obj[p] + '\"');\n                }\n                doc.write(\n                    \"<\" + obj.tag + \" \" + html.join(\" \") + \" ></\" + obj.tag + \">\"\n                );\n                return;\n            }\n            if (obj.id && doc.getElementById(obj.id)) {\n                return;\n            }\n            var element = doc.createElement(obj.tag);\n            delete obj.tag;\n            for (var p in obj) {\n                element.setAttribute(p, obj[p]);\n            }\n            element.onload = element.onreadystatechange = function () {\n                if (!this.readyState || /loaded|complete/.test(this.readyState)) {\n                    item = getItem(doc, obj);\n                    if (item.funs.length > 0) {\n                        item.ready = 1;\n                        for (var fi; (fi = item.funs.pop());) {\n                            fi();\n                        }\n                    }\n                    element.onload = element.onreadystatechange = null;\n                }\n            };\n            element.onerror = function () {\n                throw Error(\n                    \"The load \" +\n                    (obj.href || obj.src) +\n                    \" fails,check the url settings of file ueditor.config.js \"\n                );\n            };\n            doc.getElementsByTagName(\"head\")[0].appendChild(element);\n        };\n    })(),\n\n    /**\n     * 判断obj对象是否为空\n     * @method isEmptyObject\n     * @param { * } obj 需要判断的对象\n     * @remind 如果判断的对象是NULL， 将直接返回true， 如果是数组且为空， 返回true， 如果是字符串， 且字符串为空，\n     *          返回true， 如果是普通对象， 且该对象没有任何实例属性， 返回true\n     * @return { Boolean } 对象是否为空\n     * @example\n     * ```javascript\n     *\n     * //output: true\n     * console.log( UE.utils.isEmptyObject( {} ) );\n     *\n     * //output: true\n     * console.log( UE.utils.isEmptyObject( [] ) );\n     *\n     * //output: true\n     * console.log( UE.utils.isEmptyObject( \"\" ) );\n     *\n     * //output: false\n     * console.log( UE.utils.isEmptyObject( { key: 1 } ) );\n     *\n     * //output: false\n     * console.log( UE.utils.isEmptyObject( [1] ) );\n     *\n     * //output: false\n     * console.log( UE.utils.isEmptyObject( \"1\" ) );\n     *\n     * ```\n     */\n    isEmptyObject: function (obj) {\n        if (obj == null) return true;\n        if (this.isArray(obj) || this.isString(obj)) return obj.length === 0;\n        for (var key in obj) if (obj.hasOwnProperty(key)) return false;\n        return true;\n    },\n\n    /**\n     * 把rgb格式的颜色值转换成16进制格式\n     * @method fixColor\n     * @param { String } rgb格式的颜色值\n     * @param { String }\n     * @example\n     * rgb(255,255,255)  => \"#ffffff\"\n     */\n    fixColor: function (name, value) {\n        if (/color/i.test(name) && /rgba?/.test(value)) {\n            var array = value.split(\",\");\n            if (array.length > 3) return \"\";\n            value = \"#\";\n            for (var i = 0, color; (color = array[i++]);) {\n                color = parseInt(color.replace(/[^\\d]/gi, \"\"), 10).toString(16);\n                value += color.length == 1 ? \"0\" + color : color;\n            }\n            value = value.toUpperCase();\n        }\n        return value;\n    },\n    /**\n     * 只针对border,padding,margin做了处理，因为性能问题\n     * @public\n     * @function\n     * @param {String}    val style字符串\n     */\n    optCss: function (val) {\n        var padding, margin, border;\n        val = val.replace(/(padding|margin|border)\\-([^:]+):([^;]+);?/gi, function (\n            str,\n            key,\n            name,\n            val\n        ) {\n            if (val.split(\" \").length == 1) {\n                switch (key) {\n                    case \"padding\":\n                        !padding && (padding = {});\n                        padding[name] = val;\n                        return \"\";\n                    case \"margin\":\n                        !margin && (margin = {});\n                        margin[name] = val;\n                        return \"\";\n                    case \"border\":\n                        return val == \"initial\" ? \"\" : str;\n                }\n            }\n            return str;\n        });\n\n        function opt(obj, name) {\n            if (!obj) {\n                return \"\";\n            }\n            var t = obj.top,\n                b = obj.bottom,\n                l = obj.left,\n                r = obj.right,\n                val = \"\";\n            if (!t || !l || !b || !r) {\n                for (var p in obj) {\n                    val += \";\" + name + \"-\" + p + \":\" + obj[p] + \";\";\n                }\n            } else {\n                val +=\n                    \";\" +\n                    name +\n                    \":\" +\n                    (t == b && b == l && l == r\n                        ? t\n                        : t == b && l == r\n                            ? t + \" \" + l\n                            : l == r\n                                ? t + \" \" + l + \" \" + b\n                                : t + \" \" + r + \" \" + b + \" \" + l) +\n                    \";\";\n            }\n            return val;\n        }\n\n        val += opt(padding, \"padding\") + opt(margin, \"margin\");\n        return val\n            .replace(/^[ \\n\\r\\t;]*|[ \\n\\r\\t]*$/, \"\")\n            .replace(/;([ \\n\\r\\t]+)|\\1;/g, \";\")\n            .replace(/(&((l|g)t|quot|#39))?;{2,}/g, function (a, b) {\n                return b ? b + \";;\" : \";\";\n            });\n    },\n\n    /**\n     * 克隆对象\n     * @method clone\n     * @param { Object } source 源对象\n     * @return { Object } source的一个副本\n     */\n\n    /**\n     * 深度克隆对象，将source的属性克隆到target对象， 会覆盖target重名的属性。\n     * @method clone\n     * @param { Object } source 源对象\n     * @param { Object } target 目标对象\n     * @return { Object } 附加了source对象所有属性的target对象\n     */\n    clone: function (source, target) {\n        var tmp;\n        target = target || {};\n        for (var i in source) {\n            if (source.hasOwnProperty(i)) {\n                tmp = source[i];\n                if (typeof tmp == \"object\") {\n                    target[i] = utils.isArray(tmp) ? [] : {};\n                    utils.clone(source[i], target[i]);\n                } else {\n                    target[i] = tmp;\n                }\n            }\n        }\n        return target;\n    },\n\n    /**\n     * 把cm／pt为单位的值转换为px为单位的值\n     * @method transUnitToPx\n     * @param { String } 待转换的带单位的字符串\n     * @return { String } 转换为px为计量单位的值的字符串\n     * @example\n     * ```javascript\n     *\n     * //output: 500px\n     * console.log( UE.utils.transUnitToPx( '20cm' ) );\n     *\n     * //output: 27px\n     * console.log( UE.utils.transUnitToPx( '20pt' ) );\n     *\n     * ```\n     */\n    transUnitToPx: function (val) {\n        if (!/(pt|cm)/.test(val)) {\n            return val;\n        }\n        var unit;\n        val.replace(/([\\d.]+)(\\w+)/, function (str, v, u) {\n            val = v;\n            unit = u;\n        });\n        switch (unit) {\n            case \"cm\":\n                val = parseFloat(val) * 25;\n                break;\n            case \"pt\":\n                val = Math.round(parseFloat(val) * 96 / 72);\n        }\n        return val + (val ? \"px\" : \"\");\n    },\n\n    /**\n     * 在dom树ready之后执行给定的回调函数\n     * @method domReady\n     * @remind 如果在执行该方法的时候， dom树已经ready， 那么回调函数将立刻执行\n     * @param { Function } fn dom树ready之后的回调函数\n     * @example\n     * ```javascript\n     *\n     * UE.utils.domReady( function () {\n     *\n     *     console.log('123');\n     *\n     * } );\n     *\n     * ```\n     */\n    domReady: (function () {\n        var fnArr = [];\n\n        function doReady(doc) {\n            //确保onready只执行一次\n            doc.isReady = true;\n            for (var ci; (ci = fnArr.pop()); ci()) {\n            }\n        }\n\n        return function (onready, win) {\n            win = win || window;\n            var doc = win.document;\n            onready && fnArr.push(onready);\n            if (doc.readyState === \"complete\") {\n                doReady(doc);\n            } else {\n                doc.isReady && doReady(doc);\n                if (browser.ie && browser.version != 11) {\n                    (function () {\n                        if (doc.isReady) return;\n                        try {\n                            doc.documentElement.doScroll(\"left\");\n                        } catch (error) {\n                            setTimeout(arguments.callee, 0);\n                            return;\n                        }\n                        doReady(doc);\n                    })();\n                    win.attachEvent(\"onload\", function () {\n                        doReady(doc);\n                    });\n                } else {\n                    doc.addEventListener(\n                        \"DOMContentLoaded\",\n                        function () {\n                            doc.removeEventListener(\n                                \"DOMContentLoaded\",\n                                arguments.callee,\n                                false\n                            );\n                            doReady(doc);\n                        },\n                        false\n                    );\n                    win.addEventListener(\n                        \"load\",\n                        function () {\n                            doReady(doc);\n                        },\n                        false\n                    );\n                }\n            }\n        };\n    })(),\n\n    /**\n     * 动态添加css样式\n     * @method cssRule\n     * @param { String } 节点名称\n     * @grammar UE.utils.cssRule('添加的样式的节点名称',['样式'，'放到哪个document上'])\n     * @grammar UE.utils.cssRule('body','body{background:#ccc}') => null  //给body添加背景颜色\n     * @grammar UE.utils.cssRule('body') =>样式的字符串  //取得key值为body的样式的内容,如果没有找到key值先关的样式将返回空，例如刚才那个背景颜色，将返回 body{background:#ccc}\n     * @grammar UE.utils.cssRule('body',document) => 返回指定key的样式，并且指定是哪个document\n     * @grammar UE.utils.cssRule('body','') =>null //清空给定的key值的背景颜色\n     */\n    cssRule: browser.ie && browser.version != 11\n        ? function (key, style, doc) {\n            var indexList, index;\n            if (\n                style === undefined ||\n                (style && style.nodeType && style.nodeType == 9)\n            ) {\n                //获取样式\n                doc = style && style.nodeType && style.nodeType == 9\n                    ? style\n                    : doc || document;\n                indexList = doc.indexList || (doc.indexList = {});\n                index = indexList[key];\n                if (index !== undefined) {\n                    return doc.styleSheets[index].cssText;\n                }\n                return undefined;\n            }\n            doc = doc || document;\n            indexList = doc.indexList || (doc.indexList = {});\n            index = indexList[key];\n            //清除样式\n            if (style === \"\") {\n                if (index !== undefined) {\n                    doc.styleSheets[index].cssText = \"\";\n                    delete indexList[key];\n                    return true;\n                }\n                return false;\n            }\n\n            //添加样式\n            if (index !== undefined) {\n                sheetStyle = doc.styleSheets[index];\n            } else {\n                sheetStyle = doc.createStyleSheet(\n                    \"\",\n                    (index = doc.styleSheets.length)\n                );\n                indexList[key] = index;\n            }\n            sheetStyle.cssText = style;\n        }\n        : function (key, style, doc) {\n            var head, node;\n            if (\n                style === undefined ||\n                (style && style.nodeType && style.nodeType == 9)\n            ) {\n                //获取样式\n                doc = style && style.nodeType && style.nodeType == 9\n                    ? style\n                    : doc || document;\n                node = doc.getElementById(key);\n                return node ? node.innerHTML : undefined;\n            }\n            doc = doc || document;\n            node = doc.getElementById(key);\n\n            //清除样式\n            if (style === \"\") {\n                if (node) {\n                    node.parentNode.removeChild(node);\n                    return true;\n                }\n                return false;\n            }\n\n            //添加样式\n            if (node) {\n                node.innerHTML = style;\n            } else {\n                node = doc.createElement(\"style\");\n                node.id = key;\n                node.innerHTML = style;\n                doc.getElementsByTagName(\"head\")[0].appendChild(node);\n            }\n        },\n    sort: function (array, compareFn) {\n        compareFn =\n            compareFn ||\n            function (item1, item2) {\n                return item1.localeCompare(item2);\n            };\n        for (var i = 0, len = array.length; i < len; i++) {\n            for (var j = i, length = array.length; j < length; j++) {\n                if (compareFn(array[i], array[j]) > 0) {\n                    var t = array[i];\n                    array[i] = array[j];\n                    array[j] = t;\n                }\n            }\n        }\n        return array;\n    },\n    serializeParam: function (json) {\n        var strArr = [];\n        for (var i in json) {\n            //忽略默认的几个参数\n            if (i == \"method\" || i == \"timeout\" || i == \"async\") continue;\n            //传递过来的对象和函数不在提交之列\n            if (\n                !(\n                    (typeof json[i]).toLowerCase() == \"function\" ||\n                    (typeof json[i]).toLowerCase() == \"object\"\n                )\n            ) {\n                strArr.push(encodeURIComponent(i) + \"=\" + encodeURIComponent(json[i]));\n            } else if (utils.isArray(json[i])) {\n                //支持传数组内容\n                for (var j = 0; j < json[i].length; j++) {\n                    strArr.push(\n                        encodeURIComponent(i) + \"[]=\" + encodeURIComponent(json[i][j])\n                    );\n                }\n            }\n        }\n        return strArr.join(\"&\");\n    },\n    formatUrl: function (url) {\n        var u = url.replace(/&&/g, \"&\");\n        u = u.replace(/\\?&/g, \"?\");\n        u = u.replace(/&$/g, \"\");\n        u = u.replace(/&#/g, \"#\");\n        u = u.replace(/&+/g, \"&\");\n        return u;\n    },\n    addStyleContent: function (cssContent) {\n        var style = document.createElement(\"style\");\n        style.innerHTML = cssContent;\n        document.head.appendChild(style);\n    },\n    isCrossDomainUrl: function (url) {\n        var a = document.createElement(\"a\");\n        a.href = url;\n        if (browser.ie) {\n            a.href = a.href;\n        }\n        return !(\n            a.protocol == location.protocol &&\n            a.hostname == location.hostname &&\n            (a.port == location.port ||\n                (a.port == \"80\" && location.port == \"\") ||\n                (a.port == \"\" && location.port == \"80\"))\n        );\n    },\n    clearEmptyAttrs: function (obj) {\n        for (var p in obj) {\n            if (obj[p] === \"\") {\n                delete obj[p];\n            }\n        }\n        return obj;\n    },\n    str2json: function (s) {\n        if (!utils.isString(s)) return null;\n        if (window.JSON) {\n            return JSON.parse(s);\n        } else {\n            return new Function(\"return \" + utils.trim(s || \"\"))();\n        }\n    },\n    base64toBlob: function (base64Data, contentType) {\n        contentType = contentType || \"\";\n        var sliceSize = 1024;\n        var byteCharacters = atob(base64Data);\n        var bytesLength = byteCharacters.length;\n        var slicesCount = Math.ceil(bytesLength / sliceSize);\n        var byteArrays = new Array(slicesCount);\n        for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {\n            var begin = sliceIndex * sliceSize;\n            var end = Math.min(begin + sliceSize, bytesLength);\n            var bytes = new Array(end - begin);\n            for (var offset = begin, i = 0; offset < end; ++i, ++offset) {\n                bytes[i] = byteCharacters[offset].charCodeAt(0);\n            }\n            byteArrays[sliceIndex] = new Uint8Array(bytes);\n        }\n        return new Blob(byteArrays, { type: contentType });\n    },\n    json2str: (function () {\n        if (window.JSON) {\n            return JSON.stringify;\n        } else {\n            var escapeMap = {\n                \"\\b\": \"\\\\b\",\n                \"\\t\": \"\\\\t\",\n                \"\\n\": \"\\\\n\",\n                \"\\f\": \"\\\\f\",\n                \"\\r\": \"\\\\r\",\n                '\"': '\\\\\"',\n                \"\\\\\": \"\\\\\\\\\"\n            };\n\n            function encodeString(source) {\n                if (/[\"\\\\\\x00-\\x1f]/.test(source)) {\n                    source = source.replace(/[\"\\\\\\x00-\\x1f]/g, function (match) {\n                        var c = escapeMap[match];\n                        if (c) {\n                            return c;\n                        }\n                        c = match.charCodeAt();\n                        return (\n                            \"\\\\u00\" + Math.floor(c / 16).toString(16) + (c % 16).toString(16)\n                        );\n                    });\n                }\n                return '\"' + source + '\"';\n            }\n\n            function encodeArray(source) {\n                var result = [\"[\"],\n                    l = source.length,\n                    preComma,\n                    i,\n                    item;\n\n                for (i = 0; i < l; i++) {\n                    item = source[i];\n\n                    switch (typeof item) {\n                        case \"undefined\":\n                        case \"function\":\n                        case \"unknown\":\n                            break;\n                        default:\n                            if (preComma) {\n                                result.push(\",\");\n                            }\n                            result.push(utils.json2str(item));\n                            preComma = 1;\n                    }\n                }\n                result.push(\"]\");\n                return result.join(\"\");\n            }\n\n            function pad(source) {\n                return source < 10 ? \"0\" + source : source;\n            }\n\n            function encodeDate(source) {\n                return (\n                    '\"' +\n                    source.getFullYear() +\n                    \"-\" +\n                    pad(source.getMonth() + 1) +\n                    \"-\" +\n                    pad(source.getDate()) +\n                    \"T\" +\n                    pad(source.getHours()) +\n                    \":\" +\n                    pad(source.getMinutes()) +\n                    \":\" +\n                    pad(source.getSeconds()) +\n                    '\"'\n                );\n            }\n\n            return function (value) {\n                switch (typeof value) {\n                    case \"undefined\":\n                        return \"undefined\";\n\n                    case \"number\":\n                        return isFinite(value) ? String(value) : \"null\";\n\n                    case \"string\":\n                        return encodeString(value);\n\n                    case \"boolean\":\n                        return String(value);\n\n                    default:\n                        if (value === null) {\n                            return \"null\";\n                        } else if (utils.isArray(value)) {\n                            return encodeArray(value);\n                        } else if (utils.isDate(value)) {\n                            return encodeDate(value);\n                        } else {\n                            var result = [\"{\"],\n                                encode = utils.json2str,\n                                preComma,\n                                item;\n\n                            for (var key in value) {\n                                if (Object.prototype.hasOwnProperty.call(value, key)) {\n                                    item = value[key];\n                                    switch (typeof item) {\n                                        case \"undefined\":\n                                        case \"unknown\":\n                                        case \"function\":\n                                            break;\n                                        default:\n                                            if (preComma) {\n                                                result.push(\",\");\n                                            }\n                                            preComma = 1;\n                                            result.push(encode(key) + \":\" + encode(item));\n                                    }\n                                }\n                            }\n                            result.push(\"}\");\n                            return result.join(\"\");\n                        }\n                }\n            };\n        }\n    })()\n});\n/**\n * 判断给定的对象是否是字符串\n * @method isString\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是字符串\n */\n\n/**\n * 判断给定的对象是否是数组\n * @method isArray\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是数组\n */\n\n/**\n * 判断给定的对象是否是一个Function\n * @method isFunction\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是Function\n */\n\n/**\n * 判断给定的对象是否是Number\n * @method isNumber\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是Number\n */\n\n/**\n * 判断给定的对象是否是一个正则表达式\n * @method isRegExp\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是正则表达式\n */\n\n/**\n * 判断给定的对象是否是一个普通对象\n * @method isObject\n * @param { * } object 需要判断的对象\n * @return { Boolean } 给定的对象是否是普通对象\n */\nutils.each(\n    [\"String\", \"Function\", \"Array\", \"Number\", \"RegExp\", \"Object\", \"Date\"],\n    function (v) {\n        UE.utils[\"is\" + v] = function (obj) {\n            return Object.prototype.toString.apply(obj) == \"[object \" + v + \"]\";\n        };\n    }\n);\n"
  },
  {
    "path": "_src/editor.js",
    "content": "UEDITOR_CONFIG = window.UEDITOR_CONFIG || {};\n\nvar baidu = window.baidu || {};\n\nwindow.baidu = baidu;\n\nwindow.UE = baidu.editor = {\n    plugins: {},\n    commands: {},\n    instants: {},\n    I18N: {},\n    _customizeUI: {},\n    version: \"4.5.0\",\n    plus: {\n        fileExt: function (filename) {\n            if (!filename) {\n                return '';\n            }\n            var pcs = filename.split('.');\n            if (pcs.length > 1) {\n                return pcs.pop().toLowerCase();\n            }\n            return '';\n        },\n    },\n    constants: {\n        STATEFUL: {\n            DISABLED: -1,\n            OFF: 0,\n            ON: 1,\n        },\n    }\n};\nvar dom = (UE.dom = {});\n"
  },
  {
    "path": "_src/plugins/anchor.js",
    "content": "/**\n * 锚点插件，为UEditor提供插入锚点支持\n * @file\n * @since 1.2.6.1\n */\nUE.plugin.register(\"anchor\", function () {\n    return {\n        bindEvents: {\n            ready: function () {\n                utils.cssRule(\n                    \"anchor\",\n                    \".anchorclass{background: url('\" +\n                    this.options.themePath +\n                    this.options.theme +\n                    \"/images/anchor.gif') no-repeat scroll left center transparent;cursor: auto;display: inline-block;height: 16px;width: 15px;}\",\n                    this.document\n                );\n            }\n        },\n        outputRule: function (root) {\n            utils.each(root.getNodesByTagName(\"img\"), function (a) {\n                var val;\n                if ((val = a.getAttr(\"anchorname\"))) {\n                    a.tagName = \"a\";\n                    a.setAttr({\n                        anchorname: \"\",\n                        name: val,\n                        class: \"\"\n                    });\n                }\n            });\n        },\n        inputRule: function (root) {\n            utils.each(root.getNodesByTagName(\"a\"), function (a) {\n                var val;\n                if ((val = a.getAttr(\"name\")) && !a.getAttr(\"href\")) {\n                    //过滤掉word冗余标签\n                    //_Toc\\d+有可能勿命中\n                    if (/^\\_Toc\\d+$/.test(val)) {\n                        a.parentNode.removeChild(a);\n                        return;\n                    }\n                    a.tagName = \"img\";\n                    a.setAttr({\n                        anchorname: a.getAttr(\"name\"),\n                        class: \"anchorclass\"\n                    });\n                    a.setAttr(\"name\");\n                }\n            });\n        },\n        commands: {\n            /**\n             * 插入锚点\n             * @command anchor\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @param { String } name 锚点名称字符串\n             * @example\n             * ```javascript\n             * //editor 是编辑器实例\n             * editor.execCommand('anchor', 'anchor1');\n             * ```\n             */\n            anchor: {\n                execCommand: function (cmd, name) {\n                    var range = this.selection.getRange(),\n                        img = range.getClosedNode();\n                    if (img && img.getAttribute(\"anchorname\")) {\n                        if (name) {\n                            img.setAttribute(\"anchorname\", name);\n                        } else {\n                            range.setStartBefore(img).setCursor();\n                            domUtils.remove(img);\n                        }\n                    } else {\n                        if (name) {\n                            //只在选区的开始插入\n                            var anchor = this.document.createElement(\"img\");\n                            range.collapse(true);\n                            domUtils.setAttributes(anchor, {\n                                anchorname: name,\n                                class: \"anchorclass\"\n                            });\n                            range\n                                .insertNode(anchor)\n                                .setStartAfter(anchor)\n                                .setCursor(false, true);\n                        }\n                    }\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/audio.js",
    "content": "UE.plugins[\"audio\"] = function () {\n    var me = this;\n\n    function createAudioHtml(url, param) {\n        param = param || {};\n        var str = [\n            \"<audio\",\n            (param.id ? ' id=\"' + param.id + '\"' : \"\"),\n            (param.cls ? ' class=\"' + param.cls + '\"' : ''),\n            ' controls >',\n            '<source src=\"' + url + '\" type=\"audio/mpeg' + '\" />',\n            '</audio>',\n        ];\n        return str.join('');\n    }\n\n    function switchImgAndAudio(root, img2audio) {\n        // utils.each(\n        //     root.getNodesByTagName(img2audio ? \"img\" : \"embed audio\"),\n        //     function (node) {\n        //         var className = node.getAttr(\"class\");\n        //         if (className && className.indexOf(\"edui-faked-audio\") != -1) {\n        //             var html = createAudioHtml(\n        //                 img2audio ? node.getAttr(\"_url\") : node.getAttr(\"src\"),\n        //                 node.getAttr(\"width\"),\n        //                 node.getAttr(\"height\"),\n        //                 null,\n        //                 node.getStyle(\"float\") || \"\",\n        //                 className,\n        //                 img2audio ? \"embed\" : \"image\"\n        //             );\n        //             node.parentNode.replaceChild(UE.uNode.createElement(html), node);\n        //         }\n        //         if (className && className.indexOf(\"edui-upload-audio\") != -1) {\n        //             var html = createAudioHtml(\n        //                 img2audio ? node.getAttr(\"_url\") : node.getAttr(\"src\"),\n        //                 node.getAttr(\"width\"),\n        //                 node.getAttr(\"height\"),\n        //                 null,\n        //                 node.getStyle(\"float\") || \"\",\n        //                 className,\n        //                 img2audio ? \"audio\" : \"image\"\n        //             );\n        //             node.parentNode.replaceChild(UE.uNode.createElement(html), node);\n        //         }\n        //     }\n        // );\n    }\n\n    me.addOutputRule(function (root) {\n        switchImgAndAudio(root, true);\n    });\n    me.addInputRule(function (root) {\n        switchImgAndAudio(root);\n    });\n\n    me.commands[\"insertaudio\"] = {\n        execCommand: function (cmd, audioObjs, type) {\n            audioObjs = utils.isArray(audioObjs) ? audioObjs : [audioObjs];\n\n            if (me.fireEvent(\"beforeinsertaudio\", audioObjs) === true) {\n                return;\n            }\n\n            var html = [];\n            for (var i = 0, vi, len = audioObjs.length; i < len; i++) {\n                vi = audioObjs[i];\n                html.push(\n                    createAudioHtml(\n                        vi.url,\n                        {\n                            cls: 'edui-audio-audio'\n                        }\n                    )\n                );\n            }\n            me.execCommand(\"inserthtml\", html.join(\"\"), true);\n            var rng = this.selection.getRange();\n            // for (var i = 0, len = audioObjs.length; i < len; i++) {\n            //   var img = this.document.getElementById(\"tmpAudio\" + i);\n            //   domUtils.removeAttributes(img, \"id\");\n            //   rng.selectNode(img).select();\n            //   me.execCommand(\"imagefloat\", audioObjs[i].align);\n            // }\n\n            me.fireEvent(\"afterinsertaudio\", audioObjs);\n        },\n        queryCommandState: function () {\n            var img = me.selection.getRange().getClosedNode(),\n                flag = img &&\n                    (img.className == \"edui-audio-audio\" || img.className.indexOf(\"edui-audio-audio\") != -1);\n            return flag ? 1 : 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/autofloat.js",
    "content": "///import core\n///commands 悬浮工具栏\n///commandsName  AutoFloat,autoFloatEnabled\n///commandsTitle  悬浮工具栏\n/**\n *  modified by chengchao01\n *  注意： 引入此功能后，在IE6下会将body的背景图片覆盖掉！\n */\nUE.plugins[\"autofloat\"] = function () {\n    var me = this,\n        lang = me.getLang();\n    me.setOpt({\n        topOffset: 0\n    });\n    var optsAutoFloatEnabled = me.options.autoFloatEnabled !== false,\n        topOffset = me.options.topOffset;\n\n    //如果不固定toolbar的位置，则直接退出\n    if (!optsAutoFloatEnabled) {\n        return;\n    }\n    var uiUtils = UE.ui.uiUtils,\n        LteIE6 = browser.ie && browser.version <= 6,\n        quirks = browser.quirks;\n\n    function checkHasUI() {\n        if (!UE.ui) {\n            alert(lang.autofloatMsg);\n            return 0;\n        }\n        return 1;\n    }\n\n    function fixIE6FixedPos() {\n        var docStyle = document.body.style;\n        docStyle.backgroundImage = 'url(\"about:blank\")';\n        docStyle.backgroundAttachment = \"fixed\";\n    }\n\n    var bakCssText,\n        placeHolder = document.createElement(\"div\"),\n        toolbarBox,\n        orgTop,\n        getPosition,\n        flag = true; //ie7模式下需要偏移\n    function setFloating() {\n        placeHolder.style.height = toolbarBox.offsetHeight + \"px\";\n        var toobarBoxPos = domUtils.getXY(toolbarBox),\n            origalFloat = domUtils.getComputedStyle(toolbarBox, \"position\"),\n            origalLeft = domUtils.getComputedStyle(toolbarBox, \"left\");\n        toolbarBox.style.width = toolbarBox.offsetWidth + \"px\";\n        toolbarBox.style.zIndex = me.options.zIndex * 1 + 1;\n        toolbarBox.parentNode.insertBefore(placeHolder, toolbarBox);\n        if (LteIE6 || (quirks && browser.ie)) {\n            if (toolbarBox.style.position != \"absolute\") {\n                toolbarBox.style.position = \"absolute\";\n            }\n            toolbarBox.style.top =\n                (document.body.scrollTop || document.documentElement.scrollTop) -\n                orgTop +\n                topOffset +\n                \"px\";\n        } else {\n            if (browser.ie7Compat && flag) {\n                flag = false;\n                toolbarBox.style.left =\n                    domUtils.getXY(toolbarBox).x -\n                    document.documentElement.getBoundingClientRect().left +\n                    2 +\n                    \"px\";\n            }\n            if (toolbarBox.style.position != \"fixed\") {\n                toolbarBox.style.position = \"fixed\";\n                toolbarBox.style.top = topOffset + \"px\";\n                (origalFloat == \"absolute\" || origalFloat == \"relative\") &&\n                parseFloat(origalLeft) &&\n                (toolbarBox.style.left = toobarBoxPos.x + \"px\");\n            }\n        }\n    }\n\n    function unsetFloating() {\n        flag = true;\n        if (placeHolder.parentNode) {\n            placeHolder.parentNode.removeChild(placeHolder);\n        }\n\n        toolbarBox.style.cssText = bakCssText;\n    }\n\n    me.unsetFloating = unsetFloating;\n\n    function updateFloating() {\n        var rect3 = getPosition(me.container);\n        var offset = me.options.toolbarTopOffset || 0;\n        if (rect3.top < 0 && rect3.bottom - toolbarBox.offsetHeight > offset) {\n            setFloating();\n        } else {\n            unsetFloating();\n        }\n    }\n\n    var defer_updateFloating = utils.defer(\n        function () {\n            updateFloating();\n        },\n        browser.ie ? 200 : 100,\n        true\n    );\n\n    me.addListener(\"destroy\", function () {\n        domUtils.un(window, [\"scroll\", \"resize\"], updateFloating);\n        me.removeListener(\"keydown\", defer_updateFloating);\n    });\n\n    me.addListener(\"ready\", function () {\n        if (checkHasUI(me)) {\n            //加载了ui组件，但在new时，没有加载ui，导致编辑器实例上没有ui类，所以这里做判断\n            if (!me.ui) {\n                return;\n            }\n            getPosition = uiUtils.getClientRect;\n            toolbarBox = me.ui.getDom(\"toolbarbox\");\n            orgTop = getPosition(toolbarBox).top;\n            bakCssText = toolbarBox.style.cssText;\n            placeHolder.style.height = toolbarBox.offsetHeight + \"px\";\n            if (LteIE6) {\n                fixIE6FixedPos();\n            }\n            domUtils.on(window, [\"scroll\", \"resize\"], updateFloating);\n            me.addListener(\"keydown\", defer_updateFloating);\n\n            me.addListener(\"beforefullscreenchange\", function (t, enabled) {\n                if (enabled) {\n                    unsetFloating();\n                }\n            });\n            me.addListener(\"fullscreenchanged\", function (t, enabled) {\n                if (!enabled) {\n                    updateFloating();\n                }\n            });\n            me.addListener(\"sourcemodechanged\", function (t, enabled) {\n                setTimeout(function () {\n                    updateFloating();\n                }, 0);\n            });\n            me.addListener(\"clearDoc\", function () {\n                setTimeout(function () {\n                    updateFloating();\n                }, 0);\n            });\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/autoheight.js",
    "content": "///import core\n///commands 当输入内容超过编辑器高度时，编辑器自动增高\n///commandsName  AutoHeight,autoHeightEnabled\n///commandsTitle  自动增高\n/**\n * @description 自动伸展\n * @author zhanyi\n */\nUE.plugins[\"autoheight\"] = function () {\n    var me = this;\n    //提供开关，就算加载也可以关闭\n    me.autoHeightEnabled = me.options.autoHeightEnabled !== false;\n    if (!me.autoHeightEnabled) {\n        return;\n    }\n\n    var bakOverflow,\n        lastHeight = 0,\n        options = me.options,\n        currentHeight,\n        timer;\n\n    function adjustHeight() {\n        var me = this;\n        clearTimeout(timer);\n        if (isFullscreen) return;\n        if (\n            !me.queryCommandState ||\n            (me.queryCommandState && me.queryCommandState(\"source\") != 1)\n        ) {\n            timer = setTimeout(function () {\n                var node = me.body.lastChild;\n                while (node && node.nodeType != 1) {\n                    node = node.previousSibling;\n                }\n                if (node && node.nodeType == 1) {\n                    node.style.clear = \"both\";\n                    currentHeight = Math.max(\n                        domUtils.getXY(node).y + node.offsetHeight + 25,\n                        Math.max(options.minFrameHeight, options.initialFrameHeight)\n                    );\n                    if (currentHeight !== lastHeight) {\n                        me.iframe.parentNode.style.transition = 'width 0.3s, height 0.3s, easy-in-out';\n                        if (currentHeight !== parseInt(me.iframe.parentNode.style.height)) {\n                            me.iframe.parentNode.style.height = currentHeight + \"px\";\n                        }\n                        me.body.style.height = currentHeight + \"px\";\n                        lastHeight = currentHeight;\n                    }\n                    domUtils.removeStyle(node, \"clear\");\n                }\n            }, 50);\n        }\n    }\n\n    var isFullscreen;\n    me.addListener(\"fullscreenchanged\", function (cmd, f) {\n        isFullscreen = f;\n    });\n    me.addListener(\"destroy\", function () {\n        domUtils.un(me.window, \"scroll\", fixedScrollTop);\n        me.removeListener(\n            \"contentchange afterinserthtml keyup mouseup\",\n            adjustHeight\n        );\n    });\n    me.enableAutoHeight = function () {\n        var me = this;\n        if (!me.autoHeightEnabled) {\n            return;\n        }\n        var doc = me.document;\n        me.autoHeightEnabled = true;\n        bakOverflow = doc.body.style.overflowY;\n        doc.body.style.overflowY = \"hidden\";\n        me.addListener(\"contentchange afterinserthtml keyup mouseup\", adjustHeight);\n        //ff不给事件算得不对\n\n        setTimeout(function () {\n            adjustHeight.call(me);\n        }, browser.gecko ? 100 : 0);\n        me.fireEvent(\"autoheightchanged\", me.autoHeightEnabled);\n    };\n    me.disableAutoHeight = function () {\n        me.body.style.overflowY = bakOverflow || \"\";\n\n        me.removeListener(\"contentchange\", adjustHeight);\n        me.removeListener(\"keyup\", adjustHeight);\n        me.removeListener(\"mouseup\", adjustHeight);\n        me.autoHeightEnabled = false;\n        me.fireEvent(\"autoheightchanged\", me.autoHeightEnabled);\n    };\n\n    me.on(\"setHeight\", function () {\n        me.disableAutoHeight();\n    });\n    me.addListener(\"ready\", function () {\n        me.enableAutoHeight();\n        //trace:1764\n        var timer;\n        domUtils.on(\n            browser.ie ? me.body : me.document,\n            browser.webkit ? \"dragover\" : \"drop\",\n            function () {\n                clearTimeout(timer);\n                timer = setTimeout(function () {\n                    //trace:3681\n                    adjustHeight.call(me);\n                }, 100);\n            }\n        );\n        //修复内容过多时，回到顶部，顶部内容被工具栏遮挡问题\n        domUtils.on(me.window, \"scroll\", fixedScrollTop);\n    });\n\n    var lastScrollY;\n\n    function fixedScrollTop() {\n        if (!me.window) return;\n        if (lastScrollY === null) {\n            lastScrollY = me.window.scrollY;\n        } else if (me.window.scrollY == 0 && lastScrollY != 0) {\n            me.window.scrollTo(0, 0);\n            lastScrollY = null;\n        }\n    }\n};\n"
  },
  {
    "path": "_src/plugins/autolink.js",
    "content": "///import core\n///commands 为非ie浏览器自动添加a标签\n///commandsName  AutoLink\n///commandsTitle  自动增加链接\n/**\n * @description 为非ie浏览器自动添加a标签\n * @author zhanyi\n */\n\nUE.plugin.register(\n    \"autolink\",\n    function () {\n        var cont = 0;\n\n        return !browser.ie\n            ? {\n                bindEvents: {\n                    reset: function () {\n                        cont = 0;\n                    },\n                    keydown: function (type, evt) {\n                        var me = this;\n                        var keyCode = evt.keyCode || evt.which;\n\n                        if (keyCode == 32 || keyCode == 13) {\n                            var sel = me.selection.getNative(),\n                                range = sel.getRangeAt(0).cloneRange(),\n                                offset,\n                                charCode;\n\n                            var start = range.startContainer;\n                            while (start.nodeType == 1 && range.startOffset > 0) {\n                                start =\n                                    range.startContainer.childNodes[range.startOffset - 1];\n                                if (!start) {\n                                    break;\n                                }\n                                range.setStart(\n                                    start,\n                                    start.nodeType == 1\n                                        ? start.childNodes.length\n                                        : start.nodeValue.length\n                                );\n                                range.collapse(true);\n                                start = range.startContainer;\n                            }\n\n                            do {\n                                if (range.startOffset == 0) {\n                                    start = range.startContainer.previousSibling;\n\n                                    while (start && start.nodeType == 1) {\n                                        start = start.lastChild;\n                                    }\n                                    if (!start || domUtils.isFillChar(start)) {\n                                        break;\n                                    }\n                                    offset = start.nodeValue.length;\n                                } else {\n                                    start = range.startContainer;\n                                    offset = range.startOffset;\n                                }\n                                range.setStart(start, offset - 1);\n                                charCode = range.toString().charCodeAt(0);\n                            } while (charCode != 160 && charCode != 32);\n\n                            if (\n                                range\n                                    .toString()\n                                    .replace(new RegExp(domUtils.fillChar, \"g\"), \"\")\n                                    .match(/(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i)\n                            ) {\n                                while (range.toString().length) {\n                                    if (\n                                        /^(?:https?:\\/\\/|ssh:\\/\\/|ftp:\\/\\/|file:\\/|www\\.)/i.test(\n                                            range.toString()\n                                        )\n                                    ) {\n                                        break;\n                                    }\n                                    try {\n                                        range.setStart(\n                                            range.startContainer,\n                                            range.startOffset + 1\n                                        );\n                                    } catch (e) {\n                                        //trace:2121\n                                        var start = range.startContainer;\n                                        while (!(next = start.nextSibling)) {\n                                            if (domUtils.isBody(start)) {\n                                                return;\n                                            }\n                                            start = start.parentNode;\n                                        }\n                                        range.setStart(next, 0);\n                                    }\n                                }\n                                //range的开始边界已经在a标签里的不再处理\n                                if (\n                                    domUtils.findParentByTagName(\n                                        range.startContainer,\n                                        \"a\",\n                                        true\n                                    )\n                                ) {\n                                    return;\n                                }\n                                var a = me.document.createElement(\"a\"),\n                                    text = me.document.createTextNode(\" \"),\n                                    href;\n\n                                me.undoManger && me.undoManger.save();\n                                a.appendChild(range.extractContents());\n                                a.href = a.innerHTML = a.innerHTML.replace(/<[^>]+>/g, \"\");\n                                href = a\n                                    .getAttribute(\"href\")\n                                    .replace(new RegExp(domUtils.fillChar, \"g\"), \"\");\n                                href = /^(?:https?:\\/\\/)/gi.test(href)\n                                    ? href\n                                    : \"http://\" + href;\n                                a.setAttribute(\"_src\", utils.html(href));\n                                a.href = utils.html(href);\n\n                                range.insertNode(a);\n                                a.parentNode.insertBefore(text, a.nextSibling);\n                                range.setStart(text, 0);\n                                range.collapse(true);\n                                sel.removeAllRanges();\n                                sel.addRange(range);\n                                me.undoManger && me.undoManger.save();\n                            }\n                        }\n                    }\n                }\n            }\n            : {};\n    },\n    function () {\n        var keyCodes = {\n            37: 1,\n            38: 1,\n            39: 1,\n            40: 1,\n            13: 1,\n            32: 1\n        };\n\n        function checkIsCludeLink(node) {\n            if (node.nodeType == 3) {\n                return null;\n            }\n            if (node.nodeName == \"A\") {\n                return node;\n            }\n            var lastChild = node.lastChild;\n\n            while (lastChild) {\n                if (lastChild.nodeName == \"A\") {\n                    return lastChild;\n                }\n                if (lastChild.nodeType == 3) {\n                    if (domUtils.isWhitespace(lastChild)) {\n                        lastChild = lastChild.previousSibling;\n                        continue;\n                    }\n                    return null;\n                }\n                lastChild = lastChild.lastChild;\n            }\n        }\n\n        browser.ie &&\n        this.addListener(\"keyup\", function (cmd, evt) {\n            var me = this,\n                keyCode = evt.keyCode;\n            if (keyCodes[keyCode]) {\n                var rng = me.selection.getRange();\n                var start = rng.startContainer;\n\n                if (keyCode == 13) {\n                    while (\n                        start &&\n                        !domUtils.isBody(start) &&\n                        !domUtils.isBlockElm(start)\n                        ) {\n                        start = start.parentNode;\n                    }\n                    if (start && !domUtils.isBody(start) && start.nodeName == \"P\") {\n                        var pre = start.previousSibling;\n                        if (pre && pre.nodeType == 1) {\n                            var pre = checkIsCludeLink(pre);\n                            if (pre && !pre.getAttribute(\"_href\")) {\n                                domUtils.remove(pre, true);\n                            }\n                        }\n                    }\n                } else if (keyCode == 32) {\n                    if (start.nodeType == 3 && /^\\s$/.test(start.nodeValue)) {\n                        start = start.previousSibling;\n                        if (\n                            start &&\n                            start.nodeName == \"A\" &&\n                            !start.getAttribute(\"_href\")\n                        ) {\n                            domUtils.remove(start, true);\n                        }\n                    }\n                } else {\n                    start = domUtils.findParentByTagName(start, \"a\", true);\n                    if (start && !start.getAttribute(\"_href\")) {\n                        var bk = rng.createBookmark();\n\n                        domUtils.remove(start, true);\n                        rng.moveToBookmark(bk).select(true);\n                    }\n                }\n            }\n        });\n    }\n);\n"
  },
  {
    "path": "_src/plugins/autosave.js",
    "content": "UE.plugin.register(\"autosave\", function () {\n    var me = this, saveKey = null;\n\n    function save(editor) {\n        var saveData;\n\n        if (!editor.hasContents()) {\n            //这里不能调用命令来删除， 会造成事件死循环\n            saveKey && me.removePreferences(saveKey);\n            return;\n        }\n\n        editor._autoSaveTimer = null;\n\n        saveData = me.body.innerHTML;\n\n        if (\n            editor.fireEvent(\"beforeautosave\", {\n                content: saveData\n            }) === false\n        ) {\n            return;\n        }\n\n        // console.log('autosave', saveKey, saveData);\n        me.setPreferences(saveKey, saveData);\n\n        editor.fireEvent(\"afterautosave\", {\n            content: saveData\n        });\n    }\n\n    return {\n        defaultOptions: {\n            autoSaveEnable: true,\n            autoSaveRestore: false,\n            autoSaveKey: null,\n        },\n        bindEvents: {\n            ready: function () {\n                saveKey = me.getOpt('autoSaveKey');\n                if (!saveKey) {\n                    var _suffix = \"_DraftsData\", key = null;\n\n                    if (me.key) {\n                        key = me.key + _suffix;\n                    } else {\n                        key = (me.container.parentNode.id || \"ue-common\") + _suffix;\n                    }\n                    saveKey = (location.protocol + location.host + location.pathname).replace(\n                        /[.:\\/]/g,\n                        \"_\"\n                    ) + key;\n                }\n                if (me.getOpt('autoSaveRestore')) {\n                    var data = me.getPreferences(saveKey);\n                    // console.log('saveKey', saveKey, data);\n                    if (data) {\n                        me.body.innerHTML = data;\n                        me.fireEvent('showmessage', {\n                            type: 'info',\n                            content: me.getLang('autosave').autoRestoreTip\n                        })\n                    }\n                }\n                // console.log('saveKey', saveKey);\n            },\n            beforesubmit: function () {\n                if (!me.getOpt(\"autoSaveEnable\") || !saveKey) {\n                    return;\n                }\n                me.execCommand('clear_auto_save_content');\n            },\n            contentchange: function () {\n                if (!me.isReady) {\n                    return;\n                }\n                if (!me.getOpt(\"autoSaveEnable\") || !saveKey) {\n                    return;\n                }\n\n                if (me._autoSaveTimer) {\n                    window.clearTimeout(me._autoSaveTimer);\n                }\n\n                me._autoSaveTimer = window.setTimeout(function () {\n                    save(me);\n                }, 1000);\n            }\n        },\n        commands: {\n            clear_auto_save_content: {\n                execCommand: function (cmd, name) {\n                    if (saveKey && me.getPreferences(saveKey)) {\n                        me.removePreferences(saveKey);\n                    }\n                },\n                notNeedUndo: true,\n                ignoreContentChange: true\n            },\n\n            set_auto_save_content: {\n                execCommand: function (cmd, name) {\n                    save(me);\n                },\n                notNeedUndo: true,\n                ignoreContentChange: true\n            },\n\n            get_auto_save_content: {\n                execCommand: function (cmd, name) {\n                    return me.getPreferences(saveKey) || \"\";\n                },\n                notNeedUndo: true,\n                ignoreContentChange: true\n            },\n\n            auto_save_restore: {\n                execCommand: function (cmd, name) {\n                    if (saveKey) {\n                        me.body.innerHTML =\n                            me.getPreferences(saveKey) || \"<p>\" + domUtils.fillHtml + \"</p>\";\n                        me.focus(true);\n                    }\n                },\n                queryCommandState: function () {\n                    return saveKey ? (me.getPreferences(saveKey) === null ? -1 : 0) : -1;\n                },\n                notNeedUndo: true,\n                ignoreContentChange: true\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/autosubmit.js",
    "content": "/**\n * 快捷键提交\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 提交表单\n * @command autosubmit\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'autosubmit' );\n * ```\n */\n\nUE.plugin.register(\"autosubmit\", function () {\n    return {\n        shortcutkey: {\n            autosubmit: \"ctrl+13\" //手动提交\n        },\n        commands: {\n            autosubmit: {\n                execCommand: function () {\n                    var me = this,\n                        form = domUtils.findParentByTagName(me.iframe, \"form\", false);\n                    if (form) {\n                        if (me.fireEvent(\"beforesubmit\") === false) {\n                            return;\n                        }\n                        me.sync();\n                        form.submit();\n                    }\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/autotypeset.js",
    "content": "/**\n * 自动排版\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 对当前编辑器的内容执行自动排版， 排版的行为根据config配置文件里的“autotypeset”选项进行控制。\n * @command autotypeset\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'autotypeset' );\n * ```\n */\n\nUE.plugins[\"autotypeset\"] = function () {\n    this.setOpt({\n        // 自动排版参数\n        autotypeset: {\n            // 合并空行\n            mergeEmptyline: true,\n            // 去掉冗余的class\n            removeClass: true,\n            // 去掉空行\n            removeEmptyline: false,\n            // 段落的排版方式，可以是 left,right,center,justify 去掉这个属性表示不执行排版\n            textAlign: \"left\",\n            // 图片的浮动方式，独占一行剧中,左右浮动，默认: center,left,right,none 去掉这个属性表示不执行排版\n            imageBlockLine: \"center\",\n            // 根据规则过滤没事粘贴进来的内容\n            pasteFilter: false,\n            // 去掉所有的内嵌字号，使用编辑器默认的字号\n            clearFontSize: false,\n            // 去掉所有的内嵌字体，使用编辑器默认的字体\n            clearFontFamily: false,\n            // 去掉空节点\n            removeEmptyNode: false,\n            // 可以去掉的标签\n            removeTagNames: utils.extend({div: 1}, dtd.$removeEmpty),\n            // 行首缩进\n            indent: false,\n            // 行首缩进的大小\n            indentValue: \"2em\",\n            // 全角转半角\n            bdc2sb: false,\n            // 半角转全角\n            tobdc: false\n        }\n    });\n\n    var me = this,\n        opt = me.options.autotypeset,\n        remainClass = {\n            selectTdClass: 1,\n            pagebreak: 1,\n            anchorclass: 1\n        },\n        remainTag = {\n            li: 1\n        },\n        tags = {\n            div: 1,\n            p: 1,\n            //trace:2183 这些也认为是行\n            blockquote: 1,\n            center: 1,\n            h1: 1,\n            h2: 1,\n            h3: 1,\n            h4: 1,\n            h5: 1,\n            h6: 1,\n            span: 1\n        },\n        highlightCont;\n    //升级了版本，但配置项目里没有autotypeset\n    if (!opt) {\n        return;\n    }\n\n    readLocalOpts();\n\n    function isLine(node, notEmpty) {\n        if (!node || node.nodeType == 3) return 0;\n        if (domUtils.isBr(node)) return 1;\n        if (node && node.parentNode && tags[node.tagName.toLowerCase()]) {\n            if (\n                (highlightCont && highlightCont.contains(node)) ||\n                node.getAttribute(\"pagebreak\")\n            ) {\n                return 0;\n            }\n\n            return notEmpty\n                ? !domUtils.isEmptyBlock(node)\n                : domUtils.isEmptyBlock(\n                    node,\n                    new RegExp(\"[\\\\s\" + domUtils.fillChar + \"]\", \"g\")\n                );\n        }\n    }\n\n    function removeNotAttributeSpan(node) {\n        if (!node.style.cssText) {\n            domUtils.removeAttributes(node, [\"style\"]);\n            if (\n                node.tagName.toLowerCase() == \"span\" &&\n                domUtils.hasNoAttributes(node)\n            ) {\n                domUtils.remove(node, true);\n            }\n        }\n    }\n\n    function autotype(type, html) {\n        var me = this,\n            cont;\n        if (html) {\n            if (!opt.pasteFilter) {\n                return;\n            }\n            cont = me.document.createElement(\"div\");\n            cont.innerHTML = html.html;\n        } else {\n            cont = me.document.body;\n        }\n        var nodes = domUtils.getElementsByTagName(cont, \"*\");\n\n        // 行首缩进，段落方向，段间距，段内间距\n        for (var i = 0, ci; (ci = nodes[i++]);) {\n            if (me.fireEvent(\"excludeNodeinautotype\", ci) === true) {\n                continue;\n            }\n            //font-size\n            if (opt.clearFontSize && ci.style.fontSize) {\n                domUtils.removeStyle(ci, \"font-size\");\n\n                removeNotAttributeSpan(ci);\n            }\n            //font-family\n            if (opt.clearFontFamily && ci.style.fontFamily) {\n                domUtils.removeStyle(ci, \"font-family\");\n                removeNotAttributeSpan(ci);\n            }\n\n            if (isLine(ci)) {\n                //合并空行\n                if (opt.mergeEmptyline) {\n                    var next = ci.nextSibling,\n                        tmpNode,\n                        isBr = domUtils.isBr(ci);\n                    while (isLine(next)) {\n                        tmpNode = next;\n                        next = tmpNode.nextSibling;\n                        if (isBr && (!next || (next && !domUtils.isBr(next)))) {\n                            break;\n                        }\n                        domUtils.remove(tmpNode);\n                    }\n                }\n                //去掉空行，保留占位的空行\n                if (\n                    opt.removeEmptyline &&\n                    domUtils.inDoc(ci, cont) &&\n                    !remainTag[ci.parentNode.tagName.toLowerCase()]\n                ) {\n                    if (domUtils.isBr(ci)) {\n                        next = ci.nextSibling;\n                        if (next && !domUtils.isBr(next)) {\n                            continue;\n                        }\n                    }\n                    domUtils.remove(ci);\n                    continue;\n                }\n            }\n            if (isLine(ci, true) && ci.tagName != \"SPAN\") {\n                if (opt.indent) {\n                    ci.style.textIndent = opt.indentValue;\n                }\n                if (opt.textAlign) {\n                    ci.style.textAlign = opt.textAlign;\n                }\n                // if(opt.lineHeight)\n                //     ci.style.lineHeight = opt.lineHeight + 'cm';\n            }\n\n            //去掉class,保留的class不去掉\n            if (\n                opt.removeClass &&\n                ci.className &&\n                !remainClass[ci.className.toLowerCase()]\n            ) {\n                if (highlightCont && highlightCont.contains(ci)) {\n                    continue;\n                }\n                domUtils.removeAttributes(ci, [\"class\"]);\n            }\n\n            //表情不处理\n            if (\n                opt.imageBlockLine &&\n                ci.tagName.toLowerCase() == \"img\" &&\n                !ci.getAttribute(\"emotion\")\n            ) {\n                if (html) {\n                    var img = ci;\n                    switch (opt.imageBlockLine) {\n                        case \"left\":\n                        case \"right\":\n                        case \"none\":\n                            var pN = img.parentNode,\n                                tmpNode,\n                                pre,\n                                next;\n                            while (dtd.$inline[pN.tagName] || pN.tagName == \"A\") {\n                                pN = pN.parentNode;\n                            }\n                            tmpNode = pN;\n                            if (\n                                tmpNode.tagName == \"P\" &&\n                                domUtils.getStyle(tmpNode, \"text-align\") == \"center\"\n                            ) {\n                                if (\n                                    !domUtils.isBody(tmpNode) &&\n                                    domUtils.getChildCount(tmpNode, function (node) {\n                                        return !domUtils.isBr(node) && !domUtils.isWhitespace(node);\n                                    }) == 1\n                                ) {\n                                    pre = tmpNode.previousSibling;\n                                    next = tmpNode.nextSibling;\n                                    if (\n                                        pre &&\n                                        next &&\n                                        pre.nodeType == 1 &&\n                                        next.nodeType == 1 &&\n                                        pre.tagName == next.tagName &&\n                                        domUtils.isBlockElm(pre)\n                                    ) {\n                                        pre.appendChild(tmpNode.firstChild);\n                                        while (next.firstChild) {\n                                            pre.appendChild(next.firstChild);\n                                        }\n                                        domUtils.remove(tmpNode);\n                                        domUtils.remove(next);\n                                    } else {\n                                        domUtils.setStyle(tmpNode, \"text-align\", \"\");\n                                    }\n                                }\n                            }\n                            domUtils.setStyle(img, \"float\", opt.imageBlockLine);\n                            break;\n                        case \"center\":\n                            if (me.queryCommandValue(\"imagefloat\") != \"center\") {\n                                pN = img.parentNode;\n                                domUtils.setStyle(img, \"float\", \"none\");\n                                tmpNode = img;\n                                while (\n                                    pN &&\n                                    domUtils.getChildCount(pN, function (node) {\n                                        return !domUtils.isBr(node) && !domUtils.isWhitespace(node);\n                                    }) == 1 &&\n                                    (dtd.$inline[pN.tagName] || pN.tagName == \"A\")\n                                    ) {\n                                    tmpNode = pN;\n                                    pN = pN.parentNode;\n                                }\n                                var pNode = me.document.createElement(\"p\");\n                                domUtils.setAttributes(pNode, {\n                                    style: \"text-align:center\"\n                                });\n                                tmpNode.parentNode.insertBefore(pNode, tmpNode);\n                                pNode.appendChild(tmpNode);\n                                domUtils.setStyle(tmpNode, \"float\", \"\");\n                            }\n                    }\n                } else {\n                    var range = me.selection.getRange();\n                    range.selectNode(ci).select();\n                    me.execCommand(\"imagefloat\", opt.imageBlockLine);\n                }\n            }\n\n            //去掉冗余的标签\n            if (opt.removeEmptyNode) {\n                if (\n                    opt.removeTagNames[ci.tagName.toLowerCase()] &&\n                    domUtils.hasNoAttributes(ci) &&\n                    domUtils.isEmptyBlock(ci)\n                ) {\n                    domUtils.remove(ci);\n                }\n            }\n        }\n        if (opt.tobdc) {\n            var root = UE.htmlparser(cont.innerHTML);\n            root.traversal(function (node) {\n                if (node.type == \"text\") {\n                    node.data = ToDBC(node.data);\n                }\n            });\n            cont.innerHTML = root.toHtml();\n        }\n        if (opt.bdc2sb) {\n            var root = UE.htmlparser(cont.innerHTML);\n            root.traversal(function (node) {\n                if (node.type == \"text\") {\n                    node.data = DBC2SB(node.data);\n                }\n            });\n            cont.innerHTML = root.toHtml();\n        }\n        if (html) {\n            html.html = cont.innerHTML;\n        }\n    }\n\n    if (opt.pasteFilter) {\n        me.addListener(\"beforepaste\", autotype);\n    }\n\n    function DBC2SB(str) {\n        var result = \"\";\n        for (var i = 0; i < str.length; i++) {\n            var code = str.charCodeAt(i); //获取当前字符的unicode编码\n            if (code >= 65281 && code <= 65373) {\n                //在这个unicode编码范围中的是所有的英文字母已经各种字符\n                result += String.fromCharCode(str.charCodeAt(i) - 65248); //把全角字符的unicode编码转换为对应半角字符的unicode码\n            } else if (code == 12288) {\n                //空格\n                result += String.fromCharCode(str.charCodeAt(i) - 12288 + 32);\n            } else {\n                result += str.charAt(i);\n            }\n        }\n        return result;\n    }\n\n    function ToDBC(txtstring) {\n        txtstring = utils.html(txtstring);\n        var tmp = \"\";\n        var mark = \"\"; /*用于判断,如果是html尖括里的标记,则不进行全角的转换*/\n        for (var i = 0; i < txtstring.length; i++) {\n            if (txtstring.charCodeAt(i) == 32) {\n                tmp = tmp + String.fromCharCode(12288);\n            } else if (txtstring.charCodeAt(i) < 127) {\n                tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i) + 65248);\n            } else {\n                tmp += txtstring.charAt(i);\n            }\n        }\n        return tmp;\n    }\n\n    function readLocalOpts() {\n        var cookieOpt = me.getPreferences(\"autotypeset\");\n        utils.extend(me.options.autotypeset, cookieOpt);\n    }\n\n    me.commands[\"autotypeset\"] = {\n        execCommand: function () {\n            me.removeListener(\"beforepaste\", autotype);\n            if (opt.pasteFilter) {\n                me.addListener(\"beforepaste\", autotype);\n            }\n            autotype.call(me);\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/autoupload.js",
    "content": "/**\n * @description\n * 1.拖放文件到编辑区域，自动上传并插入到选区\n * 2.插入粘贴板的图片，自动上传并插入到选区\n * @author Jinqn\n * @date 2013-10-14\n */\nUE.plugin.register(\"autoupload\", function () {\n    function sendAndInsertFile(file, editor) {\n        var me = editor;\n        //模拟数据\n        var fieldName,\n            urlPrefix,\n            maxSize,\n            allowFiles,\n            actionUrl,\n            loadingHtml,\n            errorHandler,\n            successHandler,\n            filetype = /image\\/\\w+/i.test(file.type) ? \"image\" : \"file\",\n            fileExt = UE.plus.fileExt(file.name),\n            loadingId = \"loading_\" + (+new Date()).toString(36);\n\n        fieldName = me.getOpt(filetype + \"FieldName\");\n        urlPrefix = me.getOpt(filetype + \"UrlPrefix\");\n        maxSize = me.getOpt(filetype + \"MaxSize\");\n        allowFiles = me.getOpt(filetype + \"AllowFiles\");\n        actionUrl = me.getActionUrl(me.getOpt(filetype + \"ActionName\"));\n        errorHandler = function (title) {\n            var loader = me.document.getElementById(loadingId);\n            loader && domUtils.remove(loader);\n            me.fireEvent(\"showmessage\", {\n                id: loadingId,\n                content: title,\n                type: \"error\",\n                timeout: 4000\n            });\n        };\n\n        if (filetype === \"image\") {\n            loadingHtml =\n                '<img class=\"uep-loading\" id=\"' +\n                loadingId +\n                '\" src=\"' +\n                me.options.themePath +\n                me.options.theme +\n                '/images/spacer.gif\">';\n            successHandler = function (data) {\n                var link = urlPrefix + data.url,\n                    loader = me.document.getElementById(loadingId);\n                if (loader) {\n                    domUtils.removeClasses(loader, \"uep-loading\");\n                    loader.setAttribute(\"src\", link);\n                    loader.setAttribute(\"_src\", link);\n                    loader.setAttribute(\"alt\", data.original || \"\");\n                    loader.removeAttribute(\"id\");\n                    me.trigger(\"contentchange\", loader);\n                }\n            };\n        } else {\n            loadingHtml =\n                \"<p>\" +\n                '<img class=\"uep-loading\" id=\"' +\n                loadingId +\n                '\" src=\"' +\n                me.options.themePath +\n                me.options.theme +\n                '/images/spacer.gif\">' +\n                \"</p>\";\n            successHandler = function (data) {\n                var link = urlPrefix + data.url,\n                    loader = me.document.getElementById(loadingId);\n\n                var rng = me.selection.getRange(),\n                    bk = rng.createBookmark();\n                rng.selectNode(loader).select();\n                me.execCommand(\"insertfile\", {url: link});\n                rng.moveToBookmark(bk).select();\n            };\n        }\n\n        /* 插入loading的占位符 */\n        me.execCommand(\"inserthtml\", loadingHtml);\n        /* 判断后端配置是否没有加载成功 */\n        if (!me.getOpt(filetype + \"ActionName\")) {\n            errorHandler(me.getLang(\"autoupload.errorLoadConfig\"));\n            return;\n        }\n        /* 判断文件大小是否超出限制 */\n        if (file.size > maxSize) {\n            errorHandler(me.getLang(\"autoupload.exceedSizeError\"));\n            return;\n        }\n        /* 判断文件格式是否超出允许 */\n        var fileext = file.name ? file.name.substr(file.name.lastIndexOf(\".\")) : \"\";\n        if (\n            (fileext && filetype != \"image\") ||\n            (allowFiles &&\n                (allowFiles.join(\"\") + \".\").indexOf(fileext.toLowerCase() + \".\") == -1)\n        ) {\n            errorHandler(me.getLang(\"autoupload.exceedTypeError\"));\n            return;\n        }\n\n        var upload = function (file) {\n            if(me.getOpt('uploadServiceEnable')){\n                me.getOpt('uploadServiceUpload')('image', file, {\n                    success: function( res ) {\n                        successHandler( res );\n                    },\n                    error: function( err ) {\n                        errorHandler(me.getLang(\"autoupload.loadError\") + ' : ' + err);\n                    },\n                    progress: function( percent ) {\n\n                    }\n                }, {\n                    from: 'paste'\n                });\n                return;\n            }\n            var formData = new FormData();\n            formData.append(fieldName, file, file.name);\n            UE.api.requestAction(me, me.getOpt(filetype + \"ActionName\"), {\n                data: formData\n            }).then(function (res) {\n                successHandler(me.getOpt('serverResponsePrepare')( res.data ));\n            }).catch(function (err) {\n                errorHandler(me.getLang(\"autoupload.loadError\") + ' : ' + err);\n            });\n        };\n\n        var imageCompressEnable = me.getOpt('imageCompressEnable'),\n            imageMaxSize = me.getOpt('imageMaxSize'),\n            imageCompressBorder = me.getOpt('imageCompressBorder');\n        if ('image' === filetype && imageCompressEnable && ['jpg', 'jpeg', 'png'].includes(fileExt)) {\n            UE.image.compress(file, {\n                maxSizeMB: imageMaxSize / 1024 / 1024,\n                maxWidthOrHeight: imageCompressBorder\n            }).then(function (compressedFile) {\n                if (me.options.debug) {\n                    console.log('AutoUpload.CompressImage', (compressedFile.size / file.size * 100).toFixed(2) + '%');\n                }\n                upload(compressedFile);\n            }).catch(function (err) {\n                console.error('AutoUpload.CompressImage.error', err)\n                upload(file);\n            });\n        } else {\n            upload(file);\n        }\n\n        /* 创建Ajax并提交 */\n        // var xhr = new XMLHttpRequest(),\n        //   fd = new FormData(),\n        //   params = utils.serializeParam(me.queryCommandValue(\"serverparam\")) || \"\",\n        //   url = utils.formatUrl(\n        //     actionUrl + (actionUrl.indexOf(\"?\") == -1 ? \"?\" : \"&\") + params\n        //   );\n        //\n        // fd.append(\n        //   fieldName,\n        //   file,\n        //   file.name || \"blob.\" + file.type.substr(\"image/\".length)\n        // );\n        // fd.append(\"type\", \"ajax\");\n        // xhr.open(\"post\", url, true);\n        // xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n        // xhr.addEventListener(\"load\", function(e) {\n        //   try {\n        //     var json = new Function(\"return \" + utils.trim(e.target.response))();\n        //     if (json.state == \"SUCCESS\" && json.url) {\n        //       successHandler(json);\n        //     } else {\n        //       errorHandler(json.state);\n        //     }\n        //   } catch (er) {\n        //     errorHandler(me.getLang(\"autoupload.loadError\"));\n        //   }\n        // });\n        // xhr.send(fd);\n    }\n\n    function getPasteImage(e) {\n        var images = []\n        if (e.clipboardData && e.clipboardData.items) {\n            var items = e.clipboardData.items\n            for (let i = 0; i < items.length; i++) {\n                if (items[i].type.indexOf('image') !== -1) {\n                    images.push(items[i])\n                }\n            }\n        }\n        return images;\n    }\n\n    function getDropImage(e) {\n        return e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files : null;\n    }\n\n    return {\n        outputRule: function (root) {\n            utils.each(root.getNodesByTagName(\"img\"), function (n) {\n                if (/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))) {\n                    n.parentNode.removeChild(n);\n                }\n            });\n            utils.each(root.getNodesByTagName(\"p\"), function (n) {\n                if (/\\bloadpara\\b/.test(n.getAttr(\"class\"))) {\n                    n.parentNode.removeChild(n);\n                }\n            });\n        },\n        bindEvents: {\n            defaultOptions: {\n                //默认间隔时间\n                enableDragUpload: true,\n                enablePasteUpload: true\n            },\n            //插入粘贴板的图片，拖放插入图片\n            ready: function (e) {\n                var me = this;\n                if (window.FormData && window.FileReader) {\n                    var handler = function (e) {\n                        var hasImg = false,\n                            items;\n                        //获取粘贴板文件列表或者拖放文件列表\n                        items = e.type === \"paste\" ? getPasteImage(e) : getDropImage(e);\n                        if (items) {\n                            var len = items.length,\n                                file;\n                            while (len--) {\n                                file = items[len];\n                                if (file.getAsFile) file = file.getAsFile();\n                                if (file && file.size > 0) {\n                                    sendAndInsertFile(file, me);\n                                    hasImg = true;\n                                }\n                            }\n                            hasImg && e.preventDefault();\n                        }\n                    };\n\n                    if (me.getOpt(\"enablePasteUpload\") !== false) {\n                        domUtils.on(me.body, \"paste \", handler);\n                    }\n                    if (me.getOpt(\"enableDragUpload\") !== false) {\n                        domUtils.on(me.body, \"drop\", handler);\n                        //取消拖放图片时出现的文字光标位置提示\n                        domUtils.on(me.body, \"dragover\", function (e) {\n                            if (e.dataTransfer.types[0] == \"Files\") {\n                                e.preventDefault();\n                            }\n                        });\n                    } else {\n                        if (browser.gecko) {\n                            domUtils.on(me.body, \"drop\", function (e) {\n                                if (getDropImage(e)) {\n                                    e.preventDefault();\n                                }\n                            });\n                        }\n                    }\n\n                    //设置loading的样式\n                    utils.cssRule(\n                        \"loading\",\n                        \".uep-loading{display:inline-block;cursor:default;background: url('\" +\n                        this.options.themePath +\n                        this.options.theme +\n                        \"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-left:1px;height:22px;width:22px;}\\n\" +\n                        \".uep-loading-error{display:inline-block;cursor:default;background: url('\" +\n                        this.options.themePath +\n                        this.options.theme +\n                        \"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\" +\n                        \"}\",\n                        this.document\n                    );\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/background.js",
    "content": "/**\n * 背景插件，为UEditor提供设置背景功能\n * @file\n * @since 1.2.6.1\n */\nUE.plugin.register(\"background\", function () {\n    var me = this,\n        cssRuleId = \"editor_background\",\n        isSetColored,\n        reg = new RegExp(\"body[\\\\s]*\\\\{(.+)\\\\}\", \"i\");\n\n    function stringToObj(str) {\n        var obj = {},\n            styles = str.split(\";\");\n        utils.each(styles, function (v) {\n            var index = v.indexOf(\":\"),\n                key = utils.trim(v.substr(0, index)).toLowerCase();\n            key && (obj[key] = utils.trim(v.substr(index + 1) || \"\"));\n        });\n        return obj;\n    }\n\n    function setBackground(obj) {\n        if (obj) {\n            var styles = [];\n            for (var name in obj) {\n                if (obj.hasOwnProperty(name)) {\n                    styles.push(name + \":\" + obj[name] + \"; \");\n                }\n            }\n            utils.cssRule(\n                cssRuleId,\n                styles.length ? \"body{\" + styles.join(\"\") + \"}\" : \"\",\n                me.document\n            );\n        } else {\n            utils.cssRule(cssRuleId, \"\", me.document);\n        }\n    }\n\n    //重写editor.hasContent方法\n\n    var orgFn = me.hasContents;\n    me.hasContents = function () {\n        if (me.queryCommandValue(\"background\")) {\n            return true;\n        }\n        return orgFn.apply(me, arguments);\n    };\n    return {\n        bindEvents: {\n            getAllHtml: function (type, headHtml) {\n                var body = this.body,\n                    su = domUtils.getComputedStyle(body, \"background-image\"),\n                    url = \"\";\n                if (su.indexOf(me.options.imagePath) > 0) {\n                    url = su\n                        .substring(su.indexOf(me.options.imagePath), su.length - 1)\n                        .replace(/\"|\\(|\\)/gi, \"\");\n                } else {\n                    url = su != \"none\" ? su.replace(/url\\(\"?|\"?\\)/gi, \"\") : \"\";\n                }\n                var html = '<style type=\"text/css\">body{';\n                var bgObj = {\n                    \"background-color\":\n                        domUtils.getComputedStyle(body, \"background-color\") || \"#ffffff\",\n                    \"background-image\": url ? \"url(\" + url + \")\" : \"\",\n                    \"background-repeat\":\n                        domUtils.getComputedStyle(body, \"background-repeat\") || \"\",\n                    \"background-position\": browser.ie\n                        ? domUtils.getComputedStyle(body, \"background-position-x\") +\n                        \" \" +\n                        domUtils.getComputedStyle(body, \"background-position-y\")\n                        : domUtils.getComputedStyle(body, \"background-position\"),\n                    height: domUtils.getComputedStyle(body, \"height\")\n                };\n                for (var name in bgObj) {\n                    if (bgObj.hasOwnProperty(name)) {\n                        html += name + \":\" + bgObj[name] + \"; \";\n                    }\n                }\n                html += \"}</style> \";\n                headHtml.push(html);\n            },\n            aftersetcontent: function () {\n                if (isSetColored == false) setBackground();\n            }\n        },\n        inputRule: function (root) {\n            isSetColored = false;\n            utils.each(root.getNodesByTagName(\"p\"), function (p) {\n                var styles = p.getAttr(\"data-background\");\n                if (styles) {\n                    isSetColored = true;\n                    setBackground(stringToObj(styles));\n                    p.parentNode.removeChild(p);\n                }\n            });\n        },\n        outputRule: function (root) {\n            var me = this,\n                styles = (utils.cssRule(cssRuleId, me.document) || \"\")\n                    .replace(/[\\n\\r]+/g, \"\")\n                    .match(reg);\n            if (styles) {\n                root.appendChild(\n                    UE.uNode.createElement(\n                        '<p style=\"display:none;\" data-background=\"' +\n                        utils.trim(styles[1].replace(/\"/g, \"\").replace(/[\\s]+/g, \" \")) +\n                        '\"><br/></p>'\n                    )\n                );\n            }\n        },\n        commands: {\n            background: {\n                execCommand: function (cmd, obj) {\n                    setBackground(obj);\n                },\n                queryCommandValue: function () {\n                    var me = this,\n                        styles = (utils.cssRule(cssRuleId, me.document) || \"\")\n                            .replace(/[\\n\\r]+/g, \"\")\n                            .match(reg);\n                    return styles ? stringToObj(styles[1]) : null;\n                },\n                notNeedUndo: true\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/basestyle.js",
    "content": "/**\n * B、I、sub、super命令支持\n * @file\n * @since 1.2.6.1\n */\n\nUE.plugins[\"basestyle\"] = function () {\n    /**\n     * 字体加粗\n     * @command bold\n     * @param { String } cmd 命令字符串\n     * @remind 对已加粗的文本内容执行该命令， 将取消加粗\n     * @method execCommand\n     * @example\n     * ```javascript\n     * //editor是编辑器实例\n     * //对当前选中的文本内容执行加粗操作\n     * //第一次执行， 文本内容加粗\n     * editor.execCommand( 'bold' );\n     *\n     * //第二次执行， 文本内容取消加粗\n     * editor.execCommand( 'bold' );\n     * ```\n     */\n\n    /**\n     * 字体倾斜\n     * @command italic\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @remind 对已倾斜的文本内容执行该命令， 将取消倾斜\n     * @example\n     * ```javascript\n     * //editor是编辑器实例\n     * //对当前选中的文本内容执行斜体操作\n     * //第一次操作， 文本内容将变成斜体\n     * editor.execCommand( 'italic' );\n     *\n     * //再次对同一文本内容执行， 则文本内容将恢复正常\n     * editor.execCommand( 'italic' );\n     * ```\n     */\n\n    /**\n     * 下标文本，与“superscript”命令互斥\n     * @command subscript\n     * @method execCommand\n     * @remind  把选中的文本内容切换成下标文本， 如果当前选中的文本已经是下标， 则该操作会把文本内容还原成正常文本\n     * @param { String } cmd 命令字符串\n     * @example\n     * ```javascript\n     * //editor是编辑器实例\n     * //对当前选中的文本内容执行下标操作\n     * //第一次操作， 文本内容将变成下标文本\n     * editor.execCommand( 'subscript' );\n     *\n     * //再次对同一文本内容执行， 则文本内容将恢复正常\n     * editor.execCommand( 'subscript' );\n     * ```\n     */\n\n    /**\n     * 上标文本，与“subscript”命令互斥\n     * @command superscript\n     * @method execCommand\n     * @remind 把选中的文本内容切换成上标文本， 如果当前选中的文本已经是上标， 则该操作会把文本内容还原成正常文本\n     * @param { String } cmd 命令字符串\n     * @example\n     * ```javascript\n     * //editor是编辑器实例\n     * //对当前选中的文本内容执行上标操作\n     * //第一次操作， 文本内容将变成上标文本\n     * editor.execCommand( 'superscript' );\n     *\n     * //再次对同一文本内容执行， 则文本内容将恢复正常\n     * editor.execCommand( 'superscript' );\n     * ```\n     */\n    var basestyles = {\n            bold: [\"strong\", \"b\"],\n            italic: [\"em\", \"i\"],\n            subscript: [\"sub\"],\n            superscript: [\"sup\"]\n        },\n        getObj = function (editor, tagNames) {\n            return domUtils.filterNodeList(\n                editor.selection.getStartElementPath(),\n                tagNames\n            );\n        },\n        me = this;\n    //添加快捷键\n    me.addshortcutkey({\n        Bold: \"ctrl+66\", //^B\n        Italic: \"ctrl+73\", //^I\n        Underline: \"ctrl+85\" //^U\n    });\n    me.addInputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"b i\"), function (node) {\n            switch (node.tagName) {\n                case \"b\":\n                    node.tagName = \"strong\";\n                    break;\n                case \"i\":\n                    node.tagName = \"em\";\n            }\n        });\n    });\n    for (var style in basestyles) {\n        (function (cmd, tagNames) {\n            me.commands[cmd] = {\n                execCommand: function (cmdName) {\n                    var range = me.selection.getRange(),\n                        obj = getObj(this, tagNames);\n                    if (range.collapsed) {\n                        if (obj) {\n                            var tmpText = me.document.createTextNode(\"\");\n                            range.insertNode(tmpText).removeInlineStyle(tagNames);\n                            range.setStartBefore(tmpText);\n                            domUtils.remove(tmpText);\n                        } else {\n                            var tmpNode = range.document.createElement(tagNames[0]);\n                            if (cmdName == \"superscript\" || cmdName == \"subscript\") {\n                                tmpText = me.document.createTextNode(\"\");\n                                range\n                                    .insertNode(tmpText)\n                                    .removeInlineStyle([\"sub\", \"sup\"])\n                                    .setStartBefore(tmpText)\n                                    .collapse(true);\n                            }\n                            range.insertNode(tmpNode).setStart(tmpNode, 0);\n                        }\n                        range.collapse(true);\n                    } else {\n                        if (cmdName == \"superscript\" || cmdName == \"subscript\") {\n                            if (!obj || obj.tagName.toLowerCase() != cmdName) {\n                                range.removeInlineStyle([\"sub\", \"sup\"]);\n                            }\n                        }\n                        obj\n                            ? range.removeInlineStyle(tagNames)\n                            : range.applyInlineStyle(tagNames[0]);\n                    }\n                    range.select();\n                },\n                queryCommandState: function () {\n                    return getObj(this, tagNames) ? 1 : 0;\n                }\n            };\n        })(style, basestyles[style]);\n    }\n};\n"
  },
  {
    "path": "_src/plugins/blockquote.js",
    "content": "/**\n * 添加引用\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 添加引用\n * @command blockquote\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'blockquote' );\n * ```\n */\n\n/**\n * 添加引用\n * @command blockquote\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { Object } attrs 节点属性\n * @example\n * ```javascript\n * editor.execCommand( 'blockquote',{\n *     style: \"color: red;\"\n * } );\n * ```\n */\n\nUE.plugins[\"blockquote\"] = function () {\n    var me = this;\n\n    function getObj(editor) {\n        return domUtils.filterNodeList(\n            editor.selection.getStartElementPath(),\n            \"blockquote\"\n        );\n    }\n\n    me.commands[\"blockquote\"] = {\n        execCommand: function (cmdName, attrs) {\n            var range = this.selection.getRange(),\n                obj = getObj(this),\n                blockquote = dtd.blockquote,\n                bookmark = range.createBookmark();\n\n            if (obj) {\n                var start = range.startContainer,\n                    startBlock = domUtils.isBlockElm(start)\n                        ? start\n                        : domUtils.findParent(start, function (node) {\n                            return domUtils.isBlockElm(node);\n                        }),\n                    end = range.endContainer,\n                    endBlock = domUtils.isBlockElm(end)\n                        ? end\n                        : domUtils.findParent(end, function (node) {\n                            return domUtils.isBlockElm(node);\n                        });\n\n                //处理一下li\n                startBlock =\n                    domUtils.findParentByTagName(startBlock, \"li\", true) || startBlock;\n                endBlock =\n                    domUtils.findParentByTagName(endBlock, \"li\", true) || endBlock;\n\n                if (\n                    startBlock.tagName == \"LI\" ||\n                    startBlock.tagName == \"TD\" ||\n                    startBlock === obj ||\n                    domUtils.isBody(startBlock)\n                ) {\n                    domUtils.remove(obj, true);\n                } else {\n                    domUtils.breakParent(startBlock, obj);\n                }\n\n                if (startBlock !== endBlock) {\n                    obj = domUtils.findParentByTagName(endBlock, \"blockquote\");\n                    if (obj) {\n                        if (\n                            endBlock.tagName == \"LI\" ||\n                            endBlock.tagName == \"TD\" ||\n                            domUtils.isBody(endBlock)\n                        ) {\n                            obj.parentNode && domUtils.remove(obj, true);\n                        } else {\n                            domUtils.breakParent(endBlock, obj);\n                        }\n                    }\n                }\n\n                var blockquotes = domUtils.getElementsByTagName(\n                    this.document,\n                    \"blockquote\"\n                );\n                for (var i = 0, bi; (bi = blockquotes[i++]);) {\n                    if (!bi.childNodes.length) {\n                        domUtils.remove(bi);\n                    } else if (\n                        domUtils.getPosition(bi, startBlock) &\n                        domUtils.POSITION_FOLLOWING &&\n                        domUtils.getPosition(bi, endBlock) & domUtils.POSITION_PRECEDING\n                    ) {\n                        domUtils.remove(bi, true);\n                    }\n                }\n            } else {\n                var tmpRange = range.cloneRange(),\n                    node = tmpRange.startContainer.nodeType == 1\n                        ? tmpRange.startContainer\n                        : tmpRange.startContainer.parentNode,\n                    preNode = node,\n                    doEnd = 1;\n\n                //调整开始\n                while (1) {\n                    if (domUtils.isBody(node)) {\n                        if (preNode !== node) {\n                            if (range.collapsed) {\n                                tmpRange.selectNode(preNode);\n                                doEnd = 0;\n                            } else {\n                                tmpRange.setStartBefore(preNode);\n                            }\n                        } else {\n                            tmpRange.setStart(node, 0);\n                        }\n\n                        break;\n                    }\n                    if (!blockquote[node.tagName]) {\n                        if (range.collapsed) {\n                            tmpRange.selectNode(preNode);\n                        } else {\n                            tmpRange.setStartBefore(preNode);\n                        }\n                        break;\n                    }\n\n                    preNode = node;\n                    node = node.parentNode;\n                }\n\n                //调整结束\n                if (doEnd) {\n                    preNode = node = node = tmpRange.endContainer.nodeType == 1\n                        ? tmpRange.endContainer\n                        : tmpRange.endContainer.parentNode;\n                    while (1) {\n                        if (domUtils.isBody(node)) {\n                            if (preNode !== node) {\n                                tmpRange.setEndAfter(preNode);\n                            } else {\n                                tmpRange.setEnd(node, node.childNodes.length);\n                            }\n\n                            break;\n                        }\n                        if (!blockquote[node.tagName]) {\n                            tmpRange.setEndAfter(preNode);\n                            break;\n                        }\n\n                        preNode = node;\n                        node = node.parentNode;\n                    }\n                }\n\n                node = range.document.createElement(\"blockquote\");\n                domUtils.setAttributes(node, attrs);\n                node.appendChild(tmpRange.extractContents());\n                tmpRange.insertNode(node);\n                //去除重复的\n                var childs = domUtils.getElementsByTagName(node, \"blockquote\");\n                for (var i = 0, ci; (ci = childs[i++]);) {\n                    if (ci.parentNode) {\n                        domUtils.remove(ci, true);\n                    }\n                }\n            }\n            range.moveToBookmark(bookmark).select();\n        },\n        queryCommandState: function () {\n            return getObj(this) ? 1 : 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/catchremoteimage.js",
    "content": "///import core\n///commands 远程图片抓取\n///commandsName  catchRemoteImage,catchremoteimageenable\n///commandsTitle  远程图片抓取\n/**\n * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片\n */\nUE.plugins[\"catchremoteimage\"] = function () {\n    var me = this,\n        ajax = UE.ajax;\n\n    /* 设置默认值 */\n    if (me.options.catchRemoteImageEnable === false) {\n        return;\n    }\n    me.setOpt({\n        catchRemoteImageEnable: false\n    });\n\n    var catcherLocalDomain = me.getOpt(\"catcherLocalDomain\"),\n        catcherActionUrl = me.getActionUrl(me.getOpt(\"catcherActionName\")),\n        catcherUrlPrefix = me.getOpt(\"catcherUrlPrefix\"),\n        catcherFieldName = me.getOpt(\"catcherFieldName\");\n\n    me.addListener('serverConfigLoaded', function () {\n        catcherLocalDomain = me.getOpt(\"catcherLocalDomain\");\n        catcherActionUrl = me.getActionUrl(me.getOpt(\"catcherActionName\"));\n        catcherUrlPrefix = me.getOpt(\"catcherUrlPrefix\");\n        catcherFieldName = me.getOpt(\"catcherFieldName\");\n    });\n\n    me.addListener(\"afterpaste\", function () {\n        me.fireEvent(\"catchremoteimage\");\n    });\n\n    var catchRemoteImageCatching = false;\n\n    function sendApi(imgs, callbacks) {\n        var params = utils.serializeParam(me.queryCommandValue(\"serverparam\")) || \"\",\n            url = utils.formatUrl(\n                catcherActionUrl +\n                (catcherActionUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\") +\n                params\n            ),\n            isJsonp = utils.isCrossDomainUrl(url),\n            opt = {\n                method: \"POST\",\n                dataType: isJsonp ? \"jsonp\" : \"\",\n                timeout: 60000, //单位：毫秒，回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值\n                headers: me.options.serverHeaders || {},\n                onsuccess: callbacks[\"success\"],\n                onerror: callbacks[\"error\"]\n            };\n        opt[catcherFieldName] = imgs;\n        ajax.request(url, opt);\n    }\n\n    function catchElement(type, ele, imageUrl) {\n        sendApi([imageUrl], {\n            //成功抓取\n            success: function (r) {\n                try {\n                    var info = r.state !== undefined\n                        ? r\n                        : eval(\"(\" + r.responseText + \")\");\n                } catch (e) {\n                    return;\n                }\n\n                info = me.options.serverResponsePrepare(info);\n\n                /* 获取源路径和新路径 */\n                var oldSrc,\n                    newSrc,\n                    oldBgIMG,\n                    newBgIMG,\n                    list = info.list;\n                var catchFailList = [];\n                var catchSuccessList = [];\n                var failIMG = me.options.themePath + me.options.theme + '/images/img-cracked.png';\n                var loadingIMG = me.options.themePath + me.options.theme + '/images/spacer.gif';\n\n                var cj = list[0];\n                switch (type) {\n                    case 'image':\n                        oldSrc = ele.getAttribute(\"_src\") || ele.src || \"\";\n                        if (cj.state === \"SUCCESS\") {\n                            newSrc = catcherUrlPrefix + cj.url;\n                            // 上传成功是删除uploading动画\n                            domUtils.removeClasses(ele, \"uep-loading\");\n                            domUtils.setAttributes(ele, {\n                                \"src\": newSrc,\n                                \"_src\": newSrc,\n                                \"data-catch-result\": \"success\"\n                            });\n                            catchSuccessList.push(ele);\n                        } else {\n                            // 替换成统一的失败图片\n                            domUtils.removeClasses(ele, \"uep-loading\");\n                            domUtils.setAttributes(ele, {\n                                \"src\": failIMG,\n                                \"_src\": failIMG,\n                                \"data-catch-result\": \"fail\" // 添加catch失败标记\n                            });\n                            catchFailList.push(ele);\n                        }\n                        break;\n                    case 'background':\n                        oldBgIMG = ele.getAttribute(\"data-background\") || \"\";\n                        if (cj.state === \"SUCCESS\") {\n                            newBgIMG = catcherUrlPrefix + cj.url;\n                            ele.style.cssText = ele.style.cssText.replace(loadingIMG, newBgIMG);\n                            domUtils.removeAttributes(ele, \"data-background\");\n                            domUtils.setAttributes(ele, {\n                                \"data-catch-result\": \"success\"   // 添加catch成功标记\n                            });\n                            catchSuccessList.push(ele);\n                        } else {\n                            ele.style.cssText = ele.style.cssText.replace(loadingIMG, failIMG);\n                            domUtils.removeAttributes(ele, \"data-background\");\n                            domUtils.setAttributes(ele, {\n                                \"data-catch-result\": \"fail\"   // 添加catch失败标记\n                            });\n                            catchFailList.push(ele);\n                        }\n                        break;\n                }\n                // 监听事件添加成功抓取和抓取失败的dom列表参数\n                me.fireEvent('catchremotesuccess', catchSuccessList, catchFailList);\n                catchRemoteImageCatching = false;\n                setTimeout(function () {\n                    me.fireEvent('catchremoteimage');\n                }, 0);\n            },\n            //回调失败，本次请求超时\n            error: function () {\n                me.fireEvent('catchremoteerror');\n                catchRemoteImageCatching = false;\n                setTimeout(function () {\n                    me.fireEvent('catchremoteimage');\n                }, 0);\n            }\n        });\n    }\n\n    function catchRemoteImage() {\n        // console.log('catchRemoteImage',catchRemoteImageCatching);\n\n        if (catchRemoteImageCatching) {\n            return;\n        }\n        catchRemoteImageCatching = true;\n\n        var loadingIMG = me.options.themePath + me.options.theme + '/images/spacer.gif',\n            imgs = me.document.querySelectorAll('[style*=\"url\"],img'),\n            test = function (src, urls) {\n                if (src.indexOf(location.host) !== -1 || /(^\\.)|(^\\/)/.test(src)) {\n                    return true;\n                }\n                if (urls) {\n                    for (var j = 0, url; (url = urls[j++]);) {\n                        if (src.indexOf(url) !== -1) {\n                            return true;\n                        }\n                    }\n                }\n                return false;\n            };\n\n        for (var i = 0, ci; (ci = imgs[i++]);) {\n            if (ci.getAttribute(\"data-word-image\")\n                || ci.getAttribute('data-catch-result')\n                || ci.getAttribute('data-formula-image')\n            ) {\n                continue;\n            }\n            if (ci.nodeName === \"IMG\") {\n                var src = ci.getAttribute(\"_src\") || ci.src || \"\";\n                if (/^(https?|ftp):/i.test(src) && !test(src, catcherLocalDomain)) {\n                    catchElement('image', ci, src);\n                    domUtils.setAttributes(ci, {\n                        class: \"uep-loading\",\n                        _src: src,\n                        src: loadingIMG\n                    })\n                    return;\n                }\n            } else {\n                var backgroundImageurl = ci.style.cssText.replace(/.*\\s?url\\([\\'\\\"]?/, '').replace(/[\\'\\\"]?\\).*/, '');\n                if (/^(https?|ftp):/i.test(backgroundImageurl) && !test(backgroundImageurl, catcherLocalDomain)) {\n                    catchElement('background', ci, backgroundImageurl);\n                    ci.style.cssText = ci.style.cssText.replace(backgroundImageurl, loadingIMG);\n                    domUtils.setAttributes(ci, {\n                        \"data-background\": backgroundImageurl\n                    })\n                    return;\n                }\n            }\n        }\n        catchRemoteImageCatching = false;\n    };\n\n    me.addListener(\"catchremoteimage\", function () {\n        catchRemoteImage();\n    });\n};\n"
  },
  {
    "path": "_src/plugins/cleardoc.js",
    "content": "/**\n * 清空文档插件\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 清空文档\n * @command cleardoc\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * //editor 是编辑器实例\n * editor.execCommand('cleardoc');\n * ```\n */\n\nUE.commands[\"cleardoc\"] = {\n    execCommand: function (cmdName) {\n        var me = this,\n            enterTag = me.options.enterTag,\n            range = me.selection.getRange();\n        if (enterTag == \"br\") {\n            me.body.innerHTML = \"<br/>\";\n            range.setStart(me.body, 0).setCursor();\n        } else {\n            me.body.innerHTML = \"<p>\" + (ie ? \"\" : \"<br/>\") + \"</p>\";\n            range.setStart(me.body.firstChild, 0).setCursor(false, true);\n        }\n        setTimeout(function () {\n            me.fireEvent(\"clearDoc\");\n        }, 0);\n    }\n};\n"
  },
  {
    "path": "_src/plugins/contextmenu.js",
    "content": "///import core\n///commands 右键菜单\n///commandsName  ContextMenu\n///commandsTitle  右键菜单\n/**\n * 右键菜单\n * @function\n * @name baidu.editor.plugins.contextmenu\n * @author zhanyi\n */\n\nUE.plugins[\"contextmenu\"] = function () {\n    var me = this;\n\n    me.setOpt(\"enableContextMenu\", me.getOpt(\"enableContextMenu\") || true);\n\n    if (me.getOpt(\"enableContextMenu\") === false) {\n        return;\n    }\n    var lang = me.getLang(\"contextMenu\"),\n        menu,\n        items = me.options.contextMenu || [\n            {label: lang[\"selectall\"], cmdName: \"selectall\"},\n            {\n                label: lang.cleardoc,\n                cmdName: \"cleardoc\",\n                exec: function () {\n                    if (confirm(lang.confirmclear)) {\n                        this.execCommand(\"cleardoc\");\n                    }\n                }\n            },\n            \"-\",\n            {\n                label: lang.unlink,\n                cmdName: \"unlink\"\n            },\n            \"-\",\n            {\n                group: lang.paragraph,\n                icon: \"justifyjustify\",\n                subMenu: [\n                    {\n                        label: lang.justifyleft,\n                        cmdName: \"justify\",\n                        value: \"left\"\n                    },\n                    {\n                        label: lang.justifyright,\n                        cmdName: \"justify\",\n                        value: \"right\"\n                    },\n                    {\n                        label: lang.justifycenter,\n                        cmdName: \"justify\",\n                        value: \"center\"\n                    },\n                    {\n                        label: lang.justifyjustify,\n                        cmdName: \"justify\",\n                        value: \"justify\"\n                    }\n                ]\n            },\n            \"-\",\n            {\n                group: lang.table,\n                icon: \"table\",\n                subMenu: [\n                    {\n                        label: lang.inserttable,\n                        cmdName: \"inserttable\"\n                    },\n                    {\n                        label: lang.deletetable,\n                        cmdName: \"deletetable\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.deleterow,\n                        cmdName: \"deleterow\"\n                    },\n                    {\n                        label: lang.deletecol,\n                        cmdName: \"deletecol\"\n                    },\n                    {\n                        label: lang.insertcol,\n                        cmdName: \"insertcol\"\n                    },\n                    {\n                        label: lang.insertcolnext,\n                        cmdName: \"insertcolnext\"\n                    },\n                    {\n                        label: lang.insertrow,\n                        cmdName: \"insertrow\"\n                    },\n                    {\n                        label: lang.insertrownext,\n                        cmdName: \"insertrownext\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.insertcaption,\n                        cmdName: \"insertcaption\"\n                    },\n                    {\n                        label: lang.deletecaption,\n                        cmdName: \"deletecaption\"\n                    },\n                    {\n                        label: lang.inserttitle,\n                        cmdName: \"inserttitle\"\n                    },\n                    {\n                        label: lang.deletetitle,\n                        cmdName: \"deletetitle\"\n                    },\n                    {\n                        label: lang.inserttitlecol,\n                        cmdName: \"inserttitlecol\"\n                    },\n                    {\n                        label: lang.deletetitlecol,\n                        cmdName: \"deletetitlecol\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.mergecells,\n                        cmdName: \"mergecells\"\n                    },\n                    {\n                        label: lang.mergeright,\n                        cmdName: \"mergeright\"\n                    },\n                    {\n                        label: lang.mergedown,\n                        cmdName: \"mergedown\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.splittorows,\n                        cmdName: \"splittorows\"\n                    },\n                    {\n                        label: lang.splittocols,\n                        cmdName: \"splittocols\"\n                    },\n                    {\n                        label: lang.splittocells,\n                        cmdName: \"splittocells\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.averageDiseRow,\n                        cmdName: \"averagedistributerow\"\n                    },\n                    {\n                        label: lang.averageDisCol,\n                        cmdName: \"averagedistributecol\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.edittd,\n                        cmdName: \"edittd\",\n                        exec: function () {\n                            if (UE.ui[\"edittd\"]) {\n                                new UE.ui[\"edittd\"](this);\n                            }\n                            this.getDialog(\"edittd\").open();\n                        }\n                    },\n                    {\n                        label: lang.edittable,\n                        cmdName: \"edittable\",\n                        exec: function () {\n                            if (UE.ui[\"edittable\"]) {\n                                new UE.ui[\"edittable\"](this);\n                            }\n                            this.getDialog(\"edittable\").open();\n                        }\n                    },\n                    {\n                        label: lang.setbordervisible,\n                        cmdName: \"setbordervisible\"\n                    }\n                ]\n            },\n            {\n                group: lang.tablesort,\n                icon: \"tablesort\",\n                subMenu: [\n                    {\n                        label: lang.enablesort,\n                        cmdName: \"enablesort\"\n                    },\n                    {\n                        label: lang.disablesort,\n                        cmdName: \"disablesort\"\n                    },\n                    \"-\",\n                    {\n                        label: lang.reversecurrent,\n                        cmdName: \"sorttable\",\n                        value: \"reversecurrent\"\n                    },\n                    {\n                        label: lang.orderbyasc,\n                        cmdName: \"sorttable\",\n                        value: \"orderbyasc\"\n                    },\n                    {\n                        label: lang.reversebyasc,\n                        cmdName: \"sorttable\",\n                        value: \"reversebyasc\"\n                    },\n                    {\n                        label: lang.orderbynum,\n                        cmdName: \"sorttable\",\n                        value: \"orderbynum\"\n                    },\n                    {\n                        label: lang.reversebynum,\n                        cmdName: \"sorttable\",\n                        value: \"reversebynum\"\n                    }\n                ]\n            },\n            {\n                group: lang.borderbk,\n                icon: \"borderBack\",\n                subMenu: [\n                    {\n                        label: lang.setcolor,\n                        cmdName: \"interlacetable\",\n                        exec: function () {\n                            this.execCommand(\"interlacetable\");\n                        }\n                    },\n                    {\n                        label: lang.unsetcolor,\n                        cmdName: \"uninterlacetable\",\n                        exec: function () {\n                            this.execCommand(\"uninterlacetable\");\n                        }\n                    },\n                    {\n                        label: lang.setbackground,\n                        cmdName: \"settablebackground\",\n                        exec: function () {\n                            this.execCommand(\"settablebackground\", {\n                                repeat: true,\n                                colorList: [\"#bbb\", \"#ccc\"]\n                            });\n                        }\n                    },\n                    {\n                        label: lang.unsetbackground,\n                        cmdName: \"cleartablebackground\",\n                        exec: function () {\n                            this.execCommand(\"cleartablebackground\");\n                        }\n                    },\n                    {\n                        label: lang.redandblue,\n                        cmdName: \"settablebackground\",\n                        exec: function () {\n                            this.execCommand(\"settablebackground\", {\n                                repeat: true,\n                                colorList: [\"red\", \"blue\"]\n                            });\n                        }\n                    },\n                    {\n                        label: lang.threecolorgradient,\n                        cmdName: \"settablebackground\",\n                        exec: function () {\n                            this.execCommand(\"settablebackground\", {\n                                repeat: true,\n                                colorList: [\"#aaa\", \"#bbb\", \"#ccc\"]\n                            });\n                        }\n                    }\n                ]\n            },\n            {\n                group: lang.aligntd,\n                icon: \"aligntd\",\n                subMenu: [\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"left\", vAlign: \"top\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"center\", vAlign: \"top\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"right\", vAlign: \"top\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"left\", vAlign: \"middle\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"center\", vAlign: \"middle\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"right\", vAlign: \"middle\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"left\", vAlign: \"bottom\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"center\", vAlign: \"bottom\"}\n                    },\n                    {\n                        cmdName: \"cellalignment\",\n                        value: {align: \"right\", vAlign: \"bottom\"}\n                    }\n                ]\n            },\n            {\n                group: lang.aligntable,\n                icon: \"aligntable\",\n                subMenu: [\n                    {\n                        cmdName: \"tablealignment\",\n                        className: \"left\",\n                        label: lang.tableleft,\n                        value: \"left\"\n                    },\n                    {\n                        cmdName: \"tablealignment\",\n                        className: \"center\",\n                        label: lang.tablecenter,\n                        value: \"center\"\n                    },\n                    {\n                        cmdName: \"tablealignment\",\n                        className: \"right\",\n                        label: lang.tableright,\n                        value: \"right\"\n                    }\n                ]\n            },\n            \"-\",\n            {\n                label: lang.insertparagraphbefore,\n                cmdName: \"insertparagraph\",\n                value: true\n            },\n            {\n                label: lang.insertparagraphafter,\n                cmdName: \"insertparagraph\"\n            },\n            {\n                label: lang[\"copy\"],\n                cmdName: \"copy\"\n            },\n            {\n                label: lang[\"paste\"],\n                cmdName: \"paste\"\n            }\n        ];\n    if (!items.length) {\n        return;\n    }\n    var uiUtils = UE.ui.uiUtils;\n\n    me.addListener(\"contextmenu\", function (type, evt) {\n        var offset = uiUtils.getViewportOffsetByEvent(evt);\n        me.fireEvent(\"beforeselectionchange\");\n        if (menu) {\n            menu.destroy();\n        }\n        for (var i = 0, ti, contextItems = []; (ti = items[i]); i++) {\n            var last;\n            (function (item) {\n                if (item == \"-\") {\n                    if ((last = contextItems[contextItems.length - 1]) && last !== \"-\") {\n                        contextItems.push(\"-\");\n                    }\n                } else if (item.hasOwnProperty(\"group\")) {\n                    for (var j = 0, cj, subMenu = []; (cj = item.subMenu[j]); j++) {\n                        (function (subItem) {\n                            if (subItem == \"-\") {\n                                if ((last = subMenu[subMenu.length - 1]) && last !== \"-\") {\n                                    subMenu.push(\"-\");\n                                } else {\n                                    subMenu.splice(subMenu.length - 1);\n                                }\n                            } else {\n                                if (\n                                    (me.commands[subItem.cmdName] ||\n                                        UE.commands[subItem.cmdName] ||\n                                        subItem.query) &&\n                                    (subItem.query\n                                        ? subItem.query()\n                                        : me.queryCommandState(subItem.cmdName)) > -1\n                                ) {\n                                    subMenu.push({\n                                        label:\n                                            subItem.label ||\n                                            me.getLang(\n                                                \"contextMenu.\" +\n                                                subItem.cmdName +\n                                                (subItem.value || \"\")\n                                            ) ||\n                                            \"\",\n                                        className:\n                                            \"edui-for-\" +\n                                            subItem.cmdName +\n                                            (subItem.className\n                                                ? \" edui-for-\" +\n                                                subItem.cmdName +\n                                                \"-\" +\n                                                subItem.className\n                                                : \"\"),\n                                        onclick: subItem.exec\n                                            ? function () {\n                                                subItem.exec.call(me);\n                                            }\n                                            : function () {\n                                                me.execCommand(subItem.cmdName, subItem.value);\n                                            }\n                                    });\n                                }\n                            }\n                        })(cj);\n                    }\n                    if (subMenu.length) {\n                        function getLabel() {\n                            switch (item.icon) {\n                                case \"table\":\n                                    return me.getLang(\"contextMenu.table\");\n                                case \"justifyjustify\":\n                                    return me.getLang(\"contextMenu.paragraph\");\n                                case \"aligntd\":\n                                    return me.getLang(\"contextMenu.aligntd\");\n                                case \"aligntable\":\n                                    return me.getLang(\"contextMenu.aligntable\");\n                                case \"tablesort\":\n                                    return lang.tablesort;\n                                case \"borderBack\":\n                                    return lang.borderbk;\n                                default:\n                                    return \"\";\n                            }\n                        }\n\n                        contextItems.push({\n                            //todo 修正成自动获取方式\n                            label: getLabel(),\n                            className: \"edui-for-\" + item.icon,\n                            subMenu: {\n                                items: subMenu,\n                                editor: me\n                            }\n                        });\n                    }\n                } else {\n                    //有可能commmand没有加载右键不能出来，或者没有command也想能展示出来添加query方法\n                    if (\n                        (me.commands[item.cmdName] ||\n                            UE.commands[item.cmdName] ||\n                            item.query) &&\n                        (item.query\n                            ? item.query.call(me)\n                            : me.queryCommandState(item.cmdName)) > -1\n                    ) {\n                        contextItems.push({\n                            label: item.label || me.getLang(\"contextMenu.\" + item.cmdName),\n                            className:\n                                \"edui-for-\" +\n                                (item.icon ? item.icon : item.cmdName + (item.value || \"\")),\n                            onclick: item.exec\n                                ? function () {\n                                    item.exec.call(me);\n                                }\n                                : function () {\n                                    me.execCommand(item.cmdName, item.value);\n                                }\n                        });\n                    }\n                }\n            })(ti);\n        }\n        if (contextItems[contextItems.length - 1] == \"-\") {\n            contextItems.pop();\n        }\n\n        menu = new UE.ui.Menu({\n            items: contextItems,\n            className: \"edui-contextmenu\",\n            editor: me\n        });\n        menu.render();\n        menu.showAt(offset);\n\n        me.fireEvent(\"aftershowcontextmenu\", menu);\n\n        domUtils.preventDefault(evt);\n        if (browser.ie) {\n            var ieRange;\n            try {\n                ieRange = me.selection.getNative().createRange();\n            } catch (e) {\n                return;\n            }\n            if (ieRange.item) {\n                var range = new dom.Range(me.document);\n                range.selectNode(ieRange.item(0)).select(true, true);\n            }\n        }\n    });\n\n    // 添加复制的flash按钮\n    me.addListener(\"aftershowcontextmenu\", function (type, menu) {\n        if (me.zeroclipboard) {\n            var items = menu.items;\n            for (var key in items) {\n                if (items[key].className == \"edui-for-copy\") {\n                    me.zeroclipboard.clip(items[key].getDom());\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/convertcase.js",
    "content": "/**\n * 大小写转换\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 把选区内文本变大写，与“tolowercase”命令互斥\n * @command touppercase\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'touppercase' );\n * ```\n */\n\n/**\n * 把选区内文本变小写，与“touppercase”命令互斥\n * @command tolowercase\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'tolowercase' );\n * ```\n */\nUE.commands[\"touppercase\"] = UE.commands[\"tolowercase\"] = {\n    execCommand: function (cmd) {\n        var me = this;\n        var rng = me.selection.getRange();\n        if (rng.collapsed) {\n            return rng;\n        }\n        var bk = rng.createBookmark(),\n            bkEnd = bk.end,\n            filterFn = function (node) {\n                return !domUtils.isBr(node) && !domUtils.isWhitespace(node);\n            },\n            curNode = domUtils.getNextDomNode(bk.start, false, filterFn);\n        while (\n            curNode &&\n            domUtils.getPosition(curNode, bkEnd) & domUtils.POSITION_PRECEDING\n            ) {\n            if (curNode.nodeType == 3) {\n                curNode.nodeValue = curNode.nodeValue[\n                    cmd == \"touppercase\" ? \"toUpperCase\" : \"toLowerCase\"\n                    ]();\n            }\n            curNode = domUtils.getNextDomNode(curNode, true, filterFn);\n            if (curNode === bkEnd) {\n                break;\n            }\n        }\n        rng.moveToBookmark(bk).select();\n    }\n};\n"
  },
  {
    "path": "_src/plugins/copy.js",
    "content": "UE.plugin.register(\"copy\", function () {\n    var me = this;\n\n    function initZeroClipboard() {\n        ZeroClipboard.config({\n            debug: false,\n            swfPath:\n                me.options.UEDITOR_HOME_URL +\n                \"third-party/zeroclipboard/ZeroClipboard.swf\"\n        });\n\n        var client = (me.zeroclipboard = new ZeroClipboard());\n\n        // 复制内容\n        client.on(\"copy\", function (e) {\n            var client = e.client,\n                rng = me.selection.getRange(),\n                div = document.createElement(\"div\");\n\n            div.appendChild(rng.cloneContents());\n            client.setText(div.innerText || div.textContent);\n            client.setHtml(div.innerHTML);\n            rng.select();\n        });\n        // hover事件传递到target\n        client.on(\"mouseover mouseout\", function (e) {\n            var target = e.target;\n            if (target) {\n                if (e.type == \"mouseover\") {\n                    domUtils.addClass(target, \"edui-state-hover\");\n                } else if (e.type == \"mouseout\") {\n                    domUtils.removeClasses(target, \"edui-state-hover\");\n                }\n            }\n        });\n        // flash加载不成功\n        client.on(\"wrongflash noflash\", function () {\n            ZeroClipboard.destroy();\n        });\n\n        // 触发事件\n        me.fireEvent(\"zeroclipboardready\", client);\n    }\n\n    return {\n        bindEvents: {\n            ready: function () {\n                if (!browser.ie) {\n                    if (window.ZeroClipboard) {\n                        initZeroClipboard();\n                    } else {\n                        utils.loadFile(\n                            document,\n                            {\n                                src:\n                                    me.options.UEDITOR_HOME_URL +\n                                    \"third-party/zeroclipboard/ZeroClipboard.js\",\n                                tag: \"script\",\n                                type: \"text/javascript\",\n                                defer: \"defer\"\n                            },\n                            function () {\n                                initZeroClipboard();\n                            }\n                        );\n                    }\n                }\n            }\n        },\n        commands: {\n            copy: {\n                execCommand: function (cmd) {\n                    if (!me.document.execCommand(\"copy\")) {\n                        alert(me.getLang(\"copymsg\"));\n                    }\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/customstyle.js",
    "content": "/**\n * 自定义样式\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 根据config配置文件里“customstyle”选项的值对匹配的标签执行样式替换。\n * @command customstyle\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'customstyle' );\n * ```\n */\nUE.plugins[\"customstyle\"] = function () {\n    var me = this;\n    me.setOpt({\n        customstyle: [\n            {\n                tag: \"h1\",\n                name: \"tc\",\n                style:\n                    \"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;\"\n            },\n            {\n                tag: \"h1\",\n                name: \"tl\",\n                style:\n                    \"font-size:32px;line-height:40px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;\"\n            },\n            {\n                tag: \"span\",\n                name: \"im\",\n                style:\n                    \"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;\"\n            },\n            {\n                tag: \"span\",\n                name: \"hi\",\n                style:\n                    \"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;\"\n            }\n        ]\n    });\n    me.commands[\"customstyle\"] = {\n        execCommand: function (cmdName, obj) {\n            var me = this,\n                tagName = obj.tag,\n                node = domUtils.findParent(\n                    me.selection.getStart(),\n                    function (node) {\n                        return node.getAttribute(\"label\");\n                    },\n                    true\n                ),\n                range,\n                bk,\n                tmpObj = {};\n            for (var p in obj) {\n                if (obj[p] !== undefined) tmpObj[p] = obj[p];\n            }\n            delete tmpObj.tag;\n            if (node && node.getAttribute(\"label\") == obj.label) {\n                range = this.selection.getRange();\n                bk = range.createBookmark();\n                if (range.collapsed) {\n                    //trace:1732 删掉自定义标签，要有p来回填站位\n                    if (dtd.$block[node.tagName]) {\n                        var fillNode = me.document.createElement(\"p\");\n                        domUtils.moveChild(node, fillNode);\n                        node.parentNode.insertBefore(fillNode, node);\n                        domUtils.remove(node);\n                    } else {\n                        domUtils.remove(node, true);\n                    }\n                } else {\n                    var common = domUtils.getCommonAncestor(bk.start, bk.end),\n                        nodes = domUtils.getElementsByTagName(common, tagName);\n                    if (new RegExp(tagName, \"i\").test(common.tagName)) {\n                        nodes.push(common);\n                    }\n                    for (var i = 0, ni; (ni = nodes[i++]);) {\n                        if (ni.getAttribute(\"label\") == obj.label) {\n                            var ps = domUtils.getPosition(ni, bk.start),\n                                pe = domUtils.getPosition(ni, bk.end);\n                            if (\n                                (ps & domUtils.POSITION_FOLLOWING ||\n                                    ps & domUtils.POSITION_CONTAINS) &&\n                                (pe & domUtils.POSITION_PRECEDING ||\n                                    pe & domUtils.POSITION_CONTAINS)\n                            )\n                                if (dtd.$block[tagName]) {\n                                    var fillNode = me.document.createElement(\"p\");\n                                    domUtils.moveChild(ni, fillNode);\n                                    ni.parentNode.insertBefore(fillNode, ni);\n                                }\n                            domUtils.remove(ni, true);\n                        }\n                    }\n                    node = domUtils.findParent(\n                        common,\n                        function (node) {\n                            return node.getAttribute(\"label\") == obj.label;\n                        },\n                        true\n                    );\n                    if (node) {\n                        domUtils.remove(node, true);\n                    }\n                }\n                range.moveToBookmark(bk).select();\n            } else {\n                if (dtd.$block[tagName]) {\n                    this.execCommand(\"paragraph\", tagName, tmpObj, \"customstyle\");\n                    range = me.selection.getRange();\n                    if (!range.collapsed) {\n                        range.collapse();\n                        node = domUtils.findParent(\n                            me.selection.getStart(),\n                            function (node) {\n                                return node.getAttribute(\"label\") == obj.label;\n                            },\n                            true\n                        );\n                        var pNode = me.document.createElement(\"p\");\n                        domUtils.insertAfter(node, pNode);\n                        domUtils.fillNode(me.document, pNode);\n                        range.setStart(pNode, 0).setCursor();\n                    }\n                } else {\n                    range = me.selection.getRange();\n                    if (range.collapsed) {\n                        node = me.document.createElement(tagName);\n                        domUtils.setAttributes(node, tmpObj);\n                        range.insertNode(node).setStart(node, 0).setCursor();\n\n                        return;\n                    }\n\n                    bk = range.createBookmark();\n                    range.applyInlineStyle(tagName, tmpObj).moveToBookmark(bk).select();\n                }\n            }\n        },\n        queryCommandValue: function () {\n            var parent = domUtils.filterNodeList(\n                this.selection.getStartElementPath(),\n                function (node) {\n                    return node.getAttribute(\"label\");\n                }\n            );\n            return parent ? parent.getAttribute(\"label\") : \"\";\n        }\n    };\n    //当去掉customstyle是，如果是块元素，用p代替\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n\n        if (keyCode == 32 || keyCode == 13) {\n            var range = me.selection.getRange();\n            if (range.collapsed) {\n                var node = domUtils.findParent(\n                    me.selection.getStart(),\n                    function (node) {\n                        return node.getAttribute(\"label\");\n                    },\n                    true\n                );\n                if (node && dtd.$block[node.tagName] && domUtils.isEmptyNode(node)) {\n                    var p = me.document.createElement(\"p\");\n                    domUtils.insertAfter(node, p);\n                    domUtils.fillNode(me.document, p);\n                    domUtils.remove(node);\n                    range.setStart(p, 0).setCursor();\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/defaultfilter.js",
    "content": "///import core\n///plugin 编辑器默认的过滤转换机制\n\nUE.plugins[\"defaultfilter\"] = function () {\n    var me = this;\n    me.setOpt({\n        allowDivTransToP: true,\n        disabledTableInTable: true,\n        rgb2Hex: true\n    });\n    //默认的过滤处理\n    //进入编辑器的内容处理\n    me.addInputRule(function (root) {\n        var allowDivTransToP = this.options.allowDivTransToP;\n        var val;\n\n        function tdParent(node) {\n            while (node && node.type == \"element\") {\n                if (node.tagName == \"td\") {\n                    return true;\n                }\n                node = node.parentNode;\n            }\n            return false;\n        }\n\n        //进行默认的处理\n        root.traversal(function (node) {\n            if (node.type == \"element\") {\n                if (\n                    !dtd.$cdata[node.tagName] &&\n                    me.options.autoClearEmptyNode &&\n                    dtd.$inline[node.tagName] &&\n                    !dtd.$empty[node.tagName] &&\n                    (!node.attrs || utils.isEmptyObject(node.attrs))\n                ) {\n                    if (!node.firstChild()) node.parentNode.removeChild(node);\n                    else if (\n                        node.tagName == \"span\" &&\n                        (!node.attrs || utils.isEmptyObject(node.attrs))\n                    ) {\n                        node.parentNode.removeChild(node, true);\n                    }\n                    return;\n                }\n                switch (node.tagName) {\n                    case \"style\":\n                    case \"script\":\n                        node.setAttr({\n                            cdata_tag: node.tagName,\n                            cdata_data: node.innerHTML() || \"\",\n                            _ue_custom_node_: \"true\"\n                        });\n                        node.tagName = \"div\";\n                        node.innerHTML(\"\");\n                        break;\n                    case \"a\":\n                        if ((val = node.getAttr(\"href\"))) {\n                            node.setAttr(\"_href\", val);\n                        }\n                        break;\n                    case \"img\":\n                        //todo base64暂时去掉，后边做远程图片上传后，干掉这个\n                        if ((val = node.getAttr(\"src\"))) {\n                            if (/^data:/.test(val)) {\n                                node.parentNode.removeChild(node);\n                                break;\n                            }\n                        }\n                        node.setAttr(\"_src\", node.getAttr(\"src\"));\n                        break;\n                    case \"span\":\n                        if (browser.webkit && (val = node.getStyle(\"white-space\"))) {\n                            if (/nowrap|normal/.test(val)) {\n                                node.setStyle(\"white-space\", \"\");\n                                if (\n                                    me.options.autoClearEmptyNode &&\n                                    utils.isEmptyObject(node.attrs)\n                                ) {\n                                    node.parentNode.removeChild(node, true);\n                                }\n                            }\n                        }\n                        val = node.getAttr(\"id\");\n                        if (val && /^_baidu_bookmark_/i.test(val)) {\n                            node.parentNode.removeChild(node);\n                        }\n                        break;\n                    case \"p\":\n                        if ((val = node.getAttr(\"align\"))) {\n                            node.setAttr(\"align\");\n                            node.setStyle(\"text-align\", val);\n                        }\n                        //trace:3431\n                        //                        var cssStyle = node.getAttr('style');\n                        //                        if (cssStyle) {\n                        //                            cssStyle = cssStyle.replace(/(margin|padding)[^;]+/g, '');\n                        //                            node.setAttr('style', cssStyle)\n                        //\n                        //                        }\n                        //p标签不允许嵌套\n                        utils.each(node.children, function (n) {\n                            if (n.type == \"element\" && n.tagName == \"p\") {\n                                var next = n.nextSibling();\n                                node.parentNode.insertAfter(n, node);\n                                var last = n;\n                                while (next) {\n                                    var tmp = next.nextSibling();\n                                    node.parentNode.insertAfter(next, last);\n                                    last = next;\n                                    next = tmp;\n                                }\n                                return false;\n                            }\n                        });\n                        if (!node.firstChild()) {\n                            node.innerHTML(browser.ie ? \"&nbsp;\" : \"<br/>\");\n                        }\n                        break;\n                    case \"div\":\n                        if (node.getAttr(\"cdata_tag\")) {\n                            break;\n                        }\n                        //针对代码这里不处理插入代码的div\n                        val = node.getAttr(\"class\");\n                        if (val && /^line number\\d+/.test(val)) {\n                            break;\n                        }\n                        if (!allowDivTransToP) {\n                            break;\n                        }\n                        var tmpNode,\n                            p = UE.uNode.createElement(\"p\");\n                        while ((tmpNode = node.firstChild())) {\n                            if (\n                                tmpNode.type == \"text\" ||\n                                !UE.dom.dtd.$block[tmpNode.tagName]\n                            ) {\n                                p.appendChild(tmpNode);\n                            } else {\n                                if (p.firstChild()) {\n                                    node.parentNode.insertBefore(p, node);\n                                    p = UE.uNode.createElement(\"p\");\n                                } else {\n                                    node.parentNode.insertBefore(tmpNode, node);\n                                }\n                            }\n                        }\n                        if (p.firstChild()) {\n                            node.parentNode.insertBefore(p, node);\n                        }\n                        node.parentNode.removeChild(node);\n                        break;\n                    case \"dl\":\n                        node.tagName = \"ul\";\n                        break;\n                    case \"dt\":\n                    case \"dd\":\n                        node.tagName = \"li\";\n                        break;\n                    case \"li\":\n                        var className = node.getAttr(\"class\");\n                        if (!className || !/list\\-/.test(className)) {\n                            node.setAttr();\n                        }\n                        var tmpNodes = node.getNodesByTagName(\"ol ul\");\n                        UE.utils.each(tmpNodes, function (n) {\n                            node.parentNode.insertAfter(n, node);\n                        });\n                        break;\n                    case \"td\":\n                    case \"th\":\n                    case \"caption\":\n                        if (!node.children || !node.children.length) {\n                            node.appendChild(\n                                browser.ie11below\n                                    ? UE.uNode.createText(\" \")\n                                    : UE.uNode.createElement(\"br\")\n                            );\n                        }\n                        break;\n                    case \"table\":\n                        if (me.options.disabledTableInTable && tdParent(node)) {\n                            node.parentNode.insertBefore(\n                                UE.uNode.createText(node.innerText()),\n                                node\n                            );\n                            node.parentNode.removeChild(node);\n                        }\n                }\n            }\n            //            if(node.type == 'comment'){\n            //                node.parentNode.removeChild(node);\n            //            }\n        });\n    });\n\n    //从编辑器出去的内容处理\n    me.addOutputRule(function (root) {\n        var val;\n        root.traversal(function (node) {\n            if (node.type == \"element\") {\n                if (\n                    me.options.autoClearEmptyNode &&\n                    dtd.$inline[node.tagName] &&\n                    !dtd.$empty[node.tagName] &&\n                    (!node.attrs || utils.isEmptyObject(node.attrs))\n                ) {\n                    if (!node.firstChild()) node.parentNode.removeChild(node);\n                    else if (\n                        node.tagName == \"span\" &&\n                        (!node.attrs || utils.isEmptyObject(node.attrs))\n                    ) {\n                        node.parentNode.removeChild(node, true);\n                    }\n                    return;\n                }\n                switch (node.tagName) {\n                    case \"div\":\n                        if ((val = node.getAttr(\"cdata_tag\"))) {\n                            node.tagName = val;\n                            node.appendChild(UE.uNode.createText(node.getAttr(\"cdata_data\")));\n                            node.setAttr({\n                                cdata_tag: \"\",\n                                cdata_data: \"\",\n                                _ue_custom_node_: \"\"\n                            });\n                        }\n                        break;\n                    case \"a\":\n                        if ((val = node.getAttr(\"_href\"))) {\n                            node.setAttr({\n                                href: utils.html(val),\n                                _href: \"\"\n                            });\n                        }\n                        break;\n                        break;\n                    case \"span\":\n                        val = node.getAttr(\"id\");\n                        if (val && /^_baidu_bookmark_/i.test(val)) {\n                            node.parentNode.removeChild(node);\n                        }\n                        //将color的rgb格式转换为#16进制格式\n                        if (me.getOpt(\"rgb2Hex\")) {\n                            var cssStyle = node.getAttr(\"style\");\n                            if (cssStyle) {\n                                node.setAttr(\n                                    \"style\",\n                                    cssStyle.replace(/rgba?\\(([\\d,\\s]+)\\)/g, function (a, value) {\n                                        var array = value.split(\",\");\n                                        if (array.length > 3) return \"\";\n                                        value = \"#\";\n                                        for (var i = 0, color; (color = array[i++]);) {\n                                            color = parseInt(\n                                                color.replace(/[^\\d]/gi, \"\"),\n                                                10\n                                            ).toString(16);\n                                            value += color.length == 1 ? \"0\" + color : color;\n                                        }\n                                        return value.toUpperCase();\n                                    })\n                                );\n                            }\n                        }\n                        break;\n                    case \"img\":\n                        if ((val = node.getAttr(\"_src\"))) {\n                            node.setAttr({\n                                src: node.getAttr(\"_src\"),\n                                _src: \"\"\n                            });\n                        }\n                }\n            }\n        });\n    });\n};\n"
  },
  {
    "path": "_src/plugins/directionality.js",
    "content": "/**\n * 设置文字输入的方向的插件\n * @file\n * @since 1.2.6.1\n */\n(function () {\n    var block = domUtils.isBlockElm,\n        getObj = function (editor) {\n            //            var startNode = editor.selection.getStart(),\n            //                parents;\n            //            if ( startNode ) {\n            //                //查找所有的是block的父亲节点\n            //                parents = domUtils.findParents( startNode, true, block, true );\n            //                for ( var i = 0,ci; ci = parents[i++]; ) {\n            //                    if ( ci.getAttribute( 'dir' ) ) {\n            //                        return ci;\n            //                    }\n            //                }\n            //            }\n            return domUtils.filterNodeList(\n                editor.selection.getStartElementPath(),\n                function (n) {\n                    return n && n.nodeType == 1 && n.getAttribute(\"dir\");\n                }\n            );\n        },\n        doDirectionality = function (range, editor, forward) {\n            var bookmark,\n                filterFn = function (node) {\n                    return node.nodeType == 1\n                        ? !domUtils.isBookmarkNode(node)\n                        : !domUtils.isWhitespace(node);\n                },\n                obj = getObj(editor);\n\n            if (obj && range.collapsed) {\n                obj.setAttribute(\"dir\", forward);\n                return range;\n            }\n            bookmark = range.createBookmark();\n            range.enlarge(true);\n            var bookmark2 = range.createBookmark(),\n                current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),\n                tmpRange = range.cloneRange(),\n                tmpNode;\n            while (\n                current &&\n                !(\n                    domUtils.getPosition(current, bookmark2.end) &\n                    domUtils.POSITION_FOLLOWING\n                )\n                ) {\n                if (current.nodeType == 3 || !block(current)) {\n                    tmpRange.setStartBefore(current);\n                    while (current && current !== bookmark2.end && !block(current)) {\n                        tmpNode = current;\n                        current = domUtils.getNextDomNode(current, false, null, function (\n                            node\n                        ) {\n                            return !block(node);\n                        });\n                    }\n                    tmpRange.setEndAfter(tmpNode);\n                    var common = tmpRange.getCommonAncestor();\n                    if (!domUtils.isBody(common) && block(common)) {\n                        //遍历到了block节点\n                        common.setAttribute(\"dir\", forward);\n                        current = common;\n                    } else {\n                        //没有遍历到，添加一个block节点\n                        var p = range.document.createElement(\"p\");\n                        p.setAttribute(\"dir\", forward);\n                        var frag = tmpRange.extractContents();\n                        p.appendChild(frag);\n                        tmpRange.insertNode(p);\n                        current = p;\n                    }\n\n                    current = domUtils.getNextDomNode(current, false, filterFn);\n                } else {\n                    current = domUtils.getNextDomNode(current, true, filterFn);\n                }\n            }\n            return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);\n        };\n\n    /**\n     * 文字输入方向\n     * @command directionality\n     * @method execCommand\n     * @param { String } cmdName 命令字符串\n     * @param { String } forward 传入'ltr'表示从左向右输入，传入'rtl'表示从右向左输入\n     * @example\n     * ```javascript\n     * editor.execCommand( 'directionality', 'ltr');\n     * ```\n     */\n\n    /**\n     * 查询当前选区的文字输入方向\n     * @command directionality\n     * @method queryCommandValue\n     * @param { String } cmdName 命令字符串\n     * @return { String } 返回'ltr'表示从左向右输入，返回'rtl'表示从右向左输入\n     * @example\n     * ```javascript\n     * editor.queryCommandValue( 'directionality');\n     * ```\n     */\n    UE.commands[\"directionality\"] = {\n        execCommand: function (cmdName, forward) {\n            var range = this.selection.getRange();\n            //闭合时单独处理\n            if (range.collapsed) {\n                var txt = this.document.createTextNode(\"d\");\n                range.insertNode(txt);\n            }\n            doDirectionality(range, this, forward);\n            if (txt) {\n                range.setStartBefore(txt).collapse(true);\n                domUtils.remove(txt);\n            }\n\n            range.select();\n            return true;\n        },\n        queryCommandValue: function () {\n            var node = getObj(this);\n            return node ? node.getAttribute(\"dir\") : \"ltr\";\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/plugins/dragdrop.js",
    "content": "UE.plugins[\"dragdrop\"] = function () {\n    var me = this;\n    me.ready(function () {\n        domUtils.on(this.body, \"dragend\", function () {\n            var rng = me.selection.getRange();\n            var node = rng.getClosedNode() || me.selection.getStart();\n\n            if (node && node.tagName == \"IMG\") {\n                var pre = node.previousSibling,\n                    next;\n                while ((next = node.nextSibling)) {\n                    if (\n                        next.nodeType == 1 &&\n                        next.tagName == \"SPAN\" &&\n                        !next.firstChild\n                    ) {\n                        domUtils.remove(next);\n                    } else {\n                        break;\n                    }\n                }\n\n                if (\n                    ((pre && pre.nodeType == 1 && !domUtils.isEmptyBlock(pre)) || !pre) &&\n                    (!next || (next && !domUtils.isEmptyBlock(next)))\n                ) {\n                    if (pre && pre.tagName == \"P\" && !domUtils.isEmptyBlock(pre)) {\n                        pre.appendChild(node);\n                        domUtils.moveChild(next, pre);\n                        domUtils.remove(next);\n                    } else if (\n                        next &&\n                        next.tagName == \"P\" &&\n                        !domUtils.isEmptyBlock(next)\n                    ) {\n                        next.insertBefore(node, next.firstChild);\n                    }\n\n                    if (pre && pre.tagName == \"P\" && domUtils.isEmptyBlock(pre)) {\n                        domUtils.remove(pre);\n                    }\n                    if (next && next.tagName == \"P\" && domUtils.isEmptyBlock(next)) {\n                        domUtils.remove(next);\n                    }\n                    rng.selectNode(node).select();\n                    me.fireEvent(\"saveScene\");\n                }\n            }\n        });\n    });\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n        if (keyCode == 13) {\n            var rng = me.selection.getRange(),\n                node;\n            if (\n                (node = domUtils.findParentByTagName(rng.startContainer, \"p\", true))\n            ) {\n                if (domUtils.getComputedStyle(node, \"text-align\") == \"center\") {\n                    domUtils.removeStyle(node, \"text-align\");\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/elementpath.js",
    "content": "/**\n * 选取路径命令\n * @file\n */\nUE.plugins[\"elementpath\"] = function () {\n    var currentLevel,\n        tagNames,\n        me = this;\n    me.setOpt(\"elementPathEnabled\", true);\n    if (!me.options.elementPathEnabled) {\n        return;\n    }\n    me.commands[\"elementpath\"] = {\n        execCommand: function (cmdName, level) {\n            var start = tagNames[level],\n                range = me.selection.getRange();\n            currentLevel = level * 1;\n            range.selectNode(start).select();\n        },\n        queryCommandValue: function () {\n            //产生一个副本，不能修改原来的startElementPath;\n            var parents = [].concat(this.selection.getStartElementPath()).reverse(),\n                names = [];\n            tagNames = parents;\n            for (var i = 0, ci; (ci = parents[i]); i++) {\n                if (ci.nodeType == 3) {\n                    continue;\n                }\n                var name = ci.tagName.toLowerCase();\n                if (name == \"img\" && ci.getAttribute(\"anchorname\")) {\n                    name = \"anchor\";\n                }\n                names[i] = name;\n                if (currentLevel == i) {\n                    currentLevel = -1;\n                    break;\n                }\n            }\n            return names;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/enterkey.js",
    "content": "///import core\n///import plugins/undo.js\n///commands 设置回车标签p或br\n///commandsName  EnterKey\n///commandsTitle  设置回车标签p或br\n/**\n * @description 处理回车\n * @author zhanyi\n */\nUE.plugins[\"enterkey\"] = function () {\n    var hTag,\n        me = this,\n        tag = me.options.enterTag;\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n        if (keyCode == 13) {\n            var range = me.selection.getRange(),\n                start = range.startContainer,\n                doSave;\n\n            //修正在h1-h6里边回车后不能嵌套p的问题\n            if (!browser.ie) {\n                if (/h\\d/i.test(hTag)) {\n                    if (browser.gecko) {\n                        var h = domUtils.findParentByTagName(\n                            start,\n                            [\n                                \"h1\",\n                                \"h2\",\n                                \"h3\",\n                                \"h4\",\n                                \"h5\",\n                                \"h6\",\n                                \"blockquote\",\n                                \"caption\",\n                                \"table\"\n                            ],\n                            true\n                        );\n                        if (!h) {\n                            me.document.execCommand(\"formatBlock\", false, \"<p>\");\n                            doSave = 1;\n                        }\n                    } else {\n                        //chrome remove div\n                        if (start.nodeType == 1) {\n                            var tmp = me.document.createTextNode(\"\"),\n                                div;\n                            range.insertNode(tmp);\n                            div = domUtils.findParentByTagName(tmp, \"div\", true);\n                            if (div) {\n                                var p = me.document.createElement(\"p\");\n                                while (div.firstChild) {\n                                    p.appendChild(div.firstChild);\n                                }\n                                div.parentNode.insertBefore(p, div);\n                                domUtils.remove(div);\n                                range.setStartBefore(tmp).setCursor();\n                                doSave = 1;\n                            }\n                            domUtils.remove(tmp);\n                        }\n                    }\n\n                    if (me.undoManger && doSave) {\n                        me.undoManger.save();\n                    }\n                }\n                //没有站位符，会出现多行的问题\n                browser.opera && range.select();\n            } else {\n                me.fireEvent(\"saveScene\", true, true);\n            }\n        }\n    });\n\n    me.addListener(\"keydown\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n        if (keyCode == 13) {\n            //回车\n            if (me.fireEvent(\"beforeenterkeydown\")) {\n                domUtils.preventDefault(evt);\n                return;\n            }\n            me.fireEvent(\"saveScene\", true, true);\n            hTag = \"\";\n\n            var range = me.selection.getRange();\n\n            if (!range.collapsed) {\n                //跨td不能删\n                var start = range.startContainer,\n                    end = range.endContainer,\n                    startTd = domUtils.findParentByTagName(start, \"td\", true),\n                    endTd = domUtils.findParentByTagName(end, \"td\", true);\n                if (\n                    (startTd && endTd && startTd !== endTd) ||\n                    (!startTd && endTd) ||\n                    (startTd && !endTd)\n                ) {\n                    evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);\n                    return;\n                }\n            }\n            if (tag == \"p\") {\n                if (!browser.ie) {\n                    start = domUtils.findParentByTagName(\n                        range.startContainer,\n                        [\n                            \"ol\",\n                            \"ul\",\n                            \"p\",\n                            \"h1\",\n                            \"h2\",\n                            \"h3\",\n                            \"h4\",\n                            \"h5\",\n                            \"h6\",\n                            \"blockquote\",\n                            \"caption\"\n                        ],\n                        true\n                    );\n\n                    //opera下执行formatblock会在table的场景下有问题，回车在opera原生支持很好，所以暂时在opera去掉调用这个原生的command\n                    //trace:2431\n                    if (!start && !browser.opera) {\n                        me.document.execCommand(\"formatBlock\", false, \"<p>\");\n\n                        if (browser.gecko) {\n                            range = me.selection.getRange();\n                            start = domUtils.findParentByTagName(\n                                range.startContainer,\n                                \"p\",\n                                true\n                            );\n                            start && domUtils.removeDirtyAttr(start);\n                        }\n                    } else {\n                        hTag = start.tagName;\n                        start.tagName.toLowerCase() == \"p\" &&\n                        browser.gecko &&\n                        domUtils.removeDirtyAttr(start);\n                    }\n                }\n            } else {\n                evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);\n\n                if (!range.collapsed) {\n                    range.deleteContents();\n                    start = range.startContainer;\n                    if (\n                        start.nodeType == 1 &&\n                        (start = start.childNodes[range.startOffset])\n                    ) {\n                        while (start.nodeType == 1) {\n                            if (dtd.$empty[start.tagName]) {\n                                range.setStartBefore(start).setCursor();\n                                if (me.undoManger) {\n                                    me.undoManger.save();\n                                }\n                                return false;\n                            }\n                            if (!start.firstChild) {\n                                var br = range.document.createElement(\"br\");\n                                start.appendChild(br);\n                                range.setStart(start, 0).setCursor();\n                                if (me.undoManger) {\n                                    me.undoManger.save();\n                                }\n                                return false;\n                            }\n                            start = start.firstChild;\n                        }\n                        if (start === range.startContainer.childNodes[range.startOffset]) {\n                            br = range.document.createElement(\"br\");\n                            range.insertNode(br).setCursor();\n                        } else {\n                            range.setStart(start, 0).setCursor();\n                        }\n                    } else {\n                        br = range.document.createElement(\"br\");\n                        range.insertNode(br).setStartAfter(br).setCursor();\n                    }\n                } else {\n                    br = range.document.createElement(\"br\");\n                    range.insertNode(br);\n                    var parent = br.parentNode;\n                    if (parent.lastChild === br) {\n                        br.parentNode.insertBefore(br.cloneNode(true), br);\n                        range.setStartBefore(br);\n                    } else {\n                        range.setStartAfter(br);\n                    }\n                    range.setCursor();\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/fiximgclick.js",
    "content": "///import core\n///commands 修复chrome下图片不能点击的问题，出现八个角可改变大小\n///commandsName  FixImgClick\n///commandsTitle  修复chrome下图片不能点击的问题，出现八个角可改变大小\n//修复chrome下图片不能点击的问题，出现八个角可改变大小\n\nUE.plugins[\"fiximgclick\"] = (function () {\n    var elementUpdated = false;\n\n    function Scale() {\n        this.editor = null;\n        this.resizer = null;\n        this.cover = null;\n        this.doc = document;\n        this.prePos = {x: 0, y: 0};\n        this.startPos = {x: 0, y: 0};\n    }\n\n    (function () {\n        var rect = [\n            //[left, top, width, height]\n            [0, 0, -1, -1],\n            [0, 0, 0, -1],\n            [0, 0, 1, -1],\n            [0, 0, -1, 0],\n            [0, 0, 1, 0],\n            [0, 0, -1, 1],\n            [0, 0, 0, 1],\n            [0, 0, 1, 1]\n        ];\n\n        Scale.prototype = {\n            init: function (editor) {\n                var me = this;\n                me.editor = editor;\n                me.startPos = this.prePos = {x: 0, y: 0};\n                me.dragId = -1;\n\n                var hands = [],\n                    cover = (me.cover = document.createElement(\"div\")),\n                    resizer = (me.resizer = document.createElement(\"div\"));\n\n                cover.id = me.editor.ui.id + \"_imagescale_cover\";\n                cover.style.cssText =\n                    \"position:absolute;display:none;z-index:\" +\n                    me.editor.options.zIndex +\n                    \";filter:alpha(opacity=0); opacity:0;background:#CCC;\";\n                domUtils.on(cover, \"mousedown\", function (e) {\n                    me.hide();\n                });\n\n                for (var i = 0; i < 8; i++) {\n                    hands.push(\n                        '<span class=\"edui-editor-imagescale-hand' + i + '\"></span>'\n                    );\n                }\n                resizer.id = me.editor.ui.id + \"_imagescale\";\n                resizer.className = \"edui-editor-imagescale\";\n                resizer.innerHTML = hands.join(\"\");\n                resizer.style.cssText +=\n                    \";display:none;border:1px solid #3b77ff;z-index:\" +\n                    me.editor.options.zIndex +\n                    \";\";\n\n                me.editor.ui.getDom().appendChild(cover);\n                me.editor.ui.getDom().appendChild(resizer);\n\n                me.initStyle();\n                me.initEvents();\n            },\n            initStyle: function () {\n                utils.cssRule(\n                    \"imagescale\",\n                    \".edui-editor-imagescale{display:none;position:absolute;border:1px solid #38B2CE;cursor:hand;-webkit-box-sizing: content-box;-moz-box-sizing: content-box;box-sizing: content-box;}\" +\n                    \".edui-editor-imagescale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}\" +\n                    \".edui-editor-imagescale .edui-editor-imagescale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}\"\n                );\n            },\n            initEvents: function () {\n                var me = this;\n\n                me.startPos.x = me.startPos.y = 0;\n                me.isDraging = false;\n            },\n            _eventHandler: function (e) {\n                var me = this;\n                switch (e.type) {\n                    case \"mousedown\":\n                        var hand = e.target || e.srcElement,\n                            hand;\n                        if (\n                            hand.className.indexOf(\"edui-editor-imagescale-hand\") !== -1 &&\n                            me.dragId === -1\n                        ) {\n                            me.dragId = hand.className.slice(-1);\n                            me.startPos.x = me.prePos.x = e.clientX;\n                            me.startPos.y = me.prePos.y = e.clientY;\n                            domUtils.on(me.doc, \"mousemove\", me.proxy(me._eventHandler, me));\n                        }\n                        break;\n                    case \"mousemove\":\n                        if (me.dragId !== -1) {\n                            me.updateContainerStyle(me.dragId, {\n                                x: e.clientX - me.prePos.x,\n                                y: e.clientY - me.prePos.y\n                            });\n                            me.prePos.x = e.clientX;\n                            me.prePos.y = e.clientY;\n                            elementUpdated = true;\n                            me.updateTargetElement();\n                        }\n                        break;\n                    case \"mouseup\":\n                        if (me.dragId !== -1) {\n                            me.updateContainerStyle(me.dragId, {\n                                x: e.clientX - me.prePos.x,\n                                y: e.clientY - me.prePos.y\n                            });\n                            me.updateTargetElement();\n                            if (me.target.parentNode) {\n                                me.attachTo(me.target);\n                            }\n                            me.dragId = -1;\n                        }\n                        domUtils.un(me.doc, \"mousemove\", me.proxy(me._eventHandler, me));\n                        //修复只是点击挪动点，但没有改变大小，不应该触发contentchange\n                        if (elementUpdated) {\n                            elementUpdated = false;\n                            me.editor.fireEvent(\"contentchange\");\n                        }\n\n                        break;\n                    default:\n                        break;\n                }\n            },\n            updateTargetElement: function () {\n                var me = this;\n                // 拿到图片的原始大小\n                var o_width = me.target.naturalWidth;\n                var o_height = me.target.naturalHeight;\n        \n                // 计算出原始图片比例\n                var o_scale = (o_width / o_height).toFixed(4);\n        \n                // 再拿到图片现在的大小，可能是变形的Ï\n                var width = parseInt(me.resizer.style.width);\n                var height = parseInt(me.resizer.style.height);\n        \n                // 判断改变的是宽度还是高度\n                if (rect[me.dragId][2] != 0) {\n                  height = width / o_scale;\n                } else if (rect[me.dragId][3] != 0) {\n                  width = height * o_scale;\n                }\n        \n                domUtils.setStyles(me.target, {\n                  width: width + \"px\",\n                  height: height + \"px\",\n                });\n                me.target.width = width;\n                me.target.height = height;\n                me.attachTo(me.target);\n            },\n            updateContainerStyle: function (dir, offset) {\n                var me = this,\n                    dom = me.resizer,\n                    tmp;\n\n                if (rect[dir][0] != 0) {\n                    tmp = parseInt(dom.style.left) + offset.x;\n                    dom.style.left = me._validScaledProp(\"left\", tmp) + \"px\";\n                }\n                if (rect[dir][1] != 0) {\n                    tmp = parseInt(dom.style.top) + offset.y;\n                    dom.style.top = me._validScaledProp(\"top\", tmp) + \"px\";\n                }\n                if (rect[dir][2] != 0) {\n                    tmp = dom.clientWidth + rect[dir][2] * offset.x;\n                    dom.style.width = me._validScaledProp(\"width\", tmp) + \"px\";\n                }\n                if (rect[dir][3] != 0) {\n                    tmp = dom.clientHeight + rect[dir][3] * offset.y;\n                    dom.style.height = me._validScaledProp(\"height\", tmp) + \"px\";\n                }\n            },\n            _validScaledProp: function (prop, value) {\n                var ele = this.resizer,\n                    wrap = document;\n\n                value = isNaN(value) ? 0 : value;\n                switch (prop) {\n                    case \"left\":\n                        return value < 0\n                            ? 0\n                            : value + ele.clientWidth > wrap.clientWidth\n                                ? wrap.clientWidth - ele.clientWidth\n                                : value;\n                    case \"top\":\n                        return value < 0\n                            ? 0\n                            : value + ele.clientHeight > wrap.clientHeight\n                                ? wrap.clientHeight - ele.clientHeight\n                                : value;\n                    case \"width\":\n                        return value <= 0\n                            ? 1\n                            : value + ele.offsetLeft > wrap.clientWidth\n                                ? wrap.clientWidth - ele.offsetLeft\n                                : value;\n                    case \"height\":\n                        return value <= 0\n                            ? 1\n                            : value + ele.offsetTop > wrap.clientHeight\n                                ? wrap.clientHeight - ele.offsetTop\n                                : value;\n                }\n            },\n            hideCover: function () {\n                this.cover.style.display = \"none\";\n            },\n            showCover: function () {\n                var me = this,\n                    editorPos = domUtils.getXY(me.editor.ui.getDom()),\n                    iframePos = domUtils.getXY(me.editor.iframe);\n\n                domUtils.setStyles(me.cover, {\n                    width: me.editor.iframe.offsetWidth + \"px\",\n                    height: me.editor.iframe.offsetHeight + \"px\",\n                    top: iframePos.y - editorPos.y + \"px\",\n                    left: iframePos.x - editorPos.x + \"px\",\n                    position: \"absolute\",\n                    display: \"\"\n                });\n            },\n            show: function (targetObj) {\n                var me = this;\n                me.resizer.style.display = \"block\";\n                if (targetObj) {\n                    me.attachTo(targetObj);\n                }\n\n                domUtils.on(this.resizer, \"mousedown\", me.proxy(me._eventHandler, me));\n                domUtils.on(me.doc, \"mouseup\", me.proxy(me._eventHandler, me));\n\n                me.showCover();\n                me.editor.fireEvent(\"afterscaleshow\", me);\n                me.editor.fireEvent(\"saveScene\");\n            },\n            hide: function () {\n                var me = this;\n                me.hideCover();\n                me.resizer.style.display = \"none\";\n\n                domUtils.un(me.resizer, \"mousedown\", me.proxy(me._eventHandler, me));\n                domUtils.un(me.doc, \"mouseup\", me.proxy(me._eventHandler, me));\n                me.editor.fireEvent(\"afterscalehide\", me);\n            },\n            proxy: function (fn, context) {\n                return function (e) {\n                    return fn.apply(context || this, arguments);\n                };\n            },\n            attachTo: function (targetObj) {\n                var me = this,\n                    target = (me.target = targetObj),\n                    resizer = this.resizer,\n                    imgPos = domUtils.getXY(target),\n                    iframePos = domUtils.getXY(me.editor.iframe),\n                    editorPos = domUtils.getXY(resizer.parentNode);\n\n                domUtils.setStyles(resizer, {\n                    width: target.width + \"px\",\n                    height: target.height + \"px\",\n                    left:\n                        iframePos.x +\n                        imgPos.x -\n                        me.editor.getScrollLeft() -\n                        editorPos.x -\n                        parseInt(resizer.style.borderLeftWidth) +\n                        \"px\",\n                    top:\n                        iframePos.y +\n                        imgPos.y -\n                        me.editor.getScrollTop() -\n                        editorPos.y -\n                        parseInt(resizer.style.borderTopWidth) +\n                        \"px\"\n                });\n            }\n        };\n    })();\n\n    return function () {\n        var me = this,\n            imageScale;\n\n        me.setOpt(\"imageScaleEnabled\", true);\n\n        if (!browser.ie && me.options.imageScaleEnabled) {\n            me.addListener(\"click\", function (type, e) {\n                var range = me.selection.getRange(),\n                    img = range.getClosedNode();\n\n                if (img\n                    && img.tagName === \"IMG\"\n                    && me.body.contentEditable !== \"false\"\n                    && img === e.target\n                ) {\n                    if (\n                        img.getAttribute(\"anchorname\") ||\n                        domUtils.hasClass(img, \"uep-loading\") ||\n                        domUtils.hasClass(img, \"uep-loading-error\")\n                    ) {\n                        return;\n                    }\n\n                    if (!imageScale) {\n                        imageScale = new Scale();\n                        imageScale.init(me);\n                        me.ui.getDom().appendChild(imageScale.resizer);\n\n                        var _keyDownHandler = function (e) {\n                                imageScale.hide();\n                                if (imageScale.target) {\n                                    me.selection.getRange().selectNode(imageScale.target).select();\n                                }\n                            },\n                            _mouseDownHandler = function (e) {\n                                var ele = e.target || e.srcElement;\n                                if (\n                                    ele &&\n                                    (ele.className === undefined ||\n                                        ele.className.indexOf(\"edui-editor-imagescale\") === -1)\n                                ) {\n                                    _keyDownHandler(e);\n                                }\n                            },\n                            timer;\n\n                        me.addListener(\"afterscaleshow\", function (e) {\n                            me.addListener(\"beforekeydown\", _keyDownHandler);\n                            me.addListener(\"beforemousedown\", _mouseDownHandler);\n                            domUtils.on(document, \"keydown\", _keyDownHandler);\n                            domUtils.on(document, \"mousedown\", _mouseDownHandler);\n                            me.selection.getNative().removeAllRanges();\n                        });\n                        me.addListener(\"afterscalehide\", function (e) {\n                            me.removeListener(\"beforekeydown\", _keyDownHandler);\n                            me.removeListener(\"beforemousedown\", _mouseDownHandler);\n                            domUtils.un(document, \"keydown\", _keyDownHandler);\n                            domUtils.un(document, \"mousedown\", _mouseDownHandler);\n                            var target = imageScale.target;\n                            if (target.parentNode) {\n                                me.selection.getRange().selectNode(target).select();\n                            }\n                        });\n                        //TODO 有iframe的情况，mousedown不能往下传。。\n                        domUtils.on(imageScale.resizer, \"mousedown\", function (e) {\n                            me.selection.getNative().removeAllRanges();\n                            var ele = e.target || e.srcElement;\n                            if (\n                                ele &&\n                                ele.className.indexOf(\"edui-editor-imagescale-hand\") === -1\n                            ) {\n                                timer = setTimeout(function () {\n                                    imageScale.hide();\n                                    if (imageScale.target)\n                                        me.selection.getRange().selectNode(ele).select();\n                                }, 200);\n                            }\n                        });\n                        domUtils.on(imageScale.resizer, \"mouseup\", function (e) {\n                            var ele = e.target || e.srcElement;\n                            if (\n                                ele &&\n                                ele.className.indexOf(\"edui-editor-imagescale-hand\") === -1\n                            ) {\n                                clearTimeout(timer);\n                            }\n                        });\n                    }\n                    imageScale.show(img);\n                } else {\n                    if (imageScale && imageScale.resizer.style.display !== \"none\") {\n                        imageScale.hide();\n                    }\n                }\n            });\n        }\n\n        if (browser.webkit) {\n            me.addListener(\"click\", function (type, e) {\n                if (e.target.tagName === \"IMG\" && me.body.contentEditable !== \"false\") {\n                    var range = new dom.Range(me.document);\n                    range.selectNode(e.target).select();\n                }\n            });\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/plugins/font.js",
    "content": "/**\n * 字体颜色,背景色,字号,字体,下划线,删除线\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 字体颜色\n * @command forecolor\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } value 色值(必须十六进制)\n * @example\n * ```javascript\n * editor.execCommand( 'forecolor', '#000' );\n * ```\n */\n/**\n * 返回选区字体颜色\n * @command forecolor\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回字体颜色\n * @example\n * ```javascript\n * editor.queryCommandValue( 'forecolor' );\n * ```\n */\n\n/**\n * 字体背景颜色\n * @command backcolor\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } value 色值(必须十六进制)\n * @example\n * ```javascript\n * editor.execCommand( 'backcolor', '#000' );\n * ```\n */\n/**\n * 返回选区字体颜色\n * @command backcolor\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回字体背景颜色\n * @example\n * ```javascript\n * editor.queryCommandValue( 'backcolor' );\n * ```\n */\n\n/**\n * 字体大小\n * @command fontsize\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } value 字体大小\n * @example\n * ```javascript\n * editor.execCommand( 'fontsize', '14px' );\n * ```\n */\n/**\n * 返回选区字体大小\n * @command fontsize\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回字体大小\n * @example\n * ```javascript\n * editor.queryCommandValue( 'fontsize' );\n * ```\n */\n\n/**\n * 字体样式\n * @command fontfamily\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } value 字体样式\n * @example\n * ```javascript\n * editor.execCommand( 'fontfamily', '微软雅黑' );\n * ```\n */\n/**\n * 返回选区字体样式\n * @command fontfamily\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回字体样式\n * @example\n * ```javascript\n * editor.queryCommandValue( 'fontfamily' );\n * ```\n */\n\n/**\n * 字体下划线,与删除线互斥\n * @command underline\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'underline' );\n * ```\n */\n\n/**\n * 字体删除线,与下划线互斥\n * @command strikethrough\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'strikethrough' );\n * ```\n */\n\n/**\n * 字体边框\n * @command fontborder\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'fontborder' );\n * ```\n */\n\nUE.plugins[\"font\"] = function () {\n    var me = this,\n        fonts = {\n            forecolor: \"color\",\n            backcolor: \"background-color\",\n            fontsize: \"font-size\",\n            fontfamily: \"font-family\",\n            underline: \"text-decoration\",\n            strikethrough: \"text-decoration\",\n            fontborder: \"border\"\n        },\n        lang = me.getLang(),\n        needCmd = {underline: 1, strikethrough: 1, fontborder: 1},\n        needSetChild = {\n            forecolor: \"color\",\n            backcolor: \"background-color\",\n            fontsize: \"font-size\",\n            fontfamily: \"font-family\"\n        };\n    me.setOpt({\n        fontfamily: [\n            {name: \"default\", val: \"default\"},\n            {name: \"songti\", val: \"SimSun\"},\n            {name: \"yahei\", val: \"'Microsoft YaHei'\"},\n            {name: \"kaiti\", val: \"楷体,楷体_GB2312,SimKai\"},\n            {name: \"heiti\", val: \"黑体,SimHei\"},\n            {name: \"lishu\", val: \"隶书,SimLi\"},\n            // { name: \"andaleMono\", val: \"andale mono\" },\n            {name: \"arial\", val: \"arial,helvetica,sans-serif\"},\n            // { name: \"arialBlack\", val: \"arial black,avant garde\" },\n            // { name: \"comicSansMs\", val: \"comic sans ms\" },\n            // { name: \"impact\", val: \"impact,chicago\" },\n            {name: \"timesNewRoman\", val: \"times new roman\"}\n        ],\n        fontsize: [10, 11, 12, 14, 16, 18, 20, 24, 36]\n    });\n\n    function mergeWithParent(node) {\n        var parent;\n        while ((parent = node.parentNode)) {\n            if (\n                parent.tagName == \"SPAN\" &&\n                domUtils.getChildCount(parent, function (child) {\n                    return !domUtils.isBookmarkNode(child) && !domUtils.isBr(child);\n                }) == 1\n            ) {\n                parent.style.cssText += node.style.cssText;\n                domUtils.remove(node, true);\n                node = parent;\n            } else {\n                break;\n            }\n        }\n    }\n\n    function mergeChild(rng, cmdName, value) {\n        if (needSetChild[cmdName]) {\n            rng.adjustmentBoundary();\n            if (!rng.collapsed && rng.startContainer.nodeType == 1) {\n                var start = rng.startContainer.childNodes[rng.startOffset];\n                if (start && domUtils.isTagNode(start, \"span\")) {\n                    var bk = rng.createBookmark();\n                    utils.each(domUtils.getElementsByTagName(start, \"span\"), function (\n                        span\n                    ) {\n                        if (!span.parentNode || domUtils.isBookmarkNode(span)) return;\n                        if (\n                            cmdName == \"backcolor\" &&\n                            domUtils\n                                .getComputedStyle(span, \"background-color\")\n                                .toLowerCase() === value\n                        ) {\n                            return;\n                        }\n                        domUtils.removeStyle(span, needSetChild[cmdName]);\n                        if (span.style.cssText.replace(/^\\s+$/, \"\").length == 0) {\n                            domUtils.remove(span, true);\n                        }\n                    });\n                    rng.moveToBookmark(bk);\n                }\n            }\n        }\n    }\n\n    function mergesibling(rng, cmdName, value) {\n        var collapsed = rng.collapsed,\n            bk = rng.createBookmark(),\n            common;\n        if (collapsed) {\n            common = bk.start.parentNode;\n            while (dtd.$inline[common.tagName]) {\n                common = common.parentNode;\n            }\n        } else {\n            common = domUtils.getCommonAncestor(bk.start, bk.end);\n        }\n        utils.each(domUtils.getElementsByTagName(common, \"span\"), function (span) {\n            if (!span.parentNode || domUtils.isBookmarkNode(span)) return;\n            if (/\\s*border\\s*:\\s*none;?\\s*/i.test(span.style.cssText)) {\n                if (/^\\s*border\\s*:\\s*none;?\\s*$/.test(span.style.cssText)) {\n                    domUtils.remove(span, true);\n                } else {\n                    domUtils.removeStyle(span, \"border\");\n                }\n                return;\n            }\n            if (\n                /border/i.test(span.style.cssText) &&\n                span.parentNode.tagName == \"SPAN\" &&\n                /border/i.test(span.parentNode.style.cssText)\n            ) {\n                span.style.cssText = span.style.cssText.replace(\n                    /border[^:]*:[^;]+;?/gi,\n                    \"\"\n                );\n            }\n            if (!(cmdName == \"fontborder\" && value == \"none\")) {\n                var next = span.nextSibling;\n                while (next && next.nodeType == 1 && next.tagName == \"SPAN\") {\n                    if (domUtils.isBookmarkNode(next) && cmdName == \"fontborder\") {\n                        span.appendChild(next);\n                        next = span.nextSibling;\n                        continue;\n                    }\n                    if (next.style.cssText == span.style.cssText) {\n                        domUtils.moveChild(next, span);\n                        domUtils.remove(next);\n                    }\n                    if (span.nextSibling === next) break;\n                    next = span.nextSibling;\n                }\n            }\n\n            var father = span.parentElement;\n            try {\n                if(father.style.textIndent && span.style.fontSize !== father.style.fontSize){\n                    father.style.fontSize = span.style.fontSize\n                }\n            } catch (error) {\n            }\n            mergeWithParent(span);\n            if (browser.ie && browser.version > 8) {\n                //拷贝父亲们的特别的属性,这里只做背景颜色的处理\n                var parent = domUtils.findParent(span, function (n) {\n                    return (\n                        n.tagName == \"SPAN\" && /background-color/.test(n.style.cssText)\n                    );\n                });\n                if (parent && !/background-color/.test(span.style.cssText)) {\n                    span.style.backgroundColor = parent.style.backgroundColor;\n                }\n            }\n        });\n        rng.moveToBookmark(bk);\n        mergeChild(rng, cmdName, value);\n    }\n\n    me.addInputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"u s del font strike\"), function (node) {\n            if (node.tagName == \"font\") {\n                var cssStyle = [];\n                for (var p in node.attrs) {\n                    switch (p) {\n                        case \"size\":\n                            cssStyle.push(\n                                \"font-size:\" +\n                                ({\n                                    \"1\": \"10\",\n                                    \"2\": \"12\",\n                                    \"3\": \"16\",\n                                    \"4\": \"18\",\n                                    \"5\": \"24\",\n                                    \"6\": \"32\",\n                                    \"7\": \"48\"\n                                }[node.attrs[p]] || node.attrs[p]) +\n                                \"px\"\n                            );\n                            break;\n                        case \"color\":\n                            cssStyle.push(\"color:\" + node.attrs[p]);\n                            break;\n                        case \"face\":\n                            cssStyle.push(\"font-family:\" + node.attrs[p]);\n                            break;\n                        case \"style\":\n                            cssStyle.push(node.attrs[p]);\n                    }\n                }\n                node.attrs = {\n                    style: cssStyle.join(\";\")\n                };\n            } else {\n                var val = node.tagName == \"u\" ? \"underline\" : \"line-through\";\n                node.attrs = {\n                    style: (node.getAttr(\"style\") || \"\") + \"text-decoration:\" + val + \";\"\n                };\n            }\n            node.tagName = \"span\";\n        });\n        //        utils.each(root.getNodesByTagName('span'), function (node) {\n        //            var val;\n        //            if(val = node.getAttr('class')){\n        //                if(/fontstrikethrough/.test(val)){\n        //                    node.setStyle('text-decoration','line-through');\n        //                    if(node.attrs['class']){\n        //                        node.attrs['class'] = node.attrs['class'].replace(/fontstrikethrough/,'');\n        //                    }else{\n        //                        node.setAttr('class')\n        //                    }\n        //                }\n        //                if(/fontborder/.test(val)){\n        //                    node.setStyle('border','1px solid #000');\n        //                    if(node.attrs['class']){\n        //                        node.attrs['class'] = node.attrs['class'].replace(/fontborder/,'');\n        //                    }else{\n        //                        node.setAttr('class')\n        //                    }\n        //                }\n        //            }\n        //        });\n    });\n    //    me.addOutputRule(function(root){\n    //        utils.each(root.getNodesByTagName('span'), function (node) {\n    //            var val;\n    //            if(val = node.getStyle('text-decoration')){\n    //                if(/line-through/.test(val)){\n    //                    if(node.attrs['class']){\n    //                        node.attrs['class'] += ' fontstrikethrough';\n    //                    }else{\n    //                        node.setAttr('class','fontstrikethrough')\n    //                    }\n    //                }\n    //\n    //                node.setStyle('text-decoration')\n    //            }\n    //            if(val = node.getStyle('border')){\n    //                if(/1px/.test(val) && /solid/.test(val)){\n    //                    if(node.attrs['class']){\n    //                        node.attrs['class'] += ' fontborder';\n    //\n    //                    }else{\n    //                        node.setAttr('class','fontborder')\n    //                    }\n    //                }\n    //                node.setStyle('border')\n    //\n    //            }\n    //        });\n    //    });\n    for (var p in fonts) {\n        (function (cmd, style) {\n            UE.commands[cmd] = {\n                execCommand: function (cmdName, value) {\n                    // console.log(\"execCommand\", cmdName, value);\n                    value =\n                        value ||\n                        (this.queryCommandState(cmdName)\n                            ? \"none\"\n                            : cmdName === \"underline\"\n                                ? \"underline\"\n                                : cmdName === \"fontborder\" ? \"1px solid #000\" : \"line-through\");\n                    var me = this,\n                        range = this.selection.getRange(),\n                        text;\n\n                    if (value === \"default\") {\n                        if (range.collapsed) {\n                            text = me.document.createTextNode(\"font\");\n                            range.insertNode(text).select();\n                        }\n                        me.execCommand(\"removeFormat\", \"span,a\", style);\n                        if (text) {\n                            range.setStartBefore(text).collapse(true);\n                            domUtils.remove(text);\n                        }\n                        mergesibling(range, cmdName, value);\n                        range.select();\n                    } else {\n                        if (!range.collapsed) {\n                            if (needCmd[cmd] && me.queryCommandValue(cmd)) {\n                                me.execCommand(\"removeFormat\", \"span,a\", style);\n                            }\n                            range = me.selection.getRange();\n\n                            range.applyInlineStyle(\"span\", {style: style + \":\" + value});\n                            mergesibling(range, cmdName, value);\n                            range.select();\n                        } else {\n                            var span = domUtils.findParentByTagName(\n                                range.startContainer,\n                                \"span\",\n                                true\n                            );\n                            text = me.document.createTextNode(\"font\");\n                            if (\n                                span &&\n                                !span.children.length &&\n                                !span[browser.ie ? \"innerText\" : \"textContent\"].replace(\n                                    fillCharReg,\n                                    \"\"\n                                ).length\n                            ) {\n                                //for ie hack when enter\n                                range.insertNode(text);\n                                if (needCmd[cmd]) {\n                                    range.selectNode(text).select();\n                                    me.execCommand(\"removeFormat\", \"span,a\", style, null);\n\n                                    span = domUtils.findParentByTagName(text, \"span\", true);\n                                    range.setStartBefore(text);\n                                }\n                                span && (span.style.cssText += \";\" + style + \":\" + value);\n                                range.collapse(true).select();\n                            } else {\n                                range.insertNode(text);\n                                range.selectNode(text).select();\n                                span = range.document.createElement(\"span\");\n\n                                if (needCmd[cmd]) {\n                                    //a标签内的不处理跳过\n                                    if (domUtils.findParentByTagName(text, \"a\", true)) {\n                                        range.setStartBefore(text).setCursor();\n                                        domUtils.remove(text);\n                                        return;\n                                    }\n                                    me.execCommand(\"removeFormat\", \"span,a\", style);\n                                }\n\n                                span.style.cssText = style + \":\" + value;\n\n                                text.parentNode.insertBefore(span, text);\n                                //修复，span套span 但样式不继承的问题\n                                if (!browser.ie || (browser.ie && browser.version === 9)) {\n                                    var spanParent = span.parentNode;\n                                    while (!domUtils.isBlockElm(spanParent)) {\n                                        if (spanParent.tagName === \"SPAN\") {\n                                            //opera合并style不会加入\";\"\n                                            span.style.cssText =\n                                                spanParent.style.cssText + \";\" + span.style.cssText;\n                                        }\n                                        spanParent = spanParent.parentNode;\n                                    }\n                                }\n\n                                if (opera) {\n                                    setTimeout(function () {\n                                        range.setStart(span, 0).collapse(true);\n                                        mergesibling(range, cmdName, value);\n                                        range.select();\n                                    });\n                                } else {\n                                    range.setStart(span, 0).collapse(true);\n                                    mergesibling(range, cmdName, value);\n                                    range.select();\n                                }\n\n                                //trace:981\n                                //domUtils.mergeToParent(span)\n                            }\n                            domUtils.remove(text);\n                        }\n                    }\n                    return true;\n                },\n                queryCommandValue: function (cmdName) {\n                    var startNode = this.selection.getStart();\n                    var styleVal;\n\n                    //trace:946\n                    if (cmdName === \"underline\" || cmdName === \"strikethrough\") {\n                        var tmpNode = startNode,\n                            value;\n                        while (\n                            tmpNode &&\n                            !domUtils.isBlockElm(tmpNode) &&\n                            !domUtils.isBody(tmpNode)\n                            ) {\n                            if (tmpNode.nodeType === 1) {\n                                value = domUtils.getComputedStyle(tmpNode, style);\n                                if (value !== \"none\") {\n                                    return value;\n                                }\n                            }\n\n                            tmpNode = tmpNode.parentNode;\n                        }\n                        return \"none\";\n                    } else if (cmdName === \"fontborder\") {\n                        var tmp = startNode,\n                            val;\n                        while (tmp && dtd.$inline[tmp.tagName]) {\n                            if ((val = domUtils.getComputedStyle(tmp, \"border\"))) {\n                                if (/1px/.test(val) && /solid/.test(val)) {\n                                    return val;\n                                }\n                            }\n                            tmp = tmp.parentNode;\n                        }\n                        return \"\";\n                    } else if (cmdName === \"FontSize\") {\n                        styleVal = domUtils.getComputedStyle(startNode, style);\n                        tmp = /^([\\d\\.]+)(\\w+)$/.exec(styleVal);\n\n                        if (tmp) {\n                            return Math.floor(tmp[1]) + tmp[2];\n                        }\n\n                        return styleVal;\n                    } else if (cmdName === 'FontFamily') {\n                        styleVal = domUtils.getComputedStyle(startNode, style)\n                        // 移除左右引号\n                        styleVal = styleVal.replace(/['\"]/g, '');\n                        // 移除字体 宋体, SimSun 转为 宋体,SimSun，否则以下的判断会出错\n                        styleVal = styleVal.replace(/\\s*,\\s*/g, ',');\n                        var fontFamily = lang.fontfamily.default;\n                        var fontList = me.options[\"fontfamily\"] || [];\n                        for (var i = 0; i < fontList.length; i++) {\n                            var v = fontList[i];\n                            // console.log('FontFamily', styleVal, v.val);\n                            if (v.val === styleVal) {\n                                fontFamily = styleVal;\n                                break;\n                            }\n                        }\n                        // console.log('fontList', fontList);\n                        // console.log('FontFamily', styleVal, fontFamily);\n                        return fontFamily;\n                    }\n\n                    value = domUtils.getComputedStyle(startNode, style);\n                    return value;\n                },\n                queryCommandState: function (cmdName) {\n                    if (!needCmd[cmdName]) return 0;\n                    var val = this.queryCommandValue(cmdName);\n                    if (cmdName === \"fontborder\") {\n                        return /1px/.test(val) && /solid/.test(val);\n                    } else {\n                        return cmdName === \"underline\"\n                            ? /underline/.test(val)\n                            : /line\\-through/.test(val);\n                    }\n                }\n            };\n        })(p, fonts[p]);\n    }\n};\n"
  },
  {
    "path": "_src/plugins/formatmatch.js",
    "content": "/**\n * 格式刷，只格式inline的\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 格式刷\n * @command formatmatch\n * @method execCommand\n * @remind 该操作不能复制段落格式\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * //editor是编辑器实例\n * //获取格式刷\n * editor.execCommand( 'formatmatch' );\n * ```\n */\nUE.plugins[\"formatmatch\"] = function () {\n    var me = this,\n        list = [],\n        img,\n        flag = 0;\n\n    me.addListener(\"reset\", function () {\n        list = [];\n        flag = 0;\n    });\n\n    function addList(type, evt) {\n        if (browser.webkit) {\n            var target = evt.target.tagName == \"IMG\" ? evt.target : null;\n        }\n\n        function addFormat(range) {\n            if (text) {\n                range.selectNode(text);\n            }\n            return range.applyInlineStyle(list[list.length - 1].tagName, null, list);\n        }\n\n        me.undoManger && me.undoManger.save();\n\n        var range = me.selection.getRange(),\n            imgT = target || range.getClosedNode();\n        if (img && imgT && imgT.tagName == \"IMG\") {\n            //trace:964\n\n            imgT.style.cssText +=\n                \";float:\" +\n                (img.style.cssFloat || img.style.styleFloat || \"none\") +\n                \";display:\" +\n                (img.style.display || \"inline\");\n\n            img = null;\n        } else {\n            if (!img) {\n                var collapsed = range.collapsed;\n                if (collapsed) {\n                    var text = me.document.createTextNode(\"match\");\n                    range.insertNode(text).select();\n                }\n                me.__hasEnterExecCommand = true;\n                //不能把block上的属性干掉\n                //trace:1553\n                var removeFormatAttributes = me.options.removeFormatAttributes;\n                me.options.removeFormatAttributes = \"\";\n                me.execCommand(\"removeformat\");\n                me.options.removeFormatAttributes = removeFormatAttributes;\n                me.__hasEnterExecCommand = false;\n                //trace:969\n                range = me.selection.getRange();\n                if (list.length) {\n                    addFormat(range);\n                }\n                if (text) {\n                    range.setStartBefore(text).collapse(true);\n                }\n                range.select();\n                text && domUtils.remove(text);\n            }\n        }\n\n        me.undoManger && me.undoManger.save();\n\n        // 新增：格式化默认使用连续格式模式，支持快速格式化\n        // me.removeListener(\"mouseup\", addList);\n        // flag = 0;\n    }\n\n    me.commands[\"formatmatch\"] = {\n        execCommand: function (cmdName) {\n\n            if (flag) {\n                flag = 0;\n                list = [];\n                me.removeListener(\"mouseup\", addList);\n                return;\n            }\n\n            var range = me.selection.getRange();\n            img = range.getClosedNode();\n            if (!img || img.tagName != \"IMG\") {\n                range.collapse(true).shrinkBoundary();\n                var start = range.startContainer;\n                list = domUtils.findParents(start, true, function (node) {\n                    return !domUtils.isBlockElm(node) && node.nodeType == 1;\n                });\n                //a不能加入格式刷, 并且克隆节点\n                for (var i = 0, ci; (ci = list[i]); i++) {\n                    if (ci.tagName == \"A\") {\n                        list.splice(i, 1);\n                        break;\n                    }\n                }\n            }\n\n            me.addListener(\"mouseup\", addList);\n            flag = 1;\n        },\n        queryCommandState: function () {\n            return flag;\n        },\n        notNeedUndo: 1\n    };\n};\n"
  },
  {
    "path": "_src/plugins/formula.js",
    "content": "UE.plugin.register(\"formula\", function () {\n    var me = this, images = [];\n\n    return {\n        commands: {\n            formula: {\n                execCommand: function (cmdName, value) {\n                    var range = me.selection.getRange(),\n                        img = range.getClosedNode();\n\n                    value = encodeURIComponent(value);\n                    var formulaConfig = me.getOpt('formulaConfig');\n                    var src = formulaConfig.imageUrlTemplate.replace(/\\{\\}/, value);\n\n                    if (img) {\n                        img.setAttribute(\"src\", src);\n                    } else {\n                        me.execCommand(\"insertHtml\", '<img src=\"' + src + '\" data-formula-image=\"' + value + '\" />');\n                    }\n                },\n            }\n        },\n    };\n});\n"
  },
  {
    "path": "_src/plugins/horizontal.js",
    "content": "/**\n * 插入分割线插件\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 插入分割线\n * @command horizontal\n * @method execCommand\n * @param { String } cmdName 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'horizontal' );\n * ```\n */\nUE.plugins[\"horizontal\"] = function () {\n    var me = this;\n    me.commands[\"horizontal\"] = {\n        execCommand: function (cmdName) {\n            var me = this;\n            if (me.queryCommandState(cmdName) !== -1) {\n                me.execCommand(\"insertHtml\", \"<hr>\");\n                var range = me.selection.getRange(),\n                    start = range.startContainer;\n                if (start.nodeType == 1 && !start.childNodes[range.startOffset]) {\n                    var tmp;\n                    if ((tmp = start.childNodes[range.startOffset - 1])) {\n                        if (tmp.nodeType == 1 && tmp.tagName == \"HR\") {\n                            if (me.options.enterTag == \"p\") {\n                                tmp = me.document.createElement(\"p\");\n                                range.insertNode(tmp);\n                                range.setStart(tmp, 0).setCursor();\n                            } else {\n                                tmp = me.document.createElement(\"br\");\n                                range.insertNode(tmp);\n                                range.setStartBefore(tmp).setCursor();\n                            }\n                        }\n                    }\n                }\n                return true;\n            }\n        },\n        //边界在table里不能加分隔线\n        queryCommandState: function () {\n            return domUtils.filterNodeList(\n                this.selection.getStartElementPath(),\n                \"table\"\n            )\n                ? -1\n                : 0;\n        }\n    };\n    //    me.addListener('delkeyup',function(){\n    //        var rng = this.selection.getRange();\n    //        if(browser.ie && browser.version > 8){\n    //            rng.txtToElmBoundary(true);\n    //            if(domUtils.isStartInblock(rng)){\n    //                var tmpNode = rng.startContainer;\n    //                var pre = tmpNode.previousSibling;\n    //                if(pre && domUtils.isTagNode(pre,'hr')){\n    //                    domUtils.remove(pre);\n    //                    rng.select();\n    //                    return;\n    //                }\n    //            }\n    //        }\n    //        if(domUtils.isBody(rng.startContainer)){\n    //            var hr = rng.startContainer.childNodes[rng.startOffset -1];\n    //            if(hr && hr.nodeName == 'HR'){\n    //                var next = hr.nextSibling;\n    //                if(next){\n    //                    rng.setStart(next,0)\n    //                }else if(hr.previousSibling){\n    //                    rng.setStartAtLast(hr.previousSibling)\n    //                }else{\n    //                    var p = this.document.createElement('p');\n    //                    hr.parentNode.insertBefore(p,hr);\n    //                    domUtils.fillNode(this.document,p);\n    //                    rng.setStart(p,0);\n    //                }\n    //                domUtils.remove(hr);\n    //                rng.setCursor(false,true);\n    //            }\n    //        }\n    //    })\n    me.addListener(\"delkeydown\", function (name, evt) {\n        var rng = this.selection.getRange();\n        rng.txtToElmBoundary(true);\n        if (domUtils.isStartInblock(rng)) {\n            var tmpNode = rng.startContainer;\n            var pre = tmpNode.previousSibling;\n            if (pre && domUtils.isTagNode(pre, \"hr\")) {\n                domUtils.remove(pre);\n                rng.select();\n                domUtils.preventDefault(evt);\n                return true;\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/iframe.js",
    "content": "///import core\n///import plugins\\inserthtml.js\n///commands 插入框架\n///commandsName  InsertFrame\n///commandsTitle  插入Iframe\n///commandsDialog  dialogs\\insertframe\n\nUE.plugins[\"insertframe\"] = function () {\n    var me = this;\n\n    function deleteIframe() {\n        me._iframe && delete me._iframe;\n    }\n\n    me.addListener(\"selectionchange\", function () {\n        deleteIframe();\n    });\n};\n"
  },
  {
    "path": "_src/plugins/image.js",
    "content": "/**\n * 图片插入、排版插件\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 图片对齐方式\n * @command imagefloat\n * @method execCommand\n * @remind 值center为独占一行居中\n * @param { String } cmd 命令字符串\n * @param { String } align 对齐方式，可传left、right、none、center\n * @remaind center表示图片独占一行\n * @example\n * ```javascript\n * editor.execCommand( 'imagefloat', 'center' );\n * ```\n */\n\n/**\n * 如果选区所在位置是图片区域\n * @command imagefloat\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回图片对齐方式\n * @example\n * ```javascript\n * editor.queryCommandValue( 'imagefloat' );\n * ```\n */\n\nUE.commands[\"imagefloat\"] = {\n    execCommand: function (cmd, align) {\n        var me = this,\n            range = me.selection.getRange();\n        if (!range.collapsed) {\n            var img = range.getClosedNode();\n            if (img && img.tagName === \"IMG\") {\n                switch (align) {\n                    case \"left\":\n                    case \"right\":\n                    case \"none\":\n                        var pN = img.parentNode,\n                            tmpNode,\n                            pre,\n                            next;\n                        while (dtd.$inline[pN.tagName] || pN.tagName == \"A\") {\n                            pN = pN.parentNode;\n                        }\n                        tmpNode = pN;\n                        if (\n                            tmpNode.tagName == \"P\" &&\n                            domUtils.getStyle(tmpNode, \"text-align\") == \"center\"\n                        ) {\n                            if (\n                                !domUtils.isBody(tmpNode) &&\n                                domUtils.getChildCount(tmpNode, function (node) {\n                                    return !domUtils.isBr(node) && !domUtils.isWhitespace(node);\n                                }) == 1\n                            ) {\n                                pre = tmpNode.previousSibling;\n                                next = tmpNode.nextSibling;\n                                if (\n                                    pre &&\n                                    next &&\n                                    pre.nodeType == 1 &&\n                                    next.nodeType == 1 &&\n                                    pre.tagName == next.tagName &&\n                                    domUtils.isBlockElm(pre)\n                                ) {\n                                    pre.appendChild(tmpNode.firstChild);\n                                    while (next.firstChild) {\n                                        pre.appendChild(next.firstChild);\n                                    }\n                                    domUtils.remove(tmpNode);\n                                    domUtils.remove(next);\n                                } else {\n                                    domUtils.setStyle(tmpNode, \"text-align\", \"\");\n                                }\n                            }\n\n                            range.selectNode(img).select();\n                        }\n                        domUtils.setStyle(img, \"float\", align == \"none\" ? \"\" : align);\n                        if (align == \"none\") {\n                            domUtils.removeAttributes(img, \"align\");\n                        }\n\n                        break;\n                    case \"center\":\n                        if (me.queryCommandValue(\"imagefloat\") != \"center\") {\n                            pN = img.parentNode;\n                            domUtils.setStyle(img, \"float\", \"\");\n                            domUtils.removeAttributes(img, \"align\");\n                            tmpNode = img;\n                            while (\n                                pN &&\n                                domUtils.getChildCount(pN, function (node) {\n                                    return !domUtils.isBr(node) && !domUtils.isWhitespace(node);\n                                }) == 1 &&\n                                (dtd.$inline[pN.tagName] || pN.tagName == \"A\")\n                                ) {\n                                tmpNode = pN;\n                                pN = pN.parentNode;\n                            }\n                            range.setStartBefore(tmpNode).setCursor(false);\n                            pN = me.document.createElement(\"div\");\n                            pN.appendChild(tmpNode);\n                            domUtils.setStyle(tmpNode, \"float\", \"\");\n\n                            me.execCommand(\n                                \"insertHtml\",\n                                '<p id=\"_img_parent_tmp\" style=\"text-align:center\">' +\n                                pN.innerHTML +\n                                \"</p>\"\n                            );\n\n                            tmpNode = me.document.getElementById(\"_img_parent_tmp\");\n                            tmpNode.removeAttribute(\"id\");\n                            tmpNode = tmpNode.firstChild;\n                            range.selectNode(tmpNode).select();\n                            //去掉后边多余的元素\n                            next = tmpNode.parentNode.nextSibling;\n                            if (next && domUtils.isEmptyNode(next)) {\n                                domUtils.remove(next);\n                            }\n                        }\n\n                        break;\n                }\n            }\n        }\n    },\n    queryCommandValue: function () {\n        var range = this.selection.getRange(),\n            startNode,\n            floatStyle;\n        if (range.collapsed) {\n            return \"none\";\n        }\n        startNode = range.getClosedNode();\n        if (startNode && startNode.nodeType == 1 && startNode.tagName == \"IMG\") {\n            floatStyle =\n                domUtils.getComputedStyle(startNode, \"float\") ||\n                startNode.getAttribute(\"align\");\n\n            if (floatStyle == \"none\") {\n                floatStyle = domUtils.getComputedStyle(\n                    startNode.parentNode,\n                    \"text-align\"\n                ) == \"center\"\n                    ? \"center\"\n                    : floatStyle;\n            }\n            return {\n                left: 1,\n                right: 1,\n                center: 1\n            }[floatStyle]\n                ? floatStyle\n                : \"none\";\n        }\n        return \"none\";\n    },\n    queryCommandState: function () {\n        var range = this.selection.getRange(),\n            startNode;\n\n        if (range.collapsed) return -1;\n\n        startNode = range.getClosedNode();\n        if (startNode && startNode.nodeType === 1 && startNode.tagName === \"IMG\") {\n            return 0;\n        }\n        return -1;\n    }\n};\n\n/**\n * 插入图片\n * @command insertimage\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { Object } opt 属性键值对，这些属性都将被复制到当前插入图片\n * @remind 该命令第二个参数可接受一个图片配置项对象的数组，可以插入多张图片，\n * 此时数组的每一个元素都是一个Object类型的图片属性集合。\n * @example\n * ```javascript\n * editor.execCommand( 'insertimage', {\n *     src:'a/b/c.jpg',\n *     width:'100',\n *     height:'100'\n * } );\n * ```\n * @example\n * ```javascript\n * editor.execCommand( 'insertimage', [{\n *     src:'a/b/c.jpg',\n *     width:'100',\n *     height:'100'\n * },{\n *     src:'a/b/d.jpg',\n *     width:'100',\n *     height:'100'\n * }] );\n * ```\n */\n\nUE.commands[\"insertimage\"] = {\n    execCommand: function (cmd, opt) {\n        opt = utils.isArray(opt) ? opt : [opt];\n        if (!opt.length) {\n            return;\n        }\n        var me = this,\n            range = me.selection.getRange(),\n            img = range.getClosedNode();\n\n        if (me.fireEvent(\"beforeinsertimage\", opt) === true) {\n            return;\n        }\n\n        if (\n            img &&\n            /img/i.test(img.tagName) &&\n            (img.className != \"edui-faked-video\" ||\n                img.className.indexOf(\"edui-upload-video\") != -1) &&\n            !img.getAttribute(\"data-word-image\")\n        ) {\n            var first = opt.shift();\n            var floatStyle = first[\"floatStyle\"];\n            delete first[\"floatStyle\"];\n            ////                img.style.border = (first.border||0) +\"px solid #000\";\n            ////                img.style.margin = (first.margin||0) +\"px\";\n            //                img.style.cssText += ';margin:' + (first.margin||0) +\"px;\" + 'border:' + (first.border||0) +\"px solid #000\";\n            domUtils.setAttributes(img, first);\n            me.execCommand(\"imagefloat\", floatStyle);\n            if (opt.length > 0) {\n                range.setStartAfter(img).setCursor(false, true);\n                me.execCommand(\"insertimage\", opt);\n            }\n        } else {\n            var html = [],\n                str = \"\",\n                ci;\n            ci = opt[0];\n            if (opt.length == 1) {\n                str =\n                    '<img src=\"' +\n                    ci.src +\n                    '\" ' +\n                    (ci._src ? ' _src=\"' + ci._src + '\" ' : \"\") +\n                    (ci.width ? 'width=\"' + ci.width + '\" ' : \"\") +\n                    (ci.height ? ' height=\"' + ci.height + '\" ' : \"\") +\n                    (ci[\"floatStyle\"] == \"left\" || ci[\"floatStyle\"] == \"right\"\n                        ? ' style=\"float:' + ci[\"floatStyle\"] + ';\"'\n                        : \"\") +\n                    (ci.title && ci.title != \"\" ? ' title=\"' + ci.title + '\"' : \"\") +\n                    (ci.border && ci.border != \"0\" ? ' border=\"' + ci.border + '\"' : \"\") +\n                    (ci.alt && ci.alt != \"\" ? ' alt=\"' + ci.alt + '\"' : \"\") +\n                    (ci.hspace && ci.hspace != \"0\"\n                        ? ' hspace = \"' + ci.hspace + '\"'\n                        : \"\") +\n                    (ci.vspace && ci.vspace != \"0\"\n                        ? ' vspace = \"' + ci.vspace + '\"'\n                        : \"\") +\n                    \"/>\";\n                if (ci[\"floatStyle\"] == \"center\") {\n                    str = '<p style=\"text-align: center\">' + str + \"</p>\";\n                }\n                html.push(str);\n            } else {\n                for (var i = 0; (ci = opt[i++]);) {\n                    str =\n                        \"<p \" +\n                        (ci[\"floatStyle\"] == \"center\"\n                            ? 'style=\"text-align: center\" '\n                            : \"\") +\n                        '><img src=\"' +\n                        ci.src +\n                        '\" ' +\n                        (ci.width ? 'width=\"' + ci.width + '\" ' : \"\") +\n                        (ci._src ? ' _src=\"' + ci._src + '\" ' : \"\") +\n                        (ci.height ? ' height=\"' + ci.height + '\" ' : \"\") +\n                        ' style=\"' +\n                        (ci[\"floatStyle\"] && ci[\"floatStyle\"] != \"center\"\n                            ? \"float:\" + ci[\"floatStyle\"] + \";\"\n                            : \"\") +\n                        (ci.border || \"\") +\n                        '\" ' +\n                        (ci.title ? ' title=\"' + ci.title + '\"' : \"\") +\n                        \" /></p>\";\n                    html.push(str);\n                }\n            }\n\n            me.execCommand(\"insertHtml\", html.join(\"\"));\n        }\n\n        me.fireEvent(\"afterinsertimage\", opt);\n    }\n};\n"
  },
  {
    "path": "_src/plugins/indent.js",
    "content": "/**\n * 首行缩进\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 缩进\n * @command indent\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'indent' );\n * ```\n */\nUE.commands[\"indent\"] = {\n    execCommand: function () {\n        var me = this,\n            value = me.queryCommandState(\"indent\")\n                ? \"0em\"\n                : me.options.indentValue || \"2em\";\n        // 首行缩进不准确\n        // https://gitee.com/modstart-lib/ueditor-plus/issues/IAW75Z\n        var pN = domUtils.filterNodeList(\n            this.selection.getStartElementPath(),\n            \"p h1 h2 h3 h4 h5 h6\"\n        )\n        try {\n            me.execCommand(\"Paragraph\", \"p\", {style: \"text-indent:\" + value + ';font-size:' + pN.firstChild.style.fontSize});\n        } catch (error) {\n            me.execCommand(\"Paragraph\", \"p\", {style: \"text-indent:\" + value});\n        }\n        // me.execCommand(\"Paragraph\", \"p\", {style: \"text-indent:\" + value});\n    },\n    queryCommandState: function () {\n        var pN = domUtils.filterNodeList(\n            this.selection.getStartElementPath(),\n            \"p h1 h2 h3 h4 h5 h6\"\n        );\n        return pN && pN.style.textIndent && parseInt(pN.style.textIndent) ? 1 : 0;\n    }\n};\n"
  },
  {
    "path": "_src/plugins/insertcode.js",
    "content": "/**\n * 插入代码插件\n * @file\n * @since 1.2.6.1\n */\n\nUE.plugins[\"insertcode\"] = function () {\n    var me = this;\n    me.setOpt(\"insertcode\", {\n        as3: \"ActionScript3\",\n        bash: \"Bash/Shell\",\n        cpp: \"C/C++\",\n        css: \"Css\",\n        // cf: \"CodeFunction\",\n        \"c#\": \"C#\",\n        delphi: \"Delphi\",\n        // diff: \"Diff\",\n        erlang: \"Erlang\",\n        groovy: \"Groovy\",\n        html: \"Html\",\n        java: \"Java\",\n        // jfx: \"JavaFx\",\n        js: \"Javascript\",\n        pl: \"Perl\",\n        php: \"PHP\",\n        plain: \"Text\",\n        ps: \"PowerShell\",\n        python: \"Python\",\n        ruby: \"Ruby\",\n        scala: \"Scala\",\n        sql: \"SQL\",\n        vb: \"VB\",\n        xml: \"XML\",\n        mind: \"Mind\",\n    });\n\n    /**\n     * 插入代码\n     * @command insertcode\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @param { String } lang 插入代码的语言\n     * @example\n     * ```javascript\n     * editor.execCommand( 'insertcode', 'javascript' );\n     * ```\n     */\n\n    /**\n     * 如果选区所在位置是插入插入代码区域，返回代码的语言\n     * @command insertcode\n     * @method queryCommandValue\n     * @param { String } cmd 命令字符串\n     * @return { String } 返回代码的语言\n     * @example\n     * ```javascript\n     * editor.queryCommandValue( 'insertcode' );\n     * ```\n     */\n\n    me.commands[\"insertcode\"] = {\n        execCommand: function (cmd, lang) {\n            var me = this,\n                rng = me.selection.getRange(),\n                pre = domUtils.findParentByTagName(rng.startContainer, \"pre\", true);\n            if (pre) {\n                pre.className = \"brush:\" + lang + \";toolbar:false;\";\n            } else {\n                var code = \"\";\n                if (rng.collapsed) {\n                    code = browser.ie && browser.ie11below\n                        ? browser.version <= 8 ? \"&nbsp;\" : \"\"\n                        : \"<br/>\";\n                } else {\n                    var frag = rng.extractContents();\n                    var div = me.document.createElement(\"div\");\n                    div.appendChild(frag);\n\n                    utils.each(\n                        UE.filterNode(\n                            UE.htmlparser(div.innerHTML.replace(/[\\r\\t]/g, \"\")),\n                            me.options.filterTxtRules\n                        ).children,\n                        function (node) {\n                            if (browser.ie && browser.ie11below && browser.version > 8) {\n                                if (node.type == \"element\") {\n                                    if (node.tagName == \"br\") {\n                                        code += \"\\n\";\n                                    } else if (!dtd.$empty[node.tagName]) {\n                                        utils.each(node.children, function (cn) {\n                                            if (cn.type == \"element\") {\n                                                if (cn.tagName == \"br\") {\n                                                    code += \"\\n\";\n                                                } else if (!dtd.$empty[node.tagName]) {\n                                                    code += cn.innerText();\n                                                }\n                                            } else {\n                                                code += cn.data;\n                                            }\n                                        });\n                                        if (!/\\n$/.test(code)) {\n                                            code += \"\\n\";\n                                        }\n                                    }\n                                } else {\n                                    code += node.data + \"\\n\";\n                                }\n                                if (!node.nextSibling() && /\\n$/.test(code)) {\n                                    code = code.replace(/\\n$/, \"\");\n                                }\n                            } else {\n                                if (browser.ie && browser.ie11below) {\n                                    if (node.type == \"element\") {\n                                        if (node.tagName == \"br\") {\n                                            code += \"<br>\";\n                                        } else if (!dtd.$empty[node.tagName]) {\n                                            utils.each(node.children, function (cn) {\n                                                if (cn.type == \"element\") {\n                                                    if (cn.tagName == \"br\") {\n                                                        code += \"<br>\";\n                                                    } else if (!dtd.$empty[node.tagName]) {\n                                                        code += cn.innerText();\n                                                    }\n                                                } else {\n                                                    code += cn.data;\n                                                }\n                                            });\n                                            if (!/br>$/.test(code)) {\n                                                code += \"<br>\";\n                                            }\n                                        }\n                                    } else {\n                                        code += node.data + \"<br>\";\n                                    }\n                                    if (!node.nextSibling() && /<br>$/.test(code)) {\n                                        code = code.replace(/<br>$/, \"\");\n                                    }\n                                } else {\n                                    code += node.type == \"element\"\n                                        ? dtd.$empty[node.tagName] ? \"\" : node.innerText()\n                                        : node.data;\n                                    if (!/br\\/?\\s*>$/.test(code)) {\n                                        if (!node.nextSibling()) return;\n                                        code += \"<br>\";\n                                    }\n                                }\n                            }\n                        }\n                    );\n                }\n                me.execCommand(\n                    \"inserthtml\",\n                    '<pre id=\"coder\"class=\"brush:' +\n                    lang +\n                    ';toolbar:false\">' +\n                    code +\n                    \"</pre>\",\n                    true\n                );\n\n                pre = me.document.getElementById(\"coder\");\n                domUtils.removeAttributes(pre, \"id\");\n                var tmpNode = pre.previousSibling;\n\n                if (\n                    tmpNode &&\n                    ((tmpNode.nodeType == 3 &&\n                        tmpNode.nodeValue.length == 1 &&\n                        browser.ie &&\n                        browser.version == 6) ||\n                        domUtils.isEmptyBlock(tmpNode))\n                ) {\n                    domUtils.remove(tmpNode);\n                }\n                var rng = me.selection.getRange();\n                if (domUtils.isEmptyBlock(pre)) {\n                    rng.setStart(pre, 0).setCursor(false, true);\n                } else {\n                    rng.selectNodeContents(pre).select();\n                }\n            }\n        },\n        queryCommandValue: function () {\n            var path = this.selection.getStartElementPath();\n            var lang = \"\";\n            utils.each(path, function (node) {\n                if (node.nodeName == \"PRE\") {\n                    var match = node.className.match(/brush:([^;]+)/);\n                    lang = match && match[1] ? match[1] : \"\";\n                    return false;\n                }\n            });\n            return lang;\n        }\n    };\n\n    me.addInputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"pre\"), function (pre) {\n            var brs = pre.getNodesByTagName(\"br\");\n            if (brs.length) {\n                browser.ie &&\n                browser.ie11below &&\n                browser.version > 8 &&\n                utils.each(brs, function (br) {\n                    var txt = UE.uNode.createText(\"\\n\");\n                    br.parentNode.insertBefore(txt, br);\n                    br.parentNode.removeChild(br);\n                });\n                return;\n            }\n            if (browser.ie && browser.ie11below && browser.version > 8) return;\n            var code = pre.innerText().split(/\\n/);\n            pre.innerHTML(\"\");\n            utils.each(code, function (c) {\n                if (c.length) {\n                    pre.appendChild(UE.uNode.createText(c));\n                }\n                pre.appendChild(UE.uNode.createElement(\"br\"));\n            });\n        });\n    });\n    me.addOutputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"pre\"), function (pre) {\n            var code = \"\";\n            utils.each(pre.children, function (n) {\n                if (n.type == \"text\") {\n                    //在ie下文本内容有可能末尾带有\\n要去掉\n                    //trace:3396\n                    code += n.data.replace(/[ ]/g, \"&nbsp;\").replace(/\\n$/, \"\");\n                } else {\n                    if (n.tagName == \"br\") {\n                        code += \"\\n\";\n                    } else {\n                        code += !dtd.$empty[n.tagName] ? \"\" : n.innerText();\n                    }\n                }\n            });\n\n            pre.innerText(code.replace(/(&nbsp;|\\n)+$/, \"\"));\n        });\n    });\n    //不需要判断highlight的command列表\n    me.notNeedCodeQuery = {\n        help: 1,\n        undo: 1,\n        redo: 1,\n        source: 1,\n        print: 1,\n        searchreplace: 1,\n        fullscreen: 1,\n        preview: 1,\n        insertparagraph: 1,\n        elementpath: 1,\n        insertcode: 1,\n        inserthtml: 1,\n        selectall: 1\n    };\n    //将queyCommamndState重置\n    var orgQuery = me.queryCommandState;\n    me.queryCommandState = function (cmd) {\n        var me = this;\n\n        if (\n            !me.notNeedCodeQuery[cmd.toLowerCase()] &&\n            me.selection &&\n            me.queryCommandValue(\"insertcode\")\n        ) {\n            return -1;\n        }\n        return UE.Editor.prototype.queryCommandState.apply(this, arguments);\n    };\n    me.addListener(\"beforeenterkeydown\", function () {\n        var rng = me.selection.getRange();\n        var pre = domUtils.findParentByTagName(rng.startContainer, \"pre\", true);\n        if (pre) {\n            me.fireEvent(\"saveScene\");\n            if (!rng.collapsed) {\n                rng.deleteContents();\n            }\n            if (!browser.ie || browser.ie9above) {\n                var tmpNode = me.document.createElement(\"br\"),\n                    pre;\n                rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true);\n                var next = tmpNode.nextSibling;\n                if (!next && (!browser.ie || browser.version > 10)) {\n                    rng.insertNode(tmpNode.cloneNode(false));\n                } else {\n                    rng.setStartAfter(tmpNode);\n                }\n                pre = tmpNode.previousSibling;\n                var tmp;\n                while (pre) {\n                    tmp = pre;\n                    pre = pre.previousSibling;\n                    if (!pre || pre.nodeName == \"BR\") {\n                        pre = tmp;\n                        break;\n                    }\n                }\n                if (pre) {\n                    var str = \"\";\n                    while (\n                        pre &&\n                        pre.nodeName != \"BR\" &&\n                        new RegExp(\"^[\\\\s\" + domUtils.fillChar + \"]*$\").test(pre.nodeValue)\n                        ) {\n                        str += pre.nodeValue;\n                        pre = pre.nextSibling;\n                    }\n                    if (pre.nodeName != \"BR\") {\n                        var match = pre.nodeValue.match(\n                            new RegExp(\"^([\\\\s\" + domUtils.fillChar + \"]+)\")\n                        );\n                        if (match && match[1]) {\n                            str += match[1];\n                        }\n                    }\n                    if (str) {\n                        str = me.document.createTextNode(str);\n                        rng.insertNode(str).setStartAfter(str);\n                    }\n                }\n                rng.collapse(true).select(true);\n            } else {\n                if (browser.version > 8) {\n                    var txt = me.document.createTextNode(\"\\n\");\n                    var start = rng.startContainer;\n                    if (rng.startOffset == 0) {\n                        var preNode = start.previousSibling;\n                        if (preNode) {\n                            rng.insertNode(txt);\n                            var fillchar = me.document.createTextNode(\" \");\n                            rng\n                                .setStartAfter(txt)\n                                .insertNode(fillchar)\n                                .setStart(fillchar, 0)\n                                .collapse(true)\n                                .select(true);\n                        }\n                    } else {\n                        rng.insertNode(txt).setStartAfter(txt);\n                        var fillchar = me.document.createTextNode(\" \");\n                        start = rng.startContainer.childNodes[rng.startOffset];\n                        if (start && !/^\\n/.test(start.nodeValue)) {\n                            rng.setStartBefore(txt);\n                        }\n                        rng\n                            .insertNode(fillchar)\n                            .setStart(fillchar, 0)\n                            .collapse(true)\n                            .select(true);\n                    }\n                } else {\n                    var tmpNode = me.document.createElement(\"br\");\n                    rng.insertNode(tmpNode);\n                    rng.insertNode(me.document.createTextNode(domUtils.fillChar));\n                    rng.setStartAfter(tmpNode);\n                    pre = tmpNode.previousSibling;\n                    var tmp;\n                    while (pre) {\n                        tmp = pre;\n                        pre = pre.previousSibling;\n                        if (!pre || pre.nodeName == \"BR\") {\n                            pre = tmp;\n                            break;\n                        }\n                    }\n                    if (pre) {\n                        var str = \"\";\n                        while (\n                            pre &&\n                            pre.nodeName != \"BR\" &&\n                            new RegExp(\"^[ \" + domUtils.fillChar + \"]*$\").test(pre.nodeValue)\n                            ) {\n                            str += pre.nodeValue;\n                            pre = pre.nextSibling;\n                        }\n                        if (pre.nodeName != \"BR\") {\n                            var match = pre.nodeValue.match(\n                                new RegExp(\"^([ \" + domUtils.fillChar + \"]+)\")\n                            );\n                            if (match && match[1]) {\n                                str += match[1];\n                            }\n                        }\n\n                        str = me.document.createTextNode(str);\n                        rng.insertNode(str).setStartAfter(str);\n                    }\n                    rng.collapse(true).select();\n                }\n            }\n            me.fireEvent(\"saveScene\");\n            return true;\n        }\n    });\n\n    me.addListener(\"tabkeydown\", function (cmd, evt) {\n        var rng = me.selection.getRange();\n        var pre = domUtils.findParentByTagName(rng.startContainer, \"pre\", true);\n        if (pre) {\n            me.fireEvent(\"saveScene\");\n            if (evt.shiftKey) {\n            } else {\n                if (!rng.collapsed) {\n                    var bk = rng.createBookmark();\n                    var start = bk.start.previousSibling;\n\n                    while (start) {\n                        if (pre.firstChild === start && !domUtils.isBr(start)) {\n                            pre.insertBefore(me.document.createTextNode(\"    \"), start);\n\n                            break;\n                        }\n                        if (domUtils.isBr(start)) {\n                            pre.insertBefore(\n                                me.document.createTextNode(\"    \"),\n                                start.nextSibling\n                            );\n\n                            break;\n                        }\n                        start = start.previousSibling;\n                    }\n                    var end = bk.end;\n                    start = bk.start.nextSibling;\n                    if (pre.firstChild === bk.start) {\n                        pre.insertBefore(\n                            me.document.createTextNode(\"    \"),\n                            start.nextSibling\n                        );\n                    }\n                    while (start && start !== end) {\n                        if (domUtils.isBr(start) && start.nextSibling) {\n                            if (start.nextSibling === end) {\n                                break;\n                            }\n                            pre.insertBefore(\n                                me.document.createTextNode(\"    \"),\n                                start.nextSibling\n                            );\n                        }\n\n                        start = start.nextSibling;\n                    }\n                    rng.moveToBookmark(bk).select();\n                } else {\n                    var tmpNode = me.document.createTextNode(\"    \");\n                    rng\n                        .insertNode(tmpNode)\n                        .setStartAfter(tmpNode)\n                        .collapse(true)\n                        .select(true);\n                }\n            }\n\n            me.fireEvent(\"saveScene\");\n            return true;\n        }\n    });\n\n    me.addListener(\"beforeinserthtml\", function (evtName, html) {\n        var me = this,\n            rng = me.selection.getRange(),\n            pre = domUtils.findParentByTagName(rng.startContainer, \"pre\", true);\n        if (pre) {\n            if (!rng.collapsed) {\n                rng.deleteContents();\n            }\n            var htmlstr = \"\";\n            if (browser.ie && browser.version > 8) {\n                utils.each(\n                    UE.filterNode(UE.htmlparser(html), me.options.filterTxtRules)\n                        .children,\n                    function (node) {\n                        if (node.type == \"element\") {\n                            if (node.tagName == \"br\") {\n                                htmlstr += \"\\n\";\n                            } else if (!dtd.$empty[node.tagName]) {\n                                utils.each(node.children, function (cn) {\n                                    if (cn.type == \"element\") {\n                                        if (cn.tagName == \"br\") {\n                                            htmlstr += \"\\n\";\n                                        } else if (!dtd.$empty[node.tagName]) {\n                                            htmlstr += cn.innerText();\n                                        }\n                                    } else {\n                                        htmlstr += cn.data;\n                                    }\n                                });\n                                if (!/\\n$/.test(htmlstr)) {\n                                    htmlstr += \"\\n\";\n                                }\n                            }\n                        } else {\n                            htmlstr += node.data + \"\\n\";\n                        }\n                        if (!node.nextSibling() && /\\n$/.test(htmlstr)) {\n                            htmlstr = htmlstr.replace(/\\n$/, \"\");\n                        }\n                    }\n                );\n                var tmpNode = me.document.createTextNode(\n                    utils.html(htmlstr.replace(/&nbsp;/g, \" \"))\n                );\n                rng.insertNode(tmpNode).selectNode(tmpNode).select();\n            } else {\n                var frag = me.document.createDocumentFragment();\n\n                utils.each(\n                    UE.filterNode(UE.htmlparser(html), me.options.filterTxtRules)\n                        .children,\n                    function (node) {\n                        if (node.type == \"element\") {\n                            if (node.tagName == \"br\") {\n                                frag.appendChild(me.document.createElement(\"br\"));\n                            } else if (!dtd.$empty[node.tagName]) {\n                                utils.each(node.children, function (cn) {\n                                    if (cn.type == \"element\") {\n                                        if (cn.tagName == \"br\") {\n                                            frag.appendChild(me.document.createElement(\"br\"));\n                                        } else if (!dtd.$empty[node.tagName]) {\n                                            frag.appendChild(\n                                                me.document.createTextNode(\n                                                    utils.html(cn.innerText().replace(/&nbsp;/g, \" \"))\n                                                )\n                                            );\n                                        }\n                                    } else {\n                                        frag.appendChild(\n                                            me.document.createTextNode(\n                                                utils.html(cn.data.replace(/&nbsp;/g, \" \"))\n                                            )\n                                        );\n                                    }\n                                });\n                                if (frag.lastChild.nodeName != \"BR\") {\n                                    frag.appendChild(me.document.createElement(\"br\"));\n                                }\n                            }\n                        } else {\n                            frag.appendChild(\n                                me.document.createTextNode(\n                                    utils.html(node.data.replace(/&nbsp;/g, \" \"))\n                                )\n                            );\n                        }\n                        if (!node.nextSibling() && frag.lastChild.nodeName == \"BR\") {\n                            frag.removeChild(frag.lastChild);\n                        }\n                    }\n                );\n                rng.insertNode(frag).select();\n            }\n\n            return true;\n        }\n    });\n    //方向键的处理\n    me.addListener(\"keydown\", function (cmd, evt) {\n        var me = this,\n            keyCode = evt.keyCode || evt.which;\n        if (keyCode == 40) {\n            var rng = me.selection.getRange(),\n                pre,\n                start = rng.startContainer;\n            if (\n                rng.collapsed &&\n                (pre = domUtils.findParentByTagName(rng.startContainer, \"pre\", true)) &&\n                !pre.nextSibling\n            ) {\n                var last = pre.lastChild;\n                while (last && last.nodeName == \"BR\") {\n                    last = last.previousSibling;\n                }\n                if (\n                    last === start ||\n                    (rng.startContainer === pre &&\n                        rng.startOffset == pre.childNodes.length)\n                ) {\n                    me.execCommand(\"insertparagraph\");\n                    domUtils.preventDefault(evt);\n                }\n            }\n        }\n    });\n    //trace:3395\n    me.addListener(\"delkeydown\", function (type, evt) {\n        var rng = this.selection.getRange();\n        rng.txtToElmBoundary(true);\n        var start = rng.startContainer;\n        if (\n            domUtils.isTagNode(start, \"pre\") &&\n            rng.collapsed &&\n            domUtils.isStartInblock(rng)\n        ) {\n            var p = me.document.createElement(\"p\");\n            domUtils.fillNode(me.document, p);\n            start.parentNode.insertBefore(p, start);\n            domUtils.remove(start);\n            rng.setStart(p, 0).setCursor(false, true);\n            domUtils.preventDefault(evt);\n            return true;\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/insertfile.js",
    "content": "/**\n * 插入附件\n */\nUE.plugin.register(\"insertfile\", function () {\n    var me = this;\n\n    function getFileIcon(url) {\n        var ext = url.substr(url.lastIndexOf(\".\") + 1).toLowerCase(),\n            maps = {\n                \"ai\": \"ai.svg\",\n                \"apk\": \"apk.svg\",\n                \"chm\": \"chm.svg\",\n                \"css\": \"css.svg\",\n                \"doc\": \"doc.svg\",\n                \"docx\": \"docx.svg\",\n                \"dwg\": \"dwg.svg\",\n                \"gif\": \"gif.svg\",\n                \"html\": \"html.svg\",\n                \"jpeg\": \"jpeg.svg\",\n                \"jpg\": \"jpg.svg\",\n                \"log\": \"log.svg\",\n                \"mp3\": \"mp3.svg\",\n                \"mp4\": \"mp4.svg\",\n                \"pdf\": \"pdf.svg\",\n                \"png\": \"png.svg\",\n                \"ppt\": \"ppt.svg\",\n                \"pptx\": \"pptx.svg\",\n                \"psd\": \"psd.svg\",\n                \"rar\": \"rar.svg\",\n                \"svg\": \"svg.svg\",\n                \"torrent\": \"torrent.svg\",\n                \"txt\": \"txt.svg\",\n                \"unknown\": \"unknown.svg\",\n                \"xls\": \"xls.svg\",\n                \"xlsx\": \"xlsx.svg\",\n                \"zip\": \"zip.svg\",\n            };\n        return maps[ext] ? maps[ext] : maps[\"unknown\"];\n    }\n\n    return {\n        commands: {\n            insertfile: {\n                execCommand: function (command, filelist) {\n                    filelist = utils.isArray(filelist) ? filelist : [filelist];\n\n                    if (me.fireEvent(\"beforeinsertfile\", filelist) === true) {\n                        return;\n                    }\n\n\n                    //console.log('themePath',  );\n                    var i,\n                        item,\n                        icon,\n                        title,\n                        html = \"\",\n                        URL = me.getOpt(\"UEDITOR_HOME_URL\"),\n                        iconDir = me.options.themePath + me.options.theme + \"/exts/\";\n                    for (i = 0; i < filelist.length; i++) {\n                        item = filelist[i];\n                        icon = iconDir + getFileIcon(item.url);\n                        title =\n                            item.title || item.url.substr(item.url.lastIndexOf(\"/\") + 1);\n                        html +=\n                            '<p>' +\n                            '<a style=\"background:#EEE;padding:10px;border-radius:5px;line-height:1.5em;display:inline-flex;align-items:center;\" href=\"' +\n                            item.url +\n                            '\" title=\"' +\n                            title +\n                            '\" target=\"_blank\">' +\n                            '<img style=\"vertical-align:middle;margin-right:0.5em;height:1.5em;\" src=\"' + icon + '\" _src=\"' + icon + '\" />' +\n                            '<span style=\"color:#111111;line-height:1.5em;flex-grow:1;\">' +\n                            title +\n                            \"</span>\" +\n                            \"</a>\" +\n                            \"</p>\";\n                    }\n                    me.execCommand(\"insertHtml\", html);\n\n                    me.fireEvent(\"afterinsertfile\", filelist);\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/inserthtml.js",
    "content": "/**\n * 插入html字符串插件\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 插入html代码\n * @command inserthtml\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } html 插入的html字符串\n * @remaind 插入的标签内容是在当前的选区位置上插入，如果当前是闭合状态，那直接插入内容， 如果当前是选中状态，将先清除当前选中内容后，再做插入\n * @warning 注意:该命令会对当前选区的位置，对插入的内容进行过滤转换处理。 过滤的规则遵循html语意化的原则。\n * @example\n * ```javascript\n * //xxx[BB]xxx 当前选区为非闭合选区，选中BB这两个文本\n * //执行命令，插入<b>CC</b>\n * //插入后的效果 xxx<b>CC</b>xxx\n * //<p>xx|xxx</p> 当前选区为闭合状态\n * //插入<p>CC</p>\n * //结果 <p>xx</p><p>CC</p><p>xxx</p>\n * //<p>xxxx</p>|</p>xxx</p> 当前选区在两个p标签之间\n * //插入 xxxx\n * //结果 <p>xxxx</p><p>xxxx</p></p>xxx</p>\n * ```\n */\n\nUE.commands[\"inserthtml\"] = {\n    execCommand: function (command, html, notNeedFilter) {\n        var me = this,\n            range,\n            div;\n        if (!html) {\n            return;\n        }\n        if (me.fireEvent(\"beforeinserthtml\", html) === true) {\n            return;\n        }\n        range = me.selection.getRange();\n        div = range.document.createElement(\"div\");\n        div.style.display = \"inline\";\n\n        if (!notNeedFilter) {\n            var root = UE.htmlparser(html);\n            //如果给了过滤规则就先进行过滤\n            if (me.options.filterRules) {\n                UE.filterNode(root, me.options.filterRules);\n            }\n            //执行默认的处理\n            me.filterInputRule(root);\n            html = root.toHtml();\n        }\n        div.innerHTML = utils.trim(html);\n\n        if (!range.collapsed) {\n            var tmpNode = range.startContainer;\n            if (domUtils.isFillChar(tmpNode)) {\n                range.setStartBefore(tmpNode);\n            }\n            tmpNode = range.endContainer;\n            if (domUtils.isFillChar(tmpNode)) {\n                range.setEndAfter(tmpNode);\n            }\n            range.txtToElmBoundary();\n            //结束边界可能放到了br的前边，要把br包含进来\n            // x[xxx]<br/>\n            if (range.endContainer && range.endContainer.nodeType == 1) {\n                tmpNode = range.endContainer.childNodes[range.endOffset];\n                if (tmpNode && domUtils.isBr(tmpNode)) {\n                    range.setEndAfter(tmpNode);\n                }\n            }\n            if (range.startOffset == 0) {\n                tmpNode = range.startContainer;\n                if (domUtils.isBoundaryNode(tmpNode, \"firstChild\")) {\n                    tmpNode = range.endContainer;\n                    if (\n                        range.endOffset ==\n                        (tmpNode.nodeType == 3\n                            ? tmpNode.nodeValue.length\n                            : tmpNode.childNodes.length) &&\n                        domUtils.isBoundaryNode(tmpNode, \"lastChild\")\n                    ) {\n                        me.body.innerHTML = \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\";\n                        range.setStart(me.body.firstChild, 0).collapse(true);\n                    }\n                }\n            }\n            !range.collapsed && range.deleteContents();\n            if (range.startContainer.nodeType == 1) {\n                var child = range.startContainer.childNodes[range.startOffset],\n                    pre;\n                if (\n                    child &&\n                    domUtils.isBlockElm(child) &&\n                    (pre = child.previousSibling) &&\n                    domUtils.isBlockElm(pre)\n                ) {\n                    range.setEnd(pre, pre.childNodes.length).collapse();\n                    while (child.firstChild) {\n                        pre.appendChild(child.firstChild);\n                    }\n                    domUtils.remove(child);\n                }\n            }\n        }\n\n        var child,\n            parent,\n            pre,\n            tmp,\n            hadBreak = 0,\n            nextNode;\n        //如果当前位置选中了fillchar要干掉，要不会产生空行\n        if (range.inFillChar()) {\n            child = range.startContainer;\n            if (domUtils.isFillChar(child)) {\n                range.setStartBefore(child).collapse(true);\n                domUtils.remove(child);\n            } else if (domUtils.isFillChar(child, true)) {\n                child.nodeValue = child.nodeValue.replace(fillCharReg, \"\");\n                range.startOffset--;\n                range.collapsed && range.collapse(true);\n            }\n        }\n        //列表单独处理\n        var li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n        if (li) {\n            var next, last;\n            while ((child = div.firstChild)) {\n                //针对hr单独处理一下先\n                while (\n                    child &&\n                    (child.nodeType == 3 ||\n                        !domUtils.isBlockElm(child) ||\n                        child.tagName == \"HR\")\n                    ) {\n                    next = child.nextSibling;\n                    range.insertNode(child).collapse();\n                    last = child;\n                    child = next;\n                }\n                if (child) {\n                    if (/^(ol|ul)$/i.test(child.tagName)) {\n                        while (child.firstChild) {\n                            last = child.firstChild;\n                            domUtils.insertAfter(li, child.firstChild);\n                            li = li.nextSibling;\n                        }\n                        domUtils.remove(child);\n                    } else {\n                        var tmpLi;\n                        next = child.nextSibling;\n                        tmpLi = me.document.createElement(\"li\");\n                        domUtils.insertAfter(li, tmpLi);\n                        tmpLi.appendChild(child);\n                        last = child;\n                        child = next;\n                        li = tmpLi;\n                    }\n                }\n            }\n            li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n            if (domUtils.isEmptyBlock(li)) {\n                domUtils.remove(li);\n            }\n            if (last) {\n                range.setStartAfter(last).collapse(true).select(true);\n            }\n        } else {\n            while ((child = div.firstChild)) {\n                if (hadBreak) {\n                    var p = me.document.createElement(\"p\");\n                    while (child && (child.nodeType == 3 || !dtd.$block[child.tagName])) {\n                        nextNode = child.nextSibling;\n                        p.appendChild(child);\n                        child = nextNode;\n                    }\n                    if (p.firstChild) {\n                        child = p;\n                    }\n                }\n                range.insertNode(child);\n                nextNode = child.nextSibling;\n                if (\n                    !hadBreak &&\n                    child.nodeType == domUtils.NODE_ELEMENT &&\n                    domUtils.isBlockElm(child)\n                ) {\n                    parent = domUtils.findParent(child, function (node) {\n                        return domUtils.isBlockElm(node);\n                    });\n                    if (\n                        parent &&\n                        parent.tagName.toLowerCase() != \"body\" &&\n                        !(\n                            dtd[parent.tagName][child.nodeName] && child.parentNode === parent\n                        )\n                    ) {\n                        if (!dtd[parent.tagName][child.nodeName]) {\n                            pre = parent;\n                        } else {\n                            tmp = child.parentNode;\n                            while (tmp !== parent) {\n                                pre = tmp;\n                                tmp = tmp.parentNode;\n                            }\n                        }\n\n                        domUtils.breakParent(child, pre || tmp);\n                        //去掉break后前一个多余的节点  <p>|<[p> ==> <p></p><div></div><p>|</p>\n                        var pre = child.previousSibling;\n                        domUtils.trimWhiteTextNode(pre);\n                        if (!pre.childNodes.length) {\n                            domUtils.remove(pre);\n                        }\n                        //trace:2012,在非ie的情况，切开后剩下的节点有可能不能点入光标添加br占位\n\n                        if (\n                            !browser.ie &&\n                            (next = child.nextSibling) &&\n                            domUtils.isBlockElm(next) &&\n                            next.lastChild &&\n                            !domUtils.isBr(next.lastChild)\n                        ) {\n                            next.appendChild(me.document.createElement(\"br\"));\n                        }\n                        hadBreak = 1;\n                    }\n                }\n                var next = child.nextSibling;\n                if (!div.firstChild && next && domUtils.isBlockElm(next)) {\n                    range.setStart(next, 0).collapse(true);\n                    break;\n                }\n                range.setEndAfter(child).collapse();\n            }\n\n            child = range.startContainer;\n\n            if (nextNode && domUtils.isBr(nextNode)) {\n                domUtils.remove(nextNode);\n            }\n            //用chrome可能有空白展位符\n            if (domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)) {\n                if ((nextNode = child.nextSibling)) {\n                    domUtils.remove(child);\n                    if (nextNode.nodeType == 1 && dtd.$block[nextNode.tagName]) {\n                        range.setStart(nextNode, 0).collapse(true).shrinkBoundary();\n                    }\n                } else {\n                    try {\n                        child.innerHTML = browser.ie ? domUtils.fillChar : \"<br/>\";\n                    } catch (e) {\n                        range.setStartBefore(child);\n                        domUtils.remove(child);\n                    }\n                }\n            }\n            //加上true因为在删除表情等时会删两次，第一次是删的fillData\n            try {\n                range.select(true);\n            } catch (e) {\n            }\n        }\n\n        setTimeout(function () {\n            range = me.selection.getRange();\n            range.scrollToView(\n                me.autoHeightEnabled,\n                me.autoHeightEnabled ? domUtils.getXY(me.iframe).y : 0\n            );\n            me.fireEvent(\"afterinserthtml\", html);\n        }, 200);\n    }\n};\n"
  },
  {
    "path": "_src/plugins/insertparagraph.js",
    "content": "/**\n * 插入段落\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 插入段落\n * @command insertparagraph\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * //editor是编辑器实例\n * editor.execCommand( 'insertparagraph' );\n * ```\n */\n\nUE.commands[\"insertparagraph\"] = {\n    execCommand: function (cmdName, front) {\n        var me = this,\n            range = me.selection.getRange(),\n            start = range.startContainer,\n            tmpNode;\n        while (start) {\n            if (domUtils.isBody(start)) {\n                break;\n            }\n            tmpNode = start;\n            start = start.parentNode;\n        }\n        if (tmpNode) {\n            var p = me.document.createElement(\"p\");\n            if (front) {\n                tmpNode.parentNode.insertBefore(p, tmpNode);\n            } else {\n                tmpNode.parentNode.insertBefore(p, tmpNode.nextSibling);\n            }\n            domUtils.fillNode(me.document, p);\n            range.setStart(p, 0).setCursor(false, true);\n        }\n    }\n};\n"
  },
  {
    "path": "_src/plugins/justify.js",
    "content": "/**\n * 段落格式\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 段落对齐方式\n * @command justify\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } align 对齐方式：left => 居左，right => 居右，center => 居中，justify => 两端对齐\n * @example\n * ```javascript\n * editor.execCommand( 'justify', 'center' );\n * ```\n */\n/**\n * 如果选区所在位置是段落区域，返回当前段落对齐方式\n * @command justify\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 返回段落对齐方式\n * @example\n * ```javascript\n * editor.queryCommandValue( 'justify' );\n * ```\n */\n\nUE.plugins[\"justify\"] = function () {\n    var me = this,\n        block = domUtils.isBlockElm,\n        defaultValue = {\n            left: 1,\n            right: 1,\n            center: 1,\n            justify: 1\n        },\n        doJustify = function (range, style) {\n            var bookmark = range.createBookmark(),\n                filterFn = function (node) {\n                    return node.nodeType == 1\n                        ? node.tagName.toLowerCase() != \"br\" &&\n                        !domUtils.isBookmarkNode(node)\n                        : !domUtils.isWhitespace(node);\n                };\n\n            range.enlarge(true);\n            var bookmark2 = range.createBookmark(),\n                current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),\n                tmpRange = range.cloneRange(),\n                tmpNode;\n            while (\n                current &&\n                !(\n                    domUtils.getPosition(current, bookmark2.end) &\n                    domUtils.POSITION_FOLLOWING\n                )\n                ) {\n                if (current.nodeType == 3 || !block(current)) {\n                    tmpRange.setStartBefore(current);\n                    while (current && current !== bookmark2.end && !block(current)) {\n                        tmpNode = current;\n                        current = domUtils.getNextDomNode(current, false, null, function (\n                            node\n                        ) {\n                            return !block(node);\n                        });\n                    }\n                    tmpRange.setEndAfter(tmpNode);\n                    var common = tmpRange.getCommonAncestor();\n                    if (!domUtils.isBody(common) && block(common)) {\n                        domUtils.setStyles(\n                            common,\n                            utils.isString(style) ? {\"text-align\": style} : style\n                        );\n                        current = common;\n                    } else {\n                        var p = range.document.createElement(\"p\");\n                        domUtils.setStyles(\n                            p,\n                            utils.isString(style) ? {\"text-align\": style} : style\n                        );\n                        var frag = tmpRange.extractContents();\n                        p.appendChild(frag);\n                        tmpRange.insertNode(p);\n                        current = p;\n                    }\n                    current = domUtils.getNextDomNode(current, false, filterFn);\n                } else {\n                    current = domUtils.getNextDomNode(current, true, filterFn);\n                }\n            }\n            return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);\n        };\n\n    UE.commands[\"justify\"] = {\n        execCommand: function (cmdName, align) {\n            var range = this.selection.getRange(),\n                txt;\n\n            //闭合时单独处理\n            if (range.collapsed) {\n                txt = this.document.createTextNode(\"p\");\n                range.insertNode(txt);\n            }\n            doJustify(range, align);\n            if (txt) {\n                range.setStartBefore(txt).collapse(true);\n                domUtils.remove(txt);\n            }\n\n            range.select();\n\n            return true;\n        },\n        queryCommandValue: function () {\n            var startNode = this.selection.getStart(),\n                value = domUtils.getComputedStyle(startNode, \"text-align\");\n            return defaultValue[value] ? value : \"left\";\n        },\n        queryCommandState: function () {\n            var start = this.selection.getStart(),\n                cell =\n                    start &&\n                    domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n\n            return cell ? -1 : 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/keystrokes.js",
    "content": "/* 处理特殊键的兼容性问题 */\nUE.plugins[\"keystrokes\"] = function () {\n    var me = this;\n    var collapsed = true;\n    me.addListener(\"keydown\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which,\n            rng = me.selection.getRange();\n\n        //处理全选的情况\n        if (\n            !rng.collapsed &&\n            !(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) &&\n            ((keyCode >= 65 && keyCode <= 90) ||\n                (keyCode >= 48 && keyCode <= 57) ||\n                (keyCode >= 96 && keyCode <= 111) ||\n                {\n                    13: 1,\n                    8: 1,\n                    46: 1\n                }[keyCode])\n        ) {\n            var tmpNode = rng.startContainer;\n            if (domUtils.isFillChar(tmpNode)) {\n                rng.setStartBefore(tmpNode);\n            }\n            tmpNode = rng.endContainer;\n            if (domUtils.isFillChar(tmpNode)) {\n                rng.setEndAfter(tmpNode);\n            }\n            rng.txtToElmBoundary();\n            //结束边界可能放到了br的前边，要把br包含进来\n            // x[xxx]<br/>\n            if (rng.endContainer && rng.endContainer.nodeType == 1) {\n                tmpNode = rng.endContainer.childNodes[rng.endOffset];\n                if (tmpNode && domUtils.isBr(tmpNode)) {\n                    rng.setEndAfter(tmpNode);\n                }\n            }\n            if (rng.startOffset == 0) {\n                tmpNode = rng.startContainer;\n                if (domUtils.isBoundaryNode(tmpNode, \"firstChild\")) {\n                    tmpNode = rng.endContainer;\n                    if (\n                        rng.endOffset ==\n                        (tmpNode.nodeType == 3\n                            ? tmpNode.nodeValue.length\n                            : tmpNode.childNodes.length) &&\n                        domUtils.isBoundaryNode(tmpNode, \"lastChild\")\n                    ) {\n                        me.fireEvent(\"saveScene\");\n                        me.body.innerHTML = \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\";\n                        rng.setStart(me.body.firstChild, 0).setCursor(false, true);\n                        me._selectionChange();\n                        return;\n                    }\n                }\n            }\n        }\n\n        //处理backspace\n        if (keyCode == keymap.Backspace) {\n            rng = me.selection.getRange();\n            collapsed = rng.collapsed;\n            if (me.fireEvent(\"delkeydown\", evt)) {\n                return;\n            }\n            var start, end;\n            //避免按两次删除才能生效的问题\n            if (rng.collapsed && rng.inFillChar()) {\n                start = rng.startContainer;\n\n                if (domUtils.isFillChar(start)) {\n                    rng.setStartBefore(start).shrinkBoundary(true).collapse(true);\n                    domUtils.remove(start);\n                } else {\n                    start.nodeValue = start.nodeValue.replace(\n                        new RegExp(\"^\" + domUtils.fillChar),\n                        \"\"\n                    );\n                    rng.startOffset--;\n                    rng.collapse(true).select(true);\n                }\n            }\n\n            //解决选中control元素不能删除的问题\n            if ((start = rng.getClosedNode())) {\n                me.fireEvent(\"saveScene\");\n                rng.setStartBefore(start);\n                domUtils.remove(start);\n                rng.setCursor();\n                me.fireEvent(\"saveScene\");\n                domUtils.preventDefault(evt);\n                return;\n            }\n            //阻止在table上的删除\n            if (!browser.ie) {\n                start = domUtils.findParentByTagName(rng.startContainer, \"table\", true);\n                end = domUtils.findParentByTagName(rng.endContainer, \"table\", true);\n                if ((start && !end) || (!start && end) || start !== end) {\n                    evt.preventDefault();\n                    return;\n                }\n            }\n        }\n        //处理tab键的逻辑\n        if (keyCode == keymap.Tab) {\n            //不处理以下标签\n            var excludeTagNameForTabKey = {\n                ol: 1,\n                ul: 1,\n                table: 1\n            };\n            //处理组件里的tab按下事件\n            if (me.fireEvent(\"tabkeydown\", evt)) {\n                domUtils.preventDefault(evt);\n                return;\n            }\n            var range = me.selection.getRange();\n            me.fireEvent(\"saveScene\");\n            for (\n                var i = 0,\n                    txt = \"\",\n                    tabSize = me.options.tabSize || 4,\n                    tabNode = me.options.tabNode || \"&nbsp;\";\n                i < tabSize;\n                i++\n            ) {\n                txt += tabNode;\n            }\n            var span = me.document.createElement(\"span\");\n            span.innerHTML = txt + domUtils.fillChar;\n            if (range.collapsed) {\n                range.insertNode(span.cloneNode(true).firstChild).setCursor(true);\n            } else {\n                var filterFn = function (node) {\n                    return (\n                        domUtils.isBlockElm(node) &&\n                        !excludeTagNameForTabKey[node.tagName.toLowerCase()]\n                    );\n                };\n                //普通的情况\n                start = domUtils.findParent(range.startContainer, filterFn, true);\n                end = domUtils.findParent(range.endContainer, filterFn, true);\n                if (start && end && start === end) {\n                    range.deleteContents();\n                    range.insertNode(span.cloneNode(true).firstChild).setCursor(true);\n                } else {\n                    var bookmark = range.createBookmark();\n                    range.enlarge(true);\n                    var bookmark2 = range.createBookmark(),\n                        current = domUtils.getNextDomNode(bookmark2.start, false, filterFn);\n                    while (\n                        current &&\n                        !(\n                            domUtils.getPosition(current, bookmark2.end) &\n                            domUtils.POSITION_FOLLOWING\n                        )\n                        ) {\n                        current.insertBefore(\n                            span.cloneNode(true).firstChild,\n                            current.firstChild\n                        );\n                        current = domUtils.getNextDomNode(current, false, filterFn);\n                    }\n                    range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select();\n                }\n            }\n            domUtils.preventDefault(evt);\n        }\n        //trace:1634\n        //ff的del键在容器空的时候，也会删除\n        if (browser.gecko && keyCode == 46) {\n            range = me.selection.getRange();\n            if (range.collapsed) {\n                start = range.startContainer;\n                if (domUtils.isEmptyBlock(start)) {\n                    var parent = start.parentNode;\n                    while (\n                        domUtils.getChildCount(parent) == 1 &&\n                        !domUtils.isBody(parent)\n                        ) {\n                        start = parent;\n                        parent = parent.parentNode;\n                    }\n                    if (start === parent.lastChild) evt.preventDefault();\n                    return;\n                }\n            }\n        }\n\n        /* 修复在编辑区域快捷键 (Mac:meta+alt+I; Win:ctrl+shift+I) 打不开 chrome 控制台的问题 */\n        browser.chrome &&\n        me.on(\"keydown\", function (type, e) {\n            var keyCode = e.keyCode || e.which;\n            if (\n                ((e.metaKey && e.altKey) || (e.ctrlKey && e.shiftKey)) &&\n                keyCode == 73\n            ) {\n                return true;\n            }\n        });\n    });\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which,\n            rng,\n            me = this;\n        if (keyCode == keymap.Backspace) {\n            if (me.fireEvent(\"delkeyup\")) {\n                return;\n            }\n            rng = me.selection.getRange();\n            if (rng.collapsed) {\n                var tmpNode,\n                    autoClearTagName = [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\n                if (\n                    (tmpNode = domUtils.findParentByTagName(\n                        rng.startContainer,\n                        autoClearTagName,\n                        true\n                    ))\n                ) {\n                    if (domUtils.isEmptyBlock(tmpNode)) {\n                        var pre = tmpNode.previousSibling;\n                        if (pre && pre.nodeName != \"TABLE\") {\n                            domUtils.remove(tmpNode);\n                            rng.setStartAtLast(pre).setCursor(false, true);\n                            return;\n                        } else {\n                            var next = tmpNode.nextSibling;\n                            if (next && next.nodeName != \"TABLE\") {\n                                domUtils.remove(tmpNode);\n                                rng.setStartAtFirst(next).setCursor(false, true);\n                                return;\n                            }\n                        }\n                    }\n                }\n                //处理当删除到body时，要重新给p标签展位\n                if (domUtils.isBody(rng.startContainer)) {\n                    var tmpNode = domUtils.createElement(me.document, \"p\", {\n                        innerHTML: browser.ie ? domUtils.fillChar : \"<br/>\"\n                    });\n                    rng.insertNode(tmpNode).setStart(tmpNode, 0).setCursor(false, true);\n                }\n            }\n\n            //chrome下如果删除了inline标签，浏览器会有记忆，在输入文字还是会套上刚才删除的标签，所以这里再选一次就不会了\n            if (\n                !collapsed &&\n                (rng.startContainer.nodeType == 3 ||\n                    (rng.startContainer.nodeType == 1 &&\n                        domUtils.isEmptyBlock(rng.startContainer)))\n            ) {\n                if (browser.ie) {\n                    var span = rng.document.createElement(\"span\");\n                    rng.insertNode(span).setStartBefore(span).collapse(true);\n                    rng.select();\n                    domUtils.remove(span);\n                } else {\n                    rng.select();\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/letterspacing.js",
    "content": "UE.plugins[\"letterspacing\"] = function () {\n  var me = this;\n  me.setOpt({\n    letterspacing: [\"0\", \"0.25\", \"0.5\", \"1\", \"1.5\", \"2\", \"3\", \"4\", \"5\"],\n  });\n\n  me.commands[\"letterspacing\"] = {\n    execCommand: function (cmdName, value) {\n      this.execCommand(\"paragraph\", \"p\", {\n        style: \"letter-spacing:\" + (value == \"0\" ? \"normal\" : value + \"em\"),\n      });\n      return true;\n    },\n    queryCommandValue: function () {\n      var pN = domUtils.filterNodeList(\n        this.selection.getStartElementPath(),\n        function (node) {\n          return domUtils.isBlockElm(node);\n        }\n      );\n      if (pN) {\n        var value = domUtils.getComputedStyle(pN, \"letter-spacing\");\n        return value == \"normal\" ? '0' : value.replace(/[^\\d.]*/gi, \"\");\n      }\n    },\n  };\n};\n"
  },
  {
    "path": "_src/plugins/lineheight.js",
    "content": "/**\n * 设置行内间距\n * @file\n * @since 1.2.6.1\n */\nUE.plugins[\"lineheight\"] = function () {\n    var me = this;\n    me.setOpt({lineheight: [\"1\", \"1.5\", \"1.75\", \"2\", \"3\", \"4\", \"5\"]});\n\n    /**\n     * 行距\n     * @command lineheight\n     * @method execCommand\n     * @param { String } cmdName 命令字符串\n     * @param { String } value 传入的行高值， 该值是当前字体的倍数， 例如： 1.5, 1.75\n     * @example\n     * ```javascript\n     * editor.execCommand( 'lineheight', 1.5);\n     * ```\n     */\n    /**\n     * 查询当前选区内容的行高大小\n     * @command lineheight\n     * @method queryCommandValue\n     * @param { String } cmd 命令字符串\n     * @return { String } 返回当前行高大小\n     * @example\n     * ```javascript\n     * editor.queryCommandValue( 'lineheight' );\n     * ```\n     */\n\n    me.commands[\"lineheight\"] = {\n        execCommand: function (cmdName, value) {\n            this.execCommand(\"paragraph\", \"p\", {\n                style: \"line-height:\" + (value == \"1\" ? \"normal\" : value + \"em\")\n            });\n            return true;\n        },\n        queryCommandValue: function () {\n            var pN = domUtils.filterNodeList(\n                this.selection.getStartElementPath(),\n                function (node) {\n                    return domUtils.isBlockElm(node);\n                }\n            );\n            if (pN) {\n                var value = domUtils.getComputedStyle(pN, \"line-height\");\n                return value == \"normal\" ? 1 : value.replace(/[^\\d.]*/gi, \"\");\n            }\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/link.js",
    "content": "/**\n * 超链接\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 插入超链接\n * @command link\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { Object } options   设置自定义属性，例如：url、title、target\n * @example\n * ```javascript\n * editor.execCommand( 'link', '{\n *     url:'ueditor.baidu.com',\n *     title:'ueditor',\n *     target:'_blank'\n * }' );\n * ```\n */\n/**\n * 返回当前选中的第一个超链接节点\n * @command link\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { Element } 超链接节点\n * @example\n * ```javascript\n * editor.queryCommandValue( 'link' );\n * ```\n */\n\n/**\n * 取消超链接\n * @command unlink\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'unlink');\n * ```\n */\n\nUE.plugins[\"link\"] = function () {\n    function optimize(range) {\n        var start = range.startContainer,\n            end = range.endContainer;\n\n        if ((start = domUtils.findParentByTagName(start, \"a\", true))) {\n            range.setStartBefore(start);\n        }\n        if ((end = domUtils.findParentByTagName(end, \"a\", true))) {\n            range.setEndAfter(end);\n        }\n    }\n\n    UE.commands[\"unlink\"] = {\n        execCommand: function () {\n            var range = this.selection.getRange(),\n                bookmark;\n            if (\n                range.collapsed &&\n                !domUtils.findParentByTagName(range.startContainer, \"a\", true)\n            ) {\n                return;\n            }\n            bookmark = range.createBookmark();\n            optimize(range);\n            range.removeInlineStyle(\"a\").moveToBookmark(bookmark).select();\n        },\n        queryCommandState: function () {\n            return !this.highlight && this.queryCommandValue(\"link\") ? 0 : -1;\n        }\n    };\n\n    function doLink(range, opt, me) {\n        var rngClone = range.cloneRange(),\n            link = me.queryCommandValue(\"link\");\n        optimize((range = range.adjustmentBoundary()));\n        var start = range.startContainer;\n        if (start.nodeType == 1 && link) {\n            start = start.childNodes[range.startOffset];\n            if (\n                start &&\n                start.nodeType == 1 &&\n                start.tagName == \"A\" &&\n                /^(?:https?|ftp|file)\\s*:\\s*\\/\\//.test(\n                    start[browser.ie ? \"innerText\" : \"textContent\"]\n                )\n            ) {\n                start[browser.ie ? \"innerText\" : \"textContent\"] = utils.html(\n                    opt.textValue || opt.href\n                );\n            }\n        }\n        if (!rngClone.collapsed || link) {\n            range.removeInlineStyle(\"a\");\n            rngClone = range.cloneRange();\n        }\n\n        if (rngClone.collapsed) {\n            var a = range.document.createElement(\"a\"),\n                text = \"\";\n            if (opt.textValue) {\n                text = utils.html(opt.textValue);\n                delete opt.textValue;\n            } else {\n                text = utils.html(opt.href);\n            }\n            domUtils.setAttributes(a, opt);\n            start = domUtils.findParentByTagName(rngClone.startContainer, \"a\", true);\n            if (start && domUtils.isInNodeEndBoundary(rngClone, start)) {\n                range.setStartAfter(start).collapse(true);\n            }\n            a[browser.ie ? \"innerText\" : \"textContent\"] = text;\n            range.insertNode(a).selectNode(a);\n        } else {\n            range.applyInlineStyle(\"a\", opt);\n        }\n    }\n\n    UE.commands[\"link\"] = {\n        execCommand: function (cmdName, opt) {\n            var range;\n            opt._href && (opt._href = utils.unhtml(opt._href, /[<\">]/g));\n            opt.href && (opt.href = utils.unhtml(opt.href, /[<\">]/g));\n            opt.textValue && (opt.textValue = utils.unhtml(opt.textValue, /[<\">]/g));\n            doLink((range = this.selection.getRange()), opt, this);\n            //闭合都不加占位符，如果加了会在a后边多个占位符节点，导致a是图片背景组成的列表，出现空白问题\n            range.collapse().select(true);\n        },\n        queryCommandValue: function () {\n            var range = this.selection.getRange(),\n                node;\n            if (range.collapsed) {\n                //                    node = this.selection.getStart();\n                //在ie下getstart()取值偏上了\n                node = range.startContainer;\n                node = node.nodeType == 1 ? node : node.parentNode;\n\n                if (\n                    node &&\n                    (node = domUtils.findParentByTagName(node, \"a\", true)) &&\n                    !domUtils.isInNodeEndBoundary(range, node)\n                ) {\n                    return node;\n                }\n            } else {\n                //trace:1111  如果是<p><a>xx</a></p> startContainer是p就会找不到a\n                range.shrinkBoundary();\n                var start = range.startContainer.nodeType == 3 ||\n                    !range.startContainer.childNodes[range.startOffset]\n                    ? range.startContainer\n                    : range.startContainer.childNodes[range.startOffset],\n                    end = range.endContainer.nodeType == 3 || range.endOffset == 0\n                        ? range.endContainer\n                        : range.endContainer.childNodes[range.endOffset - 1],\n                    common = range.getCommonAncestor();\n                node = domUtils.findParentByTagName(common, \"a\", true);\n                if (!node && common.nodeType == 1) {\n                    var as = common.getElementsByTagName(\"a\"),\n                        ps,\n                        pe;\n\n                    for (var i = 0, ci; (ci = as[i++]);) {\n                        (ps = domUtils.getPosition(ci, start)), (pe = domUtils.getPosition(\n                            ci,\n                            end\n                        ));\n                        if (\n                            (ps & domUtils.POSITION_FOLLOWING ||\n                                ps & domUtils.POSITION_CONTAINS) &&\n                            (pe & domUtils.POSITION_PRECEDING ||\n                                pe & domUtils.POSITION_CONTAINS)\n                        ) {\n                            node = ci;\n                            break;\n                        }\n                    }\n                }\n                return node;\n            }\n        },\n        queryCommandState: function () {\n            //判断如果是视频的话连接不可用\n            //fix 853\n            var img = this.selection.getRange().getClosedNode(),\n                flag =\n                    img &&\n                    (img.className == \"edui-faked-video\" ||\n                        img.className.indexOf(\"edui-upload-video\") != -1);\n            return flag ? -1 : 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/list.js",
    "content": "/**\n * 有序列表,无序列表插件\n * @file\n * @since 1.2.6.1\n */\n\nUE.plugins[\"list\"] = function () {\n    var me = this,\n        notExchange = {\n            TD: 1,\n            PRE: 1,\n            BLOCKQUOTE: 1\n        };\n    // var customStyle = {\n    //     cn: \"cn-1-\",\n    //     cn1: \"cn-2-\",\n    //     cn2: \"cn-3-\",\n    //     num: \"num-1-\",\n    //     num1: \"num-2-\",\n    //     num2: \"num-3-\",\n    //     dash: \"dash\",\n    //     dot: \"dot\"\n    // };\n\n    me.setOpt({\n        autoTransWordToList: false,\n        insertorderedlist: {\n            // num: \"\",\n            // num1: \"\",\n            // num2: \"\",\n            // cn: \"\",\n            // cn1: \"\",\n            // cn2: \"\",\n            decimal: \"\",\n            \"lower-alpha\": \"\",\n            \"lower-roman\": \"\",\n            \"upper-alpha\": \"\",\n            \"upper-roman\": \"\"\n        },\n        insertunorderedlist: {\n            circle: \"\",\n            disc: \"\",\n            square: \"\",\n            // dash: \"\",\n            // dot: \"\"\n        },\n        listDefaultPaddingLeft: \"30\",\n        listiconpath: \"http://bs.baidu.com/listicon/\",\n        maxListLevel: -1, //-1不限制\n        disablePInList: false\n    });\n\n    function listToArray(list) {\n        var arr = [];\n        for (var p in list) {\n            arr.push(p);\n        }\n        return arr;\n    }\n\n    var listStyle = {\n        OL: listToArray(me.options.insertorderedlist),\n        UL: listToArray(me.options.insertunorderedlist)\n    };\n    var liiconpath = me.options.listiconpath;\n\n    //根据用户配置，调整customStyle\n    // for (var s in customStyle) {\n    //     if (\n    //         !me.options.insertorderedlist.hasOwnProperty(s) &&\n    //         !me.options.insertunorderedlist.hasOwnProperty(s)\n    //     ) {\n    //         delete customStyle[s];\n    //     }\n    // }\n\n    me.ready(function () {\n        var customCss = [];\n        // for (var p in customStyle) {\n        //     if (p == \"dash\" || p == \"dot\") {\n        //         customCss.push(\n        //             \"li.list-\" +\n        //             customStyle[p] +\n        //             \"{background-image:url(\" +\n        //             liiconpath +\n        //             customStyle[p] +\n        //             \".gif)}\"\n        //         );\n        //         customCss.push(\n        //             \"ul.custom_\" +\n        //             p +\n        //             \"{list-style:none;}ul.custom_\" +\n        //             p +\n        //             \" li{background-position:0 3px;background-repeat:no-repeat}\"\n        //         );\n        //     } else {\n        //         for (var i = 0; i < 99; i++) {\n        //             customCss.push(\n        //                 \"li.list-\" +\n        //                 customStyle[p] +\n        //                 i +\n        //                 \"{background-image:url(\" +\n        //                 liiconpath +\n        //                 \"list-\" +\n        //                 customStyle[p] +\n        //                 i +\n        //                 \".gif)}\"\n        //             );\n        //         }\n        //         customCss.push(\n        //             \"ol.custom_\" +\n        //             p +\n        //             \"{list-style:none;}ol.custom_\" +\n        //             p +\n        //             \" li{background-position:0 3px;background-repeat:no-repeat}\"\n        //         );\n        //     }\n        //     switch (p) {\n        //         case \"cn\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-1{padding-left:25px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-2{padding-left:40px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-3{padding-left:55px}\");\n        //             break;\n        //         case \"cn1\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-1{padding-left:30px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-2{padding-left:40px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-3{padding-left:55px}\");\n        //             break;\n        //         case \"cn2\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-1{padding-left:40px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-2{padding-left:55px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-3{padding-left:68px}\");\n        //             break;\n        //         case \"num\":\n        //         case \"num1\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-1{padding-left:25px}\");\n        //             break;\n        //         case \"num2\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-1{padding-left:35px}\");\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft-2{padding-left:40px}\");\n        //             break;\n        //         case \"dash\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft{padding-left:35px}\");\n        //             break;\n        //         case \"dot\":\n        //             customCss.push(\"li.list-\" + p + \"-paddingleft{padding-left:20px}\");\n        //     }\n        // }\n        customCss.push(\".list-paddingleft-1{padding-left:0}\");\n        customCss.push(\n            \".list-paddingleft-2{padding-left:\" +\n            me.options.listDefaultPaddingLeft +\n            \"px}\"\n        );\n        customCss.push(\n            \".list-paddingleft-3{padding-left:\" +\n            me.options.listDefaultPaddingLeft * 2 +\n            \"px}\"\n        );\n        //如果不给宽度会在自定应样式里出现滚动条\n        utils.cssRule(\n            \"list\",\n            \"ol,ul{margin:0;pading:0;\" +\n            (browser.ie ? \"\" : \"width:95%\") +\n            \"}li{clear:both;}\" +\n            customCss.join(\"\\n\"),\n            me.document\n        );\n    });\n    //单独处理剪切的问题\n    me.ready(function () {\n        domUtils.on(me.body, \"cut\", function () {\n            setTimeout(function () {\n                var rng = me.selection.getRange(),\n                    li;\n                //trace:3416\n                if (!rng.collapsed) {\n                    if (\n                        (li = domUtils.findParentByTagName(rng.startContainer, \"li\", true))\n                    ) {\n                        if (!li.nextSibling && domUtils.isEmptyBlock(li)) {\n                            var pn = li.parentNode,\n                                node;\n                            if ((node = pn.previousSibling)) {\n                                domUtils.remove(pn);\n                                rng.setStartAtLast(node).collapse(true);\n                                rng.select(true);\n                            } else if ((node = pn.nextSibling)) {\n                                domUtils.remove(pn);\n                                rng.setStartAtFirst(node).collapse(true);\n                                rng.select(true);\n                            } else {\n                                var tmpNode = me.document.createElement(\"p\");\n                                domUtils.fillNode(me.document, tmpNode);\n                                pn.parentNode.insertBefore(tmpNode, pn);\n                                domUtils.remove(pn);\n                                rng.setStart(tmpNode, 0).collapse(true);\n                                rng.select(true);\n                            }\n                        }\n                    }\n                }\n            });\n        });\n    });\n\n    function getStyle(node) {\n        var cls = node.className;\n        if (domUtils.hasClass(node, /custom_/)) {\n            return cls.match(/custom_(\\w+)/)[1];\n        }\n        return domUtils.getStyle(node, \"list-style-type\");\n    }\n\n    me.addListener(\"beforepaste\", function (type, html) {\n        var me = this,\n            rng = me.selection.getRange(),\n            li;\n        var root = UE.htmlparser(html.html, true);\n        if ((li = domUtils.findParentByTagName(rng.startContainer, \"li\", true))) {\n            var list = li.parentNode,\n                tagName = list.tagName === \"OL\" ? \"ul\" : \"ol\";\n            utils.each(root.getNodesByTagName(tagName), function (n) {\n                n.tagName = list.tagName;\n                n.setAttr();\n                if (n.parentNode === root) {\n                    type = getStyle(list) || (list.tagName == \"OL\" ? \"decimal\" : \"disc\");\n                } else {\n                    var className = n.parentNode.getAttr(\"class\");\n                    if (className && /custom_/.test(className)) {\n                        type = className.match(/custom_(\\w+)/)[1];\n                    } else {\n                        type = n.parentNode.getStyle(\"list-style-type\");\n                    }\n                    if (!type) {\n                        type = list.tagName === \"OL\" ? \"decimal\" : \"disc\";\n                    }\n                }\n                var index = utils.indexOf(listStyle[list.tagName], type);\n                if (n.parentNode !== root)\n                    index = index + 1 === listStyle[list.tagName].length ? 0 : index + 1;\n                var currentStyle = listStyle[list.tagName][index];\n                // if (customStyle[currentStyle]) {\n                //     n.setAttr(\"class\", \"custom_\" + currentStyle);\n                // } else {\n                n.setStyle(\"list-style-type\", currentStyle);\n                // }\n            });\n        }\n\n        html.html = root.toHtml();\n    });\n    //导出时，去掉p标签\n    me.getOpt(\"disablePInList\") === true &&\n    me.addOutputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"li\"), function (li) {\n            var newChildrens = [],\n                index = 0;\n            utils.each(li.children, function (n) {\n                if (n.tagName == \"p\") {\n                    var tmpNode;\n                    while ((tmpNode = n.children.pop())) {\n                        newChildrens.splice(index, 0, tmpNode);\n                        tmpNode.parentNode = li;\n                        lastNode = tmpNode;\n                    }\n                    tmpNode = newChildrens[newChildrens.length - 1];\n                    if (\n                        !tmpNode ||\n                        tmpNode.type !== \"element\" ||\n                        tmpNode.tagName !== \"br\"\n                    ) {\n                        var br = UE.uNode.createElement(\"br\");\n                        br.parentNode = li;\n                        newChildrens.push(br);\n                    }\n\n                    index = newChildrens.length;\n                }\n            });\n            if (newChildrens.length) {\n                li.children = newChildrens;\n            }\n        });\n    });\n    //进入编辑器的li要套p标签\n    me.addInputRule(function (root) {\n        utils.each(root.getNodesByTagName(\"li\"), function (li) {\n            var tmpP = UE.uNode.createElement(\"p\");\n            for (var i = 0, ci; (ci = li.children[i]);) {\n                if (ci.type === \"text\" || dtd.p[ci.tagName]) {\n                    tmpP.appendChild(ci);\n                } else {\n                    if (tmpP.firstChild()) {\n                        li.insertBefore(tmpP, ci);\n                        tmpP = UE.uNode.createElement(\"p\");\n                        i = i + 2;\n                    } else {\n                        i++;\n                    }\n                }\n            }\n            if ((tmpP.firstChild() && !tmpP.parentNode) || !li.firstChild()) {\n                li.appendChild(tmpP);\n            }\n            //trace:3357\n            //p不能为空\n            if (!tmpP.firstChild()) {\n                tmpP.innerHTML(browser.ie ? \"&nbsp;\" : \"<br/>\");\n            }\n            //去掉末尾的空白\n            var p = li.firstChild();\n            var lastChild = p.lastChild();\n            if (\n                lastChild &&\n                lastChild.type === \"text\" &&\n                /^\\s*$/.test(lastChild.data)\n            ) {\n                p.removeChild(lastChild);\n            }\n        });\n        if (me.options.autoTransWordToList) {\n            var orderlisttype = {\n                    num1: /^\\d+\\)/,\n                    decimal: /^\\d+\\./,\n                    \"lower-alpha\": /^[a-z]+\\)/,\n                    \"upper-alpha\": /^[A-Z]+\\./,\n                    cn: /^[\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+[\\u3001]/,\n                    cn2: /^\\([\\u4E00\\u4E8C\\u4E09\\u56DB\\u516d\\u4e94\\u4e03\\u516b\\u4e5d]+\\)/\n                },\n                unorderlisttype = {\n                    square: \"n\"\n                };\n\n            function checkListType(content, container) {\n                var span = container.firstChild();\n                if (\n                    span &&\n                    span.type === \"element\" &&\n                    span.tagName === \"span\" &&\n                    /Wingdings|Symbol/.test(span.getStyle(\"font-family\"))\n                ) {\n                    for (var p in unorderlisttype) {\n                        if (unorderlisttype[p] == span.data) {\n                            return p;\n                        }\n                    }\n                    return \"disc\";\n                }\n                for (var p in orderlisttype) {\n                    if (orderlisttype[p].test(content)) {\n                        return p;\n                    }\n                }\n            }\n\n            utils.each(root.getNodesByTagName(\"p\"), function (node) {\n                if (node.getAttr(\"class\") !== \"MsoListParagraph\") {\n                    return;\n                }\n\n                //word粘贴过来的会带有margin要去掉,但这样也可能会误命中一些央视\n                node.setStyle(\"margin\", \"\");\n                node.setStyle(\"margin-left\", \"\");\n                node.setAttr(\"class\", \"\");\n\n                function appendLi(list, p, type) {\n                    if (list.tagName === \"ol\") {\n                        if (browser.ie) {\n                            var first = p.firstChild();\n                            if (\n                                first.type === \"element\" &&\n                                first.tagName === \"span\" &&\n                                orderlisttype[type].test(first.innerText())\n                            ) {\n                                p.removeChild(first);\n                            }\n                        } else {\n                            p.innerHTML(p.innerHTML().replace(orderlisttype[type], \"\"));\n                        }\n                    } else {\n                        p.removeChild(p.firstChild());\n                    }\n\n                    var li = UE.uNode.createElement(\"li\");\n                    li.appendChild(p);\n                    list.appendChild(li);\n                }\n\n                var tmp = node,\n                    type,\n                    cacheNode = node;\n\n                if (\n                    node.parentNode.tagName !== \"li\" &&\n                    (type = checkListType(node.innerText(), node))\n                ) {\n                    var list = UE.uNode.createElement(\n                        me.options.insertorderedlist.hasOwnProperty(type) ? \"ol\" : \"ul\"\n                    );\n                    // if (customStyle[type]) {\n                    //     list.setAttr(\"class\", \"custom_\" + type);\n                    // } else {\n                    list.setStyle(\"list-style-type\", type);\n                    // }\n                    while (\n                        node &&\n                        node.parentNode.tagName !== \"li\" &&\n                        checkListType(node.innerText(), node)\n                        ) {\n                        tmp = node.nextSibling();\n                        if (!tmp) {\n                            node.parentNode.insertBefore(list, node);\n                        }\n                        appendLi(list, node, type);\n                        node = tmp;\n                    }\n                    if (!list.parentNode && node && node.parentNode) {\n                        node.parentNode.insertBefore(list, node);\n                    }\n                }\n                var span = cacheNode.firstChild();\n                if (\n                    span &&\n                    span.type == \"element\" &&\n                    span.tagName == \"span\" &&\n                    /^\\s*(&nbsp;)+\\s*$/.test(span.innerText())\n                ) {\n                    span.parentNode.removeChild(span);\n                }\n            });\n        }\n    });\n\n    //调整索引标签\n    me.addListener(\"contentchange\", function () {\n        adjustListStyle(me.document);\n    });\n\n    function adjustListStyle(doc, ignore) {\n        utils.each(domUtils.getElementsByTagName(doc, \"ol ul\"), function (node) {\n            if (!domUtils.inDoc(node, doc)) return;\n\n            var parent = node.parentNode;\n            if (parent.tagName === node.tagName) {\n                var nodeStyleType =\n                    getStyle(node) || (node.tagName === \"OL\" ? \"decimal\" : \"disc\"),\n                    parentStyleType =\n                        getStyle(parent) || (parent.tagName === \"OL\" ? \"decimal\" : \"disc\");\n                if (nodeStyleType === parentStyleType) {\n                    var styleIndex = utils.indexOf(\n                        listStyle[node.tagName],\n                        nodeStyleType\n                    );\n                    styleIndex = styleIndex + 1 === listStyle[node.tagName].length\n                        ? 0\n                        : styleIndex + 1;\n                    setListStyle(node, listStyle[node.tagName][styleIndex]);\n                }\n            }\n            var index = 0,\n                type = 2;\n            if (domUtils.hasClass(node, /custom_/)) {\n                if (\n                    !(\n                        /[ou]l/i.test(parent.tagName) &&\n                        domUtils.hasClass(parent, /custom_/)\n                    )\n                ) {\n                    type = 1;\n                }\n            } else {\n                if (\n                    /[ou]l/i.test(parent.tagName) &&\n                    domUtils.hasClass(parent, /custom_/)\n                ) {\n                    type = 3;\n                }\n            }\n\n            var style = domUtils.getStyle(node, \"list-style-type\");\n            style && (node.style.cssText = \"list-style-type:\" + style);\n            node.className =\n                utils.trim(node.className.replace(/list-paddingleft-\\w+/, \"\")) +\n                \" list-paddingleft-\" +\n                type;\n            utils.each(domUtils.getElementsByTagName(node, \"li\"), function (li) {\n                li.style.cssText && (li.style.cssText = \"\");\n                if (!li.firstChild) {\n                    domUtils.remove(li);\n                    return;\n                }\n                if (li.parentNode !== node) {\n                    return;\n                }\n                index++;\n                if (domUtils.hasClass(node, /custom_/)) {\n                    var paddingLeft = 1,\n                        currentStyle = getStyle(node);\n                    if (node.tagName === \"OL\") {\n                        if (currentStyle) {\n                            switch (currentStyle) {\n                                case \"cn\":\n                                case \"cn1\":\n                                case \"cn2\":\n                                    if (\n                                        index > 10 &&\n                                        (index % 10 === 0 || (index > 10 && index < 20))\n                                    ) {\n                                        paddingLeft = 2;\n                                    } else if (index > 20) {\n                                        paddingLeft = 3;\n                                    }\n                                    break;\n                                case \"num2\":\n                                    if (index > 9) {\n                                        paddingLeft = 2;\n                                    }\n                            }\n                        }\n                        li.className =\n                            // \"list-\" +\n                            // customStyle[currentStyle] +\n                            // index +\n                            // \" \" +\n                            \"list-\" +\n                            currentStyle +\n                            \"-paddingleft-\" +\n                            paddingLeft;\n                    } else {\n                        li.className =\n                            // \"list-\" +\n                            // customStyle[currentStyle] +\n                            // \" \" +\n                            \"list-\" +\n                            currentStyle +\n                            \"-paddingleft\";\n                    }\n                } else {\n                    li.className = li.className.replace(/list-[\\w\\-]+/gi, \"\");\n                }\n                var className = li.getAttribute(\"class\");\n                if (className !== null && !className.replace(/\\s/g, \"\")) {\n                    domUtils.removeAttributes(li, \"class\");\n                }\n            });\n            !ignore &&\n            adjustList(\n                node,\n                node.tagName.toLowerCase(),\n                getStyle(node) || domUtils.getStyle(node, \"list-style-type\"),\n                true\n            );\n        });\n    }\n\n    function adjustList(list, tag, style, ignoreEmpty) {\n        var nextList = list.nextSibling;\n        if (\n            nextList &&\n            nextList.nodeType === 1 &&\n            nextList.tagName.toLowerCase() === tag &&\n            (getStyle(nextList) ||\n                domUtils.getStyle(nextList, \"list-style-type\") ||\n                (tag == \"ol\" ? \"decimal\" : \"disc\")) == style\n        ) {\n            domUtils.moveChild(nextList, list);\n            if (nextList.childNodes.length === 0) {\n                domUtils.remove(nextList);\n            }\n        }\n        if (nextList && domUtils.isFillChar(nextList)) {\n            domUtils.remove(nextList);\n        }\n        var preList = list.previousSibling;\n        if (\n            preList &&\n            preList.nodeType === 1 &&\n            preList.tagName.toLowerCase() == tag &&\n            (getStyle(preList) ||\n                domUtils.getStyle(preList, \"list-style-type\") ||\n                (tag == \"ol\" ? \"decimal\" : \"disc\")) === style\n        ) {\n            domUtils.moveChild(list, preList);\n        }\n        if (preList && domUtils.isFillChar(preList)) {\n            domUtils.remove(preList);\n        }\n        !ignoreEmpty && domUtils.isEmptyBlock(list) && domUtils.remove(list);\n        if (getStyle(list)) {\n            adjustListStyle(list.ownerDocument, true);\n        }\n    }\n\n    function setListStyle(list, style) {\n        // if (customStyle[style]) {\n        //     list.className = \"custom_\" + style;\n        // }\n        try {\n            domUtils.setStyle(list, \"list-style-type\", style);\n        } catch (e) {\n        }\n    }\n\n    function clearEmptySibling(node) {\n        var tmpNode = node.previousSibling;\n        if (tmpNode && domUtils.isEmptyBlock(tmpNode)) {\n            domUtils.remove(tmpNode);\n        }\n        tmpNode = node.nextSibling;\n        if (tmpNode && domUtils.isEmptyBlock(tmpNode)) {\n            domUtils.remove(tmpNode);\n        }\n    }\n\n    me.addListener(\"keydown\", function (type, evt) {\n        function preventAndSave() {\n            evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);\n            me.fireEvent(\"contentchange\");\n            me.undoManger && me.undoManger.save();\n        }\n\n        function findList(node, filterFn) {\n            while (node && !domUtils.isBody(node)) {\n                if (filterFn(node)) {\n                    return null;\n                }\n                if (node.nodeType === 1 && /[ou]l/i.test(node.tagName)) {\n                    return node;\n                }\n                node = node.parentNode;\n            }\n            return null;\n        }\n\n        var keyCode = evt.keyCode || evt.which;\n        if (keyCode === 13 && !evt.shiftKey) {\n            //回车\n            var rng = me.selection.getRange(),\n                parent = domUtils.findParent(\n                    rng.startContainer,\n                    function (node) {\n                        return domUtils.isBlockElm(node);\n                    },\n                    true\n                ),\n                li = domUtils.findParentByTagName(rng.startContainer, \"li\", true);\n            if (parent && parent.tagName !== \"PRE\" && !li) {\n                var html = parent.innerHTML.replace(\n                    new RegExp(domUtils.fillChar, \"g\"),\n                    \"\"\n                );\n                if (/^\\s*1\\s*\\.[^\\d]/.test(html)) {\n                    parent.innerHTML = html.replace(/^\\s*1\\s*\\./, \"\");\n                    rng.setStartAtLast(parent).collapse(true).select();\n                    me.__hasEnterExecCommand = true;\n                    me.execCommand(\"insertorderedlist\");\n                    me.__hasEnterExecCommand = false;\n                }\n            }\n            var range = me.selection.getRange(),\n                start = findList(range.startContainer, function (node) {\n                    return node.tagName === \"TABLE\";\n                }),\n                end = range.collapsed\n                    ? start\n                    : findList(range.endContainer, function (node) {\n                        return node.tagName === \"TABLE\";\n                    });\n\n            if (start && end && start === end) {\n                if (!range.collapsed) {\n                    start = domUtils.findParentByTagName(\n                        range.startContainer,\n                        \"li\",\n                        true\n                    );\n                    end = domUtils.findParentByTagName(range.endContainer, \"li\", true);\n                    if (start && end && start === end) {\n                        range.deleteContents();\n                        li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n                        if (li && domUtils.isEmptyBlock(li)) {\n                            pre = li.previousSibling;\n                            next = li.nextSibling;\n                            p = me.document.createElement(\"p\");\n\n                            domUtils.fillNode(me.document, p);\n                            parentList = li.parentNode;\n                            if (pre && next) {\n                                range.setStart(next, 0).collapse(true).select(true);\n                                domUtils.remove(li);\n                            } else {\n                                if ((!pre && !next) || !pre) {\n                                    parentList.parentNode.insertBefore(p, parentList);\n                                } else {\n                                    li.parentNode.parentNode.insertBefore(\n                                        p,\n                                        parentList.nextSibling\n                                    );\n                                }\n                                domUtils.remove(li);\n                                if (!parentList.firstChild) {\n                                    domUtils.remove(parentList);\n                                }\n                                range.setStart(p, 0).setCursor();\n                            }\n                            preventAndSave();\n                            return;\n                        }\n                    } else {\n                        var tmpRange = range.cloneRange(),\n                            bk = tmpRange.collapse(false).createBookmark();\n\n                        range.deleteContents();\n                        tmpRange.moveToBookmark(bk);\n                        var li = domUtils.findParentByTagName(\n                            tmpRange.startContainer,\n                            \"li\",\n                            true\n                        );\n\n                        clearEmptySibling(li);\n                        tmpRange.select();\n                        preventAndSave();\n                        return;\n                    }\n                }\n\n                li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n\n                if (li) {\n                    if (domUtils.isEmptyBlock(li)) {\n                        bk = range.createBookmark();\n                        var parentList = li.parentNode;\n                        if (li !== parentList.lastChild) {\n                            domUtils.breakParent(li, parentList);\n                            clearEmptySibling(li);\n                        } else {\n                            parentList.parentNode.insertBefore(li, parentList.nextSibling);\n                            if (domUtils.isEmptyNode(parentList)) {\n                                domUtils.remove(parentList);\n                            }\n                        }\n                        //嵌套不处理\n                        if (!dtd.$list[li.parentNode.tagName]) {\n                            if (!domUtils.isBlockElm(li.firstChild)) {\n                                p = me.document.createElement(\"p\");\n                                li.parentNode.insertBefore(p, li);\n                                while (li.firstChild) {\n                                    p.appendChild(li.firstChild);\n                                }\n                                domUtils.remove(li);\n                            } else {\n                                domUtils.remove(li, true);\n                            }\n                        }\n                        range.moveToBookmark(bk).select();\n                    } else {\n                        var first = li.firstChild;\n                        if (!first || !domUtils.isBlockElm(first)) {\n                            var p = me.document.createElement(\"p\");\n\n                            !li.firstChild && domUtils.fillNode(me.document, p);\n                            while (li.firstChild) {\n                                p.appendChild(li.firstChild);\n                            }\n                            li.appendChild(p);\n                            first = p;\n                        }\n\n                        var span = me.document.createElement(\"span\");\n\n                        range.insertNode(span);\n                        domUtils.breakParent(span, li);\n\n                        var nextLi = span.nextSibling;\n                        first = nextLi.firstChild;\n\n                        if (!first) {\n                            p = me.document.createElement(\"p\");\n\n                            domUtils.fillNode(me.document, p);\n                            nextLi.appendChild(p);\n                            first = p;\n                        }\n                        if (domUtils.isEmptyNode(first)) {\n                            first.innerHTML = \"\";\n                            domUtils.fillNode(me.document, first);\n                        }\n\n                        range.setStart(first, 0).collapse(true).shrinkBoundary().select();\n                        domUtils.remove(span);\n                        var pre = nextLi.previousSibling;\n                        if (pre && domUtils.isEmptyBlock(pre)) {\n                            pre.innerHTML = \"<p></p>\";\n                            domUtils.fillNode(me.document, pre.firstChild);\n                        }\n                    }\n                    //                        }\n                    preventAndSave();\n                }\n            }\n        }\n        if (keyCode === 8) {\n            //修中ie中li下的问题\n            range = me.selection.getRange();\n            if (range.collapsed && domUtils.isStartInblock(range)) {\n                tmpRange = range.cloneRange().trimBoundary();\n                li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n                //要在li的最左边，才能处理\n                if (li && domUtils.isStartInblock(tmpRange)) {\n                    start = domUtils.findParentByTagName(range.startContainer, \"p\", true);\n                    if (start && start !== li.firstChild) {\n                        var parentList = domUtils.findParentByTagName(start, [\"ol\", \"ul\"]);\n                        domUtils.breakParent(start, parentList);\n                        clearEmptySibling(start);\n                        me.fireEvent(\"contentchange\");\n                        range.setStart(start, 0).setCursor(false, true);\n                        me.fireEvent(\"saveScene\");\n                        domUtils.preventDefault(evt);\n                        return;\n                    }\n\n                    if (li && (pre = li.previousSibling)) {\n                        if (keyCode === 46 && li.childNodes.length) {\n                            return;\n                        }\n                        //有可能上边的兄弟节点是个2级菜单，要追加到2级菜单的最后的li\n                        if (dtd.$list[pre.tagName]) {\n                            pre = pre.lastChild;\n                        }\n                        me.undoManger && me.undoManger.save();\n                        first = li.firstChild;\n                        if (domUtils.isBlockElm(first)) {\n                            if (domUtils.isEmptyNode(first)) {\n                                //                                    range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true);\n                                pre.appendChild(first);\n                                range.setStart(first, 0).setCursor(false, true);\n                                //first不是唯一的节点\n                                while (li.firstChild) {\n                                    pre.appendChild(li.firstChild);\n                                }\n                            } else {\n                                span = me.document.createElement(\"span\");\n                                range.insertNode(span);\n                                //判断pre是否是空的节点,如果是<p><br/></p>类型的空节点，干掉p标签防止它占位\n                                if (domUtils.isEmptyBlock(pre)) {\n                                    pre.innerHTML = \"\";\n                                }\n                                domUtils.moveChild(li, pre);\n                                range.setStartBefore(span).collapse(true).select(true);\n\n                                domUtils.remove(span);\n                            }\n                        } else {\n                            if (domUtils.isEmptyNode(li)) {\n                                var p = me.document.createElement(\"p\");\n                                pre.appendChild(p);\n                                range.setStart(p, 0).setCursor();\n                                //                                    range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true);\n                            } else {\n                                range\n                                    .setEnd(pre, pre.childNodes.length)\n                                    .collapse()\n                                    .select(true);\n                                while (li.firstChild) {\n                                    pre.appendChild(li.firstChild);\n                                }\n                            }\n                        }\n                        domUtils.remove(li);\n                        me.fireEvent(\"contentchange\");\n                        me.fireEvent(\"saveScene\");\n                        domUtils.preventDefault(evt);\n                        return;\n                    }\n                    //trace:980\n\n                    if (li && !li.previousSibling) {\n                        var parentList = li.parentNode;\n                        var bk = range.createBookmark();\n                        if (domUtils.isTagNode(parentList.parentNode, \"ol ul\")) {\n                            parentList.parentNode.insertBefore(li, parentList);\n                            if (domUtils.isEmptyNode(parentList)) {\n                                domUtils.remove(parentList);\n                            }\n                        } else {\n                            while (li.firstChild) {\n                                parentList.parentNode.insertBefore(li.firstChild, parentList);\n                            }\n\n                            domUtils.remove(li);\n                            if (domUtils.isEmptyNode(parentList)) {\n                                domUtils.remove(parentList);\n                            }\n                        }\n                        range.moveToBookmark(bk).setCursor(false, true);\n                        me.fireEvent(\"contentchange\");\n                        me.fireEvent(\"saveScene\");\n                        domUtils.preventDefault(evt);\n                        return;\n                    }\n                }\n            }\n        }\n    });\n\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n        if (keyCode == 8) {\n            var rng = me.selection.getRange(),\n                list;\n            if (\n                (list = domUtils.findParentByTagName(\n                    rng.startContainer,\n                    [\"ol\", \"ul\"],\n                    true\n                ))\n            ) {\n                adjustList(\n                    list,\n                    list.tagName.toLowerCase(),\n                    getStyle(list) || domUtils.getComputedStyle(list, \"list-style-type\"),\n                    true\n                );\n            }\n        }\n    });\n    //处理tab键\n    me.addListener(\"tabkeydown\", function () {\n        var range = me.selection.getRange();\n\n        //控制级数\n        function checkLevel(li) {\n            if (me.options.maxListLevel != -1) {\n                var level = li.parentNode,\n                    levelNum = 0;\n                while (/[ou]l/i.test(level.tagName)) {\n                    levelNum++;\n                    level = level.parentNode;\n                }\n                if (levelNum >= me.options.maxListLevel) {\n                    return true;\n                }\n            }\n        }\n\n        //只以开始为准\n        //todo 后续改进\n        var li = domUtils.findParentByTagName(range.startContainer, \"li\", true);\n        if (li) {\n            var bk;\n            if (range.collapsed) {\n                if (checkLevel(li)) return true;\n                var parentLi = li.parentNode,\n                    list = me.document.createElement(parentLi.tagName),\n                    index = utils.indexOf(\n                        listStyle[list.tagName],\n                        getStyle(parentLi) ||\n                        domUtils.getComputedStyle(parentLi, \"list-style-type\")\n                    );\n                index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1;\n                var currentStyle = listStyle[list.tagName][index];\n                setListStyle(list, currentStyle);\n                if (domUtils.isStartInblock(range)) {\n                    me.fireEvent(\"saveScene\");\n                    bk = range.createBookmark();\n                    parentLi.insertBefore(list, li);\n                    list.appendChild(li);\n                    adjustList(list, list.tagName.toLowerCase(), currentStyle);\n                    me.fireEvent(\"contentchange\");\n                    range.moveToBookmark(bk).select(true);\n                    return true;\n                }\n            } else {\n                me.fireEvent(\"saveScene\");\n                bk = range.createBookmark();\n                for (\n                    var i = 0, closeList, parents = domUtils.findParents(li), ci;\n                    (ci = parents[i++]);\n                ) {\n                    if (domUtils.isTagNode(ci, \"ol ul\")) {\n                        closeList = ci;\n                        break;\n                    }\n                }\n                var current = li;\n                if (bk.end) {\n                    while (\n                        current &&\n                        !(\n                            domUtils.getPosition(current, bk.end) &\n                            domUtils.POSITION_FOLLOWING\n                        )\n                        ) {\n                        if (checkLevel(current)) {\n                            current = domUtils.getNextDomNode(current, false, null, function (\n                                node\n                            ) {\n                                return node !== closeList;\n                            });\n                            continue;\n                        }\n                        var parentLi = current.parentNode,\n                            list = me.document.createElement(parentLi.tagName),\n                            index = utils.indexOf(\n                                listStyle[list.tagName],\n                                getStyle(parentLi) ||\n                                domUtils.getComputedStyle(parentLi, \"list-style-type\")\n                            );\n                        var currentIndex = index + 1 == listStyle[list.tagName].length\n                            ? 0\n                            : index + 1;\n                        var currentStyle = listStyle[list.tagName][currentIndex];\n                        setListStyle(list, currentStyle);\n                        parentLi.insertBefore(list, current);\n                        while (\n                            current &&\n                            !(\n                                domUtils.getPosition(current, bk.end) &\n                                domUtils.POSITION_FOLLOWING\n                            )\n                            ) {\n                            li = current.nextSibling;\n                            list.appendChild(current);\n                            if (!li || domUtils.isTagNode(li, \"ol ul\")) {\n                                if (li) {\n                                    while ((li = li.firstChild)) {\n                                        if (li.tagName == \"LI\") {\n                                            break;\n                                        }\n                                    }\n                                } else {\n                                    li = domUtils.getNextDomNode(current, false, null, function (\n                                        node\n                                    ) {\n                                        return node !== closeList;\n                                    });\n                                }\n                                break;\n                            }\n                            current = li;\n                        }\n                        adjustList(list, list.tagName.toLowerCase(), currentStyle);\n                        current = li;\n                    }\n                }\n                me.fireEvent(\"contentchange\");\n                range.moveToBookmark(bk).select();\n                return true;\n            }\n        }\n    });\n\n    function getLi(start) {\n        while (start && !domUtils.isBody(start)) {\n            if (start.nodeName == \"TABLE\") {\n                return null;\n            }\n            if (start.nodeName == \"LI\") {\n                return start;\n            }\n            start = start.parentNode;\n        }\n    }\n\n    /**\n     * 有序列表，与“insertunorderedlist”命令互斥\n     * @command insertorderedlist\n     * @method execCommand\n     * @param { String } command 命令字符串\n     * @param { String } style 插入的有序列表类型，值为：decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2\n     * @example\n     * ```javascript\n     * editor.execCommand( 'insertorderedlist','decimal');\n     * ```\n     */\n    /**\n     * 查询当前选区内容是否有序列表\n     * @command insertorderedlist\n     * @method queryCommandState\n     * @param { String } cmd 命令字符串\n     * @return { int } 如果当前选区是有序列表返回1，否则返回0\n     * @example\n     * ```javascript\n     * editor.queryCommandState( 'insertorderedlist' );\n     * ```\n     */\n    /**\n     * 查询当前选区内容是否有序列表\n     * @command insertorderedlist\n     * @method queryCommandValue\n     * @param { String } cmd 命令字符串\n     * @return { String } 返回当前有序列表的类型，值为null或decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2\n     * @example\n     * ```javascript\n     * editor.queryCommandValue( 'insertorderedlist' );\n     * ```\n     */\n\n    /**\n     * 无序列表，与“insertorderedlist”命令互斥\n     * @command insertunorderedlist\n     * @method execCommand\n     * @param { String } command 命令字符串\n     * @param { String } style 插入的无序列表类型，值为：circle,disc,square,dash,dot\n     * @example\n     * ```javascript\n     * editor.execCommand( 'insertunorderedlist','circle');\n     * ```\n     */\n    /**\n     * 查询当前是否有word文档粘贴进来的图片\n     * @command insertunorderedlist\n     * @method insertunorderedlist\n     * @param { String } command 命令字符串\n     * @return { int } 如果当前选区是无序列表返回1，否则返回0\n     * @example\n     * ```javascript\n     * editor.queryCommandState( 'insertunorderedlist' );\n     * ```\n     */\n    /**\n     * 查询当前选区内容是否有序列表\n     * @command insertunorderedlist\n     * @method queryCommandValue\n     * @param { String } command 命令字符串\n     * @return { String } 返回当前无序列表的类型，值为null或circle,disc,square,dash,dot\n     * @example\n     * ```javascript\n     * editor.queryCommandValue( 'insertunorderedlist' );\n     * ```\n     */\n\n    me.commands[\"insertorderedlist\"] = me.commands[\"insertunorderedlist\"] = {\n        execCommand: function (command, style) {\n            if (!style) {\n                style = command.toLowerCase() == \"insertorderedlist\"\n                    ? \"decimal\"\n                    : \"disc\";\n            }\n            var me = this,\n                range = this.selection.getRange(),\n                filterFn = function (node) {\n                    return node.nodeType == 1\n                        ? node.tagName.toLowerCase() != \"br\"\n                        : !domUtils.isWhitespace(node);\n                },\n                tag = command.toLowerCase() == \"insertorderedlist\" ? \"ol\" : \"ul\",\n                frag = me.document.createDocumentFragment();\n            //去掉是因为会出现选到末尾，导致adjustmentBoundary缩到ol/ul的位置\n            //range.shrinkBoundary();//.adjustmentBoundary();\n            range.adjustmentBoundary().shrinkBoundary();\n            var bko = range.createBookmark(true),\n                start = getLi(me.document.getElementById(bko.start)),\n                modifyStart = 0,\n                end = getLi(me.document.getElementById(bko.end)),\n                modifyEnd = 0,\n                startParent,\n                endParent,\n                list,\n                tmp;\n\n            if (start || end) {\n                start && (startParent = start.parentNode);\n                if (!bko.end) {\n                    end = start;\n                }\n                end && (endParent = end.parentNode);\n\n                if (startParent === endParent) {\n                    while (start !== end) {\n                        tmp = start;\n                        start = start.nextSibling;\n                        if (!domUtils.isBlockElm(tmp.firstChild)) {\n                            var p = me.document.createElement(\"p\");\n                            while (tmp.firstChild) {\n                                p.appendChild(tmp.firstChild);\n                            }\n                            tmp.appendChild(p);\n                        }\n                        frag.appendChild(tmp);\n                    }\n                    tmp = me.document.createElement(\"span\");\n                    startParent.insertBefore(tmp, end);\n                    if (!domUtils.isBlockElm(end.firstChild)) {\n                        p = me.document.createElement(\"p\");\n                        while (end.firstChild) {\n                            p.appendChild(end.firstChild);\n                        }\n                        end.appendChild(p);\n                    }\n                    frag.appendChild(end);\n                    domUtils.breakParent(tmp, startParent);\n                    if (domUtils.isEmptyNode(tmp.previousSibling)) {\n                        domUtils.remove(tmp.previousSibling);\n                    }\n                    if (domUtils.isEmptyNode(tmp.nextSibling)) {\n                        domUtils.remove(tmp.nextSibling);\n                    }\n                    var nodeStyle =\n                        getStyle(startParent) ||\n                        domUtils.getComputedStyle(startParent, \"list-style-type\") ||\n                        (command.toLowerCase() == \"insertorderedlist\" ? \"decimal\" : \"disc\");\n                    if (startParent.tagName.toLowerCase() == tag && nodeStyle == style) {\n                        for (\n                            var i = 0, ci, tmpFrag = me.document.createDocumentFragment();\n                            (ci = frag.firstChild);\n                        ) {\n                            if (domUtils.isTagNode(ci, \"ol ul\")) {\n                                //                                  删除时，子列表不处理\n                                //                                  utils.each(domUtils.getElementsByTagName(ci,'li'),function(li){\n                                //                                        while(li.firstChild){\n                                //                                            tmpFrag.appendChild(li.firstChild);\n                                //                                        }\n                                //\n                                //                                    });\n                                tmpFrag.appendChild(ci);\n                            } else {\n                                while (ci.firstChild) {\n                                    tmpFrag.appendChild(ci.firstChild);\n                                    domUtils.remove(ci);\n                                }\n                            }\n                        }\n                        tmp.parentNode.insertBefore(tmpFrag, tmp);\n                    } else {\n                        list = me.document.createElement(tag);\n                        setListStyle(list, style);\n                        list.appendChild(frag);\n                        tmp.parentNode.insertBefore(list, tmp);\n                    }\n\n                    domUtils.remove(tmp);\n                    list && adjustList(list, tag, style);\n                    range.moveToBookmark(bko).select();\n                    return;\n                }\n                //开始\n                if (start) {\n                    while (start) {\n                        tmp = start.nextSibling;\n                        if (domUtils.isTagNode(start, \"ol ul\")) {\n                            frag.appendChild(start);\n                        } else {\n                            var tmpfrag = me.document.createDocumentFragment(),\n                                hasBlock = 0;\n                            while (start.firstChild) {\n                                if (domUtils.isBlockElm(start.firstChild)) {\n                                    hasBlock = 1;\n                                }\n                                tmpfrag.appendChild(start.firstChild);\n                            }\n                            if (!hasBlock) {\n                                var tmpP = me.document.createElement(\"p\");\n                                tmpP.appendChild(tmpfrag);\n                                frag.appendChild(tmpP);\n                            } else {\n                                frag.appendChild(tmpfrag);\n                            }\n                            domUtils.remove(start);\n                        }\n\n                        start = tmp;\n                    }\n                    startParent.parentNode.insertBefore(frag, startParent.nextSibling);\n                    if (domUtils.isEmptyNode(startParent)) {\n                        range.setStartBefore(startParent);\n                        domUtils.remove(startParent);\n                    } else {\n                        range.setStartAfter(startParent);\n                    }\n                    modifyStart = 1;\n                }\n\n                if (end && domUtils.inDoc(endParent, me.document)) {\n                    //结束\n                    start = endParent.firstChild;\n                    while (start && start !== end) {\n                        tmp = start.nextSibling;\n                        if (domUtils.isTagNode(start, \"ol ul\")) {\n                            frag.appendChild(start);\n                        } else {\n                            tmpfrag = me.document.createDocumentFragment();\n                            hasBlock = 0;\n                            while (start.firstChild) {\n                                if (domUtils.isBlockElm(start.firstChild)) {\n                                    hasBlock = 1;\n                                }\n                                tmpfrag.appendChild(start.firstChild);\n                            }\n                            if (!hasBlock) {\n                                tmpP = me.document.createElement(\"p\");\n                                tmpP.appendChild(tmpfrag);\n                                frag.appendChild(tmpP);\n                            } else {\n                                frag.appendChild(tmpfrag);\n                            }\n                            domUtils.remove(start);\n                        }\n                        start = tmp;\n                    }\n                    var tmpDiv = domUtils.createElement(me.document, \"div\", {\n                        tmpDiv: 1\n                    });\n                    domUtils.moveChild(end, tmpDiv);\n\n                    frag.appendChild(tmpDiv);\n                    domUtils.remove(end);\n                    endParent.parentNode.insertBefore(frag, endParent);\n                    range.setEndBefore(endParent);\n                    if (domUtils.isEmptyNode(endParent)) {\n                        domUtils.remove(endParent);\n                    }\n\n                    modifyEnd = 1;\n                }\n            }\n\n            if (!modifyStart) {\n                range.setStartBefore(me.document.getElementById(bko.start));\n            }\n            if (bko.end && !modifyEnd) {\n                range.setEndAfter(me.document.getElementById(bko.end));\n            }\n            range.enlarge(true, function (node) {\n                return notExchange[node.tagName];\n            });\n\n            frag = me.document.createDocumentFragment();\n\n            var bk = range.createBookmark(),\n                current = domUtils.getNextDomNode(bk.start, false, filterFn),\n                tmpRange = range.cloneRange(),\n                tmpNode,\n                block = domUtils.isBlockElm;\n\n            while (\n                current &&\n                current !== bk.end &&\n                domUtils.getPosition(current, bk.end) & domUtils.POSITION_PRECEDING\n                ) {\n                if (current.nodeType == 3 || dtd.li[current.tagName]) {\n                    if (current.nodeType == 1 && dtd.$list[current.tagName]) {\n                        while (current.firstChild) {\n                            frag.appendChild(current.firstChild);\n                        }\n                        tmpNode = domUtils.getNextDomNode(current, false, filterFn);\n                        domUtils.remove(current);\n                        current = tmpNode;\n                        continue;\n                    }\n                    tmpNode = current;\n                    tmpRange.setStartBefore(current);\n\n                    while (\n                        current &&\n                        current !== bk.end &&\n                        (!block(current) || domUtils.isBookmarkNode(current))\n                        ) {\n                        tmpNode = current;\n                        current = domUtils.getNextDomNode(current, false, null, function (\n                            node\n                        ) {\n                            return !notExchange[node.tagName];\n                        });\n                    }\n\n                    if (current && block(current)) {\n                        tmp = domUtils.getNextDomNode(tmpNode, false, filterFn);\n                        if (tmp && domUtils.isBookmarkNode(tmp)) {\n                            current = domUtils.getNextDomNode(tmp, false, filterFn);\n                            tmpNode = tmp;\n                        }\n                    }\n                    tmpRange.setEndAfter(tmpNode);\n\n                    current = domUtils.getNextDomNode(tmpNode, false, filterFn);\n\n                    var li = range.document.createElement(\"li\");\n\n                    li.appendChild(tmpRange.extractContents());\n                    if (domUtils.isEmptyNode(li)) {\n                        var tmpNode = range.document.createElement(\"p\");\n                        while (li.firstChild) {\n                            tmpNode.appendChild(li.firstChild);\n                        }\n                        li.appendChild(tmpNode);\n                    }\n                    frag.appendChild(li);\n                } else {\n                    current = domUtils.getNextDomNode(current, true, filterFn);\n                }\n            }\n            range.moveToBookmark(bk).collapse(true);\n            list = me.document.createElement(tag);\n            setListStyle(list, style);\n            list.appendChild(frag);\n            range.insertNode(list);\n            //当前list上下看能否合并\n            adjustList(list, tag, style);\n            //去掉冗余的tmpDiv\n            for (\n                var i = 0, ci, tmpDivs = domUtils.getElementsByTagName(list, \"div\");\n                (ci = tmpDivs[i++]);\n            ) {\n                if (ci.getAttribute(\"tmpDiv\")) {\n                    domUtils.remove(ci, true);\n                }\n            }\n            range.moveToBookmark(bko).select();\n        },\n        queryCommandState: function (command) {\n            var tag = command.toLowerCase() == \"insertorderedlist\" ? \"ol\" : \"ul\";\n            var path = this.selection.getStartElementPath();\n            for (var i = 0, ci; (ci = path[i++]);) {\n                if (ci.nodeName == \"TABLE\") {\n                    return 0;\n                }\n                if (tag == ci.nodeName.toLowerCase()) {\n                    return 1;\n                }\n            }\n            return 0;\n        },\n        queryCommandValue: function (command) {\n            var tag = command.toLowerCase() == \"insertorderedlist\" ? \"ol\" : \"ul\";\n            var path = this.selection.getStartElementPath(),\n                node;\n            for (var i = 0, ci; (ci = path[i++]);) {\n                if (ci.nodeName == \"TABLE\") {\n                    node = null;\n                    break;\n                }\n                if (tag == ci.nodeName.toLowerCase()) {\n                    node = ci;\n                    break;\n                }\n            }\n            return node\n                ? getStyle(node) || domUtils.getComputedStyle(node, \"list-style-type\")\n                : null;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/markdown-shortcut.js",
    "content": "UE.plugins[\"markdown-shortcut\"] = function () {\n\n    if (!UE.browser.chrome) {\n        return;\n    }\n\n    const me = this;\n\n    const getCleanHtml = function (node) {\n        let html = node.innerHTML\n        html = html.replace(/[\\u200b]*/g, '')\n        return html\n    }\n\n    let shortCuts = [];\n    // 注册 H1-H6 快捷键\n    for (let i = 1; i <= 6; i++) {\n        const regExp = new RegExp('^\\\\t?' + Array(i + 1).join('#') + '(\\\\s|&nbsp;)');\n        (function (command) {\n            shortCuts.push({\n                name: 'Head' + i,\n                tagName: ['P'],\n                key: [' '],\n                offset: [i + 1, i + 2],\n                match: [regExp],\n                callback: function (param) {\n                    me.__hasEnterExecCommand = true;\n                    me.execCommand('paragraph', command);\n                    let range = me.selection.getRange();\n                    let node = range.startContainer;\n                    let html = getCleanHtml(node)\n                    html = html.replace(regExp, '');\n                    if (!html) {\n                        html = domUtils.fillChar;\n                    }\n                    node.innerHTML = html;\n                    me.__hasEnterExecCommand = false;\n                }\n            })\n        })('h' + i);\n    }\n\n    me.on(\"ready\", function () {\n\n        domUtils.on(me.body, 'keyup', function (e) {\n            let range = me.selection.getRange();\n            if (range.endOffset !== range.startOffset) {\n                return;\n            }\n            let key = e.key;\n            let offset = range.startOffset;\n            const node = range.startContainer.parentNode;\n            let html = getCleanHtml(node);\n            let tagName = node.tagName;\n            // console.log('keyup', [node, range, tagName, key, offset, html]);\n            for (let s of shortCuts) {\n                if (!s.tagName.includes(tagName)) {\n                    continue;\n                }\n                if (!s.key.includes(key)) {\n                    continue;\n                }\n                if (!s.offset.includes(offset)) {\n                    continue;\n                }\n                for (let m of s.match) {\n                    let match = html.match(m);\n                    // console.log('keyup', [html, m, match, s.name]);\n                    if (match) {\n                        s.callback({\n                            node: node,\n                        });\n                        break;\n                    }\n                }\n            }\n        });\n\n    });\n\n};\n"
  },
  {
    "path": "_src/plugins/pagebreak.js",
    "content": "/**\n * 分页功能插件\n * @file\n * @since 1.2.6.1\n */\nUE.plugins[\"pagebreak\"] = function () {\n    var me = this,\n        notBreakTags = [\"td\"];\n    me.setOpt(\"pageBreakTag\", \"_ueditor_page_break_tag_\");\n\n    function fillNode(node) {\n        if (domUtils.isEmptyBlock(node)) {\n            var firstChild = node.firstChild,\n                tmpNode;\n\n            while (\n                firstChild &&\n                firstChild.nodeType == 1 &&\n                domUtils.isEmptyBlock(firstChild)\n                ) {\n                tmpNode = firstChild;\n                firstChild = firstChild.firstChild;\n            }\n            !tmpNode && (tmpNode = node);\n            domUtils.fillNode(me.document, tmpNode);\n        }\n    }\n\n    //分页符样式添加\n\n    me.ready(function () {\n        utils.cssRule(\n            \"pagebreak\",\n            \".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}\",\n            me.document\n        );\n    });\n\n    function isHr(node) {\n        return (\n            node &&\n            node.nodeType == 1 &&\n            node.tagName == \"HR\" &&\n            node.className == \"pagebreak\"\n        );\n    }\n\n    me.addInputRule(function (root) {\n        root.traversal(function (node) {\n            if (node.type == \"text\" && node.data == me.options.pageBreakTag) {\n                var hr = UE.uNode.createElement(\n                    '<hr class=\"pagebreak\" noshade=\"noshade\" size=\"5\" style=\"-webkit-user-select: none;\">'\n                );\n                node.parentNode.insertBefore(hr, node);\n                node.parentNode.removeChild(node);\n            }\n        });\n    });\n    me.addOutputRule(function (node) {\n        utils.each(node.getNodesByTagName(\"hr\"), function (n) {\n            if (n.getAttr(\"class\") == \"pagebreak\") {\n                var txt = UE.uNode.createText(me.options.pageBreakTag);\n                n.parentNode.insertBefore(txt, n);\n                n.parentNode.removeChild(n);\n            }\n        });\n    });\n\n    /**\n     * 插入分页符\n     * @command pagebreak\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @remind 在表格中插入分页符会把表格切分成两部分\n     * @remind 获取编辑器内的数据时， 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串，\n     *          以便于提交数据到服务器端后处理分页。\n     * @example\n     * ```javascript\n     * editor.execCommand( 'pagebreak'); //插入一个hr标签，带有样式类名pagebreak\n     * ```\n     */\n\n    me.commands[\"pagebreak\"] = {\n        execCommand: function () {\n            var range = me.selection.getRange(),\n                hr = me.document.createElement(\"hr\");\n            domUtils.setAttributes(hr, {\n                class: \"pagebreak\",\n                noshade: \"noshade\",\n                size: \"5\"\n            });\n            domUtils.unSelectable(hr);\n            //table单独处理\n            var node = domUtils.findParentByTagName(\n                range.startContainer,\n                notBreakTags,\n                true\n                ),\n                parents = [],\n                pN;\n            if (node) {\n                switch (node.tagName) {\n                    case \"TD\":\n                        pN = node.parentNode;\n                        if (!pN.previousSibling) {\n                            var table = domUtils.findParentByTagName(pN, \"table\");\n                            //                            var tableWrapDiv = table.parentNode;\n                            //                            if(tableWrapDiv && tableWrapDiv.nodeType == 1\n                            //                                && tableWrapDiv.tagName == 'DIV'\n                            //                                && tableWrapDiv.getAttribute('dropdrag')\n                            //                                ){\n                            //                                domUtils.remove(tableWrapDiv,true);\n                            //                            }\n                            table.parentNode.insertBefore(hr, table);\n                            parents = domUtils.findParents(hr, true);\n                        } else {\n                            pN.parentNode.insertBefore(hr, pN);\n                            parents = domUtils.findParents(hr);\n                        }\n                        pN = parents[1];\n                        if (hr !== pN) {\n                            domUtils.breakParent(hr, pN);\n                        }\n                        //table要重写绑定一下拖拽\n                        me.fireEvent(\"afteradjusttable\", me.document);\n                }\n            } else {\n                if (!range.collapsed) {\n                    range.deleteContents();\n                    var start = range.startContainer;\n                    while (\n                        !domUtils.isBody(start) &&\n                        domUtils.isBlockElm(start) &&\n                        domUtils.isEmptyNode(start)\n                        ) {\n                        range.setStartBefore(start).collapse(true);\n                        domUtils.remove(start);\n                        start = range.startContainer;\n                    }\n                }\n                range.insertNode(hr);\n\n                var pN = hr.parentNode,\n                    nextNode;\n                while (!domUtils.isBody(pN)) {\n                    domUtils.breakParent(hr, pN);\n                    nextNode = hr.nextSibling;\n                    if (nextNode && domUtils.isEmptyBlock(nextNode)) {\n                        domUtils.remove(nextNode);\n                    }\n                    pN = hr.parentNode;\n                }\n                nextNode = hr.nextSibling;\n                var pre = hr.previousSibling;\n                if (isHr(pre)) {\n                    domUtils.remove(pre);\n                } else {\n                    pre && fillNode(pre);\n                }\n\n                if (!nextNode) {\n                    var p = me.document.createElement(\"p\");\n\n                    hr.parentNode.appendChild(p);\n                    domUtils.fillNode(me.document, p);\n                    range.setStart(p, 0).collapse(true);\n                } else {\n                    if (isHr(nextNode)) {\n                        domUtils.remove(nextNode);\n                    } else {\n                        fillNode(nextNode);\n                    }\n                    range.setEndAfter(hr).collapse(false);\n                }\n\n                range.select(true);\n            }\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/paragraph.js",
    "content": "/**\n * 段落样式\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 段落格式\n * @command paragraph\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param {String}   style               标签值为：'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'\n * @param {Object}   attrs               标签的属性\n * @example\n * ```javascript\n * editor.execCommand( 'Paragraph','h1','{\n *     class:'test'\n * }' );\n * ```\n */\n\n/**\n * 返回选区内节点标签名\n * @command paragraph\n * @method queryCommandValue\n * @param { String } cmd 命令字符串\n * @return { String } 节点标签名\n * @example\n * ```javascript\n * editor.queryCommandValue( 'Paragraph' );\n * ```\n */\n\nUE.plugins[\"paragraph\"] = function () {\n    var me = this,\n        block = domUtils.isBlockElm,\n        notExchange = [\"TD\", \"LI\", \"PRE\"],\n        doParagraph = function (range, style, attrs, sourceCmdName) {\n            var bookmark = range.createBookmark(),\n                filterFn = function (node) {\n                    return node.nodeType == 1\n                        ? node.tagName.toLowerCase() != \"br\" &&\n                        !domUtils.isBookmarkNode(node)\n                        : !domUtils.isWhitespace(node);\n                },\n                para;\n\n            range.enlarge(true);\n            var bookmark2 = range.createBookmark(),\n                current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),\n                tmpRange = range.cloneRange(),\n                tmpNode;\n            while (\n                current &&\n                !(\n                    domUtils.getPosition(current, bookmark2.end) &\n                    domUtils.POSITION_FOLLOWING\n                )\n                ) {\n                if (current.nodeType === 3 || !block(current)) {\n                    tmpRange.setStartBefore(current);\n                    while (current && current !== bookmark2.end && !block(current)) {\n                        tmpNode = current;\n                        current = domUtils.getNextDomNode(current, false, null, function (\n                            node\n                        ) {\n                            return !block(node);\n                        });\n                    }\n                    tmpRange.setEndAfter(tmpNode);\n\n                    para = range.document.createElement(style);\n                    if (attrs) {\n                        domUtils.setAttributes(para, attrs);\n                        if (\n                            sourceCmdName &&\n                            sourceCmdName === \"customstyle\" &&\n                            attrs.style\n                        ) {\n                            para.style.cssText = attrs.style;\n                        }\n                    }\n                    para.appendChild(tmpRange.extractContents());\n                    //需要内容占位\n                    if (domUtils.isEmptyNode(para)) {\n                        domUtils.fillChar(range.document, para);\n                    }\n\n                    tmpRange.insertNode(para);\n\n                    var parent = para.parentNode;\n                    //如果para上一级是一个block元素且不是body,td就删除它\n                    if (\n                        block(parent) &&\n                        !domUtils.isBody(para.parentNode) &&\n                        utils.indexOf(notExchange, parent.tagName) === -1\n                    ) {\n                        //存储dir,style\n                        if (!(sourceCmdName && sourceCmdName === \"customstyle\")) {\n                            parent.getAttribute(\"dir\") &&\n                            para.setAttribute(\"dir\", parent.getAttribute(\"dir\"));\n                            //trace:1070\n                            parent.style.cssText &&\n                            (para.style.cssText =\n                                parent.style.cssText + \";\" + para.style.cssText);\n                            //trace:1030\n                            parent.style.textAlign &&\n                            !para.style.textAlign &&\n                            (para.style.textAlign = parent.style.textAlign);\n                            parent.style.textIndent &&\n                            !para.style.textIndent &&\n                            (para.style.textIndent = parent.style.textIndent);\n                            parent.style.padding &&\n                            !para.style.padding &&\n                            (para.style.padding = parent.style.padding);\n                        }\n\n                        //trace:1706 选择的就是h1-6要删除\n                        if (\n                            attrs &&\n                            /h\\d/i.test(parent.tagName) &&\n                            !/h\\d/i.test(para.tagName)\n                        ) {\n                            domUtils.setAttributes(parent, attrs);\n                            if (\n                                sourceCmdName &&\n                                sourceCmdName === \"customstyle\" &&\n                                attrs.style\n                            ) {\n                                parent.style.cssText = attrs.style;\n                            }\n                            domUtils.remove(para.parentNode, true);\n                            para = parent;\n                        } else {\n                            domUtils.remove(para.parentNode, true);\n                        }\n                    }\n                    if (utils.indexOf(notExchange, parent.tagName) !== -1) {\n                        current = parent;\n                    } else {\n                        current = para;\n                    }\n\n                    current = domUtils.getNextDomNode(current, false, filterFn);\n                } else {\n                    current = domUtils.getNextDomNode(current, true, filterFn);\n                }\n            }\n            return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);\n        };\n    me.setOpt(\"paragraph\", {\n        p: \"\",\n        h1: \"\",\n        h2: \"\",\n        h3: \"\",\n        h4: \"\",\n        h5: \"\",\n        h6: \"\"\n    });\n    me.commands[\"paragraph\"] = {\n        execCommand: function (cmdName, style, attrs, sourceCmdName) {\n            var range = this.selection.getRange();\n            //闭合时单独处理\n            if (range.collapsed) {\n                var txt = this.document.createTextNode(\"p\");\n                range.insertNode(txt);\n                //去掉冗余的fillchar\n                if (browser.ie) {\n                    var node = txt.previousSibling;\n                    if (node && domUtils.isWhitespace(node)) {\n                        domUtils.remove(node);\n                    }\n                    node = txt.nextSibling;\n                    if (node && domUtils.isWhitespace(node)) {\n                        domUtils.remove(node);\n                    }\n                }\n            }\n            range = doParagraph(range, style, attrs, sourceCmdName);\n            if (txt) {\n                range.setStartBefore(txt).collapse(true);\n                pN = txt.parentNode;\n\n                domUtils.remove(txt);\n\n                if (domUtils.isBlockElm(pN) && domUtils.isEmptyNode(pN)) {\n                    domUtils.fillNode(this.document, pN);\n                }\n            }\n\n            if (\n                browser.gecko &&\n                range.collapsed &&\n                range.startContainer.nodeType === 1\n            ) {\n                var child = range.startContainer.childNodes[range.startOffset];\n                if (\n                    child &&\n                    child.nodeType === 1 &&\n                    child.tagName.toLowerCase() === style\n                ) {\n                    range.setStart(child, 0).collapse(true);\n                }\n            }\n            //trace:1097 原来有true，原因忘了，但去了就不能清除多余的占位符了\n            range.select();\n\n            return true;\n        },\n        queryCommandValue: function () {\n            var node = domUtils.filterNodeList(\n                this.selection.getStartElementPath(),\n                \"p h1 h2 h3 h4 h5 h6\"\n            );\n            return node ? node.tagName.toLowerCase() : \"\";\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/paste.js",
    "content": "///import core\n///import plugins/inserthtml.js\n///import plugins/undo.js\n///import plugins/serialize.js\n///commands 粘贴\n///commandsName  PastePlain\n///commandsTitle  纯文本粘贴模式\n/**\n * @description 粘贴\n * @author zhanyi\n */\nUE.plugins[\"paste\"] = function () {\n    function getClipboardData(callback) {\n        var doc = this.document;\n        if (doc.getElementById(\"baidu_pastebin\")) {\n            return;\n        }\n        var range = this.selection.getRange(),\n            bk = range.createBookmark(),\n            //创建剪贴的容器div\n            pastebin = doc.createElement(\"div\");\n        pastebin.id = \"baidu_pastebin\";\n        // Safari 要求div必须有内容，才能粘贴内容进来\n        browser.webkit &&\n        pastebin.appendChild(\n            doc.createTextNode(domUtils.fillChar + domUtils.fillChar)\n        );\n        doc.body.appendChild(pastebin);\n        //trace:717 隐藏的span不能得到top\n        //bk.start.innerHTML = '&nbsp;';\n        bk.start.style.display = \"\";\n        pastebin.style.cssText =\n            \"position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:\" +\n            //要在现在光标平行的位置加入，否则会出现跳动的问题\n            domUtils.getXY(bk.start).y +\n            \"px\";\n\n        range.selectNodeContents(pastebin).select(true);\n\n        setTimeout(function () {\n            if (browser.webkit) {\n                for (\n                    var i = 0, pastebins = doc.querySelectorAll(\"#baidu_pastebin\"), pi;\n                    (pi = pastebins[i++]);\n                ) {\n                    if (domUtils.isEmptyNode(pi)) {\n                        domUtils.remove(pi);\n                    } else {\n                        pastebin = pi;\n                        break;\n                    }\n                }\n            }\n            try {\n                pastebin.parentNode.removeChild(pastebin);\n            } catch (e) {\n            }\n            range.moveToBookmark(bk).select(true);\n            callback(pastebin);\n        }, 0);\n    }\n\n    var me = this;\n\n    me.setOpt({\n        retainOnlyLabelPasted: false\n    });\n\n    var txtContent, htmlContent, address;\n\n    function getPureHtml(html) {\n        var result = html.replace(/<(\\/?)([\\w\\-]+)([^>]*)>/gi, function (\n            a,\n            b,\n            tagName,\n            attrs\n        ) {\n            tagName = tagName.toLowerCase();\n            if ({img: 1}[tagName]) {\n                return a;\n            }\n            attrs = attrs.replace(\n                /([\\w\\-]*?)\\s*=\\s*((\"([^\"]*)\")|('([^']*)')|([^\\s>]+))/gi,\n                function (str, atr, val) {\n                    if (\n                        {\n                            src: 1,\n                            href: 1,\n                            name: 1\n                        }[atr.toLowerCase()]\n                    ) {\n                        return atr + \"=\" + val + \" \";\n                    }\n                    return \"\";\n                }\n            );\n            if (\n                {\n                    span: 1,\n                    div: 1\n                }[tagName]\n            ) {\n                return \"\";\n            } else {\n                attrs = utils.trim(attrs);\n                return \"<\" + b + tagName + (attrs? (\" \" + attrs): '') + \">\";\n            }\n        });\n        result = result.replace(/<\\/p >/g, '</p>');\n        return result;\n    }\n\n    function filter(div) {\n        var html;\n        if (div.firstChild) {\n            //去掉cut中添加的边界值\n            var nodes = domUtils.getElementsByTagName(div, \"span\");\n            for (var i = 0, ni; (ni = nodes[i++]);) {\n                if (ni.id == \"_baidu_cut_start\" || ni.id == \"_baidu_cut_end\") {\n                    domUtils.remove(ni);\n                }\n            }\n\n            if (browser.webkit) {\n                var brs = div.querySelectorAll(\"div br\");\n                for (var i = 0, bi; (bi = brs[i++]);) {\n                    var pN = bi.parentNode;\n                    if (pN.tagName == \"DIV\" && pN.childNodes.length == 1) {\n                        pN.innerHTML = \"<p><br/></p>\";\n                        domUtils.remove(pN);\n                    }\n                }\n                var divs = div.querySelectorAll(\"#baidu_pastebin\");\n                for (var i = 0, di; (di = divs[i++]);) {\n                    var tmpP = me.document.createElement(\"p\");\n                    di.parentNode.insertBefore(tmpP, di);\n                    while (di.firstChild) {\n                        tmpP.appendChild(di.firstChild);\n                    }\n                    domUtils.remove(di);\n                }\n\n                var metas = div.querySelectorAll(\"meta\");\n                for (var i = 0, ci; (ci = metas[i++]);) {\n                    domUtils.remove(ci);\n                }\n\n                var brs = div.querySelectorAll(\"br\");\n                for (i = 0; (ci = brs[i++]);) {\n                    if (/^apple-/i.test(ci.className)) {\n                        domUtils.remove(ci);\n                    }\n                }\n            }\n            if (browser.gecko) {\n                var dirtyNodes = div.querySelectorAll(\"[_moz_dirty]\");\n                for (i = 0; (ci = dirtyNodes[i++]);) {\n                    ci.removeAttribute(\"_moz_dirty\");\n                }\n            }\n            if (!browser.ie) {\n                var spans = div.querySelectorAll(\"span.Apple-style-span\");\n                for (var i = 0, ci; (ci = spans[i++]);) {\n                    domUtils.remove(ci, true);\n                }\n            }\n\n            //ie下使用innerHTML会产生多余的\\r\\n字符，也会产生&nbsp;这里过滤掉\n            html = div.innerHTML; //.replace(/>(?:(\\s|&nbsp;)*?)</g,'><');\n\n            //过滤word粘贴过来的冗余属性\n            html = UE.filterWord(html);\n            //取消了忽略空白的第二个参数，粘贴过来的有些是有空白的，会被套上相关的标签\n            var root = UE.htmlparser(html);\n            //如果给了过滤规则就先进行过滤\n            if (me.options.filterRules) {\n                UE.filterNode(root, me.options.filterRules);\n            }\n            //执行默认的处理\n            me.filterInputRule(root);\n            //针对chrome的处理\n            if (browser.webkit) {\n                var br = root.lastChild();\n                if (br && br.type == \"element\" && br.tagName == \"br\") {\n                    root.removeChild(br);\n                }\n                utils.each(me.body.querySelectorAll(\"div\"), function (node) {\n                    if (domUtils.isEmptyBlock(node)) {\n                        domUtils.remove(node, true);\n                    }\n                });\n            }\n            html = {html: root.toHtml()};\n            me.fireEvent(\"beforepaste\", html, root);\n            //抢了默认的粘贴，那后边的内容就不执行了，比如表格粘贴\n            if (!html.html) {\n                return;\n            }\n            root = UE.htmlparser(html.html, true);\n            //如果开启了纯文本模式\n            if (me.queryCommandState(\"pasteplain\") === 1) {\n                me.execCommand(\n                    \"insertHtml\",\n                    UE.filterNode(root, me.options.filterTxtRules).toHtml(),\n                    true\n                );\n            } else {\n                //文本模式\n                UE.filterNode(root, me.options.filterTxtRules);\n                txtContent = root.toHtml();\n                //完全模式\n                htmlContent = html.html;\n\n                address = me.selection.getRange().createAddress(true);\n                me.execCommand(\n                    \"insertHtml\",\n                    me.getOpt(\"retainOnlyLabelPasted\") === true\n                        ? getPureHtml(htmlContent)\n                        : htmlContent,\n                    true\n                );\n            }\n            me.fireEvent(\"afterpaste\", html);\n        }\n    }\n\n    me.addListener(\"pasteTransfer\", function (cmd, plainType) {\n        if (address && txtContent && htmlContent && txtContent != htmlContent) {\n            var range = me.selection.getRange();\n            range.moveToAddress(address, true);\n\n            if (!range.collapsed) {\n                while (!domUtils.isBody(range.startContainer)) {\n                    var start = range.startContainer;\n                    if (start.nodeType == 1) {\n                        start = start.childNodes[range.startOffset];\n                        if (!start) {\n                            range.setStartBefore(range.startContainer);\n                            continue;\n                        }\n                        var pre = start.previousSibling;\n\n                        if (\n                            pre &&\n                            pre.nodeType == 3 &&\n                            new RegExp(\"^[\\n\\r\\t \" + domUtils.fillChar + \"]*$\").test(\n                                pre.nodeValue\n                            )\n                        ) {\n                            range.setStartBefore(pre);\n                        }\n                    }\n                    if (range.startOffset == 0) {\n                        range.setStartBefore(range.startContainer);\n                    } else {\n                        break;\n                    }\n                }\n                while (!domUtils.isBody(range.endContainer)) {\n                    var end = range.endContainer;\n                    if (end.nodeType == 1) {\n                        end = end.childNodes[range.endOffset];\n                        if (!end) {\n                            range.setEndAfter(range.endContainer);\n                            continue;\n                        }\n                        var next = end.nextSibling;\n                        if (\n                            next &&\n                            next.nodeType == 3 &&\n                            new RegExp(\"^[\\n\\r\\t\" + domUtils.fillChar + \"]*$\").test(\n                                next.nodeValue\n                            )\n                        ) {\n                            range.setEndAfter(next);\n                        }\n                    }\n                    if (\n                        range.endOffset ==\n                        range.endContainer[\n                            range.endContainer.nodeType == 3 ? \"nodeValue\" : \"childNodes\"\n                            ].length\n                    ) {\n                        range.setEndAfter(range.endContainer);\n                    } else {\n                        break;\n                    }\n                }\n            }\n\n            range.deleteContents();\n            range.select(true);\n            me.__hasEnterExecCommand = true;\n            var html = htmlContent;\n            if (plainType === 2) {\n                html = getPureHtml(html);\n            } else if (plainType) {\n                html = txtContent;\n            }\n            me.execCommand(\"inserthtml\", html, true);\n            me.__hasEnterExecCommand = false;\n            var rng = me.selection.getRange();\n            while (\n                !domUtils.isBody(rng.startContainer) &&\n                !rng.startOffset &&\n                rng.startContainer[\n                    rng.startContainer.nodeType == 3 ? \"nodeValue\" : \"childNodes\"\n                    ].length\n                ) {\n                rng.setStartBefore(rng.startContainer);\n            }\n            var tmpAddress = rng.createAddress(true);\n            address.endAddress = tmpAddress.startAddress;\n        }\n    });\n\n    me.addListener(\"ready\", function () {\n        domUtils.on(me.body, \"cut\", function () {\n            var range = me.selection.getRange();\n            if (!range.collapsed && me.undoManger) {\n                me.undoManger.save();\n            }\n        });\n\n        //ie下beforepaste在点击右键时也会触发，所以用监控键盘才处理\n        domUtils.on(\n            me.body,\n            browser.ie || browser.opera ? \"keydown\" : \"paste\",\n            function (e) {\n                if (\n                    (browser.ie || browser.opera) &&\n                    ((!e.ctrlKey && !e.metaKey) || e.keyCode != \"86\")\n                ) {\n                    return;\n                }\n                getClipboardData.call(me, function (div) {\n                    filter(div);\n                });\n            }\n        );\n    });\n\n    me.commands[\"paste\"] = {\n        execCommand: function (cmd) {\n            if (browser.ie) {\n                getClipboardData.call(me, function (div) {\n                    filter(div);\n                });\n                me.document.execCommand(\"paste\");\n            } else {\n                alert(me.getLang(\"pastemsg\"));\n            }\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/preview.js",
    "content": "/**\n * 预览\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 预览\n * @command preview\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'preview' );\n * ```\n */\nUE.commands[\"preview\"] = {\n    execCommand: function () {\n        var w = window.open(\"\", \"_blank\", \"\"),\n            d = w.document;\n        d.open();\n        d.write(\n            '<!DOCTYPE html><html><head><meta charset=\"utf-8\"/><script src=\"' +\n            this.options.UEDITOR_HOME_URL +\n            'ueditor.parse.js\"></script><script>' +\n            \"setTimeout(function(){uParse('div',{rootPath: '\" +\n            this.options.UEDITOR_HOME_URL +\n            \"'})},300)\" +\n            \"</script></head><body><div>\" +\n            this.getContent(null, null, true) +\n            \"</div></body></html>\"\n        );\n        d.close();\n    },\n    notNeedUndo: 1\n};\n"
  },
  {
    "path": "_src/plugins/print.js",
    "content": "/**\n * 打印\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 打印\n * @command print\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'print' );\n * ```\n */\nUE.commands[\"print\"] = {\n    execCommand: function () {\n        this.window.print();\n    },\n    notNeedUndo: 1\n};\n"
  },
  {
    "path": "_src/plugins/puretxtpaste.js",
    "content": "/**\n * 纯文本粘贴插件\n * @file\n * @since 1.2.6.1\n */\n\nUE.plugins[\"pasteplain\"] = function () {\n    var me = this;\n    me.setOpt({\n        pasteplain: false,\n        filterTxtRules: (function () {\n            function transP(node) {\n                node.tagName = \"p\";\n                node.setStyle();\n            }\n\n            function removeNode(node) {\n                node.parentNode.removeChild(node, true);\n            }\n\n            return {\n                //直接删除及其字节点内容\n                \"-\": \"script style object iframe embed input select\",\n                p: {$: {}},\n                br: {$: {}},\n                div: function (node) {\n                    var tmpNode,\n                        p = UE.uNode.createElement(\"p\");\n                    while ((tmpNode = node.firstChild())) {\n                        if (tmpNode.type == \"text\" || !UE.dom.dtd.$block[tmpNode.tagName]) {\n                            p.appendChild(tmpNode);\n                        } else {\n                            if (p.firstChild()) {\n                                node.parentNode.insertBefore(p, node);\n                                p = UE.uNode.createElement(\"p\");\n                            } else {\n                                node.parentNode.insertBefore(tmpNode, node);\n                            }\n                        }\n                    }\n                    if (p.firstChild()) {\n                        node.parentNode.insertBefore(p, node);\n                    }\n                    node.parentNode.removeChild(node);\n                },\n                ol: removeNode,\n                ul: removeNode,\n                dl: removeNode,\n                dt: removeNode,\n                dd: removeNode,\n                li: removeNode,\n                caption: transP,\n                th: transP,\n                tr: transP,\n                h1: transP,\n                h2: transP,\n                h3: transP,\n                h4: transP,\n                h5: transP,\n                h6: transP,\n                td: function (node) {\n                    //没有内容的td直接删掉\n                    var txt = !!node.innerText();\n                    if (txt) {\n                        node.parentNode.insertAfter(\n                            UE.uNode.createText(\" &nbsp; &nbsp;\"),\n                            node\n                        );\n                    }\n                    node.parentNode.removeChild(node, node.innerText());\n                }\n            };\n        })()\n    });\n    //暂时这里支持一下老版本的属性\n    var pasteplain = me.options.pasteplain;\n\n    /**\n     * 启用或取消纯文本粘贴模式\n     * @command pasteplain\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @example\n     * ```javascript\n     * editor.queryCommandState( 'pasteplain' );\n     * ```\n     */\n\n    /**\n     * 查询当前是否处于纯文本粘贴模式\n     * @command pasteplain\n     * @method queryCommandState\n     * @param { String } cmd 命令字符串\n     * @return { int } 如果处于纯文本模式，返回1，否则，返回0\n     * @example\n     * ```javascript\n     * editor.queryCommandState( 'pasteplain' );\n     * ```\n     */\n    me.commands[\"pasteplain\"] = {\n        queryCommandState: function () {\n            return pasteplain ? 1 : 0;\n        },\n        execCommand: function () {\n            pasteplain = !pasteplain | 0;\n        },\n        notNeedUndo: 1\n    };\n};\n"
  },
  {
    "path": "_src/plugins/quick-operate.js",
    "content": "UE.plugins[\"quick-operate\"] = function () {\n\n    if (!UE.browser.chrome) {\n        return;\n    }\n    return;\n\n    let me = this;\n    const uiUtils = UE.ui.uiUtils;\n\n    me.on(\"ready\", function () {\n        let quickOperate = new UE.ui.QuickOperate({\n            // items: contextItems,\n            className: \"edui-quick-operate\",\n            editor: me\n        });\n        quickOperate.render();\n\n        let quickOperateNode = {\n            root: null,\n            target: null,\n        }\n        domUtils.on(quickOperate.el, 'mouseenter', function (evt) {\n            quickOperateNode.root && quickOperateNode.root.classList && quickOperateNode.root.classList.add('edui-quick-operate-active');\n        });\n        domUtils.on(quickOperate.el, 'mouseleave', function (evt) {\n            quickOperateNode.root && quickOperateNode.root.classList && quickOperateNode.root.classList.remove('edui-quick-operate-active');\n        });\n        domUtils.on(me.body, \"mouseout\", function (evt) {\n            // quickOperate.hide();\n        });\n        domUtils.on(me.body, \"mouseover\", function (evt) {\n            const node = evt.target\n            let rootNode = node;\n            for (; rootNode.parentNode && rootNode.parentNode.tagName !== 'BODY';) {\n                rootNode = rootNode.parentNode;\n            }\n            quickOperateNode.root = rootNode\n            quickOperateNode.target = node\n            // me.body.querySelectorAll('& > *').forEach(item => {\n            //   item.classList.remove('edui-quick-operate-active');\n            // });\n            // rootNode.classList.add('edui-quick-operate-active');\n            const rect = node.getBoundingClientRect();\n            const offset = uiUtils.getClientRect(node)\n            offset.left = offset.left - 55\n            // console.log('mouseover', rect, node, offset);\n            // let offset = uiUtils.getViewportOffsetByEvent(evt);\n            // console.log('quickOperate', quickOperate);\n            quickOperate.showAt(offset);\n        });\n\n    });\n\n};\n"
  },
  {
    "path": "_src/plugins/removeformat.js",
    "content": "/**\n * 清除格式\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 清除文字样式\n * @command removeformat\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param   {String}   tags     以逗号隔开的标签。如：strong\n * @param   {String}   style    样式如：color\n * @param   {String}   attrs    属性如:width\n * @example\n * ```javascript\n * editor.execCommand( 'removeformat', 'strong','color','width' );\n * ```\n */\n\nUE.plugins[\"removeformat\"] = function () {\n    var me = this;\n    me.setOpt({\n        removeFormatTags:\n            \"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var\",\n        removeFormatAttributes: \"class,style,lang,width,height,align,hspace,valign\"\n    });\n    me.commands[\"removeformat\"] = {\n        execCommand: function (cmdName, tags, style, attrs, notIncludeA) {\n            var tagReg = new RegExp(\n                \"^(?:\" +\n                (tags || this.options.removeFormatTags).replace(/,/g, \"|\") +\n                \")$\",\n                \"i\"\n                ),\n                removeFormatAttributes = style\n                    ? []\n                    : (attrs || this.options.removeFormatAttributes).split(\",\"),\n                range = new dom.Range(this.document),\n                bookmark,\n                node,\n                parent,\n                filter = function (node) {\n                    return node.nodeType == 1;\n                };\n\n            function isRedundantSpan(node) {\n                if (node.nodeType == 3 || node.tagName.toLowerCase() != \"span\") {\n                    return 0;\n                }\n                if (browser.ie) {\n                    //ie 下判断实效，所以只能简单用style来判断\n                    //return node.style.cssText == '' ? 1 : 0;\n                    var attrs = node.attributes;\n                    if (attrs.length) {\n                        for (var i = 0, l = attrs.length; i < l; i++) {\n                            if (attrs[i].specified) {\n                                return 0;\n                            }\n                        }\n                        return 1;\n                    }\n                }\n                return !node.attributes.length;\n            }\n\n            function doRemove(range) {\n                var bookmark1 = range.createBookmark();\n                if (range.collapsed) {\n                    range.enlarge(true);\n                }\n\n                //不能把a标签切了\n                if (!notIncludeA) {\n                    var aNode = domUtils.findParentByTagName(\n                        range.startContainer,\n                        \"a\",\n                        true\n                    );\n                    if (aNode) {\n                        range.setStartBefore(aNode);\n                    }\n\n                    aNode = domUtils.findParentByTagName(range.endContainer, \"a\", true);\n                    if (aNode) {\n                        range.setEndAfter(aNode);\n                    }\n                }\n\n                bookmark = range.createBookmark();\n\n                node = bookmark.start;\n\n                //切开始\n                while ((parent = node.parentNode) && !domUtils.isBlockElm(parent)) {\n                    domUtils.breakParent(node, parent);\n\n                    domUtils.clearEmptySibling(node);\n                }\n                if (bookmark.end) {\n                    //切结束\n                    node = bookmark.end;\n                    while ((parent = node.parentNode) && !domUtils.isBlockElm(parent)) {\n                        domUtils.breakParent(node, parent);\n                        domUtils.clearEmptySibling(node);\n                    }\n\n                    //开始去除样式\n                    var current = domUtils.getNextDomNode(bookmark.start, false, filter),\n                        next;\n                    while (current) {\n                        if (current == bookmark.end) {\n                            break;\n                        }\n\n                        next = domUtils.getNextDomNode(current, true, filter);\n\n                        if (\n                            !dtd.$empty[current.tagName.toLowerCase()] &&\n                            !domUtils.isBookmarkNode(current)\n                        ) {\n                            if (tagReg.test(current.tagName)) {\n                                if (style) {\n                                    domUtils.removeStyle(current, style);\n                                    if (isRedundantSpan(current) && style != \"text-decoration\") {\n                                        domUtils.remove(current, true);\n                                    }\n                                } else {\n                                    domUtils.remove(current, true);\n                                }\n                            } else {\n                                //trace:939  不能把list上的样式去掉\n                                // 清除格式时，默认移除Table、List上的样式\n                                if (\n                                    true\n                                    // !dtd.$tableContent[current.tagName] && !dtd.$list[current.tagName]\n                                ) {\n                                    domUtils.removeAttributes(current, removeFormatAttributes);\n                                    if (isRedundantSpan(current)) {\n                                        domUtils.remove(current, true);\n                                    }\n                                } else {\n                                    // console.log('current.ignore',current);\n                                }\n                            }\n                        }\n                        current = next;\n                    }\n                }\n                //trace:1035\n                //trace:1096 不能把td上的样式去掉，比如边框\n                var pN = bookmark.start.parentNode;\n                if (\n                    domUtils.isBlockElm(pN) &&\n                    !dtd.$tableContent[pN.tagName] &&\n                    !dtd.$list[pN.tagName]\n                ) {\n                    domUtils.removeAttributes(pN, removeFormatAttributes);\n                }\n                pN = bookmark.end.parentNode;\n                if (\n                    bookmark.end &&\n                    domUtils.isBlockElm(pN) &&\n                    !dtd.$tableContent[pN.tagName] &&\n                    !dtd.$list[pN.tagName]\n                ) {\n                    domUtils.removeAttributes(pN, removeFormatAttributes);\n                }\n                range.moveToBookmark(bookmark).moveToBookmark(bookmark1);\n                //清除冗余的代码 <b><bookmark></b>\n                var node = range.startContainer,\n                    tmp,\n                    collapsed = range.collapsed;\n                while (\n                    node.nodeType == 1 &&\n                    domUtils.isEmptyNode(node) &&\n                    dtd.$removeEmpty[node.tagName]\n                    ) {\n                    tmp = node.parentNode;\n                    range.setStartBefore(node);\n                    //trace:937\n                    //更新结束边界\n                    if (range.startContainer === range.endContainer) {\n                        range.endOffset--;\n                    }\n                    domUtils.remove(node);\n                    node = tmp;\n                }\n\n                if (!collapsed) {\n                    node = range.endContainer;\n                    while (\n                        node.nodeType == 1 &&\n                        domUtils.isEmptyNode(node) &&\n                        dtd.$removeEmpty[node.tagName]\n                        ) {\n                        tmp = node.parentNode;\n                        range.setEndBefore(node);\n                        domUtils.remove(node);\n\n                        node = tmp;\n                    }\n                }\n            }\n\n            range = this.selection.getRange();\n            doRemove(range);\n            range.select();\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/rowspacing.js",
    "content": "/**\n * 段前段后间距插件\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 设置段间距\n * @command rowspacing\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @param { String } value 段间距的值，以px为单位\n * @param { String } dir 间距位置，top或bottom，分别表示段前和段后\n * @example\n * ```javascript\n * editor.execCommand( 'rowspacing', '10', 'top' );\n * ```\n */\n\nUE.plugins[\"rowspacing\"] = function () {\n    var me = this;\n    me.setOpt({\n        rowspacingtop: [\"5\", \"10\", \"15\", \"20\", \"25\"],\n        rowspacingbottom: [\"5\", \"10\", \"15\", \"20\", \"25\"]\n    });\n    me.commands[\"rowspacing\"] = {\n        execCommand: function (cmdName, value, dir) {\n            this.execCommand(\"paragraph\", \"p\", {\n                style: \"margin-\" + dir + \":\" + value + \"px\"\n            });\n            return true;\n        },\n        queryCommandValue: function (cmdName, dir) {\n            var pN = domUtils.filterNodeList(\n                this.selection.getStartElementPath(),\n                function (node) {\n                    return domUtils.isBlockElm(node);\n                }\n                ),\n                value;\n            //trace:1026\n            if (pN) {\n                value = domUtils\n                    .getComputedStyle(pN, \"margin-\" + dir)\n                    .replace(/[^\\d]/g, \"\");\n                return !value ? 0 : value;\n            }\n            return 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/scrawl.js",
    "content": "///import core\n///commands 涂鸦\n///commandsName  Scrawl\n///commandsTitle  涂鸦\n///commandsDialog  dialogs\\scrawl\nUE.commands[\"scrawl\"] = {\n    queryCommandState: function () {\n        return browser.ie && browser.version <= 8 ? -1 : 0;\n    }\n};\n"
  },
  {
    "path": "_src/plugins/searchreplace.js",
    "content": "///import core\n///commands 查找替换\n///commandsName  SearchReplace\n///commandsTitle  查询替换\n///commandsDialog  dialogs\\searchreplace\n/**\n * @description 查找替换\n * @author zhanyi\n */\n\nUE.plugin.register(\"searchreplace\", function () {\n    var me = this;\n\n    var _blockElm = {table: 1, tbody: 1, tr: 1, ol: 1, ul: 1};\n\n    var lastRng = null;\n\n    function getText(node) {\n        var text = node.nodeType == 3\n            ? node.nodeValue\n            : node[browser.ie ? \"innerText\" : \"textContent\"];\n        return text.replace(domUtils.fillChar, \"\");\n    }\n\n    function findTextInString(textContent, opt, currentIndex) {\n        var str = opt.searchStr;\n\n        var reg = new RegExp(str, \"g\" + (opt.casesensitive ? \"\" : \"i\")),\n            match;\n\n        if (opt.dir == -1) {\n            textContent = textContent.substr(0, currentIndex);\n            textContent = textContent.split(\"\").reverse().join(\"\");\n            str = str.split(\"\").reverse().join(\"\");\n            match = reg.exec(textContent);\n            if (match) {\n                return currentIndex - match.index - str.length;\n            }\n        } else {\n            textContent = textContent.substr(currentIndex);\n            match = reg.exec(textContent);\n            if (match) {\n                return match.index + currentIndex;\n            }\n        }\n\n        return -1;\n    }\n\n    function findTextBlockElm(node, currentIndex, opt) {\n        var textContent,\n            index,\n            methodName = opt.all || opt.dir == 1 ? \"getNextDomNode\" : \"getPreDomNode\";\n        if (domUtils.isBody(node)) {\n            node = node.firstChild;\n        }\n        var first = 1;\n        while (node) {\n            textContent = getText(node);\n            index = findTextInString(textContent, opt, currentIndex);\n            first = 0;\n            if (index != -1) {\n                return {\n                    node: node,\n                    index: index\n                };\n            }\n            node = domUtils[methodName](node);\n            while (node && _blockElm[node.nodeName.toLowerCase()]) {\n                node = domUtils[methodName](node, true);\n            }\n            if (node) {\n                currentIndex = opt.dir == -1 ? getText(node).length : 0;\n            }\n        }\n    }\n\n    function findNTextInBlockElm(node, index, str) {\n        var currentIndex = 0,\n            currentNode = node.firstChild,\n            currentNodeLength = 0,\n            result;\n        while (currentNode) {\n            if (currentNode.nodeType == 3) {\n                currentNodeLength = getText(currentNode).replace(\n                    /(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\n                    \"\"\n                ).length;\n                currentIndex += currentNodeLength;\n                if (currentIndex >= index) {\n                    return {\n                        node: currentNode,\n                        index: currentNodeLength - (currentIndex - index)\n                    };\n                }\n            } else if (!dtd.$empty[currentNode.tagName]) {\n                currentNodeLength = getText(currentNode).replace(\n                    /(^[\\t\\r\\n]+)|([\\t\\r\\n]+$)/,\n                    \"\"\n                ).length;\n                currentIndex += currentNodeLength;\n                if (currentIndex >= index) {\n                    result = findNTextInBlockElm(\n                        currentNode,\n                        currentNodeLength - (currentIndex - index),\n                        str\n                    );\n                    if (result) {\n                        return result;\n                    }\n                }\n            }\n            currentNode = domUtils.getNextDomNode(currentNode);\n        }\n    }\n\n    function searchReplace(me, opt) {\n        var rng = lastRng || me.selection.getRange(),\n            startBlockNode,\n            searchStr = opt.searchStr,\n            span = me.document.createElement(\"span\");\n        span.innerHTML = \"$$ueditor_searchreplace_key$$\";\n\n        rng.shrinkBoundary(true);\n\n        //判断是不是第一次选中\n        if (!rng.collapsed) {\n            rng.select();\n            var rngText = me.selection.getText();\n            if (\n                new RegExp(\n                    \"^\" + opt.searchStr + \"$\",\n                    opt.casesensitive ? \"\" : \"i\"\n                ).test(rngText)\n            ) {\n                if (opt.replaceStr != undefined) {\n                    replaceText(rng, opt.replaceStr);\n                    rng.select();\n                    return true;\n                } else {\n                    rng.collapse(opt.dir == -1);\n                }\n            }\n        }\n\n        rng.insertNode(span);\n        rng.enlargeToBlockElm(true);\n        startBlockNode = rng.startContainer;\n        var currentIndex = getText(startBlockNode).indexOf(\n            \"$$ueditor_searchreplace_key$$\"\n        );\n        rng.setStartBefore(span);\n        domUtils.remove(span);\n        var result = findTextBlockElm(startBlockNode, currentIndex, opt);\n        if (result) {\n            var rngStart = findNTextInBlockElm(result.node, result.index, searchStr);\n            var rngEnd = findNTextInBlockElm(\n                result.node,\n                result.index + searchStr.length,\n                searchStr\n            );\n            rng\n                .setStart(rngStart.node, rngStart.index)\n                .setEnd(rngEnd.node, rngEnd.index);\n\n            if (opt.replaceStr !== undefined) {\n                replaceText(rng, opt.replaceStr);\n            }\n            rng.select();\n            return true;\n        } else {\n            rng.setCursor();\n        }\n    }\n\n    function replaceText(rng, str) {\n        str = me.document.createTextNode(str);\n        rng.deleteContents().insertNode(str);\n    }\n\n    return {\n        commands: {\n            searchreplace: {\n                execCommand: function (cmdName, opt) {\n                    utils.extend(\n                        opt,\n                        {\n                            all: false,\n                            casesensitive: false,\n                            dir: 1\n                        },\n                        true\n                    );\n                    var num = 0;\n                    if (opt.all) {\n                        lastRng = null;\n                        var rng = me.selection.getRange(),\n                            first = me.body.firstChild;\n                        if (first && first.nodeType == 1) {\n                            rng.setStart(first, 0);\n                            rng.shrinkBoundary(true);\n                        } else if (first.nodeType == 3) {\n                            rng.setStartBefore(first);\n                        }\n                        rng.collapse(true).select(true);\n                        if (opt.replaceStr !== undefined) {\n                            me.fireEvent(\"saveScene\");\n                        }\n                        while (searchReplace(this, opt)) {\n                            num++;\n                            lastRng = me.selection.getRange();\n                            lastRng.collapse(opt.dir == -1);\n                        }\n                        if (num) {\n                            me.fireEvent(\"saveScene\");\n                        }\n                    } else {\n                        if (opt.replaceStr !== undefined) {\n                            me.fireEvent(\"saveScene\");\n                        }\n                        if (searchReplace(this, opt)) {\n                            num++;\n                            lastRng = me.selection.getRange();\n                            lastRng.collapse(opt.dir == -1);\n                        }\n                        if (num) {\n                            me.fireEvent(\"saveScene\");\n                        }\n                    }\n\n                    return num;\n                },\n                notNeedUndo: 1\n            }\n        },\n        bindEvents: {\n            clearlastSearchResult: function () {\n                lastRng = null;\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/section.js",
    "content": "/**\n * 目录大纲支持插件\n * @file\n * @since 1.3.0\n */\nUE.plugin.register(\"section\", function () {\n    /* 目录节点对象 */\n    function Section(option) {\n        this.tag = \"\";\n        (this.level = -1), (this.dom = null);\n        this.nextSection = null;\n        this.previousSection = null;\n        this.parentSection = null;\n        this.startAddress = [];\n        this.endAddress = [];\n        this.children = [];\n    }\n\n    function getSection(option) {\n        var section = new Section();\n        return utils.extend(section, option);\n    }\n\n    function getNodeFromAddress(startAddress, root) {\n        var current = root;\n        for (var i = 0; i < startAddress.length; i++) {\n            if (!current.childNodes) return null;\n            current = current.childNodes[startAddress[i]];\n        }\n        return current;\n    }\n\n    var me = this;\n\n    return {\n        bindMultiEvents: {\n            type: \"aftersetcontent afterscencerestore\",\n            handler: function () {\n                me.fireEvent(\"updateSections\");\n            }\n        },\n        bindEvents: {\n            /* 初始化、拖拽、粘贴、执行setcontent之后 */\n            ready: function () {\n                me.fireEvent(\"updateSections\");\n                domUtils.on(me.body, \"drop paste\", function () {\n                    me.fireEvent(\"updateSections\");\n                });\n            },\n            /* 执行paragraph命令之后 */\n            afterexeccommand: function (type, cmd) {\n                if (cmd == \"paragraph\") {\n                    me.fireEvent(\"updateSections\");\n                }\n            },\n            /* 部分键盘操作，触发updateSections事件 */\n            keyup: function (type, e) {\n                var me = this,\n                    range = me.selection.getRange();\n                if (range.collapsed != true) {\n                    me.fireEvent(\"updateSections\");\n                } else {\n                    var keyCode = e.keyCode || e.which;\n                    if (keyCode == 13 || keyCode == 8 || keyCode == 46) {\n                        me.fireEvent(\"updateSections\");\n                    }\n                }\n            }\n        },\n        commands: {\n            getsections: {\n                execCommand: function (cmd, levels) {\n                    var levelFn = levels || [\"h1\", \"h2\", \"h3\", \"h4\", \"h5\", \"h6\"];\n\n                    for (var i = 0; i < levelFn.length; i++) {\n                        if (typeof levelFn[i] == \"string\") {\n                            levelFn[i] = (function (fn) {\n                                return function (node) {\n                                    return node.tagName == fn.toUpperCase();\n                                };\n                            })(levelFn[i]);\n                        } else if (typeof levelFn[i] != \"function\") {\n                            levelFn[i] = function (node) {\n                                return null;\n                            };\n                        }\n                    }\n\n                    function getSectionLevel(node) {\n                        for (var i = 0; i < levelFn.length; i++) {\n                            if (levelFn[i](node)) return i;\n                        }\n                        return -1;\n                    }\n\n                    var me = this,\n                        Directory = getSection({level: -1, title: \"root\"}),\n                        previous = Directory;\n\n                    function traversal(node, Directory) {\n                        var level,\n                            tmpSection = null,\n                            parent,\n                            child,\n                            children = node.childNodes;\n                        for (var i = 0, len = children.length; i < len; i++) {\n                            child = children[i];\n                            level = getSectionLevel(child);\n                            if (level >= 0) {\n                                var address = me.selection\n                                        .getRange()\n                                        .selectNode(child)\n                                        .createAddress(true).startAddress,\n                                    current = getSection({\n                                        tag: child.tagName,\n                                        title: child.innerText || child.textContent || \"\",\n                                        level: level,\n                                        dom: child,\n                                        startAddress: utils.clone(address, []),\n                                        endAddress: utils.clone(address, []),\n                                        children: []\n                                    });\n                                previous.nextSection = current;\n                                current.previousSection = previous;\n                                parent = previous;\n                                while (level <= parent.level) {\n                                    parent = parent.parentSection;\n                                }\n                                current.parentSection = parent;\n                                parent.children.push(current);\n                                tmpSection = previous = current;\n                            } else {\n                                child.nodeType === 1 && traversal(child, Directory);\n                                tmpSection &&\n                                tmpSection.endAddress[tmpSection.endAddress.length - 1]++;\n                            }\n                        }\n                    }\n\n                    traversal(me.body, Directory);\n                    return Directory;\n                },\n                notNeedUndo: true\n            },\n            movesection: {\n                execCommand: function (cmd, sourceSection, targetSection, isAfter) {\n                    var me = this,\n                        targetAddress,\n                        target;\n\n                    if (!sourceSection || !targetSection || targetSection.level == -1)\n                        return;\n\n                    targetAddress = isAfter\n                        ? targetSection.endAddress\n                        : targetSection.startAddress;\n                    target = getNodeFromAddress(targetAddress, me.body);\n\n                    /* 判断目标地址是否被源章节包含 */\n                    if (\n                        !targetAddress ||\n                        !target ||\n                        isContainsAddress(\n                            sourceSection.startAddress,\n                            sourceSection.endAddress,\n                            targetAddress\n                        )\n                    )\n                        return;\n\n                    var startNode = getNodeFromAddress(\n                        sourceSection.startAddress,\n                        me.body\n                        ),\n                        endNode = getNodeFromAddress(sourceSection.endAddress, me.body),\n                        current,\n                        nextNode;\n\n                    if (isAfter) {\n                        current = endNode;\n                        while (\n                            current &&\n                            !(\n                                domUtils.getPosition(startNode, current) &\n                                domUtils.POSITION_FOLLOWING\n                            )\n                            ) {\n                            nextNode = current.previousSibling;\n                            domUtils.insertAfter(target, current);\n                            if (current == startNode) break;\n                            current = nextNode;\n                        }\n                    } else {\n                        current = startNode;\n                        while (\n                            current &&\n                            !(\n                                domUtils.getPosition(current, endNode) &\n                                domUtils.POSITION_FOLLOWING\n                            )\n                            ) {\n                            nextNode = current.nextSibling;\n                            target.parentNode.insertBefore(current, target);\n                            if (current == endNode) break;\n                            current = nextNode;\n                        }\n                    }\n\n                    me.fireEvent(\"updateSections\");\n\n                    /* 获取地址的包含关系 */\n                    function isContainsAddress(startAddress, endAddress, addressTarget) {\n                        var isAfterStartAddress = false,\n                            isBeforeEndAddress = false;\n                        for (var i = 0; i < startAddress.length; i++) {\n                            if (i >= addressTarget.length) break;\n                            if (addressTarget[i] > startAddress[i]) {\n                                isAfterStartAddress = true;\n                                break;\n                            } else if (addressTarget[i] < startAddress[i]) {\n                                break;\n                            }\n                        }\n                        for (var i = 0; i < endAddress.length; i++) {\n                            if (i >= addressTarget.length) break;\n                            if (addressTarget[i] < startAddress[i]) {\n                                isBeforeEndAddress = true;\n                                break;\n                            } else if (addressTarget[i] > startAddress[i]) {\n                                break;\n                            }\n                        }\n                        return isAfterStartAddress && isBeforeEndAddress;\n                    }\n                }\n            },\n            deletesection: {\n                execCommand: function (cmd, section, keepChildren) {\n                    var me = this;\n\n                    if (!section) return;\n\n                    function getNodeFromAddress(startAddress) {\n                        var current = me.body;\n                        for (var i = 0; i < startAddress.length; i++) {\n                            if (!current.childNodes) return null;\n                            current = current.childNodes[startAddress[i]];\n                        }\n                        return current;\n                    }\n\n                    var startNode = getNodeFromAddress(section.startAddress),\n                        endNode = getNodeFromAddress(section.endAddress),\n                        current = startNode,\n                        nextNode;\n\n                    if (!keepChildren) {\n                        while (\n                            current &&\n                            domUtils.inDoc(endNode, me.document) &&\n                            !(\n                                domUtils.getPosition(current, endNode) &\n                                domUtils.POSITION_FOLLOWING\n                            )\n                            ) {\n                            nextNode = current.nextSibling;\n                            domUtils.remove(current);\n                            current = nextNode;\n                        }\n                    } else {\n                        domUtils.remove(current);\n                    }\n\n                    me.fireEvent(\"updateSections\");\n                }\n            },\n            selectsection: {\n                execCommand: function (cmd, section) {\n                    if (!section && !section.dom) return false;\n                    var me = this,\n                        range = me.selection.getRange(),\n                        address = {\n                            startAddress: utils.clone(section.startAddress, []),\n                            endAddress: utils.clone(section.endAddress, [])\n                        };\n                    address.endAddress[address.endAddress.length - 1]++;\n                    range.moveToAddress(address).select().scrollToView();\n                    return true;\n                },\n                notNeedUndo: true\n            },\n            scrolltosection: {\n                execCommand: function (cmd, section) {\n                    if (!section && !section.dom) return false;\n                    var me = this,\n                        range = me.selection.getRange(),\n                        address = {\n                            startAddress: section.startAddress,\n                            endAddress: section.endAddress\n                        };\n                    address.endAddress[address.endAddress.length - 1]++;\n                    range.moveToAddress(address).scrollToView();\n                    return true;\n                },\n                notNeedUndo: true\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/selectall.js",
    "content": "/**\n * 全选\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 选中所有内容\n * @command selectall\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'selectall' );\n * ```\n */\nUE.plugins[\"selectall\"] = function () {\n    var me = this;\n    me.commands[\"selectall\"] = {\n        execCommand: function () {\n            //去掉了原生的selectAll,因为会出现报错和当内容为空时，不能出现闭合状态的光标\n            var me = this,\n                body = me.body,\n                range = me.selection.getRange();\n            range.selectNodeContents(body);\n            if (domUtils.isEmptyBlock(body)) {\n                //opera不能自动合并到元素的里边，要手动处理一下\n                if (browser.opera && body.firstChild && body.firstChild.nodeType == 1) {\n                    range.setStartAtFirst(body.firstChild);\n                }\n                range.collapse(true);\n            }\n            range.select(true);\n        },\n        notNeedUndo: 1\n    };\n\n    //快捷键\n    me.addshortcutkey({\n        selectAll: \"ctrl+65\"\n    });\n};\n"
  },
  {
    "path": "_src/plugins/serverparam.js",
    "content": "/**\n * 服务器提交的额外参数列表设置插件\n * @file\n * @since 1.2.6.1\n */\nUE.plugin.register(\"serverparam\", function () {\n    var me = this,\n        serverParam = {};\n\n    return {\n        commands: {\n            /**\n             * 修改服务器提交的额外参数列表,清除所有项\n             * @command serverparam\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @example\n             * ```javascript\n             * editor.execCommand('serverparam');\n             * editor.queryCommandValue('serverparam'); //返回空\n             * ```\n             */\n            /**\n             * 修改服务器提交的额外参数列表,删除指定项\n             * @command serverparam\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @param { String } key 要清除的属性\n             * @example\n             * ```javascript\n             * editor.execCommand('serverparam', 'name'); //删除属性name\n             * ```\n             */\n            /**\n             * 修改服务器提交的额外参数列表,使用键值添加项\n             * @command serverparam\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @param { String } key 要添加的属性\n             * @param { String } value 要添加属性的值\n             * @example\n             * ```javascript\n             * editor.execCommand('serverparam', 'name', 'hello');\n             * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'}\n             * ```\n             */\n            /**\n             * 修改服务器提交的额外参数列表,传入键值对对象添加多项\n             * @command serverparam\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @param { Object } key 传入的键值对对象\n             * @example\n             * ```javascript\n             * editor.execCommand('serverparam', {'name': 'hello'});\n             * editor.queryCommandValue('serverparam'); //返回对象 {'name': 'hello'}\n             * ```\n             */\n            /**\n             * 修改服务器提交的额外参数列表,使用自定义函数添加多项\n             * @command serverparam\n             * @method execCommand\n             * @param { String } cmd 命令字符串\n             * @param { Function } key 自定义获取参数的函数\n             * @example\n             * ```javascript\n             * editor.execCommand('serverparam', function(editor){\n             *     return {'key': 'value'};\n             * });\n             * editor.queryCommandValue('serverparam'); //返回对象 {'key': 'value'}\n             * ```\n             */\n\n            /**\n             * 获取服务器提交的额外参数列表\n             * @command serverparam\n             * @method queryCommandValue\n             * @param { String } cmd 命令字符串\n             * @example\n             * ```javascript\n             * editor.queryCommandValue( 'serverparam' ); //返回对象 {'key': 'value'}\n             * ```\n             */\n            serverparam: {\n                execCommand: function (cmd, key, value) {\n                    if (key === undefined || key === null) {\n                        //不传参数,清空列表\n                        serverParam = {};\n                    } else if (utils.isString(key)) {\n                        //传入键值\n                        if (value === undefined || value === null) {\n                            delete serverParam[key];\n                        } else {\n                            serverParam[key] = value;\n                        }\n                    } else if (utils.isObject(key)) {\n                        //传入对象,覆盖列表项\n                        utils.extend(serverParam, key, false);\n                    } else if (utils.isFunction(key)) {\n                        //传入函数,添加列表项\n                        utils.extend(serverParam, key(), false);\n                    }\n                },\n                queryCommandValue: function () {\n                    return serverParam || {};\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/shortcutmenu.js",
    "content": "///import core\n///commands       弹出菜单\n// commandsName  popupmenu\n///commandsTitle  弹出菜单\n/**\n * 弹出菜单\n * @function\n * @name baidu.editor.plugins.popupmenu\n * @author xuheng\n */\n\nUE.plugins[\"shortcutmenu\"] = function () {\n    var me = this,\n        menu,\n        items = me.options.shortcutMenu || [];\n\n    if (!items.length) {\n        return;\n    }\n\n    // contextmenu\n    me.addListener(\"mouseup\", function (type, e) {\n        var me = this,\n            customEvt = {\n                type: type,\n                target: e.target || e.srcElement,\n                screenX: e.screenX,\n                screenY: e.screenY,\n                clientX: e.clientX,\n                clientY: e.clientY\n            };\n        // console.log('shortcutmenu.mouseup', e, e.target, me.selection.getRange());\n\n        setTimeout(function () {\n            // console.log(e, me.selection.getRange());\n            // var rng = me.selection.getRange();\n            // if (rng.collapsed) {\n            //     return;\n            // }\n            // if (rng.collapsed === false || type === \"contextmenu\") {\n            // 未选中文字情况下不显示\n            // if (!me.selection.getText()) {\n            //     return\n            // }\n            if (!menu) {\n                menu = new baidu.editor.ui.ShortCutMenu({\n                    editor: me,\n                    items: items.concat([]),\n                    theme: me.options.theme,\n                    className: \"edui-shortcutmenu\"\n                });\n\n                menu.render();\n                me.fireEvent(\"afterrendershortcutmenu\", menu);\n            }\n            menu.show(customEvt, !!UE.plugins[\"contextmenu\"]);\n            // }\n        });\n\n        if (type === \"contextmenu\") {\n            domUtils.preventDefault(e);\n            if (browser.ie9below) {\n                var ieRange;\n                try {\n                    ieRange = me.selection.getNative().createRange();\n                } catch (e) {\n                    return;\n                }\n                if (ieRange.item) {\n                    var range = new dom.Range(me.document);\n                    range.selectNode(ieRange.item(0)).select(true, true);\n                }\n            }\n        }\n    });\n\n    me.addListener(\"keydown\", function (type) {\n        if (type === \"keydown\") {\n            menu && !menu.isHidden && menu.hide();\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/simpleupload.js",
    "content": "/**\n * @description\n * 简单上传:点击按钮,直接选择文件上传\n * @author Jinqn\n * @date 2014-03-31\n */\nUE.plugin.register(\"simpleupload\", function () {\n    var me = this,\n        isLoaded = false,\n        containerBtn;\n\n    function initUploadBtn() {\n        var input = document.createElement(\"input\");\n        input.style.cssText = 'position:absolute;top:0;left:0;width:100%;height:100%;cursor:pointer;font-size:0;opacity:0;';\n        input.type = 'file';\n        input.accept = me.getOpt('imageAllowFiles').join(',');\n        containerBtn.appendChild(input);\n        domUtils.on(input, 'click', function (e) {\n            var toolbarCallback = me.getOpt(\"toolbarCallback\");\n            if (toolbarCallback) {\n                if (true === toolbarCallback('simpleupload', me)) {\n                    e.stopPropagation();\n                    e.preventDefault();\n                }\n            }\n        });\n        domUtils.on(input, 'change', function (e) {\n            var state = me.queryCommandState(\"simpleupload\");\n            if (state === -1) {\n                return;\n            }\n            if (!input.value) {\n                return;\n            }\n\n            var loadingId = UE.dialog.loadingPlaceholder(me);\n\n            if (!me.getOpt(\"imageActionName\")) {\n                UE.dialog.removeLoadingPlaceholder(me, loadingId);\n                UE.dialog.tipError(me, me.getLang(\"autoupload.errorLoadConfig\"));\n                return;\n            }\n\n            var allowFiles = me.getOpt(\"imageAllowFiles\");\n            var filename = input.value, fileext = filename ? filename.substr(filename.lastIndexOf(\".\")) : \"\";\n            if (\n                !fileext ||\n                (allowFiles &&\n                    (allowFiles.join(\"\") + \".\").indexOf(fileext.toLowerCase() + \".\") === -1)\n            ) {\n                UE.dialog.removeLoadingPlaceholder(me, loadingId);\n                UE.dialog.tipError(me, me.getLang(\"autoupload.exceedTypeError\"));\n                return;\n            }\n\n            var successHandler = function (res) {\n                const loader = me.document.getElementById(loadingId);\n                domUtils.removeClasses(loader, \"uep-loading\");\n                const link = me.options.imageUrlPrefix + res.url;\n                loader.setAttribute(\"src\", link);\n                loader.setAttribute(\"_src\", link);\n                loader.setAttribute(\"alt\", res.original || \"\");\n                loader.removeAttribute(\"id\");\n                me.fireEvent(\"contentchange\");\n                // 触发上传图片事件\n                me.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'image'\n                });\n            };\n\n            var errorHandler = function (err) {\n                UE.dialog.removeLoadingPlaceholder(me, loadingId);\n                UE.dialog.tipError(me, err);\n            };\n\n            var upload = function (file) {\n                if(me.getOpt('uploadServiceEnable')){\n                    me.getOpt('uploadServiceUpload')('image', file, {\n                        success: function( res ) {\n                            successHandler( res );\n                        },\n                        error: function( err ) {\n                            errorHandler(me.getLang(\"simpleupload.loadError\") + ' : ' + err);\n                        },\n                        progress: function( percent ) {\n\n                        }\n                    }, {\n                        from: 'upload'\n                    });\n                    return;\n                }\n                const formData = new FormData();\n                formData.append(me.getOpt('imageFieldName'), file, file.name);\n                UE.api.requestAction(me, me.getOpt(\"imageActionName\"), {\n                    data: formData\n                }).then(function (res) {\n                    res = me.getOpt('serverResponsePrepare')( res.data )\n                    if ('SUCCESS' === res.state && res.url) {\n                        successHandler(res)\n                    } else {\n                        errorHandler(res.state);\n                    }\n                    input.value = '';\n                }).catch(function (err) {\n                    errorHandler(err)\n                    input.value = '';\n                });\n            };\n            var file = input.files[0];\n            var fileExt = UE.plus.fileExt(file.name);\n            // console.log('file',file);\n            var imageCompressEnable = me.getOpt('imageCompressEnable'),\n                imageMaxSize = me.getOpt('imageMaxSize'),\n                imageCompressBorder = me.getOpt('imageCompressBorder');\n            if (imageCompressEnable && ['jpg', 'jpeg', 'png'].includes(fileExt)) {\n                UE.image.compress(file, {\n                    maxSizeMB: imageMaxSize / 1024 / 1024,\n                    maxWidthOrHeight: imageCompressBorder\n                }).then(function (compressedFile) {\n                    if (me.options.debug) {\n                        console.log('UEditorPlus.SimpleUpload.CompressImage', (compressedFile.size / file.size * 100).toFixed(2) + '%');\n                    }\n                    upload(compressedFile);\n                }).catch(function (err) {\n                    console.error('UEditorPlus.SimpleUpload.CompressImage.error', err);\n                    upload(file);\n                });\n            } else {\n                upload(file);\n            }\n        });\n\n        var stateTimer;\n        me.addListener(\"selectionchange\", function () {\n            clearTimeout(stateTimer);\n            stateTimer = setTimeout(function () {\n                var state = me.queryCommandState(\"simpleupload\");\n                if (state === -1) {\n                    input.disabled = \"disabled\";\n                } else {\n                    input.disabled = false;\n                }\n            }, 400);\n        });\n        isLoaded = true;\n    }\n\n    return {\n        bindEvents: {\n            ready: function () {\n                //设置loading的样式\n                utils.cssRule(\n                    \"loading\",\n                    \".uep-loading{display:inline-block;cursor:default;background: url('\" +\n                    this.options.themePath +\n                    this.options.theme +\n                    \"/images/loading.gif') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;}\\n\" +\n                    \".uep-loading-error{display:inline-block;cursor:default;background: url('\" +\n                    this.options.themePath +\n                    this.options.theme +\n                    \"/images/loaderror.png') no-repeat center center transparent;border-radius:3px;outline:1px solid #EEE;margin-right:1px;height:22px;width:22px;\" +\n                    \"}\",\n                    this.document\n                );\n            },\n            /* 初始化简单上传按钮 */\n            simpleuploadbtnready: function (type, container) {\n                containerBtn = container;\n                me.afterConfigReady(initUploadBtn);\n            }\n        },\n        outputRule: function (root) {\n            utils.each(root.getNodesByTagName(\"img\"), function (n) {\n                if (/\\b(uep\\-loading\\-error)|(bloaderrorclass)\\b/.test(n.getAttr(\"class\"))) {\n                    n.parentNode.removeChild(n);\n                }\n            });\n        },\n        commands: {\n            simpleupload: {\n                queryCommandState: function () {\n                    return isLoaded ? 0 : -1;\n                }\n            }\n        }\n    };\n});\n"
  },
  {
    "path": "_src/plugins/source.js",
    "content": "/**\n * 源码编辑插件\n * @file\n * @since 1.2.6.1\n */\n\n(function () {\n    var sourceEditors = {\n        textarea: function (editor, holder) {\n            var textarea = holder.ownerDocument.createElement(\"textarea\");\n            textarea.style.cssText =\n                \"position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;\";\n            // todo: IE下只有onresize属性可用... 很纠结\n            if (browser.ie && browser.version < 8) {\n                textarea.style.width = holder.offsetWidth + \"px\";\n                textarea.style.height = holder.offsetHeight + \"px\";\n                holder.onresize = function () {\n                    textarea.style.width = holder.offsetWidth + \"px\";\n                    textarea.style.height = holder.offsetHeight + \"px\";\n                };\n            }\n            holder.appendChild(textarea);\n            return {\n                setContent: function (content) {\n                    textarea.value = content;\n                },\n                getContent: function () {\n                    return textarea.value;\n                },\n                select: function () {\n                    var range;\n                    if (browser.ie) {\n                        range = textarea.createTextRange();\n                        range.collapse(true);\n                        range.select();\n                    } else {\n                        //todo: chrome下无法设置焦点\n                        textarea.setSelectionRange(0, 0);\n                        textarea.focus();\n                    }\n                },\n                dispose: function () {\n                    holder.removeChild(textarea);\n                    // todo\n                    holder.onresize = null;\n                    textarea = null;\n                    holder = null;\n                },\n                focus: function () {\n                    textarea.focus();\n                },\n                blur: function () {\n                    textarea.blur();\n                }\n            };\n        },\n        codemirror: function (editor, holder) {\n            var codeEditor = window.CodeMirror(holder, {\n                mode: \"text/html\",\n                tabMode: \"indent\",\n                lineNumbers: true,\n                lineWrapping: true,\n                onChange: function (v) {\n                    editor.sync();\n                    editor.fireEvent(\"contentchange\");\n                    // console.log('CodeMirror.onChange',v.getValue());\n                }\n            });\n            // console.log('sourceEditor',codeEditor);\n            var dom = codeEditor.getWrapperElement();\n            dom.style.cssText =\n                'position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,\"Courier new\",monospace;font-size:13px;';\n            codeEditor.getScrollerElement().style.cssText =\n                \"position:absolute;left:0;top:0;width:100%;height:100%;\";\n            codeEditor.refresh();\n            return {\n                getCodeMirror: function () {\n                    return codeEditor;\n                },\n                setContent: function (content) {\n                    codeEditor.setValue(content);\n                },\n                getContent: function () {\n                    return codeEditor.getValue();\n                },\n                select: function () {\n                    codeEditor.focus();\n                },\n                dispose: function () {\n                    holder.removeChild(dom);\n                    dom = null;\n                    codeEditor = null;\n                },\n                focus: function () {\n                    codeEditor.focus();\n                },\n                blur: function () {\n                    // codeEditor.blur();\n                    // since codemirror not support blur()\n                    codeEditor.setOption('readOnly', true);\n                    codeEditor.setOption('readOnly', false);\n                }\n            };\n        }\n    };\n\n    UE.plugins[\"source\"] = function () {\n        var me = this;\n        var opt = this.options;\n        var sourceMode = false;\n        var sourceEditor;\n        var orgSetContent;\n        var orgFocus;\n        var orgBlur;\n        opt.sourceEditor = browser.ie\n            ? \"textarea\"\n            : opt.sourceEditor || \"codemirror\";\n\n        me.setOpt({\n            sourceEditorFirst: false\n        });\n\n        function createSourceEditor(holder) {\n            return sourceEditors[\n                opt.sourceEditor == \"codemirror\" && window.CodeMirror\n                    ? \"codemirror\"\n                    : \"textarea\"\n                ](me, holder);\n        }\n\n        var bakCssText;\n        //解决在源码模式下getContent不能得到最新的内容问题\n        var oldGetContent, bakAddress;\n\n        /**\n         * 切换源码模式和编辑模式\n         * @command source\n         * @method execCommand\n         * @param { String } cmd 命令字符串\n         * @example\n         * ```javascript\n         * editor.execCommand( 'source');\n         * ```\n         */\n\n        /**\n         * 查询当前编辑区域的状态是源码模式还是可视化模式\n         * @command source\n         * @method queryCommandState\n         * @param { String } cmd 命令字符串\n         * @return { int } 如果当前是源码编辑模式，返回1，否则返回0\n         * @example\n         * ```javascript\n         * editor.queryCommandState( 'source' );\n         * ```\n         */\n\n        me.commands[\"source\"] = {\n            execCommand: function () {\n                sourceMode = !sourceMode;\n                if (sourceMode) {\n                    bakAddress = me.selection.getRange().createAddress(false, true);\n                    me.undoManger && me.undoManger.save(true);\n                    if (browser.gecko) {\n                        me.body.contentEditable = false;\n                    }\n\n                    bakCssText = me.iframe.style.cssText;\n                    me.iframe.style.cssText +=\n                        \"position:absolute;left:-32768px;top:-32768px;\";\n\n                    me.fireEvent(\"beforegetcontent\");\n                    var root = UE.htmlparser(me.body.innerHTML);\n                    me.filterOutputRule(root);\n                    root.traversal(function (node) {\n                        if (node.type == \"element\") {\n                            switch (node.tagName) {\n                                case \"td\":\n                                case \"th\":\n                                case \"caption\":\n                                    if (node.children && node.children.length == 1) {\n                                        if (node.firstChild().tagName == \"br\") {\n                                            node.removeChild(node.firstChild());\n                                        }\n                                    }\n                                    break;\n                                case \"pre\":\n                                    node.innerText(node.innerText().replace(/&nbsp;/g, \" \"));\n                            }\n                        }\n                    });\n\n                    me.fireEvent(\"aftergetcontent\");\n\n                    var content = root.toHtml(true);\n\n                    sourceEditor = createSourceEditor(me.iframe.parentNode);\n\n                    sourceEditor.setContent(content);\n\n                    orgSetContent = me.setContent;\n\n                    me.setContent = function (html) {\n                        //这里暂时不触发事件，防止报错\n                        var root = UE.htmlparser(html);\n                        me.filterInputRule(root);\n                        html = root.toHtml();\n                        sourceEditor.setContent(html);\n                    };\n\n                    setTimeout(function () {\n                        sourceEditor.select();\n                        me.addListener(\"fullscreenchanged\", function () {\n                            try {\n                                sourceEditor.getCodeMirror().refresh();\n                            } catch (e) {\n                            }\n                        });\n                    });\n\n                    //重置getContent，源码模式下取值也能是最新的数据\n                    oldGetContent = me.getContent;\n                    me.getContent = function () {\n                        return (\n                            sourceEditor.getContent() ||\n                            \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\"\n                        );\n                    };\n\n                    orgFocus = me.focus;\n                    orgBlur = me.blur;\n\n                    me.focus = function () {\n                        sourceEditor.focus();\n                    };\n\n                    me.blur = function () {\n                        orgBlur.call(me);\n                        sourceEditor.blur();\n                    };\n                } else {\n                    me.iframe.style.cssText = bakCssText;\n                    var cont =\n                        sourceEditor.getContent() ||\n                        \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\";\n                    //处理掉block节点前后的空格,有可能会误命中，暂时不考虑\n                    cont = cont.replace(\n                        new RegExp(\"[\\\\r\\\\t\\\\n ]*</?(\\\\w+)\\\\s*(?:[^>]*)>\", \"g\"),\n                        function (a, b) {\n                            if (b && !dtd.$inlineWithA[b.toLowerCase()]) {\n                                return a.replace(/(^[\\n\\r\\t ]*)|([\\n\\r\\t ]*$)/g, \"\");\n                            }\n                            return a.replace(/(^[\\n\\r\\t]*)|([\\n\\r\\t]*$)/g, \"\");\n                        }\n                    );\n\n                    me.setContent = orgSetContent;\n\n                    me.setContent(cont);\n                    sourceEditor.dispose();\n                    sourceEditor = null;\n                    //还原getContent方法\n                    me.getContent = oldGetContent;\n\n                    me.focus = orgFocus;\n                    me.blur = orgBlur;\n\n                    var first = me.body.firstChild;\n                    //trace:1106 都删除空了，下边会报错，所以补充一个p占位\n                    if (!first) {\n                        me.body.innerHTML = \"<p>\" + (browser.ie ? \"\" : \"<br/>\") + \"</p>\";\n                        first = me.body.firstChild;\n                    }\n\n                    //要在ifm为显示时ff才能取到selection,否则报错\n                    //这里不能比较位置了\n                    me.undoManger && me.undoManger.save(true);\n\n                    if (browser.gecko) {\n                        var input = document.createElement(\"input\");\n                        input.style.cssText = \"position:absolute;left:0;top:-32768px\";\n\n                        document.body.appendChild(input);\n\n                        me.body.contentEditable = false;\n                        setTimeout(function () {\n                            domUtils.setViewportOffset(input, {left: -32768, top: 0});\n                            input.focus();\n                            setTimeout(function () {\n                                me.body.contentEditable = true;\n                                me.selection.getRange().moveToAddress(bakAddress).select(true);\n                                domUtils.remove(input);\n                            });\n                        });\n                    } else {\n                        //ie下有可能报错，比如在代码顶头的情况\n                        try {\n                            me.selection.getRange().moveToAddress(bakAddress).select(true);\n                        } catch (e) {\n                        }\n                    }\n                }\n                this.fireEvent(\"sourcemodechanged\", sourceMode);\n            },\n            queryCommandState: function () {\n                return sourceMode | 0;\n            },\n            notNeedUndo: 1\n        };\n        var oldQueryCommandState = me.queryCommandState;\n\n        me.queryCommandState = function (cmdName) {\n            cmdName = cmdName.toLowerCase();\n            if (sourceMode) {\n                //源码模式下可以开启的命令\n                return cmdName in\n                {\n                    source: 1,\n                    fullscreen: 1\n                }\n                    ? 1\n                    : -1;\n            }\n            return oldQueryCommandState.apply(this, arguments);\n        };\n\n        if (opt.sourceEditor == \"codemirror\") {\n            me.addListener(\"ready\", function () {\n                utils.loadFile(\n                    document,\n                    {\n                        src:\n                            opt.codeMirrorJsUrl ||\n                            opt.UEDITOR_HOME_URL + \"third-party/codemirror/codemirror.js\",\n                        tag: \"script\",\n                        type: \"text/javascript\",\n                        defer: \"defer\"\n                    },\n                    function () {\n                        if (opt.sourceEditorFirst) {\n                            setTimeout(function () {\n                                me.execCommand(\"source\");\n                            }, 0);\n                        }\n                    }\n                );\n                utils.loadFile(document, {\n                    tag: \"link\",\n                    rel: \"stylesheet\",\n                    type: \"text/css\",\n                    href:\n                        opt.codeMirrorCssUrl ||\n                        opt.UEDITOR_HOME_URL + \"third-party/codemirror/codemirror.css?221123\"\n                });\n            });\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/plugins/table.action.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-10-12\n * Time: 上午10:05\n * To change this template use File | Settings | File Templates.\n */\nUE.plugins[\"table\"] = function () {\n    var me = this,\n        tabTimer = null,\n        //拖动计时器\n        tableDragTimer = null,\n        //双击计时器\n        tableResizeTimer = null,\n        //单元格最小宽度\n        cellMinWidth = 5,\n        isInResizeBuffer = false,\n        //单元格边框大小\n        cellBorderWidth = 5,\n        //鼠标偏移距离\n        offsetOfTableCell = 10,\n        //记录在有限时间内的点击状态， 共有3个取值， 0, 1, 2。 0代表未初始化， 1代表单击了1次，2代表2次\n        singleClickState = 0,\n        userActionStatus = null,\n        //双击允许的时间范围\n        dblclickTime = 200,\n        UT = UE.UETable,\n        getUETable = function (tdOrTable) {\n            return UT.getUETable(tdOrTable);\n        },\n        getUETableBySelected = function (editor) {\n            return UT.getUETableBySelected(editor);\n        },\n        getDefaultValue = function (editor, table) {\n            return UT.getDefaultValue(editor, table);\n        },\n        removeSelectedClass = function (cells) {\n            return UT.removeSelectedClass(cells);\n        };\n\n    function showError(e) {\n        //        throw e;\n    }\n\n    me.ready(function () {\n        var me = this;\n        var orgGetText = me.selection.getText;\n        me.selection.getText = function () {\n            var table = getUETableBySelected(me);\n            if (table) {\n                var str = \"\";\n                utils.each(table.selectedTds, function (td) {\n                    str += td[browser.ie ? \"innerText\" : \"textContent\"];\n                });\n                return str;\n            } else {\n                return orgGetText.call(me.selection);\n            }\n        };\n    });\n\n    //处理拖动及框选相关方法\n    var startTd = null, //鼠标按下时的锚点td\n        currentTd = null, //当前鼠标经过时的td\n        onDrag = \"\", //指示当前拖动状态，其值可为\"\",\"h\",\"v\" ,分别表示未拖动状态，横向拖动状态，纵向拖动状态，用于鼠标移动过程中的判断\n        onBorder = false, //检测鼠标按下时是否处在单元格边缘位置\n        dragButton = null,\n        dragOver = false,\n        dragLine = null, //模拟的拖动线\n        dragTd = null; //发生拖动的目标td\n\n    var mousedown = false,\n        //todo 判断混乱模式\n        needIEHack = true;\n\n    me.setOpt({\n        maxColNum: 20,\n        maxRowNum: 100,\n        defaultCols: 5,\n        defaultRows: 5,\n        tdvalign: \"top\",\n        cursorpath: me.options.UEDITOR_HOME_URL + \"themes/default/images/cursor_\",\n        tableDragable: false,\n        classList: [\n            \"ue-table-interlace-color-single\",\n            \"ue-table-interlace-color-double\"\n        ]\n    });\n    me.getUETable = getUETable;\n    var commands = {\n        deletetable: 1,\n        inserttable: 1,\n        cellvalign: 1,\n        insertcaption: 1,\n        deletecaption: 1,\n        inserttitle: 1,\n        deletetitle: 1,\n        mergeright: 1,\n        mergedown: 1,\n        mergecells: 1,\n        insertrow: 1,\n        insertrownext: 1,\n        deleterow: 1,\n        insertcol: 1,\n        insertcolnext: 1,\n        deletecol: 1,\n        splittocells: 1,\n        splittorows: 1,\n        splittocols: 1,\n        adaptbytext: 1,\n        adaptbywindow: 1,\n        adaptbycustomer: 1,\n        insertparagraph: 1,\n        insertparagraphbeforetable: 1,\n        averagedistributecol: 1,\n        averagedistributerow: 1\n    };\n    me.ready(function () {\n        utils.cssRule(\n            \"table\",\n            //选中的td上的样式\n            \".selectTdClass{background-color:#edf5fa !important}\" +\n            \"table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}\" +\n            //插入的表格的默认样式\n            \"table{margin-bottom:10px;border-collapse:collapse;display:table;}\" +\n            \"td,th{padding: 5px 10px;border: 1px solid #DDD;}\" +\n            \"caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}\" +\n            \"th{border-top:1px solid #BBB;background-color:#F7F7F7;}\" +\n            \"table tr.firstRow th{border-top-width:2px;}\" +\n            \".ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }\" +\n            \"td p{margin:0;padding:0;}\",\n            me.document\n        );\n\n        var tableCopyList, isFullCol, isFullRow;\n        //注册del/backspace事件\n        me.addListener(\"keydown\", function (cmd, evt) {\n            var me = this;\n            var keyCode = evt.keyCode || evt.which;\n\n            if (keyCode == 8) {\n                var ut = getUETableBySelected(me);\n                if (ut && ut.selectedTds.length) {\n                    if (ut.isFullCol()) {\n                        me.execCommand(\"deletecol\");\n                    } else if (ut.isFullRow()) {\n                        me.execCommand(\"deleterow\");\n                    } else {\n                        me.fireEvent(\"delcells\");\n                    }\n                    domUtils.preventDefault(evt);\n                }\n\n                var caption = domUtils.findParentByTagName(\n                    me.selection.getStart(),\n                    \"caption\",\n                    true\n                    ),\n                    range = me.selection.getRange();\n                if (range.collapsed && caption && isEmptyBlock(caption)) {\n                    me.fireEvent(\"saveScene\");\n                    var table = caption.parentNode;\n                    domUtils.remove(caption);\n                    if (table) {\n                        range.setStart(table.rows[0].cells[0], 0).setCursor(false, true);\n                    }\n                    me.fireEvent(\"saveScene\");\n                }\n            }\n\n            if (keyCode == 46) {\n                ut = getUETableBySelected(me);\n                if (ut) {\n                    me.fireEvent(\"saveScene\");\n                    for (var i = 0, ci; (ci = ut.selectedTds[i++]);) {\n                        domUtils.fillNode(me.document, ci);\n                    }\n                    me.fireEvent(\"saveScene\");\n                    domUtils.preventDefault(evt);\n                }\n            }\n            if (keyCode == 13) {\n                var rng = me.selection.getRange(),\n                    caption = domUtils.findParentByTagName(\n                        rng.startContainer,\n                        \"caption\",\n                        true\n                    );\n                if (caption) {\n                    var table = domUtils.findParentByTagName(caption, \"table\");\n                    if (!rng.collapsed) {\n                        rng.deleteContents();\n                        me.fireEvent(\"saveScene\");\n                    } else {\n                        if (caption) {\n                            rng.setStart(table.rows[0].cells[0], 0).setCursor(false, true);\n                        }\n                    }\n                    domUtils.preventDefault(evt);\n                    return;\n                }\n                if (rng.collapsed) {\n                    var table = domUtils.findParentByTagName(rng.startContainer, \"table\");\n                    if (table) {\n                        var cell = table.rows[0].cells[0],\n                            start = domUtils.findParentByTagName(\n                                me.selection.getStart(),\n                                [\"td\", \"th\"],\n                                true\n                            ),\n                            preNode = table.previousSibling;\n                        if (\n                            cell === start &&\n                            (!preNode ||\n                                (preNode.nodeType == 1 && preNode.tagName == \"TABLE\")) &&\n                            domUtils.isStartInblock(rng)\n                        ) {\n                            var first = domUtils.findParent(\n                                me.selection.getStart(),\n                                function (n) {\n                                    return domUtils.isBlockElm(n);\n                                },\n                                true\n                            );\n                            if (\n                                first &&\n                                (/t(h|d)/i.test(first.tagName) || first === start.firstChild)\n                            ) {\n                                me.execCommand(\"insertparagraphbeforetable\");\n                                domUtils.preventDefault(evt);\n                            }\n                        }\n                    }\n                }\n            }\n\n            if ((evt.ctrlKey || evt.metaKey) && evt.keyCode == \"67\") {\n                tableCopyList = null;\n                var ut = getUETableBySelected(me);\n                if (ut) {\n                    var tds = ut.selectedTds;\n                    isFullCol = ut.isFullCol();\n                    isFullRow = ut.isFullRow();\n                    tableCopyList = [[ut.cloneCell(tds[0], null, true)]];\n                    for (var i = 1, ci; (ci = tds[i]); i++) {\n                        if (ci.parentNode !== tds[i - 1].parentNode) {\n                            tableCopyList.push([ut.cloneCell(ci, null, true)]);\n                        } else {\n                            tableCopyList[tableCopyList.length - 1].push(\n                                ut.cloneCell(ci, null, true)\n                            );\n                        }\n                    }\n                }\n            }\n        });\n        me.addListener(\"tablehasdeleted\", function () {\n            toggleDraggableState(this, false, \"\", null);\n            if (dragButton) domUtils.remove(dragButton);\n        });\n\n        me.addListener(\"beforepaste\", function (cmd, html) {\n            var me = this;\n            var rng = me.selection.getRange();\n            if (domUtils.findParentByTagName(rng.startContainer, \"caption\", true)) {\n                var div = me.document.createElement(\"div\");\n                div.innerHTML = html.html;\n                //trace:3729\n                html.html = div[browser.ie9below ? \"innerText\" : \"textContent\"];\n                return;\n            }\n            var table = getUETableBySelected(me);\n            if (tableCopyList) {\n                me.fireEvent(\"saveScene\");\n                var rng = me.selection.getRange();\n                var td = domUtils.findParentByTagName(\n                    rng.startContainer,\n                    [\"td\", \"th\"],\n                    true\n                    ),\n                    tmpNode,\n                    preNode;\n                if (td) {\n                    var ut = getUETable(td);\n                    if (isFullRow) {\n                        var rowIndex = ut.getCellInfo(td).rowIndex;\n                        if (td.tagName == \"TH\") {\n                            rowIndex++;\n                        }\n                        for (var i = 0, ci; (ci = tableCopyList[i++]);) {\n                            var tr = ut.insertRow(rowIndex++, \"td\");\n                            for (var j = 0, cj; (cj = ci[j]); j++) {\n                                var cell = tr.cells[j];\n                                if (!cell) {\n                                    cell = tr.insertCell(j);\n                                }\n                                cell.innerHTML = cj.innerHTML;\n                                cj.getAttribute(\"width\") &&\n                                cell.setAttribute(\"width\", cj.getAttribute(\"width\"));\n                                cj.getAttribute(\"vAlign\") &&\n                                cell.setAttribute(\"vAlign\", cj.getAttribute(\"vAlign\"));\n                                cj.getAttribute(\"align\") &&\n                                cell.setAttribute(\"align\", cj.getAttribute(\"align\"));\n                                cj.style.cssText && (cell.style.cssText = cj.style.cssText);\n                            }\n                            for (var j = 0, cj; (cj = tr.cells[j]); j++) {\n                                if (!ci[j]) break;\n                                cj.innerHTML = ci[j].innerHTML;\n                                ci[j].getAttribute(\"width\") &&\n                                cj.setAttribute(\"width\", ci[j].getAttribute(\"width\"));\n                                ci[j].getAttribute(\"vAlign\") &&\n                                cj.setAttribute(\"vAlign\", ci[j].getAttribute(\"vAlign\"));\n                                ci[j].getAttribute(\"align\") &&\n                                cj.setAttribute(\"align\", ci[j].getAttribute(\"align\"));\n                                ci[j].style.cssText && (cj.style.cssText = ci[j].style.cssText);\n                            }\n                        }\n                    } else {\n                        if (isFullCol) {\n                            cellInfo = ut.getCellInfo(td);\n                            var maxColNum = 0;\n                            for (var j = 0, ci = tableCopyList[0], cj; (cj = ci[j++]);) {\n                                maxColNum += cj.colSpan || 1;\n                            }\n                            me.__hasEnterExecCommand = true;\n                            for (i = 0; i < maxColNum; i++) {\n                                me.execCommand(\"insertcol\");\n                            }\n                            me.__hasEnterExecCommand = false;\n                            td = ut.table.rows[0].cells[cellInfo.cellIndex];\n                            if (td.tagName == \"TH\") {\n                                td = ut.table.rows[1].cells[cellInfo.cellIndex];\n                            }\n                        }\n                        for (var i = 0, ci; (ci = tableCopyList[i++]);) {\n                            tmpNode = td;\n                            for (var j = 0, cj; (cj = ci[j++]);) {\n                                if (td) {\n                                    td.innerHTML = cj.innerHTML;\n                                    //todo 定制处理\n                                    cj.getAttribute(\"width\") &&\n                                    td.setAttribute(\"width\", cj.getAttribute(\"width\"));\n                                    cj.getAttribute(\"vAlign\") &&\n                                    td.setAttribute(\"vAlign\", cj.getAttribute(\"vAlign\"));\n                                    cj.getAttribute(\"align\") &&\n                                    td.setAttribute(\"align\", cj.getAttribute(\"align\"));\n                                    cj.style.cssText && (td.style.cssText = cj.style.cssText);\n                                    preNode = td;\n                                    td = td.nextSibling;\n                                } else {\n                                    var cloneTd = cj.cloneNode(true);\n                                    domUtils.removeAttributes(cloneTd, [\n                                        \"class\",\n                                        \"rowSpan\",\n                                        \"colSpan\"\n                                    ]);\n\n                                    preNode.parentNode.appendChild(cloneTd);\n                                }\n                            }\n                            td = ut.getNextCell(tmpNode, true, true);\n                            if (!tableCopyList[i]) break;\n                            if (!td) {\n                                var cellInfo = ut.getCellInfo(tmpNode);\n                                ut.table.insertRow(ut.table.rows.length);\n                                ut.update();\n                                td = ut.getVSideCell(tmpNode, true);\n                            }\n                        }\n                    }\n                    ut.update();\n                } else {\n                    table = me.document.createElement(\"table\");\n                    for (var i = 0, ci; (ci = tableCopyList[i++]);) {\n                        var tr = table.insertRow(table.rows.length);\n                        for (var j = 0, cj; (cj = ci[j++]);) {\n                            cloneTd = UT.cloneCell(cj, null, true);\n                            domUtils.removeAttributes(cloneTd, [\"class\"]);\n                            tr.appendChild(cloneTd);\n                        }\n                        if (j == 2 && cloneTd.rowSpan > 1) {\n                            cloneTd.rowSpan = 1;\n                        }\n                    }\n\n                    var defaultValue = getDefaultValue(me),\n                        width =\n                            me.body.offsetWidth -\n                            (needIEHack\n                                ? parseInt(\n                                domUtils.getComputedStyle(me.body, \"margin-left\"),\n                                10\n                            ) * 2\n                                : 0) -\n                            defaultValue.tableBorder * 2 -\n                            (me.options.offsetWidth || 0);\n                    me.execCommand(\n                        \"insertHTML\",\n                        \"<table  \" +\n                        (isFullCol && isFullRow ? 'width=\"' + width + '\"' : \"\") +\n                        \">\" +\n                        table.innerHTML\n                            .replace(/>\\s*</g, \"><\")\n                            .replace(/\\bth\\b/gi, \"td\") +\n                        \"</table>\"\n                    );\n                }\n                me.fireEvent(\"contentchange\");\n                me.fireEvent(\"saveScene\");\n                html.html = \"\";\n                return true;\n            } else {\n                var div = me.document.createElement(\"div\"),\n                    tables;\n                div.innerHTML = html.html;\n                tables = div.getElementsByTagName(\"table\");\n                if (domUtils.findParentByTagName(me.selection.getStart(), \"table\")) {\n                    utils.each(tables, function (t) {\n                        domUtils.remove(t);\n                    });\n                    if (\n                        domUtils.findParentByTagName(\n                            me.selection.getStart(),\n                            \"caption\",\n                            true\n                        )\n                    ) {\n                        div.innerHTML = div[browser.ie ? \"innerText\" : \"textContent\"];\n                    }\n                } else {\n                    utils.each(tables, function (table) {\n                        removeStyleSize(table, true);\n                        domUtils.removeAttributes(table, [\"style\", \"border\"]);\n                        utils.each(domUtils.getElementsByTagName(table, \"td\"), function (\n                            td\n                        ) {\n                            if (isEmptyBlock(td)) {\n                                domUtils.fillNode(me.document, td);\n                            }\n                            removeStyleSize(td, true);\n                            //                            domUtils.removeAttributes(td, ['style'])\n                        });\n                    });\n                }\n                html.html = div.innerHTML;\n            }\n        });\n\n        me.addListener(\"afterpaste\", function () {\n            utils.each(domUtils.getElementsByTagName(me.body, \"table\"), function (\n                table\n            ) {\n                if (table.offsetWidth > me.body.offsetWidth) {\n                    var defaultValue = getDefaultValue(me, table);\n                    table.style.width =\n                        me.body.offsetWidth -\n                        (needIEHack\n                            ? parseInt(\n                            domUtils.getComputedStyle(me.body, \"margin-left\"),\n                            10\n                        ) * 2\n                            : 0) -\n                        defaultValue.tableBorder * 2 -\n                        (me.options.offsetWidth || 0) +\n                        \"px\";\n                }\n            });\n        });\n        me.addListener(\"blur\", function () {\n            tableCopyList = null;\n        });\n        var timer;\n        me.addListener(\"keydown\", function () {\n            clearTimeout(timer);\n            timer = setTimeout(function () {\n                var rng = me.selection.getRange(),\n                    cell = domUtils.findParentByTagName(\n                        rng.startContainer,\n                        [\"th\", \"td\"],\n                        true\n                    );\n                if (cell) {\n                    var table = cell.parentNode.parentNode.parentNode;\n                    if (table.offsetWidth > table.getAttribute(\"width\")) {\n                        cell.style.wordBreak = \"break-all\";\n                    }\n                }\n            }, 100);\n        });\n        me.addListener(\"selectionchange\", function () {\n            toggleDraggableState(me, false, \"\", null);\n        });\n\n        //内容变化时触发索引更新\n        //todo 可否考虑标记检测，如果不涉及表格的变化就不进行索引重建和更新\n        me.addListener(\"contentchange\", function () {\n            var me = this;\n            //尽可能排除一些不需要更新的状况\n            hideDragLine(me);\n            if (getUETableBySelected(me)) return;\n            var rng = me.selection.getRange();\n            var start = rng.startContainer;\n            start = domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n            utils.each(domUtils.getElementsByTagName(me.document, \"table\"), function (\n                table\n            ) {\n                if (me.fireEvent(\"excludetable\", table) === true) return;\n                table.ueTable = new UT(table);\n                //trace:3742\n                //                utils.each(domUtils.getElementsByTagName(me.document, 'td'), function (td) {\n                //\n                //                    if (domUtils.isEmptyBlock(td) && td !== start) {\n                //                        domUtils.fillNode(me.document, td);\n                //                        if (browser.ie && browser.version == 6) {\n                //                            td.innerHTML = '&nbsp;'\n                //                        }\n                //                    }\n                //                });\n                //                utils.each(domUtils.getElementsByTagName(me.document, 'th'), function (th) {\n                //                    if (domUtils.isEmptyBlock(th) && th !== start) {\n                //                        domUtils.fillNode(me.document, th);\n                //                        if (browser.ie && browser.version == 6) {\n                //                            th.innerHTML = '&nbsp;'\n                //                        }\n                //                    }\n                //                });\n                table.onmouseover = function () {\n                    me.fireEvent(\"tablemouseover\", table);\n                };\n                table.onmousemove = function () {\n                    me.fireEvent(\"tablemousemove\", table);\n                    me.options.tableDragable && toggleDragButton(true, this, me);\n                    utils.defer(function () {\n                        me.fireEvent(\"contentchange\", 50);\n                    }, true);\n                };\n                table.onmouseout = function () {\n                    me.fireEvent(\"tablemouseout\", table);\n                    toggleDraggableState(me, false, \"\", null);\n                    hideDragLine(me);\n                };\n                table.onclick = function (evt) {\n                    evt = me.window.event || evt;\n                    var target = getParentTdOrTh(evt.target || evt.srcElement);\n                    if (!target) return;\n                    var ut = getUETable(target),\n                        table = ut.table,\n                        cellInfo = ut.getCellInfo(target),\n                        cellsRange,\n                        rng = me.selection.getRange();\n                    //                    if (\"topLeft\" == inPosition(table, mouseCoords(evt))) {\n                    //                        cellsRange = ut.getCellsRange(ut.table.rows[0].cells[0], ut.getLastCell());\n                    //                        ut.setSelected(cellsRange);\n                    //                        return;\n                    //                    }\n                    //                    if (\"bottomRight\" == inPosition(table, mouseCoords(evt))) {\n                    //\n                    //                        return;\n                    //                    }\n                    if (inTableSide(table, target, evt, true)) {\n                        var endTdCol = ut.getCell(\n                            ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].rowIndex,\n                            ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].cellIndex\n                        );\n                        if (evt.shiftKey && ut.selectedTds.length) {\n                            if (ut.selectedTds[0] !== endTdCol) {\n                                cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdCol);\n                                ut.setSelected(cellsRange);\n                            } else {\n                                rng && rng.selectNodeContents(endTdCol).select();\n                            }\n                        } else {\n                            if (target !== endTdCol) {\n                                cellsRange = ut.getCellsRange(target, endTdCol);\n                                ut.setSelected(cellsRange);\n                            } else {\n                                rng && rng.selectNodeContents(endTdCol).select();\n                            }\n                        }\n                        return;\n                    }\n                    if (inTableSide(table, target, evt)) {\n                        var endTdRow = ut.getCell(\n                            ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].rowIndex,\n                            ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].cellIndex\n                        );\n                        if (evt.shiftKey && ut.selectedTds.length) {\n                            if (ut.selectedTds[0] !== endTdRow) {\n                                cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdRow);\n                                ut.setSelected(cellsRange);\n                            } else {\n                                rng && rng.selectNodeContents(endTdRow).select();\n                            }\n                        } else {\n                            if (target !== endTdRow) {\n                                cellsRange = ut.getCellsRange(target, endTdRow);\n                                ut.setSelected(cellsRange);\n                            } else {\n                                rng && rng.selectNodeContents(endTdRow).select();\n                            }\n                        }\n                    }\n                };\n            });\n\n            switchBorderColor(me, true);\n        });\n\n        domUtils.on(me.document, \"mousemove\", mouseMoveEvent);\n\n        domUtils.on(me.document, \"mouseout\", function (evt) {\n            var target = evt.target || evt.srcElement;\n            if (target.tagName == \"TABLE\") {\n                toggleDraggableState(me, false, \"\", null);\n            }\n        });\n        /**\n         * 表格隔行变色\n         */\n        me.addListener(\"interlacetable\", function (type, table, classList) {\n            if (!table) return;\n            var me = this,\n                rows = table.rows,\n                len = rows.length,\n                getClass = function (list, index, repeat) {\n                    return list[index]\n                        ? list[index]\n                        : repeat ? list[index % list.length] : \"\";\n                };\n            for (var i = 0; i < len; i++) {\n                rows[i].className = getClass(\n                    classList || me.options.classList,\n                    i,\n                    true\n                );\n            }\n        });\n        me.addListener(\"uninterlacetable\", function (type, table) {\n            if (!table) return;\n            var me = this,\n                rows = table.rows,\n                classList = me.options.classList,\n                len = rows.length;\n            for (var i = 0; i < len; i++) {\n                domUtils.removeClasses(rows[i], classList);\n            }\n        });\n\n        me.addListener(\"mousedown\", mouseDownEvent);\n        me.addListener(\"mouseup\", mouseUpEvent);\n        //拖动的时候触发mouseup\n        domUtils.on(me.body, \"dragstart\", function (evt) {\n            mouseUpEvent.call(me, \"dragstart\", evt);\n        });\n        me.addOutputRule(function (root) {\n            utils.each(root.getNodesByTagName(\"div\"), function (n) {\n                if (n.getAttr(\"id\") == \"ue_tableDragLine\") {\n                    n.parentNode.removeChild(n);\n                }\n            });\n        });\n\n        var currentRowIndex = 0;\n        me.addListener(\"mousedown\", function () {\n            currentRowIndex = 0;\n        });\n        me.addListener(\"tabkeydown\", function () {\n            var range = this.selection.getRange(),\n                common = range.getCommonAncestor(true, true),\n                table = domUtils.findParentByTagName(common, \"table\");\n            if (table) {\n                if (domUtils.findParentByTagName(common, \"caption\", true)) {\n                    var cell = domUtils.getElementsByTagName(table, \"th td\");\n                    if (cell && cell.length) {\n                        range.setStart(cell[0], 0).setCursor(false, true);\n                    }\n                } else {\n                    var cell = domUtils.findParentByTagName(common, [\"td\", \"th\"], true),\n                        ua = getUETable(cell);\n                    currentRowIndex = cell.rowSpan > 1\n                        ? currentRowIndex\n                        : ua.getCellInfo(cell).rowIndex;\n                    var nextCell = ua.getTabNextCell(cell, currentRowIndex);\n                    if (nextCell) {\n                        if (isEmptyBlock(nextCell)) {\n                            range.setStart(nextCell, 0).setCursor(false, true);\n                        } else {\n                            range.selectNodeContents(nextCell).select();\n                        }\n                    } else {\n                        me.fireEvent(\"saveScene\");\n                        me.__hasEnterExecCommand = true;\n                        this.execCommand(\"insertrownext\");\n                        me.__hasEnterExecCommand = false;\n                        range = this.selection.getRange();\n                        range\n                            .setStart(table.rows[table.rows.length - 1].cells[0], 0)\n                            .setCursor();\n                        me.fireEvent(\"saveScene\");\n                    }\n                }\n                return true;\n            }\n        });\n        browser.ie &&\n        me.addListener(\"selectionchange\", function () {\n            toggleDraggableState(this, false, \"\", null);\n        });\n        me.addListener(\"keydown\", function (type, evt) {\n            var me = this;\n            //处理在表格的最后一个输入tab产生新的表格\n            var keyCode = evt.keyCode || evt.which;\n            if (keyCode == 8 || keyCode == 46) {\n                return;\n            }\n            var notCtrlKey =\n                !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey;\n            notCtrlKey &&\n            removeSelectedClass(domUtils.getElementsByTagName(me.body, \"td\"));\n            var ut = getUETableBySelected(me);\n            if (!ut) return;\n            notCtrlKey && ut.clearSelected();\n        });\n\n        me.addListener(\"beforegetcontent\", function () {\n            switchBorderColor(this, false);\n            browser.ie &&\n            utils.each(this.document.getElementsByTagName(\"caption\"), function (ci) {\n                if (domUtils.isEmptyNode(ci)) {\n                    ci.innerHTML = \"&nbsp;\";\n                }\n            });\n        });\n        me.addListener(\"aftergetcontent\", function () {\n            switchBorderColor(this, true);\n        });\n        me.addListener(\"getAllHtml\", function () {\n            removeSelectedClass(me.document.getElementsByTagName(\"td\"));\n        });\n        //修正全屏状态下插入的表格宽度在非全屏状态下撑开编辑器的情况\n        me.addListener(\"fullscreenchanged\", function (type, fullscreen) {\n            if (!fullscreen) {\n                var ratio = this.body.offsetWidth / document.body.offsetWidth,\n                    tables = domUtils.getElementsByTagName(this.body, \"table\");\n                utils.each(tables, function (table) {\n                    if (table.offsetWidth < me.body.offsetWidth) return false;\n                    var tds = domUtils.getElementsByTagName(table, \"td\"),\n                        backWidths = [];\n                    utils.each(tds, function (td) {\n                        backWidths.push(td.offsetWidth);\n                    });\n                    for (var i = 0, td; (td = tds[i]); i++) {\n                        td.setAttribute(\"width\", Math.floor(backWidths[i] * ratio));\n                    }\n                    table.setAttribute(\n                        \"width\",\n                        Math.floor(getTableWidth(me, needIEHack, getDefaultValue(me)))\n                    );\n                });\n            }\n        });\n\n        //重写execCommand命令，用于处理框选时的处理\n        var oldExecCommand = me.execCommand;\n        me.execCommand = function (cmd, datatat) {\n            var me = this,\n                args = arguments;\n\n            cmd = cmd.toLowerCase();\n            var ut = getUETableBySelected(me),\n                tds,\n                range = new dom.Range(me.document),\n                cmdFun = me.commands[cmd] || UE.commands[cmd],\n                result;\n            if (!cmdFun) return;\n            if (\n                ut &&\n                !commands[cmd] &&\n                !cmdFun.notNeedUndo &&\n                !me.__hasEnterExecCommand\n            ) {\n                me.__hasEnterExecCommand = true;\n                me.fireEvent(\"beforeexeccommand\", cmd);\n                tds = ut.selectedTds;\n                var lastState = -2,\n                    lastValue = -2,\n                    value,\n                    state;\n                for (var i = 0, td; (td = tds[i]); i++) {\n                    if (isEmptyBlock(td)) {\n                        range.setStart(td, 0).setCursor(false, true);\n                    } else {\n                        range.selectNode(td).select(true);\n                    }\n                    state = me.queryCommandState(cmd);\n                    value = me.queryCommandValue(cmd);\n                    if (state != -1) {\n                        if (lastState !== state || lastValue !== value) {\n                            me._ignoreContentChange = true;\n                            result = oldExecCommand.apply(me, arguments);\n                            me._ignoreContentChange = false;\n                        }\n                        lastState = me.queryCommandState(cmd);\n                        lastValue = me.queryCommandValue(cmd);\n                        if (domUtils.isEmptyBlock(td)) {\n                            domUtils.fillNode(me.document, td);\n                        }\n                    }\n                }\n                range.setStart(tds[0], 0).shrinkBoundary(true).setCursor(false, true);\n                me.fireEvent(\"contentchange\");\n                me.fireEvent(\"afterexeccommand\", cmd);\n                me.__hasEnterExecCommand = false;\n                me._selectionChange();\n            } else {\n                result = oldExecCommand.apply(me, arguments);\n            }\n            return result;\n        };\n    });\n\n    /**\n     * 删除obj的宽高style，改成属性宽高\n     * @param obj\n     * @param replaceToProperty\n     */\n    function removeStyleSize(obj, replaceToProperty) {\n        removeStyle(obj, \"width\", true);\n        removeStyle(obj, \"height\", true);\n    }\n\n    function removeStyle(obj, styleName, replaceToProperty) {\n        if (obj.style[styleName]) {\n            replaceToProperty &&\n            obj.setAttribute(styleName, parseInt(obj.style[styleName], 10));\n            obj.style[styleName] = \"\";\n        }\n    }\n\n    function getParentTdOrTh(ele) {\n        if (ele.tagName == \"TD\" || ele.tagName == \"TH\") return ele;\n        var td;\n        if (\n            (td =\n                domUtils.findParentByTagName(ele, \"td\", true) ||\n                domUtils.findParentByTagName(ele, \"th\", true))\n        )\n            return td;\n        return null;\n    }\n\n    function isEmptyBlock(node) {\n        var reg = new RegExp(domUtils.fillChar, \"g\");\n        if (\n            node[browser.ie ? \"innerText\" : \"textContent\"]\n                .replace(/^\\s*$/, \"\")\n                .replace(reg, \"\").length > 0\n        ) {\n            return 0;\n        }\n        for (var n in dtd.$isNotEmpty) {\n            if (node.getElementsByTagName(n).length) {\n                return 0;\n            }\n        }\n        return 1;\n    }\n\n    function mouseCoords(evt) {\n        if (evt.pageX || evt.pageY) {\n            return {x: evt.pageX, y: evt.pageY};\n        }\n        return {\n            x:\n                evt.clientX + me.document.body.scrollLeft - me.document.body.clientLeft,\n            y: evt.clientY + me.document.body.scrollTop - me.document.body.clientTop\n        };\n    }\n\n    function mouseMoveEvent(evt) {\n        if (isEditorDisabled()) {\n            return;\n        }\n\n        try {\n            //普通状态下鼠标移动\n            var target = getParentTdOrTh(evt.target || evt.srcElement),\n                pos;\n\n            //区分用户的行为是拖动还是双击\n            if (isInResizeBuffer) {\n                me.body.style.webkitUserSelect = \"none\";\n\n                if (\n                    Math.abs(userActionStatus.x - evt.clientX) > offsetOfTableCell ||\n                    Math.abs(userActionStatus.y - evt.clientY) > offsetOfTableCell\n                ) {\n                    clearTableDragTimer();\n                    isInResizeBuffer = false;\n                    singleClickState = 0;\n                    //drag action\n                    tableBorderDrag(evt);\n                }\n            }\n\n            //修改单元格大小时的鼠标移动\n            if (onDrag && dragTd) {\n                singleClickState = 0;\n                me.body.style.webkitUserSelect = \"none\";\n                me.selection.getNative()[\n                    browser.ie9below ? \"empty\" : \"removeAllRanges\"\n                    ]();\n                pos = mouseCoords(evt);\n                toggleDraggableState(me, true, onDrag, pos, target);\n                if (onDrag == \"h\") {\n                    dragLine.style.left = getPermissionX(dragTd, evt) + \"px\";\n                } else if (onDrag == \"v\") {\n                    dragLine.style.top = getPermissionY(dragTd, evt) + \"px\";\n                }\n                return;\n            }\n            //当鼠标处于table上时，修改移动过程中的光标状态\n            if (target) {\n                //针对使用table作为容器的组件不触发拖拽效果\n                if (me.fireEvent(\"excludetable\", target) === true) return;\n                pos = mouseCoords(evt);\n                var state = getRelation(target, pos),\n                    table = domUtils.findParentByTagName(target, \"table\", true);\n\n                if (inTableSide(table, target, evt, true)) {\n                    if (me.fireEvent(\"excludetable\", table) === true) return;\n                    me.body.style.cursor =\n                        \"url(\" + me.options.cursorpath + \"h.png),pointer\";\n                } else if (inTableSide(table, target, evt)) {\n                    if (me.fireEvent(\"excludetable\", table) === true) return;\n                    me.body.style.cursor =\n                        \"url(\" + me.options.cursorpath + \"v.png),pointer\";\n                } else {\n                    me.body.style.cursor = \"text\";\n                    var curCell = target;\n                    if (/\\d/.test(state)) {\n                        state = state.replace(/\\d/, \"\");\n                        target = getUETable(target).getPreviewCell(target, state == \"v\");\n                    }\n                    //位于第一行的顶部或者第一列的左边时不可拖动\n                    toggleDraggableState(\n                        me,\n                        target ? !!state : false,\n                        target ? state : \"\",\n                        pos,\n                        target\n                    );\n                }\n            } else {\n                toggleDragButton(false, table, me);\n            }\n        } catch (e) {\n            showError(e);\n        }\n    }\n\n    var dragButtonTimer;\n\n    function toggleDragButton(show, table, editor) {\n        if (!show) {\n            if (dragOver) return;\n            dragButtonTimer = setTimeout(function () {\n                !dragOver &&\n                dragButton &&\n                dragButton.parentNode &&\n                dragButton.parentNode.removeChild(dragButton);\n            }, 2000);\n        } else {\n            createDragButton(table, editor);\n        }\n    }\n\n    function createDragButton(table, editor) {\n        var pos = domUtils.getXY(table),\n            doc = table.ownerDocument;\n        if (dragButton && dragButton.parentNode) return dragButton;\n        dragButton = doc.createElement(\"div\");\n        dragButton.contentEditable = false;\n        dragButton.innerHTML = \"\";\n        dragButton.style.cssText =\n            \"width:15px;height:15px;background-image:url(\" +\n            editor.options.UEDITOR_HOME_URL +\n            \"dialogs/table/dragicon.png);position: absolute;cursor:move;top:\" +\n            (pos.y - 15) +\n            \"px;left:\" +\n            pos.x +\n            \"px;\";\n        domUtils.unSelectable(dragButton);\n        dragButton.onmouseover = function (evt) {\n            dragOver = true;\n        };\n        dragButton.onmouseout = function (evt) {\n            dragOver = false;\n        };\n        domUtils.on(dragButton, \"click\", function (type, evt) {\n            doClick(evt, this);\n        });\n        domUtils.on(dragButton, \"dblclick\", function (type, evt) {\n            doDblClick(evt);\n        });\n        domUtils.on(dragButton, \"dragstart\", function (type, evt) {\n            domUtils.preventDefault(evt);\n        });\n        var timer;\n\n        function doClick(evt, button) {\n            // 部分浏览器下需要清理\n            clearTimeout(timer);\n            timer = setTimeout(function () {\n                editor.fireEvent(\"tableClicked\", table, button);\n            }, 300);\n        }\n\n        function doDblClick(evt) {\n            clearTimeout(timer);\n            var ut = getUETable(table),\n                start = table.rows[0].cells[0],\n                end = ut.getLastCell(),\n                range = ut.getCellsRange(start, end);\n            editor.selection.getRange().setStart(start, 0).setCursor(false, true);\n            ut.setSelected(range);\n        }\n\n        doc.body.appendChild(dragButton);\n    }\n\n    //    function inPosition(table, pos) {\n    //        var tablePos = domUtils.getXY(table),\n    //            width = table.offsetWidth,\n    //            height = table.offsetHeight;\n    //        if (pos.x - tablePos.x < 5 && pos.y - tablePos.y < 5) {\n    //            return \"topLeft\";\n    //        } else if (tablePos.x + width - pos.x < 5 && tablePos.y + height - pos.y < 5) {\n    //            return \"bottomRight\";\n    //        }\n    //    }\n\n    function inTableSide(table, cell, evt, top) {\n        var pos = mouseCoords(evt),\n            state = getRelation(cell, pos);\n\n        if (top) {\n            var caption = table.getElementsByTagName(\"caption\")[0],\n                capHeight = caption ? caption.offsetHeight : 0;\n            return state == \"v1\" && pos.y - domUtils.getXY(table).y - capHeight < 8;\n        } else {\n            return state == \"h1\" && pos.x - domUtils.getXY(table).x < 8;\n        }\n    }\n\n    /**\n     * 获取拖动时允许的X轴坐标\n     * @param dragTd\n     * @param evt\n     */\n    function getPermissionX(dragTd, evt) {\n        var ut = getUETable(dragTd);\n        if (ut) {\n            var preTd = ut.getSameEndPosCells(dragTd, \"x\")[0],\n                nextTd = ut.getSameStartPosXCells(dragTd)[0],\n                mouseX = mouseCoords(evt).x,\n                left =\n                    (preTd ? domUtils.getXY(preTd).x : domUtils.getXY(ut.table).x) + 20,\n                right = nextTd\n                    ? domUtils.getXY(nextTd).x + nextTd.offsetWidth - 20\n                    : me.body.offsetWidth + 5 ||\n                    parseInt(domUtils.getComputedStyle(me.body, \"width\"), 10);\n\n            left += cellMinWidth;\n            right -= cellMinWidth;\n\n            return mouseX < left ? left : mouseX > right ? right : mouseX;\n        }\n    }\n\n    /**\n     * 获取拖动时允许的Y轴坐标\n     */\n    function getPermissionY(dragTd, evt) {\n        try {\n            var top = domUtils.getXY(dragTd).y,\n                mousePosY = mouseCoords(evt).y;\n            return mousePosY < top ? top : mousePosY;\n        } catch (e) {\n            showError(e);\n        }\n    }\n\n    /**\n     * 移动状态切换\n     */\n    function toggleDraggableState(editor, draggable, dir, mousePos, cell) {\n        try {\n            editor.body.style.cursor = dir == \"h\"\n                ? \"col-resize\"\n                : dir == \"v\" ? \"row-resize\" : \"text\";\n            if (browser.ie) {\n                if (dir && !mousedown && !getUETableBySelected(editor)) {\n                    getDragLine(editor, editor.document);\n                    showDragLineAt(dir, cell);\n                } else {\n                    hideDragLine(editor);\n                }\n            }\n            onBorder = draggable;\n        } catch (e) {\n            showError(e);\n        }\n    }\n\n    /**\n     * 获取与UETable相关的resize line\n     * @param uetable UETable对象\n     */\n    function getResizeLineByUETable() {\n        var lineId = \"_UETableResizeLine\",\n            line = this.document.getElementById(lineId);\n\n        if (!line) {\n            line = this.document.createElement(\"div\");\n            line.id = lineId;\n            line.contnetEditable = false;\n            line.setAttribute(\"unselectable\", \"on\");\n\n            var styles = {\n                width: 2 * cellBorderWidth + 1 + \"px\",\n                position: \"absolute\",\n                \"z-index\": 100000,\n                cursor: \"col-resize\",\n                background: \"red\",\n                display: \"none\"\n            };\n\n            //切换状态\n            line.onmouseout = function () {\n                this.style.display = \"none\";\n            };\n\n            utils.extend(line.style, styles);\n\n            this.document.body.appendChild(line);\n        }\n\n        return line;\n    }\n\n    /**\n     * 更新resize-line\n     */\n    function updateResizeLine(cell, uetable) {\n        var line = getResizeLineByUETable.call(this),\n            table = uetable.table,\n            styles = {\n                top: domUtils.getXY(table).y + \"px\",\n                left:\n                    domUtils.getXY(cell).x + cell.offsetWidth - cellBorderWidth + \"px\",\n                display: \"block\",\n                height: table.offsetHeight + \"px\"\n            };\n\n        utils.extend(line.style, styles);\n    }\n\n    /**\n     * 显示resize-line\n     */\n    function showResizeLine(cell) {\n        var uetable = getUETable(cell);\n\n        updateResizeLine.call(this, cell, uetable);\n    }\n\n    /**\n     * 获取鼠标与当前单元格的相对位置\n     * @param ele\n     * @param mousePos\n     */\n    function getRelation(ele, mousePos) {\n        var elePos = domUtils.getXY(ele);\n\n        if (!elePos) {\n            return \"\";\n        }\n\n        if (elePos.x + ele.offsetWidth - mousePos.x < cellBorderWidth) {\n            return \"h\";\n        }\n        if (mousePos.x - elePos.x < cellBorderWidth) {\n            return \"h1\";\n        }\n        if (elePos.y + ele.offsetHeight - mousePos.y < cellBorderWidth) {\n            return \"v\";\n        }\n        if (mousePos.y - elePos.y < cellBorderWidth) {\n            return \"v1\";\n        }\n        return \"\";\n    }\n\n    function mouseDownEvent(type, evt) {\n        if (isEditorDisabled()) {\n            return;\n        }\n\n        userActionStatus = {\n            x: evt.clientX,\n            y: evt.clientY\n        };\n\n        //右键菜单单独处理\n        if (evt.button == 2) {\n            var ut = getUETableBySelected(me),\n                flag = false;\n\n            if (ut) {\n                var td = getTargetTd(me, evt);\n                utils.each(ut.selectedTds, function (ti) {\n                    if (ti === td) {\n                        flag = true;\n                    }\n                });\n                if (!flag) {\n                    removeSelectedClass(domUtils.getElementsByTagName(me.body, \"th td\"));\n                    ut.clearSelected();\n                } else {\n                    td = ut.selectedTds[0];\n                    setTimeout(function () {\n                        me.selection.getRange().setStart(td, 0).setCursor(false, true);\n                    }, 0);\n                }\n            }\n        } else {\n            tableClickHander(evt);\n        }\n    }\n\n    //清除表格的计时器\n    function clearTableTimer() {\n        tabTimer && clearTimeout(tabTimer);\n        tabTimer = null;\n    }\n\n    //双击收缩\n    function tableDbclickHandler(evt) {\n        singleClickState = 0;\n        evt = evt || me.window.event;\n        var target = getParentTdOrTh(evt.target || evt.srcElement);\n        if (target) {\n            var h;\n            if ((h = getRelation(target, mouseCoords(evt)))) {\n                hideDragLine(me);\n\n                if (h == \"h1\") {\n                    h = \"h\";\n                    if (\n                        inTableSide(\n                            domUtils.findParentByTagName(target, \"table\"),\n                            target,\n                            evt\n                        )\n                    ) {\n                        me.execCommand(\"adaptbywindow\");\n                    } else {\n                        target = getUETable(target).getPreviewCell(target);\n                        if (target) {\n                            var rng = me.selection.getRange();\n                            rng.selectNodeContents(target).setCursor(true, true);\n                        }\n                    }\n                }\n                if (h == \"h\") {\n                    var ut = getUETable(target),\n                        table = ut.table,\n                        cells = getCellsByMoveBorder(target, table, true);\n\n                    cells = extractArray(cells, \"left\");\n\n                    ut.width = ut.offsetWidth;\n\n                    var oldWidth = [],\n                        newWidth = [];\n\n                    utils.each(cells, function (cell) {\n                        oldWidth.push(cell.offsetWidth);\n                    });\n\n                    utils.each(cells, function (cell) {\n                        cell.removeAttribute(\"width\");\n                    });\n\n                    window.setTimeout(function () {\n                        //是否允许改变\n                        var changeable = true;\n\n                        utils.each(cells, function (cell, index) {\n                            var width = cell.offsetWidth;\n\n                            if (width > oldWidth[index]) {\n                                changeable = false;\n                                return false;\n                            }\n\n                            newWidth.push(width);\n                        });\n\n                        var change = changeable ? newWidth : oldWidth;\n\n                        utils.each(cells, function (cell, index) {\n                            cell.width = change[index] - getTabcellSpace();\n                        });\n                    }, 0);\n\n                    //                    minWidth -= cellMinWidth;\n                    //\n                    //                    table.removeAttribute(\"width\");\n                    //                    utils.each(cells, function (cell) {\n                    //                        cell.style.width = \"\";\n                    //                        cell.width -= minWidth;\n                    //                    });\n                }\n            }\n        }\n    }\n\n    function tableClickHander(evt) {\n        removeSelectedClass(domUtils.getElementsByTagName(me.body, \"td th\"));\n        //trace:3113\n        //选中单元格，点击table外部，不会清掉table上挂的ueTable,会引起getUETableBySelected方法返回值\n        utils.each(me.document.getElementsByTagName(\"table\"), function (t) {\n            t.ueTable = null;\n        });\n        startTd = getTargetTd(me, evt);\n        if (!startTd) return;\n        var table = domUtils.findParentByTagName(startTd, \"table\", true);\n        ut = getUETable(table);\n        ut && ut.clearSelected();\n\n        //判断当前鼠标状态\n        if (!onBorder) {\n            me.document.body.style.webkitUserSelect = \"\";\n            mousedown = true;\n            me.addListener(\"mouseover\", mouseOverEvent);\n        } else {\n            //边框上的动作处理\n            borderActionHandler(evt);\n        }\n    }\n\n    //处理表格边框上的动作, 这里做延时处理，避免两种动作互相影响\n    function borderActionHandler(evt) {\n        if (browser.ie) {\n            evt = reconstruct(evt);\n        }\n\n        clearTableDragTimer();\n\n        //是否正在等待resize的缓冲中\n        isInResizeBuffer = true;\n\n        tableDragTimer = setTimeout(function () {\n            tableBorderDrag(evt);\n        }, dblclickTime);\n    }\n\n    function extractArray(originArr, key) {\n        var result = [],\n            tmp = null;\n\n        for (var i = 0, len = originArr.length; i < len; i++) {\n            tmp = originArr[i][key];\n\n            if (tmp) {\n                result.push(tmp);\n            }\n        }\n\n        return result;\n    }\n\n    function clearTableDragTimer() {\n        tableDragTimer && clearTimeout(tableDragTimer);\n        tableDragTimer = null;\n    }\n\n    function reconstruct(obj) {\n        var attrs = [\n                \"pageX\",\n                \"pageY\",\n                \"clientX\",\n                \"clientY\",\n                \"srcElement\",\n                \"target\"\n            ],\n            newObj = {};\n\n        if (obj) {\n            for (var i = 0, key, val; (key = attrs[i]); i++) {\n                val = obj[key];\n                val && (newObj[key] = val);\n            }\n        }\n\n        return newObj;\n    }\n\n    //边框拖动\n    function tableBorderDrag(evt) {\n        isInResizeBuffer = false;\n\n        startTd = evt.target || evt.srcElement;\n        if (!startTd) return;\n        var state = getRelation(startTd, mouseCoords(evt));\n        if (/\\d/.test(state)) {\n            state = state.replace(/\\d/, \"\");\n            startTd = getUETable(startTd).getPreviewCell(startTd, state == \"v\");\n        }\n        hideDragLine(me);\n        getDragLine(me, me.document);\n        me.fireEvent(\"saveScene\");\n        showDragLineAt(state, startTd);\n        mousedown = true;\n        //拖动开始\n        onDrag = state;\n        dragTd = startTd;\n    }\n\n    function mouseUpEvent(type, evt) {\n        if (isEditorDisabled()) {\n            return;\n        }\n\n        clearTableDragTimer();\n\n        isInResizeBuffer = false;\n\n        if (onBorder) {\n            singleClickState = ++singleClickState % 3;\n\n            userActionStatus = {\n                x: evt.clientX,\n                y: evt.clientY\n            };\n\n            tableResizeTimer = setTimeout(function () {\n                singleClickState > 0 && singleClickState--;\n            }, dblclickTime);\n\n            if (singleClickState === 2) {\n                singleClickState = 0;\n                tableDbclickHandler(evt);\n                return;\n            }\n        }\n\n        if (evt.button == 2) return;\n        var me = this;\n        //清除表格上原生跨选问题\n        var range = me.selection.getRange(),\n            start = domUtils.findParentByTagName(range.startContainer, \"table\", true),\n            end = domUtils.findParentByTagName(range.endContainer, \"table\", true);\n\n        if (start || end) {\n            if (start === end) {\n                start = domUtils.findParentByTagName(\n                    range.startContainer,\n                    [\"td\", \"th\", \"caption\"],\n                    true\n                );\n                end = domUtils.findParentByTagName(\n                    range.endContainer,\n                    [\"td\", \"th\", \"caption\"],\n                    true\n                );\n                if (start !== end) {\n                    me.selection.clearRange();\n                }\n            } else {\n                me.selection.clearRange();\n            }\n        }\n        mousedown = false;\n        me.document.body.style.webkitUserSelect = \"\";\n        //拖拽状态下的mouseUP\n        if (onDrag && dragTd) {\n            me.selection.getNative()[\n                browser.ie9below ? \"empty\" : \"removeAllRanges\"\n                ]();\n\n            singleClickState = 0;\n            dragLine = me.document.getElementById(\"ue_tableDragLine\");\n\n            // trace 3973\n            if (dragLine) {\n                var dragTdPos = domUtils.getXY(dragTd),\n                    dragLinePos = domUtils.getXY(dragLine);\n\n                switch (onDrag) {\n                    case \"h\":\n                        changeColWidth(dragTd, dragLinePos.x - dragTdPos.x);\n                        break;\n                    case \"v\":\n                        changeRowHeight(\n                            dragTd,\n                            dragLinePos.y - dragTdPos.y - dragTd.offsetHeight\n                        );\n                        break;\n                    default:\n                }\n                onDrag = \"\";\n                dragTd = null;\n\n                hideDragLine(me);\n                me.fireEvent(\"saveScene\");\n                return;\n            }\n        }\n        //正常状态下的mouseup\n        if (!startTd) {\n            var target = domUtils.findParentByTagName(\n                evt.target || evt.srcElement,\n                \"td\",\n                true\n            );\n            if (!target)\n                target = domUtils.findParentByTagName(\n                    evt.target || evt.srcElement,\n                    \"th\",\n                    true\n                );\n            if (target && (target.tagName == \"TD\" || target.tagName == \"TH\")) {\n                if (me.fireEvent(\"excludetable\", target) === true) return;\n                range = new dom.Range(me.document);\n                range.setStart(target, 0).setCursor(false, true);\n            }\n        } else {\n            var ut = getUETable(startTd),\n                cell = ut ? ut.selectedTds[0] : null;\n            if (cell) {\n                range = new dom.Range(me.document);\n                if (domUtils.isEmptyBlock(cell)) {\n                    range.setStart(cell, 0).setCursor(false, true);\n                } else {\n                    range\n                        .selectNodeContents(cell)\n                        .shrinkBoundary()\n                        .setCursor(false, true);\n                }\n            } else {\n                range = me.selection.getRange().shrinkBoundary();\n                if (!range.collapsed) {\n                    var start = domUtils.findParentByTagName(\n                        range.startContainer,\n                        [\"td\", \"th\"],\n                        true\n                        ),\n                        end = domUtils.findParentByTagName(\n                            range.endContainer,\n                            [\"td\", \"th\"],\n                            true\n                        );\n                    //在table里边的不能清除\n                    if (\n                        (start && !end) ||\n                        (!start && end) ||\n                        (start && end && start !== end)\n                    ) {\n                        range.setCursor(false, true);\n                    }\n                }\n            }\n            startTd = null;\n            me.removeListener(\"mouseover\", mouseOverEvent);\n        }\n        me._selectionChange(250, evt);\n    }\n\n    function mouseOverEvent(type, evt) {\n        if (isEditorDisabled()) {\n            return;\n        }\n\n        var me = this,\n            tar = evt.target || evt.srcElement;\n        currentTd =\n            domUtils.findParentByTagName(tar, \"td\", true) ||\n            domUtils.findParentByTagName(tar, \"th\", true);\n        //需要判断两个TD是否位于同一个表格内\n        if (\n            startTd &&\n            currentTd &&\n            ((startTd.tagName == \"TD\" && currentTd.tagName == \"TD\") ||\n                (startTd.tagName == \"TH\" && currentTd.tagName == \"TH\")) &&\n            domUtils.findParentByTagName(startTd, \"table\") ==\n            domUtils.findParentByTagName(currentTd, \"table\")\n        ) {\n            var ut = getUETable(currentTd);\n            if (startTd != currentTd) {\n                me.document.body.style.webkitUserSelect = \"none\";\n                me.selection.getNative()[\n                    browser.ie9below ? \"empty\" : \"removeAllRanges\"\n                    ]();\n                var range = ut.getCellsRange(startTd, currentTd);\n                ut.setSelected(range);\n            } else {\n                me.document.body.style.webkitUserSelect = \"\";\n                ut.clearSelected();\n            }\n        }\n        evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);\n    }\n\n    function setCellHeight(cell, height, backHeight) {\n        var lineHight = parseInt(\n            domUtils.getComputedStyle(cell, \"line-height\"),\n            10\n            ),\n            tmpHeight = backHeight + height;\n        height = tmpHeight < lineHight ? lineHight : tmpHeight;\n        if (cell.style.height) cell.style.height = \"\";\n        cell.rowSpan == 1\n            ? cell.setAttribute(\"height\", height)\n            : cell.removeAttribute && cell.removeAttribute(\"height\");\n    }\n\n    function getWidth(cell) {\n        if (!cell) return 0;\n        return parseInt(domUtils.getComputedStyle(cell, \"width\"), 10);\n    }\n\n    function changeColWidth(cell, changeValue) {\n        var ut = getUETable(cell);\n        if (ut) {\n            //根据当前移动的边框获取相关的单元格\n            var table = ut.table,\n                cells = getCellsByMoveBorder(cell, table);\n\n            table.style.width = \"\";\n            table.removeAttribute(\"width\");\n\n            //修正改变量\n            changeValue = correctChangeValue(changeValue, cell, cells);\n\n            if (cell.nextSibling) {\n                var i = 0;\n\n                utils.each(cells, function (cellGroup) {\n                    cellGroup.left.width = +cellGroup.left.width + changeValue;\n                    cellGroup.right &&\n                    (cellGroup.right.width = +cellGroup.right.width - changeValue);\n                });\n            } else {\n                utils.each(cells, function (cellGroup) {\n                    cellGroup.left.width -= -changeValue;\n                });\n            }\n        }\n    }\n\n    function isEditorDisabled() {\n        return me.body.contentEditable === \"false\";\n    }\n\n    function changeRowHeight(td, changeValue) {\n        if (Math.abs(changeValue) < 10) return;\n        var ut = getUETable(td);\n        if (ut) {\n            var cells = ut.getSameEndPosCells(td, \"y\"),\n                //备份需要连带变化的td的原始高度，否则后期无法获取正确的值\n                backHeight = cells[0] ? cells[0].offsetHeight : 0;\n            for (var i = 0, cell; (cell = cells[i++]);) {\n                setCellHeight(cell, changeValue, backHeight);\n            }\n        }\n    }\n\n    /**\n     * 获取调整单元格大小的相关单元格\n     * @isContainMergeCell 返回的结果中是否包含发生合并后的单元格\n     */\n    function getCellsByMoveBorder(cell, table, isContainMergeCell) {\n        if (!table) {\n            table = domUtils.findParentByTagName(cell, \"table\");\n        }\n\n        if (!table) {\n            return null;\n        }\n\n        //获取到该单元格所在行的序列号\n        var index = domUtils.getNodeIndex(cell),\n            temp = cell,\n            rows = table.rows,\n            colIndex = 0;\n\n        while (temp) {\n            //获取到当前单元格在未发生单元格合并时的序列\n            if (temp.nodeType === 1) {\n                colIndex += temp.colSpan || 1;\n            }\n            temp = temp.previousSibling;\n        }\n\n        temp = null;\n\n        //记录想关的单元格\n        var borderCells = [];\n\n        utils.each(rows, function (tabRow) {\n            var cells = tabRow.cells,\n                currIndex = 0;\n\n            utils.each(cells, function (tabCell) {\n                currIndex += tabCell.colSpan || 1;\n\n                if (currIndex === colIndex) {\n                    borderCells.push({\n                        left: tabCell,\n                        right: tabCell.nextSibling || null\n                    });\n\n                    return false;\n                } else if (currIndex > colIndex) {\n                    if (isContainMergeCell) {\n                        borderCells.push({\n                            left: tabCell\n                        });\n                    }\n\n                    return false;\n                }\n            });\n        });\n\n        return borderCells;\n    }\n\n    /**\n     * 通过给定的单元格集合获取最小的单元格width\n     */\n    function getMinWidthByTableCells(cells) {\n        var minWidth = Number.MAX_VALUE;\n\n        for (var i = 0, curCell; (curCell = cells[i]); i++) {\n            minWidth = Math.min(\n                minWidth,\n                curCell.width || getTableCellWidth(curCell)\n            );\n        }\n\n        return minWidth;\n    }\n\n    function correctChangeValue(changeValue, relatedCell, cells) {\n        //为单元格的paading预留空间\n        changeValue -= getTabcellSpace();\n\n        if (changeValue < 0) {\n            return 0;\n        }\n\n        changeValue -= getTableCellWidth(relatedCell);\n\n        //确定方向\n        var direction = changeValue < 0 ? \"left\" : \"right\";\n\n        changeValue = Math.abs(changeValue);\n\n        //只关心非最后一个单元格就可以\n        utils.each(cells, function (cellGroup) {\n            var curCell = cellGroup[direction];\n\n            //为单元格保留最小空间\n            if (curCell) {\n                changeValue = Math.min(\n                    changeValue,\n                    getTableCellWidth(curCell) - cellMinWidth\n                );\n            }\n        });\n\n        //修正越界\n        changeValue = changeValue < 0 ? 0 : changeValue;\n\n        return direction === \"left\" ? -changeValue : changeValue;\n    }\n\n    function getTableCellWidth(cell) {\n        var width = 0,\n            //偏移纠正量\n            offset = 0,\n            width = cell.offsetWidth - getTabcellSpace();\n\n        //最后一个节点纠正一下\n        if (!cell.nextSibling) {\n            width -= getTableCellOffset(cell);\n        }\n\n        width = width < 0 ? 0 : width;\n\n        try {\n            cell.width = width;\n        } catch (e) {\n        }\n\n        return width;\n    }\n\n    /**\n     * 获取单元格所在表格的最末单元格的偏移量\n     */\n    function getTableCellOffset(cell) {\n        tab = domUtils.findParentByTagName(cell, \"table\", false);\n\n        if (tab.offsetVal === undefined) {\n            var prev = cell.previousSibling;\n\n            if (prev) {\n                //最后一个单元格和前一个单元格的width diff结果 如果恰好为一个border width， 则条件成立\n                tab.offsetVal = cell.offsetWidth - prev.offsetWidth === UT.borderWidth\n                    ? UT.borderWidth\n                    : 0;\n            } else {\n                tab.offsetVal = 0;\n            }\n        }\n\n        return tab.offsetVal;\n    }\n\n    function getTabcellSpace() {\n        if (UT.tabcellSpace === undefined) {\n            var cell = null,\n                tab = me.document.createElement(\"table\"),\n                tbody = me.document.createElement(\"tbody\"),\n                trow = me.document.createElement(\"tr\"),\n                tabcell = me.document.createElement(\"td\"),\n                mirror = null;\n\n            tabcell.style.cssText = \"border: 0;\";\n            tabcell.width = 1;\n\n            trow.appendChild(tabcell);\n            trow.appendChild((mirror = tabcell.cloneNode(false)));\n\n            tbody.appendChild(trow);\n\n            tab.appendChild(tbody);\n\n            tab.style.cssText = \"visibility: hidden;\";\n\n            me.body.appendChild(tab);\n\n            UT.paddingSpace = tabcell.offsetWidth - 1;\n\n            var tmpTabWidth = tab.offsetWidth;\n\n            tabcell.style.cssText = \"\";\n            mirror.style.cssText = \"\";\n\n            UT.borderWidth = (tab.offsetWidth - tmpTabWidth) / 3;\n\n            UT.tabcellSpace = UT.paddingSpace + UT.borderWidth;\n\n            me.body.removeChild(tab);\n        }\n\n        getTabcellSpace = function () {\n            return UT.tabcellSpace;\n        };\n\n        return UT.tabcellSpace;\n    }\n\n    function getDragLine(editor, doc) {\n        if (mousedown) return;\n        dragLine = editor.document.createElement(\"div\");\n        domUtils.setAttributes(dragLine, {\n            id: \"ue_tableDragLine\",\n            unselectable: \"on\",\n            contenteditable: false,\n            onresizestart: \"return false\",\n            ondragstart: \"return false\",\n            onselectstart: \"return false\",\n            style:\n                \"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)\"\n        });\n        editor.body.appendChild(dragLine);\n    }\n\n    function hideDragLine(editor) {\n        if (mousedown) return;\n        var line;\n        while ((line = editor.document.getElementById(\"ue_tableDragLine\"))) {\n            domUtils.remove(line);\n        }\n    }\n\n    /**\n     * 依据state（v|h）在cell位置显示横线\n     * @param state\n     * @param cell\n     */\n    function showDragLineAt(state, cell) {\n        if (!cell) return;\n        var table = domUtils.findParentByTagName(cell, \"table\"),\n            caption = table.getElementsByTagName(\"caption\"),\n            width = table.offsetWidth,\n            height =\n                table.offsetHeight - (caption.length > 0 ? caption[0].offsetHeight : 0),\n            tablePos = domUtils.getXY(table),\n            cellPos = domUtils.getXY(cell),\n            css;\n        switch (state) {\n            case \"h\":\n                css =\n                    \"height:\" +\n                    height +\n                    \"px;top:\" +\n                    (tablePos.y + (caption.length > 0 ? caption[0].offsetHeight : 0)) +\n                    \"px;left:\" +\n                    (cellPos.x + cell.offsetWidth);\n                dragLine.style.cssText =\n                    css +\n                    \"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)\";\n                break;\n            case \"v\":\n                css =\n                    \"width:\" +\n                    width +\n                    \"px;left:\" +\n                    tablePos.x +\n                    \"px;top:\" +\n                    (cellPos.y + cell.offsetHeight);\n                //必须加上border:0和color:blue，否则低版ie不支持背景色显示\n                dragLine.style.cssText =\n                    css +\n                    \"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)\";\n                break;\n            default:\n        }\n    }\n\n    /**\n     * 当表格边框颜色为白色时设置为虚线,true为添加虚线\n     * @param editor\n     * @param flag\n     */\n    function switchBorderColor(editor, flag) {\n        var tableArr = domUtils.getElementsByTagName(editor.body, \"table\"),\n            color;\n        for (var i = 0, node; (node = tableArr[i++]);) {\n            var td = domUtils.getElementsByTagName(node, \"td\");\n            if (td[0]) {\n                if (flag) {\n                    color = td[0].style.borderColor.replace(/\\s/g, \"\");\n                    if (/(#ffffff)|(rgb\\(255,255,255\\))/gi.test(color))\n                        domUtils.addClass(node, \"noBorderTable\");\n                } else {\n                    domUtils.removeClasses(node, \"noBorderTable\");\n                }\n            }\n        }\n    }\n\n    function getTableWidth(editor, needIEHack, defaultValue) {\n        var body = editor.body;\n        return (\n            body.offsetWidth -\n            (needIEHack\n                ? parseInt(domUtils.getComputedStyle(body, \"margin-left\"), 10) * 2\n                : 0) -\n            defaultValue.tableBorder * 2 -\n            (editor.options.offsetWidth || 0)\n        );\n    }\n\n    /**\n     * 获取当前拖动的单元格\n     */\n    function getTargetTd(editor, evt) {\n        var target = domUtils.findParentByTagName(\n            evt.target || evt.srcElement,\n            [\"td\", \"th\"],\n            true\n            ),\n            dir = null;\n\n        if (!target) {\n            return null;\n        }\n\n        dir = getRelation(target, mouseCoords(evt));\n\n        //如果有前一个节点， 需要做一个修正， 否则可能会得到一个错误的td\n\n        if (!target) {\n            return null;\n        }\n\n        if (dir === \"h1\" && target.previousSibling) {\n            var position = domUtils.getXY(target),\n                cellWidth = target.offsetWidth;\n\n            if (Math.abs(position.x + cellWidth - evt.clientX) > cellWidth / 3) {\n                target = target.previousSibling;\n            }\n        } else if (dir === \"v1\" && target.parentNode.previousSibling) {\n            var position = domUtils.getXY(target),\n                cellHeight = target.offsetHeight;\n\n            if (Math.abs(position.y + cellHeight - evt.clientY) > cellHeight / 3) {\n                target = target.parentNode.previousSibling.firstChild;\n            }\n        }\n\n        //排除了非td内部以及用于代码高亮部分的td\n        return target && !(editor.fireEvent(\"excludetable\", target) === true)\n            ? target\n            : null;\n    }\n};\n"
  },
  {
    "path": "_src/plugins/table.cmds.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 13-2-20\n * Time: 下午6:25\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var UT = UE.UETable,\n        getTableItemsByRange = function (editor) {\n            return UT.getTableItemsByRange(editor);\n        },\n        getUETableBySelected = function (editor) {\n            return UT.getUETableBySelected(editor);\n        },\n        getDefaultValue = function (editor, table) {\n            return UT.getDefaultValue(editor, table);\n        },\n        getUETable = function (tdOrTable) {\n            return UT.getUETable(tdOrTable);\n        };\n\n    UE.commands[\"inserttable\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).table ? -1 : 0;\n        },\n        execCommand: function (cmd, opt) {\n            function createTable(opt, tdWidth) {\n                var html = [],\n                    rowsNum = opt.numRows,\n                    colsNum = opt.numCols;\n                for (var r = 0; r < rowsNum; r++) {\n                    html.push(\"<tr\" + (r == 0 ? ' class=\"firstRow\"' : \"\") + \">\");\n                    for (var c = 0; c < colsNum; c++) {\n                        html.push(\n                            '<td width=\"' +\n                            tdWidth +\n                            '\"  vAlign=\"' +\n                            opt.tdvalign +\n                            '\" >' +\n                            (browser.ie && browser.version < 11\n                                ? domUtils.fillChar\n                                : \"<br/>\") +\n                            \"</td>\"\n                        );\n                    }\n                    html.push(\"</tr>\");\n                }\n                //禁止指定table-width\n                return \"<table><tbody>\" + html.join(\"\") + \"</tbody></table>\";\n            }\n\n            if (!opt) {\n                opt = utils.extend(\n                    {},\n                    {\n                        numCols: this.options.defaultCols,\n                        numRows: this.options.defaultRows,\n                        tdvalign: this.options.tdvalign\n                    }\n                );\n            }\n            var me = this;\n            var range = this.selection.getRange(),\n                start = range.startContainer,\n                firstParentBlock =\n                    domUtils.findParent(\n                        start,\n                        function (node) {\n                            return domUtils.isBlockElm(node);\n                        },\n                        true\n                    ) || me.body;\n\n            var defaultValue = getDefaultValue(me),\n                tableWidth = firstParentBlock.offsetWidth,\n                tdWidth = Math.floor(\n                    tableWidth / opt.numCols -\n                    defaultValue.tdPadding * 2 -\n                    defaultValue.tdBorder\n                );\n\n            //todo其他属性\n            !opt.tdvalign && (opt.tdvalign = me.options.tdvalign);\n            me.execCommand(\"inserthtml\", createTable(opt, tdWidth));\n        }\n    };\n\n    UE.commands[\"insertparagraphbeforetable\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).cell ? 0 : -1;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var p = this.document.createElement(\"p\");\n                p.innerHTML = browser.ie ? \"&nbsp;\" : \"<br />\";\n                table.parentNode.insertBefore(p, table);\n                this.selection.getRange().setStart(p, 0).setCursor();\n            }\n        }\n    };\n\n    UE.commands[\"deletetable\"] = {\n        queryCommandState: function () {\n            var rng = this.selection.getRange();\n            return domUtils.findParentByTagName(rng.startContainer, \"table\", true)\n                ? 0\n                : -1;\n        },\n        execCommand: function (cmd, table) {\n            var rng = this.selection.getRange();\n            table =\n                table ||\n                domUtils.findParentByTagName(rng.startContainer, \"table\", true);\n            if (table) {\n                var next = table.nextSibling;\n                if (!next) {\n                    next = domUtils.createElement(this.document, \"p\", {\n                        innerHTML: browser.ie ? domUtils.fillChar : \"<br/>\"\n                    });\n                    table.parentNode.insertBefore(next, table);\n                }\n                domUtils.remove(table);\n                rng = this.selection.getRange();\n                if (next.nodeType == 3) {\n                    rng.setStartBefore(next);\n                } else {\n                    rng.setStart(next, 0);\n                }\n                rng.setCursor(false, true);\n                this.fireEvent(\"tablehasdeleted\");\n            }\n        }\n    };\n    UE.commands[\"cellalign\"] = {\n        queryCommandState: function () {\n            return getSelectedArr(this).length ? 0 : -1;\n        },\n        execCommand: function (cmd, align) {\n            var selectedTds = getSelectedArr(this);\n            if (selectedTds.length) {\n                for (var i = 0, ci; (ci = selectedTds[i++]);) {\n                    ci.setAttribute(\"align\", align);\n                }\n            }\n        }\n    };\n    UE.commands[\"cellvalign\"] = {\n        queryCommandState: function () {\n            return getSelectedArr(this).length ? 0 : -1;\n        },\n        execCommand: function (cmd, valign) {\n            var selectedTds = getSelectedArr(this);\n            if (selectedTds.length) {\n                for (var i = 0, ci; (ci = selectedTds[i++]);) {\n                    ci.setAttribute(\"vAlign\", valign);\n                }\n            }\n        }\n    };\n    UE.commands[\"insertcaption\"] = {\n        queryCommandState: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                return table.getElementsByTagName(\"caption\").length == 0 ? 1 : -1;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var caption = this.document.createElement(\"caption\");\n                caption.innerHTML = browser.ie ? domUtils.fillChar : \"<br/>\";\n                table.insertBefore(caption, table.firstChild);\n                var range = this.selection.getRange();\n                range.setStart(caption, 0).setCursor();\n            }\n        }\n    };\n    UE.commands[\"deletecaption\"] = {\n        queryCommandState: function () {\n            var rng = this.selection.getRange(),\n                table = domUtils.findParentByTagName(rng.startContainer, \"table\");\n            if (table) {\n                return table.getElementsByTagName(\"caption\").length == 0 ? -1 : 1;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                table = domUtils.findParentByTagName(rng.startContainer, \"table\");\n            if (table) {\n                domUtils.remove(table.getElementsByTagName(\"caption\")[0]);\n                var range = this.selection.getRange();\n                range.setStart(table.rows[0].cells[0], 0).setCursor();\n            }\n        }\n    };\n    UE.commands[\"inserttitle\"] = {\n        queryCommandState: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var firstRow = table.rows[0];\n                return firstRow.cells[\n                firstRow.cells.length - 1\n                    ].tagName.toLowerCase() != \"th\"\n                    ? 0\n                    : -1;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                getUETable(table).insertRow(0, \"th\");\n            }\n            var th = table.getElementsByTagName(\"th\")[0];\n            this.selection.getRange().setStart(th, 0).setCursor(false, true);\n        }\n    };\n    UE.commands[\"deletetitle\"] = {\n        queryCommandState: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var firstRow = table.rows[0];\n                return firstRow.cells[\n                firstRow.cells.length - 1\n                    ].tagName.toLowerCase() == \"th\"\n                    ? 0\n                    : -1;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                domUtils.remove(table.rows[0]);\n            }\n            var td = table.getElementsByTagName(\"td\")[0];\n            this.selection.getRange().setStart(td, 0).setCursor(false, true);\n        }\n    };\n    UE.commands[\"inserttitlecol\"] = {\n        queryCommandState: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var lastRow = table.rows[table.rows.length - 1];\n                return lastRow.getElementsByTagName(\"th\").length ? -1 : 0;\n            }\n            return -1;\n        },\n        execCommand: function (cmd) {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                getUETable(table).insertCol(0, \"th\");\n            }\n            resetTdWidth(table, this);\n            var th = table.getElementsByTagName(\"th\")[0];\n            this.selection.getRange().setStart(th, 0).setCursor(false, true);\n        }\n    };\n    UE.commands[\"deletetitlecol\"] = {\n        queryCommandState: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                var lastRow = table.rows[table.rows.length - 1];\n                return lastRow.getElementsByTagName(\"th\").length ? 0 : -1;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            if (table) {\n                for (var i = 0; i < table.rows.length; i++) {\n                    domUtils.remove(table.rows[i].children[0]);\n                }\n            }\n            resetTdWidth(table, this);\n            var td = table.getElementsByTagName(\"td\")[0];\n            this.selection.getRange().setStart(td, 0).setCursor(false, true);\n        }\n    };\n\n    UE.commands[\"mergeright\"] = {\n        queryCommandState: function (cmd) {\n            var tableItems = getTableItemsByRange(this),\n                table = tableItems.table,\n                cell = tableItems.cell;\n\n            if (!table || !cell) return -1;\n            var ut = getUETable(table);\n            if (ut.selectedTds.length) return -1;\n\n            var cellInfo = ut.getCellInfo(cell),\n                rightColIndex = cellInfo.colIndex + cellInfo.colSpan;\n            if (rightColIndex >= ut.colsNum) return -1; // 如果处于最右边则不能向右合并\n\n            var rightCellInfo = ut.indexTable[cellInfo.rowIndex][rightColIndex],\n                rightCell =\n                    table.rows[rightCellInfo.rowIndex].cells[rightCellInfo.cellIndex];\n            if (!rightCell || cell.tagName != rightCell.tagName) return -1; // TH和TD不能相互合并\n\n            // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并\n            return rightCellInfo.rowIndex == cellInfo.rowIndex &&\n            rightCellInfo.rowSpan == cellInfo.rowSpan\n                ? 0\n                : -1;\n        },\n        execCommand: function (cmd) {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell);\n            ut.mergeRight(cell);\n            rng.moveToBookmark(bk).select();\n        }\n    };\n    UE.commands[\"mergedown\"] = {\n        queryCommandState: function (cmd) {\n            var tableItems = getTableItemsByRange(this),\n                table = tableItems.table,\n                cell = tableItems.cell;\n\n            if (!table || !cell) return -1;\n            var ut = getUETable(table);\n            if (ut.selectedTds.length) return -1;\n\n            var cellInfo = ut.getCellInfo(cell),\n                downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan;\n            if (downRowIndex >= ut.rowsNum) return -1; // 如果处于最下边则不能向下合并\n\n            var downCellInfo = ut.indexTable[downRowIndex][cellInfo.colIndex],\n                downCell =\n                    table.rows[downCellInfo.rowIndex].cells[downCellInfo.cellIndex];\n            if (!downCell || cell.tagName != downCell.tagName) return -1; // TH和TD不能相互合并\n\n            // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并\n            return downCellInfo.colIndex == cellInfo.colIndex &&\n            downCellInfo.colSpan == cellInfo.colSpan\n                ? 0\n                : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell);\n            ut.mergeDown(cell);\n            rng.moveToBookmark(bk).select();\n        }\n    };\n    UE.commands[\"mergecells\"] = {\n        queryCommandState: function () {\n            return getUETableBySelected(this) ? 0 : -1;\n        },\n        execCommand: function () {\n            var ut = getUETableBySelected(this);\n            if (ut && ut.selectedTds.length) {\n                var cell = ut.selectedTds[0];\n                ut.mergeRange();\n                var rng = this.selection.getRange();\n                if (domUtils.isEmptyBlock(cell)) {\n                    rng.setStart(cell, 0).collapse(true);\n                } else {\n                    rng.selectNodeContents(cell);\n                }\n                rng.select();\n            }\n        }\n    };\n    UE.commands[\"insertrow\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            return cell &&\n            (cell.tagName == \"TD\" ||\n                (cell.tagName == \"TH\" &&\n                    tableItems.tr !== tableItems.table.rows[0])) &&\n            getUETable(tableItems.table).rowsNum < this.options.maxRowNum\n                ? 0\n                : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell,\n                table = tableItems.table,\n                ut = getUETable(table),\n                cellInfo = ut.getCellInfo(cell);\n            //ut.insertRow(!ut.selectedTds.length ? cellInfo.rowIndex:ut.cellsRange.beginRowIndex,'');\n            if (!ut.selectedTds.length) {\n                ut.insertRow(cellInfo.rowIndex, cell);\n            } else {\n                var range = ut.cellsRange;\n                for (\n                    var i = 0, len = range.endRowIndex - range.beginRowIndex + 1;\n                    i < len;\n                    i++\n                ) {\n                    ut.insertRow(range.beginRowIndex, cell);\n                }\n            }\n            rng.moveToBookmark(bk).select();\n            if (table.getAttribute(\"interlaced\") === \"enabled\")\n                this.fireEvent(\"interlacetable\", table);\n        }\n    };\n    //后插入行\n    UE.commands[\"insertrownext\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            return cell &&\n            cell.tagName == \"TD\" &&\n            getUETable(tableItems.table).rowsNum < this.options.maxRowNum\n                ? 0\n                : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell,\n                table = tableItems.table,\n                ut = getUETable(table),\n                cellInfo = ut.getCellInfo(cell);\n            //ut.insertRow(!ut.selectedTds.length? cellInfo.rowIndex + cellInfo.rowSpan : ut.cellsRange.endRowIndex + 1,'');\n            if (!ut.selectedTds.length) {\n                ut.insertRow(cellInfo.rowIndex + cellInfo.rowSpan, cell);\n            } else {\n                var range = ut.cellsRange;\n                for (\n                    var i = 0, len = range.endRowIndex - range.beginRowIndex + 1;\n                    i < len;\n                    i++\n                ) {\n                    ut.insertRow(range.endRowIndex + 1, cell);\n                }\n            }\n            rng.moveToBookmark(bk).select();\n            if (table.getAttribute(\"interlaced\") === \"enabled\")\n                this.fireEvent(\"interlacetable\", table);\n        }\n    };\n    UE.commands[\"deleterow\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this);\n            return tableItems.cell ? 0 : -1;\n        },\n        execCommand: function () {\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell),\n                cellsRange = ut.cellsRange,\n                cellInfo = ut.getCellInfo(cell),\n                preCell = ut.getVSideCell(cell),\n                nextCell = ut.getVSideCell(cell, true),\n                rng = this.selection.getRange();\n            if (utils.isEmptyObject(cellsRange)) {\n                ut.deleteRow(cellInfo.rowIndex);\n            } else {\n                for (\n                    var i = cellsRange.beginRowIndex;\n                    i < cellsRange.endRowIndex + 1;\n                    i++\n                ) {\n                    ut.deleteRow(cellsRange.beginRowIndex);\n                }\n            }\n            var table = ut.table;\n            if (!table.getElementsByTagName(\"td\").length) {\n                var nextSibling = table.nextSibling;\n                domUtils.remove(table);\n                if (nextSibling) {\n                    rng.setStart(nextSibling, 0).setCursor(false, true);\n                }\n            } else {\n                if (\n                    cellInfo.rowSpan == 1 ||\n                    cellInfo.rowSpan ==\n                    cellsRange.endRowIndex - cellsRange.beginRowIndex + 1\n                ) {\n                    if (nextCell || preCell)\n                        rng.selectNodeContents(nextCell || preCell).setCursor(false, true);\n                } else {\n                    var newCell = ut.getCell(\n                        cellInfo.rowIndex,\n                        ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex\n                    );\n                    if (newCell) rng.selectNodeContents(newCell).setCursor(false, true);\n                }\n            }\n            if (table.getAttribute(\"interlaced\") === \"enabled\")\n                this.fireEvent(\"interlacetable\", table);\n        }\n    };\n    UE.commands[\"insertcol\"] = {\n        queryCommandState: function (cmd) {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            return cell &&\n            (cell.tagName == \"TD\" ||\n                (cell.tagName == \"TH\" && cell !== tableItems.tr.cells[0])) &&\n            getUETable(tableItems.table).colsNum < this.options.maxColNum\n                ? 0\n                : -1;\n        },\n        execCommand: function (cmd) {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            if (this.queryCommandState(cmd) == -1) return;\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell),\n                cellInfo = ut.getCellInfo(cell);\n\n            //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex:ut.cellsRange.beginColIndex);\n            if (!ut.selectedTds.length) {\n                ut.insertCol(cellInfo.colIndex, cell);\n            } else {\n                var range = ut.cellsRange;\n                for (\n                    var i = 0, len = range.endColIndex - range.beginColIndex + 1;\n                    i < len;\n                    i++\n                ) {\n                    ut.insertCol(range.beginColIndex, cell);\n                }\n            }\n            rng.moveToBookmark(bk).select(true);\n        }\n    };\n    UE.commands[\"insertcolnext\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            return cell &&\n            getUETable(tableItems.table).colsNum < this.options.maxColNum\n                ? 0\n                : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell),\n                cellInfo = ut.getCellInfo(cell);\n            //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex + cellInfo.colSpan:ut.cellsRange.endColIndex +1);\n            if (!ut.selectedTds.length) {\n                ut.insertCol(cellInfo.colIndex + cellInfo.colSpan, cell);\n            } else {\n                var range = ut.cellsRange;\n                for (\n                    var i = 0, len = range.endColIndex - range.beginColIndex + 1;\n                    i < len;\n                    i++\n                ) {\n                    ut.insertCol(range.endColIndex + 1, cell);\n                }\n            }\n            rng.moveToBookmark(bk).select();\n        }\n    };\n\n    UE.commands[\"deletecol\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this);\n            return tableItems.cell ? 0 : -1;\n        },\n        execCommand: function () {\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell),\n                range = ut.cellsRange,\n                cellInfo = ut.getCellInfo(cell),\n                preCell = ut.getHSideCell(cell),\n                nextCell = ut.getHSideCell(cell, true);\n            if (utils.isEmptyObject(range)) {\n                ut.deleteCol(cellInfo.colIndex);\n            } else {\n                for (var i = range.beginColIndex; i < range.endColIndex + 1; i++) {\n                    ut.deleteCol(range.beginColIndex);\n                }\n            }\n            var table = ut.table,\n                rng = this.selection.getRange();\n\n            if (!table.getElementsByTagName(\"td\").length) {\n                var nextSibling = table.nextSibling;\n                domUtils.remove(table);\n                if (nextSibling) {\n                    rng.setStart(nextSibling, 0).setCursor(false, true);\n                }\n            } else {\n                if (domUtils.inDoc(cell, this.document)) {\n                    rng.setStart(cell, 0).setCursor(false, true);\n                } else {\n                    if (nextCell && domUtils.inDoc(nextCell, this.document)) {\n                        rng.selectNodeContents(nextCell).setCursor(false, true);\n                    } else {\n                        if (preCell && domUtils.inDoc(preCell, this.document)) {\n                            rng.selectNodeContents(preCell).setCursor(true, true);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    UE.commands[\"splittocells\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            if (!cell) return -1;\n            var ut = getUETable(tableItems.table);\n            if (ut.selectedTds.length > 0) return -1;\n            return cell && (cell.colSpan > 1 || cell.rowSpan > 1) ? 0 : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell);\n            ut.splitToCells(cell);\n            rng.moveToBookmark(bk).select();\n        }\n    };\n    UE.commands[\"splittorows\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            if (!cell) return -1;\n            var ut = getUETable(tableItems.table);\n            if (ut.selectedTds.length > 0) return -1;\n            return cell && cell.rowSpan > 1 ? 0 : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell);\n            ut.splitToRows(cell);\n            rng.moveToBookmark(bk).select();\n        }\n    };\n    UE.commands[\"splittocols\"] = {\n        queryCommandState: function () {\n            var tableItems = getTableItemsByRange(this),\n                cell = tableItems.cell;\n            if (!cell) return -1;\n            var ut = getUETable(tableItems.table);\n            if (ut.selectedTds.length > 0) return -1;\n            return cell && cell.colSpan > 1 ? 0 : -1;\n        },\n        execCommand: function () {\n            var rng = this.selection.getRange(),\n                bk = rng.createBookmark(true);\n            var cell = getTableItemsByRange(this).cell,\n                ut = getUETable(cell);\n            ut.splitToCols(cell);\n            rng.moveToBookmark(bk).select();\n        }\n    };\n\n    UE.commands[\"adaptbytext\"] = UE.commands[\"adaptbywindow\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).table ? 0 : -1;\n        },\n        execCommand: function (cmd) {\n            var tableItems = getTableItemsByRange(this),\n                table = tableItems.table;\n            if (table) {\n                if (cmd == \"adaptbywindow\") {\n                    resetTdWidth(table, this);\n                } else {\n                    var cells = domUtils.getElementsByTagName(table, \"td th\");\n                    utils.each(cells, function (cell) {\n                        cell.removeAttribute(\"width\");\n                    });\n                    table.removeAttribute(\"width\");\n                }\n            }\n        }\n    };\n\n    //平均分配各列\n    UE.commands[\"averagedistributecol\"] = {\n        queryCommandState: function () {\n            var ut = getUETableBySelected(this);\n            if (!ut) return -1;\n            return ut.isFullRow() || ut.isFullCol() ? 0 : -1;\n        },\n        execCommand: function (cmd) {\n            var me = this,\n                ut = getUETableBySelected(me);\n\n            function getAverageWidth() {\n                var tb = ut.table,\n                    averageWidth,\n                    sumWidth = 0,\n                    colsNum = 0,\n                    tbAttr = getDefaultValue(me, tb);\n\n                if (ut.isFullRow()) {\n                    sumWidth = tb.offsetWidth;\n                    colsNum = ut.colsNum;\n                } else {\n                    var begin = ut.cellsRange.beginColIndex,\n                        end = ut.cellsRange.endColIndex,\n                        node;\n                    for (var i = begin; i <= end;) {\n                        node = ut.selectedTds[i];\n                        sumWidth += node.offsetWidth;\n                        i += node.colSpan;\n                        colsNum += 1;\n                    }\n                }\n                averageWidth =\n                    Math.ceil(sumWidth / colsNum) -\n                    tbAttr.tdBorder * 2 -\n                    tbAttr.tdPadding * 2;\n                return averageWidth;\n            }\n\n            function setAverageWidth(averageWidth) {\n                utils.each(domUtils.getElementsByTagName(ut.table, \"th\"), function (\n                    node\n                ) {\n                    node.setAttribute(\"width\", \"\");\n                });\n                var cells = ut.isFullRow()\n                    ? domUtils.getElementsByTagName(ut.table, \"td\")\n                    : ut.selectedTds;\n\n                utils.each(cells, function (node) {\n                    if (node.colSpan == 1) {\n                        node.setAttribute(\"width\", averageWidth);\n                    }\n                });\n            }\n\n            if (ut && ut.selectedTds.length) {\n                setAverageWidth(getAverageWidth());\n            }\n        }\n    };\n    //平均分配各行\n    UE.commands[\"averagedistributerow\"] = {\n        queryCommandState: function () {\n            var ut = getUETableBySelected(this);\n            if (!ut) return -1;\n            if (ut.selectedTds && /th/gi.test(ut.selectedTds[0].tagName)) return -1;\n            return ut.isFullRow() || ut.isFullCol() ? 0 : -1;\n        },\n        execCommand: function (cmd) {\n            var me = this,\n                ut = getUETableBySelected(me);\n\n            function getAverageHeight() {\n                var averageHeight,\n                    rowNum,\n                    sumHeight = 0,\n                    tb = ut.table,\n                    tbAttr = getDefaultValue(me, tb),\n                    tdpadding = parseInt(\n                        domUtils.getComputedStyle(\n                            tb.getElementsByTagName(\"td\")[0],\n                            \"padding-top\"\n                        )\n                    );\n\n                if (ut.isFullCol()) {\n                    var captionArr = domUtils.getElementsByTagName(tb, \"caption\"),\n                        thArr = domUtils.getElementsByTagName(tb, \"th\"),\n                        captionHeight,\n                        thHeight;\n\n                    if (captionArr.length > 0) {\n                        captionHeight = captionArr[0].offsetHeight;\n                    }\n                    if (thArr.length > 0) {\n                        thHeight = thArr[0].offsetHeight;\n                    }\n\n                    sumHeight = tb.offsetHeight - (captionHeight || 0) - (thHeight || 0);\n                    rowNum = thArr.length == 0 ? ut.rowsNum : ut.rowsNum - 1;\n                } else {\n                    var begin = ut.cellsRange.beginRowIndex,\n                        end = ut.cellsRange.endRowIndex,\n                        count = 0,\n                        trs = domUtils.getElementsByTagName(tb, \"tr\");\n                    for (var i = begin; i <= end; i++) {\n                        sumHeight += trs[i].offsetHeight;\n                        count += 1;\n                    }\n                    rowNum = count;\n                }\n                //ie8下是混杂模式\n                if (browser.ie && browser.version < 9) {\n                    averageHeight = Math.ceil(sumHeight / rowNum);\n                } else {\n                    averageHeight =\n                        Math.ceil(sumHeight / rowNum) - tbAttr.tdBorder * 2 - tdpadding * 2;\n                }\n                return averageHeight;\n            }\n\n            function setAverageHeight(averageHeight) {\n                var cells = ut.isFullCol()\n                    ? domUtils.getElementsByTagName(ut.table, \"td\")\n                    : ut.selectedTds;\n                utils.each(cells, function (node) {\n                    if (node.rowSpan == 1) {\n                        node.setAttribute(\"height\", averageHeight);\n                    }\n                });\n            }\n\n            if (ut && ut.selectedTds.length) {\n                setAverageHeight(getAverageHeight());\n            }\n        }\n    };\n\n    //单元格对齐方式\n    UE.commands[\"cellalignment\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).table ? 0 : -1;\n        },\n        execCommand: function (cmd, data) {\n            var me = this,\n                ut = getUETableBySelected(me);\n\n            if (!ut) {\n                var start = me.selection.getStart(),\n                    cell =\n                        start &&\n                        domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n                if (!/caption/gi.test(cell.tagName)) {\n                    domUtils.setAttributes(cell, data);\n                } else {\n                    cell.style.textAlign = data.align;\n                    cell.style.verticalAlign = data.vAlign;\n                }\n                me.selection.getRange().setCursor(true);\n            } else {\n                utils.each(ut.selectedTds, function (cell) {\n                    domUtils.setAttributes(cell, data);\n                });\n            }\n        },\n        /**\n         * 查询当前点击的单元格的对齐状态， 如果当前已经选择了多个单元格， 则会返回所有单元格经过统一协调过后的状态\n         * @see UE.UETable.getTableCellAlignState\n         */\n        queryCommandValue: function (cmd) {\n            var activeMenuCell = getTableItemsByRange(this).cell;\n\n            if (!activeMenuCell) {\n                activeMenuCell = getSelectedArr(this)[0];\n            }\n\n            if (!activeMenuCell) {\n                return null;\n            } else {\n                //获取同时选中的其他单元格\n                var cells = UE.UETable.getUETable(activeMenuCell).selectedTds;\n\n                !cells.length && (cells = activeMenuCell);\n\n                return UE.UETable.getTableCellAlignState(cells);\n            }\n        }\n    };\n    //表格对齐方式\n    UE.commands[\"tablealignment\"] = {\n        queryCommandState: function () {\n            if (browser.ie && browser.version < 8) {\n                return -1;\n            }\n            return getTableItemsByRange(this).table ? 0 : -1;\n        },\n        execCommand: function (cmd, value) {\n            var me = this,\n                start = me.selection.getStart(),\n                table = start && domUtils.findParentByTagName(start, [\"table\"], true);\n\n            if (table) {\n                table.setAttribute(\"align\", value);\n            }\n        }\n    };\n\n    //表格属性\n    UE.commands[\"edittable\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).table ? 0 : -1;\n        },\n        execCommand: function (cmd, color) {\n            var rng = this.selection.getRange(),\n                table = domUtils.findParentByTagName(rng.startContainer, \"table\");\n            if (table) {\n                var arr = domUtils\n                    .getElementsByTagName(table, \"td\")\n                    .concat(\n                        domUtils.getElementsByTagName(table, \"th\"),\n                        domUtils.getElementsByTagName(table, \"caption\")\n                    );\n                utils.each(arr, function (node) {\n                    node.style.borderColor = color;\n                });\n            }\n        }\n    };\n    //单元格属性\n    UE.commands[\"edittd\"] = {\n        queryCommandState: function () {\n            return getTableItemsByRange(this).table ? 0 : -1;\n        },\n        execCommand: function (cmd, bkColor) {\n            var me = this,\n                ut = getUETableBySelected(me);\n\n            if (!ut) {\n                var start = me.selection.getStart(),\n                    cell =\n                        start &&\n                        domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n                if (cell) {\n                    cell.style.backgroundColor = bkColor;\n                }\n            } else {\n                utils.each(ut.selectedTds, function (cell) {\n                    cell.style.backgroundColor = bkColor;\n                });\n            }\n        }\n    };\n\n    UE.commands[\"settablebackground\"] = {\n        queryCommandState: function () {\n            return getSelectedArr(this).length > 1 ? 0 : -1;\n        },\n        execCommand: function (cmd, value) {\n            var cells, ut;\n            cells = getSelectedArr(this);\n            ut = getUETable(cells[0]);\n            ut.setBackground(cells, value);\n        }\n    };\n\n    UE.commands[\"cleartablebackground\"] = {\n        queryCommandState: function () {\n            var cells = getSelectedArr(this);\n            if (!cells.length) return -1;\n            for (var i = 0, cell; (cell = cells[i++]);) {\n                if (cell.style.backgroundColor !== \"\") return 0;\n            }\n            return -1;\n        },\n        execCommand: function () {\n            var cells = getSelectedArr(this),\n                ut = getUETable(cells[0]);\n            ut.removeBackground(cells);\n        }\n    };\n\n    UE.commands[\"interlacetable\"] = UE.commands[\"uninterlacetable\"] = {\n        queryCommandState: function (cmd) {\n            var table = getTableItemsByRange(this).table;\n            if (!table) return -1;\n            var interlaced = table.getAttribute(\"interlaced\");\n            if (cmd == \"interlacetable\") {\n                //TODO 待定\n                //是否需要待定，如果设置，则命令只能单次执行成功，但反射具备toggle效果；否则可以覆盖前次命令，但反射将不存在toggle效果\n                return interlaced === \"enabled\" ? -1 : 0;\n            } else {\n                return !interlaced || interlaced === \"disabled\" ? -1 : 0;\n            }\n        },\n        execCommand: function (cmd, classList) {\n            var table = getTableItemsByRange(this).table;\n            if (cmd == \"interlacetable\") {\n                table.setAttribute(\"interlaced\", \"enabled\");\n                this.fireEvent(\"interlacetable\", table, classList);\n            } else {\n                table.setAttribute(\"interlaced\", \"disabled\");\n                this.fireEvent(\"uninterlacetable\", table);\n            }\n        }\n    };\n    UE.commands[\"setbordervisible\"] = {\n        queryCommandState: function (cmd) {\n            var table = getTableItemsByRange(this).table;\n            if (!table) return -1;\n            return 0;\n        },\n        execCommand: function () {\n            var table = getTableItemsByRange(this).table;\n            utils.each(domUtils.getElementsByTagName(table, \"td\"), function (td) {\n                td.style.borderWidth = \"1px\";\n                td.style.borderStyle = \"solid\";\n            });\n        }\n    };\n\n    function resetTdWidth(table, editor) {\n        var tds = domUtils.getElementsByTagName(table, \"td th\");\n        utils.each(tds, function (td) {\n            td.removeAttribute(\"width\");\n        });\n        // bugfix https://gitee.com/modstart-lib/ueditor-plus/issues/I8N5ON\n        // table.setAttribute(\n        //     \"width\",\n        //     getTableWidth(editor, true, getDefaultValue(editor, table))\n        // );\n        table.setAttribute(\"width\", '100%');\n        var tdsWidths = [];\n        setTimeout(function () {\n            utils.each(tds, function (td) {\n                td.colSpan == 1 && tdsWidths.push(td.offsetWidth);\n            });\n            utils.each(tds, function (td, i) {\n                td.colSpan == 1 && td.setAttribute(\"width\", tdsWidths[i] + \"\");\n            });\n        }, 0);\n    }\n\n    function getTableWidth(editor, needIEHack, defaultValue) {\n        var body = editor.body;\n        return (\n            body.offsetWidth -\n            (needIEHack\n                ? parseInt(domUtils.getComputedStyle(body, \"margin-left\"), 10) * 2\n                : 0) -\n            defaultValue.tableBorder * 2 -\n            (editor.options.offsetWidth || 0)\n        );\n    }\n\n    function getSelectedArr(editor) {\n        var cell = getTableItemsByRange(editor).cell;\n        if (cell) {\n            var ut = getUETable(cell);\n            return ut.selectedTds.length ? ut.selectedTds : [cell];\n        } else {\n            return [];\n        }\n    }\n})();\n"
  },
  {
    "path": "_src/plugins/table.core.js",
    "content": "/**\n * Created with JetBrains WebStorm.\n * User: taoqili\n * Date: 13-1-18\n * Time: 上午11:09\n * To change this template use File | Settings | File Templates.\n */\n/**\n * UE表格操作类\n * @param table\n * @constructor\n */\n(function () {\n    var UETable = (UE.UETable = function (table) {\n        this.table = table;\n        this.indexTable = [];\n        this.selectedTds = [];\n        this.cellsRange = {};\n        this.update(table);\n    });\n\n    //===以下为静态工具方法===\n    UETable.removeSelectedClass = function (cells) {\n        utils.each(cells, function (cell) {\n            domUtils.removeClasses(cell, \"selectTdClass\");\n        });\n    };\n    UETable.addSelectedClass = function (cells) {\n        utils.each(cells, function (cell) {\n            domUtils.addClass(cell, \"selectTdClass\");\n        });\n    };\n    UETable.isEmptyBlock = function (node) {\n        var reg = new RegExp(domUtils.fillChar, \"g\");\n        if (\n            node[browser.ie ? \"innerText\" : \"textContent\"]\n                .replace(/^\\s*$/, \"\")\n                .replace(reg, \"\").length > 0\n        ) {\n            return 0;\n        }\n        for (var i in dtd.$isNotEmpty)\n            if (dtd.$isNotEmpty.hasOwnProperty(i)) {\n                if (node.getElementsByTagName(i).length) {\n                    return 0;\n                }\n            }\n        return 1;\n    };\n    UETable.getWidth = function (cell) {\n        if (!cell) return 0;\n        return parseInt(domUtils.getComputedStyle(cell, \"width\"), 10);\n    };\n\n    /**\n     * 获取单元格或者单元格组的“对齐”状态。 如果当前的检测对象是一个单元格组， 只有在满足所有单元格的 水平和竖直 对齐属性都相同的\n     * 条件时才会返回其状态值，否则将返回null； 如果当前只检测了一个单元格， 则直接返回当前单元格的对齐状态；\n     * @param table cell or table cells , 支持单个单元格dom对象 或者 单元格dom对象数组\n     * @return { align: 'left' || 'right' || 'center', valign: 'top' || 'middle' || 'bottom' } 或者 null\n     */\n    UETable.getTableCellAlignState = function (cells) {\n        !utils.isArray(cells) && (cells = [cells]);\n\n        var result = {},\n            status = [\"align\", \"valign\"],\n            tempStatus = null,\n            isSame = true; //状态是否相同\n\n        utils.each(cells, function (cellNode) {\n            utils.each(status, function (currentState) {\n                tempStatus = cellNode.getAttribute(currentState);\n\n                if (!result[currentState] && tempStatus) {\n                    result[currentState] = tempStatus;\n                } else if (\n                    !result[currentState] ||\n                    tempStatus !== result[currentState]\n                ) {\n                    isSame = false;\n                    return false;\n                }\n            });\n\n            return isSame;\n        });\n\n        return isSame ? result : null;\n    };\n\n    /**\n     * 根据当前选区获取相关的table信息\n     * @return {Object}\n     */\n    UETable.getTableItemsByRange = function (editor) {\n        var start = editor.selection.getStart();\n\n        //ff下会选中bookmark\n        if (\n            start &&\n            start.id &&\n            start.id.indexOf(\"_baidu_bookmark_start_\") === 0 &&\n            start.nextSibling\n        ) {\n            start = start.nextSibling;\n        }\n\n        //在table或者td边缘有可能存在选中tr的情况\n        var cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true),\n            tr = cell && cell.parentNode,\n            table = tr && domUtils.findParentByTagName(tr, [\"table\"]),\n            caption = table && table.getElementsByTagName(\"caption\")[0];\n\n        return {\n            cell: cell,\n            tr: tr,\n            table: table,\n            caption: caption\n        };\n    };\n    UETable.getUETableBySelected = function (editor) {\n        var table = UETable.getTableItemsByRange(editor).table;\n        if (table && table.ueTable && table.ueTable.selectedTds.length) {\n            return table.ueTable;\n        }\n        return null;\n    };\n\n    UETable.getDefaultValue = function (editor, table) {\n        var borderMap = {\n                thin: \"0px\",\n                medium: \"1px\",\n                thick: \"2px\"\n            },\n            tableBorder,\n            tdPadding,\n            tdBorder,\n            tmpValue;\n        if (!table) {\n            table = editor.document.createElement(\"table\");\n            table.insertRow(0).insertCell(0).innerHTML = \"xxx\";\n            editor.body.appendChild(table);\n            var td = table.getElementsByTagName(\"td\")[0];\n            tmpValue = domUtils.getComputedStyle(table, \"border-left-width\");\n            tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            tmpValue = domUtils.getComputedStyle(td, \"padding-left\");\n            tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            tmpValue = domUtils.getComputedStyle(td, \"border-left-width\");\n            tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            domUtils.remove(table);\n            return {\n                tableBorder: tableBorder,\n                tdPadding: tdPadding,\n                tdBorder: tdBorder\n            };\n        } else {\n            td = table.getElementsByTagName(\"td\")[0];\n            tmpValue = domUtils.getComputedStyle(table, \"border-left-width\");\n            tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            tmpValue = domUtils.getComputedStyle(td, \"padding-left\");\n            tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            tmpValue = domUtils.getComputedStyle(td, \"border-left-width\");\n            tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);\n            return {\n                tableBorder: tableBorder,\n                tdPadding: tdPadding,\n                tdBorder: tdBorder\n            };\n        }\n    };\n    /**\n     * 根据当前点击的td或者table获取索引对象\n     * @param tdOrTable\n     */\n    UETable.getUETable = function (tdOrTable) {\n        var tag = tdOrTable.tagName.toLowerCase();\n        tdOrTable = tag == \"td\" || tag == \"th\" || tag == \"caption\"\n            ? domUtils.findParentByTagName(tdOrTable, \"table\", true)\n            : tdOrTable;\n        if (!tdOrTable.ueTable) {\n            tdOrTable.ueTable = new UETable(tdOrTable);\n        }\n        return tdOrTable.ueTable;\n    };\n\n    UETable.cloneCell = function (cell, ignoreMerge, keepPro) {\n        if (!cell || utils.isString(cell)) {\n            return this.table.ownerDocument.createElement(cell || \"td\");\n        }\n        var flag = domUtils.hasClass(cell, \"selectTdClass\");\n        flag && domUtils.removeClasses(cell, \"selectTdClass\");\n        var tmpCell = cell.cloneNode(true);\n        if (ignoreMerge) {\n            tmpCell.rowSpan = tmpCell.colSpan = 1;\n        }\n        //去掉宽高\n        !keepPro && domUtils.removeAttributes(tmpCell, \"width height\");\n        !keepPro && domUtils.removeAttributes(tmpCell, \"style\");\n\n        tmpCell.style.borderLeftStyle = \"\";\n        tmpCell.style.borderTopStyle = \"\";\n        tmpCell.style.borderLeftColor = cell.style.borderRightColor;\n        tmpCell.style.borderLeftWidth = cell.style.borderRightWidth;\n        tmpCell.style.borderTopColor = cell.style.borderBottomColor;\n        tmpCell.style.borderTopWidth = cell.style.borderBottomWidth;\n        flag && domUtils.addClass(cell, \"selectTdClass\");\n        return tmpCell;\n    };\n\n    UETable.prototype = {\n        getMaxRows: function () {\n            var rows = this.table.rows,\n                maxLen = 1;\n            for (var i = 0, row; (row = rows[i]); i++) {\n                var currentMax = 1;\n                for (var j = 0, cj; (cj = row.cells[j++]);) {\n                    currentMax = Math.max(cj.rowSpan || 1, currentMax);\n                }\n                maxLen = Math.max(currentMax + i, maxLen);\n            }\n            return maxLen;\n        },\n        /**\n         * 获取当前表格的最大列数\n         */\n        getMaxCols: function () {\n            var rows = this.table.rows,\n                maxLen = 0,\n                cellRows = {};\n            for (var i = 0, row; (row = rows[i]); i++) {\n                var cellsNum = 0;\n                for (var j = 0, cj; (cj = row.cells[j++]);) {\n                    cellsNum += cj.colSpan || 1;\n                    if (cj.rowSpan && cj.rowSpan > 1) {\n                        for (var k = 1; k < cj.rowSpan; k++) {\n                            if (!cellRows[\"row_\" + (i + k)]) {\n                                cellRows[\"row_\" + (i + k)] = cj.colSpan || 1;\n                            } else {\n                                cellRows[\"row_\" + (i + k)]++;\n                            }\n                        }\n                    }\n                }\n                cellsNum += cellRows[\"row_\" + i] || 0;\n                maxLen = Math.max(cellsNum, maxLen);\n            }\n            return maxLen;\n        },\n        getCellColIndex: function (cell) {\n        },\n        /**\n         * 获取当前cell旁边的单元格，\n         * @param cell\n         * @param right\n         */\n        getHSideCell: function (cell, right) {\n            try {\n                var cellInfo = this.getCellInfo(cell),\n                    previewRowIndex,\n                    previewColIndex;\n                var len = this.selectedTds.length,\n                    range = this.cellsRange;\n                //首行或者首列没有前置单元格\n                if (\n                    (!right && (!len ? !cellInfo.colIndex : !range.beginColIndex)) ||\n                    (right &&\n                        (!len\n                            ? cellInfo.colIndex == this.colsNum - 1\n                            : range.endColIndex == this.colsNum - 1))\n                )\n                    return null;\n\n                previewRowIndex = !len ? cellInfo.rowIndex : range.beginRowIndex;\n                previewColIndex = !right\n                    ? !len\n                        ? cellInfo.colIndex < 1 ? 0 : cellInfo.colIndex - 1\n                        : range.beginColIndex - 1\n                    : !len ? cellInfo.colIndex + 1 : range.endColIndex + 1;\n                return this.getCell(\n                    this.indexTable[previewRowIndex][previewColIndex].rowIndex,\n                    this.indexTable[previewRowIndex][previewColIndex].cellIndex\n                );\n            } catch (e) {\n                showError(e);\n            }\n        },\n        getTabNextCell: function (cell, preRowIndex) {\n            var cellInfo = this.getCellInfo(cell),\n                rowIndex = preRowIndex || cellInfo.rowIndex,\n                colIndex = cellInfo.colIndex + 1 + (cellInfo.colSpan - 1),\n                nextCell;\n            try {\n                nextCell = this.getCell(\n                    this.indexTable[rowIndex][colIndex].rowIndex,\n                    this.indexTable[rowIndex][colIndex].cellIndex\n                );\n            } catch (e) {\n                try {\n                    rowIndex = rowIndex * 1 + 1;\n                    colIndex = 0;\n                    nextCell = this.getCell(\n                        this.indexTable[rowIndex][colIndex].rowIndex,\n                        this.indexTable[rowIndex][colIndex].cellIndex\n                    );\n                } catch (e) {\n                }\n            }\n            return nextCell;\n        },\n        /**\n         * 获取视觉上的后置单元格\n         * @param cell\n         * @param bottom\n         */\n        getVSideCell: function (cell, bottom, ignoreRange) {\n            try {\n                var cellInfo = this.getCellInfo(cell),\n                    nextRowIndex,\n                    nextColIndex;\n                var len = this.selectedTds.length && !ignoreRange,\n                    range = this.cellsRange;\n                //末行或者末列没有后置单元格\n                if (\n                    (!bottom && cellInfo.rowIndex == 0) ||\n                    (bottom &&\n                        (!len\n                            ? cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1\n                            : range.endRowIndex == this.rowsNum - 1))\n                )\n                    return null;\n\n                nextRowIndex = !bottom\n                    ? !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1\n                    : !len ? cellInfo.rowIndex + cellInfo.rowSpan : range.endRowIndex + 1;\n                nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex;\n                return this.getCell(\n                    this.indexTable[nextRowIndex][nextColIndex].rowIndex,\n                    this.indexTable[nextRowIndex][nextColIndex].cellIndex\n                );\n            } catch (e) {\n                showError(e);\n            }\n        },\n        /**\n         * 获取相同结束位置的单元格，xOrY指代了是获取x轴相同还是y轴相同\n         */\n        getSameEndPosCells: function (cell, xOrY) {\n            try {\n                var flag = xOrY.toLowerCase() === \"x\",\n                    end =\n                        domUtils.getXY(cell)[flag ? \"x\" : \"y\"] +\n                        cell[\"offset\" + (flag ? \"Width\" : \"Height\")],\n                    rows = this.table.rows,\n                    cells = null,\n                    returns = [];\n                for (var i = 0; i < this.rowsNum; i++) {\n                    cells = rows[i].cells;\n                    for (var j = 0, tmpCell; (tmpCell = cells[j++]);) {\n                        var tmpEnd =\n                            domUtils.getXY(tmpCell)[flag ? \"x\" : \"y\"] +\n                            tmpCell[\"offset\" + (flag ? \"Width\" : \"Height\")];\n                        //对应行的td已经被上面行rowSpan了\n                        if (tmpEnd > end && flag) break;\n                        if (cell == tmpCell || end == tmpEnd) {\n                            //只获取单一的单元格\n                            //todo 仅获取单一单元格在特定情况下会造成returns为空，从而影响后续的拖拽实现，修正这个。需考虑性能\n                            if (tmpCell[flag ? \"colSpan\" : \"rowSpan\"] == 1) {\n                                returns.push(tmpCell);\n                            }\n                            if (flag) break;\n                        }\n                    }\n                }\n                return returns;\n            } catch (e) {\n                showError(e);\n            }\n        },\n        setCellContent: function (cell, content) {\n            cell.innerHTML = content || (browser.ie ? domUtils.fillChar : \"<br />\");\n        },\n        cloneCell: UETable.cloneCell,\n        /**\n         * 获取跟当前单元格的右边竖线为左边的所有未合并单元格\n         */\n        getSameStartPosXCells: function (cell) {\n            try {\n                var start = domUtils.getXY(cell).x + cell.offsetWidth,\n                    rows = this.table.rows,\n                    cells,\n                    returns = [];\n                for (var i = 0; i < this.rowsNum; i++) {\n                    cells = rows[i].cells;\n                    for (var j = 0, tmpCell; (tmpCell = cells[j++]);) {\n                        var tmpStart = domUtils.getXY(tmpCell).x;\n                        if (tmpStart > start) break;\n                        if (tmpStart == start && tmpCell.colSpan == 1) {\n                            returns.push(tmpCell);\n                            break;\n                        }\n                    }\n                }\n                return returns;\n            } catch (e) {\n                showError(e);\n            }\n        },\n        /**\n         * 更新table对应的索引表\n         */\n        update: function (table) {\n            this.table = table || this.table;\n            this.selectedTds = [];\n            this.cellsRange = {};\n            this.indexTable = [];\n            var rows = this.table.rows,\n                rowsNum = this.getMaxRows(),\n                dNum = rowsNum - rows.length,\n                colsNum = this.getMaxCols();\n            while (dNum--) {\n                this.table.insertRow(rows.length);\n            }\n            this.rowsNum = rowsNum;\n            this.colsNum = colsNum;\n            for (var i = 0, len = rows.length; i < len; i++) {\n                this.indexTable[i] = new Array(colsNum);\n            }\n            //填充索引表\n            for (var rowIndex = 0, row; (row = rows[rowIndex]); rowIndex++) {\n                for (\n                    var cellIndex = 0, cell, cells = row.cells;\n                    (cell = cells[cellIndex]);\n                    cellIndex++\n                ) {\n                    //修正整行被rowSpan时导致的行数计算错误\n                    if (cell.rowSpan > rowsNum) {\n                        cell.rowSpan = rowsNum;\n                    }\n                    var colIndex = cellIndex,\n                        rowSpan = cell.rowSpan || 1,\n                        colSpan = cell.colSpan || 1;\n                    //当已经被上一行rowSpan或者被前一列colSpan了，则跳到下一个单元格进行\n                    while (this.indexTable[rowIndex][colIndex]) colIndex++;\n                    for (var j = 0; j < rowSpan; j++) {\n                        for (var k = 0; k < colSpan; k++) {\n                            this.indexTable[rowIndex + j][colIndex + k] = {\n                                rowIndex: rowIndex,\n                                cellIndex: cellIndex,\n                                colIndex: colIndex,\n                                rowSpan: rowSpan,\n                                colSpan: colSpan\n                            };\n                        }\n                    }\n                }\n            }\n            //修复残缺td\n            for (j = 0; j < rowsNum; j++) {\n                for (k = 0; k < colsNum; k++) {\n                    if (this.indexTable[j][k] === undefined) {\n                        row = rows[j];\n                        cell = row.cells[row.cells.length - 1];\n                        cell = cell\n                            ? cell.cloneNode(true)\n                            : this.table.ownerDocument.createElement(\"td\");\n                        this.setCellContent(cell);\n                        if (cell.colSpan !== 1) cell.colSpan = 1;\n                        if (cell.rowSpan !== 1) cell.rowSpan = 1;\n                        row.appendChild(cell);\n                        this.indexTable[j][k] = {\n                            rowIndex: j,\n                            cellIndex: cell.cellIndex,\n                            colIndex: k,\n                            rowSpan: 1,\n                            colSpan: 1\n                        };\n                    }\n                }\n            }\n            //当框选后删除行或者列后撤销，需要重建选区。\n            var tds = domUtils.getElementsByTagName(this.table, \"td\"),\n                selectTds = [];\n            utils.each(tds, function (td) {\n                if (domUtils.hasClass(td, \"selectTdClass\")) {\n                    selectTds.push(td);\n                }\n            });\n            if (selectTds.length) {\n                var start = selectTds[0],\n                    end = selectTds[selectTds.length - 1],\n                    startInfo = this.getCellInfo(start),\n                    endInfo = this.getCellInfo(end);\n                this.selectedTds = selectTds;\n                this.cellsRange = {\n                    beginRowIndex: startInfo.rowIndex,\n                    beginColIndex: startInfo.colIndex,\n                    endRowIndex: endInfo.rowIndex + endInfo.rowSpan - 1,\n                    endColIndex: endInfo.colIndex + endInfo.colSpan - 1\n                };\n            }\n            //给第一行设置firstRow的样式名称,在排序图标的样式上使用到\n            if (!domUtils.hasClass(this.table.rows[0], \"firstRow\")) {\n                domUtils.addClass(this.table.rows[0], \"firstRow\");\n                for (var i = 1; i < this.table.rows.length; i++) {\n                    domUtils.removeClasses(this.table.rows[i], \"firstRow\");\n                }\n            }\n        },\n        /**\n         * 获取单元格的索引信息\n         */\n        getCellInfo: function (cell) {\n            if (!cell) return;\n            var cellIndex = cell.cellIndex,\n                rowIndex = cell.parentNode.rowIndex,\n                rowInfo = this.indexTable[rowIndex],\n                numCols = this.colsNum;\n            for (var colIndex = cellIndex; colIndex < numCols; colIndex++) {\n                var cellInfo = rowInfo[colIndex];\n                if (\n                    cellInfo.rowIndex === rowIndex &&\n                    cellInfo.cellIndex === cellIndex\n                ) {\n                    return cellInfo;\n                }\n            }\n        },\n        /**\n         * 根据行列号获取单元格\n         */\n        getCell: function (rowIndex, cellIndex) {\n            return (\n                (rowIndex < this.rowsNum &&\n                    this.table.rows[rowIndex].cells[cellIndex]) ||\n                null\n            );\n        },\n        /**\n         * 删除单元格\n         */\n        deleteCell: function (cell, rowIndex) {\n            rowIndex = typeof rowIndex == \"number\"\n                ? rowIndex\n                : cell.parentNode.rowIndex;\n            var row = this.table.rows[rowIndex];\n            row.deleteCell(cell.cellIndex);\n        },\n        /**\n         * 根据始末两个单元格获取被框选的所有单元格范围\n         */\n        getCellsRange: function (cellA, cellB) {\n            function checkRange(\n                beginRowIndex,\n                beginColIndex,\n                endRowIndex,\n                endColIndex\n            ) {\n                var tmpBeginRowIndex = beginRowIndex,\n                    tmpBeginColIndex = beginColIndex,\n                    tmpEndRowIndex = endRowIndex,\n                    tmpEndColIndex = endColIndex,\n                    cellInfo,\n                    colIndex,\n                    rowIndex;\n                // 通过indexTable检查是否存在超出TableRange上边界的情况\n                if (beginRowIndex > 0) {\n                    for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) {\n                        cellInfo = me.indexTable[beginRowIndex][colIndex];\n                        rowIndex = cellInfo.rowIndex;\n                        if (rowIndex < beginRowIndex) {\n                            tmpBeginRowIndex = Math.min(rowIndex, tmpBeginRowIndex);\n                        }\n                    }\n                }\n                // 通过indexTable检查是否存在超出TableRange右边界的情况\n                if (endColIndex < me.colsNum) {\n                    for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) {\n                        cellInfo = me.indexTable[rowIndex][endColIndex];\n                        colIndex = cellInfo.colIndex + cellInfo.colSpan - 1;\n                        if (colIndex > endColIndex) {\n                            tmpEndColIndex = Math.max(colIndex, tmpEndColIndex);\n                        }\n                    }\n                }\n                // 检查是否有超出TableRange下边界的情况\n                if (endRowIndex < me.rowsNum) {\n                    for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) {\n                        cellInfo = me.indexTable[endRowIndex][colIndex];\n                        rowIndex = cellInfo.rowIndex + cellInfo.rowSpan - 1;\n                        if (rowIndex > endRowIndex) {\n                            tmpEndRowIndex = Math.max(rowIndex, tmpEndRowIndex);\n                        }\n                    }\n                }\n                // 检查是否有超出TableRange左边界的情况\n                if (beginColIndex > 0) {\n                    for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) {\n                        cellInfo = me.indexTable[rowIndex][beginColIndex];\n                        colIndex = cellInfo.colIndex;\n                        if (colIndex < beginColIndex) {\n                            tmpBeginColIndex = Math.min(cellInfo.colIndex, tmpBeginColIndex);\n                        }\n                    }\n                }\n                //递归调用直至所有完成所有框选单元格的扩展\n                if (\n                    tmpBeginRowIndex != beginRowIndex ||\n                    tmpBeginColIndex != beginColIndex ||\n                    tmpEndRowIndex != endRowIndex ||\n                    tmpEndColIndex != endColIndex\n                ) {\n                    return checkRange(\n                        tmpBeginRowIndex,\n                        tmpBeginColIndex,\n                        tmpEndRowIndex,\n                        tmpEndColIndex\n                    );\n                } else {\n                    // 不需要扩展TableRange的情况\n                    return {\n                        beginRowIndex: beginRowIndex,\n                        beginColIndex: beginColIndex,\n                        endRowIndex: endRowIndex,\n                        endColIndex: endColIndex\n                    };\n                }\n            }\n\n            try {\n                var me = this,\n                    cellAInfo = me.getCellInfo(cellA);\n                if (cellA === cellB) {\n                    return {\n                        beginRowIndex: cellAInfo.rowIndex,\n                        beginColIndex: cellAInfo.colIndex,\n                        endRowIndex: cellAInfo.rowIndex + cellAInfo.rowSpan - 1,\n                        endColIndex: cellAInfo.colIndex + cellAInfo.colSpan - 1\n                    };\n                }\n                var cellBInfo = me.getCellInfo(cellB);\n                // 计算TableRange的四个边\n                var beginRowIndex = Math.min(cellAInfo.rowIndex, cellBInfo.rowIndex),\n                    beginColIndex = Math.min(cellAInfo.colIndex, cellBInfo.colIndex),\n                    endRowIndex = Math.max(\n                        cellAInfo.rowIndex + cellAInfo.rowSpan - 1,\n                        cellBInfo.rowIndex + cellBInfo.rowSpan - 1\n                    ),\n                    endColIndex = Math.max(\n                        cellAInfo.colIndex + cellAInfo.colSpan - 1,\n                        cellBInfo.colIndex + cellBInfo.colSpan - 1\n                    );\n\n                return checkRange(\n                    beginRowIndex,\n                    beginColIndex,\n                    endRowIndex,\n                    endColIndex\n                );\n            } catch (e) {\n                //throw e;\n            }\n        },\n        /**\n         * 依据cellsRange获取对应的单元格集合\n         */\n        getCells: function (range) {\n            //每次获取cells之前必须先清除上次的选择，否则会对后续获取操作造成影响\n            this.clearSelected();\n            var beginRowIndex = range.beginRowIndex,\n                beginColIndex = range.beginColIndex,\n                endRowIndex = range.endRowIndex,\n                endColIndex = range.endColIndex,\n                cellInfo,\n                rowIndex,\n                colIndex,\n                tdHash = {},\n                returnTds = [];\n            for (var i = beginRowIndex; i <= endRowIndex; i++) {\n                for (var j = beginColIndex; j <= endColIndex; j++) {\n                    cellInfo = this.indexTable[i][j];\n                    rowIndex = cellInfo.rowIndex;\n                    colIndex = cellInfo.colIndex;\n                    // 如果Cells里已经包含了此Cell则跳过\n                    var key = rowIndex + \"|\" + colIndex;\n                    if (tdHash[key]) continue;\n                    tdHash[key] = 1;\n                    if (\n                        rowIndex < i ||\n                        colIndex < j ||\n                        rowIndex + cellInfo.rowSpan - 1 > endRowIndex ||\n                        colIndex + cellInfo.colSpan - 1 > endColIndex\n                    ) {\n                        return null;\n                    }\n                    returnTds.push(this.getCell(rowIndex, cellInfo.cellIndex));\n                }\n            }\n            return returnTds;\n        },\n        /**\n         * 清理已经选中的单元格\n         */\n        clearSelected: function () {\n            UETable.removeSelectedClass(this.selectedTds);\n            this.selectedTds = [];\n            this.cellsRange = {};\n        },\n        /**\n         * 根据range设置已经选中的单元格\n         */\n        setSelected: function (range) {\n            var cells = this.getCells(range);\n            UETable.addSelectedClass(cells);\n            this.selectedTds = cells;\n            this.cellsRange = range;\n        },\n        isFullRow: function () {\n            var range = this.cellsRange;\n            return range.endColIndex - range.beginColIndex + 1 == this.colsNum;\n        },\n        isFullCol: function () {\n            var range = this.cellsRange,\n                table = this.table,\n                ths = table.getElementsByTagName(\"th\"),\n                rows = range.endRowIndex - range.beginRowIndex + 1;\n            return !ths.length\n                ? rows == this.rowsNum\n                : rows == this.rowsNum || rows == this.rowsNum - 1;\n        },\n        /**\n         * 获取视觉上的前置单元格，默认是左边，top传入时\n         * @param cell\n         * @param top\n         */\n        getNextCell: function (cell, bottom, ignoreRange) {\n            try {\n                var cellInfo = this.getCellInfo(cell),\n                    nextRowIndex,\n                    nextColIndex;\n                var len = this.selectedTds.length && !ignoreRange,\n                    range = this.cellsRange;\n                //末行或者末列没有后置单元格\n                if (\n                    (!bottom && cellInfo.rowIndex == 0) ||\n                    (bottom &&\n                        (!len\n                            ? cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1\n                            : range.endRowIndex == this.rowsNum - 1))\n                )\n                    return null;\n\n                nextRowIndex = !bottom\n                    ? !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1\n                    : !len ? cellInfo.rowIndex + cellInfo.rowSpan : range.endRowIndex + 1;\n                nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex;\n                return this.getCell(\n                    this.indexTable[nextRowIndex][nextColIndex].rowIndex,\n                    this.indexTable[nextRowIndex][nextColIndex].cellIndex\n                );\n            } catch (e) {\n                showError(e);\n            }\n        },\n        getPreviewCell: function (cell, top) {\n            try {\n                var cellInfo = this.getCellInfo(cell),\n                    previewRowIndex,\n                    previewColIndex;\n                var len = this.selectedTds.length,\n                    range = this.cellsRange;\n                //首行或者首列没有前置单元格\n                if (\n                    (!top && (!len ? !cellInfo.colIndex : !range.beginColIndex)) ||\n                    (top &&\n                        (!len\n                            ? cellInfo.rowIndex > this.colsNum - 1\n                            : range.endColIndex == this.colsNum - 1))\n                )\n                    return null;\n\n                previewRowIndex = !top\n                    ? !len ? cellInfo.rowIndex : range.beginRowIndex\n                    : !len\n                        ? cellInfo.rowIndex < 1 ? 0 : cellInfo.rowIndex - 1\n                        : range.beginRowIndex;\n                previewColIndex = !top\n                    ? !len\n                        ? cellInfo.colIndex < 1 ? 0 : cellInfo.colIndex - 1\n                        : range.beginColIndex - 1\n                    : !len ? cellInfo.colIndex : range.endColIndex + 1;\n                return this.getCell(\n                    this.indexTable[previewRowIndex][previewColIndex].rowIndex,\n                    this.indexTable[previewRowIndex][previewColIndex].cellIndex\n                );\n            } catch (e) {\n                showError(e);\n            }\n        },\n        /**\n         * 移动单元格中的内容\n         */\n        moveContent: function (cellTo, cellFrom) {\n            if (UETable.isEmptyBlock(cellFrom)) return;\n            if (UETable.isEmptyBlock(cellTo)) {\n                cellTo.innerHTML = cellFrom.innerHTML;\n                return;\n            }\n            var child = cellTo.lastChild;\n            if (child.nodeType == 3 || !dtd.$block[child.tagName]) {\n                cellTo.appendChild(cellTo.ownerDocument.createElement(\"br\"));\n            }\n            while ((child = cellFrom.firstChild)) {\n                cellTo.appendChild(child);\n            }\n        },\n        /**\n         * 向右合并单元格\n         */\n        mergeRight: function (cell) {\n            var cellInfo = this.getCellInfo(cell),\n                rightColIndex = cellInfo.colIndex + cellInfo.colSpan,\n                rightCellInfo = this.indexTable[cellInfo.rowIndex][rightColIndex],\n                rightCell = this.getCell(\n                    rightCellInfo.rowIndex,\n                    rightCellInfo.cellIndex\n                );\n            //合并\n            cell.colSpan = cellInfo.colSpan + rightCellInfo.colSpan;\n            //被合并的单元格不应存在宽度属性\n            cell.removeAttribute(\"width\");\n            //移动内容\n            this.moveContent(cell, rightCell);\n            //删掉被合并的Cell\n            this.deleteCell(rightCell, rightCellInfo.rowIndex);\n            this.update();\n        },\n        /**\n         * 向下合并单元格\n         */\n        mergeDown: function (cell) {\n            var cellInfo = this.getCellInfo(cell),\n                downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan,\n                downCellInfo = this.indexTable[downRowIndex][cellInfo.colIndex],\n                downCell = this.getCell(downCellInfo.rowIndex, downCellInfo.cellIndex);\n            cell.rowSpan = cellInfo.rowSpan + downCellInfo.rowSpan;\n            cell.removeAttribute(\"height\");\n            this.moveContent(cell, downCell);\n            this.deleteCell(downCell, downCellInfo.rowIndex);\n            this.update();\n        },\n        /**\n         * 合并整个range中的内容\n         */\n        mergeRange: function () {\n            //由于合并操作可以在任意时刻进行，所以无法通过鼠标位置等信息实时生成range，只能通过缓存实例中的cellsRange对象来访问\n            var range = this.cellsRange,\n                leftTopCell = this.getCell(\n                    range.beginRowIndex,\n                    this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex\n                );\n\n            // 这段关于行表头或者列表头的特殊处理会导致表头合并范围错误\n            // 为什么有这段代码的原因未明，暂且注释掉，希望原作者看到后出面说明下\n            // if (\n            //   leftTopCell.tagName == \"TH\" &&\n            //   range.endRowIndex !== range.beginRowIndex\n            // ) {\n            //   var index = this.indexTable,\n            //     info = this.getCellInfo(leftTopCell);\n            //   leftTopCell = this.getCell(1, index[1][info.colIndex].cellIndex);\n            //   range = this.getCellsRange(\n            //     leftTopCell,\n            //     this.getCell(\n            //       index[this.rowsNum - 1][info.colIndex].rowIndex,\n            //       index[this.rowsNum - 1][info.colIndex].cellIndex\n            //     )\n            //   );\n            // }\n\n            // 删除剩余的Cells\n            var cells = this.getCells(range);\n            for (var i = 0, ci; (ci = cells[i++]);) {\n                if (ci !== leftTopCell) {\n                    this.moveContent(leftTopCell, ci);\n                    this.deleteCell(ci);\n                }\n            }\n            // 修改左上角Cell的rowSpan和colSpan，并调整宽度属性设置\n            leftTopCell.rowSpan = range.endRowIndex - range.beginRowIndex + 1;\n            leftTopCell.rowSpan > 1 && leftTopCell.removeAttribute(\"height\");\n            leftTopCell.colSpan = range.endColIndex - range.beginColIndex + 1;\n            leftTopCell.colSpan > 1 && leftTopCell.removeAttribute(\"width\");\n            if (leftTopCell.rowSpan == this.rowsNum && leftTopCell.colSpan != 1) {\n                leftTopCell.colSpan = 1;\n            }\n\n            if (leftTopCell.colSpan == this.colsNum && leftTopCell.rowSpan != 1) {\n                var rowIndex = leftTopCell.parentNode.rowIndex;\n                //解决IE下的表格操作问题\n                if (this.table.deleteRow) {\n                    for (\n                        var i = rowIndex + 1,\n                            curIndex = rowIndex + 1,\n                            len = leftTopCell.rowSpan;\n                        i < len;\n                        i++\n                    ) {\n                        this.table.deleteRow(curIndex);\n                    }\n                } else {\n                    for (var i = 0, len = leftTopCell.rowSpan - 1; i < len; i++) {\n                        var row = this.table.rows[rowIndex + 1];\n                        row.parentNode.removeChild(row);\n                    }\n                }\n                leftTopCell.rowSpan = 1;\n            }\n            this.update();\n        },\n        /**\n         * 插入一行单元格\n         */\n        insertRow: function (rowIndex, sourceCell) {\n            var numCols = this.colsNum,\n                table = this.table,\n                row = table.insertRow(rowIndex),\n                cell,\n                thead = null,\n                isInsertTitle =\n                    typeof sourceCell == \"string\" && sourceCell.toUpperCase() == \"TH\";\n\n            function replaceTdToTh(colIndex, cell, tableRow) {\n                if (colIndex == 0) {\n                    var tr = tableRow.nextSibling || tableRow.previousSibling,\n                        th = tr.cells[colIndex];\n                    if (th.tagName == \"TH\") {\n                        th = cell.ownerDocument.createElement(\"th\");\n                        th.appendChild(cell.firstChild);\n                        tableRow.insertBefore(th, cell);\n                        domUtils.remove(cell);\n                    }\n                } else {\n                    if (cell.tagName == \"TH\") {\n                        var td = cell.ownerDocument.createElement(\"td\");\n                        td.appendChild(cell.firstChild);\n                        tableRow.insertBefore(td, cell);\n                        domUtils.remove(cell);\n                    }\n                }\n            }\n\n            //首行直接插入,无需考虑部分单元格被rowspan的情况\n            if (rowIndex == 0 || rowIndex == this.rowsNum) {\n                for (var colIndex = 0; colIndex < numCols; colIndex++) {\n                    cell = this.cloneCell(sourceCell, true);\n                    this.setCellContent(cell);\n                    cell.getAttribute(\"vAlign\") &&\n                    cell.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                    row.appendChild(cell);\n                    if (!isInsertTitle) replaceTdToTh(colIndex, cell, row);\n                }\n\n                if (isInsertTitle) {\n                    thead = table.createTHead();\n                    thead.insertBefore(row, thead.firstChild);\n                }\n            } else {\n                var infoRow = this.indexTable[rowIndex],\n                    cellIndex = 0;\n                for (colIndex = 0; colIndex < numCols; colIndex++) {\n                    var cellInfo = infoRow[colIndex];\n                    //如果存在某个单元格的rowspan穿过待插入行的位置，则修改该单元格的rowspan即可，无需插入单元格\n                    if (cellInfo.rowIndex < rowIndex) {\n                        cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);\n                        cell.rowSpan = cellInfo.rowSpan + 1;\n                    } else {\n                        cell = this.cloneCell(sourceCell, true);\n                        this.setCellContent(cell);\n                        row.appendChild(cell);\n                    }\n                    if (!isInsertTitle) replaceTdToTh(colIndex, cell, row);\n                }\n            }\n            //框选时插入不触发contentchange，需要手动更新索引。\n            this.update();\n            return row;\n        },\n        /**\n         * 删除一行单元格\n         * @param rowIndex\n         */\n        deleteRow: function (rowIndex) {\n            var row = this.table.rows[rowIndex],\n                infoRow = this.indexTable[rowIndex],\n                colsNum = this.colsNum,\n                count = 0; //处理计数\n            for (var colIndex = 0; colIndex < colsNum;) {\n                var cellInfo = infoRow[colIndex],\n                    cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);\n                if (cell.rowSpan > 1) {\n                    if (cellInfo.rowIndex == rowIndex) {\n                        var clone = cell.cloneNode(true);\n                        clone.rowSpan = cell.rowSpan - 1;\n                        clone.innerHTML = \"\";\n                        cell.rowSpan = 1;\n                        var nextRowIndex = rowIndex + 1,\n                            nextRow = this.table.rows[nextRowIndex],\n                            insertCellIndex,\n                            preMerged =\n                                this.getPreviewMergedCellsNum(nextRowIndex, colIndex) - count;\n                        if (preMerged < colIndex) {\n                            insertCellIndex = colIndex - preMerged - 1;\n                            //nextRow.insertCell(insertCellIndex);\n                            domUtils.insertAfter(nextRow.cells[insertCellIndex], clone);\n                        } else {\n                            if (nextRow.cells.length)\n                                nextRow.insertBefore(clone, nextRow.cells[0]);\n                        }\n                        count += 1;\n                        //cell.parentNode.removeChild(cell);\n                    }\n                }\n                colIndex += cell.colSpan || 1;\n            }\n            var deleteTds = [],\n                cacheMap = {};\n            for (colIndex = 0; colIndex < colsNum; colIndex++) {\n                var tmpRowIndex = infoRow[colIndex].rowIndex,\n                    tmpCellIndex = infoRow[colIndex].cellIndex,\n                    key = tmpRowIndex + \"_\" + tmpCellIndex;\n                if (cacheMap[key]) continue;\n                cacheMap[key] = 1;\n                cell = this.getCell(tmpRowIndex, tmpCellIndex);\n                deleteTds.push(cell);\n            }\n            var mergeTds = [];\n            utils.each(deleteTds, function (td) {\n                if (td.rowSpan == 1) {\n                    td.parentNode.removeChild(td);\n                } else {\n                    mergeTds.push(td);\n                }\n            });\n            utils.each(mergeTds, function (td) {\n                td.rowSpan--;\n            });\n            row.parentNode.removeChild(row);\n            //浏览器方法本身存在bug,采用自定义方法删除\n            //this.table.deleteRow(rowIndex);\n            this.update();\n        },\n        insertCol: function (colIndex, sourceCell, defaultValue) {\n            var rowsNum = this.rowsNum,\n                rowIndex = 0,\n                tableRow,\n                cell,\n                backWidth = parseInt(\n                    (this.table.offsetWidth -\n                        (this.colsNum + 1) * 20 -\n                        (this.colsNum + 1)) /\n                    (this.colsNum + 1),\n                    10\n                ),\n                isInsertTitleCol =\n                    typeof sourceCell == \"string\" && sourceCell.toUpperCase() == \"TH\";\n\n            function replaceTdToTh(rowIndex, cell, tableRow) {\n                if (rowIndex == 0) {\n                    var th = cell.nextSibling || cell.previousSibling;\n                    if (th.tagName == \"TH\") {\n                        th = cell.ownerDocument.createElement(\"th\");\n                        th.appendChild(cell.firstChild);\n                        tableRow.insertBefore(th, cell);\n                        domUtils.remove(cell);\n                    }\n                } else {\n                    if (cell.tagName == \"TH\") {\n                        var td = cell.ownerDocument.createElement(\"td\");\n                        td.appendChild(cell.firstChild);\n                        tableRow.insertBefore(td, cell);\n                        domUtils.remove(cell);\n                    }\n                }\n            }\n\n            var preCell;\n            if (colIndex == 0 || colIndex == this.colsNum) {\n                for (; rowIndex < rowsNum; rowIndex++) {\n                    tableRow = this.table.rows[rowIndex];\n                    preCell =\n                        tableRow.cells[colIndex == 0 ? colIndex : tableRow.cells.length];\n                    cell = this.cloneCell(sourceCell, true); //tableRow.insertCell(colIndex == 0 ? colIndex : tableRow.cells.length);\n                    this.setCellContent(cell);\n                    cell.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                    preCell && cell.setAttribute(\"width\", preCell.getAttribute(\"width\"));\n                    if (!colIndex) {\n                        tableRow.insertBefore(cell, tableRow.cells[0]);\n                    } else {\n                        domUtils.insertAfter(\n                            tableRow.cells[tableRow.cells.length - 1],\n                            cell\n                        );\n                    }\n                    if (!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow);\n                }\n            } else {\n                for (; rowIndex < rowsNum; rowIndex++) {\n                    var cellInfo = this.indexTable[rowIndex][colIndex];\n                    if (cellInfo.colIndex < colIndex) {\n                        cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);\n                        cell.colSpan = cellInfo.colSpan + 1;\n                    } else {\n                        tableRow = this.table.rows[rowIndex];\n                        preCell = tableRow.cells[cellInfo.cellIndex];\n\n                        cell = this.cloneCell(sourceCell, true); //tableRow.insertCell(cellInfo.cellIndex);\n                        this.setCellContent(cell);\n                        cell.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                        preCell &&\n                        cell.setAttribute(\"width\", preCell.getAttribute(\"width\"));\n                        //防止IE下报错\n                        preCell\n                            ? tableRow.insertBefore(cell, preCell)\n                            : tableRow.appendChild(cell);\n                    }\n                    if (!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow);\n                }\n            }\n            //框选时插入不触发contentchange，需要手动更新索引\n            this.update();\n            this.updateWidth(\n                backWidth,\n                defaultValue || {tdPadding: 10, tdBorder: 1}\n            );\n        },\n        updateWidth: function (width, defaultValue) {\n            var table = this.table,\n                tmpWidth =\n                    UETable.getWidth(table) -\n                    defaultValue.tdPadding * 2 -\n                    defaultValue.tdBorder +\n                    width;\n            if (tmpWidth < table.ownerDocument.body.offsetWidth) {\n                table.setAttribute(\"width\", tmpWidth);\n                return;\n            }\n            var tds = domUtils.getElementsByTagName(this.table, \"td th\");\n            utils.each(tds, function (td) {\n                td.setAttribute(\"width\", width);\n            });\n        },\n        deleteCol: function (colIndex) {\n            var indexTable = this.indexTable,\n                tableRows = this.table.rows,\n                backTableWidth = this.table.getAttribute(\"width\"),\n                backTdWidth = 0,\n                rowsNum = this.rowsNum,\n                cacheMap = {};\n            for (var rowIndex = 0; rowIndex < rowsNum;) {\n                var infoRow = indexTable[rowIndex],\n                    cellInfo = infoRow[colIndex],\n                    key = cellInfo.rowIndex + \"_\" + cellInfo.colIndex;\n                // 跳过已经处理过的Cell\n                if (cacheMap[key]) continue;\n                cacheMap[key] = 1;\n                var cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);\n                if (!backTdWidth)\n                    backTdWidth =\n                        cell && parseInt(cell.offsetWidth / cell.colSpan, 10).toFixed(0);\n                // 如果Cell的colSpan大于1, 就修改colSpan, 否则就删掉这个Cell\n                if (cell.colSpan > 1) {\n                    cell.colSpan--;\n                } else {\n                    tableRows[rowIndex].deleteCell(cellInfo.cellIndex);\n                }\n                rowIndex += cellInfo.rowSpan || 1;\n            }\n            this.table.setAttribute(\"width\", backTableWidth - backTdWidth);\n            this.update();\n        },\n        splitToCells: function (cell) {\n            var me = this,\n                cells = this.splitToRows(cell);\n            utils.each(cells, function (cell) {\n                me.splitToCols(cell);\n            });\n        },\n        splitToRows: function (cell) {\n            var cellInfo = this.getCellInfo(cell),\n                rowIndex = cellInfo.rowIndex,\n                colIndex = cellInfo.colIndex,\n                results = [];\n            // 修改Cell的rowSpan\n            cell.rowSpan = 1;\n            results.push(cell);\n            // 补齐单元格\n            for (\n                var i = rowIndex, endRow = rowIndex + cellInfo.rowSpan;\n                i < endRow;\n                i++\n            ) {\n                if (i == rowIndex) continue;\n                var tableRow = this.table.rows[i],\n                    tmpCell = tableRow.insertCell(\n                        colIndex - this.getPreviewMergedCellsNum(i, colIndex)\n                    );\n                tmpCell.colSpan = cellInfo.colSpan;\n                this.setCellContent(tmpCell);\n                tmpCell.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                tmpCell.setAttribute(\"align\", cell.getAttribute(\"align\"));\n                if (cell.style.cssText) {\n                    tmpCell.style.cssText = cell.style.cssText;\n                }\n                results.push(tmpCell);\n            }\n            this.update();\n            return results;\n        },\n        getPreviewMergedCellsNum: function (rowIndex, colIndex) {\n            var indexRow = this.indexTable[rowIndex],\n                num = 0;\n            for (var i = 0; i < colIndex;) {\n                var colSpan = indexRow[i].colSpan,\n                    tmpRowIndex = indexRow[i].rowIndex;\n                num += colSpan - (tmpRowIndex == rowIndex ? 1 : 0);\n                i += colSpan;\n            }\n            return num;\n        },\n        splitToCols: function (cell) {\n            var backWidth = (cell.offsetWidth / cell.colSpan - 22).toFixed(0),\n                cellInfo = this.getCellInfo(cell),\n                rowIndex = cellInfo.rowIndex,\n                colIndex = cellInfo.colIndex,\n                results = [];\n            // 修改Cell的rowSpan\n            cell.colSpan = 1;\n            cell.setAttribute(\"width\", backWidth);\n            results.push(cell);\n            // 补齐单元格\n            for (\n                var j = colIndex, endCol = colIndex + cellInfo.colSpan;\n                j < endCol;\n                j++\n            ) {\n                if (j == colIndex) continue;\n                var tableRow = this.table.rows[rowIndex],\n                    tmpCell = tableRow.insertCell(\n                        this.indexTable[rowIndex][j].cellIndex + 1\n                    );\n                tmpCell.rowSpan = cellInfo.rowSpan;\n                this.setCellContent(tmpCell);\n                tmpCell.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                tmpCell.setAttribute(\"align\", cell.getAttribute(\"align\"));\n                tmpCell.setAttribute(\"width\", backWidth);\n                if (cell.style.cssText) {\n                    tmpCell.style.cssText = cell.style.cssText;\n                }\n                //处理th的情况\n                if (cell.tagName == \"TH\") {\n                    var th = cell.ownerDocument.createElement(\"th\");\n                    th.appendChild(tmpCell.firstChild);\n                    th.setAttribute(\"vAlign\", cell.getAttribute(\"vAlign\"));\n                    th.rowSpan = tmpCell.rowSpan;\n                    tableRow.insertBefore(th, tmpCell);\n                    domUtils.remove(tmpCell);\n                }\n                results.push(tmpCell);\n            }\n            this.update();\n            return results;\n        },\n        isLastCell: function (cell, rowsNum, colsNum) {\n            rowsNum = rowsNum || this.rowsNum;\n            colsNum = colsNum || this.colsNum;\n            var cellInfo = this.getCellInfo(cell);\n            return (\n                cellInfo.rowIndex + cellInfo.rowSpan == rowsNum &&\n                cellInfo.colIndex + cellInfo.colSpan == colsNum\n            );\n        },\n        getLastCell: function (cells) {\n            cells = cells || this.table.getElementsByTagName(\"td\");\n            var firstInfo = this.getCellInfo(cells[0]);\n            var me = this,\n                last = cells[0],\n                tr = last.parentNode,\n                cellsNum = 0,\n                cols = 0,\n                rows;\n            utils.each(cells, function (cell) {\n                if (cell.parentNode == tr) cols += cell.colSpan || 1;\n                cellsNum += cell.rowSpan * cell.colSpan || 1;\n            });\n            rows = cellsNum / cols;\n            utils.each(cells, function (cell) {\n                if (me.isLastCell(cell, rows, cols)) {\n                    last = cell;\n                    return false;\n                }\n            });\n            return last;\n        },\n        selectRow: function (rowIndex) {\n            var indexRow = this.indexTable[rowIndex],\n                start = this.getCell(indexRow[0].rowIndex, indexRow[0].cellIndex),\n                end = this.getCell(\n                    indexRow[this.colsNum - 1].rowIndex,\n                    indexRow[this.colsNum - 1].cellIndex\n                ),\n                range = this.getCellsRange(start, end);\n            this.setSelected(range);\n        },\n        selectTable: function () {\n            var tds = this.table.getElementsByTagName(\"td\"),\n                range = this.getCellsRange(tds[0], tds[tds.length - 1]);\n            this.setSelected(range);\n        },\n        setBackground: function (cells, value) {\n            if (typeof value === \"string\") {\n                utils.each(cells, function (cell) {\n                    cell.style.backgroundColor = value;\n                });\n            } else if (typeof value === \"object\") {\n                value = utils.extend(\n                    {\n                        repeat: true,\n                        colorList: [\"#ddd\", \"#fff\"]\n                    },\n                    value\n                );\n                var rowIndex = this.getCellInfo(cells[0]).rowIndex,\n                    count = 0,\n                    colors = value.colorList,\n                    getColor = function (list, index, repeat) {\n                        return list[index]\n                            ? list[index]\n                            : repeat ? list[index % list.length] : \"\";\n                    };\n                for (var i = 0, cell; (cell = cells[i++]);) {\n                    var cellInfo = this.getCellInfo(cell);\n                    cell.style.backgroundColor = getColor(\n                        colors,\n                        rowIndex + count == cellInfo.rowIndex ? count : ++count,\n                        value.repeat\n                    );\n                }\n            }\n        },\n        removeBackground: function (cells) {\n            utils.each(cells, function (cell) {\n                cell.style.backgroundColor = \"\";\n            });\n        }\n    };\n\n    function showError(e) {\n    }\n})();\n"
  },
  {
    "path": "_src/plugins/table.sort.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: Jinqn\n * Date: 13-10-12\n * Time: 上午10:20\n * To change this template use File | Settings | File Templates.\n */\n\nUE.UETable.prototype.sortTable = function (sortByCellIndex, compareFn) {\n    var table = this.table,\n        rows = table.rows,\n        trArray = [],\n        flag = rows[0].cells[0].tagName === \"TH\",\n        lastRowIndex = 0;\n    if (this.selectedTds.length) {\n        var range = this.cellsRange,\n            len = range.endRowIndex + 1;\n        for (var i = range.beginRowIndex; i < len; i++) {\n            trArray[i] = rows[i];\n        }\n        trArray.splice(0, range.beginRowIndex);\n        lastRowIndex = range.endRowIndex + 1 === this.rowsNum\n            ? 0\n            : range.endRowIndex + 1;\n    } else {\n        for (var i = 0, len = rows.length; i < len; i++) {\n            trArray[i] = rows[i];\n        }\n    }\n\n    var Fn = {\n        reversecurrent: function (td1, td2) {\n            return 1;\n        },\n        orderbyasc: function (td1, td2) {\n            var value1 = td1.innerText || td1.textContent,\n                value2 = td2.innerText || td2.textContent;\n            return value1.localeCompare(value2);\n        },\n        reversebyasc: function (td1, td2) {\n            var value1 = td1.innerHTML,\n                value2 = td2.innerHTML;\n            return value2.localeCompare(value1);\n        },\n        orderbynum: function (td1, td2) {\n            var value1 = td1[browser.ie ? \"innerText\" : \"textContent\"].match(/\\d+/),\n                value2 = td2[browser.ie ? \"innerText\" : \"textContent\"].match(/\\d+/);\n            if (value1) value1 = +value1[0];\n            if (value2) value2 = +value2[0];\n            return (value1 || 0) - (value2 || 0);\n        },\n        reversebynum: function (td1, td2) {\n            var value1 = td1[browser.ie ? \"innerText\" : \"textContent\"].match(/\\d+/),\n                value2 = td2[browser.ie ? \"innerText\" : \"textContent\"].match(/\\d+/);\n            if (value1) value1 = +value1[0];\n            if (value2) value2 = +value2[0];\n            return (value2 || 0) - (value1 || 0);\n        }\n    };\n\n    //对表格设置排序的标记data-sort-type\n    table.setAttribute(\n        \"data-sort-type\",\n        compareFn && typeof compareFn === \"string\" && Fn[compareFn] ? compareFn : \"\"\n    );\n\n    //th不参与排序\n    flag && trArray.splice(0, 1);\n    trArray = utils.sort(trArray, function (tr1, tr2) {\n        var result;\n        if (compareFn && typeof compareFn === \"function\") {\n            result = compareFn.call(\n                this,\n                tr1.cells[sortByCellIndex],\n                tr2.cells[sortByCellIndex]\n            );\n        } else if (compareFn && typeof compareFn === \"number\") {\n            result = 1;\n        } else if (compareFn && typeof compareFn === \"string\" && Fn[compareFn]) {\n            result = Fn[compareFn].call(\n                this,\n                tr1.cells[sortByCellIndex],\n                tr2.cells[sortByCellIndex]\n            );\n        } else {\n            result = Fn[\"orderbyasc\"].call(\n                this,\n                tr1.cells[sortByCellIndex],\n                tr2.cells[sortByCellIndex]\n            );\n        }\n        return result;\n    });\n    var fragment = table.ownerDocument.createDocumentFragment();\n    for (var j = 0, len = trArray.length; j < len; j++) {\n        fragment.appendChild(trArray[j]);\n    }\n    var tbody = table.getElementsByTagName(\"tbody\")[0];\n    if (!lastRowIndex) {\n        tbody.appendChild(fragment);\n    } else {\n        tbody.insertBefore(\n            fragment,\n            rows[lastRowIndex - range.endRowIndex + range.beginRowIndex - 1]\n        );\n    }\n};\n\nUE.plugins[\"tablesort\"] = function () {\n    var me = this,\n        UT = UE.UETable,\n        getUETable = function (tdOrTable) {\n            return UT.getUETable(tdOrTable);\n        },\n        getTableItemsByRange = function (editor) {\n            return UT.getTableItemsByRange(editor);\n        };\n\n    me.ready(function () {\n        //添加表格可排序的样式\n        utils.cssRule(\n            \"tablesort\",\n            \"table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;\" +\n            \"   background-image:url(\" +\n            me.options.themePath +\n            me.options.theme +\n            \"/images/sortable.png);}\",\n            me.document\n        );\n\n        //做单元格合并操作时,清除可排序标识\n        me.addListener(\"afterexeccommand\", function (type, cmd) {\n            if (cmd == \"mergeright\" || cmd == \"mergedown\" || cmd == \"mergecells\") {\n                this.execCommand(\"disablesort\");\n            }\n        });\n    });\n\n    //表格排序\n    UE.commands[\"sorttable\"] = {\n        queryCommandState: function () {\n            var me = this,\n                tableItems = getTableItemsByRange(me);\n            if (!tableItems.cell) return -1;\n            var table = tableItems.table,\n                cells = table.getElementsByTagName(\"td\");\n            for (var i = 0, cell; (cell = cells[i++]);) {\n                if (cell.rowSpan != 1 || cell.colSpan != 1) return -1;\n            }\n            return 0;\n        },\n        execCommand: function (cmd, fn) {\n            var me = this,\n                range = me.selection.getRange(),\n                bk = range.createBookmark(true),\n                tableItems = getTableItemsByRange(me),\n                cell = tableItems.cell,\n                ut = getUETable(tableItems.table),\n                cellInfo = ut.getCellInfo(cell);\n            ut.sortTable(cellInfo.cellIndex, fn);\n            range.moveToBookmark(bk);\n            try {\n                range.select();\n            } catch (e) {\n            }\n        }\n    };\n\n    //设置表格可排序,清除表格可排序\n    UE.commands[\"enablesort\"] = UE.commands[\"disablesort\"] = {\n        queryCommandState: function (cmd) {\n            var table = getTableItemsByRange(this).table;\n            if (table && cmd == \"enablesort\") {\n                var cells = domUtils.getElementsByTagName(table, \"th td\");\n                for (var i = 0; i < cells.length; i++) {\n                    if (\n                        cells[i].getAttribute(\"colspan\") > 1 ||\n                        cells[i].getAttribute(\"rowspan\") > 1\n                    )\n                        return -1;\n                }\n            }\n\n            return !table\n                ? -1\n                : (cmd == \"enablesort\") ^\n                (table.getAttribute(\"data-sort\") != \"sortEnabled\")\n                    ? -1\n                    : 0;\n        },\n        execCommand: function (cmd) {\n            var table = getTableItemsByRange(this).table;\n            table.setAttribute(\n                \"data-sort\",\n                cmd == \"enablesort\" ? \"sortEnabled\" : \"sortDisabled\"\n            );\n            cmd == \"enablesort\"\n                ? domUtils.addClass(table, \"sortEnabled\")\n                : domUtils.removeClasses(table, \"sortEnabled\");\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/template.js",
    "content": "///import core\n///import plugins\\inserthtml.js\n///import plugins\\cleardoc.js\n///commands 模板\n///commandsName  template\n///commandsTitle  模板\n///commandsDialog  dialogs\\template\nUE.plugins[\"template\"] = function () {\n    UE.commands[\"template\"] = {\n        execCommand: function (cmd, obj) {\n            obj.html && this.execCommand(\"inserthtml\", obj.html);\n        }\n    };\n    this.addListener(\"click\", function (type, evt) {\n        var el = evt.target || evt.srcElement,\n            range = this.selection.getRange();\n        var tnode = domUtils.findParent(\n            el,\n            function (node) {\n                if (node.className && domUtils.hasClass(node, \"ue_t\")) {\n                    return node;\n                }\n            },\n            true\n        );\n        tnode && range.selectNode(tnode).shrinkBoundary().select();\n    });\n    this.addListener(\"keydown\", function (type, evt) {\n        var range = this.selection.getRange();\n        if (!range.collapsed) {\n            if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) {\n                var tnode = domUtils.findParent(\n                    range.startContainer,\n                    function (node) {\n                        if (node.className && domUtils.hasClass(node, \"ue_t\")) {\n                            return node;\n                        }\n                    },\n                    true\n                );\n                if (tnode) {\n                    domUtils.removeClasses(tnode, [\"ue_t\"]);\n                }\n            }\n        }\n    });\n};\n"
  },
  {
    "path": "_src/plugins/time.js",
    "content": "/**\n * 插入时间和日期\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 插入时间，默认格式：12:59:59\n * @command time\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'time');\n * ```\n */\n\n/**\n * 插入日期，默认格式：2013-08-30\n * @command date\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'date');\n * ```\n */\nUE.commands[\"time\"] = UE.commands[\"date\"] = {\n    execCommand: function (cmd, format) {\n        var date = new Date();\n\n        function formatTime(date, format) {\n            var hh = (\"0\" + date.getHours()).slice(-2),\n                ii = (\"0\" + date.getMinutes()).slice(-2),\n                ss = (\"0\" + date.getSeconds()).slice(-2);\n            format = format || \"hh:ii:ss\";\n            return format.replace(/hh/gi, hh).replace(/ii/gi, ii).replace(/ss/gi, ss);\n        }\n\n        function formatDate(date, format) {\n            var yyyy = (\"000\" + date.getFullYear()).slice(-4),\n                yy = yyyy.slice(-2),\n                mm = (\"0\" + (date.getMonth() + 1)).slice(-2),\n                dd = (\"0\" + date.getDate()).slice(-2);\n            format = format || \"yyyy-mm-dd\";\n            return format\n                .replace(/yyyy/gi, yyyy)\n                .replace(/yy/gi, yy)\n                .replace(/mm/gi, mm)\n                .replace(/dd/gi, dd);\n        }\n\n        this.execCommand(\n            \"insertHtml\",\n            cmd == \"time\" ? formatTime(date, format) : formatDate(date, format)\n        );\n    }\n};\n"
  },
  {
    "path": "_src/plugins/undo.js",
    "content": "/**\n * undo redo\n * @file\n * @since 1.2.6.1\n */\n\n/**\n * 撤销上一次执行的命令\n * @command undo\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'undo' );\n * ```\n */\n\n/**\n * 重做上一次执行的命令\n * @command redo\n * @method execCommand\n * @param { String } cmd 命令字符串\n * @example\n * ```javascript\n * editor.execCommand( 'redo' );\n * ```\n */\n\nUE.plugins[\"undo\"] = function () {\n    var saveSceneTimer;\n    var me = this,\n        maxUndoCount = me.options.maxUndoCount || 20,\n        maxInputCount = me.options.maxInputCount || 20,\n        fillchar = new RegExp(domUtils.fillChar + \"|</hr>\", \"gi\"); // ie会产生多余的</hr>\n    var noNeedFillCharTags = {\n        ol: 1,\n        ul: 1,\n        table: 1,\n        tbody: 1,\n        tr: 1,\n        body: 1\n    };\n    var orgState = me.options.autoClearEmptyNode;\n\n    function compareAddr(indexA, indexB) {\n        if (indexA.length != indexB.length) return 0;\n        for (var i = 0, l = indexA.length; i < l; i++) {\n            if (indexA[i] != indexB[i]) return 0;\n        }\n        return 1;\n    }\n\n    function compareRangeAddress(rngAddrA, rngAddrB) {\n        if (rngAddrA.collapsed != rngAddrB.collapsed) {\n            return 0;\n        }\n        if (\n            !compareAddr(rngAddrA.startAddress, rngAddrB.startAddress) ||\n            !compareAddr(rngAddrA.endAddress, rngAddrB.endAddress)\n        ) {\n            return 0;\n        }\n        return 1;\n    }\n\n    function UndoManager() {\n        this.list = [];\n        this.index = 0;\n        this.hasUndo = false;\n        this.hasRedo = false;\n        this.undo = function () {\n            if (this.hasUndo) {\n                if (!this.list[this.index - 1] && this.list.length == 1) {\n                    this.reset();\n                    return;\n                }\n                while (\n                    this.list[this.index].content == this.list[this.index - 1].content\n                    ) {\n                    this.index--;\n                    if (this.index == 0) {\n                        return this.restore(0);\n                    }\n                }\n                this.restore(--this.index);\n            }\n        };\n        this.redo = function () {\n            if (this.hasRedo) {\n                while (\n                    this.list[this.index].content == this.list[this.index + 1].content\n                    ) {\n                    this.index++;\n                    if (this.index == this.list.length - 1) {\n                        return this.restore(this.index);\n                    }\n                }\n                this.restore(++this.index);\n            }\n        };\n\n        this.restore = function () {\n            var me = this.editor;\n            var scene = this.list[this.index];\n            var root = UE.htmlparser(scene.content.replace(fillchar, \"\"));\n            me.options.autoClearEmptyNode = false;\n            me.filterInputRule(root);\n            me.options.autoClearEmptyNode = orgState;\n            //trace:873\n            //去掉展位符\n            me.document.body.innerHTML = root.toHtml();\n            me.fireEvent(\"afterscencerestore\");\n            //处理undo后空格不展位的问题\n            if (browser.ie) {\n                utils.each(\n                    domUtils.getElementsByTagName(me.document, \"td th caption p\"),\n                    function (node) {\n                        if (domUtils.isEmptyNode(node)) {\n                            domUtils.fillNode(me.document, node);\n                        }\n                    }\n                );\n            }\n\n            try {\n                var rng = new dom.Range(me.document).moveToAddress(scene.address);\n                rng.select(\n                    noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()]\n                );\n            } catch (e) {\n            }\n\n            this.update();\n            this.clearKey();\n            //不能把自己reset了\n            me.fireEvent(\"reset\", true);\n        };\n\n        this.getScene = function () {\n            var me = this.editor;\n            var rng = me.selection.getRange(),\n                rngAddress = rng.createAddress(false, true);\n            me.fireEvent(\"beforegetscene\");\n            var root = UE.htmlparser(me.body.innerHTML);\n            me.options.autoClearEmptyNode = false;\n            me.filterOutputRule(root);\n            me.options.autoClearEmptyNode = orgState;\n            var cont = root.toHtml();\n            //trace:3461\n            //这个会引起回退时导致空格丢失的情况\n            //            browser.ie && (cont = cont.replace(/>&nbsp;</g, '><').replace(/\\s*</g, '<').replace(/>\\s*/g, '>'));\n            me.fireEvent(\"aftergetscene\");\n\n            return {\n                address: rngAddress,\n                content: cont\n            };\n        };\n        this.save = function (notCompareRange, notSetCursor) {\n\n            clearTimeout(saveSceneTimer);\n            var currentScene = this.getScene(notSetCursor),\n                lastScene = this.list[this.index];\n            if (!lastScene || (lastScene && lastScene.content != currentScene.content)) {\n                // 使用异步避免直接在事件中取值滞后一个字符\n                setTimeout(function () {\n                    me.trigger(\"contentchange\");\n                }, 0);\n            }\n            //内容相同位置相同不存\n            if (\n                lastScene &&\n                lastScene.content == currentScene.content &&\n                (notCompareRange\n                    ? 1\n                    : compareRangeAddress(lastScene.address, currentScene.address))\n            ) {\n                return;\n            }\n            this.list = this.list.slice(0, this.index + 1);\n            this.list.push(currentScene);\n            //如果大于最大数量了，就把最前的剔除\n            if (this.list.length > maxUndoCount) {\n                this.list.shift();\n            }\n            this.index = this.list.length - 1;\n            this.clearKey();\n            //跟新undo/redo状态\n            this.update();\n        };\n        this.update = function () {\n            this.hasRedo = !!this.list[this.index + 1];\n            this.hasUndo = !!this.list[this.index - 1];\n        };\n        this.reset = function () {\n            this.list = [];\n            this.index = 0;\n            this.hasUndo = false;\n            this.hasRedo = false;\n            this.clearKey();\n        };\n        this.clearKey = function () {\n            keycont = 0;\n            lastKeyCode = null;\n        };\n    }\n\n    me.undoManger = new UndoManager();\n    me.undoManger.editor = me;\n\n    function saveScene() {\n        this.undoManger.save();\n    }\n\n    me.addListener(\"saveScene\", function () {\n        var args = Array.prototype.splice.call(arguments, 1);\n        this.undoManger.save.apply(this.undoManger, args);\n    });\n\n    //    me.addListener('beforeexeccommand', saveScene);\n    //    me.addListener('afterexeccommand', saveScene);\n\n    me.addListener(\"reset\", function (type, exclude) {\n        if (!exclude) {\n            this.undoManger.reset();\n        }\n    });\n    me.commands[\"redo\"] = me.commands[\"undo\"] = {\n        execCommand: function (cmdName) {\n            this.undoManger[cmdName]();\n        },\n        queryCommandState: function (cmdName) {\n            return this.undoManger[\n            \"has\" + (cmdName.toLowerCase() == \"undo\" ? \"Undo\" : \"Redo\")\n                ]\n                ? 0\n                : -1;\n        },\n        notNeedUndo: 1\n    };\n\n    var keys = {\n            //  /*Backspace*/ 8:1, /*Delete*/ 46:1,\n            /*Shift*/ 16: 1,\n            /*Ctrl*/ 17: 1,\n            /*Alt*/ 18: 1,\n            37: 1,\n            38: 1,\n            39: 1,\n            40: 1\n        },\n        keycont = 0,\n        lastKeyCode;\n    //输入法状态下不计算字符数\n    var inputType = false;\n    me.addListener(\"ready\", function () {\n        domUtils.on(this.body, \"compositionstart\", function () {\n            inputType = true;\n        });\n        domUtils.on(this.body, \"compositionend\", function () {\n            inputType = false;\n        });\n    });\n    //快捷键\n    me.addshortcutkey({\n        Undo: \"ctrl+90\", //undo\n        Redo: \"ctrl+89\" //redo\n    });\n    var isCollapsed = true;\n    me.addListener(\"keyup\", function (type, evt) {\n\n        var me = this;\n        var keyCode = evt.keyCode || evt.which;\n        if (\n            !keys[keyCode] &&\n            !evt.ctrlKey &&\n            !evt.metaKey &&\n            !evt.shiftKey &&\n            !evt.altKey\n        ) {\n            if (inputType) return;\n\n            if (!me.selection.getRange().collapsed) {\n                me.undoManger.save(false, true);\n                isCollapsed = false;\n                return;\n            }\n            if (me.undoManger.list.length === 0) {\n                me.undoManger.save(true);\n            }\n            clearTimeout(saveSceneTimer);\n\n            function save(cont) {\n                cont.undoManger.save(false, true);\n                cont.fireEvent(\"selectionchange\");\n            }\n\n            saveSceneTimer = setTimeout(function () {\n                if (inputType) {\n                    var intervalTimer = setInterval(function () {\n                        if (!inputType) {\n                            save(me);\n                            clearInterval(intervalTimer);\n                        }\n                    }, 300);\n                    return;\n                }\n                save(me);\n            }, 200);\n\n            lastKeyCode = keyCode;\n            keycont++;\n            if (keycont >= maxInputCount) {\n                save(me);\n            }\n        }\n    });\n    me.addListener(\"keyup\", function (type, evt) {\n        var keyCode = evt.keyCode || evt.which;\n        if (\n            !keys[keyCode] &&\n            !evt.ctrlKey &&\n            !evt.metaKey &&\n            !evt.shiftKey &&\n            !evt.altKey\n        ) {\n            if (inputType) return;\n            if (!isCollapsed) {\n                this.undoManger.save(false, true);\n                isCollapsed = true;\n            }\n        }\n    });\n    //扩展实例，添加关闭和开启命令undo\n    me.stopCmdUndo = function () {\n        me.__hasEnterExecCommand = true;\n    };\n    me.startCmdUndo = function () {\n        me.__hasEnterExecCommand = false;\n    };\n};\n"
  },
  {
    "path": "_src/plugins/video.js",
    "content": "/**\n * video插件， 为UEditor提供视频插入支持\n * @file\n * @since 1.2.6.1\n */\n\nUE.plugins[\"video\"] = function () {\n    var me = this;\n\n    /**\n     * 创建插入视频字符窜\n     * @param url 视频地址\n     * @param width 视频宽度\n     * @param height 视频高度\n     * @param align 视频对齐\n     * @param toEmbed 是否以flash代替显示\n     * @param addParagraph  是否需要添加P 标签\n     */\n    function creatInsertStr(url, width, height, id, align, classname, type) {\n        var str;\n        switch (type) {\n            case 'iframe':\n                str = '<iframe class=\"' + classname + '\" ' +\n                    ' src=\"' + utils.html(url) + '\" width=\"' + width + '\" height=\"' + height + '\"' +\n                    ' frameborder=0 allowfullscreen>';\n                break;\n            case \"image\":\n                str =\n                    \"<img \" +\n                    (id ? 'id=\"' + id + '\"' : \"\") +\n                    ' width=\"' +\n                    width +\n                    '\" height=\"' +\n                    height +\n                    '\" _url=\"' +\n                    url +\n                    '\" class=\"' +\n                    '\"' +\n                    ' src=\"' +\n                    me.options.UEDITOR_HOME_URL +\n                    'themes/default/images/spacer.gif\" style=\"background:url(' +\n                    me.options.UEDITOR_HOME_URL +\n                    \"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;\" +\n                    (align ? \"float:\" + align + \";\" : \"\") +\n                    '\" />';\n                break;\n            case \"embed\":\n                str =\n                    '<embed type=\"application/x-shockwave-flash\" class=\"' +\n                    classname +\n                    '\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"' +\n                    ' src=\"' +\n                    utils.html(url) +\n                    '\" width=\"' +\n                    width +\n                    '\" height=\"' +\n                    height +\n                    '\"' +\n                    (align ? ' style=\"float:' + align + '\"' : \"\") +\n                    ' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >';\n                break;\n            case \"video\":\n                var ext = url.substr(url.lastIndexOf(\".\") + 1);\n                if (ext == \"ogv\") ext = \"ogg\";\n                str =\n                    \"<video\" +\n                    (id ? ' id=\"' + id + '\"' : \"\") +\n                    ' class=\"' +\n                    classname +\n                    '\" ' +\n                    (align ? ' style=\"float:' + align + '\"' : \"\") +\n                    ' controls preload=\"none\" width=\"' +\n                    width +\n                    '\" height=\"' +\n                    height +\n                    '\" src=\"' +\n                    url +\n                    '\" data-setup=\"{}\">' +\n                    '<source src=\"' +\n                    url +\n                    '\" type=\"video/' +\n                    ext +\n                    '\" /></video>';\n                break;\n        }\n        return str;\n    }\n\n    function switchImgAndVideo(root, img2video) {\n        utils.each(\n            root.getNodesByTagName(img2video ? \"img\" : \"embed video\"),\n            function (node) {\n                var className = node.getAttr(\"class\");\n                if (className && className.indexOf(\"edui-faked-video\") != -1) {\n                    var html = creatInsertStr(\n                        img2video ? node.getAttr(\"_url\") : node.getAttr(\"src\"),\n                        node.getAttr(\"width\"),\n                        node.getAttr(\"height\"),\n                        null,\n                        node.getStyle(\"float\") || \"\",\n                        className,\n                        img2video ? \"embed\" : \"image\"\n                    );\n                    node.parentNode.replaceChild(UE.uNode.createElement(html), node);\n                }\n                if (className && className.indexOf(\"edui-upload-video\") != -1) {\n                    var html = creatInsertStr(\n                        img2video ? node.getAttr(\"_url\") : node.getAttr(\"src\"),\n                        node.getAttr(\"width\"),\n                        node.getAttr(\"height\"),\n                        null,\n                        node.getStyle(\"float\") || \"\",\n                        className,\n                        img2video ? \"video\" : \"image\"\n                    );\n                    node.parentNode.replaceChild(UE.uNode.createElement(html), node);\n                }\n            }\n        );\n    }\n\n    me.addOutputRule(function (root) {\n        switchImgAndVideo(root, true);\n    });\n    me.addInputRule(function (root) {\n        switchImgAndVideo(root);\n    });\n\n    /**\n     * 插入视频\n     * @command insertvideo\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @param { Object } videoAttr 键值对对象， 描述一个视频的所有属性\n     * @example\n     * ```javascript\n     *\n     * var videoAttr = {\n     *      //视频地址\n     *      url: 'http://www.youku.com/xxx',\n     *      //视频宽高值， 单位px\n     *      width: 200,\n     *      height: 100\n     * };\n     *\n     * //editor 是编辑器实例\n     * //向编辑器插入单个视频\n     * editor.execCommand( 'insertvideo', videoAttr );\n     * ```\n     */\n\n    /**\n     * 插入视频\n     * @command insertvideo\n     * @method execCommand\n     * @param { String } cmd 命令字符串\n     * @param { Array } videoArr 需要插入的视频的数组， 其中的每一个元素都是一个键值对对象， 描述了一个视频的所有属性\n     * @example\n     * ```javascript\n     *\n     * var videoAttr1 = {\n     *      //视频地址\n     *      url: 'http://www.youku.com/xxx',\n     *      //视频宽高值， 单位px\n     *      width: 200,\n     *      height: 100\n     * },\n     * videoAttr2 = {\n     *      //视频地址\n     *      url: 'http://www.youku.com/xxx',\n     *      //视频宽高值， 单位px\n     *      width: 200,\n     *      height: 100\n     * }\n     *\n     * //editor 是编辑器实例\n     * //该方法将会向编辑器内插入两个视频\n     * editor.execCommand( 'insertvideo', [ videoAttr1, videoAttr2 ] );\n     * ```\n     */\n\n    /**\n     * 查询当前光标所在处是否是一个视频\n     * @command insertvideo\n     * @method queryCommandState\n     * @param { String } cmd 需要查询的命令字符串\n     * @return { int } 如果当前光标所在处的元素是一个视频对象， 则返回1，否则返回0\n     * @example\n     * ```javascript\n     *\n     * //editor 是编辑器实例\n     * editor.queryCommandState( 'insertvideo' );\n     * ```\n     */\n    me.commands[\"insertvideo\"] = {\n        execCommand: function (cmd, videoObjs, type) {\n            videoObjs = utils.isArray(videoObjs) ? videoObjs : [videoObjs];\n\n            if (me.fireEvent(\"beforeinsertvideo\", videoObjs) === true) {\n                return;\n            }\n\n            var html = [],\n                id = \"tmpVideo\",\n                cl;\n            for (var i = 0, vi, len = videoObjs.length; i < len; i++) {\n                vi = videoObjs[i];\n                var videoType = 'iframe';\n                if (vi.url.match(/.mp4$/)) {\n                    videoType = 'video';\n                }\n                cl = videoType == \"iframe\"\n                    ? \"edui-video-iframe\"\n                    : \"edui-video-video\";\n                html.push(\n                    creatInsertStr(\n                        vi.url,\n                        vi.width || 420,\n                        vi.height || 280,\n                        id + i,\n                        null,\n                        cl,\n                        videoType\n                    )\n                );\n            }\n            me.execCommand(\"inserthtml\", html.join(\"\"), true);\n            var rng = this.selection.getRange();\n            // for (var i = 0, len = videoObjs.length; i < len; i++) {\n            //   var img = this.document.getElementById(\"tmpVideo\" + i);\n            //   domUtils.removeAttributes(img, \"id\");\n            //   rng.selectNode(img).select();\n            //   me.execCommand(\"imagefloat\", videoObjs[i].align);\n            // }\n\n            me.fireEvent(\"afterinsertvideo\", videoObjs);\n        },\n        queryCommandState: function () {\n            var img = me.selection.getRange().getClosedNode(),\n                flag =\n                    img &&\n                    (img.className == \"edui-video-iframe\" ||\n                        img.className.indexOf(\"edui-video-iframe\") != -1 ||\n                        img.className == \"edui-video-video\" ||\n                        img.className.indexOf(\"edui-video-video\") != -1);\n            return flag ? 1 : 0;\n        }\n    };\n};\n"
  },
  {
    "path": "_src/plugins/wordcount.js",
    "content": "///import core\n///commands 字数统计\n///commandsName  WordCount,wordCount\n///commandsTitle  字数统计\n/*\n * Created by JetBrains WebStorm.\n * User: taoqili\n * Date: 11-9-7\n * Time: 下午8:18\n * To change this template use File | Settings | File Templates.\n */\n\nUE.plugins[\"wordcount\"] = function () {\n    var me = this;\n    me.setOpt(\"wordCount\", true);\n    me.addListener(\"contentchange\", function () {\n        me.fireEvent(\"wordcount\");\n    });\n    var timer;\n    me.addListener(\"ready\", function () {\n        var me = this;\n        domUtils.on(me.body, \"keyup\", function (evt) {\n            var code = evt.keyCode || evt.which,\n                //忽略的按键,ctr,alt,shift,方向键\n                ignores = {\n                    \"16\": 1,\n                    \"18\": 1,\n                    \"20\": 1,\n                    \"37\": 1,\n                    \"38\": 1,\n                    \"39\": 1,\n                    \"40\": 1\n                };\n            if (code in ignores) return;\n            clearTimeout(timer);\n            timer = setTimeout(function () {\n                me.fireEvent(\"wordcount\");\n            }, 200);\n        });\n    });\n};\n"
  },
  {
    "path": "_src/plugins/wordimage.js",
    "content": "///import core\n///commands 本地图片引导上传\n///commandsName  WordImage\n///commandsTitle  本地图片引导上传\n///commandsDialog  dialogs\\wordimage\n\nUE.plugin.register(\"wordimage\", function () {\n    var me = this,\n        images = [];\n\n    this.addListener(\"click\", function (type, evt) {\n        var el = evt.target || evt.srcElement;\n        if ('IMG' == el.tagName && el.getAttribute('data-word-image')) {\n            me.ui._dialogs.wordimageDialog && me.ui._dialogs.wordimageDialog.open();\n        }\n    });\n\n    return {\n        commands: {\n            wordimage: {\n                execCommand: function () {\n                    var images = domUtils.getElementsByTagName(me.body, \"img\");\n                    var urlList = [];\n                    for (var i = 0, ci; (ci = images[i++]);) {\n                        var url = ci.getAttribute(\"data-word-image\");\n                        url && urlList.push(url);\n                    }\n                    return urlList;\n                },\n                queryCommandState: function () {\n                    images = domUtils.getElementsByTagName(me.body, \"img\");\n                    for (var i = 0, ci; (ci = images[i++]);) {\n                        if (ci.getAttribute(\"data-word-image\")) {\n                            return 1;\n                        }\n                    }\n                    return -1;\n                },\n                notNeedUndo: true\n            }\n        },\n        inputRule: function (root) {\n            utils.each(root.getNodesByTagName(\"img\"), function (img) {\n                var attrs = img.attrs,\n                    flag = parseInt(attrs.width) < 128 || parseInt(attrs.height) < 43,\n                    opt = me.options,\n                    src = opt.UEDITOR_HOME_URL + \"themes/default/images/spacer.gif\";\n                if (attrs[\"src\"] && /^(?:(file:\\/+))/.test(attrs[\"src\"])) {\n                    img.setAttr({\n                        width: attrs.width,\n                        height: attrs.height,\n                        alt: attrs.alt,\n                        'data-word-image': attrs.src,\n                        src: src,\n                        style:\n                            \"background:url(\" +\n                            (flag\n                                ? opt.themePath + opt.theme + \"/images/word.gif\"\n                                : opt.langPath + opt.lang + \"/images/localimage.png\") +\n                            \") no-repeat center center;border:1px solid #ddd\"\n                    });\n                }\n            });\n        }\n    };\n});\n"
  },
  {
    "path": "_src/ui/autotypesetbutton.js",
    "content": "///import core\n///import uicore\n///import ui/popup.js\n///import ui/autotypesetpicker.js\n///import ui/splitbutton.js\n(function () {\n    var utils = baidu.editor.utils,\n        Popup = baidu.editor.ui.Popup,\n        AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker,\n        SplitButton = baidu.editor.ui.SplitButton,\n        AutoTypeSetButton = (baidu.editor.ui.AutoTypeSetButton = function (options) {\n            this.initOptions(options);\n            this.initAutoTypeSetButton();\n        });\n\n    function getPara(me) {\n        var opt = {},\n            cont = me.getDom(),\n            editorId = me.editor.uid,\n            inputType = null,\n            attrName = null,\n            ipts = domUtils.getElementsByTagName(cont, \"input\");\n        for (var i = ipts.length - 1, ipt; (ipt = ipts[i--]);) {\n            inputType = ipt.getAttribute(\"type\");\n            if (inputType == \"checkbox\") {\n                attrName = ipt.getAttribute(\"name\");\n                opt[attrName] && delete opt[attrName];\n                if (ipt.checked) {\n                    var attrValue = document.getElementById(\n                        attrName + \"Value\" + editorId\n                    );\n                    if (attrValue) {\n                        if (/input/gi.test(attrValue.tagName)) {\n                            opt[attrName] = attrValue.value;\n                        } else {\n                            var iptChilds = attrValue.getElementsByTagName(\"input\");\n                            for (\n                                var j = iptChilds.length - 1, iptchild;\n                                (iptchild = iptChilds[j--]);\n                            ) {\n                                if (iptchild.checked) {\n                                    opt[attrName] = iptchild.value;\n                                    break;\n                                }\n                            }\n                        }\n                    } else {\n                        opt[attrName] = true;\n                    }\n                } else {\n                    opt[attrName] = false;\n                }\n            } else {\n                opt[ipt.getAttribute(\"value\")] = ipt.checked;\n            }\n        }\n\n        var selects = domUtils.getElementsByTagName(cont, \"select\");\n        for (var i = 0, si; (si = selects[i++]);) {\n            var attr = si.getAttribute(\"name\");\n            opt[attr] = opt[attr] ? si.value : \"\";\n        }\n\n        utils.extend(me.editor.options.autotypeset, opt);\n\n        me.editor.setPreferences(\"autotypeset\", opt);\n    }\n\n    AutoTypeSetButton.prototype = {\n        initAutoTypeSetButton: function () {\n            var me = this;\n            this.popup = new Popup({\n                //传入配置参数\n                content: new AutoTypeSetPicker({editor: me.editor}),\n                editor: me.editor,\n                hide: function () {\n                    if (!this._hidden && this.getDom()) {\n                        getPara(this);\n                        this.getDom().style.display = \"none\";\n                        this._hidden = true;\n                        this.fireEvent(\"hide\");\n                    }\n                }\n            });\n            var flag = 0;\n            this.popup.addListener(\"postRenderAfter\", function () {\n                var popupUI = this;\n                if (flag) return;\n                var cont = this.getDom(),\n                    btn = cont.getElementsByTagName(\"button\")[0];\n\n                btn.onclick = function () {\n                    getPara(popupUI);\n                    me.editor.execCommand(\"autotypeset\");\n                    popupUI.hide();\n                };\n\n                domUtils.on(cont, \"click\", function (e) {\n                    var target = e.target || e.srcElement,\n                        editorId = me.editor.uid;\n                    if (target && target.tagName == \"INPUT\") {\n                        // 点击图片浮动的checkbox,去除对应的radio\n                        if (\n                            target.name == \"imageBlockLine\" ||\n                            target.name == \"textAlign\" ||\n                            target.name == \"symbolConver\"\n                        ) {\n                            var checked = target.checked,\n                                radioTd = document.getElementById(\n                                    target.name + \"Value\" + editorId\n                                ),\n                                radios = radioTd.getElementsByTagName(\"input\"),\n                                defalutSelect = {\n                                    imageBlockLine: \"none\",\n                                    textAlign: \"left\",\n                                    symbolConver: \"tobdc\"\n                                };\n\n                            for (var i = 0; i < radios.length; i++) {\n                                if (checked) {\n                                    if (radios[i].value == defalutSelect[target.name]) {\n                                        radios[i].checked = \"checked\";\n                                    }\n                                } else {\n                                    radios[i].checked = false;\n                                }\n                            }\n                        }\n                        // 点击radio,选中对应的checkbox\n                        if (\n                            target.name == \"imageBlockLineValue\" + editorId ||\n                            target.name == \"textAlignValue\" + editorId ||\n                            target.name == \"bdc\"\n                        ) {\n                            var checkboxs = target.parentNode.previousSibling.getElementsByTagName(\n                                \"input\"\n                            );\n                            checkboxs && (checkboxs[0].checked = true);\n                        }\n\n                        getPara(popupUI);\n                    }\n                });\n\n                flag = 1;\n            });\n            this.initSplitButton();\n        }\n    };\n    utils.inherits(AutoTypeSetButton, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/autotypesetpicker.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        UIBase = baidu.editor.ui.UIBase;\n\n    var AutoTypeSetPicker = (baidu.editor.ui.AutoTypeSetPicker = function (\n        options\n    ) {\n        this.initOptions(options);\n        this.initAutoTypeSetPicker();\n    });\n    AutoTypeSetPicker.prototype = {\n        initAutoTypeSetPicker: function () {\n            this.initUIBase();\n        },\n        getHtmlTpl: function () {\n            var me = this.editor,\n                opt = me.options.autotypeset,\n                lang = me.getLang(\"autoTypeSet\");\n\n            var textAlignInputName = \"textAlignValue\" + me.uid,\n                imageBlockInputName = \"imageBlockLineValue\" + me.uid,\n                symbolConverInputName = \"symbolConverValue\" + me.uid;\n\n            return (\n                '<div id=\"##\" class=\"edui-autotypesetpicker %%\">' +\n                '<div class=\"edui-autotypesetpicker-body\">' +\n                \"<table >\" +\n                '<tr><td nowrap><input type=\"checkbox\" name=\"mergeEmptyline\" ' +\n                (opt[\"mergeEmptyline\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.mergeLine +\n                '</td><td colspan=\"2\"><input type=\"checkbox\" name=\"removeEmptyline\" ' +\n                (opt[\"removeEmptyline\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.delLine +\n                \"</td></tr>\" +\n                '<tr><td nowrap><input type=\"checkbox\" name=\"removeClass\" ' +\n                (opt[\"removeClass\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.removeFormat +\n                '</td><td colspan=\"2\"><input type=\"checkbox\" name=\"indent\" ' +\n                (opt[\"indent\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.indent +\n                \"</td></tr>\" +\n                \"<tr>\" +\n                '<td nowrap><input type=\"checkbox\" name=\"textAlign\" ' +\n                (opt[\"textAlign\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.alignment +\n                \"</td>\" +\n                '<td colspan=\"2\" id=\"' +\n                textAlignInputName +\n                '\">' +\n                '<input type=\"radio\" name=\"' +\n                textAlignInputName +\n                '\" value=\"left\" ' +\n                (opt[\"textAlign\"] && opt[\"textAlign\"] == \"left\" ? \"checked\" : \"\") +\n                \">\" +\n                me.getLang(\"justifyleft\") +\n                '<input type=\"radio\" name=\"' +\n                textAlignInputName +\n                '\" value=\"center\" ' +\n                (opt[\"textAlign\"] && opt[\"textAlign\"] == \"center\" ? \"checked\" : \"\") +\n                \">\" +\n                me.getLang(\"justifycenter\") +\n                '<input type=\"radio\" name=\"' +\n                textAlignInputName +\n                '\" value=\"right\" ' +\n                (opt[\"textAlign\"] && opt[\"textAlign\"] == \"right\" ? \"checked\" : \"\") +\n                \">\" +\n                me.getLang(\"justifyright\") +\n                \"</td>\" +\n                \"</tr>\" +\n                \"<tr>\" +\n                '<td nowrap><input type=\"checkbox\" name=\"imageBlockLine\" ' +\n                (opt[\"imageBlockLine\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.imageFloat +\n                \"</td>\" +\n                '<td nowrap id=\"' +\n                imageBlockInputName +\n                '\">' +\n                '<input type=\"radio\" name=\"' +\n                imageBlockInputName +\n                '\" value=\"none\" ' +\n                (opt[\"imageBlockLine\"] && opt[\"imageBlockLine\"] == \"none\"\n                    ? \"checked\"\n                    : \"\") +\n                \">\" +\n                me.getLang(\"default\") +\n                '<input type=\"radio\" name=\"' +\n                imageBlockInputName +\n                '\" value=\"left\" ' +\n                (opt[\"imageBlockLine\"] && opt[\"imageBlockLine\"] == \"left\"\n                    ? \"checked\"\n                    : \"\") +\n                \">\" +\n                me.getLang(\"justifyleft\") +\n                '<input type=\"radio\" name=\"' +\n                imageBlockInputName +\n                '\" value=\"center\" ' +\n                (opt[\"imageBlockLine\"] && opt[\"imageBlockLine\"] == \"center\"\n                    ? \"checked\"\n                    : \"\") +\n                \">\" +\n                me.getLang(\"justifycenter\") +\n                '<input type=\"radio\" name=\"' +\n                imageBlockInputName +\n                '\" value=\"right\" ' +\n                (opt[\"imageBlockLine\"] && opt[\"imageBlockLine\"] == \"right\"\n                    ? \"checked\"\n                    : \"\") +\n                \">\" +\n                me.getLang(\"justifyright\") +\n                \"</td>\" +\n                \"</tr>\" +\n                '<tr><td nowrap><input type=\"checkbox\" name=\"clearFontSize\" ' +\n                (opt[\"clearFontSize\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.removeFontsize +\n                '</td><td colspan=\"2\"><input type=\"checkbox\" name=\"clearFontFamily\" ' +\n                (opt[\"clearFontFamily\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.removeFontFamily +\n                \"</td></tr>\" +\n                '<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"removeEmptyNode\" ' +\n                (opt[\"removeEmptyNode\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.removeHtml +\n                \"</td></tr>\" +\n                '<tr><td nowrap colspan=\"3\"><input type=\"checkbox\" name=\"pasteFilter\" ' +\n                (opt[\"pasteFilter\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.pasteFilter +\n                \"</td></tr>\" +\n                \"<tr>\" +\n                '<td nowrap><input type=\"checkbox\" name=\"symbolConver\" ' +\n                (opt[\"bdc2sb\"] || opt[\"tobdc\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.symbol +\n                \"</td>\" +\n                '<td id=\"' +\n                symbolConverInputName +\n                '\">' +\n                '<input type=\"radio\" name=\"bdc\" value=\"bdc2sb\" ' +\n                (opt[\"bdc2sb\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.bdc2sb +\n                '<input type=\"radio\" name=\"bdc\" value=\"tobdc\" ' +\n                (opt[\"tobdc\"] ? \"checked\" : \"\") +\n                \">\" +\n                lang.tobdc +\n                \"\" +\n                \"</td>\" +\n                '<td nowrap align=\"right\"><button >' +\n                lang.run +\n                \"</button></td>\" +\n                \"</tr>\" +\n                \"</table>\" +\n                \"</div>\" +\n                \"</div>\"\n            );\n        },\n        _UIBase_render: UIBase.prototype.render\n    };\n    utils.inherits(AutoTypeSetPicker, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/breakline.js",
    "content": "(function () {\n    var utils = baidu.editor.utils,\n        UIBase = baidu.editor.ui.UIBase,\n        Breakline = (baidu.editor.ui.Breakline = function (options) {\n            this.initOptions(options);\n            this.initSeparator();\n        });\n    Breakline.prototype = {\n        uiName: \"Breakline\",\n        initSeparator: function () {\n            this.initUIBase();\n        },\n        getHtmlTpl: function () {\n            return \"<br/>\";\n        }\n    };\n    utils.inherits(Breakline, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/button.js",
    "content": "///import core\n///import uicore\n///import ui/stateful.js\n(function () {\n    var utils = baidu.editor.utils,\n        UIBase = baidu.editor.ui.UIBase,\n        Stateful = baidu.editor.ui.Stateful,\n        Button = (baidu.editor.ui.Button = function (options) {\n            if (options.name) {\n                var btnName = options.name;\n                var cssRules = options.cssRules;\n                if (!options.className) {\n                    options.className = \"edui-for-\" + btnName;\n                }\n                options.cssRules =\n                    \".edui-\" +\n                    (options.theme || \"default\") +\n                    \" .edui-toolbar .edui-button.edui-for-\" +\n                    btnName +\n                    \" .edui-icon {\" +\n                    cssRules +\n                    \"}\";\n            }\n            this.initOptions(options);\n            this.initButton();\n        });\n    Button.prototype = {\n        uiName: \"button\",\n        label: \"\",\n        title: \"\",\n        showIcon: true,\n        showText: true,\n        cssRules: \"\",\n        initButton: function () {\n            this.initUIBase();\n            this.Stateful_init();\n            if (this.cssRules) {\n                utils.cssRule(\"edui-customize-\" + this.name + \"-style\", this.cssRules);\n            }\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"edui-box %%\">' +\n                '<div id=\"##_state\" stateful>' +\n                '<div class=\"%%-wrap\"><div id=\"##_body\" unselectable=\"on\" ' +\n                (this.title ? 'title=\"' + this.title + '\"' : \"\") +\n                ' class=\"%%-body\" onmousedown=\"return $$._onMouseDown(event, this);\" onclick=\"return $$._onClick(event, this);\">' +\n                (this.showIcon ? '<div class=\"edui-box edui-icon\"></div>' : \"\") +\n                (this.showText\n                    ? '<div class=\"edui-box edui-label\">' + this.label + \"</div>\"\n                    : \"\") +\n                \"</div>\" +\n                \"</div>\" +\n                \"</div></div>\"\n            );\n        },\n        postRender: function () {\n            this.Stateful_postRender();\n            this.setDisabled(this.disabled);\n        },\n        _onMouseDown: function (e) {\n            var target = e.target || e.srcElement,\n                tagName = target && target.tagName && target.tagName.toLowerCase();\n            if (tagName == \"input\" || tagName == \"object\" || tagName == \"object\") {\n                return false;\n            }\n        },\n        _onClick: function () {\n            if (!this.isDisabled()) {\n                this.fireEvent(\"click\");\n            }\n        },\n        setTitle: function (text) {\n            var label = this.getDom(\"label\");\n            label.innerHTML = text;\n        }\n    };\n    utils.inherits(Button, UIBase);\n    utils.extend(Button.prototype, Stateful);\n})();\n"
  },
  {
    "path": "_src/ui/cellalignpicker.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        Popup = baidu.editor.ui.Popup,\n        Stateful = baidu.editor.ui.Stateful,\n        UIBase = baidu.editor.ui.UIBase;\n\n    /**\n     * 该参数将新增一个参数： selected， 参数类型为一个Object， 形如{ 'align': 'center', 'valign': 'top' }， 表示单元格的初始\n     * 对齐状态为： 竖直居上，水平居中; 其中 align的取值为：'center', 'left', 'right'; valign的取值为: 'top', 'middle', 'bottom'\n     * @update 2013/4/2 hancong03@baidu.com\n     */\n    var CellAlignPicker = (baidu.editor.ui.CellAlignPicker = function (options) {\n        this.initOptions(options);\n        this.initSelected();\n        this.initCellAlignPicker();\n    });\n    CellAlignPicker.prototype = {\n        //初始化选中状态， 该方法将根据传递进来的参数获取到应该选中的对齐方式图标的索引\n        initSelected: function () {\n            var status = {\n                    valign: {\n                        top: 0,\n                        middle: 1,\n                        bottom: 2\n                    },\n                    align: {\n                        left: 0,\n                        center: 1,\n                        right: 2\n                    },\n                    count: 3\n                },\n                result = -1;\n\n            if (this.selected) {\n                this.selectedIndex =\n                    status.valign[this.selected.valign] * status.count +\n                    status.align[this.selected.align];\n            }\n        },\n        initCellAlignPicker: function () {\n            this.initUIBase();\n            this.Stateful_init();\n        },\n        getHtmlTpl: function () {\n            var alignType = [\"left\", \"center\", \"right\"],\n                COUNT = 9,\n                tempClassName = null,\n                tempIndex = -1,\n                tmpl = [];\n\n            for (var i = 0; i < COUNT; i++) {\n                tempClassName = this.selectedIndex === i\n                    ? ' class=\"edui-cellalign-selected\" '\n                    : \"\";\n                tempIndex = i % 3;\n\n                tempIndex === 0 && tmpl.push(\"<tr>\");\n\n                tmpl.push(\n                    '<td index=\"' +\n                    i +\n                    '\" ' +\n                    tempClassName +\n                    ' stateful><div class=\"edui-icon edui-' +\n                    alignType[tempIndex] +\n                    '\"></div></td>'\n                );\n\n                tempIndex === 2 && tmpl.push(\"</tr>\");\n            }\n\n            return (\n                '<div id=\"##\" class=\"edui-cellalignpicker %%\">' +\n                '<div class=\"edui-cellalignpicker-body\">' +\n                '<table onclick=\"$$._onClick(event);\">' +\n                tmpl.join(\"\") +\n                \"</table>\" +\n                \"</div>\" +\n                \"</div>\"\n            );\n        },\n        getStateDom: function () {\n            return this.target;\n        },\n        _onClick: function (evt) {\n            var target = evt.target || evt.srcElement;\n            if (/icon/.test(target.className)) {\n                this.items[target.parentNode.getAttribute(\"index\")].onclick();\n                Popup.postHide(evt);\n            }\n        },\n        _UIBase_render: UIBase.prototype.render\n    };\n    utils.inherits(CellAlignPicker, UIBase);\n    utils.extend(CellAlignPicker.prototype, Stateful, true);\n})();\n"
  },
  {
    "path": "_src/ui/colorbutton.js",
    "content": "///import core\n///import uicore\n///import ui/colorpicker.js\n///import ui/popup.js\n///import ui/splitbutton.js\n(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        ColorPicker = baidu.editor.ui.ColorPicker,\n        Popup = baidu.editor.ui.Popup,\n        SplitButton = baidu.editor.ui.SplitButton,\n        ColorButton = (baidu.editor.ui.ColorButton = function (options) {\n            this.initOptions(options);\n            this.initColorButton();\n        });\n    ColorButton.prototype = {\n        initColorButton: function () {\n            var me = this;\n            this.popup = new Popup({\n                content: new ColorPicker({\n                    noColorText: me.editor.getLang(\"clearColor\"),\n                    editor: me.editor,\n                    onpickcolor: function (t, color) {\n                        me._onPickColor(color);\n                    },\n                    onpicknocolor: function (t, color) {\n                        me._onPickNoColor(color);\n                    }\n                }),\n                editor: me.editor\n            });\n            this.initSplitButton();\n        },\n        _SplitButton_postRender: SplitButton.prototype.postRender,\n        postRender: function () {\n            this._SplitButton_postRender();\n            this.getDom(\"button_body\").appendChild(\n                uiUtils.createElementByHtml(\n                    '<div id=\"' + this.id + '_colorlump\" class=\"edui-colorlump\"></div>'\n                )\n            );\n            this.getDom().className += \" edui-colorbutton\";\n        },\n        setColor: function (color) {\n            this.getDom(\"colorlump\").style.backgroundColor = color;\n            this.color = color;\n        },\n        _onPickColor: function (color) {\n            if (this.fireEvent(\"pickcolor\", color) !== false) {\n                this.setColor(color);\n                this.popup.hide();\n            }\n        },\n        _onPickNoColor: function (color) {\n            if (this.fireEvent(\"picknocolor\") !== false) {\n                this.popup.hide();\n            }\n        },\n    };\n    utils.inherits(ColorButton, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/colorpicker.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        UIBase = baidu.editor.ui.UIBase,\n        ColorPicker = (baidu.editor.ui.ColorPicker = function (options) {\n            this.initOptions(options);\n            this.noColorText = this.noColorText || this.editor.getLang(\"clearColor\");\n            this.initUIBase();\n        });\n\n    ColorPicker.prototype = {\n        getHtmlTpl: function () {\n            return genColorPicker(this.noColorText, this.editor);\n        },\n        _onTableClick: function (evt) {\n            var tgt = evt.target || evt.srcElement;\n            var color = tgt.getAttribute(\"data-color\");\n            if (color) {\n                this.fireEvent(\"pickcolor\", color);\n            }\n        },\n        _onTableOver: function (evt) {\n            var tgt = evt.target || evt.srcElement;\n            var color = tgt.getAttribute(\"data-color\");\n            if (color) {\n                this.getDom(\"preview\").style.backgroundColor = color;\n            }\n        },\n        _onTableOut: function () {\n            this.getDom(\"preview\").style.backgroundColor = \"\";\n        },\n        _onPickNoColor: function () {\n            this.fireEvent(\"picknocolor\");\n        },\n        _onColorSelect: function (evt) {\n            var input = evt.target || evt.srcElement;\n            var color = input.value;\n            if (color) {\n                this.fireEvent(\"pickcolor\", color);\n            }\n        }\n    };\n    utils.inherits(ColorPicker, UIBase);\n\n    var COLORS = (\"ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,\" +\n        \"f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,\" +\n        \"d8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,\" +\n        \"bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,\" +\n        \"a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,\" +\n        \"7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,\" +\n        \"c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,\").split(\n        \",\"\n    );\n\n    function genColorPicker(noColorText, editor) {\n        var html =\n            '<div id=\"##\" class=\"edui-colorpicker %%\">' +\n            '<div class=\"edui-colorpicker-topbar edui-clearfix\">' +\n            // '<div unselectable=\"on\" id=\"##_preview\" class=\"edui-colorpicker-preview\"></div>' +\n            '<div id=\"##_preview\" class=\"edui-colorpicker-preview\"><input type=\"color\" id=\"##_input\" onchange=\"$$._onColorSelect(event,this);\" /></div>' +\n            '<div unselectable=\"on\" class=\"edui-colorpicker-nocolor\" onclick=\"$$._onPickNoColor(event, this);\">' +\n            noColorText +\n            \"</div>\" +\n            \"</div>\" +\n            '<table  class=\"edui-box\" style=\"border-collapse: collapse;\" onmouseover=\"$$._onTableOver(event, this);\" onmouseout=\"$$._onTableOut(event, this);\" onclick=\"return $$._onTableClick(event, this);\" cellspacing=\"0\" cellpadding=\"0\">' +\n            '<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px\"><td colspan=\"10\">' +\n            editor.getLang(\"themeColor\") +\n            \"</td> </tr>\" +\n            '<tr class=\"edui-colorpicker-tablefirstrow\" >';\n        for (var i = 0; i < COLORS.length; i++) {\n            if (i && i % 10 === 0) {\n                html +=\n                    \"</tr>\" +\n                    (i == 60\n                        ? '<tr style=\"border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;\"><td colspan=\"10\">' +\n                        editor.getLang(\"standardColor\") +\n                        \"</td></tr>\"\n                        : \"\") +\n                    \"<tr\" +\n                    (i == 60 ? ' class=\"edui-colorpicker-tablefirstrow\"' : \"\") +\n                    \">\";\n            }\n            html += i < 70\n                ? '<td style=\"padding:2px 2px;\"><a hidefocus title=\"' +\n                COLORS[i] +\n                '\" onclick=\"return false;\" href=\"javascript:\" unselectable=\"on\" class=\"edui-box edui-colorpicker-colorcell\"' +\n                ' data-color=\"#' +\n                COLORS[i] +\n                '\"' +\n                ' style=\"background-color:#' +\n                COLORS[i] +\n                \";border:solid #ccc 1px;\" +\n                '\"' +\n                \"></a></td>\"\n                : \"\";\n        }\n        html += \"</tr>\";\n        html += \"</table></div>\";\n        return html;\n    }\n})();\n"
  },
  {
    "path": "_src/ui/combox.js",
    "content": "///import core\n///import uicore\n///import ui/menu.js\n///import ui/splitbutton.js\n(function () {\n    // todo: menu和item提成通用list\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        Menu = baidu.editor.ui.Menu,\n        SplitButton = baidu.editor.ui.SplitButton,\n        Combox = (baidu.editor.ui.Combox = function (options) {\n            this.initOptions(options);\n            this.initCombox();\n        });\n    Combox.prototype = {\n        uiName: \"combox\",\n        onbuttonclick: function () {\n            this.showPopup();\n        },\n        initCombox: function () {\n            var me = this;\n            this.items = this.items || [];\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                item.uiName = \"listitem\";\n                item.index = i;\n                item.onclick = function () {\n                    me.selectByIndex(this.index);\n                };\n            }\n            this.popup = new Menu({\n                items: this.items,\n                uiName: \"list\",\n                editor: this.editor,\n                captureWheel: true,\n                combox: this\n            });\n\n            this.initSplitButton();\n        },\n        _SplitButton_postRender: SplitButton.prototype.postRender,\n        postRender: function () {\n            this._SplitButton_postRender();\n            this.setLabel(this.label || \"\");\n            this.setValue(this.initValue || \"\");\n        },\n        showPopup: function () {\n            var rect = uiUtils.getClientRect(this.getDom());\n            rect.top += 1;\n            rect.bottom -= 1;\n            rect.height -= 2;\n            this.popup.showAnchorRect(rect);\n        },\n        getValue: function () {\n            return this.value;\n        },\n        setValue: function (value) {\n            var index = this.indexByValue(value);\n            if (index != -1) {\n                this.selectedIndex = index;\n                this.setLabel(this.items[index].label);\n                this.value = this.items[index].value;\n            } else {\n                this.selectedIndex = -1;\n                this.setLabel(this.getLabelForUnknowValue(value));\n                this.value = value;\n            }\n        },\n        setLabel: function (label) {\n            this.getDom(\"button_body\").innerHTML = label;\n            this.label = label;\n        },\n        getLabelForUnknowValue: function (value) {\n            return value;\n        },\n        indexByValue: function (value) {\n            for (var i = 0; i < this.items.length; i++) {\n                if (value == this.items[i].value) {\n                    return i;\n                }\n            }\n            return -1;\n        },\n        getItem: function (index) {\n            return this.items[index];\n        },\n        selectByIndex: function (index) {\n            if (\n                index < this.items.length &&\n                this.fireEvent(\"select\", index) !== false\n            ) {\n                this.selectedIndex = index;\n                this.value = this.items[index].value;\n                this.setLabel(this.items[index].label);\n            }\n        }\n    };\n    utils.inherits(Combox, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/dialog.js",
    "content": "///import core\n///import uicore\n///import ui/mask.js\n///import ui/button.js\n(function () {\n    var utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        Mask = baidu.editor.ui.Mask,\n        UIBase = baidu.editor.ui.UIBase,\n        Button = baidu.editor.ui.Button,\n        Dialog = (baidu.editor.ui.Dialog = function (options) {\n            if (options.name) {\n                var name = options.name;\n                var cssRules = options.cssRules;\n                if (!options.className) {\n                    options.className = \"edui-for-\" + name;\n                }\n                if (cssRules) {\n                    options.cssRules =\n                        \".edui-for-\" + name + \" .edui-dialog-content  {\" + cssRules + \"}\";\n                }\n            }\n            this.initOptions(\n                utils.extend(\n                    {\n                        autoReset: true,\n                        draggable: true,\n                        onok: function () {\n                        },\n                        oncancel: function () {\n                        },\n                        onclose: function (t, ok) {\n                            return ok ? this.onok() : this.oncancel();\n                        },\n                        //是否控制dialog中的scroll事件， 默认为不阻止\n                        holdScroll: false\n                    },\n                    options\n                )\n            );\n            this.initDialog();\n        });\n    var modalMask;\n    var dragMask;\n    var activeDialog;\n    Dialog.prototype = {\n        draggable: false,\n        uiName: \"dialog\",\n        initDialog: function () {\n            var me = this,\n                theme = this.editor.options.theme;\n            if (this.cssRules) {\n                this.cssRules = \".edui-\" + theme + \" \" + this.cssRules;\n                utils.cssRule(\"edui-customize-\" + this.name + \"-style\", this.cssRules);\n            }\n            this.initUIBase();\n            this.modalMask =\n                modalMask ||\n                (modalMask = new Mask({\n                    className: \"edui-dialog-modalmask\",\n                    theme: theme,\n                    onclick: function () {\n                        activeDialog && activeDialog.close(false);\n                    }\n                }));\n            this.dragMask =\n                dragMask ||\n                (dragMask = new Mask({\n                    className: \"edui-dialog-dragmask\",\n                    theme: theme\n                }));\n            this.closeButton = new Button({\n                className: \"edui-dialog-closebutton\",\n                title: me.closeDialog,\n                theme: theme,\n                onclick: function () {\n                    me.close(false);\n                }\n            });\n\n            this.fullscreen && this.initResizeEvent();\n\n            if (this.buttons) {\n                for (var i = 0; i < this.buttons.length; i++) {\n                    if (!(this.buttons[i] instanceof Button)) {\n                        this.buttons[i] = new Button(\n                            utils.extend(\n                                this.buttons[i],\n                                {\n                                    editor: this.editor\n                                },\n                                true\n                            )\n                        );\n                    }\n                }\n            }\n        },\n        initResizeEvent: function () {\n            var me = this;\n\n\n            domUtils.on(window, \"resize\", function () {\n\n                if (me._hidden || me._hidden === undefined) {\n                    return;\n                }\n\n                if (me.__resizeTimer) {\n                    window.clearTimeout(me.__resizeTimer);\n                }\n\n                me.__resizeTimer = window.setTimeout(function () {\n                    me.__resizeTimer = null;\n\n\n                    var dialogWrapNode = me.getDom(),\n                        contentNode = me.getDom(\"content\"),\n                        wrapRect = UE.ui.uiUtils.getClientRect(dialogWrapNode),\n                        contentRect = UE.ui.uiUtils.getClientRect(contentNode),\n                        vpRect = uiUtils.getViewportRect();\n\n                    contentNode.style.width =\n                        vpRect.width - wrapRect.width + contentRect.width + \"px\";\n                    contentNode.style.height =\n                        vpRect.height - wrapRect.height + contentRect.height + \"px\";\n\n                    dialogWrapNode.style.width = vpRect.width + \"px\";\n                    dialogWrapNode.style.height = vpRect.height + \"px\";\n\n                    me.fireEvent(\"resize\");\n                }, 100);\n            });\n        },\n        fitSize: function () {\n            // console.log('fitSize.dialog')\n            var popBodyEl = this.getDom(\"body\");\n            var $foot = popBodyEl.querySelector('.edui-dialog-foot');\n            var headHeight = 30;\n            var footHeight = 50;\n            var heightWithoutBody = headHeight + footHeight;\n            if (!$foot) {\n                heightWithoutBody -= footHeight;\n            }\n            var size = this.mesureSize();\n            var winSize = uiUtils.getViewportRect();\n            var width = size.width;\n            var height = size.height - heightWithoutBody;\n            var maxWidth = winSize.width - 2;\n            var maxHeight = winSize.height - heightWithoutBody - 2;\n            if (width > maxWidth) {\n                height = height * maxWidth / width;\n                width = maxWidth;\n            }\n            if (height > maxHeight) {\n                width = width * maxHeight / height;\n                height = maxHeight;\n            }\n            var scale = (width / size.width);\n            // console.log('size', {sizeWidth: size.width, sizeHeight: size.height, width, height, scale});\n            // console.log('popBodyEl',popBodyEl, popBodyEl.querySelector('.edui-dialog-foot'));\n            // window._xxx = popBodyEl;\n            var $content = popBodyEl.querySelector('.edui-dialog-content');\n            if (!$content.dataset.dialogScaled) {\n                $content.dataset.dialogScaled = true\n                $content.style.width = (width) + 'px';\n                $content.style.height = (height) + 'px';\n                var $iframe = popBodyEl.querySelector('.edui-dialog-content iframe');\n                $iframe.style.width = (size.width) + 'px';\n                $iframe.style.height = (size.height - heightWithoutBody) + 'px';\n                $iframe.style.transformOrigin = '0 0';\n                $iframe.style.transform = 'scale(' + scale + ')';\n                size.width = width\n                size.height = height + heightWithoutBody\n            }\n            popBodyEl.style.width = size.width + \"px\";\n            popBodyEl.style.height = size.height + \"px\";\n            return size;\n        },\n        safeSetOffset: function (offset) {\n            var me = this;\n            var el = me.getDom();\n            var vpRect = uiUtils.getViewportRect();\n            var rect = uiUtils.getClientRect(el);\n            var left = offset.left;\n            if (left + rect.width > vpRect.right) {\n                left = vpRect.right - rect.width;\n            }\n            var top = offset.top;\n            if (top + rect.height > vpRect.bottom) {\n                top = vpRect.bottom - rect.height;\n            }\n            el.style.left = Math.max(left, 0) + \"px\";\n            el.style.top = Math.max(top, 0) + \"px\";\n        },\n        showAtCenter: function () {\n            var vpRect = uiUtils.getViewportRect();\n\n            if (!this.fullscreen) {\n                this.getDom().style.display = \"\";\n                var popSize = this.fitSize();\n                var titleHeight = this.getDom(\"titlebar\").offsetHeight | 0;\n                var left = vpRect.width / 2 - popSize.width / 2;\n                var top =\n                    vpRect.height / 2 - (popSize.height - titleHeight) / 2 - titleHeight;\n                var popEl = this.getDom();\n                this.safeSetOffset({\n                    left: Math.max(left | 0, 0),\n                    top: Math.max(top | 0, 0)\n                });\n                if (!domUtils.hasClass(popEl, \"edui-state-centered\")) {\n                    popEl.className += \" edui-state-centered\";\n                }\n            } else {\n                var dialogWrapNode = this.getDom(),\n                    contentNode = this.getDom(\"content\");\n\n                dialogWrapNode.style.display = \"block\";\n\n                var wrapRect = UE.ui.uiUtils.getClientRect(dialogWrapNode),\n                    contentRect = UE.ui.uiUtils.getClientRect(contentNode);\n                dialogWrapNode.style.left = \"-100000px\";\n\n                contentNode.style.width =\n                    vpRect.width - wrapRect.width + contentRect.width + \"px\";\n                contentNode.style.height =\n                    vpRect.height - wrapRect.height + contentRect.height + \"px\";\n\n                dialogWrapNode.style.width = vpRect.width + \"px\";\n                dialogWrapNode.style.height = vpRect.height + \"px\";\n                dialogWrapNode.style.left = 0;\n\n                //保存环境的overflow值\n                this._originalContext = {\n                    html: {\n                        overflowX: document.documentElement.style.overflowX,\n                        overflowY: document.documentElement.style.overflowY\n                    },\n                    body: {\n                        overflowX: document.body.style.overflowX,\n                        overflowY: document.body.style.overflowY\n                    }\n                };\n\n                document.documentElement.style.overflowX = \"hidden\";\n                document.documentElement.style.overflowY = \"hidden\";\n                document.body.style.overflowX = \"hidden\";\n                document.body.style.overflowY = \"hidden\";\n            }\n\n            this._show();\n        },\n        getContentHtml: function () {\n            var contentHtml = \"\";\n            if (typeof this.content == \"string\") {\n                contentHtml = this.content;\n            } else if (this.iframeUrl) {\n                contentHtml =\n                    '<span id=\"' +\n                    this.id +\n                    '_contmask\" class=\"dialogcontmask\"></span><iframe id=\"' +\n                    this.id +\n                    '_iframe\" class=\"%%-iframe\" height=\"100%\" width=\"100%\" frameborder=\"0\" src=\"' +\n                    this.iframeUrl +\n                    '\"></iframe>';\n            }\n            return contentHtml;\n        },\n        getHtmlTpl: function () {\n            var footHtml = \"\";\n\n            if (this.buttons) {\n                var buff = [];\n                for (var i = 0; i < this.buttons.length; i++) {\n                    buff[i] = this.buttons[i].renderHtml();\n                }\n                footHtml =\n                    '<div class=\"%%-foot\">' +\n                    '<div id=\"##_buttons\" class=\"%%-buttons\">' +\n                    buff.join(\"\") +\n                    \"</div>\" +\n                    \"</div>\";\n            }\n\n            return (\n                '<div id=\"##\" class=\"%%\"><div ' +\n                (!this.fullscreen\n                    ? 'class=\"%%\"'\n                    : 'class=\"%%-wrap edui-dialog-fullscreen-flag\"') +\n                '><div id=\"##_body\" class=\"%%-body\">' +\n                '<div class=\"%%-shadow\"></div>' +\n                '<div id=\"##_titlebar\" class=\"%%-titlebar\">' +\n                '<div class=\"%%-draghandle\" onmousedown=\"$$._onTitlebarMouseDown(event, this);\">' +\n                '<span class=\"%%-caption\">' +\n                (this.title || \"\") +\n                \"</span>\" +\n                \"</div>\" +\n                this.closeButton.renderHtml() +\n                \"</div>\" +\n                '<div id=\"##_content\" class=\"%%-content\">' +\n                (this.autoReset ? \"\" : this.getContentHtml()) +\n                \"</div>\" +\n                footHtml +\n                \"</div></div></div>\"\n            );\n        },\n        postRender: function () {\n            // todo: 保持居中/记住上次关闭位置选项\n            if (!this.modalMask.getDom()) {\n                this.modalMask.render();\n                this.modalMask.hide();\n            }\n            if (!this.dragMask.getDom()) {\n                this.dragMask.render();\n                this.dragMask.hide();\n            }\n            var me = this;\n            this.addListener(\"show\", function () {\n                me.modalMask.show(this.getDom().style.zIndex - 2);\n            });\n            this.addListener(\"hide\", function () {\n                me.modalMask.hide();\n            });\n            if (this.buttons) {\n                for (var i = 0; i < this.buttons.length; i++) {\n                    this.buttons[i].postRender();\n                }\n            }\n            domUtils.on(window, \"resize\", function () {\n                setTimeout(function () {\n                    if (!me.isHidden()) {\n                        me.safeSetOffset(uiUtils.getClientRect(me.getDom()));\n                    }\n                });\n            });\n\n            //hold住scroll事件，防止dialog的滚动影响页面\n            //            if( this.holdScroll ) {\n            //\n            //                if( !me.iframeUrl ) {\n            //                    domUtils.on( document.getElementById( me.id + \"_iframe\"), !browser.gecko ? \"mousewheel\" : \"DOMMouseScroll\", function(e){\n            //                        domUtils.preventDefault(e);\n            //                    } );\n            //                } else {\n            //                    me.addListener('dialogafterreset', function(){\n            //                        window.setTimeout(function(){\n            //                            var iframeWindow = document.getElementById( me.id + \"_iframe\").contentWindow;\n            //\n            //                            if( browser.ie ) {\n            //\n            //                                var timer = window.setInterval(function(){\n            //\n            //                                    if( iframeWindow.document && iframeWindow.document.body ) {\n            //                                        window.clearInterval( timer );\n            //                                        timer = null;\n            //                                        domUtils.on( iframeWindow.document.body, !browser.gecko ? \"mousewheel\" : \"DOMMouseScroll\", function(e){\n            //                                            domUtils.preventDefault(e);\n            //                                        } );\n            //                                    }\n            //\n            //                                }, 100);\n            //\n            //                            } else {\n            //                                domUtils.on( iframeWindow, !browser.gecko ? \"mousewheel\" : \"DOMMouseScroll\", function(e){\n            //                                    domUtils.preventDefault(e);\n            //                                } );\n            //                            }\n            //\n            //                        }, 1);\n            //                    });\n            //                }\n            //\n            //            }\n            this._hide();\n        },\n        mesureSize: function () {\n            var body = this.getDom(\"body\");\n            var width = uiUtils.getClientRect(this.getDom(\"content\")).width;\n            var dialogBodyStyle = body.style;\n            dialogBodyStyle.width = width;\n            // console.log('getClientRect', body)\n            return uiUtils.getClientRect(body);\n        },\n        _onTitlebarMouseDown: function (evt, el) {\n            if (this.draggable) {\n                var rect;\n                var vpRect = uiUtils.getViewportRect();\n                var me = this;\n                uiUtils.startDrag(evt, {\n                    ondragstart: function () {\n                        rect = uiUtils.getClientRect(me.getDom());\n                        me.getDom(\"contmask\").style.visibility = \"visible\";\n                        me.dragMask.show(me.getDom().style.zIndex - 1);\n                    },\n                    ondragmove: function (x, y) {\n                        var left = rect.left + x;\n                        var top = rect.top + y;\n                        me.safeSetOffset({\n                            left: left,\n                            top: top\n                        });\n                    },\n                    ondragstop: function () {\n                        me.getDom(\"contmask\").style.visibility = \"hidden\";\n                        domUtils.removeClasses(me.getDom(), [\"edui-state-centered\"]);\n                        me.dragMask.hide();\n                    }\n                });\n            }\n        },\n        reset: function () {\n            this.getDom(\"content\").innerHTML = this.getContentHtml();\n            this.fireEvent(\"dialogafterreset\");\n        },\n        _show: function () {\n            if (this._hidden) {\n                this.getDom().style.display = \"\";\n\n                //要高过编辑器的zindxe\n                this.editor.container.style.zIndex &&\n                (this.getDom().style.zIndex =\n                    this.editor.container.style.zIndex * 1 + 10);\n                this._hidden = false;\n                this.fireEvent(\"show\");\n                baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex =\n                    this.getDom().style.zIndex - 4;\n            }\n        },\n        isHidden: function () {\n            return this._hidden;\n        },\n        _hide: function () {\n            if (!this._hidden) {\n                var wrapNode = this.getDom();\n                wrapNode.style.display = \"none\";\n                wrapNode.style.zIndex = \"\";\n                wrapNode.style.width = \"\";\n                wrapNode.style.height = \"\";\n                this._hidden = true;\n                this.fireEvent(\"hide\");\n            }\n        },\n        open: function () {\n            if (this.autoReset) {\n                //有可能还没有渲染\n                try {\n                    this.reset();\n                } catch (e) {\n                    this.render();\n                    this.open();\n                }\n            }\n            this.showAtCenter();\n            if (this.iframeUrl) {\n                try {\n                    this.getDom(\"iframe\").focus();\n                } catch (ex) {\n                }\n            }\n            activeDialog = this;\n        },\n        _onCloseButtonClick: function (evt, el) {\n            this.close(false);\n        },\n        close: function (ok) {\n            if (this.fireEvent(\"close\", ok) !== false) {\n                //还原环境\n                if (this.fullscreen) {\n                    document.documentElement.style.overflowX = this._originalContext.html.overflowX;\n                    document.documentElement.style.overflowY = this._originalContext.html.overflowY;\n                    document.body.style.overflowX = this._originalContext.body.overflowX;\n                    document.body.style.overflowY = this._originalContext.body.overflowY;\n                    delete this._originalContext;\n                }\n                this._hide();\n\n                //销毁content\n                var content = this.getDom(\"content\");\n                var iframe = this.getDom(\"iframe\");\n                if (content && iframe) {\n                    var doc = iframe.contentDocument || iframe.contentWindow.document;\n                    doc && (doc.body.innerHTML = \"\");\n                    domUtils.remove(content);\n                }\n            }\n        }\n    };\n    utils.inherits(Dialog, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/mask.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        uiUtils = baidu.editor.ui.uiUtils;\n\n    var Mask = (baidu.editor.ui.Mask = function (options) {\n        this.initOptions(options);\n        this.initUIBase();\n    });\n    Mask.prototype = {\n        getHtmlTpl: function () {\n            return '<div id=\"##\" class=\"edui-mask %%\" onclick=\"return $$._onClick(event, this);\" onmousedown=\"return $$._onMouseDown(event, this);\"></div>';\n        },\n        postRender: function () {\n            var me = this;\n            domUtils.on(window, \"resize\", function () {\n                setTimeout(function () {\n                    if (!me.isHidden()) {\n                        me._fill();\n                    }\n                });\n            });\n        },\n        show: function (zIndex) {\n            this._fill();\n            this.getDom().style.display = \"\";\n            this.getDom().style.zIndex = zIndex;\n        },\n        hide: function () {\n            this.getDom().style.display = \"none\";\n            this.getDom().style.zIndex = \"\";\n        },\n        isHidden: function () {\n            return this.getDom().style.display == \"none\";\n        },\n        _onMouseDown: function () {\n            return false;\n        },\n        _onClick: function (e, target) {\n            this.fireEvent(\"click\", e, target);\n        },\n        _fill: function () {\n            var el = this.getDom();\n            var vpRect = uiUtils.getViewportRect();\n            el.style.width = vpRect.width + \"px\";\n            el.style.height = vpRect.height + \"px\";\n        }\n    };\n    utils.inherits(Mask, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/menu.js",
    "content": "///import core\n///import uicore\n///import ui\\popup.js\n///import ui\\stateful.js\n(function () {\n    var utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Popup = baidu.editor.ui.Popup,\n        Stateful = baidu.editor.ui.Stateful,\n        CellAlignPicker = baidu.editor.ui.CellAlignPicker,\n        Menu = (baidu.editor.ui.Menu = function (options) {\n            this.initOptions(options);\n            this.initMenu();\n        });\n\n    var menuSeparator = {\n        renderHtml: function () {\n            return '<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>';\n        },\n        postRender: function () {\n        },\n        queryAutoHide: function () {\n            return true;\n        }\n    };\n    Menu.prototype = {\n        items: null,\n        uiName: \"menu\",\n        initMenu: function () {\n            this.items = this.items || [];\n            this.initPopup();\n            this.initItems();\n        },\n        initItems: function () {\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                if (item == \"-\") {\n                    this.items[i] = this.getSeparator();\n                } else if (!(item instanceof MenuItem)) {\n                    item.editor = this.editor;\n                    item.theme = this.editor.options.theme;\n                    this.items[i] = this.createItem(item);\n                }\n            }\n        },\n        getSeparator: function () {\n            return menuSeparator;\n        },\n        createItem: function (item) {\n            //新增一个参数menu, 该参数存储了menuItem所对应的menu引用\n            item.menu = this;\n            return new MenuItem(item);\n        },\n        _Popup_getContentHtmlTpl: Popup.prototype.getContentHtmlTpl,\n        getContentHtmlTpl: function () {\n            if (this.items.length == 0) {\n                return this._Popup_getContentHtmlTpl();\n            }\n            var buff = [];\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                buff[i] = item.renderHtml();\n            }\n            return '<div class=\"%%-body\">' + buff.join(\"\") + \"</div>\";\n        },\n        _Popup_postRender: Popup.prototype.postRender,\n        postRender: function () {\n            var me = this;\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                item.ownerMenu = this;\n                item.postRender();\n            }\n            domUtils.on(this.getDom(), \"mouseover\", function (evt) {\n                evt = evt || event;\n                var rel = evt.relatedTarget || evt.fromElement;\n                var el = me.getDom();\n                if (!uiUtils.contains(el, rel) && el !== rel) {\n                    me.fireEvent(\"over\");\n                }\n            });\n            this._Popup_postRender();\n        },\n        queryAutoHide: function (el) {\n            if (el) {\n                if (uiUtils.contains(this.getDom(), el)) {\n                    return false;\n                }\n                for (var i = 0; i < this.items.length; i++) {\n                    var item = this.items[i];\n                    if (item.queryAutoHide(el) === false) {\n                        return false;\n                    }\n                }\n            }\n        },\n        clearItems: function () {\n            for (var i = 0; i < this.items.length; i++) {\n                var item = this.items[i];\n                clearTimeout(item._showingTimer);\n                clearTimeout(item._closingTimer);\n                if (item.subMenu) {\n                    item.subMenu.destroy();\n                }\n            }\n            this.items = [];\n        },\n        destroy: function () {\n            if (this.getDom()) {\n                domUtils.remove(this.getDom());\n            }\n            this.clearItems();\n        },\n        dispose: function () {\n            this.destroy();\n        }\n    };\n    utils.inherits(Menu, Popup);\n\n    /**\n     * @update 2013/04/03 hancong03 新增一个参数menu, 该参数存储了menuItem所对应的menu引用\n     * @type {Function}\n     */\n    var MenuItem = (baidu.editor.ui.MenuItem = function (options) {\n        this.initOptions(options);\n        this.initUIBase();\n        this.Stateful_init();\n        if (this.subMenu && !(this.subMenu instanceof Menu)) {\n            if (options.className && options.className.indexOf(\"aligntd\") != -1) {\n                var me = this;\n\n                //获取单元格对齐初始状态\n                this.subMenu.selected = this.editor.queryCommandValue(\"cellalignment\");\n\n                this.subMenu = new Popup({\n                    content: new CellAlignPicker(this.subMenu),\n                    parentMenu: me,\n                    editor: me.editor,\n                    destroy: function () {\n                        if (this.getDom()) {\n                            domUtils.remove(this.getDom());\n                        }\n                    }\n                });\n                this.subMenu.addListener(\"postRenderAfter\", function () {\n                    domUtils.on(this.getDom(), \"mouseover\", function () {\n                        me.addState(\"opened\");\n                    });\n                });\n            } else {\n                this.subMenu = new Menu(this.subMenu);\n            }\n        }\n    });\n    MenuItem.prototype = {\n        label: \"\",\n        subMenu: null,\n        ownerMenu: null,\n        uiName: \"menuitem\",\n        alwalysHoverable: true,\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\">' +\n                '<div class=\"%%-body\">' +\n                this.renderLabelHtml() +\n                \"</div>\" +\n                \"</div>\"\n            );\n        },\n        postRender: function () {\n            var me = this;\n            this.addListener(\"over\", function () {\n                me.ownerMenu.fireEvent(\"submenuover\", me);\n                if (me.subMenu) {\n                    me.delayShowSubMenu();\n                }\n            });\n            if (this.subMenu) {\n                this.getDom().className += \" edui-hassubmenu\";\n                this.subMenu.render();\n                this.addListener(\"out\", function () {\n                    me.delayHideSubMenu();\n                });\n                this.subMenu.addListener(\"over\", function () {\n                    clearTimeout(me._closingTimer);\n                    me._closingTimer = null;\n                    me.addState(\"opened\");\n                });\n                this.ownerMenu.addListener(\"hide\", function () {\n                    me.hideSubMenu();\n                });\n                this.ownerMenu.addListener(\"submenuover\", function (t, subMenu) {\n                    if (subMenu !== me) {\n                        me.delayHideSubMenu();\n                    }\n                });\n                this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide;\n                this.subMenu.queryAutoHide = function (el) {\n                    if (el && uiUtils.contains(me.getDom(), el)) {\n                        return false;\n                    }\n                    return this._bakQueryAutoHide(el);\n                };\n            }\n            this.getDom().style.tabIndex = \"-1\";\n            uiUtils.makeUnselectable(this.getDom());\n            this.Stateful_postRender();\n        },\n        delayShowSubMenu: function () {\n            var me = this;\n            if (!me.isDisabled()) {\n                me.addState(\"opened\");\n                clearTimeout(me._showingTimer);\n                clearTimeout(me._closingTimer);\n                me._closingTimer = null;\n                me._showingTimer = setTimeout(function () {\n                    me.showSubMenu();\n                }, 250);\n            }\n        },\n        delayHideSubMenu: function () {\n            var me = this;\n            if (!me.isDisabled()) {\n                me.removeState(\"opened\");\n                clearTimeout(me._showingTimer);\n                if (!me._closingTimer) {\n                    me._closingTimer = setTimeout(function () {\n                        if (!me.hasState(\"opened\")) {\n                            me.hideSubMenu();\n                        }\n                        me._closingTimer = null;\n                    }, 400);\n                }\n            }\n        },\n        renderLabelHtml: function () {\n            return (\n                '<div class=\"edui-arrow\"></div>' +\n                '<div class=\"edui-box edui-icon\"></div>' +\n                '<div class=\"edui-box edui-label %%-label\">' +\n                (this.label || \"\") +\n                \"</div>\"\n            );\n        },\n        getStateDom: function () {\n            return this.getDom();\n        },\n        queryAutoHide: function (el) {\n            if (this.subMenu && this.hasState(\"opened\")) {\n                return this.subMenu.queryAutoHide(el);\n            }\n        },\n        _onClick: function (event, this_) {\n            if (this.hasState(\"disabled\")) return;\n            if (this.fireEvent(\"click\", event, this_) !== false) {\n                if (this.subMenu) {\n                    this.showSubMenu();\n                } else {\n                    Popup.postHide(event);\n                }\n            }\n        },\n        showSubMenu: function () {\n            var rect = uiUtils.getClientRect(this.getDom());\n            rect.right -= 5;\n            rect.left += 2;\n            rect.width -= 7;\n            rect.top -= 4;\n            rect.bottom += 4;\n            rect.height += 8;\n            this.subMenu.showAnchorRect(rect, true, true);\n        },\n        hideSubMenu: function () {\n            this.subMenu.hide();\n        }\n    };\n    utils.inherits(MenuItem, UIBase);\n    utils.extend(MenuItem.prototype, Stateful, true);\n})();\n"
  },
  {
    "path": "_src/ui/menubutton.js",
    "content": "///import core\n///import uicore\n///import ui/menu.js\n///import ui/splitbutton.js\n(function () {\n    var utils = baidu.editor.utils,\n        Menu = baidu.editor.ui.Menu,\n        SplitButton = baidu.editor.ui.SplitButton,\n        MenuButton = (baidu.editor.ui.MenuButton = function (options) {\n            this.initOptions(options);\n            this.initMenuButton();\n        });\n    MenuButton.prototype = {\n        initMenuButton: function () {\n            var me = this;\n            this.uiName = \"menubutton\";\n            this.popup = new Menu({\n                items: me.items,\n                className: me.className,\n                editor: me.editor\n            });\n            this.popup.addListener(\"show\", function () {\n                var list = this;\n                for (var i = 0; i < list.items.length; i++) {\n                    list.items[i].removeState(\"checked\");\n                    if (list.items[i].value == me._value) {\n                        list.items[i].addState(\"checked\");\n                        this.value = me._value;\n                    }\n                }\n            });\n            this.initSplitButton();\n        },\n        setValue: function (value) {\n            this._value = value;\n        }\n    };\n    utils.inherits(MenuButton, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/message.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Message = (baidu.editor.ui.Message = function (options) {\n            this.initOptions(options);\n            this.initMessage();\n        });\n\n    Message.prototype = {\n        initMessage: function () {\n            this.initUIBase();\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"edui-message %%\">' +\n                ' <div id=\"##_closer\" class=\"edui-message-closer\">×</div>' +\n                ' <div id=\"##_body\" class=\"edui-message-body edui-message-type-info\">' +\n                ' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>' +\n                ' <div class=\"edui-shadow\"></div>' +\n                ' <div id=\"##_content\" class=\"edui-message-content\">' +\n                \"  </div>\" +\n                \" </div>\" +\n                \"</div>\"\n            );\n        },\n        reset: function (opt) {\n            var me = this;\n            if (!opt.keepshow) {\n                clearTimeout(this.timer);\n                me.timer = setTimeout(function () {\n                    me.hide();\n                }, opt.timeout || 4000);\n            }\n\n            opt.content !== undefined && me.setContent(opt.content);\n            opt.type !== undefined && me.setType(opt.type);\n\n            me.show();\n        },\n        postRender: function () {\n            var me = this,\n                closer = this.getDom(\"closer\");\n            closer &&\n            domUtils.on(closer, \"click\", function () {\n                me.hide();\n            });\n        },\n        setContent: function (content) {\n            this.getDom(\"content\").innerHTML = content;\n        },\n        setType: function (type) {\n            type = type || \"info\";\n            var body = this.getDom(\"body\");\n            body.className = body.className.replace(\n                /edui-message-type-[\\w-]+/,\n                \"edui-message-type-\" + type\n            );\n        },\n        getContent: function () {\n            return this.getDom(\"content\").innerHTML;\n        },\n        getType: function () {\n            var arr = this.getDom(\"body\").match(/edui-message-type-([\\w-]+)/);\n            return arr ? arr[1] : \"\";\n        },\n        show: function () {\n            this.getDom().style.display = \"block\";\n        },\n        hide: function () {\n            var dom = this.getDom();\n            if (dom) {\n                dom.style.display = \"none\";\n                dom.parentNode && dom.parentNode.removeChild(dom);\n            }\n        }\n    };\n\n    utils.inherits(Message, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/multiMenu.js",
    "content": "///import core\n///import uicore\n///commands 表情\n(function () {\n    var utils = baidu.editor.utils,\n        Popup = baidu.editor.ui.Popup,\n        SplitButton = baidu.editor.ui.SplitButton,\n        MultiMenuPop = (baidu.editor.ui.MultiMenuPop = function (options) {\n            this.initOptions(options);\n            this.initMultiMenu();\n        });\n\n    MultiMenuPop.prototype = {\n        initMultiMenu: function () {\n            var me = this;\n            this.popup = new Popup({\n                content: \"\",\n                editor: me.editor,\n                iframe_rendered: false,\n                onshow: function () {\n                    if (!this.iframe_rendered) {\n                        this.iframe_rendered = true;\n                        this.getDom(\"content\").innerHTML =\n                            '<iframe id=\"' +\n                            me.id +\n                            '_iframe\" src=\"' +\n                            me.iframeUrl +\n                            '\" frameborder=\"0\"></iframe>';\n                        me.editor.container.style.zIndex &&\n                        (this.getDom().style.zIndex =\n                            me.editor.container.style.zIndex * 1 + 1);\n                    }\n                }\n                // canSideUp:false,\n                // canSideLeft:false\n            });\n            this.onbuttonclick = function () {\n                this.showPopup();\n            };\n            this.initSplitButton();\n        }\n    };\n\n    utils.inherits(MultiMenuPop, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/pastepicker.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        Stateful = baidu.editor.ui.Stateful,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase;\n\n    var PastePicker = (baidu.editor.ui.PastePicker = function (options) {\n        this.initOptions(options);\n        this.initPastePicker();\n    });\n    PastePicker.prototype = {\n        initPastePicker: function () {\n            this.initUIBase();\n            this.Stateful_init();\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div class=\"edui-pasteicon\" onclick=\"$$._onClick(this)\"></div>' +\n                '<div class=\"edui-pastecontainer\">' +\n                '<div class=\"edui-title\">' +\n                this.editor.getLang(\"pasteOpt\") +\n                \"</div>\" +\n                '<div class=\"edui-button\">' +\n                '<div title=\"' +\n                this.editor.getLang(\"pasteSourceFormat\") +\n                '\" onclick=\"$$.format(false)\" stateful>' +\n                '<div class=\"edui-richtxticon\"></div></div>' +\n                '<div title=\"' +\n                this.editor.getLang(\"tagFormat\") +\n                '\" onclick=\"$$.format(2)\" stateful>' +\n                '<div class=\"edui-tagicon\"></div></div>' +\n                '<div title=\"' +\n                this.editor.getLang(\"pasteTextFormat\") +\n                '\" onclick=\"$$.format(true)\" stateful>' +\n                '<div class=\"edui-plaintxticon\"></div></div>' +\n                \"</div>\" +\n                \"</div>\" +\n                \"</div>\"\n            );\n        },\n        getStateDom: function () {\n            return this.target;\n        },\n        format: function (param) {\n            this.editor.ui._isTransfer = true;\n            this.editor.fireEvent(\"pasteTransfer\", param);\n        },\n        _onClick: function (cur) {\n            var node = domUtils.getNextDomNode(cur),\n                screenHt = uiUtils.getViewportRect().height,\n                subPop = uiUtils.getClientRect(node);\n\n            if (subPop.top + subPop.height > screenHt)\n                node.style.top = -subPop.height - cur.offsetHeight + \"px\";\n            else node.style.top = \"\";\n\n            if (/hidden/gi.test(domUtils.getComputedStyle(node, \"visibility\"))) {\n                node.style.visibility = \"visible\";\n                domUtils.addClass(cur, \"edui-state-opened\");\n            } else {\n                node.style.visibility = \"hidden\";\n                domUtils.removeClasses(cur, \"edui-state-opened\");\n            }\n        },\n        _UIBase_render: UIBase.prototype.render\n    };\n    utils.inherits(PastePicker, UIBase);\n    utils.extend(PastePicker.prototype, Stateful, true);\n})();\n"
  },
  {
    "path": "_src/ui/popup.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        domUtils = baidu.editor.dom.domUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Popup = (baidu.editor.ui.Popup = function (options) {\n            this.initOptions(options);\n            this.initPopup();\n        });\n\n    var allPopups = [];\n\n    function closeAllPopup(evt, el) {\n        for (var i = 0; i < allPopups.length; i++) {\n            var pop = allPopups[i];\n            if (!pop.isHidden()) {\n                if (pop.queryAutoHide(el) !== false) {\n                    if (\n                        evt &&\n                        /scroll/gi.test(evt.type) &&\n                        pop.className === \"edui-wordpastepop\"\n                    )\n                        return;\n                    pop.hide();\n                }\n            }\n        }\n\n        if (allPopups.length) pop.editor.fireEvent(\"afterhidepop\");\n    }\n\n    Popup.postHide = closeAllPopup;\n\n    var ANCHOR_CLASSES = [\n        \"edui-anchor-topleft\",\n        \"edui-anchor-topright\",\n        \"edui-anchor-bottomleft\",\n        \"edui-anchor-bottomright\"\n    ];\n    Popup.prototype = {\n        SHADOW_RADIUS: 5,\n        content: null,\n        _hidden: false,\n        autoRender: true,\n        canSideLeft: true,\n        canSideUp: true,\n        initPopup: function () {\n            this.initUIBase();\n            allPopups.push(this);\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"edui-popup %%\" onmousedown=\"return false;\">' +\n                ' <div id=\"##_body\" class=\"edui-popup-body\">' +\n                ' <iframe style=\"position:absolute;z-index:-1;left:0;top:0;background-color: transparent;\" frameborder=\"0\" width=\"100%\" height=\"100%\" src=\"about:blank\"></iframe>' +\n                ' <div class=\"edui-shadow\"></div>' +\n                ' <div id=\"##_content\" class=\"edui-popup-content\">' +\n                this.getContentHtmlTpl() +\n                \"  </div>\" +\n                \" </div>\" +\n                \"</div>\"\n            );\n        },\n        getContentHtmlTpl: function () {\n            if (this.content) {\n                if (typeof this.content == \"string\") {\n                    return this.content;\n                }\n                return this.content.renderHtml();\n            } else {\n                return \"\";\n            }\n        },\n        _UIBase_postRender: UIBase.prototype.postRender,\n        postRender: function () {\n            if (this.content instanceof UIBase) {\n                this.content.postRender();\n            }\n\n            //捕获鼠标滚轮\n            if (this.captureWheel && !this.captured) {\n                this.captured = true;\n\n                var winHeight =\n                    (document.documentElement.clientHeight ||\n                        document.body.clientHeight) - 80,\n                    _height = this.getDom().offsetHeight,\n                    _top = uiUtils.getClientRect(this.combox.getDom()).top,\n                    content = this.getDom(\"content\"),\n                    ifr = this.getDom(\"body\").getElementsByTagName(\"iframe\"),\n                    me = this;\n\n                ifr.length && (ifr = ifr[0]);\n\n                while (_top + _height > winHeight) {\n                    _height -= 30;\n                }\n                content.style.height = _height + \"px\";\n                //同步更改iframe高度\n                ifr && (ifr.style.height = _height + \"px\");\n\n                //阻止在combox上的鼠标滚轮事件, 防止用户的正常操作被误解\n                domUtils.on(\n                    content,\n                    \"onmousewheel\" in document.body ? \"mousewheel\" : \"DOMMouseScroll\",\n                    function (e) {\n                        if (e.preventDefault) {\n                            e.preventDefault();\n                        } else {\n                            e.returnValue = false;\n                        }\n\n                        if (e.wheelDelta) {\n                            content.scrollTop -= e.wheelDelta / 120 * 60;\n                        } else {\n                            content.scrollTop -= e.detail / -3 * 60;\n                        }\n                    }\n                );\n            }\n            this.fireEvent(\"postRenderAfter\");\n            this.hide(true);\n            this._UIBase_postRender();\n        },\n        _doAutoRender: function () {\n            if (!this.getDom() && this.autoRender) {\n                this.render();\n            }\n        },\n        mesureSize: function () {\n            var box = this.getDom(\"content\");\n            return uiUtils.getClientRect(box);\n        },\n        fitSize: function () {\n            // console.log('fitSize.popup')\n            if (this.captureWheel && this.sized) {\n                return this.__size;\n            }\n            this.sized = true;\n            var popBodyEl = this.getDom(\"body\");\n            popBodyEl.style.width = \"\";\n            popBodyEl.style.height = \"\";\n            var size = this.mesureSize();\n            if (this.captureWheel) {\n                popBodyEl.style.width = -(-20 - size.width) + \"px\";\n                var height = parseInt(this.getDom(\"content\").style.height, 10);\n                !window.isNaN(height) && (size.height = height);\n            } else {\n                popBodyEl.style.width = size.width + \"px\";\n            }\n            popBodyEl.style.height = size.height + \"px\";\n            this.__size = size;\n            this.captureWheel && (this.getDom(\"content\").style.overflow = \"auto\");\n            return size;\n        },\n        showAnchor: function (element, hoz) {\n            this.showAnchorRect(uiUtils.getClientRect(element), hoz);\n        },\n        showAnchorRect: function (rect, hoz, adj) {\n            this._doAutoRender();\n            var vpRect = uiUtils.getViewportRect();\n            this.getDom().style.visibility = \"hidden\";\n            this._show();\n            var popSize = this.fitSize();\n\n            var sideLeft, sideUp, left, top;\n            if (hoz) {\n                sideLeft =\n                    this.canSideLeft &&\n                    (rect.right + popSize.width > vpRect.right &&\n                        rect.left > popSize.width);\n                sideUp =\n                    this.canSideUp &&\n                    (rect.top + popSize.height > vpRect.bottom &&\n                        rect.bottom > popSize.height);\n                left = sideLeft ? rect.left - popSize.width : rect.right;\n                top = sideUp ? rect.bottom - popSize.height : rect.top;\n            } else {\n                sideLeft =\n                    this.canSideLeft &&\n                    (rect.right + popSize.width > vpRect.right &&\n                        rect.left > popSize.width);\n                sideUp =\n                    this.canSideUp &&\n                    (rect.top + popSize.height > vpRect.bottom &&\n                        rect.bottom > popSize.height);\n                left = sideLeft ? rect.right - popSize.width : rect.left;\n                top = sideUp ? rect.top - popSize.height : rect.bottom;\n            }\n            if (!sideUp) {\n                if (top + popSize.height > vpRect.bottom) {\n                    top = vpRect.bottom - popSize.height\n                }\n            }\n            // console.log('popup.showAnchorRect', vpRect, rect, hoz, sideUp, sideLeft, left, top);\n\n            var popEl = this.getDom();\n            uiUtils.setViewportOffset(popEl, {\n                left: left,\n                top: top\n            });\n            domUtils.removeClasses(popEl, ANCHOR_CLASSES);\n            popEl.className +=\n                \" \" + ANCHOR_CLASSES[(sideUp ? 1 : 0) * 2 + (sideLeft ? 1 : 0)];\n            if (this.editor) {\n                popEl.style.zIndex = this.editor.container.style.zIndex * 1 + 10;\n                baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex =\n                    popEl.style.zIndex - 1;\n            }\n            this.getDom().style.visibility = \"visible\";\n        },\n        showAt: function (offset) {\n            var left = offset.left;\n            var top = offset.top;\n            var rect = {\n                left: left,\n                top: top,\n                right: left,\n                bottom: top,\n                height: 0,\n                width: 0\n            };\n            this.showAnchorRect(rect, false, true);\n        },\n        _show: function () {\n            if (this._hidden) {\n                var box = this.getDom();\n                box.style.display = \"\";\n                this._hidden = false;\n                //                if (box.setActive) {\n                //                    box.setActive();\n                //                }\n                this.fireEvent(\"show\");\n            }\n        },\n        isHidden: function () {\n            return this._hidden;\n        },\n        show: function () {\n            this._doAutoRender();\n            this._show();\n        },\n        hide: function (notNofity) {\n            if (!this._hidden && this.getDom()) {\n                this.getDom().style.display = \"none\";\n                this._hidden = true;\n                if (!notNofity) {\n                    this.fireEvent(\"hide\");\n                }\n            }\n        },\n        queryAutoHide: function (el) {\n            return !el || !uiUtils.contains(this.getDom(), el);\n        }\n    };\n    utils.inherits(Popup, UIBase);\n\n    domUtils.on(document, \"mousedown\", function (evt) {\n        var el = evt.target || evt.srcElement;\n        closeAllPopup(evt, el);\n    });\n    domUtils.on(window, \"scroll\", function (evt, el) {\n        closeAllPopup(evt, el);\n    });\n})();\n"
  },
  {
    "path": "_src/ui/quick-operate.js",
    "content": "///import core\n///import uicore\n///import ui\\popup.js\n///import ui\\stateful.js\n(function () {\n    var utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Popup = baidu.editor.ui.Popup,\n        Stateful = baidu.editor.ui.Stateful,\n        CellAlignPicker = baidu.editor.ui.CellAlignPicker,\n        QuickOperate = (baidu.editor.ui.QuickOperate = function (options) {\n            this.initOptions(options);\n            // this.initMenu();\n        });\n\n    // var menuSeparator = {\n    //   renderHtml: function() {\n    //     return '<div class=\"edui-menuitem edui-menuseparator\"><div class=\"edui-menuseparator-inner\"></div></div>';\n    //   },\n    //   postRender: function() {},\n    //   queryAutoHide: function() {\n    //     return true;\n    //   }\n    // };\n    QuickOperate.prototype = {\n        //   items: null,\n        uiName: \"quick-operate\",\n        //   initMenu: function() {\n        //     this.items = this.items || [];\n        //     this.initPopup();\n        //     this.initItems();\n        //   },\n        //   initItems: function() {\n        //     for (var i = 0; i < this.items.length; i++) {\n        //       var item = this.items[i];\n        //       if (item == \"-\") {\n        //         this.items[i] = this.getSeparator();\n        //       } else if (!(item instanceof MenuItem)) {\n        //         item.editor = this.editor;\n        //         item.theme = this.editor.options.theme;\n        //         this.items[i] = this.createItem(item);\n        //       }\n        //     }\n        //   },\n        //   getSeparator: function() {\n        //     return menuSeparator;\n        //   },\n        //   createItem: function(item) {\n        //     //新增一个参数menu, 该参数存储了menuItem所对应的menu引用\n        //     item.menu = this;\n        //     return new MenuItem(item);\n        //   },\n        _Popup_getContentHtmlTpl: Popup.prototype.getContentHtmlTpl,\n        getContentHtmlTpl: function () {\n            //     if (this.items.length == 0) {\n            //       return this._Popup_getContentHtmlTpl();\n            //     }\n            //     var buff = [];\n            //     for (var i = 0; i < this.items.length; i++) {\n            //       var item = this.items[i];\n            //       buff[i] = item.renderHtml();\n            //     }\n            //     return '<div class=\"%%-body\">' + buff.join(\"\") + \"</div>\";\n            return [\n                '<div class=\"edui-quick-operate\">',\n                ' <div class=\"edui-quick-operate-status\">',\n                '   <div class=\"edui-quick-operate-icon\"><i class=\"icon icon-image\"></i></div>',\n                '   <div class=\"edui-quick-operate-icon\"><svg width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" data-icon=\"DragOutlined\"><path d=\"M8.25 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm0 7.25a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Zm1.75 5.5a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0ZM14.753 6.5a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5ZM16.5 12a1.75 1.75 0 1 1-3.5 0 1.75 1.75 0 0 1 3.5 0Zm-1.747 9a1.75 1.75 0 1 0 0-3.5 1.75 1.75 0 0 0 0 3.5Z\" fill=\"currentColor\"></path></svg></div>',\n                ' </div>',\n                ' <div class=\"edui-quick-operate-menu\">',\n                '   <div class=\"item\"><i class=\"icon icon-image\"></i> 删除</div>',\n                '   <div class=\"item\"><i class=\"icon icon-image\"></i> 左对齐</div>',\n                '   <div class=\"item\"><i class=\"icon icon-image\"></i> 右对齐</div>',\n                ' </div>',\n                '</div>',\n            ].join('')\n        },\n        //   _Popup_postRender: Popup.prototype.postRender,\n        //   postRender: function() {\n        //     var me = this;\n        //     for (var i = 0; i < this.items.length; i++) {\n        //       var item = this.items[i];\n        //       item.ownerMenu = this;\n        //       item.postRender();\n        //     }\n        //     domUtils.on(this.getDom(), \"mouseover\", function(evt) {\n        //       evt = evt || event;\n        //       var rel = evt.relatedTarget || evt.fromElement;\n        //       var el = me.getDom();\n        //       if (!uiUtils.contains(el, rel) && el !== rel) {\n        //         me.fireEvent(\"over\");\n        //       }\n        //     });\n        //     this._Popup_postRender();\n        //   },\n        //   queryAutoHide: function(el) {\n        //     if (el) {\n        //       if (uiUtils.contains(this.getDom(), el)) {\n        //         return false;\n        //       }\n        //       for (var i = 0; i < this.items.length; i++) {\n        //         var item = this.items[i];\n        //         if (item.queryAutoHide(el) === false) {\n        //           return false;\n        //         }\n        //       }\n        //     }\n        //   },\n        //   clearItems: function() {\n        //     for (var i = 0; i < this.items.length; i++) {\n        //       var item = this.items[i];\n        //       clearTimeout(item._showingTimer);\n        //       clearTimeout(item._closingTimer);\n        //       if (item.subMenu) {\n        //         item.subMenu.destroy();\n        //       }\n        //     }\n        //     this.items = [];\n        //   },\n        destroy: function () {\n            if (this.getDom()) {\n                domUtils.remove(this.getDom());\n            }\n            //     this.clearItems();\n        },\n        dispose: function () {\n            this.destroy();\n        }\n    };\n    utils.inherits(QuickOperate, Popup);\n    //\n    // /**\n    //    * @update 2013/04/03 hancong03 新增一个参数menu, 该参数存储了menuItem所对应的menu引用\n    //    * @type {Function}\n    //    */\n    // var MenuItem = (baidu.editor.ui.MenuItem = function(options) {\n    //   this.initOptions(options);\n    //   this.initUIBase();\n    //   this.Stateful_init();\n    //   if (this.subMenu && !(this.subMenu instanceof QuickOperate)) {\n    //     if (options.className && options.className.indexOf(\"aligntd\") != -1) {\n    //       var me = this;\n    //\n    //       //获取单元格对齐初始状态\n    //       this.subMenu.selected = this.editor.queryCommandValue(\"cellalignment\");\n    //\n    //       this.subMenu = new Popup({\n    //         content: new CellAlignPicker(this.subMenu),\n    //         parentMenu: me,\n    //         editor: me.editor,\n    //         destroy: function() {\n    //           if (this.getDom()) {\n    //             domUtils.remove(this.getDom());\n    //           }\n    //         }\n    //       });\n    //       this.subMenu.addListener(\"postRenderAfter\", function() {\n    //         domUtils.on(this.getDom(), \"mouseover\", function() {\n    //           me.addState(\"opened\");\n    //         });\n    //       });\n    //     } else {\n    //       this.subMenu = new QuickOperate(this.subMenu);\n    //     }\n    //   }\n    // });\n    // MenuItem.prototype = {\n    //   label: \"\",\n    //   subMenu: null,\n    //   ownerMenu: null,\n    //   uiName: \"menuitem\",\n    //   alwalysHoverable: true,\n    //   getHtmlTpl: function() {\n    //     return (\n    //       '<div id=\"##\" class=\"%%\" stateful onclick=\"$$._onClick(event, this);\">' +\n    //       '<div class=\"%%-body\">' +\n    //       this.renderLabelHtml() +\n    //       \"</div>\" +\n    //       \"</div>\"\n    //     );\n    //   },\n    //   postRender: function() {\n    //     var me = this;\n    //     this.addListener(\"over\", function() {\n    //       me.ownerMenu.fireEvent(\"submenuover\", me);\n    //       if (me.subMenu) {\n    //         me.delayShowSubMenu();\n    //       }\n    //     });\n    //     if (this.subMenu) {\n    //       this.getDom().className += \" edui-hassubmenu\";\n    //       this.subMenu.render();\n    //       this.addListener(\"out\", function() {\n    //         me.delayHideSubMenu();\n    //       });\n    //       this.subMenu.addListener(\"over\", function() {\n    //         clearTimeout(me._closingTimer);\n    //         me._closingTimer = null;\n    //         me.addState(\"opened\");\n    //       });\n    //       this.ownerMenu.addListener(\"hide\", function() {\n    //         me.hideSubMenu();\n    //       });\n    //       this.ownerMenu.addListener(\"submenuover\", function(t, subMenu) {\n    //         if (subMenu !== me) {\n    //           me.delayHideSubMenu();\n    //         }\n    //       });\n    //       this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide;\n    //       this.subMenu.queryAutoHide = function(el) {\n    //         if (el && uiUtils.contains(me.getDom(), el)) {\n    //           return false;\n    //         }\n    //         return this._bakQueryAutoHide(el);\n    //       };\n    //     }\n    //     this.getDom().style.tabIndex = \"-1\";\n    //     uiUtils.makeUnselectable(this.getDom());\n    //     this.Stateful_postRender();\n    //   },\n    //   delayShowSubMenu: function() {\n    //     var me = this;\n    //     if (!me.isDisabled()) {\n    //       me.addState(\"opened\");\n    //       clearTimeout(me._showingTimer);\n    //       clearTimeout(me._closingTimer);\n    //       me._closingTimer = null;\n    //       me._showingTimer = setTimeout(function() {\n    //         me.showSubMenu();\n    //       }, 250);\n    //     }\n    //   },\n    //   delayHideSubMenu: function() {\n    //     var me = this;\n    //     if (!me.isDisabled()) {\n    //       me.removeState(\"opened\");\n    //       clearTimeout(me._showingTimer);\n    //       if (!me._closingTimer) {\n    //         me._closingTimer = setTimeout(function() {\n    //           if (!me.hasState(\"opened\")) {\n    //             me.hideSubMenu();\n    //           }\n    //           me._closingTimer = null;\n    //         }, 400);\n    //       }\n    //     }\n    //   },\n    //   renderLabelHtml: function() {\n    //     return (\n    //       '<div class=\"edui-arrow\"></div>' +\n    //       '<div class=\"edui-box edui-icon\"></div>' +\n    //       '<div class=\"edui-box edui-label %%-label\">' +\n    //       (this.label || \"\") +\n    //       \"</div>\"\n    //     );\n    //   },\n    //   getStateDom: function() {\n    //     return this.getDom();\n    //   },\n    //   queryAutoHide: function(el) {\n    //     if (this.subMenu && this.hasState(\"opened\")) {\n    //       return this.subMenu.queryAutoHide(el);\n    //     }\n    //   },\n    //   _onClick: function(event, this_) {\n    //     if (this.hasState(\"disabled\")) return;\n    //     if (this.fireEvent(\"click\", event, this_) !== false) {\n    //       if (this.subMenu) {\n    //         this.showSubMenu();\n    //       } else {\n    //         Popup.postHide(event);\n    //       }\n    //     }\n    //   },\n    //   showSubMenu: function() {\n    //     var rect = uiUtils.getClientRect(this.getDom());\n    //     rect.right -= 5;\n    //     rect.left += 2;\n    //     rect.width -= 7;\n    //     rect.top -= 4;\n    //     rect.bottom += 4;\n    //     rect.height += 8;\n    //     this.subMenu.showAnchorRect(rect, true, true);\n    //   },\n    //   hideSubMenu: function() {\n    //     this.subMenu.hide();\n    //   }\n    // };\n    // utils.inherits(MenuItem, UIBase);\n    // utils.extend(MenuItem.prototype, Stateful, true);\n})();\n"
  },
  {
    "path": "_src/ui/separator.js",
    "content": "(function () {\n    var utils = baidu.editor.utils,\n        UIBase = baidu.editor.ui.UIBase,\n        Separator = (baidu.editor.ui.Separator = function (options) {\n            this.initOptions(options);\n            this.initSeparator();\n        });\n    Separator.prototype = {\n        uiName: \"separator\",\n        initSeparator: function () {\n            this.initUIBase();\n        },\n        getHtmlTpl: function () {\n            return '<div id=\"##\" class=\"edui-box %%\"></div>';\n        }\n    };\n    utils.inherits(Separator, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/shortcutmenu.js",
    "content": "(function () {\n    var UI = baidu.editor.ui,\n        UIBase = UI.UIBase,\n        uiUtils = UI.uiUtils,\n        utils = baidu.editor.utils,\n        domUtils = baidu.editor.dom.domUtils;\n\n    var allMenus = [], //存储所有快捷菜单\n        timeID,\n        isSubMenuShow = false; //是否有子pop显示\n\n    var ShortCutMenu = (UI.ShortCutMenu = function (options) {\n        this.initOptions(options);\n        this.initShortCutMenu();\n    });\n\n    ShortCutMenu.postHide = hideAllMenu;\n\n    ShortCutMenu.prototype = {\n        isHidden: true,\n        SPACE: 5,\n        initShortCutMenu: function () {\n            this.items = this.items || [];\n            this.initUIBase();\n            this.initItems();\n            this.initEvent();\n            allMenus.push(this);\n        },\n        initEvent: function () {\n            var me = this,\n                doc = me.editor.document;\n\n            /*\n            domUtils.on(doc, \"mousemove\", function(e) {\n              if (me.isHidden === false) {\n                //有pop显示就不隐藏快捷菜单\n                if (me.getSubMenuMark() || me.eventType == \"contextmenu\") return;\n\n                var flag = true,\n                  el = me.getDom(),\n                  wt = el.offsetWidth,\n                  ht = el.offsetHeight,\n                  distanceX = wt / 2 + me.SPACE, //距离中心X标准\n                  distanceY = ht / 2, //距离中心Y标准\n                  x = Math.abs(e.screenX - me.left), //离中心距离横坐标\n                  y = Math.abs(e.screenY - me.top); //离中心距离纵坐标\n\n                clearTimeout(timeID);\n                timeID = setTimeout(function() {\n                  if (y > 0 && y < distanceY) {\n                    me.setOpacity(el, \"1\");\n                  } else if (y > distanceY && y < distanceY + 70) {\n                    me.setOpacity(el, \"0.5\");\n                    flag = false;\n                  } else if (y > distanceY + 70 && y < distanceY + 140) {\n                    me.hide();\n                  }\n\n                  if (flag && x > 0 && x < distanceX) {\n                    me.setOpacity(el, \"1\");\n                  } else if (x > distanceX && x < distanceX + 70) {\n                    me.setOpacity(el, \"0.5\");\n                  } else if (x > distanceX + 70 && x < distanceX + 140) {\n                      console.log('hide')\n                    me.hide();\n                  }\n                });\n              }\n            });\n            */\n            //ie\\ff下 mouseout不准\n            /*\n            if (browser.chrome) {\n              domUtils.on(doc, \"mouseout\", function(e) {\n                var relatedTgt = e.relatedTarget || e.toElement;\n\n                if (relatedTgt == null || relatedTgt.tagName == \"HTML\") {\n                  me.hide();\n                }\n              });\n            }\n             */\n\n            me.editor.addListener(\"afterhidepop\", function () {\n                if (!me.isHidden) {\n                    isSubMenuShow = true;\n                }\n            });\n        },\n        initItems: function () {\n            if (utils.isArray(this.items)) {\n                for (var i = 0, len = this.items.length; i < len; i++) {\n                    if ('string' !== typeof this.items[i]) {\n                        continue;\n                    }\n                    var item = this.items[i].toLowerCase();\n                    if (UI[item]) {\n                        this.items[i] = new UI[item](this.editor);\n                        this.items[i]._name = item;\n                        this.items[i].className += \" edui-short-cut-sub-menu \";\n                    }\n                }\n            }\n        },\n        setOpacity: function (el, value) {\n            if (browser.ie && browser.version < 9) {\n                el.style.filter = \"alpha(opacity = \" + parseFloat(value) * 100 + \");\";\n            } else {\n                el.style.opacity = value;\n            }\n        },\n        getSubMenuMark: function () {\n            isSubMenuShow = false;\n            var layerEle = uiUtils.getFixedLayer();\n            var list = domUtils.getElementsByTagName(layerEle, \"div\", function (node) {\n                return domUtils.hasClass(node, \"edui-short-cut-sub-menu edui-popup\");\n            });\n\n            for (var i = 0, node; (node = list[i++]);) {\n                if (node.style.display !== \"none\") {\n                    isSubMenuShow = true;\n                }\n            }\n            return isSubMenuShow;\n        },\n        show: function (e, hasContextmenu) {\n            var me = this,\n                offset = {},\n                el = this.getDom(),\n                fixedlayer = uiUtils.getFixedLayer();\n\n            var shortcutMenuShows = this.editor.options.shortcutMenuShows;\n            for(let item of this.items){\n                if(item._name){\n                    if(item._name in shortcutMenuShows) {\n                        item.uiShow(shortcutMenuShows[item._name]);\n                    }\n                }\n            }\n\n            for (let item of this.items) {\n                if ('shouldUiShow' in item) {\n                    item.uiShow(item.shouldUiShow());\n                }\n            }\n\n            function setPos(offset) {\n                if (offset.left < 0) {\n                    offset.left = 0;\n                }\n                if (offset.top < 0) {\n                    offset.top = 0;\n                }\n                el.style.cssText =\n                    \"position:absolute;left:\" +\n                    offset.left +\n                    \"px;top:\" +\n                    offset.top +\n                    \"px;\";\n            }\n\n            function setPosByCxtMenu(menu) {\n                if (!menu.tagName) {\n                    menu = menu.getDom();\n                }\n                offset.left = parseInt(menu.style.left);\n                offset.top = parseInt(menu.style.top);\n                offset.top -= el.offsetHeight + 15;\n                setPos(offset);\n            }\n\n            me.eventType = e.type;\n            el.style.cssText = \"display:block;left:-9999px\";\n\n            // if (e.type === \"contextmenu\" && hasContextmenu) {\n            //     var menu = domUtils.getElementsByTagName(\n            //         fixedlayer,\n            //         \"div\",\n            //         \"edui-contextmenu\"\n            //     )[0];\n            //     if (menu) {\n            //         setPosByCxtMenu(menu);\n            //     } else {\n            //         me.editor.addListener(\"aftershowcontextmenu\", function (type, menu) {\n            //             setPosByCxtMenu(menu);\n            //         });\n            //     }\n            // } else {\n            offset = uiUtils.getViewportOffsetByEvent(e);\n            offset.top -= el.offsetHeight + me.SPACE;\n            offset.left += me.SPACE + 20;\n            setPos(offset);\n            me.setOpacity(el, 1);\n            // }\n\n            me.isHidden = false;\n            me.left = e.screenX + el.offsetWidth / 2 - me.SPACE;\n            me.top = e.screenY - el.offsetHeight / 2 - me.SPACE;\n\n            if (me.editor) {\n                el.style.zIndex = me.editor.container.style.zIndex * 1 + 10;\n                fixedlayer.style.zIndex = el.style.zIndex - 1;\n            }\n        },\n        hide: function () {\n            if (this.getDom()) {\n                this.getDom().style.display = \"none\";\n            }\n            this.isHidden = true;\n        },\n        postRender: function () {\n            if (utils.isArray(this.items)) {\n                for (var i = 0, item; (item = this.items[i++]);) {\n                    item.postRender();\n                }\n            }\n        },\n        getHtmlTpl: function () {\n            var buff;\n            if (utils.isArray(this.items)) {\n                buff = [];\n                for (var i = 0; i < this.items.length; i++) {\n                    buff[i] = this.items[i].renderHtml();\n                }\n                buff = buff.join(\"\");\n            } else {\n                buff = this.items;\n            }\n\n            return (\n                '<div id=\"##\" class=\"%% edui-toolbar\" data-src=\"shortcutmenu\" onmousedown=\"return false;\" onselectstart=\"return false;\" >' +\n                buff +\n                \"</div>\"\n            );\n        }\n    };\n\n    utils.inherits(ShortCutMenu, UIBase);\n\n    function hideAllMenu(e) {\n        var tgt = e.target || e.srcElement,\n            cur = domUtils.findParent(\n                tgt,\n                function (node) {\n                    return (\n                        domUtils.hasClass(node, \"edui-shortcutmenu\") ||\n                        domUtils.hasClass(node, \"edui-popup\")\n                    );\n                },\n                true\n            );\n\n        if (!cur) {\n            for (var i = 0, menu; (menu = allMenus[i++]);) {\n                menu.hide();\n            }\n        }\n    }\n\n    domUtils.on(document, \"mousedown\", function (e) {\n        hideAllMenu(e);\n    });\n\n    domUtils.on(window, \"scroll\", function (e) {\n        hideAllMenu(e);\n    });\n})();\n"
  },
  {
    "path": "_src/ui/splitbutton.js",
    "content": "///import core\n///import uicore\n///import ui/stateful.js\n(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        domUtils = baidu.editor.dom.domUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Stateful = baidu.editor.ui.Stateful,\n        SplitButton = (baidu.editor.ui.SplitButton = function (options) {\n            this.initOptions(options);\n            this.initSplitButton();\n        });\n    SplitButton.prototype = {\n        popup: null,\n        uiName: \"splitbutton\",\n        title: \"\",\n        initSplitButton: function () {\n            this.initUIBase();\n            this.Stateful_init();\n            var me = this;\n            if (this.popup != null) {\n                var popup = this.popup;\n                this.popup = null;\n                this.setPopup(popup);\n            }\n        },\n        _UIBase_postRender: UIBase.prototype.postRender,\n        postRender: function () {\n            this.Stateful_postRender();\n            this._UIBase_postRender();\n        },\n        setPopup: function (popup) {\n            if (this.popup === popup) return;\n            if (this.popup != null) {\n                this.popup.dispose();\n            }\n            popup.addListener(\"show\", utils.bind(this._onPopupShow, this));\n            popup.addListener(\"hide\", utils.bind(this._onPopupHide, this));\n            popup.addListener(\n                \"postrender\",\n                utils.bind(function () {\n                    popup\n                        .getDom(\"body\")\n                        .appendChild(\n                            uiUtils.createElementByHtml(\n                                '<div id=\"' +\n                                this.popup.id +\n                                '_bordereraser\" class=\"edui-bordereraser edui-background\" style=\"width:' +\n                                (uiUtils.getClientRect(this.getDom()).width + 20) +\n                                'px\"></div>'\n                            )\n                        );\n                    popup.getDom().className += \" \" + this.className;\n                }, this)\n            );\n            this.popup = popup;\n        },\n        _onPopupShow: function () {\n            this.addState(\"opened\");\n        },\n        _onPopupHide: function () {\n            this.removeState(\"opened\");\n        },\n        getHtmlTpl: function () {\n            return (\n                '<div id=\"##\" class=\"edui-box %%\">' +\n                \"<div \" +\n                (this.title ? 'title=\"' + this.title + '\"' : \"\") +\n                ' id=\"##_state\" stateful><div class=\"%%-body\">' +\n                '<div id=\"##_button_body\" class=\"edui-box edui-button-body\" onclick=\"$$._onButtonClick(event, this);\">' +\n                '<div class=\"edui-box edui-icon\"></div>' +\n                \"</div>\" +\n                '<div class=\"edui-box edui-splitborder\"></div>' +\n                '<div class=\"edui-box edui-arrow\" onclick=\"$$._onArrowClick();\"></div>' +\n                \"</div></div></div>\"\n            );\n        },\n        showPopup: function () {\n            // 当popup往上弹出的时候，做特殊处理\n            var rect = uiUtils.getClientRect(this.getDom());\n            rect.top -= this.popup.SHADOW_RADIUS;\n            rect.height += this.popup.SHADOW_RADIUS;\n            this.popup.showAnchorRect(rect);\n        },\n        _onArrowClick: function (event, el) {\n            if (!this.isDisabled()) {\n                this.showPopup();\n            }\n        },\n        _onButtonClick: function () {\n            if (!this.isDisabled()) {\n                this.fireEvent(\"buttonclick\");\n            }\n        }\n    };\n    utils.inherits(SplitButton, UIBase);\n    utils.extend(SplitButton.prototype, Stateful, true);\n})();\n"
  },
  {
    "path": "_src/ui/stateful.js",
    "content": "(function () {\n    var browser = baidu.editor.browser,\n        domUtils = baidu.editor.dom.domUtils,\n        uiUtils = baidu.editor.ui.uiUtils;\n\n    var TPL_STATEFUL =\n        'onmousedown=\"$$.Stateful_onMouseDown(event, this);\"' +\n        ' onmouseup=\"$$.Stateful_onMouseUp(event, this);\"' +\n        (browser.ie\n            ? ' onmouseenter=\"$$.Stateful_onMouseEnter(event, this);\"' +\n            ' onmouseleave=\"$$.Stateful_onMouseLeave(event, this);\"'\n            : ' onmouseover=\"$$.Stateful_onMouseOver(event, this);\"' +\n            ' onmouseout=\"$$.Stateful_onMouseOut(event, this);\"');\n\n    baidu.editor.ui.Stateful = {\n        alwalysHoverable: false,\n        target: null, //目标元素和this指向dom不一样\n        Stateful_init: function () {\n            this._Stateful_dGetHtmlTpl = this.getHtmlTpl;\n            this.getHtmlTpl = this.Stateful_getHtmlTpl;\n        },\n        Stateful_getHtmlTpl: function () {\n            var tpl = this._Stateful_dGetHtmlTpl();\n            // 使用function避免$转义\n            return tpl.replace(/stateful/g, function () {\n                return TPL_STATEFUL;\n            });\n        },\n        Stateful_onMouseEnter: function (evt, el) {\n            this.target = el;\n            if (!this.isDisabled() || this.alwalysHoverable) {\n                this.addState(\"hover\");\n                this.fireEvent(\"over\");\n            }\n        },\n        Stateful_onMouseLeave: function (evt, el) {\n            if (!this.isDisabled() || this.alwalysHoverable) {\n                this.removeState(\"hover\");\n                this.removeState(\"active\");\n                this.fireEvent(\"out\");\n            }\n        },\n        Stateful_onMouseOver: function (evt, el) {\n            var rel = evt.relatedTarget;\n            if (!uiUtils.contains(el, rel) && el !== rel) {\n                this.Stateful_onMouseEnter(evt, el);\n            }\n        },\n        Stateful_onMouseOut: function (evt, el) {\n            var rel = evt.relatedTarget;\n            if (!uiUtils.contains(el, rel) && el !== rel) {\n                this.Stateful_onMouseLeave(evt, el);\n            }\n        },\n        Stateful_onMouseDown: function (evt, el) {\n            if (!this.isDisabled()) {\n                this.addState(\"active\");\n            }\n        },\n        Stateful_onMouseUp: function (evt, el) {\n            if (!this.isDisabled()) {\n                this.removeState(\"active\");\n            }\n        },\n        Stateful_postRender: function () {\n            if (this.disabled && !this.hasState(\"disabled\")) {\n                this.addState(\"disabled\");\n            }\n        },\n        hasState: function (state) {\n            return domUtils.hasClass(this.getStateDom(), \"edui-state-\" + state);\n        },\n        addState: function (state) {\n            if (!this.hasState(state)) {\n                this.getStateDom().className += \" edui-state-\" + state;\n            }\n        },\n        removeState: function (state) {\n            if (this.hasState(state)) {\n                domUtils.removeClasses(this.getStateDom(), [\"edui-state-\" + state]);\n            }\n        },\n        getStateDom: function () {\n            return this.getDom(\"state\");\n        },\n        isChecked: function () {\n            return this.hasState(\"checked\");\n        },\n        setChecked: function (checked) {\n            if (!this.isDisabled() && checked) {\n                this.addState(\"checked\");\n            } else {\n                this.removeState(\"checked\");\n            }\n        },\n        isDisabled: function () {\n            return this.hasState(\"disabled\");\n        },\n        setDisabled: function (disabled) {\n            if (disabled) {\n                this.removeState(\"hover\");\n                this.removeState(\"checked\");\n                this.removeState(\"active\");\n                this.addState(\"disabled\");\n            } else {\n                this.removeState(\"disabled\");\n            }\n        }\n    };\n})();\n"
  },
  {
    "path": "_src/ui/tablebutton.js",
    "content": "///import core\n///import uicore\n///import ui/popup.js\n///import ui/tablepicker.js\n///import ui/splitbutton.js\n(function () {\n    var utils = baidu.editor.utils,\n        Popup = baidu.editor.ui.Popup,\n        TablePicker = baidu.editor.ui.TablePicker,\n        SplitButton = baidu.editor.ui.SplitButton,\n        TableButton = (baidu.editor.ui.TableButton = function (options) {\n            this.initOptions(options);\n            this.initTableButton();\n        });\n    TableButton.prototype = {\n        initTableButton: function () {\n            var me = this;\n            this.popup = new Popup({\n                content: new TablePicker({\n                    editor: me.editor,\n                    onpicktable: function (t, numCols, numRows) {\n                        me._onPickTable(numCols, numRows);\n                    }\n                }),\n                editor: me.editor\n            });\n            this.initSplitButton();\n        },\n        _onPickTable: function (numCols, numRows) {\n            if (this.fireEvent(\"picktable\", numCols, numRows) !== false) {\n                this.popup.hide();\n            }\n        }\n    };\n    utils.inherits(TableButton, SplitButton);\n})();\n"
  },
  {
    "path": "_src/ui/tablepicker.js",
    "content": "///import core\n///import uicore\n(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase;\n\n    var TablePicker = (baidu.editor.ui.TablePicker = function (options) {\n        this.initOptions(options);\n        this.initTablePicker();\n    });\n    TablePicker.prototype = {\n        defaultNumRows: 10,\n        defaultNumCols: 10,\n        maxNumRows: 20,\n        maxNumCols: 20,\n        numRows: 10,\n        numCols: 10,\n        lengthOfCellSide: 22,\n        initTablePicker: function () {\n            this.initUIBase();\n        },\n        getHtmlTpl: function () {\n            var me = this;\n            return (\n                '<div id=\"##\" class=\"edui-tablepicker %%\">' +\n                '<div class=\"edui-tablepicker-body\">' +\n                '<div class=\"edui-infoarea\">' +\n                '<span id=\"##_label\" class=\"edui-label\"></span>' +\n                \"</div>\" +\n                '<div class=\"edui-pickarea\"' +\n                ' onmousemove=\"$$._onMouseMove(event, this);\"' +\n                ' onmouseover=\"$$._onMouseOver(event, this);\"' +\n                ' onmouseout=\"$$._onMouseOut(event, this);\"' +\n                ' onclick=\"$$._onClick(event, this);\"' +\n                \">\" +\n                '<div id=\"##_overlay\" class=\"edui-overlay\"></div>' +\n                \"</div>\" +\n                \"</div>\" +\n                \"</div>\"\n            );\n        },\n        _UIBase_render: UIBase.prototype.render,\n        render: function (holder) {\n            this._UIBase_render(holder);\n            this.getDom(\"label\").innerHTML =\n                \"0\" +\n                this.editor.getLang(\"t_row\") +\n                \" x 0\" +\n                this.editor.getLang(\"t_col\");\n        },\n        _track: function (numCols, numRows) {\n            var style = this.getDom(\"overlay\").style;\n            var sideLen = this.lengthOfCellSide;\n            style.width = numCols * sideLen + \"px\";\n            style.height = numRows * sideLen + \"px\";\n            var label = this.getDom(\"label\");\n            label.innerHTML =\n                numCols +\n                this.editor.getLang(\"t_col\") +\n                \" x \" +\n                numRows +\n                this.editor.getLang(\"t_row\");\n            this.numCols = numCols;\n            this.numRows = numRows;\n        },\n        _onMouseOver: function (evt, el) {\n            var rel = evt.relatedTarget || evt.fromElement;\n            if (!uiUtils.contains(el, rel) && el !== rel) {\n                this.getDom(\"label\").innerHTML =\n                    \"0\" +\n                    this.editor.getLang(\"t_col\") +\n                    \" x 0\" +\n                    this.editor.getLang(\"t_row\");\n                this.getDom(\"overlay\").style.visibility = \"\";\n            }\n        },\n        _onMouseOut: function (evt, el) {\n            var rel = evt.relatedTarget || evt.toElement;\n            if (!uiUtils.contains(el, rel) && el !== rel) {\n                this.getDom(\"label\").innerHTML =\n                    \"0\" +\n                    this.editor.getLang(\"t_col\") +\n                    \" x 0\" +\n                    this.editor.getLang(\"t_row\");\n                this.getDom(\"overlay\").style.visibility = \"hidden\";\n            }\n        },\n        _onMouseMove: function (evt, el) {\n            var style = this.getDom(\"overlay\").style;\n            var offset = uiUtils.getEventOffset(evt);\n            var sideLen = this.lengthOfCellSide;\n            var numCols = Math.ceil(offset.left / sideLen);\n            var numRows = Math.ceil(offset.top / sideLen);\n            this._track(numCols, numRows);\n        },\n        _onClick: function () {\n            this.fireEvent(\"picktable\", this.numCols, this.numRows);\n        }\n    };\n    utils.inherits(TablePicker, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/toolbar.js",
    "content": "(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        UIBase = baidu.editor.ui.UIBase,\n        Toolbar = (baidu.editor.ui.Toolbar = function (options) {\n            this.initOptions(options);\n            this.initToolbar();\n        });\n    Toolbar.prototype = {\n        items: null,\n        initToolbar: function () {\n            this.items = this.items || [];\n            this.initUIBase();\n        },\n        add: function (item, index) {\n            if (index === undefined) {\n                this.items.push(item);\n            } else {\n                this.items.splice(index, 0, item);\n            }\n        },\n        getHtmlTpl: function () {\n            var buff = [];\n            for (var i = 0; i < this.items.length; i++) {\n                buff[i] = this.items[i].renderHtml();\n            }\n            return (\n                '<div id=\"##\" class=\"edui-toolbar %%\" onselectstart=\"return false;\" onmousedown=\"return $$._onMouseDown(event, this);\">' +\n                buff.join(\"\") +\n                \"</div>\"\n            );\n        },\n        postRender: function () {\n            var box = this.getDom();\n            for (var i = 0; i < this.items.length; i++) {\n                this.items[i].postRender();\n            }\n            uiUtils.makeUnselectable(box);\n        },\n        _onMouseDown: function (e) {\n            var target = e.target || e.srcElement,\n                tagName = target && target.tagName && target.tagName.toLowerCase();\n            if (tagName == \"input\" || tagName == \"object\" || tagName == \"object\") {\n                return false;\n            }\n        }\n    };\n    utils.inherits(Toolbar, UIBase);\n})();\n"
  },
  {
    "path": "_src/ui/ui.js",
    "content": "var baidu = baidu || {};\r\nbaidu.editor = baidu.editor || {};\r\nUE.ui = baidu.editor.ui = {};\r\n"
  },
  {
    "path": "_src/ui/uibase.js",
    "content": "(function () {\n    var utils = baidu.editor.utils,\n        uiUtils = baidu.editor.ui.uiUtils,\n        EventBase = baidu.editor.EventBase,\n        UIBase = (baidu.editor.ui.UIBase = function () {\n        });\n\n    UIBase.prototype = {\n        el: null,\n        className: \"\",\n        uiName: \"\",\n        initOptions: function (options) {\n            var me = this;\n            for (var k in options) {\n                me[k] = options[k];\n            }\n            this.id = this.id || \"edui\" + uiUtils.uid();\n        },\n        initUIBase: function () {\n            this._globalKey = utils.unhtml(uiUtils.setGlobal(this.id, this));\n        },\n        render: function (holder) {\n            var html = this.renderHtml();\n            var el = uiUtils.createElementByHtml(html);\n\n            //by xuheng 给每个node添加class\n            var list = domUtils.getElementsByTagName(el, \"*\");\n            var theme = \"edui-\" + (this.theme || this.editor.options.theme);\n            var layer = document.getElementById(\"edui_fixedlayer\");\n            for (var i = 0, node; (node = list[i++]);) {\n                domUtils.addClass(node, theme);\n            }\n            domUtils.addClass(el, theme);\n            if (layer) {\n                layer.className = \"\";\n                domUtils.addClass(layer, theme);\n            }\n\n            var seatEl = this.getDom();\n            if (seatEl != null) {\n                seatEl.parentNode.replaceChild(el, seatEl);\n                uiUtils.copyAttributes(el, seatEl);\n            } else {\n                if (typeof holder == \"string\") {\n                    holder = document.getElementById(holder);\n                }\n                holder = holder || uiUtils.getFixedLayer();\n                // console.log('Uibase.render',holder,el);\n                domUtils.addClass(holder, theme);\n                holder.appendChild(el);\n            }\n            this.el = el;\n            this.postRender();\n        },\n        getDom: function (name) {\n            if (!name) {\n                return document.getElementById(this.id);\n            } else {\n                return document.getElementById(this.id + \"_\" + name);\n            }\n        },\n        postRender: function () {\n            this.fireEvent(\"postrender\");\n        },\n        getHtmlTpl: function () {\n            return \"\";\n        },\n        formatHtml: function (tpl) {\n            var prefix = \"edui-\" + this.uiName;\n            return tpl\n                .replace(/##/g, this.id)\n                .replace(/%%-/g, this.uiName ? prefix + \"-\" : \"\")\n                .replace(/%%/g, (this.uiName ? prefix : \"\") + \" \" + this.className)\n                .replace(/\\$\\$/g, this._globalKey);\n        },\n        renderHtml: function () {\n            return this.formatHtml(this.getHtmlTpl());\n        },\n        dispose: function () {\n            var box = this.getDom();\n            if (box) baidu.editor.dom.domUtils.remove(box);\n            uiUtils.unsetGlobal(this.id);\n        },\n        uiIsShow: true,\n        uiShowStyleBackupValue: null,\n        uiShow: function (enable) {\n            if (enable) {\n                if (this.uiIsShow) {\n                    return;\n                }\n                this.getDom().style.display = this.uiShowStyleBackupValue;\n                this.uiIsShow = true;\n            } else {\n                if (!this.uiIsShow) {\n                    return;\n                }\n                this.uiShowStyleBackupValue = this.getDom().style.display;\n                this.getDom().style.display = 'none';\n                this.uiIsShow = false;\n            }\n        }\n    };\n    utils.inherits(UIBase, EventBase);\n})();\n"
  },
  {
    "path": "_src/ui/uiutils.js",
    "content": "(function () {\n    var browser = baidu.editor.browser,\n        domUtils = baidu.editor.dom.domUtils;\n\n    var magic = \"$EDITORUI\";\n    var root = (window[magic] = {});\n    var uidMagic = \"ID\" + magic;\n    var uidCount = 0;\n\n    var uiUtils = (baidu.editor.ui.uiUtils = {\n        uid: function (obj) {\n            return obj ? obj[uidMagic] || (obj[uidMagic] = ++uidCount) : ++uidCount;\n        },\n        hook: function (fn, callback) {\n            var dg;\n            if (fn && fn._callbacks) {\n                dg = fn;\n            } else {\n                dg = function () {\n                    var q;\n                    if (fn) {\n                        q = fn.apply(this, arguments);\n                    }\n                    var callbacks = dg._callbacks;\n                    var k = callbacks.length;\n                    while (k--) {\n                        var r = callbacks[k].apply(this, arguments);\n                        if (q === undefined) {\n                            q = r;\n                        }\n                    }\n                    return q;\n                };\n                dg._callbacks = [];\n            }\n            dg._callbacks.push(callback);\n            return dg;\n        },\n        createElementByHtml: function (html) {\n            var el = document.createElement(\"div\");\n            el.innerHTML = html;\n            el = el.firstChild;\n            el.parentNode.removeChild(el);\n            return el;\n        },\n        getViewportElement: function () {\n            return browser.ie && browser.quirks\n                ? document.body\n                : document.documentElement;\n        },\n        getClientRect: function (element) {\n            var bcr;\n            //trace  IE6下在控制编辑器显隐时可能会报错，catch一下\n            try {\n                bcr = element.getBoundingClientRect();\n            } catch (e) {\n                bcr = {left: 0, top: 0, height: 0, width: 0};\n            }\n            var rect = {\n                left: Math.round(bcr.left),\n                top: Math.round(bcr.top),\n                height: Math.round(bcr.bottom - bcr.top),\n                width: Math.round(bcr.right - bcr.left)\n            };\n            var doc;\n            while (\n                (doc = element.ownerDocument) !== document &&\n                (element = domUtils.getWindow(doc).frameElement)\n                ) {\n                bcr = element.getBoundingClientRect();\n                rect.left += bcr.left;\n                rect.top += bcr.top;\n            }\n            rect.bottom = rect.top + rect.height;\n            rect.right = rect.left + rect.width;\n            return rect;\n        },\n        getViewportRect: function () {\n            var viewportEl = uiUtils.getViewportElement();\n            var width = (window.innerWidth || viewportEl.clientWidth) | 0;\n            var height = (window.innerHeight || viewportEl.clientHeight) | 0;\n            return {\n                left: 0,\n                top: 0,\n                height: height,\n                width: width,\n                bottom: height,\n                right: width\n            };\n        },\n        setViewportOffset: function (element, offset) {\n            var rect;\n            var fixedLayer = uiUtils.getFixedLayer();\n            if (element.parentNode === fixedLayer) {\n                element.style.left = offset.left + \"px\";\n                element.style.top = offset.top + \"px\";\n            } else {\n                domUtils.setViewportOffset(element, offset);\n            }\n        },\n        getEventOffset: function (evt) {\n            var el = evt.target || evt.srcElement;\n            var rect = uiUtils.getClientRect(el);\n            var offset = uiUtils.getViewportOffsetByEvent(evt);\n            return {\n                left: offset.left - rect.left,\n                top: offset.top - rect.top\n            };\n        },\n        getViewportOffsetByEvent: function (evt) {\n            var el = evt.target || evt.srcElement;\n            var frameEl = domUtils.getWindow(el).frameElement;\n            var offset = {\n                left: evt.clientX,\n                top: evt.clientY\n            };\n            if (frameEl && el.ownerDocument !== document) {\n                var rect = uiUtils.getClientRect(frameEl);\n                offset.left += rect.left;\n                offset.top += rect.top;\n            }\n            return offset;\n        },\n        setGlobal: function (id, obj) {\n            root[id] = obj;\n            return magic + '[\"' + id + '\"]';\n        },\n        unsetGlobal: function (id) {\n            delete root[id];\n        },\n        copyAttributes: function (tgt, src) {\n            var attributes = src.attributes;\n            var k = attributes.length;\n            while (k--) {\n                var attrNode = attributes[k];\n                if (\n                    attrNode.nodeName != \"style\" &&\n                    attrNode.nodeName != \"class\" &&\n                    (!browser.ie || attrNode.specified)\n                ) {\n                    tgt.setAttribute(attrNode.nodeName, attrNode.nodeValue);\n                }\n            }\n            if (src.className) {\n                domUtils.addClass(tgt, src.className);\n            }\n            if (src.style.cssText) {\n                tgt.style.cssText += \";\" + src.style.cssText;\n            }\n        },\n        removeStyle: function (el, styleName) {\n            if (el.style.removeProperty) {\n                el.style.removeProperty(styleName);\n            } else if (el.style.removeAttribute) {\n                el.style.removeAttribute(styleName);\n            } else throw \"\";\n        },\n        contains: function (elA, elB) {\n            return (\n                elA &&\n                elB &&\n                (elA === elB\n                    ? false\n                    : elA.contains\n                        ? elA.contains(elB)\n                        : elA.compareDocumentPosition(elB) & 16)\n            );\n        },\n        startDrag: function (evt, callbacks, doc) {\n            var doc = doc || document;\n            var startX = evt.clientX;\n            var startY = evt.clientY;\n\n            function handleMouseMove(evt) {\n                var x = evt.clientX - startX;\n                var y = evt.clientY - startY;\n                callbacks.ondragmove(x, y, evt);\n                if (evt.stopPropagation) {\n                    evt.stopPropagation();\n                } else {\n                    evt.cancelBubble = true;\n                }\n            }\n\n            if (doc.addEventListener) {\n                function handleMouseUp(evt) {\n                    doc.removeEventListener(\"mousemove\", handleMouseMove, true);\n                    doc.removeEventListener(\"mouseup\", handleMouseUp, true);\n                    window.removeEventListener(\"mouseup\", handleMouseUp, true);\n                    callbacks.ondragstop();\n                }\n\n                doc.addEventListener(\"mousemove\", handleMouseMove, true);\n                doc.addEventListener(\"mouseup\", handleMouseUp, true);\n                window.addEventListener(\"mouseup\", handleMouseUp, true);\n\n                evt.preventDefault();\n            } else {\n                var elm = evt.srcElement;\n                elm.setCapture();\n\n                function releaseCaptrue() {\n                    elm.releaseCapture();\n                    elm.detachEvent(\"onmousemove\", handleMouseMove);\n                    elm.detachEvent(\"onmouseup\", releaseCaptrue);\n                    elm.detachEvent(\"onlosecaptrue\", releaseCaptrue);\n                    callbacks.ondragstop();\n                }\n\n                elm.attachEvent(\"onmousemove\", handleMouseMove);\n                elm.attachEvent(\"onmouseup\", releaseCaptrue);\n                elm.attachEvent(\"onlosecaptrue\", releaseCaptrue);\n                evt.returnValue = false;\n            }\n            callbacks.ondragstart();\n        },\n        getFixedLayer: function () {\n            var layer = document.getElementById(\"edui_fixedlayer\");\n            if (layer == null) {\n                layer = document.createElement(\"div\");\n                layer.id = \"edui_fixedlayer\";\n                document.body.appendChild(layer);\n                if (browser.ie && browser.version <= 8) {\n                    layer.style.position = \"absolute\";\n                    bindFixedLayer();\n                    setTimeout(updateFixedOffset);\n                } else {\n                    layer.style.position = \"fixed\";\n                }\n                layer.style.left = \"0\";\n                layer.style.top = \"0\";\n                layer.style.width = \"0\";\n                layer.style.height = \"0\";\n                layer.style.margin = \"0\";\n            }\n            return layer;\n        },\n        makeUnselectable: function (element) {\n            if (browser.opera || (browser.ie && browser.version < 9)) {\n                element.unselectable = \"on\";\n                if (element.hasChildNodes()) {\n                    for (var i = 0; i < element.childNodes.length; i++) {\n                        if (element.childNodes[i].nodeType === 1) {\n                            uiUtils.makeUnselectable(element.childNodes[i]);\n                        }\n                    }\n                }\n            } else {\n                if (element.style.MozUserSelect !== undefined) {\n                    element.style.MozUserSelect = \"none\";\n                } else if (element.style.WebkitUserSelect !== undefined) {\n                    element.style.WebkitUserSelect = \"none\";\n                } else if (element.style.KhtmlUserSelect !== undefined) {\n                    element.style.KhtmlUserSelect = \"none\";\n                }\n            }\n        }\n    });\n\n    function updateFixedOffset() {\n        var layer = document.getElementById(\"edui_fixedlayer\");\n        uiUtils.setViewportOffset(layer, {\n            left: 0,\n            top: 0\n        });\n        //        layer.style.display = 'none';\n        //        layer.style.display = 'block';\n\n        //#trace: 1354\n        //        setTimeout(updateFixedOffset);\n    }\n\n    function bindFixedLayer(adjOffset) {\n        domUtils.on(window, \"scroll\", updateFixedOffset);\n        domUtils.on(\n            window,\n            \"resize\",\n            baidu.editor.utils.defer(updateFixedOffset, 0, true)\n        );\n    }\n})();\n"
  },
  {
    "path": "dialogs/ai/ai.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\" />\n    <link rel=\"stylesheet\" href=\"./../../themes/default/dialog.css?{timestamp}\">\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        [v-cloak] {\n            display: none;\n        }\n\n        .wrapper {\n            width: 620px;\n            padding: 10px;\n            height: 399px;\n            box-sizing: border-box;\n            overflow: hidden;\n            position: relative;\n            font-size: 13px;\n        }\n\n        .wrapper .input::placeholder {\n            color: #999;\n        }\n\n        .ai-operate {\n            display: block;\n            min-width: 9em;\n            text-align: center;\n            text-decoration: none;\n            line-height: 30px;\n            background: var(--edui-color-border);\n            color: #111;\n            border-radius: 15px;\n            padding: 0 10px;\n            margin: 5px 5px 0 0;\n        }\n\n        .ai-operate:hover {\n            box-shadow: 0 0 5px rgba(0, 0, 0, .1);\n        }\n\n        .btn.primary:hover {\n            box-shadow: 0 0 10px rgba(0, 0, 0, .2);\n        }\n\n        .close:hover {\n            color: red !important;\n        }\n    </style>\n</head>\n\n<body>\n    <div class=\"wrapper\" id=\"app\" v-cloak>\n\n        <div>\n            <div v-if=\"selectText\"\n                style=\"line-height:30px;padding:0 10px;border-radius:5px;margin-bottom:10px;display:inline-flex;align-items:center;\">\n                <div style=\"margin-right:5px;\">\n                    <i class=\"edui-iconfont edui-icon-outline\" style=\"font-size:18px;\"></i>\n                </div>\n                <div style=\"text-overflow:ellipsis;white-space:nowrap;overflow:hidden;max-width:550px;\">\n                    {{ selectText }}\n                </div>\n            </div>\n            <div class=\"flex\" style=\"padding: 5px; border-radius: 30px; box-shadow: 0 0 10px #CCC;\">\n                <div class=\"flex-grow\">\n                    <input type=\"text\" v-model=\"inputText\" class=\"input\"\n                        style=\"width:540px;border-color:transparent;font-size:14px;\"\n                        placeholder=\"告诉 AI 下一步应该如何？比如：帮我翻译成英语\" />\n                </div>\n                <div class=\"flex-shrink-0\" style=\"width:32px;padding-right:5px;\">\n                    <a href=\"javascript:;\" class=\"btn primary\" @click=\"doSubmitDirect\"\n                        style=\"width:30px;text-align:center;padding:0;border-radius:50%;\">\n                        <i v-if=\"loading\" class=\"edui-iconfont edui-icon-refresh\"\n                            style=\"display:inline-block;animation:spin 2s linear infinite;\"></i>\n                        <i v-else class=\"edui-iconfont edui-icon-right-direction\"></i>\n                    </a>\n                </div>\n            </div>\n            <div v-if=\"resultHtml || resultError\"\n                style=\"border-top:1px solid #F2F2F2;margin-top:10px;padding-top:10px;\">\n                <div v-if=\"resultError\"\n                    style=\"color:red;background:rgba(255,0,0,0.1);margin-bottom:10px;padding:10px;border-radius:10px;\">\n                    {{ resultError }}\n                </div>\n                <div class=\"flex flex-items-center\" style=\"height:30px;\">\n                    <div class=\"flex-grow\">\n                        <i class=\"edui-iconfont edui-icon-robot\" style=\"font-size:16px;\"></i>\n                        以下为生成的结果\n                    </div>\n                    <div>\n                        <a v-if=\"!loading&&showInsert\" @click=\"doInsert\" href=\"javascript:;\" class=\"btn sm\">\n                            <i class=\"edui-iconfont edui-icon-page-break\"></i>\n                            插入\n                        </a>\n                        <a v-if=\"!loading&&showReplace&&selectText\" @click=\"doReplace\" href=\"javascript:;\"\n                            class=\"btn sm\">\n                            <i class=\"edui-iconfont edui-icon-eraser\"></i>\n                            替换\n                        </a>\n                        <a v-if=\"!loading&&showReplaceAll\" @click=\"doReplaceAll\" href=\"javascript:;\" class=\"btn sm\">\n                            <i class=\"edui-iconfont edui-icon-eraser\"></i>\n                            替换内容\n                        </a>\n                    </div>\n                </div>\n                <div style=\"margin-top:10px;background:rgba(0,0,0,0.03);padding:10px;border-radius:10px;overflow:auto;\"\n                    :style=\"{height:resultHeight}\">\n                    <div class=\"ub-html\" v-html=\"resultHtml\"></div>\n                </div>\n            </div>\n            <div v-else style=\"border-top:1px solid #F2F2F2;margin-top:10px;padding-top:10px;\">\n                <div v-if=\"functions.length\" style=\"color:#999;\">\n                    <i class=\"edui-iconfont edui-icon-bell\" style=\"font-size:16px;\"></i>\n                    提示：您可以在上面输入文字生成内容 或 选择下方的操作\n                </div>\n                <div v-else style=\"color:#999;\">\n                    <i class=\"edui-iconfont edui-icon-bell\" style=\"font-size:16px;\"></i>\n                    提示：您可以在上面输入文字生成内容\n                </div>\n                <div style=\"padding-top:10px;display:flex;flex-wrap:wrap;\">\n                    <a href=\"javascript:;\" v-for=\"f in functions\" @click=\"doSubmitFunction(f)\" class=\"ai-operate\">\n                        <span v-html=\"f.text\"></span>\n                    </a>\n                </div>\n            </div>\n        </div>\n\n    </div>\n    <script src=\"../../third-party/vue.js?{timestamp}\"></script>\n    <script src=\"../../third-party/showdown.js?{timestamp}\"></script>\n    <script src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n    <script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?{timestamp}\"></script>\n    <script type=\"text/javascript\" src=\"./ai.js?{timestamp}\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "dialogs/ai/ai.js",
    "content": "var aiConfig = editor.getOpt('ai')\n\nvar aiFunctions = editor.getOpt('aiFunctions');\n\nvar isMultiLine = function (text) {\n    return text.indexOf('\\n') !== -1;\n}\n\nvar fetchStream = function (url, option, onStream, onFinish) {\n    fetch(url, Object.assign({\n        method: 'POST',\n    }, option)).then(response => {\n        if (!response.ok) {\n            onFinish({ code: -1, msg: `HTTP error! status: ${response.status}` })\n            return\n        }\n        const reader = response.body.getReader();\n        const decoder = new TextDecoder('utf-8');\n        let buffer = '';\n        const textList = []\n\n        function processChunk(chunk) {\n            buffer += decoder.decode(chunk, { stream: true });\n            // 分割事件流，每个事件以\"data:\"开头，以两个换行符结束\n            const lines = buffer.split('\\n');\n            for (let line of lines) {\n                line = line.trim();\n                if (line.startsWith('data:')) {\n                    const jsonStr = line.replace('data:', '').trim();\n                    if (jsonStr === '[DONE]') {\n                        onFinish({ code: 0, msg: 'ok', data: { text: textList.join('') } })\n                        return;\n                    }\n                    try {\n                        let text = null\n                        const data = JSON.parse(jsonStr);\n                        if (data.choices && data.choices.length > 0 && data.choices[0].delta) {\n                            text = data.choices[0].delta.content\n                        } else if (data.type) {\n                            // 兼容ModStart\n                            // {\"type\":\"error\",\"data\":\"xxx\"}\n                            // {\"type\":\"end\",\"data\":\"xxx\"}\n                            // {\"type\":\"data\",\"data\":\"xxx\"}\n                            if (data.type === 'error') {\n                                onFinish({ code: -1, msg: data.data })\n                                return;\n                            } else if (data.type === 'end') {\n                                onFinish({ code: 0, msg: 'ok', data: { text: textList.join('') } })\n                                return;\n                            } else if (data.type === 'data') {\n                                text = data.data\n                            }\n                        }\n                        if (text !== null) {\n                            textList.push(text)\n                            onStream({ code: 0, msg: 'ok', data: { text: text } })\n                        } else {\n                            onFinish({ code: -1, msg: 'No text found!' })\n                            console.log('data:', data)\n                        }\n                    } catch (e) {\n                        onFinish({ code: -1, msg: 'JSON parse error!' + e })\n                    }\n                }\n            }\n            buffer = lines.pop() || '';\n        }\n\n        function read() {\n            reader.read().then(({ done, value }) => {\n                if (done) {\n                    if (buffer) processChunk(new Uint8Array());\n                    return;\n                }\n                processChunk(value);\n                read();\n            }).catch(error => {\n                onFinish({ code: -1, msg: 'Stream error!' + error })\n            });\n        }\n\n        read();\n    }).catch(error => {\n        onFinish({ code: -1, msg: 'Request error!' + error })\n    });\n}\n\nvar openAiCompletion = function (url, param, option) {\n    option = Object.assign({\n        body: null\n    }, option)\n    if (!option.body) {\n        option.body = {\n            model: aiConfig.driverConfig.model,\n            messages: [\n                { role: 'system', content: param.systemPromptText },\n                { role: 'user', content: param.promptText },\n            ],\n            stream: true,\n        }\n    }\n    fetchStream(\n        url,\n        {\n            headers: {\n                'Authorization': `Bearer ${aiConfig.driverConfig.key}`,\n                'Content-Type': 'application/json',\n            },\n            body: JSON.stringify(option.body)\n        },\n        param.onStream,\n        param.onFinish\n    )\n}\n\nvar drivers = {\n    'ModStart': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url, param, {\n            body: {\n                systemPrompt: param.systemPromptText,\n                prompt: param.promptText\n            }\n        })\n    },\n    'OpenAi': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://api.openai.com/v1/chat/completions', param)\n    },\n    'DeepSeek': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://api.deepseek.com/v1/chat/completions', param)\n    },\n    'Anthropic': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://api.anthropic.com/v1/messages', param)\n    },\n    'Google': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://generativelanguage.googleapis.com/v1beta/openai/chat/completions', param)\n    },\n    'Baidu': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions', param)\n    },\n    'Alibaba': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions', param)\n    },\n    'Tencent': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://hunyuan.tencentcloudapi.com/v1/chat/completions', param)\n    },\n    'Huawei': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://pangu.huaweicloud.com/v1/chat/completions', param)\n    },\n    'ByteDance': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://ark.cn-beijing.volces.com/api/v3/chat/completions', param)\n    },\n    'Zhipu': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://open.bigmodel.cn/api/paas/v4/chat/completions', param)\n    },\n    'Moonshot': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://api.moonshot.cn/v1/chat/completions', param)\n    },\n    'iFlytek': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://spark-api-open.xf-yun.com/v1/chat/completions', param)\n    },\n    'Volcengine': function (param) {\n        openAiCompletion(aiConfig.driverConfig.url || 'https://ark.cn-beijing.volces.com/api/v3/chat/completions', param)\n    },\n}\n\nfunction getRequest(driver) {\n    if (aiConfig.driverRequest) {\n        return aiConfig.driverRequest\n    }\n    if (driver in drivers) {\n        return drivers[driver]\n    }\n    return null\n}\n\nvar converter = new window.showdown.Converter();\n\nvar AiDefaultAiFunctionParam = {\n    showInsert: true,\n    showReplace: true,\n    showReplaceAll: false,\n};\n\nvar Ai = {\n    runtime: {\n        range: null,\n    },\n    init: function () {\n        new Vue({\n            el: '#app',\n            data: {\n                loading: false,\n                selectText: '',\n                inputText: '',\n                submitFunction: null,\n                systemPromptText: '',\n                promptText: '',\n                resultText: '',\n                resultError: '',\n                functions: [],\n                showInsert: AiDefaultAiFunctionParam.showInsert,\n                showReplace: AiDefaultAiFunctionParam.showReplace,\n                showReplaceAll: AiDefaultAiFunctionParam.showReplaceAll,\n            },\n            mounted: function () {\n                Ai.runtime.range = editor.selection.getRange();\n                var cloneContents = Ai.runtime.range.cloneContents();\n                if (cloneContents) {\n                    this.selectText = cloneContents.textContent.trim();\n                } else {\n                    this.selectText = '';\n                }\n                this.buildFunctions()\n            },\n            computed: {\n                resultHtml: function () {\n                    if (!this.resultText) {\n                        return '';\n                    }\n                    return converter.makeHtml(this.resultText);\n                },\n                resultHeight: function () {\n                    let height = 255\n                    if (this.selectText) {\n                        height -= 45\n                    }\n                    if (this.resultError) {\n                        height -= 45\n                    }\n                    return height + 'px'\n                }\n            },\n            methods: {\n                buildFunctions: function () {\n                    var enableParam = {\n                        selectText: this.selectText\n                    }\n                    this.functions = aiFunctions.map(function (f) {\n                        if (!f.enable(enableParam)) {\n                            return null;\n                        }\n                        f.prompt = f.prompt.replace(/\\{selectText\\}/g, enableParam.selectText);\n                        f.prompt = f.prompt.replace(/\\{html\\}/g, editor.getContent());\n                        f.param = Object.assign({}, AiDefaultAiFunctionParam, f.param);\n                        return f;\n                    }).filter(function (f) {\n                        return !!f;\n                    });\n                },\n                doSubmit: function () {\n                    if (this.loading) {\n                        return;\n                    }\n                    if (!this.systemPromptText) {\n                        editor.tipError('请输入系统提示语');\n                        return;\n                    }\n                    this.loading = true;\n                    this.resultError = '';\n                    this.resultText = '';\n                    var driverRequest = getRequest(aiConfig.driver)\n                    if (!driverRequest) {\n                        editor.tipError('未找到驱动');\n                        return;\n                    }\n                    driverRequest({\n                        systemPromptText: this.systemPromptText,\n                        promptText: this.promptText,\n                        onStream: (res) => {\n                            if (res.code) {\n                                this.resultError = res.msg;\n                                return;\n                            }\n                            this.resultText += res.data.text\n                        },\n                        onFinish: (res) => {\n                            this.loading = false;\n                            if (res.code) {\n                                this.resultError = res.msg;\n                                return;\n                            }\n                            this.resultText = res.data.text;\n                        }\n                    })\n                },\n                doSubmitFunction: function (f) {\n                    this.submitFunction = f;\n                    this.systemPromptText = f.systemPrompt || '';\n                    this.promptText = f.prompt || '';\n                    this.showInsert = f.param.showInsert;\n                    this.showReplace = f.param.showReplace;\n                    this.showReplaceAll = f.param.showReplaceAll;\n                    this.doSubmit()\n                },\n                doSubmitDirect: function () {\n                    this.submitFunction = null;\n                    this.systemPromptText = this.inputText || '';\n                    if (!this.systemPromptText) {\n                        editor.tipError('请输入系统提示语');\n                        return;\n                    }\n                    this.showInsert = AiDefaultAiFunctionParam.showInsert;\n                    this.showReplace = AiDefaultAiFunctionParam.showReplace;\n                    this.showReplaceAll = AiDefaultAiFunctionParam.showReplaceAll;\n                    this.doSubmit()\n                },\n                doInsert: function () {\n                    editor.fireEvent('saveScene');\n                    if (this.selectText) {\n                        if (isMultiLine(this.resultText)) {\n                            Ai.runtime.range.insertNode(document.createRange().createContextualFragment(this.resultHtml));\n                        } else {\n                            Ai.runtime.range.insertNode(document.createTextNode(this.resultText));\n                        }\n                    } else {\n                        if (isMultiLine(this.resultText)) {\n                            editor.execCommand('insertHtml', this.resultHtml);\n                        } else {\n                            editor.execCommand('insertHtml', this.resultText);\n                        }\n                    }\n                    dialog.close(true);\n                },\n                doReplace: function () {\n                    editor.fireEvent('saveScene');\n                    Ai.runtime.range.deleteContents();\n                    if (isMultiLine(this.resultText)) {\n                        Ai.runtime.range.insertNode(document.createRange().createContextualFragment(this.resultHtml));\n                    } else {\n                        Ai.runtime.range.insertNode(document.createTextNode(this.resultText));\n                    }\n                    dialog.close(true);\n                },\n                doReplaceAll: function () {\n                    editor.fireEvent('saveScene');\n                    editor.setContent(this.resultText);\n                    dialog.close(true);\n                }\n            }\n        });\n    },\n};\nutils.domReady(function () {\n    Ai.init();\n});\n"
  },
  {
    "path": "dialogs/anchor/anchor.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <style type=\"text/css\">\n        * {\n            color: #838383;\n            margin: 0;\n            padding: 0\n        }\n\n        html, body {\n            font-size: 12px;\n            overflow: hidden;\n        }\n\n        .content {\n            padding: 5px 0 0 15px;\n        }\n\n        input {\n            margin-left: 4px;\n            box-sizing: border-box;\n            width: 210px;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #F2F2F2;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div class=\"content\">\n    <span><var id=\"lang_input_anchorName\"></var></span><input id=\"anchorName\" value=\"\"/>\n</div>\n<script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    var anchorInput = $G('anchorName'),\n        node = editor.selection.getRange().getClosedNode();\n    if (node && node.tagName == 'IMG' && (node = node.getAttribute('anchorname'))) {\n        anchorInput.value = node;\n    }\n    anchorInput.onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            editor.execCommand('anchor', anchorInput.value);\n            dialog.close();\n            domUtils.preventDefault(evt)\n        }\n    };\n    dialog.onok = function () {\n        editor.execCommand('anchor', anchorInput.value);\n        dialog.close();\n    };\n    $focus(anchorInput);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/attachment/attachment.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float: left;\n}\n\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 上传附件 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top: 0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display: none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n\n#upload .filelist li.filePickerBlock div.webuploader-pick {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display: none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display: none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter: alpha(opacity=60);\n    -moz-opacity: 0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n\n#online #fileList {\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width: 0;\n    height: 0;\n    margin: 0;\n    padding: 0;\n}\n\n#online li img {\n    cursor: pointer;\n}\n\n#online li div.file-wrapper {\n    cursor: pointer;\n    position: absolute;\n    display: block;\n    width: 111px;\n    height: 111px;\n    border: 1px solid #eee;\n    background: url(\"./images/bg.png\") repeat;\n}\n\n#online li div span.file-title {\n    display: block;\n    padding: 0 3px;\n    margin: 3px 0 0 0;\n    font-size: 12px;\n    height: 15px;\n    color: #555555;\n    text-align: center;\n    width: 107px;\n    white-space: nowrap;\n    word-break: break-all;\n    overflow: hidden;\n    text-overflow: ellipsis;\n}\n\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif) \\9;\n    background-position: 75px 75px;\n}\n\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\n\ni.file-preview.file-type-dir {\n    background-position: 0 center;\n}\n\ni.file-preview.file-type-file {\n    background-position: -140px center;\n}\n\ni.file-preview.file-type-filelist {\n    background-position: -210px center;\n}\n\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2 {\n    background-position: -280px center;\n}\n\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx {\n    background-position: -350px center;\n}\n\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx {\n    background-position: -420px center;\n}\n\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx {\n    background-position: -490px center;\n}\n\ni.file-preview.file-type-vsd {\n    background-position: -560px center;\n}\n\ni.file-preview.file-type-pdf {\n    background-position: -630px center;\n}\n\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp {\n    background-position: -700px center;\n}\n\ni.file-preview.file-type-apk {\n    background-position: -770px center;\n}\n\ni.file-preview.file-type-exe {\n    background-position: -840px center;\n}\n\ni.file-preview.file-type-ipa {\n    background-position: -910px center;\n}\n\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb {\n    background-position: -980px center;\n}\n\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3 {\n    background-position: -1050px center;\n}\n\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd {\n    background-position: -140px center;\n}\n"
  },
  {
    "path": "dialogs/attachment/attachment.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?{timestamp}\">\n\n    <!-- attachment dialog -->\n    <link rel=\"stylesheet\" href=\"attachment.css?{timestamp}\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"fileList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"attachment.js?{timestamp}\"></script>\n\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/attachment/attachment.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n\n(function () {\n\n    var uploadFile,\n        onlineFile;\n\n    window.onload = function () {\n        initTabs();\n        initButtons();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabhead').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                setTabFocus(target.getAttribute('data-content-id'));\n            });\n        }\n\n        setTabFocus('upload');\n    }\n\n    /* 初始化tabbody */\n    function setTabFocus(id) {\n        if (!id) return;\n        var i, bodyId, tabs = $G('tabhead').children;\n        for (i = 0; i < tabs.length; i++) {\n            bodyId = tabs[i].getAttribute('data-content-id')\n            if (bodyId == id) {\n                domUtils.addClass(tabs[i], 'focus');\n                domUtils.addClass($G(bodyId), 'focus');\n            } else {\n                domUtils.removeClasses(tabs[i], 'focus');\n                domUtils.removeClasses($G(bodyId), 'focus');\n            }\n        }\n        switch (id) {\n            case 'upload':\n                uploadFile = uploadFile || new UploadFile('queueList');\n                break;\n            case 'online':\n                onlineFile = onlineFile || new OnlineFile('fileList');\n                break;\n        }\n    }\n\n    /* 初始化onok事件 */\n    function initButtons() {\n\n        dialog.onok = function () {\n            var list = [], id, tabs = $G('tabhead').children;\n            for (var i = 0; i < tabs.length; i++) {\n                if (domUtils.hasClass(tabs[i], 'focus')) {\n                    id = tabs[i].getAttribute('data-content-id');\n                    break;\n                }\n            }\n\n            switch (id) {\n                case 'upload':\n                    list = uploadFile.getInsertList();\n                    var count = uploadFile.getQueueCount();\n                    if (count) {\n                        $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n                        return false;\n                    }\n                    break;\n                case 'online':\n                    list = onlineFile.getInsertList();\n                    break;\n            }\n\n            editor.execCommand('insertfile', list);\n        };\n    }\n\n\n    /* 上传附件 */\n    function UploadFile(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n\n    UploadFile.prototype = {\n        init: function () {\n            this.fileList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n                // 图片容器\n                $queue = $wrap.find('.filelist'),\n                // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n                // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n                // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n                // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n                // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n                // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n                // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n                // 添加的文件数量\n                fileCount = 0,\n                // 添加的文件总大小\n                fileSize = 0,\n                // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n                // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n                // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n                // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n                // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('fileActionName')),\n                fileMaxSize = editor.getOpt('fileMaxSize'),\n                acceptExtensions = (editor.getOpt('fileAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, '');\n            ;\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('fileActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            var uploaderOption = {\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('fileFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: fileMaxSize,\n                headers: editor.getOpt('serverHeaders') || {},\n                compress: false\n            };\n            if(editor.getOpt('uploadServiceEnable')) {\n                uploaderOption.customUpload = function (file, callback) {\n                    editor.getOpt('uploadServiceUpload')('attachment', file, {\n                        success: function( res ) {\n                            callback.onSuccess(file, {_raw:JSON.stringify(res)});\n                        },\n                        error: function( err ) {\n                            callback.onError(file, err);\n                        },\n                        progress: function( percent ) {\n                            callback.onProgress(file, percent);\n                        }\n                    }, {\n                        from: 'attachment'\n                    });\n                };\n            }\n\n\n            uploader = _this.uploader = WebUploader.create(uploaderOption);\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|' + file.ext.toLowerCase() + '|') == -1) {\n                        $wrap.empty().addClass('notimage').append('<i class=\"file-preview file-type-' + file.ext.toLowerCase() + '\"></i>' +\n                            '<span class=\"file-title\" title=\"' + file.name + '\">' + file.name + '</span>');\n                    } else {\n                        if (browser.ie && browser.version <= 7) {\n                            $wrap.text(lang.uploadNoPreview);\n                        } else {\n                            uploader.makeThumb(file, function (error, src) {\n                                if (error || !src) {\n                                    $wrap.text(lang.uploadNoPreview);\n                                } else {\n                                    var $img = $('<img src=\"' + src + '\">');\n                                    $wrap.empty().append($img);\n                                    $img.on('error', function () {\n                                        $wrap.text(lang.uploadNoPreview);\n                                    });\n                                }\n                            }, thumbnailWidth, thumbnailHeight);\n                        }\n                    }\n                    percentages[file.id] = [file.size, 0];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[file.id][1] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[file.id][1] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[file.id];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[0];\n                    loaded += v[0] * v[1];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide();\n                            $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)).replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                if (file.ext && acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 && file.size <= fileMaxSize) {\n                    fileCount++;\n                    fileSize += file.size;\n                }\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                if (file.ext && acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 && file.size <= fileMaxSize) {\n                    fileCount--;\n                    fileSize -= file.size;\n                }\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?' : '&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n                    header['X_Requested_With'] = 'XMLHttpRequest';\n                }\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[file.id][1] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    json = editor.getOpt('serverResponsePrepare')(json);\n                    if (json.state == 'SUCCESS') {\n                        _this.fileList.push(json);\n                        $file.append('<span class=\"success\"></span>');\n                        // 触发上传附件事件\n                        editor.fireEvent(\"uploadsuccess\", {\n                            res: json,\n                            type: 'file'\n                        });\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, param1, param2) {\n                if (code === 'F_EXCEED_SIZE') {\n                    editor.getOpt('tipError')(lang.errorExceedSize + ' ' + (param1 / 1024 / 1024).toFixed(1) + 'MB');\n                } else {\n                    console.log('error', code, param1, param2);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++];) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        getInsertList: function () {\n            var i, link, data, list = [],\n                prefix = editor.getOpt('fileUrlPrefix');\n            for (i = 0; i < this.fileList.length; i++) {\n                data = this.fileList[i];\n                link = data.url;\n                list.push({\n                    title: data.original || link.substr(link.lastIndexOf('/') + 1),\n                    url: prefix + link\n                });\n            }\n            return list;\n        }\n    };\n\n\n    /* 在线附件 */\n    function OnlineFile(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n\n    OnlineFile.prototype = {\n        init: function () {\n            this.initContainer();\n            this.initEvents();\n            this.initData();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('fileList'), 'scroll', function (e) {\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getFileData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.list, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    if (domUtils.hasClass(li, 'selected')) {\n                        domUtils.removeClasses(li, 'selected');\n                    } else {\n                        domUtils.addClass(li, 'selected');\n                    }\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('fileManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getFileData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getFileData: function () {\n            var _this = this;\n\n            if (!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                ajax.request(editor.getActionUrl(editor.getOpt('fileManagerActionName')), {\n                    timeout: 100000,\n                    data: utils.extend({\n                        start: this.listIndex,\n                        size: this.listSize\n                    }, editor.queryCommandValue('serverparam')),\n                    headers: editor.options.serverHeaders || {},\n                    method: 'get',\n                    onsuccess: function (r) {\n                        try {\n                            var json = eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if (_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    onerror: function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, filetype, preview, icon, _this = this,\n                urlPrefix = editor.getOpt('fileManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if (list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    icon = document.createElement('span');\n                    filetype = list[i].url.substr(list[i].url.lastIndexOf('.') + 1);\n\n                    if (\"png|jpg|jpeg|gif|bmp\".indexOf(filetype) != -1) {\n                        preview = document.createElement('img');\n                        domUtils.on(preview, 'load', (function (image) {\n                            return function () {\n                                _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                            };\n                        })(preview));\n                        preview.width = 113;\n                        preview.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') + (+new Date()).toString(36));\n                    } else {\n                        var ic = document.createElement('i'),\n                            textSpan = document.createElement('span');\n                        textSpan.innerHTML = list[i].original || list[i].url.substr(list[i].url.lastIndexOf('/') + 1);\n                        preview = document.createElement('div');\n                        preview.appendChild(ic);\n                        preview.appendChild(textSpan);\n                        domUtils.addClass(preview, 'file-wrapper');\n                        domUtils.addClass(textSpan, 'file-title');\n                        domUtils.addClass(ic, 'file-type-' + filetype);\n                        domUtils.addClass(ic, 'file-preview');\n                    }\n                    domUtils.addClass(icon, 'icon');\n                    item.setAttribute('data-url', urlPrefix + list[i].url);\n                    if (list[i].original) {\n                        item.setAttribute('data-title', list[i].original);\n                    }\n\n                    item.appendChild(preview);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [];\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var url = lis[i].getAttribute('data-url');\n                    var title = lis[i].getAttribute('data-title') || url.substr(url.lastIndexOf('/') + 1);\n                    list.push({\n                        title: title,\n                        url: url\n                    });\n                }\n            }\n            return list;\n        }\n    };\n\n\n})();\n"
  },
  {
    "path": "dialogs/audio/audio.css",
    "content": "@charset \"utf-8\";\n.wrapper {\n    width: 570px;\n    _width: 575px;\n    margin: 10px auto;\n    zoom: 1;\n    position: relative\n}\n\n.tabbody {\n    height: 355px;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 355px;\n    display: block;\n}\n\n.tabbody .panel table td {\n    vertical-align: middle;\n}\n\n#audioUrl {\n    width: 380px;\n    height: 26px;\n    line-height: 26px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #F2F2F2;\n    outline: none;\n    border-radius: 3px;\n    padding: 0 5px;\n}\n\n#audioSelect {\n    width: 100px;\n    display: inline-block;\n    background: #FFF;\n    border: 1px solid #EEE;\n    line-height: 26px;\n    text-align: center;\n    color: #333;\n    text-decoration: none;\n    border-radius: 3px;\n    vertical-align: middle;\n}\n\n#audioSearchTxt {\n    margin-left: 15px;\n    background: #FFF;\n    width: 200px;\n    height: 21px;\n    line-height: 21px;\n    border: 1px solid #F2F2F2;\n}\n\n#searchList {\n    width: 570px;\n    overflow: auto;\n    zoom: 1;\n    height: 270px;\n}\n\n#searchList div {\n    float: left;\n    width: 120px;\n    height: 135px;\n    margin: 5px 15px;\n}\n\n#searchList img {\n    margin: 2px 8px;\n    cursor: pointer;\n    border: 2px solid #fff\n}\n\n/*不用缩略图*/\n#searchList p {\n    margin-left: 10px;\n}\n\n#audioType {\n    width: 65px;\n    height: 23px;\n    line-height: 22px;\n    border: 1px solid #F2F2F2;\n}\n\n#audioSearchBtn, #audioSearchReset {\n    /*width: 80px;*/\n    height: 25px;\n    line-height: 25px;\n    background: #eee;\n    border: 1px solid #F2F2F2;\n    cursor: pointer;\n    padding: 0 5px;\n}\n\n\n#preview {\n    position: relative;\n    width: 420px;\n    padding: 0;\n    overflow: hidden;\n    margin-left: 10px;\n    _margin-left: 5px;\n    height: 280px;\n    background-color: #ddd;\n    float: left\n}\n\n#preview .previewMsg {\n    position: absolute;\n    top: 0;\n    margin: 0;\n    padding: 0;\n    height: 280px;\n    width: 100%;\n    background-color: #666;\n}\n\n#preview .previewMsg span {\n    display: block;\n    margin: 125px auto 0 auto;\n    text-align: center;\n    font-size: 18px;\n    color: #fff;\n}\n\n#preview .previewaudio {\n    position: absolute;\n    top: 0;\n    margin: 0;\n    padding: 0;\n    height: 280px;\n    width: 100%;\n}\n\n.edui-audio-wrapper fieldset {\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\n#audioInfo {\n    width: 120px;\n    float: left;\n    margin-left: 10px;\n    _margin-left: 7px;\n}\n\nfieldset {\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\nfieldset legend {\n    font-weight: bold;\n}\n\nfieldset p {\n    line-height: 30px;\n}\n\nfieldset input.txt {\n    width: 65px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #F2F2F2;\n}\n\nlabel.url {\n    font-weight: bold;\n    margin-left: 5px;\n}\n\n#audioFloat div {\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    margin: 9px;\n    _margin: 5px;\n    width: 38px;\n    height: 36px;\n    float: left;\n}\n\n#audioFloat .focus {\n    opacity: 1;\n    filter: alpha(opacity=100)\n}\n\nspan.view {\n    display: inline-block;\n    width: 30px;\n    float: right;\n    cursor: pointer;\n    color: blue\n}\n\n\n/* upload audio */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n    clip: auto;\n}\n\n#upload_alignment div {\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    margin: 9px;\n    _margin: 5px;\n    width: 38px;\n    height: 36px;\n    float: left;\n}\n\n#upload_alignment .focus {\n    opacity: 1;\n    filter: alpha(opacity=100)\n}\n\n#upload_left {\n    width: 427px;\n    float: left;\n}\n\n#upload_left .controller {\n    height: 30px;\n    clear: both;\n}\n\n#uploadaudioInfo {\n    margin-top: 10px;\n    float: right;\n    padding-right: 8px;\n}\n\n#upload .queueList {\n    margin: 0;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    margin-right: 0;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 161px;\n    padding-top: 150px;\n    text-align: center;\n    width: 97%;\n    float: left;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top: 0;\n    *margin-left: 0;\n    *left: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 285px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 15px 0 0 20px;\n    *margin: 15px 0 0 15px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display: none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n\n#upload .filelist li.filePickerBlock div.webuploader-pick {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display: none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display: none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter: alpha(opacity=60);\n    -moz-opacity: 0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\n\ni.file-preview.file-type-dir {\n    background-position: 0 center;\n}\n\ni.file-preview.file-type-file {\n    background-position: -140px center;\n}\n\ni.file-preview.file-type-filelist {\n    background-position: -210px center;\n}\n\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2 {\n    background-position: -280px center;\n}\n\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx {\n    background-position: -350px center;\n}\n\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx {\n    background-position: -420px center;\n}\n\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx {\n    background-position: -490px center;\n}\n\ni.file-preview.file-type-vsd {\n    background-position: -560px center;\n}\n\ni.file-preview.file-type-pdf {\n    background-position: -630px center;\n}\n\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp {\n    background-position: -700px center;\n}\n\ni.file-preview.file-type-apk {\n    background-position: -770px center;\n}\n\ni.file-preview.file-type-exe {\n    background-position: -840px center;\n}\n\ni.file-preview.file-type-ipa {\n    background-position: -910px center;\n}\n\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb {\n    background-position: -980px center;\n}\n\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3 {\n    background-position: -1050px center;\n}\n\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd {\n    background-position: -140px center;\n}\n"
  },
  {
    "path": "dialogs/audio/audio.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"audio.css?{timestamp}\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"audioTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"audio\" class=\"focus\" data-content-id=\"audio\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"audio\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"audioUrl\" class=\"url\"><var id=\"lang_audio_url\"></var></label></td>\n                        <td><input id=\"audioUrl\" type=\"text\"><a href=\"javascript:;\" id=\"audioSelect\"\n                                                                style=\"display:none;\">选择音频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链音频支持MP3格式\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"audioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"audioFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadaudioInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?{timestamp}\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?{timestamp}\">\n\n<!-- audio -->\n<script type=\"text/javascript\" src=\"audio.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/audio/audio.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-2-20\n * Time: 上午11:19\n * To change this template use File | Settings | File Templates.\n */\n\n(function () {\n\n    var audio = {},\n        uploadaudioList = [],\n        isModifyUploadaudio = false,\n        uploadFile;\n    var editorOpt = {};\n\n    window.onload = function () {\n        editorOpt = editor.getOpt('audioConfig');\n        $focus($G(\"audioUrl\"));\n        initTabs();\n        initAudio();\n        initUpload();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var j, bodyId, target = e.target || e.srcElement;\n                for (j = 0; j < tabs.length; j++) {\n                    bodyId = tabs[j].getAttribute('data-content-id');\n                    if (tabs[j] == target) {\n                        domUtils.addClass(tabs[j], 'focus');\n                        domUtils.addClass($G(bodyId), 'focus');\n                    } else {\n                        domUtils.removeClasses(tabs[j], 'focus');\n                        domUtils.removeClasses($G(bodyId), 'focus');\n                    }\n                }\n            });\n        }\n        if (!editorOpt.disableUpload) {\n            $G('tabHeads').querySelector('[data-content-id=\"upload\"]').style.display = 'inline-block';\n        }\n        if (!!editorOpt.selectCallback) {\n            $G('audioSelect').style.display = 'inline-block';\n            domUtils.on($G('audioSelect'), \"click\", function (e) {\n                editorOpt.selectCallback(editor, function (info) {\n                    if (info) {\n                        $G('audioUrl').value = info.path;\n                        createPreview(info.path);\n                    }\n                });\n            });\n        }\n    }\n\n    function initAudio() {\n        createAlignButton([\"audioFloat\", \"upload_alignment\"]);\n        addUrlChangeListener($G(\"audioUrl\"));\n        addOkListener();\n\n        //编辑视频时初始化相关信息\n        (function () {\n            var img = editor.selection.getRange().getClosedNode(), url;\n            if (img && img.className) {\n                var hasFakedClass = (img.className == \"edui-faked-audio\"),\n                    hasUploadClass = img.className.indexOf(\"edui-upload-audio\") != -1;\n                if (hasFakedClass || hasUploadClass) {\n                    $G(\"audioUrl\").value = url = img.getAttribute(\"_url\");\n                    var align = domUtils.getComputedStyle(img, \"float\"),\n                        parentAlign = domUtils.getComputedStyle(img.parentNode, \"text-align\");\n                    updateAlignButton(parentAlign === \"center\" ? \"center\" : align);\n                }\n                if (hasUploadClass) {\n                    isModifyUploadaudio = true;\n                }\n            }\n            createPreview(url);\n        })();\n    }\n\n    /**\n     * 监听确认和取消两个按钮事件，用户执行插入或者清空正在播放的视频实例操作\n     */\n    function addOkListener() {\n        dialog.onok = function () {\n            $G(\"preview\").innerHTML = \"\";\n            var currentTab = findFocus(\"tabHeads\", \"tabSrc\");\n            switch (currentTab) {\n                case \"audio\":\n                    return insertSingle();\n                    break;\n                // case \"audioSearch\":\n                //     return insertSearch(\"searchList\");\n                //     break;\n                case \"upload\":\n                    return insertUpload();\n                    break;\n            }\n        };\n        dialog.oncancel = function () {\n            $G(\"preview\").innerHTML = \"\";\n        };\n    }\n\n    /**\n     * 依据传入的align值更新按钮信息\n     * @param align\n     */\n    function updateAlignButton(align) {\n        var aligns = $G(\"audioFloat\").children;\n        for (var i = 0, ci; ci = aligns[i++];) {\n            if (ci.getAttribute(\"name\") == align) {\n                if (ci.className != \"focus\") {\n                    ci.className = \"focus\";\n                }\n            } else {\n                if (ci.className == \"focus\") {\n                    ci.className = \"\";\n                }\n            }\n        }\n    }\n\n    /**\n     * 将单个视频信息插入编辑器中\n     */\n    function insertSingle() {\n        var url = $G('audioUrl').value,\n            align = findFocus(\"audioFloat\", \"name\");\n        if (!url) return false;\n        editor.execCommand('insertaudio', {\n            url: url,\n        }, isModifyUploadaudio ? 'upload' : null);\n    }\n\n    /**\n     * 将元素id下的所有代表视频的图片插入编辑器中\n     * @param id\n     */\n    function insertSearch(id) {\n        var imgs = domUtils.getElementsByTagName($G(id), \"img\"),\n            audioObjs = [];\n        for (var i = 0, img; img = imgs[i++];) {\n            if (img.getAttribute(\"selected\")) {\n                audioObjs.push({\n                    url: img.getAttribute(\"ue_audio_url\"),\n                    width: 420,\n                    height: 280,\n                    align: \"none\"\n                });\n            }\n        }\n        editor.execCommand('insertaudio', audioObjs);\n    }\n\n    /**\n     * 找到id下具有focus类的节点并返回该节点下的某个属性\n     * @param id\n     * @param returnProperty\n     */\n    function findFocus(id, returnProperty) {\n        var tabs = $G(id).children,\n            property;\n        for (var i = 0, ci; ci = tabs[i++];) {\n            if (ci.className == \"focus\") {\n                property = ci.getAttribute(returnProperty);\n                break;\n            }\n        }\n        return property;\n    }\n\n    /**\n     * 数字判断\n     * @param value\n     */\n    function isNumber(value) {\n        return /(0|^[1-9]\\d*$)/.test(value);\n    }\n\n    /**\n     * 创建图片浮动选择按钮\n     * @param ids\n     */\n    function createAlignButton(ids) {\n        for (var i = 0, ci; ci = ids[i++];) {\n            var floatContainer = $G(ci),\n                nameMaps = {\n                    \"none\": lang['default'],\n                    \"left\": lang.floatLeft,\n                    \"right\": lang.floatRight,\n                    \"center\": lang.block\n                };\n            for (var j in nameMaps) {\n                var div = document.createElement(\"div\");\n                div.setAttribute(\"name\", j);\n                if (j == \"none\") div.className = \"focus\";\n                div.style.cssText = \"background:url(images/\" + j + \"_focus.jpg);\";\n                div.setAttribute(\"title\", nameMaps[j]);\n                floatContainer.appendChild(div);\n            }\n            switchSelect(ci);\n        }\n    }\n\n    /**\n     * 选择切换\n     * @param selectParentId\n     */\n    function switchSelect(selectParentId) {\n        var selects = $G(selectParentId).children;\n        for (var i = 0, ci; ci = selects[i++];) {\n            domUtils.on(ci, \"click\", function () {\n                for (var j = 0, cj; cj = selects[j++];) {\n                    cj.className = \"\";\n                    cj.removeAttribute && cj.removeAttribute(\"class\");\n                }\n                this.className = \"focus\";\n            })\n        }\n    }\n\n    /**\n     * 监听url改变事件\n     * @param url\n     */\n    function addUrlChangeListener(url) {\n        if (browser.ie) {\n            url.onpropertychange = function () {\n                createPreview(this.value);\n            }\n        } else {\n            url.addEventListener(\"input\", function () {\n                createPreview(this.value);\n            }, false);\n        }\n    }\n\n    function createAudioHtml(url, param) {\n        param = param || {};\n        var str = [\n            \"<audio\",\n            (param.id ? ' id=\"' + param.id + '\"' : \"\"),\n            (param.cls ? ' class=\"' + param.cls + '\"' : ''),\n            ' controls >',\n            '<source src=\"' + url + '\" type=\"audio/mpeg' + '\" />',\n            '</audio>',\n        ];\n        return str.join('');\n    }\n\n    /**\n     * 根据url生成视频预览\n     * @param url\n     */\n    function createPreview(url) {\n        if (!url) {\n            return;\n        }\n\n        $G(\"preview\").innerHTML = '<div class=\"previewMsg\"><span>' + lang.urlError + '</span></div>' +\n            '<div style=\"position: absolute; inset: 0; background: #FFF; text-align: center; display: flex; justify-items: center; align-items: center;\">' +\n            '<div style=\"text-align:center;flex-grow:1;\">' + createAudioHtml(url) + '</div>'\n            + '</div>';\n    }\n\n\n    /* 插入上传视频 */\n    function insertUpload() {\n        var audioObjs = [],\n            uploadDir = editor.getOpt('audioUrlPrefix'),\n            align = findFocus(\"upload_alignment\", \"name\") || 'none';\n        for (var key in uploadaudioList) {\n            var file = uploadaudioList[key];\n            audioObjs.push({\n                url: uploadDir + file.url,\n                align: align\n            });\n        }\n\n        var count = uploadFile.getQueueCount();\n        if (count) {\n            $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n            return false;\n        } else {\n            editor.execCommand('insertaudio', audioObjs, 'upload');\n        }\n    }\n\n    /*初始化上传标签*/\n    function initUpload() {\n        uploadFile = new UploadFile('queueList');\n    }\n\n\n    /* 上传附件 */\n    function UploadFile(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n\n    UploadFile.prototype = {\n        init: function () {\n            this.fileList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n                // 图片容器\n                $queue = $wrap.find('.filelist'),\n                // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n                // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n                // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n                // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n                // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n                // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n                // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n                // 添加的文件数量\n                fileCount = 0,\n                // 添加的文件总大小\n                fileSize = 0,\n                // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n                // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n                // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n                // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n                // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('audioActionName')),\n                fileMaxSize = editor.getOpt('audioMaxSize'),\n                acceptExtensions = (editor.getOpt('audioAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, '');\n            ;\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('audioActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            var uploaderOption = {\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('audioFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: fileMaxSize,\n                headers: editor.getOpt('serverHeaders') || {},\n                compress: false\n            };\n\n            if(editor.getOpt('uploadServiceEnable')) {\n                uploaderOption.customUpload = function (file, callback) {\n                    editor.getOpt('uploadServiceUpload')('audio', file, {\n                        success: function( res ) {\n                            callback.onSuccess(file, {_raw:JSON.stringify(res)});\n                        },\n                        error: function( err ) {\n                            callback.onError(file, err);\n                        },\n                        progress: function( percent ) {\n                            callback.onProgress(file, percent);\n                        }\n                    }, {\n                        from: 'audio'\n                    });\n                };\n            }\n\n            uploader = _this.uploader = WebUploader.create(uploaderOption);\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|' + file.ext.toLowerCase() + '|') == -1) {\n                        $wrap.empty().addClass('notimage').append('<i class=\"file-preview file-type-' + file.ext.toLowerCase() + '\"></i>' +\n                            '<span class=\"file-title\">' + file.name + '</span>');\n                    } else {\n                        if (browser.ie && browser.version <= 7) {\n                            $wrap.text(lang.uploadNoPreview);\n                        } else {\n                            uploader.makeThumb(file, function (error, src) {\n                                if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) {\n                                    $wrap.text(lang.uploadNoPreview);\n                                } else {\n                                    var $img = $('<img src=\"' + src + '\">');\n                                    $wrap.empty().append($img);\n                                    $img.on('error', function () {\n                                        $wrap.text(lang.uploadNoPreview);\n                                    });\n                                }\n                            }, thumbnailWidth, thumbnailHeight);\n                        }\n                    }\n                    percentages[file.id] = [file.size, 0];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[file.id][1] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[file.id][1] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[file.id];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[0];\n                    loaded += v[0] * v[1];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide();\n                            $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)).replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                fileCount--;\n                fileSize -= file.size;\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?' : '&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n                    header['X_Requested_With'] = 'XMLHttpRequest';\n                }\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[file.id][1] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    json = editor.getOpt('serverResponsePrepare')(json);\n                    if (json.state == 'SUCCESS') {\n                        uploadaudioList.push({\n                            'url': json.url,\n                            'type': json.type,\n                            'original': json.original\n                        });\n                        $file.append('<span class=\"success\"></span>');\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, param1, param2) {\n                if (code === 'F_EXCEED_SIZE') {\n                    editor.getOpt('tipError')(lang.errorExceedSize + ' ' + (param1 / 1024 / 1024).toFixed(1) + 'MB');\n                } else {\n                    console.log('error', code, param1, param2);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++];) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        refresh: function () {\n            this.uploader.refresh();\n        }\n    };\n\n})();\n"
  },
  {
    "path": "dialogs/background/background.css",
    "content": ".wrapper {\n    width: 424px;\n    margin: 10px auto;\n    zoom: 1;\n    position: relative\n}\n\n.tabbody {\n    height: 225px;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    background: #fff;\n    display: none;\n}\n\n.tabbody .focus {\n    display: block;\n}\n\nbody {\n    font-size: 12px;\n    color: #888;\n    overflow: hidden;\n}\n\ninput, label {\n    vertical-align: middle\n}\n\n.clear {\n    clear: both;\n}\n\n.pl {\n    padding-left: 18px;\n    padding-left: 23px \\9;\n}\n\n#imageList {\n    width: 420px;\n    height: 215px;\n    margin-top: 10px;\n    overflow: hidden;\n    overflow-y: auto;\n}\n\n#imageList div {\n    float: left;\n    width: 100px;\n    height: 95px;\n    margin: 5px 10px;\n}\n\n#imageList img {\n    cursor: pointer;\n    border: 2px solid white;\n}\n\n.bgarea {\n    margin: 10px;\n    padding: 5px;\n    height: 84%;\n    border: 1px solid #A8A297;\n}\n\n.content div {\n    margin: 10px 0 10px 5px;\n}\n\n.content .iptradio {\n    margin: 0px 5px 5px 0px;\n}\n\n.txt {\n    width: 280px;\n}\n\n.wrapcolor {\n    height: 19px;\n}\n\ndiv.color {\n    float: left;\n    margin: 0;\n}\n\n#colorPicker {\n    width: 17px;\n    height: 17px;\n    border: 1px solid #CCC;\n    display: inline-block;\n    border-radius: 3px;\n    box-shadow: 2px 2px 5px #D3D6DA;\n    margin: 0;\n    float: left;\n}\n\ndiv.alignment, #custom {\n    margin-left: 23px;\n    margin-left: 28px \\9;\n}\n\n#custom input {\n    height: 15px;\n    min-height: 15px;\n    width: 20px;\n}\n\n#repeatType {\n    width: 100px;\n}\n\n\n/* 图片管理样式 */\n#imgManager {\n    width: 100%;\n    height: 225px;\n}\n\n#imgManager #imageList {\n    width: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n}\n\n#imgManager ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n#imgManager li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 9px 0 0 19px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n\n#imgManager li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width: 0;\n    height: 0;\n    margin: 0;\n    padding: 0;\n}\n\n#imgManager li img {\n    cursor: pointer;\n}\n\n#imgManager li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n\n#imgManager li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n\n#imgManager li.selected .icon {\n    background-image: url(images/success.png);\n    background-position: 75px 75px;\n}\n\n#imgManager li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n"
  },
  {
    "path": "dialogs/background/background.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"background.css?{timestamp}\">\n</head>\n<body>\n<div id=\"bg_container\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" data-content-id=\"normal\"><var id=\"lang_background_normal\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"normal\" class=\"panel focus\">\n            <fieldset class=\"bgarea\">\n                <legend><var id=\"lang_background_set\"></var></legend>\n                <div class=\"content\">\n                    <div>\n                        <label><input id=\"nocolorRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"none\"\n                                      checked=\"checked\"><var id=\"lang_background_none\"></var></label>\n                        <label><input id=\"coloredRadio\" class=\"iptradio\" type=\"radio\" name=\"t\" value=\"color\"><var\n                            id=\"lang_background_colored\"></var></label>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <div class=\"color\">\n                            <var id=\"lang_background_color\"></var>:\n                        </div>\n                        <div id=\"colorPicker\"></div>\n                        <div class=\"clear\"></div>\n                    </div>\n                    <div class=\"wrapcolor pl\">\n                        <label><var id=\"lang_background_netimg\"></var>:</label><input class=\"txt\" type=\"text\" id=\"url\">\n                    </div>\n                    <div id=\"alignment\" class=\"alignment\">\n                        <var id=\"lang_background_align\"></var>:<select id=\"repeatType\">\n                        <option value=\"center\"></option>\n                        <option value=\"repeat-x\"></option>\n                        <option value=\"repeat-y\"></option>\n                        <option value=\"repeat\"></option>\n                        <option value=\"self\"></option>\n                    </select>\n                    </div>\n                    <div id=\"custom\">\n                        <var id=\"lang_background_position\"></var>:x:<input type=\"text\" size=\"1\" id=\"x\" maxlength=\"4\"\n                                                                           value=\"0\">px&nbsp;&nbsp;y:<input type=\"text\"\n                                                                                                            size=\"1\"\n                                                                                                            id=\"y\"\n                                                                                                            maxlength=\"4\"\n                                                                                                            value=\"0\">px\n                    </div>\n                </div>\n            </fieldset>\n\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"background.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/background/background.js",
    "content": "(function () {\n\n    var onlineImage,\n        backupStyle = editor.queryCommandValue('background');\n\n    window.onload = function () {\n        initTabs();\n        initColorSelector();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                for (var j = 0; j < tabs.length; j++) {\n                    if (tabs[j] == target) {\n                        tabs[j].className = \"focus\";\n                        var contentId = tabs[j].getAttribute('data-content-id');\n                        $G(contentId).style.display = \"block\";\n                    } else {\n                        tabs[j].className = \"\";\n                        $G(tabs[j].getAttribute('data-content-id')).style.display = \"none\";\n                    }\n                }\n            });\n        }\n    }\n\n    /* 初始化颜色设置 */\n    function initColorSelector() {\n        var obj = editor.queryCommandValue('background');\n        if (obj) {\n            var color = obj['background-color'],\n                repeat = obj['background-repeat'] || 'repeat',\n                image = obj['background-image'] || '',\n                position = obj['background-position'] || 'center center',\n                pos = position.split(' '),\n                x = parseInt(pos[0]) || 0,\n                y = parseInt(pos[1]) || 0;\n\n            if (repeat == 'no-repeat' && (x || y)) repeat = 'self';\n\n            image = image.match(/url[\\s]*\\(([^\\)]*)\\)/);\n            image = image ? image[1] : '';\n            updateFormState('colored', color, image, repeat, x, y);\n        } else {\n            updateFormState();\n        }\n\n        var updateHandler = function () {\n            updateFormState();\n            updateBackground();\n        }\n        domUtils.on($G('nocolorRadio'), 'click', updateBackground);\n        domUtils.on($G('coloredRadio'), 'click', updateHandler);\n        domUtils.on($G('url'), 'keyup', function () {\n            if ($G('url').value && $G('alignment').style.display == \"none\") {\n                utils.each($G('repeatType').children, function (item) {\n                    item.selected = ('repeat' == item.getAttribute('value') ? 'selected' : false);\n                });\n            }\n            updateHandler();\n        });\n        domUtils.on($G('repeatType'), 'change', updateHandler);\n        domUtils.on($G('x'), 'keyup', updateBackground);\n        domUtils.on($G('y'), 'keyup', updateBackground);\n\n        initColorPicker();\n    }\n\n    /* 初始化颜色选择器 */\n    function initColorPicker() {\n        var me = editor,\n            cp = $G(\"colorPicker\");\n\n        /* 生成颜色选择器ui对象 */\n        var popup = new UE.ui.Popup({\n            content: new UE.ui.ColorPicker({\n                noColorText: me.getLang(\"clearColor\"),\n                editor: me,\n                onpickcolor: function (t, color) {\n                    updateFormState('colored', color);\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                },\n                onpicknocolor: function (t, color) {\n                    updateFormState('colored', 'transparent');\n                    updateBackground();\n                    UE.ui.Popup.postHide();\n                }\n            }),\n            editor: me,\n            onhide: function () {\n            }\n        });\n\n        /* 设置颜色选择器 */\n        domUtils.on(cp, \"click\", function () {\n            popup.showAnchor(this);\n        });\n        domUtils.on(document, 'mousedown', function (evt) {\n            var el = evt.target || evt.srcElement;\n            UE.ui.Popup.postHide(el);\n        });\n        domUtils.on(window, 'scroll', function () {\n            UE.ui.Popup.postHide();\n        });\n    }\n\n    /* 更新背景色设置面板 */\n    function updateFormState(radio, color, url, align, x, y) {\n        var nocolorRadio = $G('nocolorRadio'),\n            coloredRadio = $G('coloredRadio');\n\n        if (radio) {\n            nocolorRadio.checked = (radio == 'colored' ? false : 'checked');\n            coloredRadio.checked = (radio == 'colored' ? 'checked' : false);\n        }\n        if (color) {\n            domUtils.setStyle($G(\"colorPicker\"), \"background-color\", color);\n        }\n\n        if (url && /^\\//.test(url)) {\n            var a = document.createElement('a');\n            a.href = url;\n            browser.ie && (a.href = a.href);\n            url = browser.ie ? a.href : (a.protocol + '//' + a.host + a.pathname + a.search + a.hash);\n        }\n\n        if (url || url === '') {\n            $G('url').value = url;\n        }\n        if (align) {\n            utils.each($G('repeatType').children, function (item) {\n                item.selected = (align == item.getAttribute('value') ? 'selected' : false);\n            });\n        }\n        if (x || y) {\n            $G('x').value = parseInt(x) || 0;\n            $G('y').value = parseInt(y) || 0;\n        }\n\n        $G('alignment').style.display = coloredRadio.checked && $G('url').value ? '' : 'none';\n        $G('custom').style.display = coloredRadio.checked && $G('url').value && $G('repeatType').value == 'self' ? '' : 'none';\n    }\n\n    /* 更新背景颜色 */\n    function updateBackground() {\n        if ($G('coloredRadio').checked) {\n            var color = domUtils.getStyle($G(\"colorPicker\"), \"background-color\"),\n                bgimg = $G(\"url\").value,\n                align = $G(\"repeatType\").value,\n                backgroundObj = {\n                    \"background-repeat\": \"no-repeat\",\n                    \"background-position\": \"center center\"\n                };\n\n            if (color) backgroundObj[\"background-color\"] = color;\n            if (bgimg) backgroundObj[\"background-image\"] = 'url(' + bgimg + ')';\n            if (align == 'self') {\n                backgroundObj[\"background-position\"] = $G(\"x\").value + \"px \" + $G(\"y\").value + \"px\";\n            } else if (align == 'repeat-x' || align == 'repeat-y' || align == 'repeat') {\n                backgroundObj[\"background-repeat\"] = align;\n            }\n\n            editor.execCommand('background', backgroundObj);\n        } else {\n            editor.execCommand('background', null);\n        }\n    }\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.id = 'imageListUl';\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function (e) {\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode,\n                    nodes = $G('imageListUl').childNodes;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    updateFormState('nocolor', null, '');\n                    for (var i = 0, node; node = nodes[i++];) {\n                        if (node == li && !domUtils.hasClass(node, 'selected')) {\n                            domUtils.addClass(node, 'selected');\n                            updateFormState('colored', null, li.firstChild.getAttribute(\"_src\"), 'repeat');\n                        } else {\n                            domUtils.removeClasses(node, 'selected');\n                        }\n                    }\n                    updateBackground();\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function () {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if (!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp' : '',\n                    'data': utils.extend({\n                        start: this.listIndex,\n                        size: this.listSize\n                    }, editor.queryCommandValue('serverparam')),\n                    'headers': editor.options.serverHeaders || {},\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r : eval('(' + r.responseText + ')');\n                            if (json.state == 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if (_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if (list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function (image) {\n                        return function () {\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') + (+new Date()).toString(36));\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n    dialog.onok = function () {\n        updateBackground();\n        editor.fireEvent('saveScene');\n    };\n    dialog.oncancel = function () {\n        editor.execCommand('background', backupStyle);\n    };\n\n})();\n"
  },
  {
    "path": "dialogs/contentimport/contentimport.html",
    "content": "<!DOCTYPE html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 620px;\n            padding: 10px;\n            height: 399px;\n            box-sizing: border-box;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #F2F2F2;\n        }\n\n        .wrapper .file-upload {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .file-upload .file-tip {\n            color: #999;\n            font-size: 12px;\n            padding-left: 10px;\n            flex-grow: 1;\n        }\n\n        .wrapper .file-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .file-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .file-manual .body {\n        }\n\n        .wrapper .file-manual .body li {\n            list-style: disc;\n            margin-left: 20px;\n        }\n\n        .wrapper .upload-button {\n            width: 100px;\n            height: 30px;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n            border-radius: 4px;\n            text-align: center;\n            line-height: 28px;\n            cursor: pointer;\n            position: relative;\n            flex-shrink: 0;\n            margin-right: 5px;\n        }\n\n        .wrapper .upload-button .text {\n            display: inline-block;\n            vertical-align: middle;\n        }\n\n        .wrapper .upload-button input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n            height: 100%;\n            width: 100%;\n        }\n\n        .wrapper .file-result {\n            border: 1px solid #333;\n            padding: 10px;\n            border-radius: 5px;\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #FFF;\n            bottom: 10px;\n            overflow: auto;\n            display: none;\n        }\n        .wrapper .file-input{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            top: 50px;\n            background: #EEE;\n            bottom: 10px;\n            border-radius: 5px;\n            display:none;\n        }\n        .wrapper .file-input textarea{\n            position: absolute;\n            left: 10px;\n            right: 10px;\n            bottom: 10px;\n            border: none;\n            resize: none;\n            border-radius: 5px;\n            padding: 5px;\n            outline: none;\n            top: 30px;\n        }\n        .wrapper .file-input .tool{\n            text-align: right;\n            padding: 5px 10px;\n        }\n        .wrapper .file-input .tool a{\n            display: inline-block;\n            text-decoration: none;\n            color: #333;\n            background: #FFF;\n            padding: 0 10px;\n            line-height: 20px;\n            border-radius: 3px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"file-upload\">\n        <div class=\"upload-button\">\n            <div class=\"text\">选择本地文件</div>\n            <input type=\"file\" id=\"contentImport\"/>\n        </div>\n        <div class=\"upload-button\">\n            <div class=\"text\" onclick=\"$('.file-input').show();\">粘贴Markdown</div>\n        </div>\n        <div class=\"file-tip\"></div>\n    </div>\n    <div class=\"file-manual\">\n        <div class=\"title\">\n            支持文档格式\n        </div>\n        <div class=\"body\">\n            <ul>\n                <li><b>Word</b>：docx</li>\n                <li><b>Markdown</b>：md</li>\n            </ul>\n        </div>\n    </div>\n    <div class=\"file-result\"></div>\n    <div class=\"file-input\">\n        <textarea id=\"fileInputContent\"></textarea>\n        <div class=\"tool\">\n            <a href=\"javascript:;\" id=\"fileInputConfirm\">\n                确定\n            </a>\n            <a href=\"javascript:;\" onclick=\"$(this).closest('.file-input').hide();\">\n                关闭\n            </a>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n<script src=\"mammoth.browser.min.js?{timestamp}\"></script>\n<script src=\"showdown.min.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"contentimport.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        contentImport.init(options, callbacks);\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/contentimport/contentimport.js",
    "content": "var contentImport = {};\nvar g = $G;\n\ncontentImport.data = {\n    result: null,\n};\ncontentImport.init = function (opt, callbacks) {\n    addUploadButtonListener();\n    addOkListener();\n};\nfunction upload (blob) {\n     /* 创建Ajax并提交 \n        暂时采用同步方式\n        异步的话，可以自行参考 ueditor.all.js 23031开始 进行修改\n         */\n     var xhr = new XMLHttpRequest()\n     var fd = new FormData()\n\n     var url =  editor.getOpt('imageUrlPrefix')\n    var actionUrl = editor.getActionUrl(editor.getOpt('imageActionName'))\n    var type = 'png'\n    if (blob.type) {\n        type = blob.type.substr('image/'.length)\n    }\n    fd.append('upfile', blob, blob.name || ('blob.' + type))\n    fd.append('type', 'ajax')\n    xhr.open('post', actionUrl, false)\n    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')\n\n    xhr.send(fd)\n    if (xhr.status == 200) {\n        var json = (new Function('return ' + xhr.responseText))()\n        if (json.state == 'SUCCESS' && json.url) {\n            return url + json.url\n        } else {\n            return blob\n        }\n    }\n\n}\nfunction processWord(file) {\n    $('.file-tip').html('正在转换Word文件，请稍后...');\n    $('.file-result').html('').hide();\n    var reader = new FileReader();\n    reader.onload = function (loadEvent) {\n        mammoth.convertToHtml({\n            arrayBuffer: loadEvent.target.result\n        }, {\n            convertImage: mammoth.images.imgElement(function (image) {\n                return image.readAsArrayBuffer().then(function (imageBuffer) {\n                    // 创建blob URL而不是base64\n\n                    const blob = new Blob([imageBuffer], { type: image.contentType })\n                    const url = upload(blob)\n                   //若是只要展示 直接blob形式就可以，采用下面这行\n                    // const url = URL.createObjectURL(blob)\n\n                    return {\n                        src: url,\n                        alt: '文档图片'\n                    }\n                })\n            })\n        })\n            .then(function displayResult(result) {\n                $('.file-tip').html('转换成功');\n                contentImport.data.result = result.value;\n                $('.file-result').html(result.value).show();\n            }, function (error) {\n                $('.file-tip').html('Word文件转换失败:' + error);\n            });\n    };\n    reader.onerror = function (loadEvent) {\n        $('.file-tip').html('Word文件转换失败:' + loadEvent);\n    };\n    reader.readAsArrayBuffer(file);\n}\n\nfunction processMarkdown( markdown ){\n    var converter = new showdown.Converter();\n    var html = converter.makeHtml(markdown);\n    $('.file-tip').html('转换成功');\n    contentImport.data.result = html;\n    $('.file-result').html(html).show();\n}\n\nfunction processMarkdownFile(file) {\n    $('.file-tip').html('正在转换Markdown文件，请稍后...');\n    $('.file-result').html('').hide();\n    var reader = new FileReader();\n    reader.onload = function (loadEvent) {\n        processMarkdown( loadEvent.target.result );\n    };\n    reader.onerror = function (loadEvent) {\n        $('.file-tip').html('Markdown文件转换失败:' + loadEvent);\n    };\n    reader.readAsText(file, \"UTF-8\");\n}\n\nfunction addUploadButtonListener() {\n    g('contentImport').addEventListener('change', function () {\n        const file = this.files[0];\n        const fileName = file.name;\n        const fileExt = fileName.substring(fileName.lastIndexOf('.') + 1).toLowerCase();\n        switch (fileExt) {\n            case 'docx':\n            case 'doc':\n                processWord(file);\n                break;\n            case 'md':\n                processMarkdownFile(file);\n                break;\n            default:\n                $('.file-tip').html('不支持的文件格式:' + fileExt);\n                break;\n        }\n    });\n    g('fileInputConfirm').addEventListener('click', function () {\n        processMarkdown( g('fileInputContent').value );\n        $('.file-input').hide();\n    });\n}\n\nfunction addOkListener() {\n    dialog.onok = function () {\n        if (!contentImport.data.result) {\n            alert('请先上传文件识别内容');\n            return false;\n        }\n        editor.fireEvent('saveScene');\n        editor.execCommand(\"inserthtml\", contentImport.data.result);\n        editor.fireEvent('saveScene');\n    };\n    dialog.oncancel = function () {\n    };\n}\n"
  },
  {
    "path": "dialogs/emotion/emotion.css",
    "content": ".jd img {\n    background: transparent url(images/jxface2.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.pp img {\n    background: transparent url(images/fface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 25px;\n    height: 25px;\n    display: block;\n}\n\n.ldw img {\n    background: transparent url(images/wface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.tsj img {\n    background: transparent url(images/tface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.cat img {\n    background: transparent url(images/cface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.bb img {\n    background: transparent url(images/bface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.youa img {\n    background: transparent url(images/yface.gif?v=1.1) no-repeat scroll left top;\n    cursor: pointer;\n    width: 35px;\n    height: 35px;\n    display: block;\n}\n\n.smileytable td {\n    height: 37px;\n}\n\n#tabPanel {\n    margin-left: 5px;\n    overflow: hidden;\n}\n\n#tabContent {\n    float: left;\n    background: #FFFFFF;\n}\n\n#tabContent div {\n    display: none;\n    width: 480px;\n    overflow: hidden;\n}\n\n#tabIconReview.show {\n    left: 17px;\n    display: block;\n}\n\n.menuFocus {\n    background: #ACCD3C;\n}\n\n.menuDefault {\n    background: #FFFFFF;\n}\n\n#tabIconReview {\n    position: absolute;\n    left: 406px;\n    left: 398px \\9;\n    top: 41px;\n    z-index: 65533;\n    width: 90px;\n    height: 76px;\n}\n\nimg.review {\n    width: 90px;\n    height: 76px;\n    border: 2px solid #9cb945;\n    background: #FFFFFF;\n    background-position: center;\n    background-repeat: no-repeat;\n}\n\n.wrapper .tabbody {\n    position: relative;\n    float: left;\n    clear: both;\n    padding: 10px;\n    width: 95%;\n}\n\n.tabbody table {\n    width: 100%;\n}\n\n.tabbody td {\n    border: 1px solid #BAC498;\n}\n\n.tabbody td span {\n    display: block;\n    zoom: 1;\n    padding: 0 4px;\n}\n"
  },
  {
    "path": "dialogs/emotion/emotion.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" >\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"emotion.css?{timestamp}\">\n</head>\n<body>\n<div id=\"tabPanel\" class=\"wrapper\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span><var id=\"lang_input_choice\"></var></span>\n        <span><var id=\"lang_input_Tuzki\"></var></span>\n        <span><var id=\"lang_input_lvdouwa\"></var></span>\n        <span><var id=\"lang_input_BOBO\"></var></span>\n        <span><var id=\"lang_input_babyCat\"></var></span>\n        <span><var id=\"lang_input_bubble\"></var></span>\n        <span><var id=\"lang_input_youa\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"tab0\"></div>\n        <div id=\"tab1\"></div>\n        <div id=\"tab2\"></div>\n        <div id=\"tab3\"></div>\n        <div id=\"tab4\"></div>\n        <div id=\"tab5\"></div>\n        <div id=\"tab6\"></div>\n    </div>\n</div>\n<div id=\"tabIconReview\">\n    <img id='faceReview' class='review' src=\"../../themes/default/images/spacer.gif\"/>\n</div>\n<script type=\"text/javascript\" src=\"emotion.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    var emotion = {\n        tabNum: 7, //切换面板数量\n        SmilmgName: {\n            tab0: ['j_00', 84],\n            tab1: ['t_00', 40],\n            tab2: ['w_00', 52],\n            tab3: ['B_00', 63],\n            tab4: ['C_00', 20],\n            tab5: ['i_f', 50],\n            tab6: ['y_00', 40]\n        }, //图片前缀名\n        imageFolders: {\n            tab0: 'jx2/',\n            tab1: 'tsj/',\n            tab2: 'ldw/',\n            tab3: 'bobo/',\n            tab4: 'babycat/',\n            tab5: 'face/',\n            tab6: 'youa/'\n        }, //图片对应文件夹路径\n        imageCss: {tab0: 'jd', tab1: 'tsj', tab2: 'ldw', tab3: 'bb', tab4: 'cat', tab5: 'pp', tab6: 'youa'}, //图片css类名\n        imageCssOffset: {tab0: 35, tab1: 35, tab2: 35, tab3: 35, tab4: 35, tab5: 25, tab6: 35}, //图片偏移\n        SmileyInfor: {\n            tab0: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '打酱油', '俯卧撑', '气愤', '?', '吻', '怒', '胜利', 'HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '微笑', '亲吻', '调皮', '惊恐', '耍酷', '发火', '害羞', '汗水', '大哭', '', '加油', '困', '你NB', '晕倒', '开心', '偷笑', '大哭', '滴汗', '叹气', '超赞', '??', '飞吻', '天使', '撒花', '生气', '被砸', '吓傻', '随意吐'],\n            tab1: ['Kiss', 'Love', 'Yeah', '啊！', '背扭', '顶', '抖胸', '88', '汗', '瞌睡', '鲁拉', '拍砖', '揉脸', '生日快乐', '摊手', '睡觉', '瘫坐', '无聊', '星星闪', '旋转', '也不行', '郁闷', '正Music', '抓墙', '撞墙至死', '歪头', '戳眼', '飘过', '互相拍砖', '砍死你', '扔桌子', '少林寺', '什么？', '转头', '我爱牛奶', '我踢', '摇晃', '晕厥', '在笼子里', '震荡'],\n            tab2: ['大笑', '瀑布汗~', '惊讶', '臭美', '傻笑', '抛媚眼', '发怒', '我错了', 'money', '气愤', '挑逗', '吻', '怒', '胜利', '委屈', '受伤', '说啥呢？', '闭嘴', '不', '逗你玩儿', '飞吻', '眩晕', '魔法', '我来了', '睡了', '我打', '闭嘴', '打', '打晕了', '刷牙', '爆揍', '炸弹', '倒立', '刮胡子', '邪恶的笑', '不要不要', '爱恋中', '放大仔细看', '偷窥', '超高兴', '晕', '松口气', '我跑', '享受', '修养', '哭', '汗', '啊~', '热烈欢迎', '打酱油', '俯卧撑', '?'],\n            tab3: ['HI', 'KISS', '不说', '不要', '扯花', '大心', '顶', '大惊', '飞吻', '鬼脸', '害羞', '口水', '狂哭', '来', '泪眼', '流泪', '生气', '吐舌', '喜欢', '旋转', '再见', '抓狂', '汗', '鄙视', '拜', '吐血', '嘘', '打人', '蹦跳', '变脸', '扯肉', '吃To', '吃花', '吹泡泡糖', '大变身', '飞天舞', '回眸', '可怜', '猛抽', '泡泡', '苹果', '亲', '', '骚舞', '烧香', '睡', '套娃娃', '捅捅', '舞倒', '西红柿', '爱慕', '摇', '摇摆', '杂耍', '招财', '被殴', '被球闷', '大惊', '理想', '欧打', '呕吐', '碎', '吐痰'],\n            tab4: ['发财了', '吃西瓜', '套牢', '害羞', '庆祝', '我来了', '敲打', '晕了', '胜利', '臭美', '被打了', '贪吃', '迎接', '酷', '顶', '幸运', '爱心', '躲', '送花', '选择'],\n            tab5: ['微笑', '亲吻', '调皮', '惊讶', '耍酷', '发火', '害羞', '汗水', '大哭', '得意', '鄙视', '困', '夸奖', '晕倒', '疑问', '媒婆', '狂吐', '青蛙', '发愁', '亲吻', '', '爱心', '心碎', '玫瑰', '礼物', '哭', '奸笑', '可爱', '得意', '呲牙', '暴汗', '楚楚可怜', '困', '哭', '生气', '惊讶', '口水', '彩虹', '夜空', '太阳', '钱钱', '灯泡', '咖啡', '蛋糕', '音乐', '爱', '胜利', '赞', '鄙视', 'OK'],\n            tab6: ['男兜', '女兜', '开心', '乖乖', '偷笑', '大笑', '抽泣', '大哭', '无奈', '滴汗', '叹气', '狂晕', '委屈', '超赞', '??', '疑问', '飞吻', '天使', '撒花', '生气', '被砸', '口水', '泪奔', '吓傻', '吐舌头', '点头', '随意吐', '旋转', '困困', '鄙视', '狂顶', '篮球', '再见', '欢迎光临', '恭喜发财', '稍等', '我在线', '恕不议价', '库房有货', '货在路上']\n        }\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/emotion/emotion.js",
    "content": "window.onload = function () {\n    editor.setOpt({\n        emotionLocalization: false\n    });\n\n    emotion.SmileyPath = editor.options.emotionLocalization === true ? 'images/' : \"http://img.baidu.com/hi/\";\n    emotion.SmileyBox = createTabList(emotion.tabNum);\n    emotion.tabExist = createArr(emotion.tabNum);\n\n    initImgName();\n    initEvtHandler(\"tabHeads\");\n};\n\nfunction initImgName() {\n    for (var pro in emotion.SmilmgName) {\n        var tempName = emotion.SmilmgName[pro],\n            tempBox = emotion.SmileyBox[pro],\n            tempStr = \"\";\n\n        if (tempBox.length) return;\n        for (var i = 1; i <= tempName[1]; i++) {\n            tempStr = tempName[0];\n            if (i < 10) tempStr = tempStr + '0';\n            tempStr = tempStr + i + '.gif';\n            tempBox.push(tempStr);\n        }\n    }\n}\n\nfunction initEvtHandler(conId) {\n    var tabHeads = $G(conId);\n    for (var i = 0, j = 0; i < tabHeads.childNodes.length; i++) {\n        var tabObj = tabHeads.childNodes[i];\n        if (tabObj.nodeType == 1) {\n            domUtils.on(tabObj, \"click\", (function (index) {\n                return function () {\n                    switchTab(index);\n                };\n            })(j));\n            j++;\n        }\n    }\n    switchTab(0);\n    $G(\"tabIconReview\").style.display = 'none';\n}\n\nfunction InsertSmiley(url, evt) {\n    var obj = {\n        src: editor.options.emotionLocalization ? editor.options.UEDITOR_HOME_URL + \"dialogs/emotion/\" + url : url\n    };\n    obj._src = obj.src;\n    editor.execCommand('insertimage', obj);\n    if (!evt.ctrlKey) {\n        dialog.popup.hide();\n    }\n}\n\nfunction switchTab(index) {\n\n    autoHeight(index);\n    if (emotion.tabExist[index] == 0) {\n        emotion.tabExist[index] = 1;\n        createTab('tab' + index);\n    }\n    //获取呈现元素句柄数组\n    var tabHeads = $G(\"tabHeads\").getElementsByTagName(\"span\"),\n        tabBodys = $G(\"tabBodys\").getElementsByTagName(\"div\"),\n        i = 0, L = tabHeads.length;\n    //隐藏所有呈现元素\n    for (; i < L; i++) {\n        tabHeads[i].className = \"\";\n        tabBodys[i].style.display = \"none\";\n    }\n    //显示对应呈现元素\n    tabHeads[index].className = \"focus\";\n    tabBodys[index].style.display = \"block\";\n}\n\nfunction autoHeight(index) {\n    var iframe = dialog.getDom(\"iframe\"),\n        parent = iframe.parentNode.parentNode;\n    switch (index) {\n        case 0:\n            iframe.style.height = \"380px\";\n            parent.style.height = \"392px\";\n            break;\n        case 1:\n            iframe.style.height = \"220px\";\n            parent.style.height = \"232px\";\n            break;\n        case 2:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 3:\n            iframe.style.height = \"300px\";\n            parent.style.height = \"312px\";\n            break;\n        case 4:\n            iframe.style.height = \"140px\";\n            parent.style.height = \"152px\";\n            break;\n        case 5:\n            iframe.style.height = \"260px\";\n            parent.style.height = \"272px\";\n            break;\n        case 6:\n            iframe.style.height = \"230px\";\n            parent.style.height = \"242px\";\n            break;\n        default:\n\n    }\n}\n\n\nfunction createTab(tabName) {\n    var faceVersion = \"?v=1.1\", //版本号\n        tab = $G(tabName), //获取将要生成的Div句柄\n        imagePath = emotion.SmileyPath + emotion.imageFolders[tabName], //获取显示表情和预览表情的路径\n        positionLine = 11 / 2, //中间数\n        iWidth = iHeight = 35, //图片长宽\n        iColWidth = 3, //表格剩余空间的显示比例\n        tableCss = emotion.imageCss[tabName],\n        cssOffset = emotion.imageCssOffset[tabName],\n        textHTML = ['<table class=\"smileytable\">'],\n        i = 0, imgNum = emotion.SmileyBox[tabName].length, imgColNum = 11, faceImage,\n        sUrl, realUrl, posflag, offset, infor;\n\n    for (; i < imgNum;) {\n        textHTML.push('<tr>');\n        for (var j = 0; j < imgColNum; j++, i++) {\n            faceImage = emotion.SmileyBox[tabName][i];\n            if (faceImage) {\n                sUrl = imagePath + faceImage + faceVersion;\n                realUrl = imagePath + faceImage;\n                posflag = j < positionLine ? 0 : 1;\n                offset = cssOffset * i * (-1) - 1;\n                infor = emotion.SmileyInfor[tabName][i];\n\n                textHTML.push('<td  class=\"' + tableCss + '\"   border=\"1\" width=\"' + iColWidth + '%\" style=\"border-collapse:collapse;\" align=\"center\"  bgcolor=\"transparent\" onclick=\"InsertSmiley(\\'' + realUrl.replace(/'/g, \"\\\\'\") + '\\',event)\" onmouseover=\"over(this,\\'' + sUrl + '\\',\\'' + posflag + '\\')\" onmouseout=\"out(this)\">');\n                textHTML.push('<span>');\n                textHTML.push('<img  style=\"background-position:left ' + offset + 'px;\" title=\"' + infor + '\" src=\"' + emotion.SmileyPath + (editor.options.emotionLocalization ? '0.gif\" width=\"' : 'default/0.gif\" width=\"') + iWidth + '\" height=\"' + iHeight + '\"></img>');\n                textHTML.push('</span>');\n            } else {\n                textHTML.push('<td width=\"' + iColWidth + '%\"   bgcolor=\"#FFFFFF\">');\n            }\n            textHTML.push('</td>');\n        }\n        textHTML.push('</tr>');\n    }\n    textHTML.push('</table>');\n    textHTML = textHTML.join(\"\");\n    tab.innerHTML = textHTML;\n}\n\nfunction over(td, srcPath, posFlag) {\n    td.style.backgroundColor = \"#ACCD3C\";\n    $G('faceReview').style.backgroundImage = \"url(\" + srcPath + \")\";\n    if (posFlag == 1) $G(\"tabIconReview\").className = \"show\";\n    $G(\"tabIconReview\").style.display = 'block';\n}\n\nfunction out(td) {\n    td.style.backgroundColor = \"transparent\";\n    var tabIconRevew = $G(\"tabIconReview\");\n    tabIconRevew.className = \"\";\n    tabIconRevew.style.display = 'none';\n}\n\nfunction createTabList(tabNum) {\n    var obj = {};\n    for (var i = 0; i < tabNum; i++) {\n        obj[\"tab\" + i] = [];\n    }\n    return obj;\n}\n\nfunction createArr(tabNum) {\n    var arr = [];\n    for (var i = 0; i < tabNum; i++) {\n        arr[i] = 0;\n    }\n    return arr;\n}\n\n"
  },
  {
    "path": "dialogs/formula/formula.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            box-sizing: border-box;\n            width: 800px;\n            height: 390px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #F2F2F2\n        }\n\n        .editor-wrap {\n            display: flex;\n            margin: 10px;\n        }\n\n        .editor-wrap #editor {\n            width: 0;\n            flex-grow: 1;\n            border: 1px solid #CCC;\n            border-radius: 3px;\n            padding: 5px;\n            height: 100px;\n            outline: none;\n        }\n\n        .input-tip {\n            margin: 10px;\n        }\n\n        .input-tip a {\n            color: #0f0d0d;\n        }\n\n        .editor-preview {\n            background: #FFF;\n            border-radius: 3px;\n            border: 1px solid #EEE;\n            display: none;\n            margin: 10px;\n        }\n\n        .editor-preview .title {\n            padding: 5px;\n        }\n\n        .editor-preview .body {\n            padding: 5px 5px 15px 5px;\n            text-align: center;\n        }\n\n        .editor-preview .body .image {\n            max-width: 100%;\n            max-height: 100px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n\n    <div id=\"modeLive\" style=\"display:none;\">\n        <iframe id=\"liveEditor\"\n                frameborder=\"0\"\n                style=\"width:800px;height:390px;border: 0;outline: none;\"\n        ></iframe>\n    </div>\n\n    <div id=\"modePlain\" style=\"display:none;\">\n        <div class=\"editor-wrap\">\n            <textarea id=\"editor\"></textarea>\n        </div>\n        <div class=\"input-tip\">\n            基于 latex 语法，<a href=\"javascript:;\" id=\"inputDemo\">点击输入示例</a>。\n        </div>\n        <div class=\"editor-preview\" id=\"preview\">\n            <div class=\"title\">预览</div>\n            <div class=\"body\">\n                <img class=\"image\" id=\"previewImage\"/>\n            </div>\n        </div>\n    </div>\n\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"formula.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    utils.domReady(function () {\n        Formula.init();\n    });\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/formula/formula.js",
    "content": "function preg_quote(str, delimiter) {\n    // Quote regular expression characters plus an optional character\n    //\n    // version: 1107.2516\n    // discuss at: http://phpjs.org/functions/preg_quote\n    // +   original by: booeyOH\n    // +   improved by: Ates Goral (http://magnetiq.com)\n    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)\n    // +   bugfixed by: Onno Marsman\n    // +   improved by: Brett Zamir (http://brett-zamir.me)\n    // *     example 1: preg_quote(\"$40\");\n    // *     returns 1: '\\$40'\n    // *     example 2: preg_quote(\"*RRRING* Hello?\");\n    // *     returns 2: '\\*RRRING\\* Hello\\?'\n    // *     example 3: preg_quote(\"\\\\.+*?[^]$(){}=!<>|:\");\n    // *     returns 3: '\\\\\\.\\+\\*\\?\\[\\^\\]\\$\\(\\)\\{\\}\\=\\!\\<\\>\\|\\:'\n    return (str + '').replace(new RegExp('[.\\\\\\\\+*?\\\\[\\\\^\\\\]$(){}=!<>|:\\\\' + (delimiter || '') + '-]', 'g'), '\\\\$&');\n}\n\nfunction loadScript(url, cb) {\n    var script;\n    script = document.createElement('script');\n    script.src = url;\n    script.onload = function () {\n        cb && cb({isNew: true})\n    };\n    document.getElementsByTagName('head')[0].appendChild(script);\n}\n\nvar Formula = {\n    mode: 'plain',\n    latexeasy: null,\n    init: function () {\n        // console.log('Formula.init')\n        Formula.initMode();\n        Formula.initEvent();\n        Formula.initSubmit();\n    },\n    renderPlain: function () {\n        var $preview = $('#preview');\n        var value = $('#editor').val();\n        if (!value) {\n            $preview.hide();\n            return;\n        }\n        value = encodeURIComponent(value);\n        var formulaConfig = editor.getOpt('formulaConfig');\n        var src = formulaConfig.imageUrlTemplate.replace(/\\{\\}/, value);\n        $('#previewImage').attr('src', src);\n        $preview.show();\n    },\n    setValuePlain: function (value) {\n        $('#editor').val(value);\n        Formula.renderPlain();\n    },\n    setValueLive: function (value) {\n        if (!Formula.latexeasy) {\n            setTimeout(function () {\n                Formula.setValueLive(value);\n            }, 100);\n            return;\n        }\n        Formula.latexeasy.call('set.latex', {latex: value});\n    },\n    initMode: function () {\n        var formulaConfig = editor.getOpt('formulaConfig');\n        if ('live' === formulaConfig.editorMode) {\n            $('#liveEditor').attr('src', formulaConfig.editorLiveServer + '/editor');\n            $('#modeLive').show();\n            Formula.mode = 'live';\n        } else {\n            $('#modePlain').show();\n            Formula.mode = 'plain';\n        }\n        var img = editor.selection.getRange().getClosedNode();\n        if (img && img.getAttribute('data-formula-image') !== null) {\n            var value = img.getAttribute('data-formula-image');\n            if (value) {\n                Formula.setValue(decodeURIComponent(value));\n            }\n        }\n    },\n    setValue: function (value) {\n        switch (Formula.mode) {\n            case 'plain':\n                Formula.setValuePlain(value);\n                break;\n            case 'live':\n                Formula.setValueLive(value);\n                break;\n        }\n    },\n    getValue: function (cb) {\n        switch (Formula.mode) {\n            case 'plain':\n                cb($.trim($('#editor').val()));\n                break;\n            case 'live':\n                Formula.latexeasy.call('get.latex', {}, function (data) {\n                    cb(data.latex);\n                });\n                break;\n        }\n    },\n    initEvent: function () {\n        var changeTimer = null, le;\n        switch (Formula.mode) {\n            case 'plain':\n                // console.log('Formula.initEvent');\n                $('#editor').on('change keypress', function () {\n                    changeTimer && clearTimeout(changeTimer);\n                    changeTimer = setTimeout(function () {\n                        Formula.renderPlain();\n                    }, 1000);\n                });\n                $('#inputDemo').on('click', function () {\n                    $('#editor').val('f(a) = \\\\frac{1}{2\\\\pi i} \\\\oint\\\\frac{f(z)}{z-a}dz');\n                    Formula.renderPlain();\n                });\n                break;\n            case 'live':\n                var formulaConfig = editor.getOpt('formulaConfig');\n                loadScript(formulaConfig.editorLiveServer + '/vendor/LatexEasyEditor/editor/sdk.js', function () {\n                    le = new window.LatexEasy(document.getElementById('liveEditor'));\n                    le.on('ready', function () {\n                        Formula.latexeasy = le;\n                    });\n                    le.init();\n                });\n                break;\n        }\n    },\n    initSubmit: function () {\n        dialog.onclose = function (t, ok) {\n            if (!ok) {\n                return true;\n            }\n            // console.log('onclose', t, ok);\n            Formula.getValue(function (value) {\n                editor.execCommand('formula', value);\n                editor.fireEvent('saveScene');\n                dialog.close(false);\n            });\n            return false;\n        };\n    }\n};\n"
  },
  {
    "path": "dialogs/help/help.css",
    "content": ".wrapper {\n    width: 370px;\n    margin: 10px auto;\n    zoom: 1;\n}\n\n.tabbody {\n    height: 360px;\n}\n\n.tabbody .panel {\n    width: 100%;\n    height: 360px;\n    position: absolute;\n    background: #fff;\n}\n\n.tabbody .panel h1 {\n    font-size: 26px;\n    margin: 5px 0 0 5px;\n}\n\n.tabbody .panel p {\n    font-size: 12px;\n    margin: 5px 0 0 5px;\n}\n\n.tabbody table {\n    width: 90%;\n    line-height: 20px;\n    margin: 5px 0 0 5px;;\n}\n\n.tabbody table thead {\n    font-weight: bold;\n    line-height: 25px;\n}\n"
  },
  {
    "path": "dialogs/help/help.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title>帮助</title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"help.css?{timestamp}\">\n</head>\n<body>\n<div class=\"wrapper\" id=\"helptab\">\n    <div id=\"tabHeads\" class=\"tabhead\">\n        <span class=\"focus\" tabsrc=\"about\"><var id=\"lang_input_about\"></var></span>\n        <span tabsrc=\"shortcuts\"><var id=\"lang_input_shortcuts\"></var></span>\n    </div>\n    <div id=\"tabBodys\" class=\"tabbody\">\n        <div id=\"about\" class=\"panel\">\n            <h1>UEditor Plus</h1>\n            <p id=\"version\"></p>\n            <p><var id=\"lang_input_introduction\"></var></p>\n        </div>\n        <div id=\"shortcuts\" class=\"panel\">\n            <table>\n                <thead>\n                <tr>\n                    <td><var id=\"lang_Txt_shortcuts\"></var></td>\n                    <td><var id=\"lang_Txt_func\"></var></td>\n                </tr>\n                </thead>\n                <tbody>\n                <tr>\n                    <td>ctrl+b</td>\n                    <td><var id=\"lang_Txt_bold\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+c</td>\n                    <td><var id=\"lang_Txt_copy\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+x</td>\n                    <td><var id=\"lang_Txt_cut\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+v</td>\n                    <td><var id=\"lang_Txt_Paste\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+y</td>\n                    <td><var id=\"lang_Txt_undo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+z</td>\n                    <td><var id=\"lang_Txt_redo\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+i</td>\n                    <td><var id=\"lang_Txt_italic\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+u</td>\n                    <td><var id=\"lang_Txt_underline\"></var></td>\n                </tr>\n                <tr>\n                    <td>ctrl+a</td>\n                    <td><var id=\"lang_Txt_selectAll\"></var></td>\n                </tr>\n                <tr>\n                    <td>shift+enter</td>\n                    <td><var id=\"lang_Txt_visualEnter\"></var></td>\n                </tr>\n                <tr>\n                    <td>alt+z</td>\n                    <td><var id=\"lang_Txt_fullscreen\"></var></td>\n                </tr>\n                </tbody>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"help.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/help/help.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:06\n * To change this template use File | Settings | File Templates.\n */\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler(tabHeads, tabBodys, obj) {\n    //head样式更改\n    for (var k = 0, len = tabHeads.length; k < len; k++) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute(\"tabSrc\");\n    for (var j = 0, length = tabBodys.length; j < length; j++) {\n        var body = tabBodys[j],\n            id = body.getAttribute(\"id\");\n        body.onclick = function () {\n            this.style.zoom = 1;\n        };\n        if (id != tabSrc) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab(tabParentId) {\n    var tabElements = $G(tabParentId).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for (var i = 0, length = tabHeads.length; i < length; i++) {\n        var head = tabHeads[i];\n        if (head.className === \"focus\") clickHandler(tabHeads, tabBodys, head);\n        head.onclick = function () {\n            clickHandler(tabHeads, tabBodys, this);\n        }\n    }\n}\n\nswitchTab(\"helptab\");\n\ndocument.getElementById('version').innerHTML = parent.UE.version;\n"
  },
  {
    "path": "dialogs/image/image.css",
    "content": "@charset \"utf-8\";\n/* dialog样式 */\n.wrapper {\n    zoom: 1;\n    width: 630px;\n    *width: 626px;\n    height: 380px;\n    margin: 0 auto;\n    padding: 10px;\n    position: relative;\n    font-family: sans-serif;\n}\n\n/*tab样式框大小*/\n.tabhead {\n    float: left;\n}\n\n.tabbody {\n    width: 100%;\n    height: 346px;\n    position: relative;\n    clear: both;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n}\n\n/* 图片对齐方式 */\n.alignBar {\n    float: right;\n    margin-top: 5px;\n    position: relative;\n}\n\n.alignBar .algnLabel {\n    float: left;\n    height: 20px;\n    line-height: 20px;\n}\n\n.alignBar #alignIcon {\n    zoom: 1;\n    _display: inline;\n    display: inline-block;\n    position: relative;\n}\n\n.alignBar #alignIcon span {\n    float: left;\n    cursor: pointer;\n    display: block;\n    width: 19px;\n    height: 17px;\n    margin-right: 3px;\n    margin-left: 3px;\n    background-image: url(./images/alignicon.jpg);\n}\n\n.alignBar #alignIcon .none-align {\n    background-position: 0 -18px;\n}\n\n.alignBar #alignIcon .left-align {\n    background-position: -20px -18px;\n}\n\n.alignBar #alignIcon .right-align {\n    background-position: -40px -18px;\n}\n\n.alignBar #alignIcon .center-align {\n    background-position: -60px -18px;\n}\n\n.alignBar #alignIcon .none-align.focus {\n    background-position: 0 0;\n}\n\n.alignBar #alignIcon .left-align.focus {\n    background-position: -20px 0;\n}\n\n.alignBar #alignIcon .right-align.focus {\n    background-position: -40px 0;\n}\n\n.alignBar #alignIcon .center-align.focus {\n    background-position: -60px 0;\n}\n\n\n/* 远程图片样式 */\n#remote {\n    z-index: 200;\n}\n\n#remote .top {\n    width: 100%;\n    margin-top: 25px;\n}\n\n#remote .left {\n    display: block;\n    float: left;\n    width: 300px;\n    height: 10px;\n}\n\n#remote .right {\n    display: block;\n    float: right;\n    width: 300px;\n    height: 10px;\n}\n\n#remote .row {\n    margin-left: 20px;\n    clear: both;\n    height: 40px;\n}\n\n#remote .row label {\n    text-align: center;\n    width: 50px;\n    zoom: 1;\n    _display: inline;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n#remote .row label.algnLabel {\n    float: left;\n\n}\n\n#remote input.text {\n    width: 150px;\n    padding: 3px 6px;\n    font-size: 14px;\n    line-height: 1.42857143;\n    color: #555;\n    background-color: #fff;\n    background-image: none;\n    border: 1px solid #ccc;\n    border-radius: 4px;\n    -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n    -webkit-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n    transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n\n#remote input.text:focus {\n    outline: 0;\n}\n\n#remote #url {\n    width: 400px;\n    margin-bottom: 2px;\n}\n\n#remote #imageSelect {\n    width: 100px;\n    display: inline-block;\n    background: #FFF;\n    border: 1px solid #EEE;\n    line-height: 26px;\n    text-align: center;\n    color: #333;\n    text-decoration: none;\n    border-radius: 3px;\n    vertical-align: top;\n}\n\n#remote #width,\n#remote #height {\n    width: 30px;\n    margin-left: 2px;\n    margin-right: 2px;\n    text-align: center;\n}\n\n#remote #border,\n#remote #vhSpace,\n#remote #title {\n    width: 180px;\n    margin-right: 5px;\n}\n\n#remote #lock {\n    display: inline-block;\n    vertical-align: middle;\n}\n\n#remote #lockicon {\n    zoom: 1;\n    _display: inline;\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    background: url(\"../../themes/default/images/lock.gif\") -13px -13px no-repeat;\n    vertical-align: middle;\n}\n\n#remote #preview {\n    clear: both;\n    width: 260px;\n    height: 240px;\n    z-index: 9999;\n    margin-top: 10px;\n    background-color: #eee;\n    overflow: hidden;\n}\n\n/* 上传图片 */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 346px;\n    display: block;\n    clip: auto;\n}\n\n#upload .queueList {\n    margin: 0;\n    width: 100%;\n    height: 100%;\n    position: absolute;\n    overflow: hidden;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 172px;\n    padding-top: 150px;\n    text-align: center;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top: 0;\n    *top: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 300px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n    position: relative;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 9px 0 0 9px;\n    *margin: 6px 0 0 6px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display: none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background: url(./images/success.gif) no-repeat right bottom \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n\n#upload .filelist li.filePickerBlock div.webuploader-pick {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display: none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display: none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter: alpha(opacity=60);\n    -moz-opacity: 0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 图片管理样式 */\n#online {\n    width: 100%;\n    height: 336px;\n    padding: 10px 0 0 0;\n}\n\n#online #imageList {\n    width: 100%;\n    height: 100%;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n}\n\n#online ul {\n    display: block;\n    list-style: none;\n    margin: 0;\n    padding: 0;\n}\n\n#online li {\n    float: left;\n    display: block;\n    list-style: none;\n    padding: 0;\n    width: 113px;\n    height: 113px;\n    margin: 0 0 9px 9px;\n    *margin: 0 0 6px 6px;\n    background-color: #eee;\n    overflow: hidden;\n    cursor: pointer;\n    position: relative;\n}\n\n#online li.clearFloat {\n    float: none;\n    clear: both;\n    display: block;\n    width: 0;\n    height: 0;\n    margin: 0;\n    padding: 0;\n}\n\n#online li img {\n    cursor: pointer;\n}\n\n#online li .icon {\n    cursor: pointer;\n    width: 113px;\n    height: 113px;\n    position: absolute;\n    top: 0;\n    left: 0;\n    z-index: 2;\n    border: 0;\n    background-repeat: no-repeat;\n}\n\n#online li .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n}\n\n#online li.selected .icon {\n    background-image: url(images/success.png);\n    background-image: url(images/success.gif) \\9;\n    background-position: 75px 75px;\n}\n\n#online li.selected .icon:hover {\n    width: 107px;\n    height: 107px;\n    border: 3px solid #1094fa;\n    background-position: 72px 72px;\n}\n"
  },
  {
    "path": "dialogs/image/image.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"UTF-8\">\n    <title>ueditor图片对话框</title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n\n    <!-- jquery -->\n    <script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n\n    <!-- webuploader -->\n    <script src=\"../../third-party/webuploader/webuploader.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?{timestamp}\">\n\n    <!-- image dialog -->\n    <link rel=\"stylesheet\" href=\"image.css?{timestamp}\" type=\"text/css\"/>\n</head>\n<body>\n\n<div class=\"wrapper\">\n    <div id=\"tabhead\" class=\"tabhead\">\n        <span class=\"tab focus\" data-content-id=\"remote\"><var id=\"lang_tab_remote\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"upload\"><var id=\"lang_tab_upload\"></var></span>\n        <span style=\"display:none;\" class=\"tab\" data-content-id=\"online\"><var id=\"lang_tab_online\"></var></span>\n    </div>\n    <div class=\"alignBar\">\n        <label class=\"algnLabel\"><var id=\"lang_input_align\"></var></label>\n        <span id=\"alignIcon\">\n                        <span id=\"noneAlign\" class=\"none-align focus\" data-align=\"none\"></span>\n                        <span id=\"leftAlign\" class=\"left-align\" data-align=\"left\"></span>\n                        <span id=\"rightAlign\" class=\"right-align\" data-align=\"right\"></span>\n                        <span id=\"centerAlign\" class=\"center-align\" data-align=\"center\"></span>\n                    </span>\n        <input id=\"align\" name=\"align\" type=\"hidden\" value=\"none\"/>\n    </div>\n    <div id=\"tabbody\" class=\"tabbody\">\n\n        <!-- 远程图片 -->\n        <div id=\"remote\" class=\"panel\">\n            <div class=\"top\">\n                <div class=\"row\">\n                    <label for=\"url\"><var id=\"lang_input_url\"></var></label>\n                    <span><input class=\"text\" id=\"url\" type=\"text\"/></span>\n                    <a href=\"javascript:;\" id=\"imageSelect\" style=\"display:none;\">选择图片</a>\n                </div>\n            </div>\n            <div class=\"left\">\n                <div class=\"row\">\n                    <label><var id=\"lang_input_size\"></var></label>\n                    <span><var id=\"lang_input_width\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\"\n                                                                              id=\"width\"/>px </span>\n                    <span><var id=\"lang_input_height\">&nbsp;&nbsp;</var><input class=\"text\" type=\"text\" id=\"height\"/>px </span>\n                    <span><input id=\"lock\" type=\"checkbox\" disabled=\"disabled\"><span id=\"lockicon\"></span></span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_border\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"border\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_vhspace\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"vhSpace\"/>px </span>\n                </div>\n                <div class=\"row\">\n                    <label><var id=\"lang_input_title\"></var></label>\n                    <span><input class=\"text\" type=\"text\" id=\"title\"/></span>\n                </div>\n            </div>\n            <div class=\"right\">\n                <div id=\"preview\"></div>\n            </div>\n        </div>\n\n        <!-- 上传图片 -->\n        <div id=\"upload\" class=\"panel focus\">\n            <div id=\"queueList\" class=\"queueList\">\n                <div class=\"statusBar element-invisible\">\n                    <div class=\"progress\">\n                        <span class=\"text\">0%</span>\n                        <span class=\"percentage\"></span>\n                    </div>\n                    <div class=\"info\"></div>\n                    <div class=\"btns\">\n                        <div id=\"filePickerBtn\"></div>\n                        <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                    </div>\n                </div>\n                <div id=\"dndArea\" class=\"placeholder\">\n                    <div class=\"filePickerContainer\">\n                        <div id=\"filePickerReady\"></div>\n                    </div>\n                </div>\n                <ul class=\"filelist element-invisible\">\n                    <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                </ul>\n            </div>\n        </div>\n\n        <!-- 在线图片 -->\n        <div id=\"online\" class=\"panel\">\n            <div id=\"imageList\"><var id=\"lang_imgLoading\"></var></div>\n        </div>\n\n        <!-- 搜索图片 -->\n        <div id=\"search\" class=\"panel\">\n            <div class=\"searchBar\">\n                <input id=\"searchTxt\" class=\"searchTxt text\" type=\"text\"/>\n                <select id=\"searchType\" class=\"searchType\">\n                    <option value=\"&s=4&z=0\"></option>\n                    <option value=\"&s=1&z=19\"></option>\n                    <option value=\"&s=2&z=0\"></option>\n                    <option value=\"&s=3&z=0\"></option>\n                </select>\n                <input id=\"searchReset\" type=\"button\"/>\n                <input id=\"searchBtn\" type=\"button\"/>\n            </div>\n            <div id=\"searchList\" class=\"searchList\">\n                <ul id=\"searchListUl\"></ul>\n            </div>\n        </div>\n\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"image.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/image/image.js",
    "content": "/**\n * User: Jinqn\n * Date: 14-04-08\n * Time: 下午16:34\n * 上传图片对话框逻辑代码,包括tab: 远程图片/上传图片/在线图片/搜索图片\n */\n(function () {\n\n    var remoteImage,\n        uploadImage,\n        onlineImage;\n    var editorOpt = {};\n\n    window.onload = function () {\n        editorOpt = editor.getOpt('imageConfig');\n        initTabs();\n        initAlign();\n        initButtons();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabhead').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var target = e.target || e.srcElement;\n                setTabFocus(target.getAttribute('data-content-id'));\n            });\n        }\n        if (!editorOpt.disableUpload) {\n            $G('tabhead').querySelector('[data-content-id=\"upload\"]').style.display = 'inline-block';\n        }\n        if (!editorOpt.disableOnline) {\n            $G('tabhead').querySelector('[data-content-id=\"online\"]').style.display = 'inline-block';\n        }\n        if (!!editorOpt.selectCallback) {\n            $G('imageSelect').style.display = 'inline-block';\n            domUtils.on($G('imageSelect'), \"click\", function (e) {\n                editorOpt.selectCallback(editor, function (info) {\n                    if (info) {\n                        $G('url').value = info.path;\n                        $G('title').value = info.name;\n                        var img = new Image();\n                        img.onload = function () {\n                            $G('width').value = img.width;\n                            $G('height').value = img.height;\n                            remoteImage.setPreview();\n                        };\n                        img.onerror = function () {\n                            remoteImage.setPreview();\n                        };\n                        img.src = info.path;\n                    }\n                });\n            });\n        }\n        var img = editor.selection.getRange().getClosedNode();\n        if (img && img.tagName && img.tagName.toLowerCase() == 'img') {\n            setTabFocus('remote');\n        } else {\n            setTabFocus('remote');\n        }\n    }\n\n    /* 初始化tabbody */\n    function setTabFocus(id) {\n        if (!id) return;\n        var i, bodyId, tabs = $G('tabhead').children;\n        for (i = 0; i < tabs.length; i++) {\n            bodyId = tabs[i].getAttribute('data-content-id');\n            if (bodyId == id) {\n                domUtils.addClass(tabs[i], 'focus');\n                domUtils.addClass($G(bodyId), 'focus');\n            } else {\n                domUtils.removeClasses(tabs[i], 'focus');\n                domUtils.removeClasses($G(bodyId), 'focus');\n            }\n        }\n        switch (id) {\n            case 'remote':\n                remoteImage = remoteImage || new RemoteImage();\n                break;\n            case 'upload':\n                setAlign(editor.getOpt('imageInsertAlign'));\n                uploadImage = uploadImage || new UploadImage('queueList');\n                break;\n            case 'online':\n                setAlign(editor.getOpt('imageManagerInsertAlign'));\n                onlineImage = onlineImage || new OnlineImage('imageList');\n                onlineImage.reset();\n                break;\n        }\n    }\n\n    /* 初始化onok事件 */\n    function initButtons() {\n\n        dialog.onok = function () {\n            var remote = false, list = [], id, tabs = $G('tabhead').children;\n            for (var i = 0; i < tabs.length; i++) {\n                if (domUtils.hasClass(tabs[i], 'focus')) {\n                    id = tabs[i].getAttribute('data-content-id');\n                    break;\n                }\n            }\n\n            switch (id) {\n                case 'remote':\n                    list = remoteImage.getInsertList();\n                    break;\n                case 'upload':\n                    list = uploadImage.getInsertList();\n                    var count = uploadImage.getQueueCount();\n                    if (count) {\n                        $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n                        return false;\n                    }\n                    break;\n                case 'online':\n                    list = onlineImage.getInsertList();\n                    break;\n            }\n\n            if (list) {\n                editor.execCommand('insertimage', list);\n                remote && editor.fireEvent(\"catchRemoteImage\");\n            }\n        };\n    }\n\n\n    /* 初始化对其方式的点击事件 */\n    function initAlign() {\n        /* 点击align图标 */\n        domUtils.on($G(\"alignIcon\"), 'click', function (e) {\n            var target = e.target || e.srcElement;\n            if (target.className && target.className.indexOf('-align') != -1) {\n                setAlign(target.getAttribute('data-align'));\n            }\n        });\n    }\n\n    /* 设置对齐方式 */\n    function setAlign(align) {\n        align = align || 'none';\n        var aligns = $G(\"alignIcon\").children;\n        for (i = 0; i < aligns.length; i++) {\n            if (aligns[i].getAttribute('data-align') == align) {\n                domUtils.addClass(aligns[i], 'focus');\n                $G(\"align\").value = aligns[i].getAttribute('data-align');\n            } else {\n                domUtils.removeClasses(aligns[i], 'focus');\n            }\n        }\n    }\n\n    /* 获取对齐方式 */\n    function getAlign() {\n        var align = $G(\"align\").value || 'none';\n        return align == 'none' ? '' : align;\n    }\n\n\n    /* 在线图片 */\n    function RemoteImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n\n    RemoteImage.prototype = {\n        init: function () {\n            this.initContainer();\n            this.initEvents();\n        },\n        initContainer: function () {\n            this.dom = {\n                'url': $G('url'),\n                'width': $G('width'),\n                'height': $G('height'),\n                'border': $G('border'),\n                'vhSpace': $G('vhSpace'),\n                'title': $G('title'),\n                'align': $G('align')\n            };\n            var img = editor.selection.getRange().getClosedNode();\n            if (img) {\n                this.setImage(img);\n            }\n        },\n        initEvents: function () {\n            var _this = this,\n                locker = $G('lock');\n\n            /* 改变url */\n            domUtils.on($G(\"url\"), 'keyup', updatePreview);\n            domUtils.on($G(\"border\"), 'keyup', updatePreview);\n            domUtils.on($G(\"title\"), 'keyup', updatePreview);\n\n            domUtils.on($G(\"width\"), 'keyup', function () {\n                if (locker.checked) {\n                    var proportion = locker.getAttribute('data-proportion');\n                    $G('height').value = Math.round(this.value / proportion);\n                } else {\n                    _this.updateLocker();\n                }\n                updatePreview();\n            });\n            domUtils.on($G(\"height\"), 'keyup', function () {\n                if (locker.checked) {\n                    var proportion = locker.getAttribute('data-proportion');\n                    $G('width').value = Math.round(this.value * proportion);\n                } else {\n                    _this.updateLocker();\n                }\n                updatePreview();\n            });\n            domUtils.on($G(\"lock\"), 'change', function () {\n                var proportion = parseInt($G(\"width\").value) / parseInt($G(\"height\").value);\n                locker.setAttribute('data-proportion', proportion);\n            });\n\n            function updatePreview() {\n                _this.setPreview();\n            }\n        },\n        updateLocker: function () {\n            var width = $G('width').value,\n                height = $G('height').value,\n                locker = $G('lock');\n            if (width && height && width == parseInt(width) && height == parseInt(height)) {\n                locker.disabled = false;\n                locker.title = '';\n            } else {\n                locker.checked = false;\n                locker.disabled = 'disabled';\n                locker.title = lang.remoteLockError;\n            }\n        },\n        setImage: function (img) {\n            /* 不是正常的图片 */\n            if (!img.tagName || img.tagName.toLowerCase() != 'img' && !img.getAttribute(\"src\") || !img.src) return;\n\n            var wordImgFlag = img.getAttribute(\"data-word-image\"),\n                src = wordImgFlag ? wordImgFlag.replace(\"&amp;\", \"&\") : (img.getAttribute('_src') || img.getAttribute(\"src\", 2).replace(\"&amp;\", \"&\")),\n                align = editor.queryCommandValue(\"imageFloat\");\n\n            /* 防止onchange事件循环调用 */\n            if (src !== $G(\"url\").value) $G(\"url\").value = src;\n            if (src) {\n                /* 设置表单内容 */\n                $G(\"width\").value = img.width || '';\n                $G(\"height\").value = img.height || '';\n                $G(\"border\").value = img.getAttribute(\"border\") || '0';\n                $G(\"vhSpace\").value = img.getAttribute(\"vspace\") || '0';\n                $G(\"title\").value = img.title || img.alt || '';\n                setAlign(align);\n                this.setPreview();\n                this.updateLocker();\n            }\n        },\n        getData: function () {\n            var data = {};\n            for (var k in this.dom) {\n                data[k] = this.dom[k].value;\n            }\n            return data;\n        },\n        setPreview: function () {\n            var url = $G('url').value,\n                ow = $G('width').value,\n                oh = $G('height').value,\n                border = $G('border').value,\n                title = $G('title').value,\n                preview = $G('preview'),\n                width,\n                height;\n\n            width = ((!ow || !oh) ? preview.offsetWidth : Math.min(ow, preview.offsetWidth));\n            width = width + (border * 2) > preview.offsetWidth ? width : (preview.offsetWidth - (border * 2));\n            height = (!ow || !oh) ? '' : width * oh / ow;\n\n            if (url) {\n                preview.innerHTML = '<img src=\"' + url + '\" width=\"' + width + '\" height=\"' + height + '\" border=\"' + border + 'px solid #000\" title=\"' + title + '\" />';\n            }\n        },\n        getInsertList: function () {\n            var data = this.getData();\n            if (data['url']) {\n                var img = {\n                    src: data['url'],\n                    _src: data['url'],\n                }\n                img._propertyDelete = []\n                img.style = []\n                if (data['width']) {\n                    img.width = data['width'];\n                    img.style.push('width:' + data['width'] + 'px');\n                } else {\n                    img._propertyDelete.push('width');\n                }\n                if (data['height']) {\n                    img.height = data['height'];\n                    img.style.push('height:' + data['height'] + 'px');\n                } else {\n                    img._propertyDelete.push('height');\n                }\n                if (data['border']) {\n                    img.border = data['border'];\n                } else {\n                    img._propertyDelete.push('border');\n                }\n                if (data['align']) {\n                    img.floatStyle = data['align'];\n                } else {\n                    img._propertyDelete.push('floatStyle');\n                }\n                if (data['vhSpace']) {\n                    img.vspace = data['vhSpace'];\n                } else {\n                    img._propertyDelete.push('vspace');\n                }\n                if (data['title']) {\n                    img.alt = data['title'];\n                } else {\n                    img._propertyDelete.push('alt');\n                }\n                if (img.style.length > 0) {\n                    img.style = img.style.join(';');\n                } else {\n                    img._propertyDelete.push('style');\n                }\n                return [img];\n            } else {\n                return [];\n            }\n        }\n    };\n\n\n    /* 上传图片 */\n    function UploadImage(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n\n    UploadImage.prototype = {\n        init: function () {\n            this.imageList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n                // 图片容器\n                $queue = $wrap.find('.filelist'),\n                // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n                // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n                // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n                // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n                // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n                // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n                // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n                // 添加的文件数量\n                fileCount = 0,\n                // 添加的文件总大小\n                fileSize = 0,\n                // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n                // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n                // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n                // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n                // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n                acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n                imageMaxSize = editor.getOpt('imageMaxSize'),\n                imageCompressBorder = editor.getOpt('imageCompressBorder');\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('imageActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            var uploaderOption = {\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                accept: {\n                    title: 'Images',\n                    extensions: acceptExtensions,\n                    mimeTypes: 'image/*'\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('imageFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n                threads: 1,\n                headers: editor.getOpt('serverHeaders') || {},\n                compress: editor.getOpt('imageCompressEnable') ? {\n                    enable: editor.getOpt('imageCompressEnable'),\n                    maxWidthOrHeight: imageCompressBorder,\n                    maxSize: imageMaxSize,\n                } : false\n            };\n            if(editor.getOpt('uploadServiceEnable')) {\n                uploaderOption.customUpload = function (file, callback) {\n                    editor.getOpt('uploadServiceUpload')('image', file, {\n                        success: function( res ) {\n                            callback.onSuccess(file, {_raw:JSON.stringify(res)});\n                        },\n                        error: function( err ) {\n                            callback.onError(file, err);\n                        },\n                        progress: function( percent ) {\n                            callback.onProgress(file, percent);\n                        }\n                    }, {\n                        from: 'image'\n                    });\n                };\n            }\n\n            uploader = _this.uploader = WebUploader.create(uploaderOption);\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if (browser.ie && browser.version <= 7) {\n                        $wrap.text(lang.uploadNoPreview);\n                    } else {\n                        uploader.makeThumb(file, function (error, src) {\n                            if (error || !src) {\n                                $wrap.text(lang.uploadNoPreview);\n                            } else {\n                                var $img = $('<img src=\"' + src + '\">');\n                                $wrap.empty().append($img);\n                                $img.on('error', function () {\n                                    $wrap.text(lang.uploadNoPreview);\n                                });\n                            }\n                        }, thumbnailWidth, thumbnailHeight);\n                    }\n                    percentages[file.id] = [file.size, 0];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[file.id][1] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[file.id][1] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[file.id];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[0];\n                    loaded += v[0] * v[1];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val !== state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide();\n                            $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)).replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                if (file.ext && acceptExtensions.indexOf(file.ext.toLowerCase()) != -1 && file.size <= imageMaxSize) {\n                    fileCount--;\n                    fileSize -= file.size;\n                }\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?' : '&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n                    header['X-Requested-With'] = 'XMLHttpRequest';\n                }\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[file.id][1] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    json = editor.options.serverResponsePrepare(json);\n                    if (json.state == 'SUCCESS') {\n                        _this.imageList.push(json);\n                        $file.append('<span class=\"success\"></span>');\n                        // 触发上传图片事件\n                        editor.fireEvent(\"uploadsuccess\", {\n                            res: json,\n                            type: 'image'\n                        });\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, param1, param2) {\n                if (code === 'F_EXCEED_SIZE') {\n                    editor.getOpt('tipError')(lang.errorExceedSize + ' ' + (param1 / 1024 / 1024).toFixed(1) + 'MB');\n                } else {\n                    console.log('error', code, param1, param2);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++];) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        destroy: function () {\n            this.$wrap.remove();\n        },\n        getInsertList: function () {\n            var i, data, list = [],\n                align = getAlign(),\n                prefix = editor.getOpt('imageUrlPrefix');\n            for (i = 0; i < this.imageList.length; i++) {\n                data = this.imageList[i];\n                list.push({\n                    src: prefix + data.url,\n                    _src: prefix + data.url,\n                    alt: data.original,\n                    floatStyle: align\n                });\n            }\n            return list;\n        }\n    };\n\n\n    /* 在线图片 */\n    function OnlineImage(target) {\n        this.container = utils.isString(target) ? document.getElementById(target) : target;\n        this.init();\n    }\n\n    OnlineImage.prototype = {\n        init: function () {\n            this.reset();\n            this.initEvents();\n        },\n        /* 初始化容器 */\n        initContainer: function () {\n            this.container.innerHTML = '';\n            this.list = document.createElement('ul');\n            this.clearFloat = document.createElement('li');\n\n            domUtils.addClass(this.list, 'list');\n            domUtils.addClass(this.clearFloat, 'clearFloat');\n\n            this.list.appendChild(this.clearFloat);\n            this.container.appendChild(this.list);\n        },\n        /* 初始化滚动事件,滚动到地步自动拉取数据 */\n        initEvents: function () {\n            var _this = this;\n\n            /* 滚动拉取图片 */\n            domUtils.on($G('imageList'), 'scroll', function (e) {\n                var panel = this;\n                if (panel.scrollHeight - (panel.offsetHeight + panel.scrollTop) < 10) {\n                    _this.getImageData();\n                }\n            });\n            /* 选中图片 */\n            domUtils.on(this.container, 'click', function (e) {\n                var target = e.target || e.srcElement,\n                    li = target.parentNode;\n\n                if (li.tagName.toLowerCase() == 'li') {\n                    if (domUtils.hasClass(li, 'selected')) {\n                        domUtils.removeClasses(li, 'selected');\n                    } else {\n                        domUtils.addClass(li, 'selected');\n                    }\n                }\n            });\n        },\n        /* 初始化第一次的数据 */\n        initData: function () {\n\n            /* 拉取数据需要使用的值 */\n            this.state = 0;\n            this.listSize = editor.getOpt('imageManagerListSize');\n            this.listIndex = 0;\n            this.listEnd = false;\n\n            /* 第一次拉取数据 */\n            this.getImageData();\n        },\n        /* 重置界面 */\n        reset: function () {\n            this.initContainer();\n            this.initData();\n        },\n        /* 向后台拉取图片列表数据 */\n        getImageData: function () {\n            var _this = this;\n\n            if (!_this.listEnd && !this.isLoadingData) {\n                this.isLoadingData = true;\n                var url = editor.getActionUrl(editor.getOpt('imageManagerActionName')),\n                    isJsonp = utils.isCrossDomainUrl(url);\n                ajax.request(url, {\n                    'timeout': 100000,\n                    'dataType': isJsonp ? 'jsonp' : '',\n                    'headers': editor.options.serverHeaders || {},\n                    'data': utils.extend({\n                        start: this.listIndex,\n                        size: this.listSize\n                    }, editor.queryCommandValue('serverparam')),\n                    'method': 'get',\n                    'onsuccess': function (r) {\n                        try {\n                            var json = isJsonp ? r : eval('(' + r.responseText + ')');\n                            json = editor.options.serverResponsePrepare(json);\n                            if (json.state === 'SUCCESS') {\n                                _this.pushData(json.list);\n                                _this.listIndex = parseInt(json.start) + parseInt(json.list.length);\n                                if (_this.listIndex >= json.total) {\n                                    _this.listEnd = true;\n                                }\n                                _this.isLoadingData = false;\n                            }\n                        } catch (e) {\n                            if (r.responseText.indexOf('ue_separate_ue') != -1) {\n                                var list = r.responseText.split(r.responseText);\n                                _this.pushData(list);\n                                _this.listIndex = parseInt(list.length);\n                                _this.listEnd = true;\n                                _this.isLoadingData = false;\n                            }\n                        }\n                    },\n                    'onerror': function () {\n                        _this.isLoadingData = false;\n                    }\n                });\n            }\n        },\n        /* 添加图片到列表界面上 */\n        pushData: function (list) {\n            var i, item, img, icon, _this = this,\n                urlPrefix = editor.getOpt('imageManagerUrlPrefix');\n            for (i = 0; i < list.length; i++) {\n                if (list[i] && list[i].url) {\n                    item = document.createElement('li');\n                    img = document.createElement('img');\n                    icon = document.createElement('span');\n\n                    domUtils.on(img, 'load', (function (image) {\n                        return function () {\n                            _this.scale(image, image.parentNode.offsetWidth, image.parentNode.offsetHeight);\n                        }\n                    })(img));\n                    img.width = 113;\n                    img.setAttribute('src', urlPrefix + list[i].url + (list[i].url.indexOf('?') == -1 ? '?noCache=' : '&noCache=') + (+new Date()).toString(36));\n                    img.setAttribute('_src', urlPrefix + list[i].url);\n                    domUtils.addClass(icon, 'icon');\n\n                    item.appendChild(img);\n                    item.appendChild(icon);\n                    this.list.insertBefore(item, this.clearFloat);\n                }\n            }\n        },\n        /* 改变图片大小 */\n        scale: function (img, w, h, type) {\n            var ow = img.width,\n                oh = img.height;\n\n            if (type == 'justify') {\n                if (ow >= oh) {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            } else {\n                if (ow >= oh) {\n                    img.width = w * ow / oh;\n                    img.height = h;\n                    img.style.marginLeft = '-' + parseInt((img.width - w) / 2) + 'px';\n                } else {\n                    img.width = w;\n                    img.height = h * oh / ow;\n                    img.style.marginTop = '-' + parseInt((img.height - h) / 2) + 'px';\n                }\n            }\n        },\n        getInsertList: function () {\n            var i, lis = this.list.children, list = [], align = getAlign();\n            for (i = 0; i < lis.length; i++) {\n                if (domUtils.hasClass(lis[i], 'selected')) {\n                    var img = lis[i].firstChild,\n                        src = img.getAttribute('_src');\n                    list.push({\n                        src: src,\n                        _src: src,\n                        alt: src.substr(src.lastIndexOf('/') + 1),\n                        floatStyle: align\n                    });\n                }\n\n            }\n            return list;\n        }\n    };\n\n})();\n"
  },
  {
    "path": "dialogs/insertframe/insertframe.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" href=\"../../themes/default/dialog.css?{timestamp}\">\n    <style type=\"text/css\">\n        .warp {\n            width: 320px;\n            height: 200px;\n            margin-left: 5px;\n            padding: 20px 0 0 15px;\n            position: relative;\n        }\n\n        #url {\n            width: 290px;\n            margin-bottom: 2px;\n            margin-left: -6px;\n            margin-left: -2px \\9;\n            *margin-left: 0;\n            _margin-left: 0;\n        }\n\n        .format span {\n            display: inline-block;\n            width: 58px;\n            text-align: left;\n            zoom: 1;\n        }\n\n        table td {\n            padding: 5px 0;\n        }\n\n        #align {\n            width: 65px;\n            height: 23px;\n            line-height: 22px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warp\">\n    <table width=\"300\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td colspan=\"2\" class=\"format\">\n                <span><var id=\"lang_input_address\"></var></span>\n                <input style=\"width:200px\" id=\"url\" type=\"text\" value=\"\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_width\"></var></span><input style=\"width:200px\"\n                                                                                                type=\"text\" id=\"width\"/>\n                px\n            </td>\n\n        </tr>\n        <tr>\n            <td colspan=\"2\" class=\"format\"><span><var id=\"lang_input_height\"></var></span><input style=\"width:200px\"\n                                                                                                 type=\"text\"\n                                                                                                 id=\"height\"/> px\n            </td>\n        </tr>\n        <tr>\n            <td><span><var id=\"lang_input_isScroll\"></var></span><input type=\"checkbox\" id=\"scroll\"/></td>\n            <td><span><var id=\"lang_input_frameborder\"></var></span><input type=\"checkbox\" id=\"frameborder\"/></td>\n        </tr>\n\n        <tr>\n            <td colspan=\"2\"><span><var id=\"lang_input_alignMode\"></var></span>\n                <select id=\"align\">\n                    <option value=\"\"></option>\n                    <option value=\"left\"></option>\n                    <option value=\"right\"></option>\n                </select>\n            </td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n    var iframe = editor._iframe;\n    if (iframe) {\n        $G(\"url\").value = iframe.getAttribute(\"src\") || \"\";\n        $G(\"width\").value = iframe.getAttribute(\"width\") || iframe.style.width.replace(\"px\", \"\") || \"\";\n        $G(\"height\").value = iframe.getAttribute(\"height\") || iframe.style.height.replace(\"px\", \"\") || \"\";\n        $G(\"scroll\").checked = (iframe.getAttribute(\"scrolling\") == \"yes\") ? true : false;\n        $G(\"frameborder\").checked = (iframe.getAttribute(\"frameborder\") == \"1\") ? true : false;\n        $G(\"align\").value = iframe.align ? iframe.align : \"\";\n    }\n\n    function queding() {\n        var url = $G(\"url\").value.replace(/^\\s*|\\s*$/ig, \"\"),\n            width = $G(\"width\").value,\n            height = $G(\"height\").value,\n            scroll = $G(\"scroll\"),\n            frameborder = $G(\"frameborder\"),\n            float = $G(\"align\").value,\n            newIframe = editor.document.createElement(\"iframe\"),\n            div;\n        if (!url) {\n            alert(lang.enterAddress);\n            return false;\n        }\n        newIframe.setAttribute(\"src\", /http:\\/\\/|https:\\/\\//ig.test(url) ? url : \"http://\" + url);\n        /^[1-9]+[.]?\\d*$/g.test(width) ? newIframe.setAttribute(\"width\", width) : \"\";\n        /^[1-9]+[.]?\\d*$/g.test(height) ? newIframe.setAttribute(\"height\", height) : \"\";\n        scroll.checked ? newIframe.setAttribute(\"scrolling\", \"yes\") : newIframe.setAttribute(\"scrolling\", \"no\");\n        frameborder.checked ? newIframe.setAttribute(\"frameborder\", \"1\", 0) : newIframe.setAttribute(\"frameborder\", \"0\", 0);\n        float ? newIframe.setAttribute(\"align\", float) : newIframe.setAttribute(\"align\", \"\");\n        if (iframe) {\n            iframe.parentNode.insertBefore(newIframe, iframe);\n            domUtils.remove(iframe);\n        } else {\n            div = editor.document.createElement(\"div\");\n            div.appendChild(newIframe);\n            editor.execCommand(\"inserthtml\", div.innerHTML);\n        }\n        editor._iframe = null;\n        dialog.close();\n    }\n\n    dialog.onok = queding;\n    $G(\"url\").onkeydown = function (evt) {\n        evt = evt || event;\n        if (evt.keyCode == 13) {\n            queding();\n        }\n    };\n    $focus($G(\"url\"));\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/internal.js",
    "content": "(function () {\n    var parent = window.parent;\n    //dialog对象\n    dialog = parent.$EDITORUI[window.frameElement.id.replace(/_iframe$/, '')];\n    //当前打开dialog的编辑器实例\n    editor = dialog.editor;\n\n    UE = parent.UE;\n\n    domUtils = UE.dom.domUtils;\n\n    utils = UE.utils;\n\n    browser = UE.browser;\n\n    ajax = UE.ajax;\n\n    $G = function (id) {\n        return document.getElementById(id)\n    };\n    //focus元素\n    $focus = function (node) {\n        setTimeout(function () {\n            if (browser.ie) {\n                var r = node.createTextRange();\n                r.collapse(false);\n                r.select();\n            } else {\n                node.focus()\n            }\n        }, 0)\n    };\n    utils.loadFile(document, {\n        href: editor.options.themePath + editor.options.theme + \"/dialogbase.css?cache=v20250415\",\n        tag: \"link\",\n        type: \"text/css\",\n        rel: \"stylesheet\"\n    });\n    lang = editor.getLang(dialog.className.split(\"-\")[2]);\n    if (lang) {\n        domUtils.on(window, 'load', function () {\n\n            var langImgPath = editor.options.langPath + editor.options.lang + \"/images/\";\n            //针对静态资源\n            for (var i in lang[\"static\"]) {\n                var dom = $G(i);\n                if (!dom) continue;\n                var tagName = dom.tagName,\n                    content = lang[\"static\"][i];\n                if (content.src) {\n                    //clone\n                    content = utils.extend({}, content, false);\n                    content.src = langImgPath + content.src;\n                }\n                if (content.style) {\n                    content = utils.extend({}, content, false);\n                    content.style = content.style.replace(/url\\s*\\(/g, \"url(\" + langImgPath)\n                }\n                switch (tagName.toLowerCase()) {\n                    case \"var\":\n                        dom.parentNode.replaceChild(document.createTextNode(content), dom);\n                        break;\n                    case \"select\":\n                        var ops = dom.options;\n                        for (var j = 0, oj; oj = ops[j];) {\n                            oj.innerHTML = content.options[j++];\n                        }\n                        for (var p in content) {\n                            p != \"options\" && dom.setAttribute(p, content[p]);\n                        }\n                        break;\n                    default :\n                        domUtils.setAttributes(dom, content);\n                }\n            }\n        });\n    }\n\n\n})();\n\n"
  },
  {
    "path": "dialogs/link/link.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        * {\n            margin: 0;\n            padding: 0;\n            color: #838383;\n        }\n\n        table {\n            font-size: 12px;\n            margin: 10px;\n            line-height: 36px;\n            width: 100%;\n        }\n\n        .txt {\n            box-sizing: border-box;\n            width: 90%;\n            height: 30px;\n            line-height: 30px;\n            border: 1px solid #F2F2F2;\n            border-radius: 3px;\n            padding: 0 5px;\n            outline: none;\n        }\n    </style>\n</head>\n<body>\n<div style=\"padding:10px;\">\n    <table>\n        <tr>\n            <td><label for=\"text\"> <var id=\"lang_input_text\"></var></label></td>\n            <td><input class=\"txt\" id=\"text\" type=\"text\" disabled=\"true\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"href\"> <var id=\"lang_input_url\"></var></label></td>\n            <td><input class=\"txt\" id=\"href\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td><label for=\"title\"> <var id=\"lang_input_title\"></var></label></td>\n            <td><input class=\"txt\" id=\"title\" type=\"text\"/></td>\n        </tr>\n        <tr>\n            <td colspan=\"2\">\n                <label for=\"target\"><var id=\"lang_input_target\"></var></label>\n                <input id=\"target\" type=\"checkbox\"/>\n            </td>\n        </tr>\n        <tr>\n            <td colspan=\"2\" id=\"msg\"></td>\n        </tr>\n    </table>\n</div>\n<script type=\"text/javascript\">\n\n    editor.setOpt('allowLinkProtocols', ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:']);\n    var allowLinkProtocols = editor.getOpt('allowLinkProtocols');\n\n    var range = editor.selection.getRange(),\n        link = range.collapsed ? editor.queryCommandValue(\"link\") : editor.selection.getStart(),\n        url,\n        text = $G('text'),\n        rangeLink = domUtils.findParentByTagName(range.getCommonAncestor(), 'a', true),\n        orgText;\n\n    link = domUtils.findParentByTagName(link, \"a\", true);\n\n    if (link) {\n        url = utils.html(link.getAttribute('_href') || link.getAttribute('href', 2));\n\n        if (rangeLink === link && !link.getElementsByTagName('img').length) {\n            text.removeAttribute('disabled');\n            orgText = text.value = link[browser.ie ? 'innerText' : 'textContent'];\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    } else {\n        if (range.collapsed) {\n            text.removeAttribute('disabled');\n            text.value = '';\n        } else {\n            text.setAttribute('disabled', 'true');\n            text.value = lang.validLink;\n        }\n\n    }\n    $G(\"title\").value = url ? link.title : \"\";\n    $G(\"href\").value = url ? url : '';\n    $G(\"target\").checked = url && link.target == \"_blank\" ? true : false;\n    $focus($G(\"href\"));\n\n    function handleDialogOk() {\n        var href = $G('href').value.replace(/^\\s+|\\s+$/g, '');\n        if (href) {\n            if (!hrefStartWith(href, allowLinkProtocols)) {\n                href = \"http://\" + href;\n            }\n            var obj = {\n                'href': href,\n                'target': $G(\"target\").checked ? \"_blank\" : '_self',\n                'title': $G(\"title\").value.replace(/^\\s+|\\s+$/g, ''),\n                '_href': href\n            };\n            //修改链接内容的情况太特殊了，所以先做到这里了\n            //todo:情况多的时候，做到command里\n            if (orgText && text.value != orgText) {\n                link[browser.ie ? 'innerText' : 'textContent'] = obj.textValue = text.value;\n                range.selectNode(link).select()\n            }\n            if (range.collapsed) {\n                obj.textValue = text.value;\n            }\n            editor.execCommand('link', utils.clearEmptyAttrs(obj));\n            dialog.close();\n        }\n    }\n\n    dialog.onok = handleDialogOk;\n    $G('href').onkeydown = $G('title').onkeydown = function (evt) {\n        evt = evt || window.event;\n        if (evt.keyCode == 13) {\n            handleDialogOk();\n            return false;\n        }\n    };\n    $G('href').onblur = function () {\n        if (!hrefStartWith(this.value, allowLinkProtocols)) {\n            $G(\"msg\").innerHTML = \"<span style='color: red'>\" + lang.httpPrompt + \"</span>\";\n        } else {\n            $G(\"msg\").innerHTML = \"\";\n        }\n    };\n\n    function hrefStartWith(href, arr) {\n        href = href.replace(/^\\s+|\\s+$/g, '');\n        for (var i = 0, ai; ai = arr[i++];) {\n            if (href.indexOf(ai) == 0) {\n                return true;\n            }\n        }\n        return false;\n    }\n\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/preview/preview.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <style>\n        html, body {\n            height: 100%;\n            width: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview {\n            width: 100%;\n            height: 100%;\n            padding: 0;\n            margin: 0;\n        }\n\n        #preview * {\n            font-family: sans-serif;\n            font-size: 16px;\n        }\n    </style>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <script src=\"../../ueditor.parse.js?{timestamp}\"></script>\n    <title></title>\n</head>\n<body class=\"view\">\n<div id=\"preview\" style=\"margin:8px\">\n\n</div>\n</body>\n<script>\n    document.getElementById('preview').innerHTML = editor.getContent();\n    uParse('#preview', {\n        rootPath: '../../',\n        chartContainerHeight: 500\n    })\n    dialog.oncancel = function () {\n        document.getElementById('preview').innerHTML = '';\n    }\n</script>\n</html>\n"
  },
  {
    "path": "dialogs/scrawl/scrawl.css",
    "content": "/*common\n*/\nbody {\n    margin: 0;\n}\n\ntable {\n    width: 100%;\n}\n\ntable td {\n    padding: 2px 4px;\n    vertical-align: middle;\n}\n\na {\n    text-decoration: none;\n}\n\nem {\n    font-style: normal;\n}\n\n.border_style1 {\n    border: 1px solid #ccc;\n    border-radius: 5px;\n    box-shadow: 2px 2px 5px #d3d6da;\n}\n\n/*module\n*/\n.main {\n    margin: 8px;\n    overflow: hidden;\n}\n\n.hot {\n    float: left;\n    height: 335px;\n}\n\n.drawBoard {\n    position: relative;\n    cursor: crosshair;\n}\n\n.brushBorad {\n    position: absolute;\n    left: 0;\n    top: 0;\n    z-index: 998;\n}\n\n.picBoard {\n    border: none;\n    text-align: center;\n    line-height: 300px;\n    cursor: default;\n}\n\n.operateBar {\n    margin-top: 10px;\n    font-size: 12px;\n    text-align: center;\n}\n\n.operateBar span {\n    margin-left: 10px;\n}\n\n.drawToolbar {\n    float: right;\n    width: 110px;\n    height: 300px;\n    overflow: hidden;\n}\n\n.colorBar {\n    margin-top: 10px;\n    font-size: 12px;\n    text-align: center;\n}\n\n.colorBar a {\n    display: block;\n    width: 10px;\n    height: 10px;\n    border: 1px solid #1006F1;\n    border-radius: 3px;\n    box-shadow: 2px 2px 5px #d3d6da;\n    opacity: 0.3\n}\n\n.sectionBar {\n    margin-top: 15px;\n    font-size: 12px;\n    text-align: center;\n}\n\n.sectionBar a {\n    display: inline-block;\n    width: 10px;\n    height: 12px;\n    color: #888;\n    text-indent: -999px;\n    opacity: 0.3\n}\n\n.size1 {\n    background: url('images/size.png') 1px center no-repeat;\n}\n\n.size2 {\n    background: url('images/size.png') -10px center no-repeat;\n}\n\n.size3 {\n    background: url('images/size.png') -22px center no-repeat;\n}\n\n.size4 {\n    background: url('images/size.png') -35px center no-repeat;\n}\n\n.addImgH {\n    position: relative;\n}\n\n.addImgH_form {\n    position: absolute;\n    left: 18px;\n    top: -1px;\n    width: 75px;\n    height: 21px;\n    opacity: 0;\n    cursor: pointer;\n}\n\n.addImgH_form input {\n    width: 100%;\n}\n\n/*scrawl遮罩层\n*/\n.maskLayerNull {\n    display: none;\n}\n\n.maskLayer {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    opacity: 0.7;\n    background-color: #fff;\n    text-align: center;\n    font-weight: bold;\n    line-height: 300px;\n    z-index: 1000;\n}\n\n/*btn state\n*/\n.previousStepH .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/undoH.png');\n    cursor: pointer;\n}\n\n.previousStepH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n.previousStep .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/undo.png');\n    cursor: default;\n}\n\n.previousStep .text {\n    color: #ccc;\n    cursor: default;\n}\n\n.nextStepH .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/redoH.png');\n    cursor: pointer;\n}\n\n.nextStepH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n.nextStep .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/redo.png');\n    cursor: default;\n}\n\n.nextStep .text {\n    color: #ccc;\n    cursor: default;\n}\n\n.clearBoardH .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/emptyH.png');\n    cursor: pointer;\n}\n\n.clearBoardH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n.clearBoard .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/empty.png');\n    cursor: default;\n}\n\n.clearBoard .text {\n    color: #ccc;\n    cursor: default;\n}\n\n.scaleBoardH .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/scaleH.png');\n    cursor: pointer;\n}\n\n.scaleBoardH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n.scaleBoard .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/scale.png');\n    cursor: default;\n}\n\n.scaleBoard .text {\n    color: #ccc;\n    cursor: default;\n}\n\n.removeImgH .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/delimgH.png');\n    cursor: pointer;\n}\n\n.removeImgH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n.removeImg .icon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/delimg.png');\n    cursor: default;\n}\n\n.removeImg .text {\n    color: #ccc;\n    cursor: default;\n}\n\n.addImgH .icon {\n    vertical-align: top;\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/addimg.png')\n}\n\n.addImgH .text {\n    color: #888;\n    cursor: pointer;\n}\n\n/*icon\n*/\n.brushIcon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/brush.png')\n}\n\n.eraserIcon {\n    display: inline-block;\n    width: 16px;\n    height: 16px;\n    background-image: url('images/eraser.png')\n}\n\n\n"
  },
  {
    "path": "dialogs/scrawl/scrawl.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n    <meta name=\"robots\" content=\"noindex, nofollow\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"scrawl.css?{timestamp}\">\n</head>\n<body>\n<div class=\"main\" id=\"J_wrap\">\n    <div class=\"hot\">\n        <div class=\"drawBoard border_style1\">\n            <canvas id=\"J_brushBoard\" class=\"brushBorad\" width=\"360\" height=\"300\"></canvas>\n            <div id=\"J_picBoard\" class=\"picBoard\" style=\"width: 360px;height: 300px\"></div>\n        </div>\n        <div id=\"J_operateBar\" class=\"operateBar\">\n            <span id=\"J_previousStep\" class=\"previousStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_previousStep\"></var></em>\n            </span>\n            <span id=\"J_nextStep\" class=\"nextStep\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_nextsStep\"></var></em>\n            </span>\n            <span id=\"J_clearBoard\" class=\"clearBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_clear\"></var></em>\n            </span>\n            <span id=\"J_sacleBoard\" class=\"scaleBoard\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_ScalePic\"></var></em>\n            </span>\n        </div>\n    </div>\n    <div class=\"drawToolbar border_style1\">\n        <div id=\"J_colorBar\" class=\"colorBar\"></div>\n        <div id=\"J_brushBar\" class=\"sectionBar\">\n            <em class=\"brushIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div id=\"J_eraserBar\" class=\"sectionBar\">\n            <em class=\"eraserIcon\"></em>\n            <a href=\"javascript:void(0)\" class=\"size1\">1</a>\n            <a href=\"javascript:void(0)\" class=\"size2\">3</a>\n            <a href=\"javascript:void(0)\" class=\"size3\">5</a>\n            <a href=\"javascript:void(0)\" class=\"size4\">7</a>\n        </div>\n        <div class=\"sectionBar\">\n            <div id=\"J_addImg\" class=\"addImgH\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_addPic\"></var></em>\n                <form method=\"post\" id=\"fileForm\" enctype=\"multipart/form-data\" class=\"addImgH_form\" target=\"up\">\n                    <input type=\"file\" name=\"upfile\" id=\"J_imgTxt\"\n                           accept=\"image/gif,image/jpeg,image/png,image/jpg,image/bmp\"/>\n                </form>\n                <iframe name=\"up\" style=\"display: none\"></iframe>\n            </div>\n        </div>\n        <div class=\"sectionBar\">\n            <span id=\"J_removeImg\" class=\"removeImg\">\n                <em class=\"icon\"></em>\n                <em class=\"text\"><var id=\"lang_input_removePic\"></var></em>\n            </span>\n        </div>\n    </div>\n</div>\n<div id=\"J_maskLayer\" class=\"maskLayerNull\"></div>\n\n<script type=\"text/javascript\" src=\"scrawl.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    var settings = {\n        drawBrushSize: 3, //画笔初始大小\n        drawBrushColor: \"#4bacc6\", //画笔初始颜色\n        colorList: ['c00000', 'ff0000', 'ffc000', 'ffff00', '92d050', '00b050', '00b0f0', '0070c0', '002060', '7030a0', 'ffffff',\n            '000000', 'eeece1', '1f497d', '4f81bd', 'c0504d', '9bbb59', '8064a2', '4bacc6', 'f79646'], //画笔选择颜色\n        saveNum: 10  //撤销次数\n    };\n\n    var scrawlObj = new scrawl(settings);\n    scrawlObj.isCancelScrawl = false;\n\n    dialog.onok = function () {\n        exec(scrawlObj);\n        return false;\n    };\n    dialog.oncancel = function () {\n        scrawlObj.isCancelScrawl = true;\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/scrawl/scrawl.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-5-22\n * Time: 上午11:38\n * To change this template use File | Settings | File Templates.\n */\nvar scrawl = function (options) {\n    options && this.initOptions(options);\n};\n(function () {\n    var canvas = $G(\"J_brushBoard\"),\n        context = canvas.getContext('2d'),\n        drawStep = [], //undo redo存储\n        drawStepIndex = 0; //undo redo指针\n\n    scrawl.prototype = {\n        isScrawl: false, //是否涂鸦\n        brushWidth: -1, //画笔粗细\n        brushColor: \"\", //画笔颜色\n\n        initOptions: function (options) {\n            var me = this;\n            me.originalState(options);//初始页面状态\n            me._buildToolbarColor(options.colorList);//动态生成颜色选择集合\n\n            me._addBoardListener(options.saveNum);//添加画板处理\n            me._addOPerateListener(options.saveNum);//添加undo redo clearBoard处理\n            me._addColorBarListener();//添加颜色选择处理\n            me._addBrushBarListener();//添加画笔大小处理\n            me._addEraserBarListener();//添加橡皮大小处理\n            me._addAddImgListener();//添加增添背景图片处理\n            me._addRemoveImgListenter();//删除背景图片处理\n            me._addScalePicListenter();//添加缩放处理\n            me._addClearSelectionListenter();//添加清楚选中状态处理\n\n            me._originalColorSelect(options.drawBrushColor);//初始化颜色选中\n            me._originalBrushSelect(options.drawBrushSize);//初始化画笔选中\n            me._clearSelection();//清楚选中状态\n        },\n\n        originalState: function (options) {\n            var me = this;\n\n            me.brushWidth = options.drawBrushSize;//同步画笔粗细\n            me.brushColor = options.drawBrushColor;//同步画笔颜色\n\n            context.lineWidth = me.brushWidth;//初始画笔大小\n            context.strokeStyle = me.brushColor;//初始画笔颜色\n            context.fillStyle = \"transparent\";//初始画布背景颜色\n            context.lineCap = \"round\";//去除锯齿\n            context.fill();\n        },\n        _buildToolbarColor: function (colorList) {\n            var tmp = null, arr = [];\n            arr.push(\"<table id='J_colorList'>\");\n            for (var i = 0, color; color = colorList[i++];) {\n                if ((i - 1) % 5 == 0) {\n                    if (i != 1) {\n                        arr.push(\"</tr>\");\n                    }\n                    arr.push(\"<tr>\");\n                }\n                tmp = '#' + color;\n                arr.push(\"<td><a title='\" + tmp + \"' href='javascript:void(0)' style='background-color:\" + tmp + \"'></a></td>\");\n            }\n            arr.push(\"</tr></table>\");\n            $G(\"J_colorBar\").innerHTML = arr.join(\"\");\n        },\n\n        _addBoardListener: function (saveNum) {\n            var me = this,\n                margin = 0,\n                startX = -1,\n                startY = -1,\n                isMouseDown = false,\n                isMouseMove = false,\n                isMouseUp = false,\n                buttonPress = 0, button, flag = '';\n\n            margin = parseInt(domUtils.getComputedStyle($G(\"J_wrap\"), \"margin-left\"));\n            drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n            drawStepIndex += 1;\n\n            domUtils.on(canvas, [\"mousedown\", \"mousemove\", \"mouseup\", \"mouseout\"], function (e) {\n                button = browser.webkit ? e.which : buttonPress;\n                switch (e.type) {\n                    case 'mousedown':\n                        buttonPress = 1;\n                        flag = 1;\n                        isMouseDown = true;\n                        isMouseUp = false;\n                        isMouseMove = false;\n                        me.isScrawl = true;\n                        startX = e.clientX - margin;//10为外边距总和\n                        startY = e.clientY - margin;\n                        context.beginPath();\n                        break;\n                    case 'mousemove' :\n                        if (!flag && button == 0) {\n                            return;\n                        }\n                        if (!flag && button) {\n                            startX = e.clientX - margin;//10为外边距总和\n                            startY = e.clientY - margin;\n                            context.beginPath();\n                            flag = 1;\n                        }\n                        if (isMouseUp || !isMouseDown) {\n                            return;\n                        }\n                        var endX = e.clientX - margin,\n                            endY = e.clientY - margin;\n\n                        context.moveTo(startX, startY);\n                        context.lineTo(endX, endY);\n                        context.stroke();\n                        startX = endX;\n                        startY = endY;\n                        isMouseMove = true;\n                        break;\n                    case 'mouseup':\n                        buttonPress = 0;\n                        if (!isMouseDown) return;\n                        if (!isMouseMove) {\n                            context.arc(startX, startY, context.lineWidth, 0, Math.PI * 2, false);\n                            context.fillStyle = context.strokeStyle;\n                            context.fill();\n                        }\n                        context.closePath();\n                        me._saveOPerate(saveNum);\n                        isMouseDown = false;\n                        isMouseMove = false;\n                        isMouseUp = true;\n                        startX = -1;\n                        startY = -1;\n                        break;\n                    case 'mouseout':\n                        flag = '';\n                        buttonPress = 0;\n                        if (button == 1) return;\n                        context.closePath();\n                        break;\n                }\n            });\n        },\n        _addOPerateListener: function (saveNum) {\n            var me = this;\n            domUtils.on($G(\"J_previousStep\"), \"click\", function () {\n                if (drawStepIndex > 1) {\n                    drawStepIndex -= 1;\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex - 1], 0, 0);\n                    me.btn2Highlight(\"J_nextStep\");\n                    drawStepIndex == 1 && me.btn2disable(\"J_previousStep\");\n                }\n            });\n            domUtils.on($G(\"J_nextStep\"), \"click\", function () {\n                if (drawStepIndex > 0 && drawStepIndex < drawStep.length) {\n                    context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                    context.putImageData(drawStep[drawStepIndex], 0, 0);\n                    drawStepIndex += 1;\n                    me.btn2Highlight(\"J_previousStep\");\n                    drawStepIndex == drawStep.length && me.btn2disable(\"J_nextStep\");\n                }\n            });\n            domUtils.on($G(\"J_clearBoard\"), \"click\", function () {\n                context.clearRect(0, 0, context.canvas.width, context.canvas.height);\n                drawStep = [];\n                me._saveOPerate(saveNum);\n                drawStepIndex = 1;\n                me.isScrawl = false;\n                me.btn2disable(\"J_previousStep\");\n                me.btn2disable(\"J_nextStep\");\n                me.btn2disable(\"J_clearBoard\");\n            });\n        },\n        _addColorBarListener: function () {\n            var me = this;\n            domUtils.on($G(\"J_colorBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    color = target.title;\n                if (!!color) {\n                    me._addColorSelect(target);\n\n                    me.brushColor = color;\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = me.brushWidth;\n                    context.strokeStyle = color;\n                }\n            });\n        },\n        _addBrushBarListener: function () {\n            var me = this;\n            domUtils.on($G(\"J_brushBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.globalCompositeOperation = \"source-over\";\n                    context.lineWidth = parseInt(size);\n                    context.strokeStyle = me.brushColor;\n                    me.brushWidth = context.lineWidth;\n                }\n            });\n        },\n        _addEraserBarListener: function () {\n            var me = this;\n            domUtils.on($G(\"J_eraserBar\"), \"click\", function (e) {\n                var target = me.getTarget(e),\n                    size = browser.ie ? target.innerText : target.text;\n                if (!!size) {\n                    me._addBESelect(target);\n\n                    context.lineWidth = parseInt(size);\n                    context.globalCompositeOperation = \"destination-out\";\n                    context.strokeStyle = \"#FFF\";\n                }\n            });\n        },\n        _addAddImgListener: function () {\n            var file = $G(\"J_imgTxt\");\n            if (!window.FileReader) {\n                $G(\"J_addImg\").style.display = 'none';\n                $G(\"J_removeImg\").style.display = 'none';\n                $G(\"J_sacleBoard\").style.display = 'none';\n            }\n            domUtils.on(file, \"change\", function (e) {\n                var frm = file.parentNode;\n                addMaskLayer(lang.backgroundUploading);\n\n                var target = e.target || e.srcElement,\n                    reader = new FileReader();\n                reader.onload = function (evt) {\n                    var target = evt.target || evt.srcElement;\n                    ue_callback(target.result, 'SUCCESS');\n                };\n                reader.readAsDataURL(target.files[0]);\n                frm.reset();\n            });\n        },\n        _addRemoveImgListenter: function () {\n            var me = this;\n            domUtils.on($G(\"J_removeImg\"), \"click\", function () {\n                $G(\"J_picBoard\").innerHTML = \"\";\n                me.btn2disable(\"J_removeImg\");\n                me.btn2disable(\"J_sacleBoard\");\n            });\n        },\n        _addScalePicListenter: function () {\n            domUtils.on($G(\"J_sacleBoard\"), \"click\", function () {\n                var picBoard = $G(\"J_picBoard\"),\n                    scaleCon = $G(\"J_scaleCon\"),\n                    img = picBoard.children[0];\n\n                if (img) {\n                    if (!scaleCon) {\n                        picBoard.style.cssText = \"position:relative;z-index:999;\" + picBoard.style.cssText;\n                        img.style.cssText = \"position: absolute;top:\" + (canvas.height - img.height) / 2 + \"px;left:\" + (canvas.width - img.width) / 2 + \"px;\";\n                        var scale = new ScaleBoy();\n                        picBoard.appendChild(scale.init());\n                        scale.startScale(img);\n                    } else {\n                        if (scaleCon.style.visibility == \"visible\") {\n                            scaleCon.style.visibility = \"hidden\";\n                            picBoard.style.position = \"\";\n                            picBoard.style.zIndex = \"\";\n                        } else {\n                            scaleCon.style.visibility = \"visible\";\n                            picBoard.style.cssText += \"position:relative;z-index:999\";\n                        }\n                    }\n                }\n            });\n        },\n        _addClearSelectionListenter: function () {\n            var doc = document;\n            domUtils.on(doc, 'mousemove', function (e) {\n                if (browser.ie && browser.version < 11)\n                    doc.selection.clear();\n                else\n                    window.getSelection().removeAllRanges();\n            });\n        },\n        _clearSelection: function () {\n            var list = [\"J_operateBar\", \"J_colorBar\", \"J_brushBar\", \"J_eraserBar\", \"J_picBoard\"];\n            for (var i = 0, group; group = list[i++];) {\n                domUtils.unSelectable($G(group));\n            }\n        },\n\n        _saveOPerate: function (saveNum) {\n            var me = this;\n            if (drawStep.length <= saveNum) {\n                if (drawStepIndex < drawStep.length) {\n                    me.btn2disable(\"J_nextStep\");\n                    drawStep.splice(drawStepIndex);\n                }\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            } else {\n                drawStep.shift();\n                drawStep.push(context.getImageData(0, 0, context.canvas.width, context.canvas.height));\n                drawStepIndex = drawStep.length;\n            }\n            me.btn2Highlight(\"J_previousStep\");\n            me.btn2Highlight(\"J_clearBoard\");\n        },\n\n        _originalColorSelect: function (title) {\n            var colorList = $G(\"J_colorList\").getElementsByTagName(\"td\");\n            for (var j = 0, cell; cell = colorList[j++];) {\n                if (cell.children[0].title.toLowerCase() == title) {\n                    cell.children[0].style.opacity = 1;\n                }\n            }\n        },\n        _originalBrushSelect: function (text) {\n            var brushList = $G(\"J_brushBar\").children;\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == text) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n        },\n        _addColorSelect: function (target) {\n            var me = this,\n                colorList = $G(\"J_colorList\").getElementsByTagName(\"td\"),\n                eraserList = $G(\"J_eraserBar\").children,\n                brushList = $G(\"J_brushBar\").children;\n\n            for (var i = 0, cell; cell = colorList[i++];) {\n                cell.children[0].style.opacity = 0.3;\n            }\n            for (var k = 0, ele; ele = brushList[k++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                    var size = browser.ie ? ele.innerText : ele.text;\n                    if (size.toLowerCase() == this.brushWidth) {\n                        ele.style.opacity = 1;\n                    }\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        _addBESelect: function (target) {\n            var brushList = $G(\"J_brushBar\").children;\n            var eraserList = $G(\"J_eraserBar\").children;\n\n            for (var i = 0, ele; ele = brushList[i++];) {\n                if (ele.tagName.toLowerCase() == \"a\") {\n                    ele.style.opacity = 0.3;\n                }\n            }\n            for (var j = 0, node; node = eraserList[j++];) {\n                if (node.tagName.toLowerCase() == \"a\") {\n                    node.style.opacity = 0.3;\n                }\n            }\n\n            target.style.opacity = 1;\n            target.blur();\n        },\n        getCanvasData: function () {\n            var picContainer = $G(\"J_picBoard\"),\n                img = picContainer.children[0];\n            if (img) {\n                var x, y;\n                if (img.style.position == \"absolute\") {\n                    x = parseInt(img.style.left);\n                    y = parseInt(img.style.top);\n                } else {\n                    x = (picContainer.offsetWidth - img.width) / 2;\n                    y = (picContainer.offsetHeight - img.height) / 2;\n                }\n                context.globalCompositeOperation = \"destination-over\";\n                context.drawImage(img, x, y, img.width, img.height);\n            } else {\n                context.globalCompositeOperation = \"destination-atop\";\n                context.fillStyle = \"#fff\";//重置画布背景白色\n                context.fillRect(0, 0, canvas.width, canvas.height);\n            }\n            try {\n                return canvas.toDataURL(\"image/png\").substring(22);\n            } catch (e) {\n                return \"\";\n            }\n        },\n        btn2Highlight: function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") == -1 && (cur.className += \"H\");\n        },\n        btn2disable: function (id) {\n            var cur = $G(id);\n            cur.className.indexOf(\"H\") != -1 && (cur.className = cur.className.replace(\"H\", \"\"));\n        },\n        getTarget: function (evt) {\n            return evt.target || evt.srcElement;\n        }\n    };\n})();\n\nvar ScaleBoy = function () {\n    this.dom = null;\n    this.scalingElement = null;\n};\n(function () {\n    function _appendStyle() {\n        var doc = document,\n            head = doc.getElementsByTagName('head')[0],\n            style = doc.createElement('style'),\n            cssText = '.scale{visibility:hidden;cursor:move;position:absolute;left:0;top:0;width:100px;height:50px;background-color:#fff;font-size:0;line-height:0;opacity:.4;filter:Alpha(opacity=40);}'\n                + '.scale span{position:absolute;left:0;top:0;width:6px;height:6px;background-color:#006DAE;}'\n                + '.scale .hand0, .scale .hand7{cursor:nw-resize;}'\n                + '.scale .hand1, .scale .hand6{left:50%;margin-left:-3px;cursor:n-resize;}'\n                + '.scale .hand2, .scale .hand4, .scale .hand7{left:100%;margin-left:-6px;}'\n                + '.scale .hand3, .scale .hand4{top:50%;margin-top:-3px;cursor:w-resize;}'\n                + '.scale .hand5, .scale .hand6, .scale .hand7{margin-top:-6px;top:100%;}'\n                + '.scale .hand2, .scale .hand5{cursor:ne-resize;}';\n        style.type = 'text/css';\n\n        try {\n            style.appendChild(doc.createTextNode(cssText));\n        } catch (e) {\n            style.styleSheet.cssText = cssText;\n        }\n        head.appendChild(style);\n    }\n\n    function _getDom() {\n        var doc = document,\n            hand,\n            arr = [],\n            scale = doc.createElement('div');\n\n        scale.id = 'J_scaleCon';\n        scale.className = 'scale';\n        for (var i = 0; i < 8; i++) {\n            arr.push(\"<span class='hand\" + i + \"'></span>\");\n        }\n        scale.innerHTML = arr.join(\"\");\n        return scale;\n    }\n\n    var rect = [\n        //[left, top, width, height]\n        [1, 1, -1, -1],\n        [0, 1, 0, -1],\n        [0, 1, 1, -1],\n        [1, 0, -1, 0],\n        [0, 0, 1, 0],\n        [1, 0, -1, 1],\n        [0, 0, 0, 1],\n        [0, 0, 1, 1]\n    ];\n    ScaleBoy.prototype = {\n        init: function () {\n            _appendStyle();\n            var me = this,\n                scale = me.dom = _getDom();\n\n            me.scaleMousemove.fp = me;\n            domUtils.on(scale, 'mousedown', function (e) {\n                var target = e.target || e.srcElement;\n                me.start = {x: e.clientX, y: e.clientY};\n                if (target.className.indexOf('hand') != -1) {\n                    me.dir = target.className.replace('hand', '');\n                }\n                domUtils.on(document.body, 'mousemove', me.scaleMousemove);\n                e.stopPropagation ? e.stopPropagation() : e.cancelBubble = true;\n            });\n            domUtils.on(document.body, 'mouseup', function (e) {\n                if (me.start) {\n                    domUtils.un(document.body, 'mousemove', me.scaleMousemove);\n                    if (me.moved) {\n                        me.updateScaledElement({\n                            position: {x: scale.style.left, y: scale.style.top},\n                            size: {w: scale.style.width, h: scale.style.height}\n                        });\n                    }\n                    delete me.start;\n                    delete me.moved;\n                    delete me.dir;\n                }\n            });\n            return scale;\n        },\n        startScale: function (objElement) {\n            var me = this, Idom = me.dom;\n\n            Idom.style.cssText = 'visibility:visible;top:' + objElement.style.top + ';left:' + objElement.style.left + ';width:' + objElement.offsetWidth + 'px;height:' + objElement.offsetHeight + 'px;';\n            me.scalingElement = objElement;\n        },\n        updateScaledElement: function (objStyle) {\n            var cur = this.scalingElement,\n                pos = objStyle.position,\n                size = objStyle.size;\n            if (pos) {\n                typeof pos.x != 'undefined' && (cur.style.left = pos.x);\n                typeof pos.y != 'undefined' && (cur.style.top = pos.y);\n            }\n            if (size) {\n                size.w && (cur.style.width = size.w);\n                size.h && (cur.style.height = size.h);\n            }\n        },\n        updateStyleByDir: function (dir, offset) {\n            var me = this,\n                dom = me.dom, tmp;\n\n            rect['def'] = [1, 1, 0, 0];\n            if (rect[dir][0] != 0) {\n                tmp = parseInt(dom.style.left) + offset.x;\n                dom.style.left = me._validScaledProp('left', tmp) + 'px';\n            }\n            if (rect[dir][1] != 0) {\n                tmp = parseInt(dom.style.top) + offset.y;\n                dom.style.top = me._validScaledProp('top', tmp) + 'px';\n            }\n            if (rect[dir][2] != 0) {\n                tmp = dom.clientWidth + rect[dir][2] * offset.x;\n                dom.style.width = me._validScaledProp('width', tmp) + 'px';\n            }\n            if (rect[dir][3] != 0) {\n                tmp = dom.clientHeight + rect[dir][3] * offset.y;\n                dom.style.height = me._validScaledProp('height', tmp) + 'px';\n            }\n            if (dir === 'def') {\n                me.updateScaledElement({position: {x: dom.style.left, y: dom.style.top}});\n            }\n        },\n        scaleMousemove: function (e) {\n            var me = arguments.callee.fp,\n                start = me.start,\n                dir = me.dir || 'def',\n                offset = {x: e.clientX - start.x, y: e.clientY - start.y};\n\n            me.updateStyleByDir(dir, offset);\n            arguments.callee.fp.start = {x: e.clientX, y: e.clientY};\n            arguments.callee.fp.moved = 1;\n        },\n        _validScaledProp: function (prop, value) {\n            var ele = this.dom,\n                wrap = $G(\"J_picBoard\");\n\n            value = isNaN(value) ? 0 : value;\n            switch (prop) {\n                case 'left':\n                    return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;\n                case 'top':\n                    return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;\n                case 'width':\n                    return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;\n                case 'height':\n                    return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;\n            }\n        }\n    };\n})();\n\n//后台回调\nfunction ue_callback(url, state) {\n    var doc = document,\n        picBorard = $G(\"J_picBoard\"),\n        img = doc.createElement(\"img\");\n\n    //图片缩放\n    function scale(img, max, oWidth, oHeight) {\n        var width = 0, height = 0, percent, ow = img.width || oWidth, oh = img.height || oHeight;\n        if (ow > max || oh > max) {\n            if (ow >= oh) {\n                if (width = ow - max) {\n                    percent = (width / ow).toFixed(2);\n                    img.height = oh - oh * percent;\n                    img.width = max;\n                }\n            } else {\n                if (height = oh - max) {\n                    percent = (height / oh).toFixed(2);\n                    img.width = ow - ow * percent;\n                    img.height = max;\n                }\n            }\n        }\n    }\n\n    //移除遮罩层\n    removeMaskLayer();\n    //状态响应\n    if (state == \"SUCCESS\") {\n        picBorard.innerHTML = \"\";\n        img.onload = function () {\n            scale(this, 300);\n            picBorard.appendChild(img);\n\n            var obj = new scrawl();\n            obj.btn2Highlight(\"J_removeImg\");\n            //trace 2457\n            obj.btn2Highlight(\"J_sacleBoard\");\n        };\n        img.src = url;\n    } else {\n        alert(state);\n    }\n}\n\n//去掉遮罩层\nfunction removeMaskLayer() {\n    var maskLayer = $G(\"J_maskLayer\");\n    maskLayer.className = \"maskLayerNull\";\n    maskLayer.innerHTML = \"\";\n    dialog.buttons[0].setDisabled(false);\n}\n\n//添加遮罩层\nfunction addMaskLayer(html) {\n    var maskLayer = $G(\"J_maskLayer\");\n    dialog.buttons[0].setDisabled(true);\n    maskLayer.className = \"maskLayer\";\n    maskLayer.innerHTML = html;\n}\n\n//执行确认按钮方法\nfunction exec(scrawlObj) {\n    if (scrawlObj.isScrawl) {\n        addMaskLayer(lang.scrawlUpLoading);\n        var base64 = scrawlObj.getCanvasData();\n        if (!!base64) {\n\n            var successHandler = function (res) {\n                var imgObj = {},\n                    url = editor.options.scrawlUrlPrefix + res.url;\n                imgObj.src = url;\n                imgObj._src = url;\n                imgObj.alt = res.original || '';\n                editor.execCommand(\"insertImage\", imgObj);\n                dialog.close();\n                // 触发上传涂鸦事件\n                editor.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'scrawl'\n                });\n            };\n\n            if(editor.getOpt('uploadServiceEnable')) {\n                var file = utils.base64toBlob(base64, 'image/png');\n                editor.getOpt('uploadServiceUpload')('image', file, {\n                    success: function( res ) {\n                        if (!scrawlObj.isCancelScrawl) {\n                            successHandler(res);\n                        }\n                    },\n                    error: function( err ) {\n                        alert(lang.imageError + ' : '+err);\n                        dialog.close();\n                    },\n                    progress: function( percent ) {\n\n                    }\n                }, {\n                    from: 'scrawl'\n                });\n                return;\n            }\n\n            var options = {\n                timeout: 100000,\n                headers: editor.options.serverHeaders || {},\n                onsuccess: function (xhr) {\n                    if (!scrawlObj.isCancelScrawl) {\n                        var responseObj;\n                        responseObj = eval(\"(\" + xhr.responseText + \")\");\n                        if (responseObj.state === \"SUCCESS\") {\n                            successHandler(responseObj);\n                        } else {\n                            alert(responseObj.state);\n                        }\n                    }\n                },\n                onerror: function () {\n                    alert(lang.imageError);\n                    dialog.close();\n                }\n            };\n            options[editor.getOpt('scrawlFieldName')] = base64;\n\n            var actionUrl = editor.getActionUrl(editor.getOpt('scrawlActionName')),\n                params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?' : '&') + params);\n            ajax.request(url, options);\n        }\n    } else {\n        addMaskLayer(lang.noScarwl + \"&nbsp;&nbsp;&nbsp;<input type='button' value='\" + lang.continueBtn + \"'  onclick='removeMaskLayer()'/>\");\n    }\n}\n\n"
  },
  {
    "path": "dialogs/searchreplace/searchreplace.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta content=\"text/html; charset=utf-8\" http-equiv=\"Content-Type\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .warpper {\n            position: relative;\n            width: 380px;\n            height: 100%;\n            margin: 10px auto;\n        }\n\n        .tabbody {\n            height: 160px;\n        }\n\n        .tabbody table {\n            width: 100%;\n            border-collapse: separate;\n            border-spacing: 3px;\n            line-height: 36px;\n        }\n\n        .tabbody .panel {\n            width: 373px;\n            height: 100%;\n            padding-left: 5px;\n            position: absolute;\n            background-color: #fff;\n        }\n\n        .tabbody input.int {\n            width: 190px;\n            height: 30px;\n            border: 1px solid #F2F2F2;\n            line-height: 21px;\n            border-radius: 3px;\n            outline: none;\n            padding: 0 5px;\n        }\n\n        .tabbody input.btn {\n            text-align: center;\n            line-height: 28px;\n            text-decoration: none;\n            height: 30px;\n            border: 1px solid #ccc;\n            background: #FFF;\n            border-radius: 3px;\n            padding: 0 5px;\n            font-size: 12px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div class=\"warpper\" id=\"searchtab\">\n    <div id=\"head\" class=\"tabhead\">\n        <span tabsrc=\"find\" class=\"focus\"><var id=\"lang_tab_search\"></var></span>\n        <span tabsrc=\"replace\"><var id=\"lang_tab_replace\"></var></span>\n    </div>\n    <div class=\"tabbody\">\n        <div class=\"panel\" id=\"find\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search1\"></var>:</td>\n                    <td><input id=\"findtxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_case_sensitive1\"></var></td>\n                    <td>\n                        <input id=\"matchCase\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextFindBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preFindBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"search-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n        <div class=\"panel\" id=\"replace\">\n            <table>\n                <tr>\n                    <td width=\"80\"><var id=\"lang_search2\"></var>:</td>\n                    <td><input id=\"findtxt1\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <!--<tr>-->\n\n                <!--<td colspan=\"2\"><span style=\"color:red\"><var id=\"lang_searchReg1\"></var></span></td>-->\n                <!--</tr>-->\n                <tr>\n                    <td><var id=\"lang_replace\"></var>:</td>\n                    <td><input id=\"replacetxt\" type=\"text\" class=\"int\"/></td>\n                </tr>\n                <tr>\n                    <td><var id=\"lang_case_sensitive2\"></var></td>\n                    <td>\n                        <input id=\"matchCase1\" type=\"checkbox\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <input id=\"nextReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"preReplaceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceBtn\" type=\"button\" class=\"btn\"/>\n                        <input id=\"repalceAllBtn\" type=\"button\" class=\"btn\"/>\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        &nbsp;\n                    </td>\n                </tr>\n                <tr>\n                    <td colspan=\"2\">\n                        <span id=\"replace-msg\" style=\"color:red\"></span>\n                    </td>\n                </tr>\n            </table>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"searchreplace.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/searchreplace/searchreplace.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午12:29\n * To change this template use File | Settings | File Templates.\n */\n\n//清空上次查选的痕迹\neditor.firstForSR = 0;\neditor.currentRangeForSR = null;\n\n//给tab注册切换事件\n/**\n * tab点击处理事件\n * @param tabHeads\n * @param tabBodys\n * @param obj\n */\nfunction clickHandler(tabHeads, tabBodys, obj) {\n    //head样式更改\n    for (var k = 0, len = tabHeads.length; k < len; k++) {\n        tabHeads[k].className = \"\";\n    }\n    obj.className = \"focus\";\n    //body显隐\n    var tabSrc = obj.getAttribute(\"tabSrc\");\n    for (var j = 0, length = tabBodys.length; j < length; j++) {\n        var body = tabBodys[j],\n            id = body.getAttribute(\"id\");\n        if (id != tabSrc) {\n            body.style.zIndex = 1;\n        } else {\n            body.style.zIndex = 200;\n        }\n    }\n\n}\n\n/**\n * TAB切换\n * @param tabParentId  tab的父节点ID或者对象本身\n */\nfunction switchTab(tabParentId) {\n    var tabElements = $G(tabParentId).children,\n        tabHeads = tabElements[0].children,\n        tabBodys = tabElements[1].children;\n\n    for (var i = 0, length = tabHeads.length; i < length; i++) {\n        var head = tabHeads[i];\n        if (head.className === \"focus\") clickHandler(tabHeads, tabBodys, head);\n        head.onclick = function () {\n            clickHandler(tabHeads, tabBodys, this);\n        }\n    }\n}\n\n$G('searchtab').onmousedown = function () {\n    $G('search-msg').innerHTML = '';\n    $G('replace-msg').innerHTML = ''\n}\n\n//是否区分大小写\nfunction getMatchCase(id) {\n    return $G(id).checked ? true : false;\n}\n\n//查找\n$G(\"nextFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        dir: 1,\n        casesensitive: getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        var bk = editor.selection.getRange().createBookmark();\n        $G('search-msg').innerHTML = lang.getEnd;\n        editor.selection.getRange().moveToBookmark(bk).select();\n\n\n    }\n};\n$G(\"nextReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        dir: 1,\n        casesensitive: getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n$G(\"preFindBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        dir: -1,\n        casesensitive: getMatchCase(\"matchCase\")\n    };\n    if (!frCommond(obj)) {\n        $G('search-msg').innerHTML = lang.getStart;\n    }\n};\n$G(\"preReplaceBtn\").onclick = function (txt, dir, mcase) {\n    var findtxt = $G(\"findtxt1\").value, obj;\n    if (!findtxt) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        dir: -1,\n        casesensitive: getMatchCase(\"matchCase1\")\n    };\n    frCommond(obj);\n};\n//替换\n$G(\"repalceBtn\").onclick = function () {\n    editor.trigger('clearLastSearchResult');\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        dir: 1,\n        casesensitive: getMatchCase(\"matchCase1\"),\n        replaceStr: replacetxt\n    };\n    frCommond(obj);\n};\n//全部替换\n$G(\"repalceAllBtn\").onclick = function () {\n    var findtxt = $G(\"findtxt1\").value.replace(/^\\s|\\s$/g, \"\"), obj,\n        replacetxt = $G(\"replacetxt\").value.replace(/^\\s|\\s$/g, \"\");\n    if (!findtxt) {\n        return false;\n    }\n    if (findtxt == replacetxt || (!getMatchCase(\"matchCase1\") && findtxt.toLowerCase() == replacetxt.toLowerCase())) {\n        return false;\n    }\n    obj = {\n        searchStr: findtxt,\n        casesensitive: getMatchCase(\"matchCase1\"),\n        replaceStr: replacetxt,\n        all: true\n    };\n    var num = frCommond(obj);\n    if (num) {\n        $G('replace-msg').innerHTML = lang.countMsg.replace(\"{#count}\", num);\n    }\n};\n//执行\nvar frCommond = function (obj) {\n    return editor.execCommand(\"searchreplace\", obj);\n};\nswitchTab(\"searchtab\");\n\n\ndialog.onclose = function () {\n    editor.trigger('clearLastSearchResult')\n};\n"
  },
  {
    "path": "dialogs/spechars/spechars.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        html, body {\n            overflow: hidden;\n        }\n\n        #specharsTab {\n            width: 97%;\n            margin: 10px auto;\n            zoom: 1;\n            position: relative\n        }\n\n        .tabbody {\n            height: 447px;\n        }\n\n        .tabbody span {\n            margin: 5px 3px;\n            text-align: center;\n            display: inline-block;\n            width: 40px;\n            height: 16px;\n            line-height: 16px;\n            cursor: pointer;\n        }\n    </style>\n</head>\n<body>\n<div id=\"specharsTab\">\n    <div id=\"tabHeads\" class=\"tabhead\"></div>\n    <div id=\"tabBodys\" class=\"tabbody\"></div>\n</div>\n<script type=\"text/javascript\" src=\"spechars.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/spechars/spechars.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-9-26\n * Time: 下午1:09\n * To change this template use File | Settings | File Templates.\n */\nvar charsContent = [\n    {\n        name: \"tsfh\",\n        title: lang.tsfh,\n        content: toArray(\"、,。,·,ˉ,ˇ,¨,〃,々,—,～,‖,…,‘,’,“,”,〔,〕,〈,〉,《,》,「,」,『,』,〖,〗,【,】,±,×,÷,∶,∧,∨,∑,∏,∪,∩,∈,∷,√,⊥,∥,∠,⌒,⊙,∫,∮,≡,≌,≈,∽,∝,≠,≮,≯,≤,≥,∞,∵,∴,♂,♀,°,′,″,℃,＄,¤,￠,￡,‰,§,№,☆,★,○,●,◎,◇,◆,□,■,△,▲,※,→,←,↑,↓,〓,〡,〢,〣,〤,〥,〦,〧,〨,〩,㊣,㎎,㎏,㎜,㎝,㎞,㎡,㏄,㏎,㏑,㏒,㏕,︰,￢,￤,℡,ˊ,ˋ,˙,–,―,‥,‵,℅,℉,↖,↗,↘,↙,∕,∟,∣,≒,≦,≧,⊿,═,║,╒,╓,╔,╕,╖,╗,╘,╙,╚,╛,╜,╝,╞,╟,╠,╡,╢,╣,╤,╥,╦,╧,╨,╩,╪,╫,╬,╭,╮,╯,╰,╱,╲,╳,▁,▂,▃,▄,▅,▆,▇,�,█,▉,▊,▋,▌,▍,▎,▏,▓,▔,▕,▼,▽,◢,◣,◤,◥,☉,⊕,〒,〝,〞\")\n    },\n    {name: \"lmsz\", title: lang.lmsz, content: toArray(\"ⅰ,ⅱ,ⅲ,ⅳ,ⅴ,ⅵ,ⅶ,ⅷ,ⅸ,ⅹ,Ⅰ,Ⅱ,Ⅲ,Ⅳ,Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ,Ⅻ\")},\n    {\n        name: \"szfh\",\n        title: lang.szfh,\n        content: toArray(\"⒈,⒉,⒊,⒋,⒌,⒍,⒎,⒏,⒐,⒑,⒒,⒓,⒔,⒕,⒖,⒗,⒘,⒙,⒚,⒛,⑴,⑵,⑶,⑷,⑸,⑹,⑺,⑻,⑼,⑽,⑾,⑿,⒀,⒁,⒂,⒃,⒄,⒅,⒆,⒇,①,②,③,④,⑤,⑥,⑦,⑧,⑨,⑩,㈠,㈡,㈢,㈣,㈤,㈥,㈦,㈧,㈨,㈩\")\n    },\n    {\n        name: \"rwfh\",\n        title: lang.rwfh,\n        content: toArray(\"ぁ,あ,ぃ,い,ぅ,う,ぇ,え,ぉ,お,か,が,き,ぎ,く,ぐ,け,げ,こ,ご,さ,ざ,し,じ,す,ず,せ,ぜ,そ,ぞ,た,だ,ち,ぢ,っ,つ,づ,て,で,と,ど,な,に,ぬ,ね,の,は,ば,ぱ,ひ,び,ぴ,ふ,ぶ,ぷ,へ,べ,ぺ,ほ,ぼ,ぽ,ま,み,む,め,も,ゃ,や,ゅ,ゆ,ょ,よ,ら,り,る,れ,ろ,ゎ,わ,ゐ,ゑ,を,ん,ァ,ア,ィ,イ,ゥ,ウ,ェ,エ,ォ,オ,カ,ガ,キ,ギ,ク,グ,ケ,ゲ,コ,ゴ,サ,ザ,シ,ジ,ス,ズ,セ,ゼ,ソ,ゾ,タ,ダ,チ,ヂ,ッ,ツ,ヅ,テ,デ,ト,ド,ナ,ニ,ヌ,ネ,ノ,ハ,バ,パ,ヒ,ビ,ピ,フ,ブ,プ,ヘ,ベ,ペ,ホ,ボ,ポ,マ,ミ,ム,メ,モ,ャ,ヤ,ュ,ユ,ョ,ヨ,ラ,リ,ル,レ,ロ,ヮ,ワ,ヰ,ヱ,ヲ,ン,ヴ,ヵ,ヶ\")\n    },\n    {\n        name: \"xlzm\",\n        title: lang.xlzm,\n        content: toArray(\"Α,Β,Γ,Δ,Ε,Ζ,Η,Θ,Ι,Κ,Λ,Μ,Ν,Ξ,Ο,Π,Ρ,Σ,Τ,Υ,Φ,Χ,Ψ,Ω,α,β,γ,δ,ε,ζ,η,θ,ι,κ,λ,μ,ν,ξ,ο,π,ρ,σ,τ,υ,φ,χ,ψ,ω\")\n    },\n    {\n        name: \"ewzm\",\n        title: lang.ewzm,\n        content: toArray(\"А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я\")\n    },\n    {name: \"pyzm\", title: lang.pyzm, content: toArray(\"ā,á,ǎ,à,ē,é,ě,è,ī,í,ǐ,ì,ō,ó,ǒ,ò,ū,ú,ǔ,ù,ǖ,ǘ,ǚ,ǜ,ü\")},\n    {\n        name: \"yyyb\",\n        title: lang.yyyb,\n        content: toArray(\"i:,i,e,æ,ʌ,ə:,ə,u:,u,ɔ:,ɔ,a:,ei,ai,ɔi,əu,au,iə,εə,uə,p,t,k,b,d,g,f,s,ʃ,θ,h,v,z,ʒ,ð,tʃ,tr,ts,dʒ,dr,dz,m,n,ŋ,l,r,w,j,\")\n    },\n    {\n        name: \"zyzf\",\n        title: lang.zyzf,\n        content: toArray(\"ㄅ,ㄆ,ㄇ,ㄈ,ㄉ,ㄊ,ㄋ,ㄌ,ㄍ,ㄎ,ㄏ,ㄐ,ㄑ,ㄒ,ㄓ,ㄔ,ㄕ,ㄖ,ㄗ,ㄘ,ㄙ,ㄚ,ㄛ,ㄜ,ㄝ,ㄞ,ㄟ,ㄠ,ㄡ,ㄢ,ㄣ,ㄤ,ㄥ,ㄦ,ㄧ,ㄨ\")\n    }\n];\n(function createTab(content) {\n    for (var i = 0, ci; ci = content[i++];) {\n        var span = document.createElement(\"span\");\n        span.setAttribute(\"tabSrc\", ci.name);\n        span.innerHTML = ci.title;\n        if (i == 1) span.className = \"focus\";\n        domUtils.on(span, \"click\", function () {\n            var tmps = $G(\"tabHeads\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.className = \"\";\n            }\n            tmps = $G(\"tabBodys\").children;\n            for (var k = 0, sk; sk = tmps[k++];) {\n                sk.style.display = \"none\";\n            }\n            this.className = \"focus\";\n            $G(this.getAttribute(\"tabSrc\")).style.display = \"\";\n        });\n        $G(\"tabHeads\").appendChild(span);\n        domUtils.insertAfter(span, document.createTextNode(\"\\n\"));\n        var div = document.createElement(\"div\");\n        div.id = ci.name;\n        div.style.display = (i == 1) ? \"\" : \"none\";\n        var cons = ci.content;\n        for (var j = 0, con; con = cons[j++];) {\n            var charSpan = document.createElement(\"span\");\n            charSpan.innerHTML = con;\n            domUtils.on(charSpan, \"click\", function () {\n                editor.execCommand(\"insertHTML\", this.innerHTML);\n                dialog.close();\n            });\n            div.appendChild(charSpan);\n        }\n        $G(\"tabBodys\").appendChild(div);\n    }\n})(charsContent);\n\nfunction toArray(str) {\n    return str.split(\",\");\n}\n"
  },
  {
    "path": "dialogs/table/edittable.css",
    "content": "body {\n    overflow: hidden;\n    width: 540px;\n}\n\n.wrapper {\n    margin: 10px auto 0;\n    font-size: 12px;\n    overflow: hidden;\n    width: 520px;\n    height: 315px;\n}\n\n.clear {\n    clear: both;\n}\n\n.wrapper .left {\n    float: left;\n    margin-left: 10px;;\n}\n\n.wrapper .right {\n    float: right;\n    border-left: 2px dotted #EDEDED;\n    padding-left: 15px;\n}\n\n.section {\n    margin-bottom: 15px;\n    width: 240px;\n    overflow: hidden;\n}\n\n.section h3 {\n    font-weight: bold;\n    padding: 5px 0;\n    margin-bottom: 10px;\n    border-bottom: 1px solid #EDEDED;\n    font-size: 12px;\n}\n\n.section ul {\n    list-style: none;\n    overflow: hidden;\n    clear: both;\n\n}\n\n.section li {\n    float: left;\n    width: 120px;;\n}\n\n.section .tone {\n    width: 80px;;\n}\n\n.section .preview {\n    width: 220px;\n}\n\n.section .preview table {\n    text-align: center;\n    vertical-align: middle;\n    color: #666;\n}\n\n.section .preview caption {\n    font-weight: bold;\n}\n\n.section .preview td {\n    border-width: 1px;\n    border-style: solid;\n    height: 22px;\n}\n\n.section .preview th {\n    border-style: solid;\n    border-color: #DDD;\n    border-width: 2px 1px 1px 1px;\n    height: 22px;\n    background-color: #F7F7F7;\n}\n"
  },
  {
    "path": "dialogs/table/edittable.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"edittable.css?{timestamp}\">\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"left\">\n        <div class=\"section\">\n            <h3><var id=\"lang_tableStyle\"></var></h3>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_title\" name=\"style\"/><var\n                        id=\"lang_insertTitle\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_titleCol\" name=\"style\"/><var\n                        id=\"lang_insertTitleCol\"></var></label>\n                </li>\n            </ul>\n            <ul>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_caption\" name=\"style\"/><var\n                        id=\"lang_insertCaption\"></var></label>\n                </li>\n                <li>\n                    <label onselectstart=\"return false\"><input type=\"checkbox\" id=\"J_sorttable\" name=\"style\"/><var\n                        id=\"lang_orderbycontent\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_tableSize\"></var></h3>\n            <ul>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizeContent\" name=\"size\"/><var id=\"lang_autoSizeContent\"></var></label>\n                </li>\n                <li>\n                    <label><input type=\"radio\" id=\"J_autoSizePage\" name=\"size\"/><var\n                        id=\"lang_autoSizePage\"></var></label>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n        <div class=\"section\">\n            <h3><var id=\"lang_borderStyle\"></var></h3>\n            <ul>\n                <li>\n                    <span><var id=\"lang_color\"></var></span>\n                    <input type=\"text\" class=\"tone\" id=\"J_tone\" readonly='readonly'/>\n                </li>\n            </ul>\n            <div class=\"clear\"></div>\n        </div>\n    </div>\n    <div class=\"right\">\n        <div class=\"section\">\n            <h3><var id=\"lang_example\"></var></h3>\n            <div class=\"preview\" id=\"J_preview\">\n            </div>\n        </div>\n    </div>\n</div>\n<script type=\"text/javascript\" src=\"edittable.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/table/edittable.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-12-19\n * Time: 下午4:55\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var title = $G(\"J_title\"),\n        titleCol = $G(\"J_titleCol\"),\n        caption = $G(\"J_caption\"),\n        sorttable = $G(\"J_sorttable\"),\n        autoSizeContent = $G(\"J_autoSizeContent\"),\n        autoSizePage = $G(\"J_autoSizePage\"),\n        tone = $G(\"J_tone\"),\n        me,\n        preview = $G(\"J_preview\");\n\n    var editTable = function () {\n        me = this;\n        me.init();\n    };\n    editTable.prototype = {\n        init: function () {\n            var colorPiker = new UE.ui.ColorPicker({\n                    editor: editor\n                }),\n                colorPop = new UE.ui.Popup({\n                    editor: editor,\n                    content: colorPiker\n                });\n\n            title.checked = editor.queryCommandState(\"inserttitle\") == -1;\n            titleCol.checked = editor.queryCommandState(\"inserttitlecol\") == -1;\n            caption.checked = editor.queryCommandState(\"insertcaption\") == -1;\n            sorttable.checked = editor.queryCommandState(\"enablesort\") == 1;\n\n            var enablesortState = editor.queryCommandState(\"enablesort\"),\n                disablesortState = editor.queryCommandState(\"disablesort\");\n\n            sorttable.checked = !!(enablesortState < 0 && disablesortState >= 0);\n            sorttable.disabled = !!(enablesortState < 0 && disablesortState < 0);\n            sorttable.title = enablesortState < 0 && disablesortState < 0 ? lang.errorMsg : '';\n\n            me.createTable(title.checked, titleCol.checked, caption.checked);\n            me.setAutoSize();\n            me.setColor(me.getColor());\n\n            domUtils.on(title, \"click\", me.titleHanler);\n            domUtils.on(titleCol, \"click\", me.titleColHanler);\n            domUtils.on(caption, \"click\", me.captionHanler);\n            domUtils.on(sorttable, \"click\", me.sorttableHanler);\n            domUtils.on(autoSizeContent, \"click\", me.autoSizeContentHanler);\n            domUtils.on(autoSizePage, \"click\", me.autoSizePageHanler);\n\n            domUtils.on(tone, \"click\", function () {\n                colorPop.showAnchor(tone);\n            });\n            domUtils.on(document, 'mousedown', function () {\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"pickcolor\", function () {\n                me.setColor(arguments[1]);\n                colorPop.hide();\n            });\n            colorPiker.addListener(\"picknocolor\", function () {\n                me.setColor(\"\");\n                colorPop.hide();\n            });\n        },\n\n        createTable: function (hasTitle, hasTitleCol, hasCaption) {\n            var arr = [],\n                sortSpan = '<span>^</span>';\n            arr.push(\"<table id='J_example'>\");\n            if (hasCaption) {\n                arr.push(\"<caption>\" + lang.captionName + \"</caption>\")\n            }\n            if (hasTitle) {\n                arr.push(\"<tr>\");\n                if (hasTitleCol) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\");\n                }\n                for (var j = 0; j < 5; j++) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\");\n                }\n                arr.push(\"</tr>\");\n            }\n            for (var i = 0; i < 6; i++) {\n                arr.push(\"<tr>\");\n                if (hasTitleCol) {\n                    arr.push(\"<th>\" + lang.titleName + \"</th>\")\n                }\n                for (var k = 0; k < 5; k++) {\n                    arr.push(\"<td>\" + lang.cellsName + \"</td>\")\n                }\n                arr.push(\"</tr>\");\n            }\n            arr.push(\"</table>\");\n            preview.innerHTML = arr.join(\"\");\n            this.updateSortSpan();\n        },\n        titleHanler: function () {\n            var example = $G(\"J_example\"),\n                frg = document.createDocumentFragment(),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colCount = example.rows[0].children.length;\n\n            if (title.checked) {\n                example.insertRow(0);\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    frg.appendChild(node);\n                }\n                example.rows[0].appendChild(frg);\n\n            } else {\n                domUtils.remove(example.rows[0]);\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        titleColHanler: function () {\n            var example = $G(\"J_example\"),\n                color = domUtils.getComputedStyle(domUtils.getElementsByTagName(example, \"td\")[0], \"border-color\"),\n                colArr = example.rows,\n                colCount = colArr.length;\n\n            if (titleCol.checked) {\n                for (var i = 0, node; i < colCount; i++) {\n                    node = document.createElement(\"th\");\n                    node.innerHTML = lang.titleName;\n                    colArr[i].insertBefore(node, colArr[i].children[0]);\n                }\n            } else {\n                for (var i = 0; i < colCount; i++) {\n                    domUtils.remove(colArr[i].children[0]);\n                }\n            }\n            me.setColor(color);\n            me.updateSortSpan();\n        },\n        captionHanler: function () {\n            var example = $G(\"J_example\");\n            if (caption.checked) {\n                var row = document.createElement('caption');\n                row.innerHTML = lang.captionName;\n                example.insertBefore(row, example.firstChild);\n            } else {\n                domUtils.remove(domUtils.getElementsByTagName(example, 'caption')[0]);\n            }\n        },\n        sorttableHanler: function () {\n            me.updateSortSpan();\n        },\n        autoSizeContentHanler: function () {\n            var example = $G(\"J_example\");\n            example.removeAttribute(\"width\");\n        },\n        autoSizePageHanler: function () {\n            var example = $G(\"J_example\");\n            var tds = example.getElementsByTagName(example, \"td\");\n            utils.each(tds, function (td) {\n                td.removeAttribute(\"width\");\n            });\n            example.setAttribute('width', '100%');\n        },\n        updateSortSpan: function () {\n            var example = $G(\"J_example\"),\n                row = example.rows[0];\n\n            var spans = domUtils.getElementsByTagName(example, \"span\");\n            utils.each(spans, function (span) {\n                span.parentNode.removeChild(span);\n            });\n            if (sorttable.checked) {\n                utils.each(row.cells, function (cell, i) {\n                    var span = document.createElement(\"span\");\n                    span.innerHTML = \"^\";\n                    cell.appendChild(span);\n                });\n            }\n        },\n        getColor: function () {\n            var start = editor.selection.getStart(), color,\n                cell = domUtils.findParentByTagName(start, [\"td\", \"th\", \"caption\"], true);\n            color = cell && domUtils.getComputedStyle(cell, \"border-color\");\n            if (!color) color = \"#DDDDDD\";\n            return color;\n        },\n        setColor: function (color) {\n            var example = $G(\"J_example\"),\n                arr = domUtils.getElementsByTagName(example, \"td\").concat(\n                    domUtils.getElementsByTagName(example, \"th\"),\n                    domUtils.getElementsByTagName(example, \"caption\")\n                );\n\n            tone.value = color;\n            utils.each(arr, function (node) {\n                node.style.borderColor = color;\n            });\n\n        },\n        setAutoSize: function () {\n            var me = this;\n            autoSizePage.checked = true;\n            me.autoSizePageHanler();\n        }\n    };\n\n    new editTable;\n\n    dialog.onok = function () {\n        editor.__hasEnterExecCommand = true;\n\n        var checks = {\n            title: \"inserttitle deletetitle\",\n            titleCol: \"inserttitlecol deletetitlecol\",\n            caption: \"insertcaption deletecaption\",\n            sorttable: \"enablesort disablesort\"\n        };\n        editor.fireEvent('saveScene');\n        for (var i in checks) {\n            var cmds = checks[i].split(\" \"),\n                input = $G(\"J_\" + i);\n            if (input[\"checked\"]) {\n                editor.queryCommandState(cmds[0]) != -1 && editor.execCommand(cmds[0]);\n            } else {\n                editor.queryCommandState(cmds[1]) != -1 && editor.execCommand(cmds[1]);\n            }\n        }\n\n        editor.execCommand(\"edittable\", tone.value);\n        autoSizeContent.checked ? editor.execCommand('adaptbytext') : \"\";\n        autoSizePage.checked ? editor.execCommand(\"adaptbywindow\") : \"\";\n        editor.fireEvent('saveScene');\n\n        editor.__hasEnterExecCommand = false;\n    };\n})();\n"
  },
  {
    "path": "dialogs/table/edittd.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title></title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .section {\n            text-align: center;\n            margin-top: 10px;\n        }\n\n        .section input {\n            margin-left: 5px;\n            width: 70px;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <span><var id=\"lang_tdBkColor\"></var></span>\n    <input type=\"text\" id=\"J_tone\"/>\n</div>\n<script type=\"text/javascript\">\n    var tone = $G(\"J_tone\"),\n        colorPiker = new UE.ui.ColorPicker({\n            editor: editor\n        }),\n        colorPop = new UE.ui.Popup({\n            editor: editor,\n            content: colorPiker\n        });\n    domUtils.on(tone, \"click\", function () {\n        colorPop.showAnchor(tone);\n    });\n    domUtils.on(document, 'mousedown', function () {\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"pickcolor\", function () {\n        tone.value = arguments[1];\n        colorPop.hide();\n    });\n    colorPiker.addListener(\"picknocolor\", function () {\n        tone.value = \"\";\n        colorPop.hide();\n    });\n    dialog.onok = function () {\n        editor.execCommand(\"edittd\", tone.value);\n    };\n\n    var start = editor.selection.getStart(),\n        cell = start && domUtils.findParentByTagName(start, [\"td\", \"th\"], true);\n    if (cell) {\n        var color = domUtils.getComputedStyle(cell, 'background-color');\n        if (/^#/.test(color)) {\n            tone.value = color\n        }\n\n    }\n\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/table/edittip.html",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <title>表格删除提示</title>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .section {\n            width: 200px;\n            margin: 10px auto 0;\n            font-size: 14px;\n        }\n\n        .item {\n            text-align: center;\n        }\n    </style>\n</head>\n<body>\n<div class=\"section\">\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delRow\" name=\"cmd\" checked/><var id=\"lang_delRow\"></var></label>\n    </div>\n    <div class=\"item\">\n        <label><input type=\"radio\" id=\"J_delCol\" name=\"cmd\"/><var id=\"lang_delCol\"></var></label>\n    </div>\n</div>\n<script type=\"text/javascript\">\n    dialog.onok = function () {\n        $G(\"J_delRow\").checked ? editor.execCommand(\"deleterow\") : editor.execCommand(\"deletecol\");\n    };\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/template/config.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:00\n * To change this template use File | Settings | File Templates.\n */\nvar templates = [\n    {\n        \"pre\": \"pre0.png\",\n        'title': lang.blank,\n        'preHtml': '<p class=\"ue_t\">&nbsp;欢迎使用UEditor！</p>',\n        \"html\": '<p class=\"ue_t\">欢迎使用UEditor！</p>'\n\n    },\n    {\n        \"pre\": \"pre1.png\",\n        'title': lang.blog,\n        'preHtml': '<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">深入理解Range</span></h1><p style=\"text-align:center;\"><strong class=\" \">UEditor二次开发</strong></p><h3><span class=\" \" style=\"font-family:幼圆\">什么是Range</span></h3><p style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 </p><br /><h3><span class=\" \" style=\"font-family:幼圆\">Range能干什么</span></h3><p style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。</p>',\n        \"html\": '<h1 class=\"ue_t\" label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\"><span style=\"color:#c0504d;\">[键入文档标题]</span></h1><p style=\"text-align:center;\"><strong class=\"ue_t\">[键入文档副标题]</strong></p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 1]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 2]</span></h3><p class=\"ue_t\"  style=\"text-indent:2em;\">在“开始”选项卡上，通过从快速样式库中为所选文本选择一种外观，您可以方便地更改文档中所选文本的格式。 您还可以使用“开始”选项卡上的其他控件来直接设置文本格式。大多数控件都允许您选择是使用当前主题外观，还是使用某种直接指定的格式。 </p><h3><span class=\"ue_t\" style=\"font-family:幼圆\">[标题 3]</span></h3><p class=\"ue_t\">对于“插入”选项卡上的库，在设计时都充分考虑了其中的项与文档整体外观的协调性。 您可以使用这些库来插入表格、页眉、页脚、列表、封面以及其他文档构建基块。 您创建的图片、图表或关系图也将与当前的文档外观协调一致。</p><p class=\"ue_t\"><br /></p>'\n\n    },\n    {\n        \"pre\": \"pre2.png\",\n        'title': lang.resume,\n        'preHtml': '<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\" \">WEB前端开发简历</span></h1><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"100\" style=\"text-align:center;\"><p><span style=\"background-color:transparent;\">插</span><br /></p><p>入</p><p>照</p><p>片</p></td><td><p><span style=\"background-color:transparent;\"> 联系电话：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电话]</span><br /></p><p><span style=\"background-color:transparent;\"> 电子邮件：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的电子邮件地址]</span><br /></p><p><span style=\"background-color:transparent;\"> 家庭住址：</span><span class=\"ue_t\" style=\"background-color:transparent;\">[键入您的地址]</span><br /></p></td></tr></tbody></table><h3><span style=\"color:#E36C09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\" \">WEB前端研发工程师</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[起止时间]</span> <span class=\"ue_t\">[学校名称] </span> <span class=\"ue_t\">[所学专业]</span> <span class=\"ue_t\">[所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><p><br /></p>',\n        \"html\": '<h1 label=\"Title left\" name=\"tl\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;\"><span style=\"color:#e36c09;\" class=\"ue_t\">[此处键入简历标题]</span></h1><p><span style=\"color:#e36c09;\"><br /></span></p><table width=\"100%\" border=\"1\" bordercolor=\"#95B3D7\" style=\"border-collapse:collapse;\"><tbody><tr><td width=\"200\" style=\"text-align:center;\" class=\"ue_t\">【此处插入照片】</td><td><p><br /></p><p> 联系电话：<span class=\"ue_t\">[键入您的电话]</span></p><p><br /></p><p> 电子邮件：<span class=\"ue_t\">[键入您的电子邮件地址]</span></p><p><br /></p><p> 家庭住址：<span class=\"ue_t\">[键入您的地址]</span></p><p><br /></p></td></tr></tbody></table><h3><span style=\"color:#e36c09;font-size:20px;\">目标职位</span></h3><p style=\"text-indent:2em;\" class=\"ue_t\">[此处键入您的期望职位]</p><h3><span style=\"color:#e36c09;font-size:20px;\">学历</span></h3><p><span style=\"display:none;line-height:0px;\" id=\"_baidu_bookmark_start_26\">﻿</span></p><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称] </span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入学校名称]</span> <span class=\"ue_t\">[键入所学专业]</span> <span class=\"ue_t\">[键入所获学位]</span></p></li></ol><h3><span style=\"color:#e36c09;font-size:20px;\" class=\"ue_t\">工作经验</span></h3><ol style=\"list-style-type:decimal;\"><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol><li><p><span class=\"ue_t\">[键入起止时间]</span> <span class=\"ue_t\">[键入公司名称]</span> <span class=\"ue_t\">[键入职位名称]</span> </p></li><ol style=\"list-style-type:lower-alpha;\"><li><p><span class=\"ue_t\">[键入负责项目]</span> <span class=\"ue_t\">[键入项目简介]</span></p></li></ol></ol><p><span style=\"color:#e36c09;font-size:20px;\">掌握技能</span></p><p style=\"text-indent:2em;\"> &nbsp;<span class=\"ue_t\">[这里可以键入您所掌握的技能]</span><br /></p>'\n\n    },\n    {\n        \"pre\": \"pre3.png\",\n        'title': lang.richText,\n        'preHtml': '<h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"150\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:150px;height:100px;float:left;\" />图文混排方法</p><p>图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文</p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"100\" height=\"100\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:100px;height:100px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p>',\n        \"html\": '<p><br /></p><h1 label=\"Title center\" name=\"tc\" style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;text-align:center;margin:0px 0px 20px;\" class=\"ue_t\">[此处键入文章标题]</h1><p><img src=\"http://img.baidu.com/hi/youa/y_0034.gif\" width=\"300\" height=\"200\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:200px;float:left;\" />图文混排方法</p><p>1. 图片居左，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居左对齐，然后即可在右边输入多行文本</p><p><br /></p><p>2. 图片居右，文字围绕图片排版</p><p>方法：在文字前面插入图片，设置居右对齐，然后即可在左边输入多行文本</p><p><br /></p><p>3. 图片居中环绕排版</p><p>方法：亲，这个真心没有办法。。。</p><p><br /></p><p><br /></p><p><img src=\"http://img.baidu.com/hi/youa/y_0040.gif\" width=\"300\" height=\"300\" border=\"0\" hspace=\"0\" vspace=\"0\" style=\"width:300px;height:300px;float:right;\" /></p><p>还有没有什么其他的环绕方式呢？这里是居右环绕</p><p><br /></p><p>欢迎大家多多尝试，为UEditor提供更多高质量模板！</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p>占位</p><p><br /></p><p><br /></p>'\n    },\n    {\n        \"pre\": \"pre4.png\",\n        'title': lang.sciPapers,\n        'preHtml': '<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><br /></p>',\n        'html': '<h2 style=\"border-bottom-color:#cccccc;border-bottom-width:2px;border-bottom-style:solid;padding:0px 4px 0px 0px;margin:0px 0px 10px;text-align:center;\" class=\"ue_t\">[键入文章标题]</h2><p><strong><span style=\"font-size:12px;\">摘要</span></strong><span style=\"font-size:12px;\" class=\"ue_t\">：这里可以输入很长很长很长很长很长很长很长很长很差的摘要</span></p><p style=\"line-height:1.5em;\"><strong>标题 1</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以输入很多内容，可以图文混排，可以有列表等。</span></p><p style=\"line-height:1.5em;\"><strong>标题 2</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个列表瞅瞅：</span></p><ol style=\"list-style-type:lower-alpha;\"><li><p class=\"ue_t\">列表 1</p></li><li><p class=\"ue_t\">列表 2</p></li><ol style=\"list-style-type:lower-roman;\"><li><p class=\"ue_t\">多级列表 1</p></li><li><p class=\"ue_t\">多级列表 2</p></li></ol><li><p class=\"ue_t\">列表 3<br /></p></li></ol><p style=\"line-height:1.5em;\"><strong>标题 3</strong></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">来个文字图文混排的</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">这里可以多行</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">右边是图片</span></p><p style=\"text-indent:2em;\"><span style=\"font-size:14px;\" class=\"ue_t\">绝对没有问题的，不信你也可以试试看</span></p><p><br /></p>'\n    }\n];\n"
  },
  {
    "path": "dialogs/template/template.css",
    "content": ".wrap {\n    padding: 5px;\n    font-size: 14px;\n}\n\n.left {\n    width: 425px;\n    float: left;\n}\n\n.right {\n    width: 160px;\n    border: 1px solid #ccc;\n    float: right;\n    padding: 5px;\n    margin-right: 5px;\n}\n\n.right .pre {\n    height: 332px;\n    overflow-y: auto;\n}\n\n.right .preitem {\n    border: white 1px solid;\n    margin: 5px 0;\n    padding: 2px 0;\n}\n\n.right .preitem:hover {\n    background-color: lemonChiffon;\n    cursor: pointer;\n    border: #ccc 1px solid;\n}\n\n.right .preitem img {\n    display: block;\n    margin: 0 auto;\n    width: 100px;\n}\n\n.clear {\n    clear: both;\n}\n\n.top {\n    height: 26px;\n    line-height: 26px;\n    padding: 5px;\n}\n\n.bottom {\n    height: 320px;\n    width: 100%;\n    margin: 0 auto;\n}\n\n.transparent {\n    background: url(\"images/bg.gif\") repeat;\n}\n\n.bottom table tr td {\n    border: 1px dashed #ccc;\n}\n\n#colorPicker {\n    width: 17px;\n    height: 17px;\n    border: 1px solid #CCC;\n    display: inline-block;\n    border-radius: 3px;\n    box-shadow: 2px 2px 5px #D3D6DA;\n}\n\n.border_style1 {\n    padding: 2px;\n    border: 1px solid #ccc;\n    border-radius: 5px;\n    box-shadow: 2px 2px 5px #d3d6da;\n}\n\np {\n    margin: 5px 0\n}\n\ntable {\n    clear: both;\n    margin-bottom: 10px;\n    border-collapse: collapse;\n    word-break: break-all;\n}\n\nli {\n    clear: both\n}\n\nol {\n    padding-left: 40px;\n}\n"
  },
  {
    "path": "dialogs/template/template.html",
    "content": "<!DOCTYPE HTML>\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"template.css?{timestamp}\">\n</head>\n<body>\n<div class=\"wrap\">\n    <div class=\"left\">\n        <div class=\"top\">\n            <label><var id=\"lang_template_clear\"></var>：<input id=\"issave\" type=\"checkbox\"></label>\n        </div>\n        <div class=\"bottom border_style1\" id=\"preview\"></div>\n    </div>\n    <fieldset class=\"right border_style1\">\n        <legend><var id=\"lang_template_select\"></var></legend>\n        <div class=\"pre\" id=\"preitem\"></div>\n    </fieldset>\n    <div class=\"clear\"></div>\n</div>\n<script type=\"text/javascript\" src=\"config.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"template.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/template/template.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: xuheng\n * Date: 12-8-8\n * Time: 下午2:09\n * To change this template use File | Settings | File Templates.\n */\n(function () {\n    var me = editor,\n        preview = $G(\"preview\"),\n        preitem = $G(\"preitem\"),\n        tmps = templates,\n        currentTmp;\n    var initPre = function () {\n        var str = \"\";\n        for (var i = 0, tmp; tmp = tmps[i++];) {\n            str += '<div class=\"preitem\" onclick=\"pre(' + i + ')\"><img src=\"' + \"images/\" + tmp.pre + '\" ' + (tmp.title ? \"alt=\" + tmp.title + \" title=\" + tmp.title + \"\" : \"\") + '></div>';\n        }\n        preitem.innerHTML = str;\n    };\n    var pre = function (n) {\n        var tmp = tmps[n - 1];\n        currentTmp = tmp;\n        clearItem();\n        domUtils.setStyles(preitem.childNodes[n - 1], {\n            \"background-color\": \"lemonChiffon\",\n            \"border\": \"#ccc 1px solid\"\n        });\n        preview.innerHTML = tmp.preHtml ? tmp.preHtml : \"\";\n    };\n    var clearItem = function () {\n        var items = preitem.children;\n        for (var i = 0, item; item = items[i++];) {\n            domUtils.setStyles(item, {\n                \"background-color\": \"\",\n                \"border\": \"white 1px solid\"\n            });\n        }\n    };\n    dialog.onok = function () {\n        if (!$G(\"issave\").checked) {\n            me.execCommand(\"cleardoc\");\n        }\n        var obj = {\n            html: currentTmp && currentTmp.html\n        };\n        me.execCommand(\"template\", obj);\n    };\n    initPre();\n    window.pre = pre;\n    pre(2)\n\n})();\n"
  },
  {
    "path": "dialogs/video/video.css",
    "content": "@charset \"utf-8\";\n.wrapper {\n    width: 570px;\n    _width: 575px;\n    margin: 10px auto;\n    zoom: 1;\n    position: relative\n}\n\n.tabbody {\n    height: 355px;\n}\n\n.tabbody .panel {\n    position: absolute;\n    width: 0;\n    height: 0;\n    background: #fff;\n    overflow: hidden;\n    display: none;\n}\n\n.tabbody .panel.focus {\n    width: 100%;\n    height: 355px;\n    display: block;\n}\n\n.tabbody .panel table td {\n    vertical-align: middle;\n}\n\n#videoUrl {\n    width: 380px;\n    height: 26px;\n    line-height: 26px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #F2F2F2;\n    outline: none;\n    border-radius: 3px;\n    padding: 0 5px;\n}\n\n#videoSelect {\n    width: 100px;\n    display: inline-block;\n    background: #FFF;\n    border: 1px solid #EEE;\n    line-height: 26px;\n    text-align: center;\n    color: #333;\n    text-decoration: none;\n    border-radius: 3px;\n    vertical-align: middle;\n}\n\n#videoSearchTxt {\n    margin-left: 15px;\n    background: #FFF;\n    width: 200px;\n    height: 21px;\n    line-height: 21px;\n    border: 1px solid #F2F2F2;\n}\n\n#searchList {\n    width: 570px;\n    overflow: auto;\n    zoom: 1;\n    height: 270px;\n}\n\n#searchList div {\n    float: left;\n    width: 120px;\n    height: 135px;\n    margin: 5px 15px;\n}\n\n#searchList img {\n    margin: 2px 8px;\n    cursor: pointer;\n    border: 2px solid #fff\n}\n\n/*不用缩略图*/\n#searchList p {\n    margin-left: 10px;\n}\n\n#videoType {\n    width: 65px;\n    height: 23px;\n    line-height: 22px;\n    border: 1px solid #F2F2F2;\n}\n\n#videoSearchBtn, #videoSearchReset {\n    /*width: 80px;*/\n    height: 25px;\n    line-height: 25px;\n    background: #eee;\n    border: 1px solid #F2F2F2;\n    cursor: pointer;\n    padding: 0 5px;\n}\n\n\n#preview {\n    position: relative;\n    width: 420px;\n    padding: 0;\n    overflow: hidden;\n    margin-left: 10px;\n    _margin-left: 5px;\n    height: 280px;\n    background-color: #ddd;\n    float: left\n}\n\n#preview .previewMsg {\n    position: absolute;\n    top: 0;\n    margin: 0;\n    padding: 0;\n    height: 280px;\n    width: 100%;\n    background-color: #666;\n}\n\n#preview .previewMsg span {\n    display: block;\n    margin: 125px auto 0 auto;\n    text-align: center;\n    font-size: 18px;\n    color: #fff;\n}\n\n#preview .previewVideo {\n    position: absolute;\n    top: 0;\n    margin: 0;\n    padding: 0;\n    height: 280px;\n    width: 100%;\n}\n\n.edui-video-wrapper fieldset {\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\n#videoInfo {\n    width: 120px;\n    float: left;\n    margin-left: 10px;\n    _margin-left: 7px;\n}\n\nfieldset {\n    border: 1px solid #ddd;\n    padding-left: 5px;\n    margin-bottom: 20px;\n    padding-bottom: 5px;\n    width: 115px;\n}\n\nfieldset legend {\n    font-weight: bold;\n}\n\nfieldset p {\n    line-height: 30px;\n}\n\nfieldset input.txt {\n    width: 65px;\n    height: 21px;\n    line-height: 21px;\n    margin: 8px 5px;\n    background: #FFF;\n    border: 1px solid #F2F2F2;\n}\n\nlabel.url {\n    font-weight: bold;\n    margin-left: 5px;\n}\n\n#videoFloat div {\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    margin: 9px;\n    _margin: 5px;\n    width: 38px;\n    height: 36px;\n    float: left;\n}\n\n#videoFloat .focus {\n    opacity: 1;\n    filter: alpha(opacity=100)\n}\n\nspan.view {\n    display: inline-block;\n    width: 30px;\n    float: right;\n    cursor: pointer;\n    color: blue\n}\n\n\n/* upload video */\n.tabbody #upload.panel {\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n    background: #fff;\n    display: block;\n}\n\n.tabbody #upload.panel.focus {\n    width: 100%;\n    height: 335px;\n    display: block;\n    clip: auto;\n}\n\n#upload_alignment div {\n    cursor: pointer;\n    opacity: 0.5;\n    filter: alpha(opacity=50);\n    margin: 9px;\n    _margin: 5px;\n    width: 38px;\n    height: 36px;\n    float: left;\n}\n\n#upload_alignment .focus {\n    opacity: 1;\n    filter: alpha(opacity=100)\n}\n\n#upload_left {\n    width: 427px;\n    float: left;\n}\n\n#upload_left .controller {\n    height: 30px;\n    clear: both;\n}\n\n#uploadVideoInfo {\n    margin-top: 10px;\n    float: right;\n    padding-right: 8px;\n}\n\n#upload .queueList {\n    margin: 0;\n}\n\n#upload p {\n    margin: 0;\n}\n\n.element-invisible {\n    width: 0 !important;\n    height: 0 !important;\n    border: 0;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    position: absolute !important;\n    clip: rect(1px, 1px, 1px, 1px);\n}\n\n#upload .placeholder {\n    margin: 10px;\n    margin-right: 0;\n    border: 2px dashed #e6e6e6;\n    *border: 0px dashed #e6e6e6;\n    height: 161px;\n    padding-top: 150px;\n    text-align: center;\n    width: 97%;\n    float: left;\n    background: url(./images/image.png) center 70px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n    top: 0;\n    *margin-left: 0;\n    *left: 10px;\n}\n\n#upload .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    *width: 120px;\n    color: #fff;\n    display: inline-block;\n    margin: 0 auto 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#upload .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n\n#filePickerContainer {\n    text-align: center;\n}\n\n#upload .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n\n#upload .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n\n#upload .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#upload .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#upload .filelist {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    overflow-x: hidden;\n    overflow-y: auto;\n    position: relative;\n    height: 285px;\n}\n\n#upload .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#upload .filelist li {\n    width: 113px;\n    height: 113px;\n    background: url(./images/bg.png);\n    text-align: center;\n    margin: 15px 0 0 20px;\n    *margin: 15px 0 0 15px;\n    position: relative;\n    display: block;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#upload .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#upload .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow: ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#upload .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n    overflow: hidden;\n    z-index: 50;\n    margin: 0;\n    border-radius: 0;\n    background: none;\n    -webkit-box-shadow: 0 0 0;\n}\n\n#upload .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(./images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@-moz-keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n@keyframes progressmove {\n    0% {\n        background-position: 0 0;\n    }\n    100% {\n        background-position: 17px 0;\n    }\n}\n\n#upload .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 113px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 113px;\n    height: 113px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#upload .filelist li p.imgWrap.notimage {\n    margin-top: 0;\n    width: 111px;\n    height: 111px;\n    border: 1px #eeeeee solid;\n}\n\n#upload .filelist li p.imgWrap.notimage i.file-preview {\n    margin-top: 15px;\n}\n\n#upload .filelist li img {\n    width: 100%;\n}\n\n#upload .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n    display: none;\n}\n\n#upload .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(./images/success.png) no-repeat right bottom;\n    background-image: url(./images/success.gif) \\9;\n}\n\n#upload .filelist li.filePickerBlock {\n    width: 113px;\n    height: 113px;\n    background: url(./images/image.png) no-repeat center 12px;\n    border: 1px solid #eeeeee;\n    border-radius: 0;\n}\n\n#upload .filelist li.filePickerBlock div.webuploader-pick {\n    width: 100%;\n    height: 100%;\n    margin: 0;\n    padding: 0;\n    opacity: 0;\n    background: none;\n    font-size: 0;\n}\n\n#upload .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#80000000', endColorstr='#80000000') \\0;\n    background: rgba(0, 0, 0, 0.5);\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#upload .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(./images/icons.png) no-repeat;\n    background: url(./images/icons.gif) no-repeat \\9;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .filelist div.file-panel span.rotateLeft {\n    display: none;\n    background-position: 0 -24px;\n}\n\n#upload .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#upload .filelist div.file-panel span.rotateRight {\n    display: none;\n    background-position: -24px -24px;\n}\n\n#upload .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#upload .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n\n#upload .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#upload .statusBar {\n    height: 45px;\n    border-bottom: 1px solid #dadada;\n    margin: 0 10px;\n    padding: 0;\n    line-height: 45px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#upload .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: absolute;\n    top: 12px;\n    display: none;\n    text-align: center;\n    line-height: 18px;\n    color: #6dbfff;\n    margin: 0 10px 0 0;\n}\n\n#upload .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n\n#upload .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#upload .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#upload .statusBar .btns {\n    position: absolute;\n    top: 7px;\n    right: 0;\n    line-height: 30px;\n}\n\n#filePickerBtn {\n    display: inline-block;\n    float: left;\n}\n\n#upload .statusBar .btns .webuploader-pick,\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-uploading,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    -ms-user-select: none;\n    user-select: none;\n}\n\n#upload .statusBar .btns .webuploader-pick-hover,\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-uploading:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#upload .statusBar .btns .uploadBtn,\n#upload .statusBar .btns .uploadBtn.state-paused {\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n\n#upload .statusBar .btns .uploadBtn:hover,\n#upload .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #00a2d4;\n}\n\n#upload .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    filter: alpha(opacity=60);\n    -moz-opacity: 0.6;\n    -khtml-opacity: 0.6;\n    opacity: 0.6;\n}\n\n\n/* 在线文件的文件预览图标 */\ni.file-preview {\n    display: block;\n    margin: 10px auto;\n    width: 70px;\n    height: 70px;\n    background-image: url(\"./images/file-icons.png\");\n    background-image: url(\"./images/file-icons.gif\") \\9;\n    background-position: -140px center;\n    background-repeat: no-repeat;\n}\n\ni.file-preview.file-type-dir {\n    background-position: 0 center;\n}\n\ni.file-preview.file-type-file {\n    background-position: -140px center;\n}\n\ni.file-preview.file-type-filelist {\n    background-position: -210px center;\n}\n\ni.file-preview.file-type-zip,\ni.file-preview.file-type-rar,\ni.file-preview.file-type-7z,\ni.file-preview.file-type-tar,\ni.file-preview.file-type-gz,\ni.file-preview.file-type-bz2 {\n    background-position: -280px center;\n}\n\ni.file-preview.file-type-xls,\ni.file-preview.file-type-xlsx {\n    background-position: -350px center;\n}\n\ni.file-preview.file-type-doc,\ni.file-preview.file-type-docx {\n    background-position: -420px center;\n}\n\ni.file-preview.file-type-ppt,\ni.file-preview.file-type-pptx {\n    background-position: -490px center;\n}\n\ni.file-preview.file-type-vsd {\n    background-position: -560px center;\n}\n\ni.file-preview.file-type-pdf {\n    background-position: -630px center;\n}\n\ni.file-preview.file-type-txt,\ni.file-preview.file-type-md,\ni.file-preview.file-type-json,\ni.file-preview.file-type-htm,\ni.file-preview.file-type-xml,\ni.file-preview.file-type-html,\ni.file-preview.file-type-js,\ni.file-preview.file-type-css,\ni.file-preview.file-type-php,\ni.file-preview.file-type-jsp,\ni.file-preview.file-type-asp {\n    background-position: -700px center;\n}\n\ni.file-preview.file-type-apk {\n    background-position: -770px center;\n}\n\ni.file-preview.file-type-exe {\n    background-position: -840px center;\n}\n\ni.file-preview.file-type-ipa {\n    background-position: -910px center;\n}\n\ni.file-preview.file-type-mp4,\ni.file-preview.file-type-swf,\ni.file-preview.file-type-mkv,\ni.file-preview.file-type-avi,\ni.file-preview.file-type-flv,\ni.file-preview.file-type-mov,\ni.file-preview.file-type-mpg,\ni.file-preview.file-type-mpeg,\ni.file-preview.file-type-ogv,\ni.file-preview.file-type-webm,\ni.file-preview.file-type-rm,\ni.file-preview.file-type-rmvb {\n    background-position: -980px center;\n}\n\ni.file-preview.file-type-ogg,\ni.file-preview.file-type-wav,\ni.file-preview.file-type-wmv,\ni.file-preview.file-type-mid,\ni.file-preview.file-type-mp3 {\n    background-position: -1050px center;\n}\n\ni.file-preview.file-type-jpg,\ni.file-preview.file-type-jpeg,\ni.file-preview.file-type-gif,\ni.file-preview.file-type-bmp,\ni.file-preview.file-type-png,\ni.file-preview.file-type-psd {\n    background-position: -140px center;\n}\n"
  },
  {
    "path": "dialogs/video/video.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"video.css?{timestamp}\"/>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div id=\"videoTab\">\n        <div id=\"tabHeads\" class=\"tabhead\">\n            <span tabSrc=\"video\" class=\"focus\" data-content-id=\"video\"><var id=\"lang_tab_insertV\"></var></span>\n            <span tabSrc=\"upload\" style=\"display:none;\" data-content-id=\"upload\"><var\n                id=\"lang_tab_uploadV\"></var></span>\n        </div>\n        <div id=\"tabBodys\" class=\"tabbody\">\n            <div id=\"video\" class=\"panel focus\">\n                <table>\n                    <tr>\n                        <td><label for=\"videoUrl\" class=\"url\"><var id=\"lang_video_url\"></var></label></td>\n                        <td><input id=\"videoUrl\" type=\"text\"><a href=\"javascript:;\" id=\"videoSelect\"\n                                                                style=\"display:none;\">选择视频</a></td>\n                    </tr>\n                </table>\n                <div style=\"padding:0 5px 5px 5px;color:#999;\">\n                    外链视频支持：优酷、腾讯视频、哔哩哔哩\n                </div>\n                <div id=\"preview\"></div>\n                <div id=\"videoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_video_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label for=\"videoWidth\"><var id=\"lang_videoW\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoWidth\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label for=\"videoHeight\"><var id=\"lang_videoH\"></var></label></td>\n                                <td><input class=\"txt\" id=\"videoHeight\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_alignment\"></var></legend>\n                        <div id=\"videoFloat\"></div>\n                    </fieldset>\n                </div>\n            </div>\n            <div id=\"upload\" class=\"panel\">\n                <div id=\"upload_left\">\n                    <div id=\"queueList\" class=\"queueList\">\n                        <div class=\"statusBar element-invisible\">\n                            <div class=\"progress\">\n                                <span class=\"text\">0%</span>\n                                <span class=\"percentage\"></span>\n                            </div>\n                            <div class=\"info\"></div>\n                            <div class=\"btns\">\n                                <div id=\"filePickerBtn\"></div>\n                                <div class=\"uploadBtn\"><var id=\"lang_start_upload\"></var></div>\n                            </div>\n                        </div>\n                        <div id=\"dndArea\" class=\"placeholder\">\n                            <div class=\"filePickerContainer\">\n                                <div id=\"filePickerReady\"></div>\n                            </div>\n                        </div>\n                        <ul class=\"filelist element-invisible\">\n                            <li id=\"filePickerBlock\" class=\"filePickerBlock\"></li>\n                        </ul>\n                    </div>\n                </div>\n                <div id=\"uploadVideoInfo\">\n                    <fieldset>\n                        <legend><var id=\"lang_upload_size\"></var></legend>\n                        <table>\n                            <tr>\n                                <td><label><var id=\"lang_upload_width\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_width\" type=\"text\"/></td>\n                            </tr>\n                            <tr>\n                                <td><label><var id=\"lang_upload_height\"></var></label></td>\n                                <td><input class=\"txt\" id=\"upload_height\" type=\"text\"/></td>\n                            </tr>\n                        </table>\n                    </fieldset>\n                    <fieldset>\n                        <legend><var id=\"lang_upload_alignment\"></var></legend>\n                        <div id=\"upload_alignment\"></div>\n                    </fieldset>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n\n<!-- jquery -->\n<script type=\"text/javascript\" src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n\n<!-- webuploader -->\n<script type=\"text/javascript\" src=\"../../third-party/webuploader/webuploader.js?{timestamp}\"></script>\n<link rel=\"stylesheet\" type=\"text/css\" href=\"../../third-party/webuploader/webuploader.css?{timestamp}\">\n\n<!-- video -->\n<script type=\"text/javascript\" src=\"video.js?{timestamp}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/video/video.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-2-20\n * Time: 上午11:19\n * To change this template use File | Settings | File Templates.\n */\n\n(function () {\n\n    var video = {},\n        uploadVideoList = [],\n        isModifyUploadVideo = false,\n        uploadFile;\n    var editorOpt = {};\n\n    window.onload = function () {\n        editorOpt = editor.getOpt('videoConfig');\n        $focus($G(\"videoUrl\"));\n        initTabs();\n        initVideo();\n        initUpload();\n    };\n\n    /* 初始化tab标签 */\n    function initTabs() {\n        var tabs = $G('tabHeads').children;\n        for (var i = 0; i < tabs.length; i++) {\n            domUtils.on(tabs[i], \"click\", function (e) {\n                var j, bodyId, target = e.target || e.srcElement;\n                for (j = 0; j < tabs.length; j++) {\n                    bodyId = tabs[j].getAttribute('data-content-id');\n                    if (tabs[j] == target) {\n                        domUtils.addClass(tabs[j], 'focus');\n                        domUtils.addClass($G(bodyId), 'focus');\n                    } else {\n                        domUtils.removeClasses(tabs[j], 'focus');\n                        domUtils.removeClasses($G(bodyId), 'focus');\n                    }\n                }\n            });\n        }\n        if (!editorOpt.disableUpload) {\n            $G('tabHeads').querySelector('[data-content-id=\"upload\"]').style.display = 'inline-block';\n        }\n        if (!!editorOpt.selectCallback) {\n            $G('videoSelect').style.display = 'inline-block';\n            domUtils.on($G('videoSelect'), \"click\", function (e) {\n                editorOpt.selectCallback(editor, function (info) {\n                    if (info) {\n                        $G('videoUrl').value = info.path;\n                        createPreviewVideo(info.path);\n                    }\n                });\n            });\n        }\n    }\n\n    function initVideo() {\n        createAlignButton([\"videoFloat\", \"upload_alignment\"]);\n        addUrlChangeListener($G(\"videoUrl\"));\n        addOkListener();\n\n        //编辑视频时初始化相关信息\n        (function () {\n            var img = editor.selection.getRange().getClosedNode(), url;\n            if (img && img.className) {\n                var hasFakedClass = (img.className == \"edui-faked-video\"),\n                    hasUploadClass = img.className.indexOf(\"edui-upload-video\") != -1;\n                if (hasFakedClass || hasUploadClass) {\n                    $G(\"videoUrl\").value = url = img.getAttribute(\"_url\");\n                    $G(\"videoWidth\").value = img.width;\n                    $G(\"videoHeight\").value = img.height;\n                    var align = domUtils.getComputedStyle(img, \"float\"),\n                        parentAlign = domUtils.getComputedStyle(img.parentNode, \"text-align\");\n                    updateAlignButton(parentAlign === \"center\" ? \"center\" : align);\n                }\n                if (hasUploadClass) {\n                    isModifyUploadVideo = true;\n                }\n            }\n            createPreviewVideo(url);\n        })();\n    }\n\n    /**\n     * 监听确认和取消两个按钮事件，用户执行插入或者清空正在播放的视频实例操作\n     */\n    function addOkListener() {\n        dialog.onok = function () {\n            $G(\"preview\").innerHTML = \"\";\n            var currentTab = findFocus(\"tabHeads\", \"tabSrc\");\n            switch (currentTab) {\n                case \"video\":\n                    return insertSingle();\n                    break;\n                case \"videoSearch\":\n                    return insertSearch(\"searchList\");\n                    break;\n                case \"upload\":\n                    return insertUpload();\n                    break;\n            }\n        };\n        dialog.oncancel = function () {\n            $G(\"preview\").innerHTML = \"\";\n        };\n    }\n\n    /**\n     * 依据传入的align值更新按钮信息\n     * @param align\n     */\n    function updateAlignButton(align) {\n        var aligns = $G(\"videoFloat\").children;\n        for (var i = 0, ci; ci = aligns[i++];) {\n            if (ci.getAttribute(\"name\") == align) {\n                if (ci.className != \"focus\") {\n                    ci.className = \"focus\";\n                }\n            } else {\n                if (ci.className == \"focus\") {\n                    ci.className = \"\";\n                }\n            }\n        }\n    }\n\n    /**\n     * 将单个视频信息插入编辑器中\n     */\n    function insertSingle() {\n        var width = $G(\"videoWidth\"),\n            height = $G(\"videoHeight\"),\n            url = $G('videoUrl').value,\n            align = findFocus(\"videoFloat\", \"name\");\n        if (!url) return false;\n        if (!checkNum([width, height])) return false;\n        editor.execCommand('insertvideo', {\n            url: convert_url(url),\n            width: width.value,\n            height: height.value,\n            align: align\n        }, isModifyUploadVideo ? 'upload' : null);\n    }\n\n    /**\n     * 将元素id下的所有代表视频的图片插入编辑器中\n     * @param id\n     */\n    function insertSearch(id) {\n        var imgs = domUtils.getElementsByTagName($G(id), \"img\"),\n            videoObjs = [];\n        for (var i = 0, img; img = imgs[i++];) {\n            if (img.getAttribute(\"selected\")) {\n                videoObjs.push({\n                    url: img.getAttribute(\"ue_video_url\"),\n                    width: 420,\n                    height: 280,\n                    align: \"none\"\n                });\n            }\n        }\n        editor.execCommand('insertvideo', videoObjs);\n    }\n\n    /**\n     * 找到id下具有focus类的节点并返回该节点下的某个属性\n     * @param id\n     * @param returnProperty\n     */\n    function findFocus(id, returnProperty) {\n        var tabs = $G(id).children,\n            property;\n        for (var i = 0, ci; ci = tabs[i++];) {\n            if (ci.className == \"focus\") {\n                property = ci.getAttribute(returnProperty);\n                break;\n            }\n        }\n        return property;\n    }\n\n    function convert_url(url) {\n        if (!url) return '';\n        url = utils.trim(url)\n            .replace(/v\\.youku\\.com\\/v_show\\/id_([\\w\\-=]+)\\.html/i, 'player.youku.com/embed/$1')\n            // .replace(/(www\\.)?youtube\\.com\\/watch\\?v=([\\w\\-]+)/i, \"www.youtube.com/v/$2\")\n            // .replace(/youtu.be\\/(\\w+)$/i, \"www.youtube.com/v/$1\")\n            //.replace(/www\\.iqiyi\\.com\\/v_(\\w+)\\.html/i, \"www.youtube.com/v/$1\")\n            // .replace(/v\\.ku6\\.com\\/.+\\/([\\w\\.]+)\\.html.*$/i, \"player.ku6.com/refer/$1/v.swf\")\n            // .replace(/www\\.56\\.com\\/u\\d+\\/v_([\\w\\-]+)\\.html/i, \"player.56.com/v_$1.swf\")\n            // .replace(/www.56.com\\/w\\d+\\/play_album\\-aid\\-\\d+_vid\\-([^.]+)\\.html/i, \"player.56.com/v_$1.swf\")\n            // .replace(/v\\.pps\\.tv\\/play_([\\w]+)\\.html.*$/i, \"player.pps.tv/player/sid/$1/v.swf\")\n            // .replace(/www\\.letv\\.com\\/ptv\\/vplay\\/([\\d]+)\\.html.*$/i, \"i7.imgs.letv.com/player/swfPlayer.swf?id=$1&autoplay=0\")\n            // .replace(/www\\.tudou\\.com\\/programs\\/view\\/([\\w\\-]+)\\/?/i, \"www.tudou.com/v/$1\")\n            // https://v.qq.com/x/cover/wagzbx91asjomnu/w05337nxfof.html\n            // https://v.qq.com/iframe/player.html?vid=w05337nxfof&tiny=0&auto=0\n            .replace(/v\\.qq\\.com\\/x\\/cover\\/[\\w]+\\/([\\w]+)\\.html/i, \"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\")\n            .replace(/v\\.qq\\.com\\/x\\/page\\/([\\w]+)\\.html/i, \"v.qq.com/iframe/player.html?vid=$1&tiny=0&auto=0\")\n            .replace(/www\\.bilibili\\.com\\/video\\/([a-zA-Z0-9]+)\\/?.*$/i, \"player.bilibili.com/player.html?bvid=$1\")\n        // .replace(/v\\.qq\\.com\\/cover\\/[\\w]+\\/[\\w]+\\/([\\w]+)\\.html/i, \"static.video.qq.com/TPout.swf?vid=$1\")\n        // .replace(/v\\.qq\\.com\\/.+[\\?\\&]vid=([^&]+).*$/i, \"static.video.qq.com/TPout.swf?vid=$1\")\n        // .replace(/my\\.tv\\.sohu\\.com\\/[\\w]+\\/[\\d]+\\/([\\d]+)\\.shtml.*$/i, \"share.vrs.sohu.com/my/v.swf&id=$1\")\n        ;\n        return url;\n    }\n\n    /**\n     * 检测传入的所有input框中输入的长宽是否是正数\n     * @param nodes input框集合，\n     */\n    function checkNum(nodes) {\n        for (var i = 0, ci; ci = nodes[i++];) {\n            var value = ci.value;\n            if (!isNumber(value) && value) {\n                alert(lang.numError);\n                ci.value = \"\";\n                ci.focus();\n                return false;\n            }\n        }\n        return true;\n    }\n\n    /**\n     * 数字判断\n     * @param value\n     */\n    function isNumber(value) {\n        return /(0|^[1-9]\\d*$)/.test(value);\n    }\n\n    /**\n     * 创建图片浮动选择按钮\n     * @param ids\n     */\n    function createAlignButton(ids) {\n        for (var i = 0, ci; ci = ids[i++];) {\n            var floatContainer = $G(ci),\n                nameMaps = {\n                    \"none\": lang['default'],\n                    \"left\": lang.floatLeft,\n                    \"right\": lang.floatRight,\n                    \"center\": lang.block\n                };\n            for (var j in nameMaps) {\n                var div = document.createElement(\"div\");\n                div.setAttribute(\"name\", j);\n                if (j == \"none\") div.className = \"focus\";\n                div.style.cssText = \"background:url(images/\" + j + \"_focus.jpg);\";\n                div.setAttribute(\"title\", nameMaps[j]);\n                floatContainer.appendChild(div);\n            }\n            switchSelect(ci);\n        }\n    }\n\n    /**\n     * 选择切换\n     * @param selectParentId\n     */\n    function switchSelect(selectParentId) {\n        var selects = $G(selectParentId).children;\n        for (var i = 0, ci; ci = selects[i++];) {\n            domUtils.on(ci, \"click\", function () {\n                for (var j = 0, cj; cj = selects[j++];) {\n                    cj.className = \"\";\n                    cj.removeAttribute && cj.removeAttribute(\"class\");\n                }\n                this.className = \"focus\";\n            })\n        }\n    }\n\n    /**\n     * 监听url改变事件\n     * @param url\n     */\n    function addUrlChangeListener(url) {\n        if (browser.ie) {\n            url.onpropertychange = function () {\n                createPreviewVideo(this.value);\n            }\n        } else {\n            url.addEventListener(\"input\", function () {\n                createPreviewVideo(this.value);\n            }, false);\n        }\n    }\n\n    /**\n     * 根据url生成视频预览\n     * @param url\n     */\n    function createPreviewVideo(url) {\n        if (!url) return;\n\n        var conUrl = convert_url(url);\n\n        conUrl = utils.unhtml(conUrl);\n\n        // $G(\"preview\").innerHTML = '<div class=\"previewMsg\"><span>'+lang.urlError+'</span></div>'+\n        // '<embed class=\"previewVideo\" type=\"application/x-shockwave-flash\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\"' +\n        //     ' src=\"' + conUrl + '\"' +\n        //     ' width=\"' + 420  + '\"' +\n        //     ' height=\"' + 280  + '\"' +\n        //     ' wmode=\"transparent\" play=\"true\" loop=\"false\" menu=\"false\" allowscriptaccess=\"never\" allowfullscreen=\"true\" >' +\n        // '</embed>';\n\n        $G(\"preview\").innerHTML = '<div class=\"previewMsg\"><span>' + lang.urlError + '</span></div>' +\n            '<iframe class=\"previewVideo\" ' +\n            ' src=\"' + conUrl + '\"' +\n            ' width=\"' + 420 + '\"' +\n            ' height=\"' + 280 + '\"' +\n            ' frameborder=0 allowfullscreen>' +\n            '</iframe>';\n    }\n\n\n    /* 插入上传视频 */\n    function insertUpload() {\n        var videoObjs = [],\n            uploadDir = editor.getOpt('videoUrlPrefix'),\n            width = $G('upload_width').value || 420,\n            height = $G('upload_height').value || 280,\n            align = findFocus(\"upload_alignment\", \"name\") || 'none';\n        for (var key in uploadVideoList) {\n            var file = uploadVideoList[key];\n            videoObjs.push({\n                url: uploadDir + file.url,\n                width: width,\n                height: height,\n                align: align\n            });\n        }\n\n        var count = uploadFile.getQueueCount();\n        if (count) {\n            $('.info', '#queueList').html('<span style=\"color:red;\">' + '还有2个未上传文件'.replace(/[\\d]/, count) + '</span>');\n            return false;\n        } else {\n            editor.execCommand('insertvideo', videoObjs, 'upload');\n        }\n    }\n\n    /*初始化上传标签*/\n    function initUpload() {\n        uploadFile = new UploadFile('queueList');\n    }\n\n\n    /* 上传附件 */\n    function UploadFile(target) {\n        this.$wrap = target.constructor == String ? $('#' + target) : $(target);\n        this.init();\n    }\n\n    UploadFile.prototype = {\n        init: function () {\n            this.fileList = [];\n            this.initContainer();\n            this.initUploader();\n        },\n        initContainer: function () {\n            this.$queue = this.$wrap.find('.filelist');\n        },\n        /* 初始化容器 */\n        initUploader: function () {\n            var _this = this,\n                $ = jQuery,    // just in case. Make sure it's not an other libaray.\n                $wrap = _this.$wrap,\n                // 图片容器\n                $queue = $wrap.find('.filelist'),\n                // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n                // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n                // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n                // 上传按钮\n                $filePickerBtn = $wrap.find('.filePickerBtn'),\n                // 上传按钮\n                $filePickerBlock = $wrap.find('.filePickerBlock'),\n                // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n                // 总体进度条\n                $progress = $statusBar.find('.progress').hide(),\n                // 添加的文件数量\n                fileCount = 0,\n                // 添加的文件总大小\n                fileSize = 0,\n                // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n                // 缩略图大小\n                thumbnailWidth = 113 * ratio,\n                thumbnailHeight = 113 * ratio,\n                // 可能有pedding, ready, uploading, confirm, done.\n                state = '',\n                // 所有文件的进度信息，key为file id\n                percentages = {},\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                        r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n                // WebUploader实例\n                uploader,\n                actionUrl = editor.getActionUrl(editor.getOpt('videoActionName')),\n                fileMaxSize = editor.getOpt('videoMaxSize'),\n                acceptExtensions = (editor.getOpt('videoAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, '');\n            ;\n\n            if (!WebUploader.Uploader.support()) {\n                $('#filePickerReady').after($('<div>').html(lang.errorNotSupport)).hide();\n                return;\n            } else if (!editor.getOpt('videoActionName')) {\n                $('#filePickerReady').after($('<div>').html(lang.errorLoadConfig)).hide();\n                return;\n            }\n\n            var uploaderOption = {\n                pick: {\n                    id: '#filePickerReady',\n                    label: lang.uploadSelectFile\n                },\n                swf: '../../third-party/webuploader/Uploader.swf',\n                server: actionUrl,\n                fileVal: editor.getOpt('videoFieldName'),\n                duplicate: true,\n                fileSingleSizeLimit: fileMaxSize,\n                headers: editor.getOpt('serverHeaders') || {},\n                compress: false\n            };\n            if(editor.getOpt('uploadServiceEnable')) {\n                uploaderOption.customUpload = function (file, callback) {\n                    editor.getOpt('uploadServiceUpload')('video', file, {\n                        success: function( res ) {\n                            callback.onSuccess(file, {_raw:JSON.stringify(res)});\n                        },\n                        error: function( err ) {\n                            callback.onError(file, err);\n                        },\n                        progress: function( percent ) {\n                            callback.onProgress(file, percent);\n                        }\n                    }, {\n                        from: 'video'\n                    });\n                };\n            }\n\n            uploader = _this.uploader = WebUploader.create(uploaderOption);\n            uploader.addButton({\n                id: '#filePickerBlock'\n            });\n            uploader.addButton({\n                id: '#filePickerBtn',\n                label: lang.uploadAddFile\n            });\n\n            setState('pedding');\n\n            // 当有文件添加进来时执行，负责view的创建\n            function addFile(file) {\n                var $li = $('<li id=\"' + file.id + '\">' +\n                        '<p class=\"title\">' + file.name + '</p>' +\n                        '<p class=\"imgWrap\"></p>' +\n                        '<p class=\"progress\"><span></span></p>' +\n                        '</li>'),\n\n                    $btns = $('<div class=\"file-panel\">' +\n                        '<span class=\"cancel\">' + lang.uploadDelete + '</span>' +\n                        '<span class=\"rotateRight\">' + lang.uploadTurnRight + '</span>' +\n                        '<span class=\"rotateLeft\">' + lang.uploadTurnLeft + '</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>').hide().appendTo($li),\n\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = lang.errorExceedSize;\n                                break;\n                            case 'interrupt':\n                                text = lang.errorInterrupt;\n                                break;\n                            case 'http':\n                                text = lang.errorHttp;\n                                break;\n                            case 'not_allow_type':\n                                text = lang.errorFileType;\n                                break;\n                            default:\n                                text = lang.errorUploadRetry;\n                                break;\n                        }\n                        $info.text(text).show();\n                    };\n\n                if (file.getStatus() === 'invalid') {\n                    showError(file.statusText);\n                } else {\n                    $wrap.text(lang.uploadPreview);\n                    if ('|png|jpg|jpeg|bmp|gif|'.indexOf('|' + file.ext.toLowerCase() + '|') == -1) {\n                        $wrap.empty().addClass('notimage').append('<i class=\"file-preview file-type-' + file.ext.toLowerCase() + '\"></i>' +\n                            '<span class=\"file-title\">' + file.name + '</span>');\n                    } else {\n                        if (browser.ie && browser.version <= 7) {\n                            $wrap.text(lang.uploadNoPreview);\n                        } else {\n                            uploader.makeThumb(file, function (error, src) {\n                                if (error || !src || (/^data:/.test(src) && browser.ie && browser.version <= 7)) {\n                                    $wrap.text(lang.uploadNoPreview);\n                                } else {\n                                    var $img = $('<img src=\"' + src + '\">');\n                                    $wrap.empty().append($img);\n                                    $img.on('error', function () {\n                                        $wrap.text(lang.uploadNoPreview);\n                                    });\n                                }\n                            }, thumbnailWidth, thumbnailHeight);\n                        }\n                    }\n                    percentages[file.id] = [file.size, 0];\n                    file.rotation = 0;\n\n                    /* 检查文件格式 */\n                    if (!file.ext || acceptExtensions.indexOf(file.ext.toLowerCase()) == -1) {\n                        showError('not_allow_type');\n                        uploader.removeFile(file);\n                    }\n                }\n\n                file.on('statuschange', function (cur, prev) {\n                    if (prev === 'progress') {\n                        $prgress.hide().width(0);\n                    } else if (prev === 'queued') {\n                        $li.off('mouseenter mouseleave');\n                        $btns.remove();\n                    }\n                    // 成功\n                    if (cur === 'error' || cur === 'invalid') {\n                        showError(file.statusText);\n                        percentages[file.id][1] = 1;\n                    } else if (cur === 'interrupt') {\n                        showError('interrupt');\n                    } else if (cur === 'queued') {\n                        percentages[file.id][1] = 0;\n                    } else if (cur === 'progress') {\n                        $info.hide();\n                        $prgress.css('display', 'block');\n                    } else if (cur === 'complete') {\n                    }\n\n                    $li.removeClass('state-' + prev).addClass('state-' + cur);\n                });\n\n                $li.on('mouseenter', function () {\n                    $btns.stop().animate({height: 30});\n                });\n                $li.on('mouseleave', function () {\n                    $btns.stop().animate({height: 0});\n                });\n\n                $btns.on('click', 'span', function () {\n                    var index = $(this).index(),\n                        deg;\n\n                    switch (index) {\n                        case 0:\n                            uploader.removeFile(file);\n                            return;\n                        case 1:\n                            file.rotation += 90;\n                            break;\n                        case 2:\n                            file.rotation -= 90;\n                            break;\n                    }\n\n                    if (supportTransition) {\n                        deg = 'rotate(' + file.rotation + 'deg)';\n                        $wrap.css({\n                            '-webkit-transform': deg,\n                            '-mos-transform': deg,\n                            '-o-transform': deg,\n                            'transform': deg\n                        });\n                    } else {\n                        $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    }\n\n                });\n\n                $li.insertBefore($filePickerBlock);\n            }\n\n            // 负责view的销毁\n            function removeFile(file) {\n                var $li = $('#' + file.id);\n                delete percentages[file.id];\n                updateTotalProgress();\n                $li.off().find('.file-panel').off().end().remove();\n            }\n\n            function updateTotalProgress() {\n                var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n                $.each(percentages, function (k, v) {\n                    total += v[0];\n                    loaded += v[0] * v[1];\n                });\n\n                percent = total ? loaded / total : 0;\n\n                spans.eq(0).text(Math.round(percent * 100) + '%');\n                spans.eq(1).css('width', Math.round(percent * 100) + '%');\n                updateStatus();\n            }\n\n            function setState(val, files) {\n\n                if (val != state) {\n\n                    var stats = uploader.getStats();\n\n                    $upload.removeClass('state-' + state);\n                    $upload.addClass('state-' + val);\n\n                    switch (val) {\n\n                        /* 未选择文件 */\n                        case 'pedding':\n                            $queue.addClass('element-invisible');\n                            $statusBar.addClass('element-invisible');\n                            $placeHolder.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.hide();\n                            uploader.refresh();\n                            break;\n\n                        /* 可以开始上传 */\n                        case 'ready':\n                            $placeHolder.addClass('element-invisible');\n                            $queue.removeClass('element-invisible');\n                            $statusBar.removeClass('element-invisible');\n                            $progress.hide();\n                            $info.show();\n                            $upload.text(lang.uploadStart);\n                            uploader.refresh();\n                            break;\n\n                        /* 上传中 */\n                        case 'uploading':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadPause);\n                            break;\n\n                        /* 暂停上传 */\n                        case 'paused':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadContinue);\n                            break;\n\n                        case 'confirm':\n                            $progress.show();\n                            $info.hide();\n                            $upload.text(lang.uploadStart);\n\n                            stats = uploader.getStats();\n                            if (stats.successNum && !stats.uploadFailNum) {\n                                setState('finish');\n                                return;\n                            }\n                            break;\n\n                        case 'finish':\n                            $progress.hide();\n                            $info.show();\n                            if (stats.uploadFailNum) {\n                                $upload.text(lang.uploadRetry);\n                            } else {\n                                $upload.text(lang.uploadStart);\n                            }\n                            break;\n                    }\n\n                    state = val;\n                    updateStatus();\n\n                }\n\n                if (!_this.getQueueCount()) {\n                    $upload.addClass('disabled')\n                } else {\n                    $upload.removeClass('disabled')\n                }\n\n            }\n\n            function updateStatus() {\n                var text = '', stats;\n\n                if (state === 'ready') {\n                    text = lang.updateStatusReady.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize));\n                } else if (state === 'confirm') {\n                    stats = uploader.getStats();\n                    if (stats.uploadFailNum) {\n                        text = lang.updateStatusConfirm.replace('_', stats.successNum).replace('_', stats.successNum);\n                    }\n                } else {\n                    stats = uploader.getStats();\n                    text = lang.updateStatusFinish.replace('_', fileCount).replace('_KB', WebUploader.formatSize(fileSize)).replace('_', stats.successNum);\n\n                    if (stats.uploadFailNum) {\n                        text += lang.updateStatusError.replace('_', stats.uploadFailNum);\n                    }\n                }\n\n                $info.html(text);\n            }\n\n            uploader.on('fileQueued', function (file) {\n                fileCount++;\n                fileSize += file.size;\n\n                if (fileCount === 1) {\n                    $placeHolder.addClass('element-invisible');\n                    $statusBar.show();\n                }\n\n                addFile(file);\n            });\n\n            uploader.on('fileDequeued', function (file) {\n                fileCount--;\n                fileSize -= file.size;\n\n                removeFile(file);\n                updateTotalProgress();\n            });\n\n            uploader.on('filesQueued', function (file) {\n                if (!uploader.isInProgress() && (state == 'pedding' || state == 'finish' || state == 'confirm' || state == 'ready')) {\n                    setState('ready');\n                }\n                updateTotalProgress();\n            });\n\n            uploader.on('all', function (type, files) {\n                switch (type) {\n                    case 'uploadFinished':\n                        setState('confirm', files);\n                        break;\n                    case 'startUpload':\n                        /* 添加额外的GET参数 */\n                        var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n                            url = utils.formatUrl(actionUrl + (actionUrl.indexOf('?') == -1 ? '?' : '&') + 'encode=utf-8&' + params);\n                        uploader.option('server', url);\n                        setState('uploading', files);\n                        break;\n                    case 'stopUpload':\n                        setState('paused', files);\n                        break;\n                }\n            });\n\n            uploader.on('uploadBeforeSend', function (file, data, header) {\n                //这里可以通过data对象添加POST参数\n                if (actionUrl.toLowerCase().indexOf('jsp') != -1) {\n                    header['X_Requested_With'] = 'XMLHttpRequest';\n                }\n            });\n\n            uploader.on('uploadProgress', function (file, percentage) {\n                var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n                $percent.css('width', percentage * 100 + '%');\n                percentages[file.id][1] = percentage;\n                updateTotalProgress();\n            });\n\n            uploader.on('uploadSuccess', function (file, ret) {\n                var $file = $('#' + file.id);\n                try {\n                    var responseText = (ret._raw || ret),\n                        json = utils.str2json(responseText);\n                    json = editor.getOpt('serverResponsePrepare')(json);\n                    if (json.state == 'SUCCESS') {\n                        uploadVideoList.push({\n                            'url': json.url,\n                            'type': json.type,\n                            'original': json.original\n                        });\n                        $file.append('<span class=\"success\"></span>');\n                        // 触发上传视频事件\n                        editor.fireEvent(\"uploadsuccess\", {\n                            res: json,\n                            type: 'video'\n                        });\n                    } else {\n                        $file.find('.error').text(json.state).show();\n                    }\n                } catch (e) {\n                    $file.find('.error').text(lang.errorServerUpload).show();\n                }\n            });\n\n            uploader.on('uploadError', function (file, code) {\n            });\n            uploader.on('error', function (code, param1, param2) {\n                if (code === 'F_EXCEED_SIZE') {\n                    editor.getOpt('tipError')(lang.errorExceedSize + ' ' + (param1 / 1024 / 1024).toFixed(1) + 'MB');\n                } else {\n                    console.log('error', code, param1, param2);\n                }\n            });\n            uploader.on('uploadComplete', function (file, ret) {\n            });\n\n            $upload.on('click', function () {\n                if ($(this).hasClass('disabled')) {\n                    return false;\n                }\n\n                if (state === 'ready') {\n                    uploader.upload();\n                } else if (state === 'paused') {\n                    uploader.upload();\n                } else if (state === 'uploading') {\n                    uploader.stop();\n                }\n            });\n\n            $upload.addClass('state-' + state);\n            updateTotalProgress();\n        },\n        getQueueCount: function () {\n            var file, i, status, readyFile = 0, files = this.uploader.getFiles();\n            for (i = 0; file = files[i++];) {\n                status = file.getStatus();\n                if (status == 'queued' || status == 'uploading' || status == 'progress') readyFile++;\n            }\n            return readyFile;\n        },\n        refresh: function () {\n            this.uploader.refresh();\n        }\n    };\n\n})();\n"
  },
  {
    "path": "dialogs/wordimage/wordimage.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n    \"http://www.w3.org/TR/html4/loose.dtd\">\n<html>\n<head>\n    <title></title>\n    <meta http-equiv=\"Content-Type\" content=\"text/html;charset=utf-8\"/>\n    <script type=\"text/javascript\" src=\"../internal.js?{timestamp}\"></script>\n    <style type=\"text/css\">\n        .wrapper {\n            width: 600px;\n            padding: 10px;\n            height: 352px;\n            overflow: hidden;\n            position: relative;\n            border-bottom: 1px solid #F2F2F2\n        }\n\n        .wrapper .image-info {\n            display: flex;\n            align-items: center;\n        }\n\n        .wrapper .image-info .input {\n            flex-grow: 1;\n            display: flex;\n        }\n\n        .wrapper .image-info .input input {\n            display: block;\n            border: 1px solid #CCC;\n            height: 23px;\n            border-radius: 3px;\n            flex-grow: 1;\n            outline: none;\n        }\n\n        .wrapper .image-info .copy {\n            width: 60px;\n            cursor: pointer;\n            margin: 0 5px;\n        }\n\n        .wrapper .image-info .copy div {\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action {\n            width: 100px;\n            cursor: pointer;\n        }\n\n        .wrapper .image-info .action .save-from-local {\n            position: relative;\n            height: 30px;\n            font-size: 12px;\n            line-height: 28px;\n            cursor: pointer;\n            border-radius: 4px;\n            text-align: center;\n            background-color: #F8F8F8;\n            border: 1px solid #EEE;\n        }\n\n        .wrapper .image-info .action .save-from-local input {\n            position: absolute;\n            left: 0;\n            top: 0;\n            opacity: 0;\n            cursor: pointer;\n        }\n\n        .wrapper .image-manual {\n            background: #EEE;\n            padding: 10px;\n            border-radius: 5px;\n            margin-top: 10px;\n            line-height: 2;\n        }\n\n        .wrapper .image-manual .title {\n            font-weight: bold;\n            font-size: 120%;\n        }\n\n        .wrapper .image-manual .body {\n        }\n    </style>\n</head>\n<body>\n<div class=\"wrapper\">\n    <div class=\"image-info\">\n        <div class=\"input\">\n            <input type=\"text\" id=\"fileUrl\"/>\n        </div>\n        <div class=\"copy\">\n            <div id=\"copyButton\">复制路径</div>\n        </div>\n        <div class=\"action\">\n            <div class=\"save-from-local\">\n                <div>本地选择保存</div>\n                <input type=\"file\" id=\"saveFile\" multiple=true/>\n            </div>\n        </div>\n    </div>\n    <div class=\"image-tip\"></div>\n    <div class=\"image-manual\">\n        <div class=\"title\">\n            Windows使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n        <div class=\"title\">\n            Mac使用教程\n        </div>\n        <div class=\"body\">\n            <p>1、点击复制地址按钮</p>\n            <p>2、点击本地选择文件，按快捷 Command+Shift+G ，粘贴剪切板的路径到文件选择路径</p>\n            <p>3、点击确定</p>\n        </div>\n    </div>\n</div>\n<script src=\"../../third-party/jquery-1.10.2.js?{timestamp}\"></script>\n<script src=\"../../third-party/webuploader/webuploader.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"../../third-party/clipboard/clipboard.js?{timestamp}\"></script>\n<script type=\"text/javascript\" src=\"wordimage.js?{timestamp}\"></script>\n<script type=\"text/javascript\">\n    editor.setOpt({\n        wordImageFieldName: \"upfile\",\n        compressSide: 0,\n        maxImageSideLength: 900\n    });\n    //全局变量\n    var imageUrls = [],          //用于保存从服务器返回的图片信息数组\n        selectedImageCount = 0,  //当前已选择的但未上传的图片数量\n        optImageUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        optImageFieldName = editor.getOpt('imageFieldName'),\n        optImageCompressBorder = editor.getOpt('imageCompressEnable') ? editor.getOpt('imageCompressBorder') : null,\n        maxSize = editor.getOpt('imageMaxSize') / 1024 / 1024,\n        extension = editor.getOpt('imageAllowFiles').join(';').replace(/\\./g, '*.');\n\n    /* 添加额外的GET参数 */\n    var params = utils.serializeParam(editor.queryCommandValue('serverparam')) || '',\n        urlWidthParams = optImageUrl + (optImageUrl.indexOf('?') == -1 ? '?' : '&') + params;\n\n    var uploader,\n        actionUrl = editor.getActionUrl(editor.getOpt('imageActionName')),\n        acceptExtensions = (editor.getOpt('imageAllowFiles') || []).join('').replace(/\\./g, ',').replace(/^[,]/, ''),\n        imageMaxSize = editor.getOpt('imageMaxSize'),\n        imageCompressBorder = editor.getOpt('imageCompressBorder');\n    uploader = WebUploader.create({\n        accept: {\n            title: 'Images',\n            extensions: acceptExtensions,\n            mimeTypes: 'image/*'\n        },\n        swf: '../../third-party/webuploader/Uploader.swf',\n        server: actionUrl,\n        fileVal: editor.getOpt('imageFieldName'),\n        duplicate: true,\n        fileSingleSizeLimit: imageMaxSize,    // 默认 2 M\n        threads: 1,\n        compress: editor.getOpt('imageCompressEnable') ? {\n            width: imageCompressBorder,\n            height: imageCompressBorder,\n            // 图片质量，只有type为`image/jpeg`的时候才有效。\n            quality: 90,\n            // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n            allowMagnify: false,\n            // 是否允许裁剪。\n            crop: false,\n            // 是否保留头部meta信息。\n            preserveHeaders: true\n        } : false\n    });\n    uploader.on('uploadSuccess', function (file, res) {\n        res = editor.getOpt('serverResponsePrepare')(res);\n        if ('state' in res) {\n            if (res.state === 'SUCCESS') {\n                if (res.url) {\n                    imageUrls.push({\n                        name: file.name,\n                        url: res.url,\n                        title: '',\n                    });\n                    $('.image-tip').html('<span style=\"color:#139213;\">图片' + imageUrls.length + '(' + file.name + ')' + '转存成功</span>');\n                } else {\n                    $('.image-tip').html('上传失败:' + JSON.stringify(res))\n                }\n                // 触发上传附件事件\n                editor.fireEvent(\"uploadsuccess\", {\n                    res: res,\n                    type: 'image'\n                });\n            } else {\n                $('.image-tip').html('上传失败:' + JSON.stringify(res))\n            }\n        } else {\n            $('.image-tip').html('上传失败:' + JSON.stringify(res))\n        }\n    });\n    uploader.on('uploadFinished', function () {\n        $('.image-tip').html('<span style=\"color:#139213;\">转存成功，请提交确认</span>');\n    });\n    utils.domReady(function () {\n        var options = {};\n        var callbacks = {};\n        wordImage.init(options, callbacks);\n    });\n</script>\n\n</body>\n</html>\n"
  },
  {
    "path": "dialogs/wordimage/wordimage.js",
    "content": "/**\n * Created by JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-1-30\n * Time: 下午12:50\n * To change this template use File | Settings | File Templates.\n */\nvar wordImage = {};\nvar g = $G, flashObj, flashContainer;\n\nwordImage.init = function (opt, callbacks) {\n    showLocalPath(\"fileUrl\");\n    createCopyButton(\"copyButton\", \"fileUrl\");\n    addUploadButtonListener();\n    addOkListener();\n};\n\nfunction addUploadButtonListener() {\n    g('saveFile').addEventListener('change', function () {\n        $('.image-tip').html('正在转存，请稍后...');\n        uploader.addFile(this.files);\n        uploader.upload();\n    });\n}\n\n\nfunction addOkListener() {\n    dialog.onok = function () {\n        //console.log('imageUrls',imageUrls);\n        if (!imageUrls.length) return;\n        var urlPrefix = editor.getOpt('imageUrlPrefix'),\n            images = domUtils.getElementsByTagName(editor.document, \"img\");\n        editor.fireEvent('saveScene');\n        // console.log('images',images,imageUrls);\n        for (var i = 0, img; img = images[i++];) {\n            var src = img.getAttribute(\"data-word-image\");\n            if (!src) continue;\n            for (var j = 0, url; url = imageUrls[j++];) {\n                // console.log('url',src, url);\n                if (src.indexOf(url.name.replace(\" \", \"\")) != -1) {\n                    img.src = urlPrefix + url.url;\n                    img.setAttribute(\"_src\", urlPrefix + url.url);  //同时修改\"_src\"属性\n                    img.setAttribute(\"title\", url.title);\n                    domUtils.removeAttributes(img, [\"data-word-image\", \"style\", \"width\", \"height\"]);\n                    editor.fireEvent(\"selectionchange\");\n                    break;\n                }\n            }\n        }\n        editor.fireEvent('saveScene');\n        // hideFlash();\n    };\n    dialog.oncancel = function () {\n        //hideFlash();\n    };\n}\n\nfunction showLocalPath(id) {\n    //单张编辑\n    var img = editor.selection.getRange().getClosedNode();\n    var images = editor.execCommand('wordimage');\n    if (images.length == 1 || img && img.tagName == 'IMG') {\n        g(id).value = images[0];\n        return;\n    }\n    var path = images[0];\n    var leftSlashIndex = path.lastIndexOf(\"/\") || 0,  //不同版本的doc和浏览器都可能影响到这个符号，故直接判断两种\n        rightSlashIndex = path.lastIndexOf(\"\\\\\") || 0,\n        separater = leftSlashIndex > rightSlashIndex ? \"/\" : \"\\\\\";\n\n    path = path.substring(0, path.lastIndexOf(separater) + 1);\n    g(id).value = path;\n    //增提醒用户选择哪些文件\n    var names = [];\n    for (var i = 0, len = images.length; i < len; i++) {\n        var img = images[i];\n        names.push(img.substring(img.lastIndexOf(separater) + 1, img.length));\n    }\n    $('.image-tip').html('<span style=\"color:#ff0000;\">请选择:' + names.join(\"、\") + \"共\" + images.length + '个文件</span>');\n}\n\nfunction createCopyButton(id, dataFrom) {\n    var url = g(dataFrom).value;\n    if (url.startsWith(\"file:////\")) {\n        url = url.substring(8);\n    }\n    url = decodeURI(url);\n    g(id).setAttribute(\"data-clipboard-text\", url);\n    var clipboard = new Clipboard('[data-clipboard-text]')\n    clipboard.on('success', function (e) {\n        g('copyButton').innerHTML = '复制成功';\n    });\n}\n"
  },
  {
    "path": "lang/en/en.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午6:57\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['en'] = {\n    'labelMap': {\n        'anchor': 'Anchor',\n        'undo': 'Undo',\n        'redo': 'Redo',\n        'bold': 'Bold',\n        'indent': 'Indent',\n        'italic': 'Italic',\n        'underline': 'Underline',\n        'strikethrough': 'Strikethrough',\n        'subscript': 'SubScript',\n        'fontborder': 'text border',\n        'superscript': 'SuperScript',\n        'formatmatch': 'Format Match',\n        'source': 'Source',\n        'blockquote': 'BlockQuote',\n        'pasteplain': 'PastePlain',\n        'selectall': 'SelectAll',\n        'print': 'Print',\n        'preview': 'Preview',\n        'horizontal': 'Horizontal',\n        'removeformat': 'RemoveFormat',\n        'time': 'Time',\n        'date': 'Date',\n        'unlink': 'Unlink',\n        'insertrow': 'InsertRow',\n        'insertcol': 'InsertCol',\n        'mergeright': 'MergeRight',\n        'mergedown': 'MergeDown',\n        'deleterow': 'DeleteRow',\n        'deletecol': 'DeleteCol',\n        'splittorows': 'SplitToRows',\n        'insertcode': 'insert code',\n        'splittocols': 'SplitToCols',\n        'splittocells': 'SplitToCells',\n        'deletecaption': 'DeleteCaption',\n        'inserttitle': 'InsertTitle',\n        'mergecells': 'MergeCells',\n        'deletetable': 'DeleteTable',\n        'cleardoc': 'Clear',\n        'contentimport': 'Content Import',\n        'ai': 'AI',\n        'insertparagraphbeforetable': \"InsertParagraphBeforeTable\",\n        'fontfamily': 'FontFamily',\n        'fontsize': 'FontSize',\n        'paragraph': 'Paragraph',\n        'simpleupload': 'Single Image',\n        'insertimage': 'Multi Image',\n        'edittable': 'Edit Table',\n        'edittd': 'Edit Td',\n        'link': 'Link',\n        'emotion': 'Emotion',\n        'spechars': 'Spechars',\n        'searchreplace': 'SearchReplace',\n        'insertvideo': 'Video',\n        'help': 'Help',\n        'justifyleft': 'JustifyLeft',\n        'justifyright': 'JustifyRight',\n        'justifycenter': 'JustifyCenter',\n        'justifyjustify': 'Justify',\n        'forecolor': 'FontColor',\n        'backcolor': 'BackColor',\n        'insertorderedlist': 'OL',\n        'insertunorderedlist': 'UL',\n        'fullscreen': 'FullScreen',\n        'directionalityltr': 'EnterFromLeft',\n        'directionalityrtl': 'EnterFromRight',\n        'rowspacingtop': 'RowSpacingTop',\n        'rowspacingbottom': 'RowSpacingBottom',\n        'pagebreak': 'PageBreak',\n        'insertframe': 'Iframe',\n        'imagenone': 'Default',\n        'imageleft': 'ImageLeft',\n        'imageright': 'ImageRight',\n        'attachment': 'Attachment',\n        'imagecenter': 'ImageCenter',\n        'wordimage': 'WordImage',\n        'formula': 'Formula',\n        'lineheight': 'LineHeight',\n        'letterspacing': 'LetterSpacing',\n        'edittip': 'EditTip',\n        'customstyle': 'CustomStyle',\n        'scrawl': 'Scrawl',\n        'autotypeset': 'AutoTypeset',\n        'touppercase': 'UpperCase',\n        'tolowercase': 'LowerCase',\n        'template': 'Template',\n        'background': 'Background',\n        'inserttable': 'InsertTable',\n    },\n    'autosave': {\n        'autoRestoreTip': 'Has been recovered from draft'\n    },\n    'insertorderedlist': {\n        'num': '1,2,3...',\n        'num1': '1),2),3)...',\n        'num2': '(1),(2),(3)...',\n        'cn': '一,二,三....',\n        'cn1': '一),二),三)....',\n        'cn2': '(一),(二),(三)....',\n        'decimal': '1,2,3...',\n        'lower-alpha': 'a,b,c...',\n        'lower-roman': 'i,ii,iii...',\n        'upper-alpha': 'A,B,C...',\n        'upper-roman': 'I,II,III...'\n    },\n    'insertunorderedlist': {\n        'circle': '○ Circle',\n        'disc': '● Circle dot',\n        'square': '■ Rectangle ',\n        'dash': '－ Dash',\n        'dot': '。dot'\n    },\n    'paragraph': {\n        'p': 'Paragraph',\n        'h1': 'Title 1',\n        'h2': 'Title 2',\n        'h3': 'Title 3',\n        'h4': 'Title 4',\n        'h5': 'Title 5',\n        'h6': 'Title 6'\n    },\n    'fontfamily': {\n        'default': 'Default',\n        'songti': 'Sim Sun',\n        'kaiti': 'Sim Kai',\n        'heiti': 'Sim Hei',\n        'lishu': 'Sim Li',\n        'yahei': 'Microsoft YaHei',\n        // 'andaleMono':'Andale Mono',\n        'arial': 'Arial',\n        // 'arialBlack':'Arial Black',\n        // 'comicSansMs':'Comic Sans MS',\n        // 'impact':'Impact',\n        'timesNewRoman': 'Times New Roman'\n    },\n    'customstyle': {\n        'tc': 'Title center',\n        'tl': 'Title left',\n        'im': 'Important',\n        'hi': 'Highlight'\n    },\n    'autoupload': {\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading': \"loading...\",\n        'loadError': \"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'simpleupload': {\n        'exceedSizeError': 'File Size Exceed',\n        'exceedTypeError': 'File Type Not Allow',\n        'jsonEncodeError': 'Server Return Format Error',\n        'loading': \"loading...\",\n        'loadError': \"load error\",\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n    },\n    'elementPathTip': \"Path\",\n    'wordCountTip': \"Word Count\",\n    'wordCountMsg': '{#count} characters entered,{#leave} left. ',\n    'wordOverFlowMsg': '<span style=\"color:red;\">The number of characters has exceeded allowable maximum values, the server may refuse to save!</span>',\n    'ok': \"OK\",\n    'cancel': \"Cancel\",\n    'closeDialog': \"closeDialog\",\n    'tableDrag': \"You must import the file uiUtils.js before drag! \",\n    'autofloatMsg': \"The plugin AutoFloat depends on EditorUI!\",\n    'loadconfigError': 'Get server config error.',\n    'loadconfigFormatError': 'Server config format error.',\n    'loadconfigHttpError': 'Get server config http error.',\n    'insertcode': {\n        'as3': 'ActionScript 3',\n        'bash': 'Bash/Shell',\n        'cpp': 'C/C++',\n        'css': 'CSS',\n        'cf': 'ColdFusion',\n        'c#': 'C#',\n        'delphi': 'Delphi',\n        'diff': 'Diff',\n        'erlang': 'Erlang',\n        'groovy': 'Groovy',\n        'html': 'HTML',\n        'java': 'Java',\n        'jfx': 'JavaFX',\n        'js': 'JavaScript',\n        'pl': 'Perl',\n        'php': 'PHP',\n        'plain': 'Plain Text',\n        'ps': 'PowerShell',\n        'python': 'Python',\n        'ruby': 'Ruby',\n        'scala': 'Scala',\n        'sql': 'SQL',\n        'vb': 'Visual Basic',\n        'xml': 'XML'\n    },\n    'confirmClear': \"Do you confirm to clear the Document?\",\n    'contextMenu': {\n        'delete': \"Delete\",\n        'selectall': \"Select all\",\n        'deletecode': \"Delete Code\",\n        'cleardoc': \"Clear Document\",\n        'confirmclear': \"Do you confirm to clear the Document?\",\n        'unlink': \"Unlink\",\n        'paragraph': \"Paragraph\",\n        'edittable': \"Table property\",\n        'aligncell': 'Align cell',\n        'aligntable': 'Table alignment',\n        'tableleft': 'Left float',\n        'tablecenter': 'Center',\n        'tableright': 'Right float',\n        'aligntd': 'Cell alignment',\n        'edittd': \"Cell property\",\n        'setbordervisible': 'set table edge visible',\n        'table': \"Table\",\n        'justifyleft': 'Justify Left',\n        'justifyright': 'Justify Right',\n        'justifycenter': 'Justify Center',\n        'justifyjustify': 'Default',\n        'deletetable': \"Delete table\",\n        'insertparagraphbefore': \"InsertedBeforeLine\",\n        'insertparagraphafter': 'InsertedAfterLine',\n        'inserttable': 'Insert table',\n        'insertcaption': 'Insert caption',\n        'deletecaption': 'Delete Caption',\n        'inserttitle': 'Insert Title',\n        'deletetitle': 'Delete Title',\n        'inserttitlecol': 'Insert Title Col',\n        'deletetitlecol': 'Delete Title Col',\n        'averageDiseRow': 'AverageDise Row',\n        'averageDisCol': 'AverageDis Col',\n        'deleterow': \"Delete row\",\n        'deletecol': \"Delete col\",\n        'insertrow': \"Insert row\",\n        'insertcol': \"Insert col\",\n        'insertrownext': 'Insert Row Next',\n        'insertcolnext': 'Insert Col Next',\n        'mergeright': \"Merge right\",\n        'mergeleft': \"Merge left\",\n        'mergedown': \"Merge down\",\n        'mergecells': \"Merge cells\",\n        'splittocells': \"Split to cells\",\n        'splittocols': \"Split to Cols\",\n        'splittorows': \"Split to Rows\",\n        'tablesort': 'Table sorting',\n        'enablesort': 'Sorting Enable',\n        'disablesort': 'Sorting Disable',\n        'reversecurrent': 'Reverse current',\n        'orderbyasc': 'Order By ASCII',\n        'reversebyasc': 'Reverse By ASCII',\n        'orderbynum': 'Order By Num',\n        'reversebynum': 'Reverse By Num',\n        'borderbk': 'Border shading',\n        'setcolor': 'interlaced color',\n        'unsetcolor': 'Cancel interlacedcolor',\n        'setbackground': 'Background interlaced',\n        'unsetbackground': 'Cancel Bk interlaced',\n        'redandblue': 'Blue and red',\n        'threecolorgradient': 'Three-color gradient',\n        'copy': \"Copy(Ctrl + c)\",\n        'copymsg': \"Browser does not support. Please use 'Ctrl + c' instead!\",\n        'paste': \"Paste(Ctrl + v)\",\n        'pastemsg': \"Browser does not support. Please use 'Ctrl + v' instead!\"\n    },\n    'copymsg': \"Browser does not support. Please use 'Ctrl + c' instead!\",\n    'pastemsg': \"Browser does not support. Please use 'Ctrl + v' instead!\",\n    'anchorMsg': \"Link\",\n    'clearColor': 'Clear',\n    'standardColor': 'Standard color',\n    'themeColor': 'Theme color',\n    'property': 'Property',\n    'default': 'Default',\n    'modify': 'Modify',\n    'save': 'Save',\n    'justifyleft': 'Justify Left',\n    'justifyright': 'Justify Right',\n    'justifycenter': 'Justify Center',\n    'justify': 'Default',\n    'clear': 'Clear',\n    'delete': 'Delete',\n    'clickToUpload': \"Click to upload\",\n    'unset': 'Language hasn\\'t been set!',\n    't_row': 'row',\n    't_col': 'col',\n    'pasteOpt': 'Paste Option',\n    'pasteSourceFormat': \"Keep Source Formatting\",\n    'tagFormat': 'Keep tag',\n    'pasteTextFormat': 'Keep Text only',\n    'more': 'More',\n    'autoTypeSet': {\n        'mergeLine': \"Merge empty line\",\n        'delLine': \"Del empty line\",\n        'removeFormat': \"Remove format\",\n        'indent': \"Indent\",\n        'alignment': \"Alignment\",\n        'imageFloat': \"Image float\",\n        'removeFontsize': \"Remove font size\",\n        'removeFontFamily': \"Remove fontFamily\",\n        'removeHtml': \"Remove redundant HTML code\",\n        'pasteFilter': \"Paste filter\",\n        'run': \"Done\",\n        'symbol': 'Symbol Conversion',\n        'bdc2sb': 'Full-width to Half-width',\n        'tobdc': 'Half-width to Full-width'\n    },\n\n    'background': {\n        'static': {\n            'lang_background_normal': 'Normal',\n            'lang_background_local': 'Online',\n            'lang_background_set': 'Background Set',\n            'lang_background_none': 'No Background',\n            'lang_background_colored': 'Colored Background',\n            'lang_background_color': 'Color Set',\n            'lang_background_netimg': 'Net-Image',\n            'lang_background_align': 'Align Type',\n            'lang_background_position': 'Position',\n            'repeatType': {'options': [\"Center\", \"Repeat-x\", \"Repeat-y\", \"Tile\", \"Custom\"]}\n        },\n        'noUploadImage': \"No pictures has been uploaded！\",\n        'toggleSelect': 'Change the active state by click!\\n Image Size: '\n    },\n    //===============dialog i18N=======================\n    'insertimage': {\n        'static': {\n            'lang_tab_remote': \"Insert\",\n            'lang_tab_upload': \"Local\",\n            'lang_tab_online': \"Manager\",\n            'lang_tab_search': \"Search\",\n            'lang_input_url': \"Address:\",\n            'lang_input_size': \"Size:\",\n            'lang_input_width': \"Width\",\n            'lang_input_height': \"Height\",\n            'lang_input_border': \"Border:\",\n            'lang_input_vhspace': \"Margins:\",\n            'lang_input_title': \"Title:\",\n            'lang_input_align': 'Image Float Style:',\n            'lang_imgLoading': \"Loading...\",\n            'lang_start_upload': \"Start Upload\",\n            'lock': {'title': \"Lock rate\"},\n            'searchType': {'title': \"ImageType\", 'options': [\"News\", \"Wallpaper\", \"emotions\", \"photo\"]},\n            'searchTxt': {'value': \"Enter the search keyword!\"},\n            'searchBtn': {'value': \"Search\"},\n            'searchReset': {'value': \"Clear\"},\n            'noneAlign': {'title': 'None Float'},\n            'leftAlign': {'title': 'Left Float'},\n            'rightAlign': {'title': 'Right Float'},\n            'centerAlign': {'title': 'Center In A Line'}\n        },\n        'uploadSelectFile': 'Select File',\n        'uploadAddFile': 'Add File',\n        'uploadStart': 'Start Upload',\n        'uploadPause': 'Pause Upload',\n        'uploadContinue': 'Continue Upload',\n        'uploadRetry': 'Retry Upload',\n        'uploadDelete': 'Delete',\n        'uploadTurnLeft': 'Turn Left',\n        'uploadTurnRight': 'Turn Right',\n        'uploadPreview': 'Doing Preview',\n        'uploadNoPreview': 'Can Not Preview',\n        'updateStatusReady': 'Selected _ pictures, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ pictures (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize': 'File Size Exceed',\n        'errorFileType': 'File Type Not Allow',\n        'errorInterrupt': 'File Upload Interrupted',\n        'errorUploadRetry': 'Upload Error, Please Retry.',\n        'errorHttp': 'Http Error',\n        'errorServerUpload': 'Server Result Error.',\n        'remoteLockError': \"Cannot Lock the Proportion between width and height\",\n        'numError': \"Please enter the correct Num. e.g 123,400\",\n        'imageUrlError': \"The image format may be wrong!\",\n        'imageLoadError': \"Error,please check the network or URL！\",\n        'searchRemind': \"Enter the search keyword!\",\n        'searchLoading': \"Image is loading,please wait...\",\n        'searchRetry': \" Sorry,can't find the image,please try again!\"\n    },\n    'attachment': {\n        'static': {\n            'lang_tab_upload': 'Upload',\n            'lang_tab_online': 'Online',\n            'lang_start_upload': \"Start upload\",\n            'lang_drop_remind': \"You can drop files here, a single maximum of 300 files\"\n        },\n        'uploadSelectFile': 'Select File',\n        'uploadAddFile': 'Add File',\n        'uploadStart': 'Start Upload',\n        'uploadPause': 'Pause Upload',\n        'uploadContinue': 'Continue Upload',\n        'uploadRetry': 'Retry Upload',\n        'uploadDelete': 'Delete',\n        'uploadTurnLeft': 'Turn Left',\n        'uploadTurnRight': 'Turn Right',\n        'uploadPreview': 'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize': 'File Size Exceed',\n        'errorFileType': 'File Type Not Allow',\n        'errorInterrupt': 'File Upload Interrupted',\n        'errorUploadRetry': 'Upload Error, Please Retry.',\n        'errorHttp': 'Http Error',\n        'errorServerUpload': 'Server Result Error.'\n    },\n\n    'insertvideo': {\n        'static': {\n            'lang_tab_insertV': \"Video\",\n            'lang_tab_searchV': \"Search\",\n            'lang_tab_uploadV': \"Upload\",\n            'lang_video_url': \" URL \",\n            'lang_video_size': \"Video Size\",\n            'lang_videoW': \"Width\",\n            'lang_videoH': \"Height\",\n            'lang_alignment': \"Alignment\",\n            'videoSearchTxt': {'value': \"Enter the search keyword!\"},\n            'videoType': {'options': [\"All\", \"Hot\", \"Entertainment\", \"Funny\", \"Sports\", \"Science\", \"variety\"]},\n            'videoSearchBtn': {'value': \"Search in Baidu\"},\n            'videoSearchReset': {'value': \"Clear result\"},\n\n            'lang_input_fileStatus': ' No file uploaded!',\n            'startUpload': {'style': \"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size': \"Video Size\",\n            'lang_upload_width': \"Width\",\n            'lang_upload_height': \"Height\",\n            'lang_upload_alignment': \"Alignment\",\n            'lang_format_advice': \"Recommends mp4 format.\"\n        },\n        'numError': \"Please enter the correct Num. e.g 123,400\",\n        'floatLeft': \"Float left\",\n        'floatRight': \"Float right\",\n        'default': \"Default\",\n        'block': \"Display in block\",\n        'urlError': \"The video url format may be wrong!\",\n        'loading': \" &nbsp;The video is loading, please wait…\",\n        'clickToSelect': \"Click to select\",\n        'goToSource': 'Visit source video ',\n        'noVideo': \" &nbsp; &nbsp;Sorry,can't find the video,please try again!\",\n\n        'browseFiles': 'Open files',\n        'uploadSuccess': 'Upload Successful!',\n        'delSuccessFile': 'Remove from the success of the queue',\n        'delFailSaveFile': 'Remove the save failed file',\n        'statusPrompt': ' file(s) uploaded! ',\n        'flashVersionError': 'The current Flash version is too low, please update FlashPlayer,then try again!',\n        'flashLoadingError': 'The Flash failed loading! Please check the path or network state',\n        'fileUploadReady': 'Wait for uploading...',\n        'delUploadQueue': 'Remove from the uploading queue ',\n        'limitPrompt1': 'Can not choose more than single',\n        'limitPrompt2': 'file(s)！Please choose again！',\n        'delFailFile': 'Remove failure file',\n        'fileSizeLimit': 'File size exceeds the limit！',\n        'emptyFile': 'Can not upload an empty file！',\n        'fileTypeError': 'File type error！',\n        'unknownError': 'Unknown error！',\n        'fileUploading': 'Uploading,please wait...',\n        'cancelUpload': 'Cancel upload',\n        'netError': 'Network error',\n        'failUpload': 'Upload failed',\n        'serverIOError': 'Server IO error！',\n        'noAuthority': 'No Permission！',\n        'fileNumLimit': 'Upload limit to the number',\n        'failCheck': 'Authentication fails, the upload is skipped!',\n        'fileCanceling': 'Cancel, please wait...',\n        'stopUploading': 'Upload has stopped...',\n\n        'uploadSelectFile': 'Select File',\n        'uploadAddFile': 'Add File',\n        'uploadStart': 'Start Upload',\n        'uploadPause': 'Pause Upload',\n        'uploadContinue': 'Continue Upload',\n        'uploadRetry': 'Retry Upload',\n        'uploadDelete': 'Delete',\n        'uploadTurnLeft': 'Turn Left',\n        'uploadTurnRight': 'Turn Right',\n        'uploadPreview': 'Doing Preview',\n        'updateStatusReady': 'Selected _ files, total _KB.',\n        'updateStatusConfirm': '_ uploaded successfully and _ upload failed',\n        'updateStatusFinish': 'Total _ files (_KB), _  uploaded successfully',\n        'updateStatusError': ' and _ upload failed',\n        'errorNotSupport': 'WebUploader does not support the browser you are using. Please upgrade your browser or flash player',\n        'errorLoadConfig': 'Server config not loaded, upload can not work.',\n        'errorExceedSize': 'File Size Exceed',\n        'errorFileType': 'File Type Not Allow',\n        'errorInterrupt': 'File Upload Interrupted',\n        'errorUploadRetry': 'Upload Error, Please Retry.',\n        'errorHttp': 'Http Error',\n        'errorServerUpload': 'Server Result Error.'\n    },\n    'template': {\n        'static': {\n            'lang_template_bkcolor': 'Background Color',\n            'lang_template_clear': 'Keep Content',\n            'lang_template_select': 'Select Template'\n        },\n        'blank': \"Blank\",\n        'blog': \"Blog\",\n        'resume': \"Resume\",\n        'richText': \"Rich Text\",\n        'scrPapers': \"Scientific Papers\"\n    },\n    scrawl: {\n        'static': {\n            'lang_input_previousStep': \"Previous\",\n            'lang_input_nextsStep': \"Next\",\n            'lang_input_clear': 'Clear',\n            'lang_input_addPic': 'AddImage',\n            'lang_input_ScalePic': 'ScaleImage',\n            'lang_input_removePic': 'RemoveImage',\n            'J_imgTxt': {title: 'Add background image'}\n        },\n        'noScarwl': \"No paint, a white paper...\",\n        'scrawlUpLoading': \"Image is uploading, please wait...\",\n        'continueBtn': \"Try again\",\n        'imageError': \"Image failed to load!\",\n        'backgroundUploading': 'Image is uploading,please wait...'\n    },\n    anchor: {\n        'static': {\n            'lang_input_anchorName': 'Anchor Name:'\n        }\n    },\n    emotion: {\n        'static': {\n            'lang_input_choice': 'Choice',\n            'lang_input_Tuzki': 'Tuzki',\n            'lang_input_lvdouwa': 'LvDouWa',\n            'lang_input_BOBO': 'BOBO',\n            'lang_input_babyCat': 'BabyCat',\n            'lang_input_bubble': 'Bubble',\n            'lang_input_youa': 'YouA'\n        }\n    },\n    help: {\n        'static': {\n            'lang_input_about': 'About UEditor Plus',\n            'lang_input_shortcuts': 'Shortcuts',\n            'lang_input_introduction': \"UEditor Plus is based on UEditor.\",\n            'lang_Txt_shortcuts': 'Shortcuts',\n            'lang_Txt_func': 'Function',\n            'lang_Txt_bold': 'Bold',\n            'lang_Txt_copy': 'Copy',\n            'lang_Txt_cut': 'Cut',\n            'lang_Txt_Paste': 'Paste',\n            'lang_Txt_undo': 'Undo',\n            'lang_Txt_redo': 'Redo',\n            'lang_Txt_italic': 'Italic',\n            'lang_Txt_underline': 'Underline',\n            'lang_Txt_selectAll': 'Select All',\n            'lang_Txt_visualEnter': 'Submit',\n            'lang_Txt_fullscreen': 'Fullscreen'\n        }\n    },\n    insertframe: {\n        'static': {\n            'lang_input_address': 'Address：',\n            'lang_input_width': 'Width：',\n            'lang_input_height': 'height：',\n            'lang_input_isScroll': 'Enable scrollbars：',\n            'lang_input_frameborder': 'Show frame border：',\n            'lang_input_alignMode': 'Alignment：',\n            'align': {title: \"Alignment\", options: [\"Default\", \"Left\", \"Right\", \"Center\"]}\n        },\n        'enterAddress': 'Please enter an address!'\n    },\n    link: {\n        'static': {\n            'lang_input_text': 'Text：',\n            'lang_input_url': 'URL：',\n            'lang_input_title': 'Title：',\n            'lang_input_target': 'open in new window：'\n        },\n        'validLink': 'Supports only effective when a link is selected',\n        'httpPrompt': 'The hyperlink you enter should start with \"http|https|ftp://\"!'\n    },\n    searchreplace: {\n        'static': {\n            lang_tab_search: \"Search\",\n            lang_tab_replace: \"Replace\",\n            lang_search1: \"Search\",\n            lang_search2: \"Search\",\n            lang_replace: \"Replace\",\n            lang_searchReg: 'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_searchReg1: 'Support regular expression ,which starts and ends with a slash ,for example \"/expression/\"',\n            lang_case_sensitive1: \"Case sense\",\n            lang_case_sensitive2: \"Case sense\",\n            nextFindBtn: {value: \"Next\"},\n            preFindBtn: {value: \"Preview\"},\n            nextReplaceBtn: {value: \"Next\"},\n            preReplaceBtn: {value: \"Preview\"},\n            repalceBtn: {value: \"Replace\"},\n            repalceAllBtn: {value: \"Replace all\"}\n        },\n        getEnd: \"Has the search to the bottom!\",\n        getStart: \"Has the search to the top!\",\n        countMsg: \"Altogether replaced {#count} character(s)!\"\n    },\n    spechars: {\n        'static': {},\n        tsfh: \"Special\",\n        lmsz: \"Roman\",\n        szfh: \"Numeral\",\n        rwfh: \"Japanese\",\n        xlzm: \"The Greek\",\n        ewzm: \"Russian\",\n        pyzm: \"Phonetic\",\n        yyyb: \"English\",\n        zyzf: \"Others\"\n    },\n    'edittable': {\n        'static': {\n            'lang_tableStyle': 'Table style',\n            'lang_insertCaption': 'Add table header row',\n            'lang_insertTitle': 'Add table title row',\n            'lang_insertTitleCol': 'Add table title col',\n            'lang_tableSize': 'Automatically adjust table size',\n            'lang_autoSizeContent': 'Adaptive by form text',\n            'lang_orderbycontent': \"Table of contents sortable\",\n            'lang_autoSizePage': 'Page width adaptive',\n            'lang_example': 'Example',\n            'lang_borderStyle': 'Table Border',\n            'lang_color': 'Color:'\n        },\n        captionName: 'Caption',\n        titleName: 'Title',\n        cellsName: 'text',\n        errorMsg: 'There are merged cells, can not sort.'\n    },\n    'edittip': {\n        'static': {\n            lang_delRow: 'Delete entire row',\n            lang_delCol: 'Delete entire col'\n        }\n    },\n    'edittd': {\n        'static': {\n            lang_tdBkColor: 'Background Color:'\n        }\n    },\n    'formula': {\n        'static': {},\n    },\n    'ai': {\n        'static': {},\n    },\n    wordimage: {\n        'static': {\n            lang_resave: \"The re-save step\",\n            uploadBtn: {src: \"upload.png\", alt: \"Upload\"},\n            clipboard: {style: \"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step: \" 1. Click top button to copy the url and then open the dialog to paste it. 2. Open after choose photos uploaded process.\"\n        },\n        fileType: \"Image\",\n        flashError: \"Flash initialization failed!\",\n        netError: \"Network error! Please try again!\",\n        copySuccess: \"URL has been copied!\",\n\n        'flashI18n': {\n            lang: encodeURI('{\"UploadingState\":\"totalNum: ${a},uploadComplete: ${b}\", \"BeforeUpload\":\"waitingNum: ${a}\", \"ExceedSize\":\"Size exceed${a}\", \"ErrorInPreview\":\"Preview failed\", \"DefaultDescription\":\"Description\", \"LoadingImage\":\"Loading...\"}'),\n            uploadingTF: encodeURI('{\"font\":\"Arial\", \"size\":12, \"color\":\"0x000\", \"bold\":\"true\", \"italic\":\"false\", \"underline\":\"false\"}'),\n            imageTF: encodeURI('{\"font\":\"Arial\", \"size\":11, \"color\":\"red\", \"bold\":\"false\", \"italic\":\"false\", \"underline\":\"false\"}'),\n            textEncoding: \"utf-8\",\n            addImageSkinURL: \"addImage.png\",\n            allDeleteBtnUpSkinURL: \"allDeleteBtnUpSkin.png\",\n            allDeleteBtnHoverSkinURL: \"allDeleteBtnHoverSkin.png\",\n            rotateLeftBtnEnableSkinURL: \"rotateLeftEnable.png\",\n            rotateLeftBtnDisableSkinURL: \"rotateLeftDisable.png\",\n            rotateRightBtnEnableSkinURL: \"rotateRightEnable.png\",\n            rotateRightBtnDisableSkinURL: \"rotateRightDisable.png\",\n            deleteBtnEnableSkinURL: \"deleteEnable.png\",\n            deleteBtnDisableSkinURL: \"deleteDisable.png\",\n            backgroundURL: '',\n            listBackgroundURL: '',\n            buttonURL: 'button.png'\n        }\n    },\n};\n"
  },
  {
    "path": "lang/zh-cn/zh-cn.js",
    "content": "/**\n * Created with JetBrains PhpStorm.\n * User: taoqili\n * Date: 12-6-12\n * Time: 下午5:02\n * To change this template use File | Settings | File Templates.\n */\nUE.I18N['zh-cn'] = {\n    'labelMap': {\n        'anchor': '锚点',\n        'undo': '撤销',\n        'redo': '重做',\n        'bold': '加粗',\n        'indent': '首行缩进',\n        'italic': '斜体',\n        'underline': '下划线',\n        'strikethrough': '删除线',\n        'subscript': '下标',\n        'fontborder': '字符边框',\n        'superscript': '上标',\n        'formatmatch': '格式刷',\n        'source': '源代码',\n        'blockquote': '引用',\n        'pasteplain': '纯文本粘贴模式',\n        'selectall': '全选',\n        'print': '打印',\n        'preview': '预览',\n        'horizontal': '分隔线',\n        'removeformat': '清除格式',\n        'time': '时间',\n        'date': '日期',\n        'unlink': '取消链接',\n        'insertrow': '前插入行',\n        'insertcol': '前插入列',\n        'mergeright': '右合并单元格',\n        'mergedown': '下合并单元格',\n        'deleterow': '删除行',\n        'deletecol': '删除列',\n        'splittorows': '拆分成行',\n        'splittocols': '拆分成列',\n        'splittocells': '完全拆分单元格',\n        'deletecaption': '删除表格标题',\n        'inserttitle': '插入标题',\n        'mergecells': '合并多个单元格',\n        'deletetable': '删除表格',\n        'cleardoc': '清空文档',\n        'contentimport': '导入内容',\n        'ai': 'AI智能助手',\n        'insertparagraphbeforetable': \"表格前插入行\",\n        'insertcode': '代码语言',\n        'fontfamily': '字体',\n        'fontsize': '字号',\n        'paragraph': '段落格式',\n        'simpleupload': '单图上传',\n        'insertimage': '插入图片',\n        'edittable': '表格属性',\n        'edittd': '单元格属性',\n        'link': '超链接',\n        'emotion': '表情',\n        'spechars': '特殊字符',\n        'searchreplace': '查询替换',\n        'insertvideo': '视频',\n        'insertaudio': '音频',\n        'help': '帮助',\n        'justifyleft': '居左对齐',\n        'justifyright': '居右对齐',\n        'justifycenter': '居中对齐',\n        'justifyjustify': '两端对齐',\n        'forecolor': '字体颜色',\n        'backcolor': '背景色',\n        'insertorderedlist': '有序列表',\n        'insertunorderedlist': '无序列表',\n        'fullscreen': '全屏',\n        'directionalityltr': '从左向右输入',\n        'directionalityrtl': '从右向左输入',\n        'rowspacingtop': '段前距',\n        'rowspacingbottom': '段后距',\n        'pagebreak': '分页',\n        'insertframe': '插入Iframe',\n        'imagenone': '默认',\n        'imageleft': '左浮动',\n        'imageright': '右浮动',\n        'attachment': '附件',\n        'imagecenter': '居中',\n        'wordimage': '图片转存',\n        'formula': '公式',\n        'lineheight': '行间距',\n        'letterspacing': '字间距',\n        'edittip': '编辑提示',\n        'customstyle': '自定义标题',\n        'autotypeset': '自动排版',\n        'touppercase': '字母大写',\n        'tolowercase': '字母小写',\n        'background': '背景',\n        'template': '模板',\n        'scrawl': '涂鸦',\n        'inserttable': '插入表格',\n    },\n    'autosave': {\n        'autoRestoreTip': '已自动从草稿箱恢复'\n    },\n    'insertorderedlist': {\n        // 'num': '1,2,3...',\n        // 'num1': '1),2),3)...',\n        // 'num2': '(1),(2),(3)...',\n        // 'cn': '一,二,三....',\n        // 'cn1': '一),二),三)....',\n        // 'cn2': '(一),(二),(三)....',\n        'decimal': '1,2,3...',\n        'lower-alpha': 'a,b,c...',\n        'lower-roman': 'i,ii,iii...',\n        'upper-alpha': 'A,B,C...',\n        'upper-roman': 'I,II,III...'\n    },\n    'insertunorderedlist': {\n        'circle': '○ 大圆圈',\n        'disc': '● 小黑点',\n        'square': '■ 小方块 ',\n        // 'dash': '— 破折号',\n        // 'dot': ' 。 小圆圈'\n    },\n    'paragraph': {'p': '段落', 'h1': '标题 1', 'h2': '标题 2', 'h3': '标题 3', 'h4': '标题 4', 'h5': '标题 5', 'h6': '标题 6'},\n    'fontfamily': {\n        'default': '默认',\n        'songti': '宋体',\n        'kaiti': '楷体',\n        'heiti': '黑体',\n        'lishu': '隶书',\n        'yahei': '微软雅黑',\n        // 'andaleMono':'andale mono',\n        'arial': 'arial',\n        // 'arialBlack':'arial black',\n        // 'comicSansMs':'comic sans ms',\n        // 'impact':'impact',\n        'timesNewRoman': 'times new roman'\n    },\n    'customstyle': {\n        'tc': '标题居中',\n        'tl': '标题居左',\n        'im': '强调',\n        'hi': '明显强调'\n    },\n    'autoupload': {\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading': \"正在上传...\",\n        'loadError': \"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'simpleupload': {\n        'exceedSizeError': '文件大小超出限制',\n        'exceedTypeError': '文件格式不允许',\n        'jsonEncodeError': '服务器返回格式错误',\n        'loading': \"正在上传...\",\n        'loadError': \"上传错误\",\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！'\n    },\n    'elementPathTip': \"元素路径\",\n    'wordCountTip': \"字数统计\",\n    'wordCountMsg': '{#count} / {#leave}',\n    'wordOverFlowMsg': '<span style=\"color:red;\">字数超出最大允许值，服务器可能拒绝保存！</span>',\n    'ok': \"确认\",\n    'cancel': \"取消\",\n    'closeDialog': \"关闭对话框\",\n    'tableDrag': \"表格拖动必须引入uiUtils.js文件！\",\n    'autofloatMsg': \"工具栏浮动依赖编辑器UI，您首先需要引入UI文件!\",\n    'loadconfigError': '获取后台配置项请求出错，上传功能将不能正常使用！',\n    'loadconfigFormatError': '后台配置项返回格式出错，上传功能将不能正常使用！',\n    'loadconfigHttpError': '请求后台配置项http错误，上传功能将不能正常使用！',\n    'insertcode': {\n        'as3': 'ActionScript 3',\n        'bash': 'Bash/Shell',\n        'cpp': 'C/C++',\n        'css': 'CSS',\n        'cf': 'ColdFusion',\n        'c#': 'C#',\n        'delphi': 'Delphi',\n        'diff': 'Diff',\n        'erlang': 'Erlang',\n        'groovy': 'Groovy',\n        'html': 'HTML',\n        'java': 'Java',\n        'jfx': 'JavaFX',\n        'js': 'JavaScript',\n        'pl': 'Perl',\n        'php': 'PHP',\n        'plain': 'Plain Text',\n        'ps': 'PowerShell',\n        'python': 'Python',\n        'ruby': 'Ruby',\n        'scala': 'Scala',\n        'sql': 'SQL',\n        'vb': 'Visual Basic',\n        'xml': 'XML'\n    },\n    'confirmClear': \"确定清空当前文档么？\",\n    'contextMenu': {\n        'delete': \"删除\",\n        'selectall': \"全选\",\n        'deletecode': \"删除代码\",\n        'cleardoc': \"清空文档\",\n        'confirmclear': \"确定清空当前文档么？\",\n        'unlink': \"删除超链接\",\n        'paragraph': \"段落格式\",\n        'edittable': \"表格属性\",\n        'aligntd': \"单元格对齐方式\",\n        'aligntable': '表格对齐方式',\n        'tableleft': '左浮动',\n        'tablecenter': '居中显示',\n        'tableright': '右浮动',\n        'edittd': \"单元格属性\",\n        'setbordervisible': '设置表格边线可见',\n        'justifyleft': '左对齐',\n        'justifyright': '右对齐',\n        'justifycenter': '居中对齐',\n        'justifyjustify': '两端对齐',\n        'table': \"表格\",\n        'inserttable': '插入表格',\n        'deletetable': \"删除表格\",\n        'insertparagraphbefore': \"前插入段落\",\n        'insertparagraphafter': '后插入段落',\n        'deleterow': \"删除当前行\",\n        'deletecol': \"删除当前列\",\n        'insertrow': \"前插入行\",\n        'insertcol': \"左插入列\",\n        'insertrownext': '后插入行',\n        'insertcolnext': '右插入列',\n        'insertcaption': '插入表格名称',\n        'deletecaption': '删除表格名称',\n        'inserttitle': '插入表格标题行',\n        'deletetitle': '删除表格标题行',\n        'inserttitlecol': '插入表格标题列',\n        'deletetitlecol': '删除表格标题列',\n        'averageDiseRow': '平均分布各行',\n        'averageDisCol': '平均分布各列',\n        'mergeright': \"向右合并\",\n        'mergeleft': \"向左合并\",\n        'mergedown': \"向下合并\",\n        'mergecells': \"合并单元格\",\n        'splittocells': \"完全拆分单元格\",\n        'splittocols': \"拆分成列\",\n        'splittorows': \"拆分成行\",\n        'tablesort': '表格排序',\n        'enablesort': '设置表格可排序',\n        'disablesort': '取消表格可排序',\n        'reversecurrent': '逆序当前',\n        'orderbyasc': '按ASCII字符升序',\n        'reversebyasc': '按ASCII字符降序',\n        'orderbynum': '按数值大小升序',\n        'reversebynum': '按数值大小降序',\n        'borderbk': '边框底纹',\n        'setcolor': '表格隔行变色',\n        'unsetcolor': '取消表格隔行变色',\n        'setbackground': '选区背景隔行',\n        'unsetbackground': '取消选区背景',\n        'redandblue': '红蓝相间',\n        'threecolorgradient': '三色渐变',\n        'copy': \"复制(Ctrl + c)\",\n        'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n        'paste': \"粘贴(Ctrl + v)\",\n        'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\"\n    },\n    'copymsg': \"浏览器不支持,请使用 'Ctrl + c'\",\n    'pastemsg': \"浏览器不支持,请使用 'Ctrl + v'\",\n    'anchorMsg': \"链接\",\n    'clearColor': '清空颜色',\n    'standardColor': '标准颜色',\n    'themeColor': '主题颜色',\n    'property': '属性',\n    'default': '默认',\n    'modify': '修改',\n    'save': '保存',\n    'justifyleft': '左对齐',\n    'justifyright': '右对齐',\n    'justifycenter': '居中',\n    'justify': '默认',\n    'clear': '清除',\n    'delete': '删除',\n    'clickToUpload': \"点击上传\",\n    'unset': '尚未设置语言文件',\n    't_row': '行',\n    't_col': '列',\n    'more': '更多',\n    'pasteOpt': '粘贴选项',\n    'pasteSourceFormat': \"保留源格式\",\n    'tagFormat': '只保留标签',\n    'pasteTextFormat': '只保留文本',\n    'autoTypeSet': {\n        'mergeLine': \"合并空行\",\n        'delLine': \"清除空行\",\n        'removeFormat': \"清除格式\",\n        'indent': \"首行缩进\",\n        'alignment': \"对齐方式\",\n        'imageFloat': \"图片浮动\",\n        'removeFontsize': \"清除字号\",\n        'removeFontFamily': \"清除字体\",\n        'removeHtml': \"清除冗余HTML代码\",\n        'pasteFilter': \"粘贴过滤\",\n        'run': \"执行\",\n        'symbol': '符号转换',\n        'bdc2sb': '全角转半角',\n        'tobdc': '半角转全角'\n    },\n\n    'background': {\n        'static': {\n            'lang_background_normal': '背景设置',\n            'lang_background_local': '在线图片',\n            'lang_background_set': '选项',\n            'lang_background_none': '无背景色',\n            'lang_background_colored': '有背景色',\n            'lang_background_color': '颜色设置',\n            'lang_background_netimg': '网络图片',\n            'lang_background_align': '对齐方式',\n            'lang_background_position': '精确定位',\n            'repeatType': {'options': [\"居中\", \"横向重复\", \"纵向重复\", \"平铺\", \"自定义\"]}\n\n        },\n        'noUploadImage': \"当前未上传过任何图片！\",\n        'toggleSelect': \"单击可切换选中状态\\n原图尺寸: \"\n    },\n    //===============dialog i18N=======================\n    'insertimage': {\n        'static': {\n            'lang_tab_remote': \"插入图片\", //节点\n            'lang_tab_upload': \"本地上传\",\n            'lang_tab_online': \"在线管理\",\n            'lang_input_url': \"地 址：\",\n            'lang_input_size': \"大 小：\",\n            'lang_input_width': \"宽度\",\n            'lang_input_height': \"高度\",\n            'lang_input_border': \"边 框：\",\n            'lang_input_vhspace': \"边 距：\",\n            'lang_input_title': \"描 述：\",\n            'lang_input_align': '图片浮动方式：',\n            'lang_imgLoading': \"　图片加载中……\",\n            'lang_start_upload': \"开始上传\",\n            'lock': {'title': \"锁定宽高比例\"}, //属性\n            'searchType': {'title': \"图片类型\", 'options': [\"新闻\", \"壁纸\", \"表情\", \"头像\"]}, //select的option\n            'searchTxt': {'value': \"请输入搜索关键词\"},\n            'searchBtn': {'value': \"百度一下\"},\n            'searchReset': {'value': \"清空搜索\"},\n            'noneAlign': {'title': '无浮动'},\n            'leftAlign': {'title': '左浮动'},\n            'rightAlign': {'title': '右浮动'},\n            'centerAlign': {'title': '居中独占一行'}\n        },\n        'uploadSelectFile': '点击选择图片',\n        'uploadAddFile': '继续添加',\n        'uploadStart': '开始上传',\n        'uploadPause': '暂停上传',\n        'uploadContinue': '继续上传',\n        'uploadRetry': '重试上传',\n        'uploadDelete': '删除',\n        'uploadTurnLeft': '向左旋转',\n        'uploadTurnRight': '向右旋转',\n        'uploadPreview': '预览中',\n        'uploadNoPreview': '不能预览',\n        'updateStatusReady': '选中_张图片，共_KB。',\n        'updateStatusConfirm': '已成功上传_张照片，_张照片上传失败',\n        'updateStatusFinish': '共_张（_KB），_张上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize': '文件大小超出',\n        'errorFileType': '文件格式不允许',\n        'errorInterrupt': '文件传输中断',\n        'errorUploadRetry': '上传失败，请重试',\n        'errorHttp': 'http请求错误',\n        'errorServerUpload': '服务器返回出错',\n        'remoteLockError': \"宽高不正确,不能所定比例\",\n        'numError': \"请输入正确的长度或者宽度值！例如：123，400\",\n        'imageUrlError': \"不允许的图片格式或者图片域！\",\n        'imageLoadError': \"图片加载失败！请检查链接地址或网络状态！\",\n        'searchRemind': \"请输入搜索关键词\",\n        'searchLoading': \"图片加载中，请稍后……\",\n        'searchRetry': \" :( ，抱歉，没有找到图片！请重试一次！\"\n    },\n    'attachment': {\n        'static': {\n            'lang_tab_upload': '上传附件',\n            'lang_tab_online': '在线附件',\n            'lang_start_upload': \"开始上传\",\n            'lang_drop_remind': \"可以将文件拖到这里，单次最多可选100个文件\"\n        },\n        'uploadSelectFile': '点击选择文件',\n        'uploadAddFile': '继续添加',\n        'uploadStart': '开始上传',\n        'uploadPause': '暂停上传',\n        'uploadContinue': '继续上传',\n        'uploadRetry': '重试上传',\n        'uploadDelete': '删除',\n        'uploadTurnLeft': '向左旋转',\n        'uploadTurnRight': '向右旋转',\n        'uploadPreview': '预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '已成功上传_个文件，_个文件上传失败',\n        'updateStatusFinish': '共_个（_KB），_个上传成功',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize': '文件大小超出',\n        'errorFileType': '文件格式不允许',\n        'errorInterrupt': '文件传输中断',\n        'errorUploadRetry': '上传失败，请重试',\n        'errorHttp': 'http请求错误',\n        'errorServerUpload': '服务器返回出错'\n    },\n    'insertvideo': {\n        'static': {\n            'lang_tab_insertV': \"插入视频\",\n            'lang_tab_searchV': \"搜索视频\",\n            'lang_tab_uploadV': \"上传视频\",\n            'lang_video_url': \"视频网址\",\n            'lang_video_size': \"视频尺寸\",\n            'lang_videoW': \"宽度\",\n            'lang_videoH': \"高度\",\n            'lang_alignment': \"对齐方式\",\n            'videoSearchTxt': {'value': \"请输入搜索关键字！\"},\n            'videoType': {'options': [\"全部\", \"热门\", \"娱乐\", \"搞笑\", \"体育\", \"科技\", \"综艺\"]},\n            'videoSearchBtn': {'value': \"百度一下\"},\n            'videoSearchReset': {'value': \"清空结果\"},\n\n            'lang_input_fileStatus': ' 当前未上传文件',\n            'startUpload': {'style': \"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size': \"视频尺寸\",\n            'lang_upload_width': \"宽度\",\n            'lang_upload_height': \"高度\",\n            'lang_upload_alignment': \"对齐方式\",\n            'lang_format_advice': \"建议使用mp4格式.\"\n\n        },\n        'numError': \"请输入正确的数值，如123,400\",\n        'floatLeft': \"左浮动\",\n        'floatRight': \"右浮动\",\n        'default': \"默认\",\n        'block': \"独占一行\",\n        'urlError': \"输入的视频地址有误，请检查后再试！\",\n        'loading': \" &nbsp;视频加载中，请等待……\",\n        'clickToSelect': \"点击选中\",\n        'goToSource': '访问源视频',\n        'noVideo': \" &nbsp; &nbsp;抱歉，找不到对应的视频，请重试！\",\n\n        'browseFiles': '浏览文件',\n        'uploadSuccess': '上传成功!',\n        'delSuccessFile': '从成功队列中移除',\n        'delFailSaveFile': '移除保存失败文件',\n        'statusPrompt': ' 个文件已上传！ ',\n        'flashVersionError': '当前Flash版本过低，请更新FlashPlayer后重试！',\n        'flashLoadingError': 'Flash加载失败!请检查路径或网络状态',\n        'fileUploadReady': '等待上传……',\n        'delUploadQueue': '从上传队列中移除',\n        'limitPrompt1': '单次不能选择超过',\n        'limitPrompt2': '个文件！请重新选择！',\n        'delFailFile': '移除失败文件',\n        'fileSizeLimit': '文件大小超出限制！',\n        'emptyFile': '空文件无法上传！',\n        'fileTypeError': '文件类型不允许！',\n        'unknownError': '未知错误！',\n        'fileUploading': '上传中，请等待……',\n        'cancelUpload': '取消上传',\n        'netError': '网络错误',\n        'failUpload': '上传失败!',\n        'serverIOError': '服务器IO错误！',\n        'noAuthority': '无权限！',\n        'fileNumLimit': '上传个数限制',\n        'failCheck': '验证失败，本次上传被跳过！',\n        'fileCanceling': '取消中，请等待……',\n        'stopUploading': '上传已停止……',\n\n        'uploadSelectFile': '点击选择文件',\n        'uploadAddFile': '继续添加',\n        'uploadStart': '开始上传',\n        'uploadPause': '暂停上传',\n        'uploadContinue': '继续上传',\n        'uploadRetry': '重试上传',\n        'uploadDelete': '删除',\n        'uploadTurnLeft': '向左旋转',\n        'uploadTurnRight': '向右旋转',\n        'uploadPreview': '预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '成功上传_个，_个失败',\n        'updateStatusFinish': '共_个(_KB)，_个成功上传',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize': '文件大小超出',\n        'errorFileType': '文件格式不允许',\n        'errorInterrupt': '文件传输中断',\n        'errorUploadRetry': '上传失败，请重试',\n        'errorHttp': 'http请求错误',\n        'errorServerUpload': '服务器返回出错'\n    },\n    'insertaudio': {\n        'static': {\n            'lang_tab_insertV': \"插入音频\",\n            'lang_tab_searchV': \"搜索音频\",\n            'lang_tab_uploadV': \"上传音频\",\n            'lang_video_url': \"音频网址\",\n            'lang_video_size': \"音频尺寸\",\n            'lang_videoW': \"宽度\",\n            'lang_videoH': \"高度\",\n            'lang_alignment': \"对齐方式\",\n            'videoSearchTxt': {'value': \"请输入搜索关键字！\"},\n            'videoType': {'options': [\"全部\", \"热门\", \"娱乐\", \"搞笑\", \"体育\", \"科技\", \"综艺\"]},\n            'videoSearchBtn': {'value': \"百度一下\"},\n            'videoSearchReset': {'value': \"清空结果\"},\n\n            'lang_input_fileStatus': ' 当前未上传文件',\n            'startUpload': {'style': \"background:url(upload.png) no-repeat;\"},\n\n            'lang_upload_size': \"音频尺寸\",\n            'lang_upload_width': \"宽度\",\n            'lang_upload_height': \"高度\",\n            'lang_upload_alignment': \"对齐方式\",\n            'lang_format_advice': \"建议使用mp4格式.\"\n\n        },\n        'numError': \"请输入正确的数值，如123,400\",\n        'floatLeft': \"左浮动\",\n        'floatRight': \"右浮动\",\n        'default': \"默认\",\n        'block': \"独占一行\",\n        'urlError': \"输入的音频地址有误，请检查后再试！\",\n        'loading': \" &nbsp;音频加载中，请等待……\",\n        'clickToSelect': \"点击选中\",\n        'goToSource': '访问源音频',\n        'noVideo': \" &nbsp; &nbsp;抱歉，找不到对应的音频，请重试！\",\n\n        'browseFiles': '浏览文件',\n        'uploadSuccess': '上传成功!',\n        'delSuccessFile': '从成功队列中移除',\n        'delFailSaveFile': '移除保存失败文件',\n        'statusPrompt': ' 个文件已上传！ ',\n        'flashVersionError': '当前Flash版本过低，请更新FlashPlayer后重试！',\n        'flashLoadingError': 'Flash加载失败!请检查路径或网络状态',\n        'fileUploadReady': '等待上传……',\n        'delUploadQueue': '从上传队列中移除',\n        'limitPrompt1': '单次不能选择超过',\n        'limitPrompt2': '个文件！请重新选择！',\n        'delFailFile': '移除失败文件',\n        'fileSizeLimit': '文件大小超出限制！',\n        'emptyFile': '空文件无法上传！',\n        'fileTypeError': '文件类型不允许！',\n        'unknownError': '未知错误！',\n        'fileUploading': '上传中，请等待……',\n        'cancelUpload': '取消上传',\n        'netError': '网络错误',\n        'failUpload': '上传失败!',\n        'serverIOError': '服务器IO错误！',\n        'noAuthority': '无权限！',\n        'fileNumLimit': '上传个数限制',\n        'failCheck': '验证失败，本次上传被跳过！',\n        'fileCanceling': '取消中，请等待……',\n        'stopUploading': '上传已停止……',\n\n        'uploadSelectFile': '点击选择文件',\n        'uploadAddFile': '继续添加',\n        'uploadStart': '开始上传',\n        'uploadPause': '暂停上传',\n        'uploadContinue': '继续上传',\n        'uploadRetry': '重试上传',\n        'uploadDelete': '删除',\n        'uploadTurnLeft': '向左旋转',\n        'uploadTurnRight': '向右旋转',\n        'uploadPreview': '预览中',\n        'updateStatusReady': '选中_个文件，共_KB。',\n        'updateStatusConfirm': '成功上传_个，_个失败',\n        'updateStatusFinish': '共_个(_KB)，_个成功上传',\n        'updateStatusError': '，_张上传失败。',\n        'errorNotSupport': 'WebUploader 不支持您的浏览器！如果你使用的是IE浏览器，请尝试升级 flash 播放器。',\n        'errorLoadConfig': '后端配置项没有正常加载，上传插件不能正常使用！',\n        'errorExceedSize': '文件大小超出',\n        'errorFileType': '文件格式不允许',\n        'errorInterrupt': '文件传输中断',\n        'errorUploadRetry': '上传失败，请重试',\n        'errorHttp': 'http请求错误',\n        'errorServerUpload': '服务器返回出错'\n    },\n    'template': {\n        'static': {\n            'lang_template_bkcolor': '背景颜色',\n            'lang_template_clear': '保留原有内容',\n            'lang_template_select': '选择模板'\n        },\n        'blank': \"空白文档\",\n        'blog': \"博客文章\",\n        'resume': \"个人简历\",\n        'richText': \"图文混排\",\n        'sciPapers': \"科技论文\"\n\n\n    },\n    'scrawl': {\n        'static': {\n            'lang_input_previousStep': \"上一步\",\n            'lang_input_nextsStep': \"下一步\",\n            'lang_input_clear': '清空',\n            'lang_input_addPic': '添加背景',\n            'lang_input_ScalePic': '缩放背景',\n            'lang_input_removePic': '删除背景',\n            'J_imgTxt': {title: '添加背景图片'}\n        },\n        'noScarwl': \"尚未作画，白纸一张~\",\n        'scrawlUpLoading': \"涂鸦上传中,别急哦~\",\n        'continueBtn': \"继续\",\n        'imageError': \"糟糕，图片读取失败了！\",\n        'backgroundUploading': '背景图片上传中,别急哦~'\n    },\n    'anchor': {\n        'static': {\n            'lang_input_anchorName': '锚点名字：'\n        }\n    },\n    'emotion': {\n        'static': {\n            'lang_input_choice': '精选',\n            'lang_input_Tuzki': '兔斯基',\n            'lang_input_BOBO': 'BOBO',\n            'lang_input_lvdouwa': '绿豆蛙',\n            'lang_input_babyCat': 'baby猫',\n            'lang_input_bubble': '泡泡',\n            'lang_input_youa': '有啊'\n        }\n    },\n    'help': {\n        'static': {\n            'lang_input_about': '关于 UEditor Plus',\n            'lang_input_shortcuts': '快捷键',\n            'lang_input_introduction': 'UEditor Plus 是基于百度UEditor二次开发的所见即所得富文本web编辑器，主要丰富也界面样式，注重用户体验等特点。基于Apache 2.0协议开源，允许自由使用和修改代码。',\n            'lang_Txt_shortcuts': '快捷键',\n            'lang_Txt_func': '功能',\n            'lang_Txt_bold': '给选中字设置为加粗',\n            'lang_Txt_copy': '复制选中内容',\n            'lang_Txt_cut': '剪切选中内容',\n            'lang_Txt_Paste': '粘贴',\n            'lang_Txt_undo': '重新执行上次操作',\n            'lang_Txt_redo': '撤销上一次操作',\n            'lang_Txt_italic': '给选中字设置为斜体',\n            'lang_Txt_underline': '给选中字加下划线',\n            'lang_Txt_selectAll': '全部选中',\n            'lang_Txt_visualEnter': '软回车',\n            'lang_Txt_fullscreen': '全屏'\n        }\n    },\n    'insertframe': {\n        'static': {\n            'lang_input_address': '地址：',\n            'lang_input_width': '宽度：',\n            'lang_input_height': '高度：',\n            'lang_input_isScroll': '允许滚动条：',\n            'lang_input_frameborder': '显示框架边框：',\n            'lang_input_alignMode': '对齐方式：',\n            'align': {title: \"对齐方式\", options: [\"默认\", \"左对齐\", \"右对齐\", \"居中\"]}\n        },\n        'enterAddress': '请输入地址!'\n    },\n    'link': {\n        'static': {\n            'lang_input_text': '文本内容：',\n            'lang_input_url': '链接地址：',\n            'lang_input_title': '标题：',\n            'lang_input_target': '是否在新窗口打开：'\n        },\n        'validLink': '只支持选中一个链接时生效',\n        'httpPrompt': '您输入的超链接中不包含http等协议名称，默认将为您添加http://前缀'\n    },\n    'searchreplace': {\n        'static': {\n            lang_tab_search: \"查找\",\n            lang_tab_replace: \"替换\",\n            lang_search1: \"查找\",\n            lang_search2: \"查找\",\n            lang_replace: \"替换\",\n            lang_searchReg: '支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_searchReg1: '支持正则表达式，添加前后斜杠标示为正则表达式，例如“/表达式/”',\n            lang_case_sensitive1: \"区分大小写\",\n            lang_case_sensitive2: \"区分大小写\",\n            nextFindBtn: {value: \"下一个\"},\n            preFindBtn: {value: \"上一个\"},\n            nextReplaceBtn: {value: \"下一个\"},\n            preReplaceBtn: {value: \"上一个\"},\n            repalceBtn: {value: \"替换\"},\n            repalceAllBtn: {value: \"全部替换\"}\n        },\n        getEnd: \"已经搜索到文章末尾！\",\n        getStart: \"已经搜索到文章头部\",\n        countMsg: \"总共替换了{#count}处！\"\n    },\n    'spechars': {\n        'static': {},\n        tsfh: \"特殊字符\",\n        lmsz: \"罗马字符\",\n        szfh: \"数学字符\",\n        rwfh: \"日文字符\",\n        xlzm: \"希腊字母\",\n        ewzm: \"俄文字符\",\n        pyzm: \"拼音字母\",\n        yyyb: \"英语音标\",\n        zyzf: \"其他\"\n    },\n    'edittable': {\n        'static': {\n            'lang_tableStyle': '表格样式',\n            'lang_insertCaption': '添加表格名称行',\n            'lang_insertTitle': '添加表格标题行',\n            'lang_insertTitleCol': '添加表格标题列',\n            'lang_orderbycontent': \"使表格内容可排序\",\n            'lang_tableSize': '自动调整表格尺寸',\n            'lang_autoSizeContent': '按表格文字自适应',\n            'lang_autoSizePage': '按页面宽度自适应',\n            'lang_example': '示例',\n            'lang_borderStyle': '表格边框',\n            'lang_color': '颜色:'\n        },\n        captionName: '表格名称',\n        titleName: '标题',\n        cellsName: '内容',\n        errorMsg: '有合并单元格，不可排序'\n    },\n    'edittip': {\n        'static': {\n            lang_delRow: '删除整行',\n            lang_delCol: '删除整列'\n        }\n    },\n    'edittd': {\n        'static': {\n            lang_tdBkColor: '背景颜色:'\n        }\n    },\n    'formula': {\n        'static': {},\n    },\n    'ai': {\n        'static': {},\n    },\n    'wordimage': {\n        'static': {\n            lang_resave: \"转存步骤\",\n            uploadBtn: {src: \"upload.png\", alt: \"上传\"},\n            clipboard: {style: \"background: url(copy.png) -153px -1px no-repeat;\"},\n            lang_step: \"1、点击顶部复制按钮，将地址复制到剪贴板；2、点击添加照片按钮，在弹出的对话框中使用Ctrl+V粘贴地址；3、点击打开后选择图片上传流程。\"\n        },\n        'fileType': \"图片\",\n        'flashError': \"FLASH初始化失败，请检查FLASH插件是否正确安装！\",\n        'netError': \"网络连接错误，请重试！\",\n        'copySuccess': \"图片地址已经复制！\",\n        'flashI18n': {} //留空默认中文\n    },\n};\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"ueditor-plus-main\",\n  \"title\": \"UEditorPlus\",\n  \"description\": \"基于 UEditor 的增强版富文本编辑器\",\n  \"version\": \"4.5.0\",\n  \"homepage\": \"http://open.modstart.com\",\n  \"author\": {\n    \"name\": \"Modstart\",\n    \"url\": \"http://open.modstart.com\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/modstart-lib/ueditor-plus.git\"\n  },\n  \"files\": [\n    \"dist-min/**/*\",\n    \"README.md\"\n  ],\n  \"main\": \"dist-min/ueditor.all.js\",\n  \"scripts\": {\n    \"build\": \"make build\"\n  },\n  \"keywords\": [\n    \"ueditor\",\n    \"web editor\",\n    \"javascript\",\n    \"rich editor\"\n  ],\n  \"bugs\": {\n    \"url\": \"https://github.com/modstart-lib/ueditor-plus/issues\"\n  },\n  \"dependencies\": {\n    \"grunt\": \"~0.4.1\",\n    \"grunt-contrib-clean\": \"~0.5.0\",\n    \"grunt-contrib-concat\": \"~0.3.0\",\n    \"grunt-contrib-copy\": \"~0.4.0\",\n    \"grunt-contrib-cssmin\": \"~0.6.0\",\n    \"grunt-contrib-uglify\": \"^1.0.1\",\n    \"grunt-text-replace\": \"~0.3.9\",\n    \"grunt-transcoding\": \"~0.1.1\",\n    \"md5-file\": \"^5.0.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/cli\": \"^7.28.3\",\n    \"@babel/core\": \"^7.28.5\",\n    \"@babel/preset-env\": \"^7.28.5\",\n    \"grunt\": \"~0.4.1\",\n    \"uglify-js\": \"^3.17.4\"\n  }\n}\n"
  },
  {
    "path": "plugins/demo/demo.js",
    "content": "(function () {\n\n})();\n"
  },
  {
    "path": "scripts/postBuild.js",
    "content": "const fs = require('fs');\nconst path = require('path');\nconst md5File = require('md5-file');\n\nconst timestamp = parseInt((new Date().getTime()) / 1000);\n\n// replace js,html,css file content {timestamp} to current timestamp in dist/ and dist-min/\nfunction replacePlaceholderFile(filePath) {\n    let content = fs.readFileSync(filePath, 'utf8');\n    let changed = false;\n    content = content.replace(/['\"]([^'\"]+)\\?\\{timestamp:?.*?\\}['\"]/g,\n        function (match, contents, offset, input_string) {\n            let fileTimestampPath = path.join(path.dirname(filePath), contents);\n            if (fileTimestampPath.indexOf('/~/') >= 0) {\n                fileTimestampPath = fileTimestampPath.replace('/~/', '/');\n            }\n            if (!fs.existsSync(fileTimestampPath)) {\n                const mat = /{timestamp:(.*?)\\}/.exec(match);\n                if (mat) {\n                    fileTimestampPath = mat[1];\n                }\n            }\n            if (!fs.existsSync(fileTimestampPath)) {\n                console.log('not exists', fileTimestampPath, match);\n                return match;\n            }\n            let timestamp = md5File.sync(fileTimestampPath).substr(0, 8);\n            changed = true;\n            contents = match.replace(/\\{timestamp:?.*?\\}/g, timestamp);\n            console.log('replace', match, fileTimestampPath, timestamp);\n            return contents;\n        });\n    if (changed) {\n        console.log('update', filePath)\n        fs.writeFileSync(filePath, content);\n    }\n}\n\nfunction replacePlaceholderInDir(dir) {\n    const files = fs.readdirSync(dir);\n    files.forEach(file => {\n        const filePath = dir + file;\n        const stat = fs.statSync(filePath);\n        if (stat.isFile()) {\n            replacePlaceholderFile(filePath);\n        } else if (stat.isDirectory()) {\n            replacePlaceholderInDir(filePath + '/');\n        }\n    });\n}\n\nfunction replacePlaceholder(dirs) {\n    dirs.forEach(dir => {\n        replacePlaceholderInDir(dir);\n    });\n}\n\nreplacePlaceholder([\n    'dist/',\n    'dist-min/',\n]);\n"
  },
  {
    "path": "themes/default/_css/autotypesetpicker.css",
    "content": "/*自动排版弹出菜单*/\n.edui-default .edui-autotypesetpicker .edui-autotypesetpicker-body {\n    font-size: 12px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-autotypesetpicker-body table {\n    border-collapse: separate;\n    border-spacing: 2px;\n}\n\n.edui-default .edui-autotypesetpicker-body td {\n    font-size: 12px;\n    word-wrap: break-word;\n}\n\n.edui-default .edui-autotypesetpicker-body td input {\n    margin: 3px 3px 3px 4px;\n    *margin: 1px 0 0 0;\n}\n\n.edui-default .edui-autotypesetpicker-body td button {\n    border: none;\n    padding: 5px 10px;\n    font-size: 13px;\n    line-height: 1.5;\n    border-radius: 4rem;\n    -webkit-appearance: none;\n    cursor: pointer;\n    margin-bottom: 5px;\n    background-color: #EEE;\n}\n"
  },
  {
    "path": "themes/default/_css/button.css",
    "content": "/*普通按钮样式及状态*/\n.edui-default .edui-toolbar .edui-button .edui-icon,\n.edui-default .edui-toolbar .edui-menubutton .edui-icon,\n.edui-default .edui-toolbar .edui-splitbutton .edui-icon {\n    height: 30px !important;\n    width: 30px !important;\n    /*background-image: url(../images/icons.png);*/\n    /*background-image: url(../images/icons.gif) \\9;*/\n    background-position: center;\n    background-repeat: no-repeat;\n    font-family: \"edui-iconfont\";\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n    font-size: 16px;\n    text-align: center;\n    cursor: pointer;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-button-wrap {\n    padding: 1px;\n    position: relative;\n    border-radius: 3px;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {\n    background-color: #EEE;\n    border: 1px solid #EEE;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {\n    background-color: #F0F0EE;\n    padding: 0;\n    border: 1px solid #EEE;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {\n    background-color: #F0F0EE;\n    padding: 0;\n    border: 1px solid var(--edui-color-border);\n}\n\n.edui-default .edui-toolbar .edui-state-disabled .edui-label {\n    color: #ccc;\n}\n\n.edui-default .edui-toolbar .edui-state-disabled .edui-icon {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n}\n\n.edui-default .edui-toolbar-button-custom {\n    display: inline-block !important;\n    line-height: 30px;\n    vertical-align: middle;\n    padding: 0 10px;\n    border-radius: 3px;\n    margin: 0 5px;\n}\n\n.edui-default .edui-toolbar-button-custom:hover {\n    background: #EEE;\n}\n"
  },
  {
    "path": "themes/default/_css/buttonicon.css",
    "content": "/* toolbar icons */\n.edui-default .edui-for-undo .edui-icon:before {\n    content: \"\\e60f\";\n}\n\n.edui-default .edui-for-redo .edui-icon:before {\n    content: \"\\e60c\";\n}\n\n.edui-default .edui-for-bold .edui-icon:before {\n    content: \"\\e628\";\n}\n\n.edui-default .edui-for-italic .edui-icon:before {\n    content: \"\\e62a\";\n}\n\n.edui-default .edui-for-fontborder .edui-icon:before {\n    content: '\\e62d';\n}\n\n.edui-default .edui-for-underline .edui-icon:before {\n    content: \"\\e63e\";\n}\n\n.edui-default .edui-for-strikethrough .edui-icon:before {\n    content: \"\\e64a\";\n}\n\n.edui-default .edui-for-subscript .edui-icon:before {\n    content: \"\\ece9\";\n}\n\n.edui-default .edui-for-superscript .edui-icon:before {\n    content: \"\\e83e\";\n}\n\n.edui-default .edui-for-blockquote .edui-icon:before {\n    content: \"\\e6d8\";\n}\n\n.edui-default .edui-for-forecolor .edui-icon:before {\n    content: \"\\e7f8\";\n}\n\n.edui-default .edui-for-backcolor .edui-icon:before {\n    content: \"\\e71a\";\n}\n\n.edui-default .edui-for-inserttable .edui-icon:before {\n    content: \"\\e60d\";\n}\n\n.edui-default .edui-for-autotypeset .edui-icon:before {\n    content: \"\\e662\";\n}\n\n.edui-default .edui-for-justifyleft .edui-icon:before {\n    content: \"\\e7f7\";\n}\n\n.edui-default .edui-for-justifycenter .edui-icon:before {\n    content: \"\\e7f6\";\n}\n\n.edui-default .edui-for-justifyright .edui-icon:before {\n    content: \"\\e7f5\";\n}\n\n.edui-default .edui-for-justifyjustify .edui-icon:before {\n    content: \"\\e87c\";\n}\n\n.edui-default .edui-for-insertorderedlist .edui-icon:before {\n    content: \"\\e737\";\n}\n\n.edui-default .edui-for-insertunorderedlist .edui-icon:before {\n    content: \"\\e7f4\";\n}\n\n.edui-default .edui-for-lineheight .edui-icon:before {\n    content: \"\\e638\";\n}\n\n.edui-default .edui-for-rowspacingbottom .edui-icon:before {\n    content: '\\eb09';\n}\n\n.edui-default .edui-for-rowspacingtop .edui-icon:before {\n    content: '\\eb0a';\n}\n\n.edui-default .edui-for-horizontal .edui-icon:before {\n    content: \"\\e617\";\n}\n\n.edui-default .edui-for-link .edui-icon:before {\n    content: \"\\e648\";\n}\n\n.edui-default .edui-for-code .edui-icon:before {\n    background-position: -440px -40px;\n}\n\n.edui-default .edui-for-insertimage .edui-icon:before {\n    content: \"\\e605\";\n}\n\n.edui-default .edui-for-insertframe .edui-icon:before {\n    content: \"\\e6c0\";\n}\n\n.edui-default .edui-for-emoticon .edui-icon:before {\n    content: \"\\e60e\";\n}\n\n.edui-default .edui-for-spechars .edui-icon:before {\n    content: \"\\e891\";\n}\n\n.edui-default .edui-for-help .edui-icon:before {\n    content: \"\\e752\";\n}\n\n.edui-default .edui-for-print .edui-icon:before {\n    content: \"\\e67a\";\n}\n\n.edui-default .edui-for-preview .edui-icon:before {\n    content: \"\\e644\";\n}\n\n.edui-default .edui-for-selectall .edui-icon:before {\n    content: '\\e62f';\n}\n\n.edui-default .edui-for-searchreplace .edui-icon:before {\n    content: \"\\eb6c\";\n}\n\n.edui-default .edui-for-contentimport .edui-icon:before {\n    content: \"\\e6f1\";\n}\n\n.edui-default .edui-for-ai .edui-icon:before {\n    content: \"\\e61c\";\n}\n\n.edui-default .edui-for-map .edui-icon:before {\n    content: \"\\e649\";\n}\n\n.edui-default .edui-for-insertvideo .edui-icon:before {\n    content: \"\\e636\";\n}\n\n.edui-default .edui-for-insertaudio .edui-icon:before {\n    content: \"\\e77b\";\n}\n\n.edui-default .edui-for-time .edui-icon:before {\n    content: \"\\e680\";\n}\n\n.edui-default .edui-for-date .edui-icon:before {\n    content: \"\\e697\";\n}\n\n.edui-default .edui-for-cut .edui-icon:before {\n    background-position: -680px 0;\n}\n\n.edui-default .edui-for-copy .edui-icon:before {\n    background-position: -700px 0;\n}\n\n.edui-default .edui-for-paste .edui-icon:before {\n    background-position: -560px 0;\n}\n\n.edui-default .edui-for-formatmatch .edui-icon:before {\n    content: \"\\e637\";\n}\n\n.edui-default .edui-for-pasteplain .edui-icon:before {\n    content: '\\edfb';\n}\n\n.edui-default .edui-for-directionalityltr .edui-icon:before {\n    content: \"\\e623\";\n}\n\n.edui-default .edui-for-directionalityrtl .edui-icon:before {\n    content: \"\\e7bc\";\n}\n\n.edui-default .edui-for-source .edui-icon:before {\n    content: \"\\e608\";\n}\n\n.edui-default .edui-for-removeformat .edui-icon:before {\n    content: \"\\e782\";\n}\n\n.edui-default .edui-for-unlink .edui-icon:before {\n    content: \"\\e92b\";\n}\n\n.edui-default .edui-for-touppercase .edui-icon:before {\n    content: \"\\e619\";\n}\n\n.edui-default .edui-for-tolowercase .edui-icon:before {\n    content: \"\\e61a\";\n}\n\n.edui-default .edui-for-insertrow .edui-icon:before {\n    content: \"\\e603\";\n}\n\n.edui-default .edui-for-insertrownext .edui-icon:before {\n    content: \"\\e602\";\n}\n\n.edui-default .edui-for-insertcol .edui-icon:before {\n    content: \"\\e601\";\n}\n\n.edui-default .edui-for-insertcolnext .edui-icon:before {\n    content: \"\\e600\";\n}\n\n.edui-default .edui-for-mergeright .edui-icon:before {\n    content: \"\\e615\";\n}\n\n.edui-default .edui-for-mergedown .edui-icon:before {\n    content: \"\\e613\";\n}\n\n.edui-default .edui-for-splittorows .edui-icon:before {\n    content: \"\\e610\";\n}\n\n.edui-default .edui-for-splittocols .edui-icon:before {\n    content: \"\\e611\";\n}\n\n.edui-default .edui-for-insertparagraphbeforetable .edui-icon:before {\n    content: '\\e901';\n}\n\n.edui-default .edui-for-deleterow .edui-icon:before {\n    content: \"\\e609\";\n}\n\n.edui-default .edui-for-deletecol .edui-icon:before {\n    content: \"\\e604\";\n}\n\n.edui-default .edui-for-splittocells .edui-icon:before {\n    content: \"\\e612\";\n}\n\n.edui-default .edui-for-mergecells .edui-icon:before {\n    content: \"\\e606\";\n}\n\n.edui-default .edui-for-deletetable .edui-icon:before {\n    content: \"\\e60a\";\n}\n\n.edui-default .edui-for-cleardoc .edui-icon:before {\n    content: \"\\e61e\";\n}\n\n.edui-default .edui-for-fullscreen .edui-icon:before {\n    content: \"\\e675\";\n}\n\n.edui-default .edui-for-anchor .edui-icon:before {\n    content: \"\\e61b\";\n}\n\n.edui-default .edui-for-pagebreak .edui-icon:before {\n    content: \"\\e61d\";\n}\n\n.edui-default .edui-for-imagenone .edui-icon:before {\n    content: \"\\e61f\";\n}\n\n.edui-default .edui-for-imageleft .edui-icon:before {\n    content: \"\\e621\";\n}\n\n.edui-default .edui-for-wordimage .edui-icon:before {\n    content: \"\\e618\";\n}\n\n.edui-default .edui-for-imageright .edui-icon:before {\n    content: \"\\e622\";\n}\n\n.edui-default .edui-for-imagecenter .edui-icon:before {\n    content: \"\\e620\";\n}\n\n.edui-default .edui-for-indent .edui-icon:before {\n    content: \"\\e7f3\";\n}\n\n.edui-default .edui-for-outdent .edui-icon:before {\n    background-position: -540px 0;\n}\n\n.edui-default .edui-for-table .edui-icon:before {\n    background-position: -580px -20px;\n}\n\n.edui-default .edui-for-edittable .edui-icon:before {\n    background-position: -420px -40px;\n}\n\n.edui-default .edui-for-template .edui-icon:before {\n    content: \"\\e6ad\";\n}\n\n.edui-default .edui-for-delete .edui-icon:before {\n    background-position: -360px -40px;\n}\n\n.edui-default .edui-for-attachment .edui-icon:before {\n    content: \"\\e704\";\n}\n\n.edui-default .edui-for-edittd .edui-icon:before {\n    background-position: -700px -40px;\n}\n\n.edui-default .edui-for-scrawl .edui-icon:before {\n    content: \"\\e70b\";\n}\n\n.edui-default .edui-for-background .edui-icon:before {\n    content: \"\\e624\";\n}\n\n.edui-default .edui-for-formula .edui-icon:before {\n    content: \"\\e616\";\n}\n\n.edui-default .edui-for-aligntd .edui-icon:before {\n    background-position: -236px -76px;\n}\n\n.edui-default .edui-for-insertparagraphtrue .edui-icon:before {\n    background-position: -625px -76px;\n}\n\n.edui-default .edui-for-insertparagraph .edui-icon:before {\n    background-position: -602px -76px;\n}\n\n.edui-default .edui-for-insertcaption .edui-icon:before {\n    background-position: -336px -76px;\n}\n\n.edui-default .edui-for-deletecaption .edui-icon:before {\n    background-position: -362px -76px;\n}\n\n.edui-default .edui-for-inserttitle .edui-icon:before {\n    background-position: -286px -76px;\n}\n\n.edui-default .edui-for-deletetitle .edui-icon:before {\n    background-position: -311px -76px;\n}\n\n.edui-default .edui-for-aligntable .edui-icon:before {\n    background-position: -440px 0;\n}\n\n.edui-default .edui-for-tablealignment-left .edui-icon:before {\n    background-position: -460px 0;\n}\n\n.edui-default .edui-for-tablealignment-center .edui-icon:before {\n    background-position: -420px 0;\n}\n\n.edui-default .edui-for-tablealignment-right .edui-icon:before {\n    background-position: -480px 0;\n}\n\n.edui-default .edui-for-inserttitlecol .edui-icon:before {\n    background-position: -673px -76px;\n}\n\n.edui-default .edui-for-deletetitlecol .edui-icon:before {\n    background-position: -698px -76px;\n}\n\n.edui-default .edui-for-simpleupload .edui-icon:before {\n    content: \"\\edfc\";\n}\n\n.edui-default .edui-for-letterspacing .edui-icon:before {\n    content: \"\\e8a8\";\n}\n"
  },
  {
    "path": "themes/default/_css/cellalignpicker.css",
    "content": "/*自动排版弹出菜单*/\n.edui-default .edui-cellalignpicker .edui-cellalignpicker-body {\n    width: 70px;\n    font-size: 12px;\n    cursor: default;\n}\n\n.edui-default .edui-cellalignpicker-body table {\n    border-collapse: separate;\n    border-spacing: 0;\n}\n\n.edui-default .edui-cellalignpicker-body td {\n    padding: 1px;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-icon {\n    height: 20px;\n    width: 20px;\n    padding: 1px;\n    background-image: url(../images/table-cell-align.png);\n}\n\n.edui-default .edui-cellalignpicker-body .edui-left {\n    background-position: 0 0;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-center {\n    background-position: -25px 0;\n}\n\n.edui-default .edui-cellalignpicker-body .edui-right {\n    background-position: -51px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-left {\n    background-position: -73px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-center {\n    background-position: -98px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-state-hover .edui-right {\n    background-position: -124px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-left {\n    background-position: -146px 0;\n    background-color: #f1f4f5;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-center {\n    background-position: -245px 0;\n}\n\n.edui-default .edui-cellalignpicker-body td.edui-cellalign-selected .edui-right {\n    background-position: -271px 0;\n}\n"
  },
  {
    "path": "themes/default/_css/colorbutton.css",
    "content": "/*颜色按钮 */\n.edui-default .edui-toolbar .edui-colorbutton .edui-colorlump {\n    position: absolute;\n    overflow: hidden;\n    bottom: 1px;\n    left: 5px;\n    width: 20px;\n    height: 4px;\n}\n"
  },
  {
    "path": "themes/default/_css/colorpicker.css",
    "content": "/* 颜色弹出菜单 */\n.edui-default .edui-colorpicker-topbar {\n    height: 27px;\n    width: 200px;\n    /*border-bottom: 1px gray dashed;*/\n}\n\n.edui-default .edui-colorpicker-preview {\n    height: 20px;\n    border: 1px inset black;\n    margin-left: 1px;\n    width: 128px;\n    float: left;\n    border-radius: 3px;\n    position: relative;\n}\n\n.edui-default .edui-colorpicker-preview input {\n    padding: 0;\n    left: 0;\n    border: 0;\n    position: absolute;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    border-radius: 3px;\n    opacity: 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-colorpicker-nocolor {\n    float: right;\n    margin-right: 1px;\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    border: 1px solid #333;\n    padding: 0 5px;\n    cursor: pointer;\n    border-radius: 3px;\n    box-sizing: content-box;\n}\n\n.edui-default .edui-colorpicker-tablefirstrow {\n    height: 30px;\n}\n\n.edui-default .edui-colorpicker-colorcell {\n    width: 14px;\n    height: 14px;\n    display: block;\n    margin: 0;\n    cursor: pointer;\n    border-radius: 2px;\n}\n\n.edui-default .edui-colorpicker-colorcell:hover {\n    width: 14px;\n    height: 14px;\n    margin: 0;\n}\n\n.edui-default .edui-colorpicker-advbtn {\n    display: block;\n    text-align: center;\n    cursor: pointer;\n    height: 20px;\n}\n\n.arrow_down {\n    background: white url('../images/arrow_down.png') no-repeat center;\n}\n\n.arrow_up {\n    background: white url('../images/arrow_up.png') no-repeat center;\n}\n\n/*高级的样式*/\n.edui-colorpicker-adv {\n    position: relative;\n    overflow: hidden;\n    height: 180px;\n    display: none;\n}\n\n.edui-colorpicker-plant, .edui-colorpicker-hue {\n    border: solid 1px #666;\n}\n\n.edui-colorpicker-pad {\n    width: 150px;\n    height: 150px;\n    left: 14px;\n    top: 13px;\n    position: absolute;\n    background: red;\n    overflow: hidden;\n    cursor: crosshair;\n}\n\n.edui-colorpicker-cover {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 150px;\n    height: 150px;\n    background: url(\"../images/tangram-colorpicker.png\") -160px -200px;\n}\n\n.edui-colorpicker-padDot {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 11px;\n    height: 11px;\n    overflow: hidden;\n    background: url(../images/tangram-colorpicker.png) 0px -200px repeat-x;\n    z-index: 1000;\n\n}\n\n.edui-colorpicker-sliderMain {\n    position: absolute;\n    left: 171px;\n    top: 13px;\n    width: 19px;\n    height: 152px;\n    background: url(../images/tangram-colorpicker.png) -179px -12px no-repeat;\n\n}\n\n.edui-colorpicker-slider {\n    width: 100%;\n    height: 100%;\n    cursor: pointer;\n}\n\n.edui-colorpicker-thumb {\n    position: absolute;\n    top: 0;\n    cursor: pointer;\n    height: 3px;\n    left: -1px;\n    right: -1px;\n    border: 1px solid black;\n    background: white;\n    opacity: .8;\n}\n"
  },
  {
    "path": "themes/default/_css/combox.css",
    "content": "/*不可选中菜单按钮 */\n.edui-default .edui-toolbar .edui-combox-body .edui-button-body {\n    width: 60px;\n    font-size: 12px;\n    height: 30px;\n    line-height: 30px;\n    padding-left: 5px;\n    white-space: nowrap;\n    margin: 0 3px 0 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    height: 30px;\n    width: 13px;\n    cursor: pointer;\n    display: inline-flex;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow:before {\n    content: \"\\e9f0\";\n    font-family: \"edui-iconfont\";\n    font-size: 10px;\n    margin: auto;\n}\n\n.edui-default .edui-toolbar .edui-combox .edui-combox-body {\n    border: 1px solid var(--edui-color-border);\n    background-color: white;\n    border-radius: 2px;\n    -webkit-border-radius: 2px;\n    -moz-border-radius: 2px;\n}\n\n.edui-default .edui-toolbar .edui-combox .edui-combox-body > div {\n    vertical-align: top;\n    text-align: center;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-splitborder {\n    display: none;\n}\n\n.edui-default .edui-toolbar .edui-combox-body .edui-arrow {\n    border-left: 1px solid var(--edui-color-border);\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body {\n    /*background-color: #fff5d4;*/\n    /*border: 1px solid #dcac6c;*/\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {\n    /*border-left: 1px solid #dcac6c;*/\n}\n\n.edui-default .edui-toolbar .edui-state-checked .edui-combox-body {\n    background-color: #FFE69F;\n    border: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {\n    border-left: 1px solid #DCAC6C;\n}\n\n.edui-toolbar .edui-state-disabled .edui-combox-body {\n    background-color: #F0F0EE;\n    opacity: 0.3;\n}\n\n.edui-toolbar .edui-state-opened .edui-combox-body {\n    background-color: white;\n    border: 1px solid gray;\n}\n"
  },
  {
    "path": "themes/default/_css/contextmenu.css",
    "content": "/*contextmenu*/\n.edui-default .edui-hassubmenu .edui-arrow {\n    height: 20px;\n    width: 20px;\n    float: right;\n    /*background: url(\"../images/icons-all.gif\") no-repeat 10px -233px;*/\n    font-family: 'edui-iconfont';\n    font-size: 12px;\n    line-height: 20px;\n    text-align: center;\n}\n\n.edui-default .edui-hassubmenu .edui-arrow:before {\n    content: \"\\e665\";\n}\n\n.edui-default .edui-menu-body .edui-menuitem {\n    padding: 1px;\n}\n\n.edui-default .edui-menuseparator {\n    margin: 2px 0;\n    height: 1px;\n    overflow: hidden;\n}\n\n.edui-default .edui-menuseparator-inner {\n    border-bottom: 1px solid #e2e3e3;\n    margin-left: 29px;\n    margin-right: 1px;\n}\n\n.edui-default .edui-menu-body .edui-state-hover {\n    padding: 0 !important;\n    background-color: var(--edui-color-active-bg);\n    border-radius: 3px;\n    border: 1px solid var(--edui-color-active-bg);\n}\n"
  },
  {
    "path": "themes/default/_css/dialog.css",
    "content": "/* 弹出对话框按钮和对话框大小 */\n.edui-default .edui-dialog {\n    z-index: 2000;\n    position: absolute;\n\n}\n\n.edui-dialog div {\n    width: auto;\n}\n\n.edui-default .edui-dialog-wrap {\n    margin-right: 6px;\n    margin-bottom: 6px;\n}\n\n.edui-default .edui-dialog-fullscreen-flag {\n    margin-right: 0;\n    margin-bottom: 0;\n}\n\n.edui-default .edui-dialog-body {\n    position: relative;\n    /*padding:2px 0 0 2px;*/\n    /*_zoom: 1;*/\n}\n\n.edui-default .edui-dialog-fullscreen-flag .edui-dialog-body {\n    padding: 0;\n}\n\n.edui-default .edui-dialog-shadow {\n    position: absolute;\n    z-index: -1;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n    background-color: #ffffff;\n    *border-right-width: 2px;\n    *border-bottom-width: 2px;\n    -webkit-border-radius: 6px;\n    -moz-border-radius: 6px;\n    border-radius: 3px;\n    -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n    -webkit-background-clip: padding-box;\n    -moz-background-clip: padding;\n    background-clip: padding-box;\n}\n\n.edui-default .edui-dialog-foot {\n    background-color: white;\n    border-radius: 0 0 10px 10px;\n    height: 50px;\n    padding: 10px 0;\n    box-sizing: border-box;\n}\n\n.edui-default .edui-dialog-titlebar {\n    height: 30px;\n    background: #FFF;\n    position: relative;\n    cursor: move;\n    border-radius: 10px 10px 0 0;\n}\n\n.edui-default .edui-dialog-caption {\n    font-weight: bold;\n    font-size: 14px;\n    line-height: 30px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-dialog-draghandle {\n    height: 30px;\n    padding: 5px;\n}\n\n.edui-default .edui-dialog-closebutton {\n    position: absolute !important;\n    right: 10px;\n    top: 10px;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body {\n    height: 20px;\n    width: 20px;\n    cursor: pointer;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon {\n    width: 20px;\n    height: 20px;\n    font-family: 'edui-iconfont';\n    line-height: 20px;\n    font-size: 20px;\n    text-align: center;\n    color: #999;\n    vertical-align: top;\n}\n\n.edui-default .edui-dialog-closebutton .edui-button-body .edui-icon:before {\n    content: \"\\e6a7\";\n}\n\n.edui-default .edui-dialog-closebutton .edui-state-hover .edui-button-body .edui-icon {\n    color: #333;\n}\n\n.edui-default .edui-dialog-buttons {\n    position: absolute;\n    right: 0;\n}\n\n.edui-default .edui-dialog-buttons .edui-button {\n    margin-right: 10px;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-button-body .edui-icon {\n    display: none !important;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-button-body {\n    height: 30px;\n    font-size: 12px;\n    line-height: 28px;\n    cursor: pointer;\n    border-radius: 4px;\n    text-align: center;\n    background-color: #F8F8F8;\n    border: 1px solid #EEE;\n    padding: 0 15px;\n}\n\n.edui-default .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {\n\n}\n\n.edui-default .edui-dialog iframe {\n    border: 0;\n    padding: 0;\n    margin: 0;\n    vertical-align: top;\n}\n\n.edui-default .edui-dialog-modalmask {\n    opacity: 0.3;\n    filter: alpha(opacity=30);\n    background-color: #ccc;\n    position: absolute;\n    /*z-index: 1999;*/\n}\n\n.edui-default .edui-dialog-dragmask {\n    position: absolute;\n    /*z-index: 2001;*/\n    background-color: transparent;\n    cursor: move;\n}\n\n.edui-default .edui-dialog-content {\n    position: relative;\n}\n\n.edui-default .dialogcontmask {\n    cursor: move;\n    visibility: hidden;\n    display: block;\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    opacity: 0;\n    filter: alpha(opacity=0);\n}\n\n/*link-dialog*/\n.edui-default .edui-for-link .edui-dialog-content {\n    width: 420px;\n    height: 200px;\n    overflow: hidden;\n}\n\n/*background-dialog*/\n.edui-default .edui-for-background .edui-dialog-content {\n    width: 440px;\n    height: 280px;\n    overflow: hidden;\n}\n\n/*template-dialog*/\n.edui-default .edui-for-template .edui-dialog-content {\n    width: 630px;\n    height: 390px;\n    overflow: hidden;\n}\n\n/*scrawl-dialog*/\n.edui-default .edui-for-scrawl .edui-dialog-content {\n    width: 515px;\n    *width: 506px;\n    height: 360px;\n}\n\n/*spechars-dialog*/\n.edui-default .edui-for-spechars .edui-dialog-content {\n    width: 620px;\n    height: 500px;\n    *width: 630px;\n    *height: 570px;\n}\n\n/*image-dialog*/\n.edui-default .edui-for-insertimage .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n\n/*image-insertframe*/\n.edui-default .edui-for-insertframe .edui-dialog-content {\n    width: 350px;\n    height: 230px;\n    overflow: hidden;\n}\n\n/*wordImage-dialog*/\n.edui-default .edui-for-wordimage .edui-dialog-content {\n    width: 620px;\n    height: 380px;\n    overflow: hidden;\n}\n\n/*formula-dialog*/\n.edui-default .edui-for-formula .edui-dialog-content {\n    width: 800px;\n    height: 400px;\n    overflow: hidden;\n}\n\n/*attachment-dialog*/\n.edui-default .edui-for-attachment .edui-dialog-content {\n    width: 650px;\n    height: 400px;\n    overflow: hidden;\n}\n\n\n/*map-dialog*/\n.edui-default .edui-for-map .edui-dialog-content {\n    width: 550px;\n    height: 400px;\n}\n\n/*video-dialog*/\n.edui-default .edui-for-insertvideo .edui-dialog-content {\n    width: 590px;\n    height: 420px;\n}\n\n/*audio-dialog*/\n.edui-default .edui-for-insertaudio .edui-dialog-content {\n    width: 590px;\n    height: 420px;\n}\n\n/*anchor-dialog*/\n.edui-default .edui-for-anchor .edui-dialog-content {\n    width: 320px;\n    height: 60px;\n    overflow: hidden;\n}\n\n/*searchreplace-dialog*/\n.edui-default .edui-for-searchreplace .edui-dialog-content {\n    width: 400px;\n    height: 220px;\n}\n\n/*content-import-dialog*/\n.edui-default .edui-for-contentimport .edui-dialog-content {\n    width: 620px;\n    height: 400px;\n}\n\n/*ai-dialog*/\n.edui-default .edui-for-ai .edui-dialog-content {\n    width: 620px;\n    height: 400px;\n    border-radius: 0 0 10px 10px;\n    overflow: hidden;\n}\n\n/*help-dialog*/\n.edui-default .edui-for-help .edui-dialog-content {\n    width: 400px;\n    height: 420px;\n}\n\n/*edittable-dialog*/\n.edui-default .edui-for-edittable .edui-dialog-content {\n    width: 540px;\n    _width: 590px;\n    height: 335px;\n}\n\n/*edittip-dialog*/\n.edui-default .edui-for-edittip .edui-dialog-content {\n    width: 225px;\n    height: 60px;\n}\n\n/*edittd-dialog*/\n.edui-default .edui-for-edittd .edui-dialog-content {\n    width: 240px;\n    height: 50px;\n}\n"
  },
  {
    "path": "themes/default/_css/editor.css",
    "content": "/*UI工具栏、编辑区域、底部*/\n.edui-default .edui-editor {\n    border: 1px solid var(--edui-color-border);\n    background-color: white;\n    position: relative;\n    overflow: visible;\n    -webkit-border-radius: 4px;\n    -moz-border-radius: 4px;\n    border-radius: 4px;\n}\n\n.edui-editor div {\n    width: auto;\n    height: auto;\n}\n\n.edui-default .edui-editor-toolbarbox {\n    position: relative;\n    zoom: 1;\n    /*-webkit-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);*/\n    /*-moz-box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);*/\n    /*box-shadow:0 1px 4px rgba(204, 204, 204, 0.6);*/\n    border-top-left-radius: 2px;\n    border-top-right-radius: 2px;\n}\n\n.edui-default .edui-editor-toolbarboxouter {\n    border-bottom: 1px solid var(--edui-color-border);\n    background-color: var(--edui-bg-toolbar);\n    /*background-image: -moz-linear-gradient(top, #ffffff, #f2f2f2);*/\n    /*background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f2f2f2));*/\n    /*background-image: -webkit-linear-gradient(top, #ffffff, #f2f2f2);*/\n    /*background-image: -o-linear-gradient(top, #ffffff, #f2f2f2);*/\n    /*background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);*/\n    /*background-repeat: repeat-x;*/\n    /*border: 1px solid #d4d4d4;*/\n    -webkit-border-radius: 4px 4px 0 0;\n    -moz-border-radius: 4px 4px 0 0;\n    border-radius: 4px 4px 0 0;\n    /*filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff2f2f2', GradientType=0);*/\n    /**zoom: 1;*/\n    /*-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);*/\n    /*-moz-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);*/\n    /*box-shadow: 0 1px 4px rgba(0, 0, 0, 0.065);*/\n}\n\n.edui-default .edui-editor-toolbarboxinner {\n    padding: 2px;\n}\n\n.edui-default .edui-editor-iframeholder {\n    position: relative;\n    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */\n    /*_position: static !important;*\n}\n\n.edui-default .edui-editor-iframeholder textarea {\n    font-family: consolas, \"Courier New\", \"lucida console\", monospace;\n    font-size: 12px;\n    line-height: 18px;\n}\n\n.edui-default .edui-editor-bottombar {\n    /*border-top: 1px solid #ccc;*/\n    /*height: 20px;*/\n    /*width: 40%;*/\n    /*float: left;*/\n    /*overflow: hidden;*/\n}\n\n.edui-default .edui-editor-bottomContainer {\n    overflow: hidden;\n}\n\n.edui-default .edui-editor-bottomContainer table {\n    width: 100%;\n    height: 0;\n    overflow: hidden;\n    border-spacing: 0;\n}\n\n.edui-default .edui-editor-bottomContainer td {\n    white-space: nowrap;\n    border-top: 1px solid var(--edui-color-border);\n    line-height: 20px;\n    font-size: 12px;\n    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;\n    padding: 0 5px;\n    color: var(--edui-color-muted);\n}\n\n.edui-default .edui-editor-wordcount {\n    text-align: right;\n    margin-right: 5px;\n    color: #aaa;\n}\n\n.edui-default .edui-editor-scale {\n    width: 12px;\n}\n\n.edui-default .edui-editor-scale .edui-editor-icon {\n    float: right;\n    width: 100%;\n    height: 12px;\n    margin-top: 10px;\n    background: url(../images/scale.png) no-repeat;\n    cursor: se-resize;\n}\n\n.edui-default .edui-editor-breadcrumb {\n    margin: 2px 0 0 3px;\n    color: var(--edui-color-muted);\n}\n\n.edui-default .edui-editor-breadcrumb span {\n    cursor: pointer;\n    color: var(--edui-color-muted);\n    line-height: 16px;\n    display: inline-block;\n}\n\n.edui-default .edui-toolbar .edui-for-fullscreen {\n    float: right;\n}\n\n.edui-default .edui-bubble .edui-popup-content {\n    font-size: 13px;\n    box-shadow: 0 0 10px #0000001f;\n    transition: .25s;\n    color: #666;\n    background-color: #FFF;\n    padding: 10px;\n    border-radius: 5px;\n}\n\n.edui-default .edui-bubble .edui-shadow {\n    /*box-shadow: 1px 1px 3px #818181;*/\n    /*-webkit-box-shadow: 2px 2px 3px #818181;*/\n    /*-moz-box-shadow: 2px 2px 3px #818181;*/\n    /*filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '2', MakeShadow = 'true', ShadowOpacity = '0.5');*/\n}\n\n.edui-default .edui-editor-toolbarmsg {\n    background-color: #FFF6D9;\n    border-bottom: 1px solid #ccc;\n    position: absolute;\n    bottom: -25px;\n    left: 0;\n    z-index: 1009;\n    width: 99.9%;\n}\n\n.edui-default .edui-editor-toolbarmsg-upload {\n    font-size: 14px;\n    color: blue;\n    width: 100px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    position: absolute;\n    top: 5px;\n    left: 350px;\n}\n\n.edui-default .edui-editor-toolbarmsg-label {\n    font-size: 12px;\n    line-height: 16px;\n    padding: 4px;\n}\n\n.edui-default .edui-editor-toolbarmsg-close {\n    float: right;\n    width: 20px;\n    height: 16px;\n    line-height: 16px;\n    cursor: pointer;\n    color: red;\n}\n"
  },
  {
    "path": "themes/default/_css/menu.css",
    "content": "/* 可选中按钮弹出菜单*/\n.edui-default .edui-menu {\n    z-index: 3000;\n}\n\n.edui-default .edui-menu .edui-popup-content {\n    padding: 3px;\n}\n\n.edui-default .edui-menu-body {\n    _width: 150px;\n    min-width: 170px;\n    background: url(\"../images/sparator_v.png\") repeat-y 25px;\n}\n\n.edui-default .edui-menuitem-body {\n}\n\n.edui-default .edui-menuitem {\n    height: 24px;\n    line-height: 22px;\n    cursor: default;\n    vertical-align: top;\n}\n\n.edui-default .edui-menuitem .edui-icon {\n    width: 20px !important;\n    height: 20px !important;\n    /*background: url(../images/icons.png) 0 -4000px;*/\n    /*background: url(../images/icons.gif) 0 -4000px\\9;*/\n    font-family: 'edui-iconfont';\n    font-size: 12px;\n    line-height: 20px;\n    text-align: center;\n}\n\n.edui-default .edui-menuitem .edui-menuitem-body .edui-icon:before {\n    display: none;\n}\n\n.edui-default .edui-contextmenu .edui-popup-content .edui-menuitem-body .edui-icon:before {\n    display: inline-block;\n}\n\n.edui-default .edui-menuitem .edui-label {\n    font-size: 12px;\n    line-height: 20px;\n    height: 20px;\n    padding-left: 10px;\n}\n\n.edui-default .edui-state-checked .edui-menuitem-body .edui-icon {\n    line-height: 20px;\n    text-align: center;\n}\n\n.edui-default .edui-state-checked .edui-menuitem-body .edui-icon:before {\n    content: \"\\e7fc\";\n    font-size: 10px;\n    display: inline-block;\n}\n\n.edui-default .edui-state-disabled .edui-menuitem-label {\n    color: gray;\n}\n\n"
  },
  {
    "path": "themes/default/_css/menubutton.css",
    "content": "/*可选中菜单按钮*/\n.edui-default .edui-list .edui-bordereraser {\n    display: none;\n}\n\n.edui-default .edui-listitem {\n    padding: 1px;\n    white-space: nowrap;\n    cursor: pointer;\n}\n\n.edui-default .edui-list .edui-state-hover {\n    position: relative;\n    background-color: #EEE;\n    border: 1px solid #EEE;\n    padding: 0;\n    border-radius: 3px;\n}\n\n.edui-default .edui-for-fontfamily .edui-listitem-label {\n    min-width: 130px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-for-insertcode .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    font-size: 12px;\n    height: 22px;\n    line-height: 22px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-for-underline .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n    font-size: 12px;\n}\n\n.edui-default .edui-for-fontsize .edui-listitem-label {\n    min-width: 120px;\n    _width: 120px;\n    padding: 3px 5px;\n    cursor: pointer;\n}\n\n.edui-default .edui-for-paragraph .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-rowspacingtop .edui-listitem-label,\n.edui-default .edui-for-rowspacingbottom .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-lineheight .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-letterspacing .edui-listitem-label {\n    min-width: 53px;\n    _width: 53px;\n    padding: 2px 5px;\n}\n\n.edui-default .edui-for-customstyle .edui-listitem-label {\n    min-width: 200px;\n    _width: 200px;\n    width: 200px !important;\n    padding: 2px 5px;\n}\n"
  },
  {
    "path": "themes/default/_css/message.css",
    "content": ".edui-default .edui-editor-messageholder {\n    display: block;\n    width: 150px;\n    height: auto;\n    border: 0;\n    margin: 0;\n    padding: 0;\n    position: absolute;\n    top: 28px;\n    right: 3px;\n}\n\n.edui-default .edui-message {\n    min-height: 10px;\n    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);\n    padding: 0;\n    margin-bottom: 3px;\n    position: relative;\n}\n\n.edui-default .edui-message-body {\n    border-radius: 3px;\n    padding: 8px 15px 8px 8px;\n    color: #c09853;\n    background-color: #fcf8e3;\n    border: 1px solid #fbeed5;\n}\n\n.edui-default .edui-message-type-info {\n    color: #3a87ad;\n    background-color: #d9edf7;\n    border-color: #bce8f1\n}\n\n.edui-default .edui-message-type-success {\n    color: #468847;\n    background-color: #dff0d8;\n    border-color: #d6e9c6\n}\n\n.edui-default .edui-message-type-danger,\n.edui-default .edui-message-type-error {\n    color: #b94a48;\n    background-color: #f2dede;\n    border-color: #eed3d7\n}\n\n.edui-default .edui-message .edui-message-closer {\n    display: block;\n    width: 16px;\n    height: 16px;\n    line-height: 16px;\n    position: absolute;\n    top: 0;\n    right: 0;\n    padding: 0;\n    cursor: pointer;\n    background: transparent;\n    border: 0;\n    float: right;\n    font-size: 20px;\n    font-weight: bold;\n    color: #999;\n    text-shadow: 0 1px 0 #fff;\n    font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n}\n\n.edui-default .edui-message .edui-message-content {\n    font-size: 10pt;\n    word-wrap: break-word;\n    word-break: normal;\n}\n"
  },
  {
    "path": "themes/default/_css/multiMenu.css",
    "content": "/*表情按钮及弹出菜单*/\n/*去除了表情的下拉箭头*/\n.edui-default .edui-for-emotion .edui-icon:before {\n    content: \"\\e60e\";\n}\n\n.edui-default .edui-for-emotion .edui-popup-content iframe {\n    width: 514px;\n    height: 380px;\n    overflow: hidden;\n}\n\n.edui-default .edui-for-emotion .edui-popup-content {\n    position: relative;\n    z-index: 555\n}\n\n.edui-default .edui-for-emotion .edui-splitborder {\n    display: none\n}\n\n.edui-default .edui-for-emotion .edui-splitbutton-body .edui-arrow {\n    width: 0\n}\n\n.edui-default .edui-toolbar .edui-for-emotion .edui-state-active .edui-splitborder {\n    border-left: 1px solid transparent;\n}\n"
  },
  {
    "path": "themes/default/_css/paragraphpicker.css",
    "content": "/*段落弹出菜单*/\r\n.edui-default .edui-for-paragraph .edui-listitem-label {\r\n    font-family: Tahoma, Verdana, Arial, Helvetica;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-p {\r\n    font-size: 22px;\r\n    line-height: 27px;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h1 {\r\n    font-weight: bolder;\r\n    font-size: 32px;\r\n    line-height: 36px;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h2 {\r\n    font-weight: bolder;\r\n    font-size: 27px;\r\n    line-height: 29px;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h3 {\r\n    font-weight: bolder;\r\n    font-size: 19px;\r\n    line-height: 23px;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h4 {\r\n    font-weight: bolder;\r\n    font-size: 16px;\r\n    line-height: 19px\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h5 {\r\n    font-weight: bolder;\r\n    font-size: 13px;\r\n    line-height: 16px;\r\n}\r\n\r\n.edui-default .edui-for-paragraph .edui-listitem-label .edui-for-h6 {\r\n    font-weight: bolder;\r\n    font-size: 12px;\r\n    line-height: 14px;\r\n}"
  },
  {
    "path": "themes/default/_css/pastepicker.css",
    "content": "/*粘贴弹出菜单*/\n.edui-default .edui-wordpastepop .edui-popup-content {\n    border: none;\n    padding: 0;\n    width: 54px;\n    height: 21px;\n}\n\n.edui-default .edui-pasteicon {\n    width: 100%;\n    height: 100%;\n    background-image: url('../images/wordpaste.png');\n    background-position: 0 0;\n    cursor: pointer;\n}\n\n.edui-default .edui-pasteicon.edui-state-opened {\n    background-position: 0 -34px;\n}\n\n.edui-default .edui-pastecontainer {\n    position: relative;\n    visibility: hidden;\n    width: 97px;\n    background: #fff;\n    border: 1px solid #ccc;\n}\n\n.edui-default .edui-pastecontainer .edui-title {\n    font-weight: bold;\n    background: #F8F8FF;\n    height: 25px;\n    line-height: 25px;\n    font-size: 12px;\n    padding-left: 5px;\n}\n\n.edui-default .edui-pastecontainer .edui-button {\n    overflow: hidden;\n    margin: 3px 0;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-richtxticon,\n.edui-default .edui-pastecontainer .edui-button .edui-tagicon,\n.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon {\n    float: left;\n    cursor: pointer;\n    width: 29px;\n    height: 29px;\n    margin-left: 5px;\n    background-image: url('../images/wordpaste.png');\n    background-repeat: no-repeat;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-richtxticon {\n    margin-left: 0;\n    background-position: -109px 0;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-tagicon {\n    background-position: -148px 1px;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-plaintxticon {\n    background-position: -72px 0;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-richtxticon {\n    background-position: -109px -34px;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-tagicon {\n    background-position: -148px -34px;\n}\n\n.edui-default .edui-pastecontainer .edui-button .edui-state-hover .edui-plaintxticon {\n    background-position: -72px -34px;\n}\n"
  },
  {
    "path": "themes/default/_css/popup.css",
    "content": "/* 弹出菜单 */\n.edui-default .edui-popup {\n    z-index: 3000;\n    background-color: #ffffff;\n    width: auto;\n    height: auto;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    margin-top: 1px;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-popup-content {\n    font-size: 13px;\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n    transition: .25s;\n    color: #333;\n    background-color: #FFF;\n    padding: 10px;\n    border-radius: 5px;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    background-color: transparent;\n    height: 3px;\n}\n\n.edui-default .edui-menu .edui-bordereraser {\n    height: 3px;\n}\n\n.edui-default .edui-anchor-topleft .edui-bordereraser {\n    left: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-topright .edui-bordereraser {\n    right: 1px;\n    top: -2px;\n}\n\n.edui-default .edui-anchor-bottomleft .edui-bordereraser {\n    left: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-default .edui-anchor-bottomright .edui-bordereraser {\n    right: 0;\n    bottom: -6px;\n    height: 7px;\n    border-left: 1px solid gray;\n    border-right: 1px solid gray;\n}\n\n.edui-popup div {\n    width: auto;\n    height: auto;\n}\n"
  },
  {
    "path": "themes/default/_css/quick-operate.css",
    "content": ".edui-quick-operate {\n    position: relative;\n    margin: -10px;\n    /*width: 40px;*/\n    height: 40px;\n    background: #FFF;\n    width: 50px !important;\n    border-radius: 4px;\n}\n\n.edui-quick-operate:hover .edui-quick-operate-menu {\n    display: block;\n}\n\n.edui-quick-operate-status {\n    display: flex;\n}\n\n.edui-quick-operate-icon {\n    display: inline-block;\n    line-height: 30px !important;\n    width: 30px !important;\n    text-align: center;\n    cursor: pointer;\n    color: #2A57FE;\n}\n\n.edui-quick-operate-icon:last-child {\n    width: 20px !important;\n    font-size: 0;\n    color: #999;\n}\n\n.edui-quick-operate-icon:last-child svg {\n    vertical-align: middle;\n}\n\n.edui-quick-operate-menu {\n    border: 1px solid #CCC;\n    border-radius: 5px;\n    box-shadow: 0 0 10px #CCC;\n    position: absolute;\n    left: 50px;\n    top: 0;\n    background: #FFF;\n    width: 100px !important;\n    display: none;\n}\n\n.edui-quick-operate-menu .item {\n    height: 30px;\n    line-height: 30px;\n    padding: 0 10px;\n    cursor: pointer;\n}\n\n.edui-quick-operate-menu .item:hover {\n    background: #F5F5F5;\n}\n\n.edui-quick-operate-menu .item i {\n    display: inline-block;\n    width: 2em;\n}\n\n.edui-quick-operate .icon {\n    font-family: \"edui-iconfont\";\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n}\n\n.edui-quick-operate .icon.icon-image:before {\n    content: \"\\e605\";\n}\n\n.edui-quick-operate .icon.icon-list:before {\n    content: \"\\e87c\";\n}\n\n.edui-quick-operate .icon.icon-trash:before {\n    content: \"\\e87c\";\n}\n"
  },
  {
    "path": "themes/default/_css/separtor.css",
    "content": "/*分隔线*/\n.edui-default .edui-toolbar .edui-separator {\n    width: 1px;\n    height: 20px;\n    margin: 5px 5px;\n    background: var(--edui-color-border);\n}\n"
  },
  {
    "path": "themes/default/_css/shortcutmenu.css",
    "content": "/*弹出菜单*/\n.edui-default .edui-shortcutmenu {\n    padding: 2px;\n    /*width: 300px;*/\n    white-space: nowrap;\n    height: auto;\n    background-color: #fff;\n    /*border: 1px solid var(--edui-color-border);*/\n    border-radius: 5px;\n    box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);\n}\n"
  },
  {
    "path": "themes/default/_css/splitbutton.css",
    "content": "/*splitbutton*/\n.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow,\n.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow {\n    height: 30px;\n    width: 13px;\n    cursor: pointer;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton-body .edui-arrow:before,\n.edui-default .edui-toolbar .edui-menubutton-body .edui-arrow:before {\n    content: \"\\e9f0\";\n    font-family: \"edui-iconfont\";\n    font-size: 10px;\n    vertical-align: middle;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-menubutton-body {\n    padding: 1px;\n    border-radius: 3px;\n    display: flex;\n}\n\n.edui-default .edui-toolbar .edui-splitborder {\n    /*width: 1px;*/\n    width: 0px;\n    height: 30px;\n}\n\n.edui-default .edui-toolbar .edui-state-hover .edui-splitborder {\n    /*width: 1px;*/\n    border-left: 0px solid #dcac6c;\n}\n\n.edui-default .edui-toolbar .edui-state-active .edui-splitborder {\n    width: 0;\n    /*border-left: 1px solid #EEE;*/\n}\n\n.edui-default .edui-toolbar .edui-state-opened .edui-splitborder {\n    /*width: 1px;*/\n    border: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {\n    background-color: #EEE;\n    border: 1px solid #EEE;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {\n    background-color: #ffffff;\n    border: 1px solid #EEE;\n    padding: 0;\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {\n    background-color: #ffffff;\n    border: 1px solid #EEE;\n    padding: 0;\n}\n\n.edui-default .edui-state-disabled .edui-arrow {\n    opacity: 0.3;\n    _filter: alpha(opacity=30);\n}\n\n.edui-default .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,\n.edui-default .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {\n    background-color: white;\n    border: 1px solid #EEE;\n    padding: 0;\n}\n\n.edui-default .edui-for-insertorderedlist .edui-bordereraser,\n.edui-default .edui-for-lineheight .edui-bordereraser,\n.edui-default .edui-for-letterspacing .edui-bordereraser,\n.edui-default .edui-for-rowspacingtop .edui-bordereraser,\n.edui-default .edui-for-rowspacingbottom .edui-bordereraser,\n.edui-default .edui-for-insertunorderedlist .edui-bordereraser {\n    background-color: white;\n}\n\n/* 解决嵌套导致的图标问题 */\n.edui-default .edui-for-insertorderedlist .edui-popup-body .edui-icon,\n.edui-default .edui-for-lineheight .edui-popup-body .edui-icon,\n.edui-default .edui-for-letterspacing .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingtop .edui-popup-body .edui-icon,\n.edui-default .edui-for-rowspacingbottom .edui-popup-body .edui-icon,\n.edui-default .edui-for-insertunorderedlist .edui-popup-body .edui-icon {\n    /*background-position: 0 -40px;*/\n    background-image: none;\n}\n"
  },
  {
    "path": "themes/default/_css/tablepicker.css",
    "content": "/* 表格弹出菜单 */\n.edui-default .edui-for-inserttable .edui-splitborder {\n    display: none\n}\n\n.edui-default .edui-for-inserttable .edui-splitbutton-body .edui-arrow {\n    width: 0\n}\n\n.edui-default .edui-toolbar .edui-for-inserttable .edui-state-active .edui-splitborder {\n    border-left: 1px solid transparent;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea {\n    height: 14px;\n    line-height: 14px;\n    font-size: 12px;\n    width: 220px;\n    margin-bottom: 3px;\n    clear: both;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-label {\n    float: left;\n}\n\n.edui-default .edui-dialog-buttons .edui-label {\n    line-height: 30px;\n}\n\n.edui-default .edui-tablepicker .edui-infoarea .edui-clickable {\n    float: right;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea {\n    background: url(\"../images/unhighlighted.gif\") repeat;\n    height: 220px;\n    width: 220px;\n}\n\n.edui-default .edui-tablepicker .edui-pickarea .edui-overlay {\n    background: url(\"../images/highlighted.gif\") repeat;\n}\n"
  },
  {
    "path": "themes/default/_css/toolbar.css",
    "content": "/* 工具栏 */\n.edui-default .edui-toolbar {\n    cursor: default;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    padding: 1px;\n    overflow: hidden; /*全屏下单独一行不占位*/\n    zoom: 1;\n    width: auto;\n    height: auto;\n}\n\n.edui-default .edui-toolbar .edui-button,\n.edui-default .edui-toolbar .edui-splitbutton,\n.edui-default .edui-toolbar .edui-menubutton,\n.edui-default .edui-toolbar .edui-combox {\n    margin: 1px;\n}\n"
  },
  {
    "path": "themes/default/_css/ueditor.css",
    "content": "/*根据UI结构重写CSS，仅在相应UI组件创建时，加载对应css，顺序加载\n*/\n\n/*-------基础UI构建，必须加载-------*/\n@import \"uibase.css\";\n@import \"toolbar.css\";\n@import \"editor.css\";\n\n/*-------可选中菜单按钮，按需加载-------*/\n/*可选中菜单按钮--依赖splitbutton*/\n@import \"menubutton.css\";\n/*可选中菜单按钮-弹出菜单*/\n@import \"menu.css\";\n\n/*-------不可选中菜单按钮，按需加载-------*/\n/*不可选中菜单按钮--依赖splitbutton*/\n@import \"combox.css\";\n\n/*-------按钮类型，按需加载-------*/\n/*普通按钮*/\n@import \"button.css\";\n/*按钮icon*/\n@import \"buttonicon.css\";\n/*弹出菜单按钮-附加按钮*/\n@import \"splitbutton.css\";\n/*弹出菜单*/\n@import \"popup.css\";\n/*提示消息*/\n@import \"message.css\";\n\n/*-------独立按钮样式，按需加载-------*/\n/*弹出对话框样式*/\n@import \"dialog.css\";\n/*段落格式弹出菜单*/\n@import \"paragraphpicker.css\";\n/*表格弹出菜单*/\n@import \"tablepicker.css\";\n/*颜色弹出菜单*/\n@import \"colorpicker.css\";\n/*自动排版弹出菜单*/\n@import \"autotypesetpicker.css\";\n/*平均分布菜单*/\n@import \"cellalignpicker.css\";\n/*分隔线*/\n@import \"separtor.css\";\n/*颜色按钮--依赖splitbutton*/\n@import \"colorbutton.css\";\n/*表情按钮--依赖splitbutton*/\n@import \"multiMenu.css\";\n/*右键菜单*/\n@import \"contextmenu.css\";\n/*快捷菜单*/\n@import \"shortcutmenu.css\";\n/*粘贴提示*/\n@import \"pastepicker.css\";\n/*快捷操作*/\n@import \"quick-operate.css\";\n"
  },
  {
    "path": "themes/default/_css/uibase.css",
    "content": "/*基础UI构建\n*/\n:root {\n  --edui-color-active-bg: rgba(200, 200, 200, 0.3);\n  --edui-color-border: #EEEEEE;\n  --edui-bg-toolbar: #FFFFFF;\n  --edui-color-muted: #CCCCCC;\n}\n@font-face {\n  font-family: \"edui-iconfont\";\n  src: url(\"data:font/woff2;base64,d09GMgABAAAAADLcAAsAAAAAbCwAADKLAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHFQGYACRYgqBrTCBjFYBNgIkA4M0C4FcAAQgBYUjB4p1GzFaNcptF3E7gP/u6ceIItg4UIAGqyhKKKkz+/8/J1AZw65oxgDleJGCAOqohEkGfhCHZiZNy6AVn3o1M2IxPaQhEgkjrvK9iW6ovOxlY37Yhd0s0MzUQZOIIaBjUjwaOtun8MPttor4+SYGIWjqXFaUG5qu1B3C5n2e73P/Ox4z73tIUjQPdZUz0vqTzEj2XoCqlI9VWsASSLL3zgcE/yy1o4QXQszVAUK0RmYfEAqkiBURG0HoalxdXVlohrkCqvINz7utxxIUUD4oIjgQUFkuhmMFggvH4uMeDa0MNOuy0tJML0cltk/NRFtTW1rburIx9cqG2TAb8yon32m9tL1HUruPDIuQtEsAlpwS30yX79g/9q/9K8mBXU7a2FmEwCJdawAjdrP7pHdHVpSgbF81fSuWzjkpraw3LHQbs+aXqfT1HkRCEnwgwICgWwDkAAAcCDCudqBfyrDbO9Q8CAJufiJOmAO4JvjP7zc/9wLnfrsPEU3QxRLVttC0bY1QVtLSkrVl6iwuinZe6SrMEiHDbogQtbPuxavymqZ9v9r92//d7p3AjCBpgioUXejd4LyQRxxEBMy/OqsWgdkQw6VYNDHWV11T/iTDl/RBEuBDFp6zYJIc5hByZoPNJoGZe5tikMwExCaENyWPL+RcpVDeVs2F2Hb3+uOBujf5Jhj6s0DX7AHAXc/+klIK1UqZCMWsWqko0Rhz1IlsWX+BI5Cme9Dbo/6Mub4H6o0lh4QL9QmkuNLMuvtzDGPTRbRujnsJFRQjCXFPBBAgI0EAQM4IjlAD0wNZZfMAHaCFp0SysXigqCAL4G5SijTborJEie09FoF0ERSjTiGHAXhE/uDxIxECByjFhSB8UPfmB+WCMy/Bu1+aiX6i1900WLMCMkADx0eW1rf1BXUVFCb0uBQrsG9kdMG6DPm9lxjxzkGufF310s8AlaqMUGO2eRa5yMVW2fMN3/PHdw/efbfYnxPoCaMJ/AR9QjrhORE3UTmxYmL3xMDEyMT3iV+vAl4FvlryqunVrlfHJpGTgsnpNyZv5rydfBf77tfMjHegnx2dX3q87qEbf391yY43Jz5FKyOIqHH4/7+GcDCBYnCI7XgMDLzuZzY+9+oXdrwERqK3I3ejlPhg85/Dw7o79w+PKtPb10631x/sh1k5eSlpGcekmLiEKKXBwvwCgkJMjOQO/OyEJvuabKV2W/22/P07XLR6zN08bM5Lg6na8vWmRqbTDZGlZU4am8ZmFVWvJW/vH596TTOfg51AsVHEtpwKiizqFObrCJTA6TQQ6aM7/wg4rEMEbEAkbCIKthAN24iBFBrBDmJhF3Hwgcawhyawj3g4QAIcIhGO0BQe0QyOkQQLEIJFSIYlSIFZaA5z0ALmIRWe0RJmIA0moRVMQTpMQwZMQGtIog2MQ1sYg3Z1+rDOANYZwjojCCXIgSJ0gDhy2+uZ8wG+0Rke0AWC6ArL0AM+0RPO0Avu0Q+iGABfqIQqDIUfDEtpkqsAfjEC/lADDZgNb5gHWSyCLlwEl7gY2rAKOnAj1GA3vOJuuMYzUID34Rw/QBq/ww3+gFv8CXecXgKNiYQRSiHw6CTomEZIUAghxVLCM1XO4yBF80pANcQKbCJ2YwExgCbiJsYTIym3+SfAVuJzahz5F8A24iu2E9+wg/iOncQv1JEFYApZIBaTVaKXbAnWkjWhjWwXEmTHUAzvERjFeySK4L0AW3g/jfV8NB4zWuYmMGYM5HMAzXyaxCQ+x44ph/x/GDMf8l9wTS3goHjhEVDQ5On6asDbcLLwCN1SzFmJM/vsa8FokgjKBtq6WShUmmMKC27Yxca2hWHRavLTFFIpmzJKdU5cJWzNAumwVoOWZqHpzRaI2RWuy4IVabWgeFRZarNW6jgoBG3xMSljlx4ZGbaM4SXBXMyOmH+l8KHrmmbIphZq1FwOE6KiwFDJ0VxJKBfsfr/wA4wsoe+nJp/NEw2zxqk4Z8kXXlZV3D9/r4itata3tBvdxprdmdcatzmTaUG4Kb+RG6pK5v6FbtOlNJ2dIPZog7Hodw47oU0yLirahakCSdOil5XsLaxNonSSNnxIOA7E1jFmxmL8uv6yroFFFojcN//zcrRJRaQuUyP2KjyOCxd1yhfZ8WPfZsuZnBEuguVXf8K4RYgF2t15Xzt2ZMpC3OLKSQKiUQ73fTfJeGGxHqTCNj+GX6iuCTqsSewC1eGIGonjJUohH6rBEQcOtaa2hjDEUQz+QDVqW/Lf+bD355cvsIj0Q6qx5wFqce3RWPqo+0thM1M+Ov6BniVsSWMMHIHLhDtqTjn273tVJfn2Y6S7llEKZCQNFjK4SDmYxTaTWQgVzCX6UZxyVhaRFE1PCwVs04g1bKvku7liejRUMocYqIJ9nQUDloVcimCaUAFdCb4ffMQCYxQoFwYWOLZoahIpJWWUBzEFl11C1RjScyQSoRoMuycXojUKjZA9pyOO85aP8mHR7jhMw5hfK2k+qvP+qRT3pRQDV8fDV021M7U1d1FrzZlUp4ZAYEg0ThwQjUS0HI8JC1J3J1kkwUyCriHdkHQw5IQkBGdcdnff//aePzdgIGT45Y7b7YhGkMPSO3v/c/b/s7nKh/BHLei1FTGPIqk2fgivMFdvqC5OMgcLEkPTEzSTTOS/rZGCpkzbyKrqB5MvWZOyiyZ1cyMFeeJ7aZgL0gueFC8a+9jie9aym8eCRn8tDU3twyNthBuL4IML1zY9Rx10LWVAeE9CbsVAM4wEDKZRZMYro5cYaHzF4BKaf4GF7zeTRmEWx36hfSvaA4dPYEue8XXR70p/md/tUWuM9IDmVfnNLE1gYAhDbFMcQx2jqN28/R4Z+XhXUe59wvw/3AGvBeM9AkIaE7pAWUs/yG0csreNqe2qHbYQTFVwUMHSL0yb7efUWmxFm0Q258iV0Aw2MCrDllq6Z91tFFapIHsVXMKSzakj1jybSSNy4YZ5fQ6b7wX1rSad+lbNSRLPTGimxIxYtctmxamdalg0WPnNVKsrwOvBuNFGHTCeIZF+pOfex1Pu54465Apd/EkdVmn+aceb2G4W55xDijeMslkOxQTcMK6AIxy3qTIREEalXpgETWrz6YVkHzwDDp+e1DI8ZsaA685D70ymswHnBwYwkLaOJahVpQ5WhXu6UUfu7VW60QDUoIy30BJFVhz3Ec2wg2CWTcUZN2Af9I6cNmiA5AhaWLeHU6zj3QE70ND5u9ikGmeqfeNmtK6KjJTBQgUXqQZ13EQrSYRvbWw3GcpFwCy62J5/RquswdPH99KbHs1/pxhq6llKz1DJsC3o1PLDr1ErsAvvIoUhMAQB2pbvMf3rmRv72UeREx9iLDkeIBSRUTz6SXyrhDl53uYzeaSoWkTrY3i10Vez3isSUYzmaWtyA9J5FASncK3+NUKi7QYaAn7SnCjo3iaj2G96mJYDoy76c7pYEfh1wJsPwziebUE9oTiMTTpt485KtqtvChDWnyU9UILNkV6dkJ8Uc+r63iV/2PNhAIqXmkqrR/TkQvvmOuFM2fT220TxcpKEoR6zAaV3oz3Zh3OYFFnpxY/vb0+Vx20JQPzkbgcaFdkL3k68+W5Oabn4PZp5YSSnUFd1MT6D95GlT3DaG5WpS/cCA2H0kZEigOTxdUC48QQzvHfPBZHTs1sQ482nl+ktTBm0PhSROT516AQdD/BfqId1SSut9GAUBA9zCcdpspsdTE8mhqRwJyivsG20r0V+r1ev3pv/Tc890yUI1ryf74Gd3FHjTXfId3Ec7XsaRfoVkiDxRuNj1R2cFqFE9Oa2K33l5jShWHG8KX2acH4BS0g/Lgg0xjpa7xAkX0jyJPwpeWfpveWl7Vfl1NJ094xfh2Z/tcacF2aZvrNNas8/r8Isvgp0brJZ6P5o5qmj63BgeH7Kzr7HQp0p9bF/y1strITvGjebPidVq+ZUHGmYpEbF/DiHJvOGfRj1LnSx0pS5DFXMQXPy9NMSQOE3DcdpRHVhVMRPRpjJsU2uJWj2qqmr6SqSC7OPsf2dRSMPhKKSbvJfhIjBSfe1hs4JA2K4JaijQC2DFmXzsxThwzN61ZRTI5s4hVEyPpyj1SozSjXzHiPWo1sz3J0nyR5Lhwn1WlNG2zNRoUJRjJSBuDE0TDibVXGqOuOZGm8Vkcg7mjF7P0UUA8FPj5rWExUfhhnj8lEAvdfm6qi66qoG1SbuD9iuVsdI+MUrGEft76AXKwEBq/1xELp3MtXmLt8rQEtjfelAVplsV408u1IokHIfQXSlQJfbEmxLkgtiDMdJXa6iPEbvMmmJ5l4xLhpXcBkIyXNwOpc4gclVdcK5/NBaXfFfLUUFXgBN0lrslFUaJh/qiuGvGuPco9rg8d+H6yo9rc29NgO8/RE1BPqnJsCNEFZp694OCwRIPVgXyqHcZyBzTy+oAUmTGCD9xsu/t+HOOF0KowLje7OD9SmjybbQ5yOycELDLcr65W2EvEyaW/INHlJKUT6ZNDAr4PkgIecWDBIQTnXzUgLzg8LRGDHSMpGDo8dZqki2oBm0KNStzRoI1f1cizwr/pXpYob6WBHeJUa3KILIdGJSPUJBgQ+ztEiO0x9FdK+MnKQZ48zPyNJOaAHQanCAFdVO4cY7IpsHwkbozo4M05m3MrcgGqsohIsY1XWvkyKSK0kzWCK3FZa7gpvsT8F9hrh+JDj/GxfQhDOybtLqXfHPjCiea/XfM1Vz1NXnNGoiZ1ctXNUNgvsUN6ljEtG44FbaABmLsVSPscK2qhdkEQHxBvYBoagDPcVktrIJAgsUU9FVrE7qPf0rtZSnZZebn7ahAvISdJmlSKgYHQsEDI5sGnLtgcK5gzPJAwtFlIsPs1jCS3kJ+LmqQhPyuEeKXYk1jZ6RMdOwyGAzA8TeQQNlBezO/X3Fy1cqb941DdbiiM8TbOj7HoTW+Lh+TCsHjscSbx4svXtTuXI50cds31J/AlReKxR0OZNCplTltMxfw2XcUycroRvIdwNz5aR4r1Z7dgtGH0mCScdy82tOCHr++X15AsYRRoHVYKT+MzcQfIKAJ4DjKDqJFP7CJSMtEPDQnc4MCyqNwToDQXAtLsuPKqsbnDpXwkMm3KAi4HCnZ89KoUPqMzyVrz8mLa6REDNZ5FS9zrWHs3eLK3NgwDfIkChUvfEkPCMxVi/DUEeyI91CJi2tUeOjaYNSh8AK5ToskTrqbxpdFkF5COqJgb5NtNifn5vkp6Nj22Pr5dfTTg0qmvB4UAHxzcRzs9KTQZHyqEobTAhUu5ybTurXchMdxJczg0BFEYkqTnRoIvQlmD6O9WvNc0ozzcUTgicSNjmNBNHMo+mSxPMB/wnj67P8Bjfo5AruFWzncJhD45ZAGpn5kU/l6sxjHO7NJO9H2hWa5fg0ITxQEY7xQPcvo+EpDCChk8PsZ5CZq/dqGji/x/ilQRWMyPNVxPZqrakhSzZsyruNMGZyjp2RFLEsp+TxBObJqXO5nDOGJJ3B6dmRUMRwUc54Dx7duqgI1b3k+3oFQ1oKLDsLGaQYb4kOhkiEuvgdGncJ1Eh1m2ViTdYQ2nhzCoo4jtKocIo/L3eRWcR+XROxU9dPX5+fEvB7yXqi0baw6UPlDqAjgbfXQYr7UgJ+s5WRpwq5N6lUoEawA8aWHpXDEcp9ZObs5ly1BnSeHtZ3ZqgYXc4MKFEUHNBB3Qh/VLqofI3i+LBGE86lIyzTbKVPg+JmJwKuGMPmnAlnzxSkeUXGjqtzLgLGzv9R4GsfFfmmERoKAwhXjUPyJQyDA+y890CN46K0zC6CUx1SLZoKRU4yeHa6hGK+OVW5ckmNWu9XA1XszpgCHLlhwFY7lh8WlR60A6B8KNQ7pO8uHs+k8/lhxRgPwZuLgZHfKE0+Zc2O9YbrdPyh9uJMDM9+X4FAVXt2FxDp89FpkIuXZ1+ajlxV/+OM8+BLY1bVTlwaW+261jCSYMF1UIgAzt784SSWs8vk6CTDChWhhHoKBGw/KjBZgj0UWI8V30HsUShZWWI5AAjeyRgSS7NdgtQesurGGIg9v8fVLFhF5OHWWfUsP/9ThNBVRIVDugCZXunkrhQGNzEFom6tTxcU8+GNn0HJKMQ4hs2CIeipkTJLTk5zHNLWMo61NYaXsK1HswYMRboylxWasK/LNEzOw2NN0LeCuZlXBRxEK1cLJ6jiR84NC3lRT7SgID6gZhIb7lTCFSD40qCOoPtwCQRsE8SIjJDHKQBhCdmdZiIzs1hNKXFeGuWjqGJQ0pw+kro/hBavCDnR8Hi45M3AjhrFw2JaroROvNnN+veN/NXuL0pThl2yXrVlY630fFG/g+pEBvsdabDSaYN3FHmHryda7+CxvoEjQ50zqFeAz2J8RuEz4xp01/pJBIx3n3ZZoNqF1NepGx+6L3yRvL8NYvStZKnJbyz2eRCEJ9VxF6rJFxvOZiY7Oe3bicSbZrLfc5qa3rHOHXMd+eiRY8LqP8xsZeB4Pzd/DYRVJ6w2YZWJUJ7cSTqyqwqFtf/LYrwq9bELGWApLpBM4JY2KmfIcZ55d47rqztZqLwGRj6LZLonOR5d1ROLv6SOLwIvwQknchvcJDBFLRO0SbS3gBhz1nYybNDK9iYqFF2wh9wb4DKpDHCWSgu4/d6EQqvWZr3mbCS8G9FJcTqJX5lB+7tBMuIW04wU3Z+1PjGsVttOPEWDKJzMQO9e1Eq919LUmVotw1pDdNToX50QvIT6mjprNY9X549hTSNauLco6zuY+Z6rdAwVqc3NbGVPG+1WaT4NDJlCOlB1rgulpfMXlQgyJVM4PU50aKqjM80yL/QV2dSf3NEXK0xI5HbipkDCbrgGrQhOGq5Hk36UBMmuT6hD3syf2mmZC+75ot1If1k8PndE5iO5rDIcJLRiECaJF8ZNeimeJIa1zk8dxbdz96D5U+lHf4sTzbxIZ2ClXx3lLK+IfDojF6BSkSGHPAjF3/d/49NGH8b1I/iNN0lvSsMw+ELUOIpMo8u3vkc6oezcJtl7MdVMFFfkkWzKXp2c8x8WJ5wPF/Y0DMbwlWWCdtpbhiHFQ4PuI+9CRkeNdBqL7oLyn3mp9EDupyjfx1o3lDsiEmGeHW0hICEWKoyW/RwcvnZWO0tLTMqDik97YI6Sry7f9qy3U8e1lsWs0zUV2IjW5GX6f7QlXpP/v0dxhpb621zbkdaho/ymah8uIqoxwFHFxenaTfn/Dyg4yxJnptBRdcXpqyhANJK7YrmOsNebJvzjDzwkWjQ8i+BJ+lkcW2oJaKUlnvNK5naV9hCmLacJPS6wBKQSghk+Dm9GE8rcJZFiCdJiYGkGouMa2D9S1BAyzcLM4MwQ/vyXRCISm1TOy6ai8reit+BJxdBfPtvxoyZYbIr3WpDOwYpbp10xqCxrBFKM4qMptNA21T0Ueu+cmW6oKg5BsVGCXcOQIpxBaqVHirTI0r5IbTG2Z5LhZpEyQLnYPwoExjMzyQbHHnImRe9ocHtEMVA+PJbpKR+Z7ScvZ6WPJIvS42hAhCtdftX8e895sRkiFw8R3GIymM8rj6A7auIdThm34bR3UQRurSnCT+EjMO2rPR0jwiPpqbKp8E9OFfnhpyIaVFR/KL9UkX+yTYXKh/TPUyym3ZqZqNdFcIP5YdkxAYcvzlrZTIrrz42Zno7JPR9Fk5u7d9e9GRT7jIE/dsRXR1w3LQ9hzbAe2E+zQjZV2V2cIJANo/Rk+uNeyGYCP1P5gFCfDXF4XUetLlDbUafDq+W4shrHxD2dLdNRUwuaxpMchHFFZ+/u4ub7HJ/cssY0NdXkN1WHW/qn9s9f2HIL05jytMOcsO2a43BaORGA11tciL/O6OLy6EEFDaJtJBIdr1h0Y/ZoKsDsQ8GDwUdapcH7gqVsnL3GHnc2uPVyq3thVfbh2kQqZxPo1YNvr0k8PY97J1l3dtDp24hiItONJBA0NteVd3amEcVtcp4+jrXFlRPFDBGDxWCDx+9PcAOdnAK5BuuUgU5cxYPpZDsotC21FQ5Cd/JIRjmlqtKjnLnNYcdUx8LAjPHsZGmSWJwoTbkjYDlJ3M92N0WaeAcuMF2LH6ZEOYcLheHOUUcFDAKEy9FI5wihINwl6miAAAHCheOOB0Y6hWNybrgodEbTNN0V15Il46N1RZfuhTez1BX8FdRYoLMEmbr3zLgUu9j35RkhxE+Oq4g84qrW0+xVtqHOobaLQEMW24BwRpzl1CPABXIBz5+DqAF2MBO4rUAz8j1Yk5YnrWsDVZrz51euHN2/3x7prRNy+WyvkHft9MM7Gh5+PPA48EYOBpttujI+/2OTWTDGiw0l19ttmihme4EuKeU4GUgom5nHQPIFzFlTrao2C7uuuk5qrW4FZsc3sPrHGFxXRw2Yvx/NKOPv8zPg5huh4lF9QwMjdAe10d4Gg1aLEBh423Zz+t3RzU1Naj//cS94fPwrZC+/WH/evuRr4NeSQFHAW7FE7NFeOTg6qq6rK712rYTf3JyRm3eTHBMDrFeaDM6f31HawSeu8UiSSJJmS5Ltzoh9cu7JEKB0EKTJUoVm25Il0rU5h2l/zvnW8/Q7B0amH43K5aOP1P4F1Wm7TiBowQK5PDO+Io8UlYqLcEuLr0yuBlpwYItuRa0fkCAzuuLiVDfotXQl3cC5YP93dOsCPvirYvE9SJOOKcAE7zhDG7UP+Hcm+5cbGxsy/N1cYqJdMgUsZCTzdLN9G9XYKCaIWWK82LLOLurZrGdRASKgHXBj2pBA/H223PEy10mp5PJQPGXMuIon8mhTwrnMETugHMRyPhKHtARIR1oL6Vg6aC1JB8WSoMteP9PvhBKhpwgvEgJ2qNcJymcV4FktdMRMazQtx5FGkWZXOUEF9306aE5rHCkYCSwrjl4Zw1J8hclOjk5k+CtLIbuUHmm0OIUVFa6KWikKiQtjhtgVl9HDNsArOULOSngDPax/bELswphxoYFWMiv/8HBZqj0Q7Qd3LL6Ll6nHncxyz2VS5GHYbEl8Kiud7hsFCPiDXbnreaRL1VYG3Sca4AEThSpKkiSIRAmSpBEBX3qCKEkyUnItVCSECUJ4vBBB2J4JphzC67X30P+1wotKmdIvlto+xrVP7GuMi6TIZLDZ4dfFPx3U9551/jPXykzGfRyUgD0PMqdNrpkgK3wSvDRZ7IRppBw6reHELTResrQtBN4pSbMPoycVQo3WsdYRqdFu4ExxwpeHI70Fh7r5i/YVf129zymUUTLHJswuMslkqrwpgiEnh1ACIpZu2ISxU+g1SSyPg2W+NfN8VyRYqdIxXEvHUi4rva35nCrSJtbLklrlbSkvL39mPbypWyDuq4LOyWUORbM2ARHShD9GgAj7+NrH+NaPTlofsj75yJq/oLzxgp/2y+myM2ULb5U9L/ubR9aRtVChhygngwvrRi/J8EyVSlM9M8YELKdKe+2xO9d539JjXaNcXKJcYwcChBzlErUH6GdpJK9Bfp0A0SDCEwptW7g7jrJctQrM9HdvLrDkMvvrD01kv1FYotEy0yrFELGf3u29cv2jvezeG3q0u9rdGe72ERdRFqpjundYbl9E1BLXpfdvgGOHn7hI1e0Cx7uLHlm5BLqIeM+e+mSW+cVHAs4fN1odhNTMIO4cYLIkRmNj6u4WH++WHefmBXYnMjWZKXQwh8sMIqnRq0NuPIWTk4KHF8qsltIByuyijc1FMxT5+2x6jDX+SoSau3nJMlMC5bRypn+lxTCPtefc4k6aYZmxplkqbJ3WQmU+bGF2KObusr3N2Da/DZtr0wuZ+DLdpk0KYpsqNzflHKzSy0tp2uYrRl5XRr/2hj3GU+OhYWR/1AosCcTWah0CsXptW7yk+1jZmLlozMJM1EWs84IkteBd0h6y099846yyMKwxRhpac4FsGezEIeISpGBbqAxnMAYRCup8MZILRapq0fAmrifUs82fI3sUucR5WZ67VNtZCxpuPjfG4uj7jtybos1ytgFrAIqzJ/LSyIgTPycabrtiO3ZzbK9aRV9t9attqGp70Rb+hyv1wSDyUrIb+hf0d/AORvcx9gvp7K6wNtF4gJGkeqekChycI85rsrc4ImN/VWfD+syy4BcYP/4t1sFWMNuUTFLnsLIQPvyIoyxSFzH6ofhuCs6V7ab95/yu6SPtObgerVaMoDmIbFj9xGCnPNCBXbWF7rhW2/aaKbLiyCwE8ImZGV9S6jF10lyZUvzXrBBkZKZ95iJMR81RE5nvyDqIWaRmI0ORv9tNnm2uuDZV6uFRMvbYMrKoItRexdoZxnKD4sXUyHeDzTSWO3MHHkyvAwwEkowgQwh8eJAkgGAiRcAdQZpV6ugf747Bh95+hdPLOZzetE9/5NzyuP08XyIH0ggE5aC83EQttn2cFjpg/Job9SX0o9XrdcD4DbckkZr6/AK1UBbykfew9Eijv81RUu/enuO4MJn7EKzFe/10++l9+ZZDxPlzjvI2Uz0iFR5tHxdhkbVbRyunrUjC6sEOqWc6yR0d5VED+JE6MetDOVi96vEHq7/8bes86Dso9LMe8R2x+eELEGwEUZJUYtN2X51qY9LQpkRBXPOmTo5CUNCdxZn1lwALMulsnaokrlFFkooCIYzQbGRKlPLGGqKixAbbZvSW99lmr5VN6achTkwGE2+RJuH6cd8pLz0Z3xqONeQ6NWgb1m5JGh+qzsE9I/XjcrS12uKdWVxT69dXR7nes6TnipraGm5NQ03/pBqx03wvrh/qxe2TBoMTTdhT1roulh2lsVP34NuHr8F7omtMag71NfxpOGtofptuNfxr+OHP9jct+NwuzuyYZnYqZiQXy6jVOi0aoVlbU7u3Go6xVjWkzosX74vPBQNNtcwLxoGCAo7MI+9Drx3yUc524qEQreoOa3swrFvb7Z+4+Xdza7Q1J7ds0G5YEKjOi6+/ZWs2pCpTEy51VWWM4WXFGJdIvS7n8WD+Ku2qYaf9uBLUjwvv0nb5ztOgb49WvOhhx2ptdagaqL9atWEVAOyrFvfhThjHGPrEGPvgHSzDSVy7tstJCJ9c/JZDOD22Qy+H0CNv557M1qYlTdBjhGvf2HBSs1mNiZ7BHpPjTXqMcIaN21sBj49uY6Ys4g0iy3SMKJIW84v7tu+T8WN9vyy2zvpGQilRMcDTBsCT/OQ01qAGCK28d6cv9wCN9Noe3Xsa22N6sGtytBenx6qt0qxdlUHBQJGnabuqy1dh9ZYniWLAt7BdT1mxPZzhtbW/O1yNLmgXWFeDMyYhz8wZEF3DeXmCkJMLto8UL0vgwo7TU5R6AXdbQATLllUJBK8h2H6nGKbC/CoRhP8aFsAWsKCqt0oAL1sm0Aju1N8skMYDci3ZwMuWqTWgt+wFxMK/vWwZDGzx/rAeT85TA5+3IRAUnLeETbD69WTv5a2wTKagZdEyQ0Mz90WS2BgWa3Xukpu7mv2y9i9fwi9eKjJpWkgIDSaLY2PhPVv7J183+Gw3MGGmAcxgJdeoV10QuwaoCJVqSVxNfXJQYXt2U1hya1jFeQkVYe5xXlWxJlmR1Thny99l8yg2NNaxlg9t+yCLH1RGdd7J0lsBzYtCZ0nZIYr0XMoSPlh0ICGRw+akJVDdczDiDmUP7UmEgUlITEA9HBXkhAQOi6PZrSoYPJU1x6s3MQ1jAzEl4XBMD98Le0o0h0xI3XP40GFNqhG/OoGsKX5p9NJDEgzSJ6wycsnyeFl2c+rqILg+aEGnxAJhLo1bvRyelVKT16pVFyBtbIyZrVlj+dtIlPvm9Jzc3ZGDLn9LPZW+7tZ/pw7AJ0EZF5TjjR9aqro6noRH5TFbksrWd9QLd04a8Gvk1MVnNWRkBJ1tdLRovYc+xXc2+3n+fI+ZY1Zn/0/JaIZ3+yR6OKg1ubqr5XN86ChnJpTtP7CEOEVvSUiXsoR2L3hhzh6SpCTJnK9SZQ/nvpAv7IQsynGnLxkRLqp5JRnzXFURGV/A107bATtoV8vXfTd2AzCIr5w1oOSd25tMT3sr/XzJWNawPZY1NTQEE34f6u6OrSoeh4IK93g5EdD8ncMFgvAkbRMuTNpGGJ40j3DBX0MEe7o9gY+G0XwCmU5OXphHhOgQkbeFvdXDk9syNj/0uNLHuM7ou+LxcDNDfu260I0ivB7hbB9BOHjpLwlckxLqD/YScwjQx7Ii0+6ep0EmydY5u/6Ieom5cQp7fD9wWUgQTiOZNDXUzbFZkQePOqw4yUlfwxmXd3v0XaE3d6XPY/dlxjX59XFDiLV8lE5oLV+j6Q93S3c/oF/vDffS7dgp7DEY+B3xONEvHPeQrXDcx+cFB/PiQ3jfsAv61HhoZj4cCTvts7AwqX3/zg/mcoPVXF1crTjvDa3Kuawj7QRAAwSxDFxpY0wLnzCSwKch5ubRy8ye+Qf+KIvq1aYs08ASrYVCPK88fw6Rbc0m5qT6VIrW5YlgoXbKlM1gmUYLFoP9/50p41eN5MZXxlO1Ryda4h+jA2FUnyB/8VEhtetsEWE1TO/fN8Wu9ooGd2L8j0r8Ay/nzpIZ7W1wtlLMxt3uWOd5wtYmoxbfqF0Uva8HoTBII7FNOYqNN3ln8c7EFBMmXueIG8GhFOgSSg/ZAlmJQ0tQOSWjcbdW5lMmcfgx81E84FpHtnyYkKxKFprc3XFDHFwCcTF3NvwJ2rR/JfVko1MwK/OU6g5DXb7QtYqH57TP1N+KpZlzuyrMh4Uz2jnz8uhmZhoGMzQsr+ia63177YULayPXOXQFrkRRoLyz60LXEgJXpD+wq1Pechc6sdVuXeDC6nhqPiyENYLCzKN5jBFnUiWOzart6Mt4ah5cie70ryZjpwR+YF5uLdrHJZwmkr8pgw2bfOyA9JlRxzEMiwMVrPWkZs6bKM/EPnBWszvK67K5j/zBaFAdaA+ufat07aJE2LnRWMO6lfjHWH14KXOdD7sGSScCVf5y1PL5CzwGFjuRU0y5pJ1LlZfgfPzCuF+bqv+pxjfNnPUkBStQDMP5IfjRr6Y+h0bxC3XDLJpbhG0XWen6NrgWtAfVjV5242EuRXkl7AZnk/oAdYhg2UttpZ6gMqn9VJ6Ix5xaL1pPNVi2Unupfa2EYcthwje80PCWLQhX/8jXnz//zfIElevOG1tCNVCXLOmrjImOBu5VhTFQPisfKocOVUESKvOJef+111AQFDSlVmvfv+9naqEn2NpaIwslOcR4z4IcXbzAQGp/rGMXbabU2/V0167SmdKu/4Cb5GBp0Lxrmf7Hv+PjdZYBT81mvt1AmKmi88/BhvPpGbOn89wE9SEd6sFKWiUBunHcC/y71ykzaiqMsWZox74pmgtJGOVSUCGS+ssvcmOiplSM9qH92//QAkjOkS4FdSJpgHzi7TMiZAURnxGEjL/ZtiXRSRD0XyNvUQwa4eZbwDmAiWAmYVWKVJoyR8DJOcnJ0qJjQsXSdQHY9EIgGcQpervbdtD6mcgm1O36V9vYW+m91gSRlZhwFwcdrqTg7hLETyfril8v1dJZ9Fok6mDihBXb6D6e8sP+e4fVBLbxV5PIyFy1EgWWOitWJjj95eTQ3H9ERveRTXb9vWTb8h62YdPZhzRHAanMWJhcC302lALQ500uvRr+jA94eWWVCThZlqzKVWtgmNwsEB0Aq9gQm2fLDRpqBkOvYgAOxJYdcAAbuqYGvXAXUAocCyjAXFh6QGO+U34OgdMAyJ2vAHfUAoMAAA+WGapgJmoo/sxNA26mNnxXuT3jO3tB0Hjhm1/gjppv4L82ig3rYSZqxNGLe3LYMug7Jprb2Mhi/d0IWaDy0OhzSAiZh7KA/i5v1AgE71ctoUei0SCjZqqAicCgxdFRPejNAskQoS2vZJB+en1EG8vfbCOy6CxiVX+/uVvVCMBEWZWkf5cvlB5OB7322J3rvPGkCKFKIFAJIw4I+NJVggjhATL4OIc6JWQJ27iIoW0MtY+RS2MvsrrXF17gVjbaDO9zrUYCTzfXl6TZ3GLyS/Ji7hrSSacrsTmtnlQDCnY20Eo0eQo+GkaVYNev7UA1F8FQLLodEI7auj3jufzR0ukEl1KlDSNwl2ZnfOPOPqWtayGYOeNCahikbFIDZmb2pCQakUgjSbwh4EvXiBIlN0oDBacTVfxvE2f5qn2BAPTa++4sIf/prfQLQuA6xbELUP8x7retz/xvg3gM29r8+neT6FX9NMG6lLXG74PnVZ/mjy4u4+Ours0cJM/lKvQZ4uHyZuT+SeSrh3+fuk6WXhuyFAoY+dbaSx30tTCU168ZhqGfA6kB5+RoXjUoFtmfna6kGw9AAxJ1ItODAFskarFN4bH6+mPH6zhxNDNIksNAi0zocVN3MFghIA3YT7dnytB/b8BiA/ich8cw+yqfP1BuOFBVReC8eHH11St16tu3IGnOw4iH7qWS8QXjUfYj0mh6tFRMLJIwtkq2MiT0m7G4qWlxBZgtq0eKJNKtIO5BaakCX+tK/ADl+GBqg5GOoDNqgJagzU4xSogK0Jazv1Qpm6UsDmpu1jcWYXXl/Zx+tBhgDZSXY4t+1La0BJmZVL3CMOuqTNbP7g99728NKlLgFhTFyuaWNjtJaz3vJ/uBQj0Y2nmvjsDee6z2wNazgygxSsrTg2gZP40qdDl3v/k/NI3+76kMGf0fWoKSoAsoeVDD9U0LWDj7poWBKzETRistrxXj01+G8vJYkd10y1skHo4N2Q2nBrB6+2P52H1/xlDL6ls4QTr9KM6Yu9tav9cT5Bw/C59uPBzt5KpijCxEm665b7LAxqPcHZGDHq9HkGlkMeSBQis/PUNHfv0H6BseX69241fhm5xs36JsbKiHk0gJkZzYeC0r0UHNrq5mqx0SByWz4Wulmp3oMAgBRrrgkJqDfzFZy+dneaV5eqZ7ZT7zyvJMS/fM9HpWimcagdsC4LXdwZxywqmfcgbsdzrhHndEjIZRMg0/lBcSzA3l94V+wg0vbnuoRoaC0WKr8D2REhT5+ebl+ZbrGnzy/GSoIN0gkHagfv1srJyDCWVrI0KM05XDKvsCU/KdgTRvD11RERwAR0dH3kVFupyWF/0D/Xd+BRIwj2FKBCXyanT0QGRMhzXNCYH/pvUPeBrsDGx2uy1s22PwOVazHu0VujqQ5iN1+dkHvG9mkPVkH0xg06wVh8JxQnvJkSn3g0tL02E8Wc/Rk43F5kGLlVpZhkAc7aHY+UMuUPgZjZPbHNrIK1DQ81loyZ/Vhi7b7NBPO7yg2eIjtVBU9dlZQbWhJRK/jFkm4+YhmDtkPdjkShlG4TUyDQp/1a0NPfzh+5etYK2lLmxjej8xfaO3vjA0jG7rXzW6W5NrN8OAYUc/bbHLgvzgAPrMmSyUEhXHRZYSMEyUJAiIomZTs/yiBjigFBeIKwUb6ugrop3LOi9kLBrRL8/LXkSHR70Ay2bCwZ9tFK6lf2XwQE4Ff+STkII8HBYiTwZfZFeQI18VC2xCOHJ3WE/Xw2zkm8fmIz8A+Rdr2GS3VbCT9H0NXLnbTkPqySY6A0D+1fZQ/tlaJkD5pt5L78pvdDbKYvuZ1jMTkipGlL8TotDbv61kFJbo6Vf5p1VsZHD/l7qd6ULhmKHL8BIbhcXIb3DaNfRdMldddDnbeazCkbFcI4WVyKdU2xtogSs6bQeTYBiuq6JPxyw9HTvvGgT7cgzszjGKgLzLckbAJdHTUc5U30y9S3DKOsaPla1ZipNXoCyX8vDIPIXpY4lh+k/VSzr42TpyANZgo6+lR2t0skIUnizLvylSu13lCpGTa8lvKXF9E3ZxDegXQLZ05liYRlYjjnUmQB1Za+SaEmH/Ca1nK30LjUC472oo1CBlWwPLiGNfLwvWMDKPlY4xqdt6sz+jgm4L2PJt5ikqdezbHmdv9mtp9Em9cWkHx/VWtgV9G93Qcc69CAD4L+TbDG1pRmDm77+sEj3grVrVlPncz3NbUIbr9AT/ie9WPosGD0U3SzlYhP2Dg/+HdLu5Gwkc9Ag0wjrTCnY0+F+C72vwjLBGayTofGLppi+c2YGFposrij4HFivvgSWm78AKt7X3Xmlz1KAi8mCIS7sDyeHagWzxU8Gib6lCND/Q7KmJO7ZMz+56IKIprD08L21TGIJjOsxPB4oqi6CypFHwrvlvXBuDlWfC9/o/WiWVw83lNbbqVxS0dlvU+/XWfTkspvnwy+EPilkPxfQOo19u7uXb1dVCAl9GzWffGQQcSg5mT+KVSaTEQvBLb0gIzL+hFXQGTg6XzeGk1v8hUwMUXL8HNy5d23K/imJfccTe1b3VLecWur6FUdnBLyMoZ0wdFLzRHRS5S1sDs/jmitVabMXL/ll+czofVIStD0YlBAMIPgQQQgT0t53//wCDBQcJCIAIE8q4kEob63wQRnGSZnlRVnXTdv0wTvOybvtxXvfzfv/D41O70+31B8PReDKdzRfL1Xqz3e0Px9P58nx9ScrQzV3sUofd0q3d1lF315067nInZ5PRHa0WiCTr5PjooW5Gcsogd0NJezeQyoBP7puo4iQNw4OR4/CjqcOF4WJYt35G5rdG6+YhkWF0UhlMZ/WBMqwN7x7FA+Wi5kPVJmkwLryleNQ/lmMrrJCGuGE87WgxyDjOEE+rPT/Kc3Y7N+dpIUmGhSHinmIxvCd8cPMF8INuJ2ymoT7lWXnIrVLsN+Sy30DSMRk8DMVIvHfKOMxAqU2/qq6M4TcodRzCiCAq+CodFVEcDTuAcfEJD3rOfWQEC0njWJ7nMRvCaQfNN7XxQS0Fw7km11YKWoSa7cD6QEcTL3pWceC3Ge1gI+mDdJdjnlSUpus7nywrKv0Ur2th8uAaTB+q8h5Rub5BzaxvSCqa2/yJw6z3+LWAwWpQtpDBVpIwq7vmT1gHruV1E7WEhomp+quIhYL0qQd8q4T74BIUgb9UTJtWoBHcIW4Zxfe1zTUalcRAxqgZyVNtBQ0pPc9Q9vM6iUlq9TWkdEzHHmFxtDd3thkXNayBU5oOiBIoHRMyOppaX0fNM0mGhrTkhTIOLdmr9G4cZsYXjXvDpMOd1jeBUQWq4+6MtM3W6jZeFWjTp/H9vNLg8wuovV+a++8+GqIEfCwg6Y3+F+paXjrmwuD4YVHL4GEbVb8vXpJx8Y8eOQunTEyCYUPr/IU2z3c21EyMr4FplXDXqtPydNGspDGMINsabSnrEFkrji0FpBgeQNIODSpav3nmXZMAXm8jJKH49IDHJL3K+GuAPGBYtqj4Kln7wvC0b80EG0zZjhyYYu+sg+pGJ+yjJuxn5XQG\") format('woff2'), url(\"data:font/woff;base64,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\") format('woff'), url(\"data:font/ttf;base64,AAEAAAALAIAAAwAwR1NVQiCLJXoAAAE4AAAAVE9TLzI8QFDMAAABjAAAAGBjbWFwXUI5VQAAA6AAAAjiZ2x5ZkxlIqQAAA1gAABWsGhlYWQtx9f4AAAA4AAAADZoaGVhB94ECwAAALwAAAAkaG10eLQdAAAAAAHsAAABtGxvY2GPkKU6AAAMhAAAANxtYXhwAYoA5gAAARgAAAAgbmFtZQlTMroAAGQQAAACo3Bvc3Sj/YFiAABmtAAABXUAAQAAA4D/gABcBB0AAAAABAAAAQAAAAAAAAAAAAAAAAAAAG0AAQAAAAEAAAD/GH1fDzz1AAsEAAAAAADlVEolAAAAAOVUSiUAAP9VBAADXAAAAAgAAgAAAAAAAAABAAAAbQDaABMAAAAAAAIAAAAKAAoAAAD/AAAAAAAAAAEAAAAKADAAPgACREZMVAAObGF0bgAaAAQAAAAAAAAAAQAAAAQAAAAAAAAAAQAAAAFsaWdhAAgAAAABAAAAAQAEAAQAAAABAAgAAQAGAAAAAQAAAAQEAAGQAAUAAAKJAswAAACPAokCzAAAAesAMgEIAAACAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFBmRWQAwOYA7fwDgP+AAAAD3ACrAAAAAQAAAAAAAAAAAAAAAAACBAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABB0AAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAAAAAUAAAADAAAALAAAAAQAAAPCAAEAAAAAArwAAwABAAAALAADAAoAAAPCAAQCkAAAAGoAQAAFACrmJeYo5irmL+Y45jzmPuZE5krmTOZW5mLmZeZp5nXmeuaA5pfmp+at5sDm2Obx5vrnBOcG5wvnGuc15zfnUud754Lnree859Ln+Of86D7oQuh86JHoqOi46QLpK+nw6wrrbOzp7VHt/P//AADmAOYo5irmLeY25jzmPuZE5kjmTOZW5mLmZeZp5nXmeuaA5pfmp+at5sDm2Obx5vjnBOcG5wvnGuc05zfnUud754Lnree859Hn8+f86D7oQuh76JHoqOi46QHpK+nw6wnrbOzp7VHt+///AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBqALQAtAC0ALgAvAC8ALwAvADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADEAMQAxADEAMQAxgDGAMYAxgDGAMYAxgDIANIA0gDSANIA1ADUANQA1ADWANYA1gDYANgA2ADYAAAAPgA/AEAAQQBCAAsAQwBEAF8ARQBGAEcASABJAFgASgAuAC8AMAArACwALQBaACoAJwAoACkAJgAKACUAJAAgACEAIgAjABMAEgAIAGwAaABXAAIAOgBmAE0AVgAGAGcAFgBpADwAagBrABkAXQAOAB4AUAAcAB0AFwBcAFIAEQBOAAwAUwBUAFUAOAAHABsAPQADAFEANQAaAA0AXgBMABQANgA3AGEANABiAGMAZABlABAAOwBPAB8AWQAYAAEABQAxAAQAYABbADIAMwAVADkACQBLAA8AAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAABSAAAAAAAAAAbAAA5gAAAOYAAAAAPgAA5gEAAOYBAAAAPwAA5gIAAOYCAAAAQAAA5gMAAOYDAAAAQQAA5gQAAOYEAAAAQgAA5gUAAOYFAAAACwAA5gYAAOYGAAAAQwAA5gcAAOYHAAAARAAA5ggAAOYIAAAAXwAA5gkAAOYJAAAARQAA5goAAOYKAAAARgAA5gsAAOYLAAAARwAA5gwAAOYMAAAASAAA5g0AAOYNAAAASQAA5g4AAOYOAAAAWAAA5g8AAOYPAAAASgAA5hAAAOYQAAAALgAA5hEAAOYRAAAALwAA5hIAAOYSAAAAMAAA5hMAAOYTAAAAKwAA5hQAAOYUAAAALAAA5hUAAOYVAAAALQAA5hYAAOYWAAAAWgAA5hcAAOYXAAAAKgAA5hgAAOYYAAAAJwAA5hkAAOYZAAAAKAAA5hoAAOYaAAAAKQAA5hsAAOYbAAAAJgAA5hwAAOYcAAAACgAA5h0AAOYdAAAAJQAA5h4AAOYeAAAAJAAA5h8AAOYfAAAAIAAA5iAAAOYgAAAAIQAA5iEAAOYhAAAAIgAA5iIAAOYiAAAAIwAA5iMAAOYjAAAAEwAA5iQAAOYkAAAAEgAA5iUAAOYlAAAACAAA5igAAOYoAAAAbAAA5ioAAOYqAAAAaAAA5i0AAOYtAAAAVwAA5i4AAOYuAAAAAgAA5i8AAOYvAAAAOgAA5jYAAOY2AAAAZgAA5jcAAOY3AAAATQAA5jgAAOY4AAAAVgAA5jwAAOY8AAAABgAA5j4AAOY+AAAAZwAA5kQAAOZEAAAAFgAA5kgAAOZIAAAAaQAA5kkAAOZJAAAAPAAA5koAAOZKAAAAagAA5kwAAOZMAAAAawAA5lYAAOZWAAAAGQAA5mIAAOZiAAAAXQAA5mUAAOZlAAAADgAA5mkAAOZpAAAAHgAA5nUAAOZ1AAAAUAAA5noAAOZ6AAAAHAAA5oAAAOaAAAAAHQAA5pcAAOaXAAAAFwAA5qcAAOanAAAAXAAA5q0AAOatAAAAUgAA5sAAAObAAAAAEQAA5tgAAObYAAAATgAA5vEAAObxAAAADAAA5vgAAOb4AAAAUwAA5vkAAOb5AAAAVAAA5voAAOb6AAAAVQAA5wQAAOcEAAAAOAAA5wYAAOcGAAAABwAA5wsAAOcLAAAAGwAA5xoAAOcaAAAAPQAA5zQAAOc0AAAAAwAA5zUAAOc1AAAAUQAA5zcAAOc3AAAANQAA51IAAOdSAAAAGgAA53sAAOd7AAAADQAA54IAAOeCAAAAXgAA560AAOetAAAATAAA57wAAOe8AAAAFAAA59EAAOfRAAAANgAA59IAAOfSAAAANwAA5/MAAOfzAAAAYQAA5/QAAOf0AAAANAAA5/UAAOf1AAAAYgAA5/YAAOf2AAAAYwAA5/cAAOf3AAAAZAAA5/gAAOf4AAAAZQAA5/wAAOf8AAAAEAAA6D4AAOg+AAAAOwAA6EIAAOhCAAAATwAA6HsAAOh7AAAAHwAA6HwAAOh8AAAAWQAA6JEAAOiRAAAAGAAA6KgAAOioAAAAAQAA6LgAAOi4AAAABQAA6QEAAOkBAAAAMQAA6QIAAOkCAAAABAAA6SsAAOkrAAAAYAAA6fAAAOnwAAAAWwAA6wkAAOsJAAAAMgAA6woAAOsKAAAAMwAA62wAAOtsAAAAFQAA7OkAAOzpAAAAOQAA7VEAAO1RAAAACQAA7fsAAO37AAAASwAA7fwAAO38AAAADwAAAAAAAABmAMoBCAF4AdwCJgJwAwwDNgNsA8QEEgSwBNQFDgU0BWgF9gYcBkAGeAb2B8oIFAhOCMwJfgnkCkIKyAwEDGwMwg1IDc4OAg6ODuYPihAaEKgQwBFIEYoSFBKKEwIT/hRSFK4VChV+FcAV/BY4Fo4W8BduF9IYhhjgGVgZ0BpIGsAbEhuEHFgcrh00Hawd7h5iHqQfAB9YH7QgOCB6IRYhWiHKIgAiNCJ2ItgjGCOUI+AkDCQgJI4lmiXQJhImxCcwJ4on5ihAKIIo7ilSKYwqKCqsKvorWAAFAAAAAAOMAs8ABwAKABIAFQBAAAATMxczAyMDMxMXIwUzFzMDIwMzExcjEycmIgYUHwEhNzY0JiIPAQ4BFTEUFh8BFjI3Ni8BIQcOARUUFxYyPwE2NPiVIFKVUJFQaDNlAWGVIFKVUJFQaDRm/GsIFhAIO/2jOwgQFghrBAICBGsIFggQEDsCXTsDAgUIFghrCQGvVQF1/osBHos+VQF1/osBHov+yWAHDhQHNDQIEw4HYAMHCQgHBF8HBxwPNDQDCAgPBAgIXwcTAAAGAAAAAAM2Au4AEQAaAB0AKQA2AEIAAAEnJiMhIgYVERQWMyEyNjURNAMhESEVFBY7ASc1FwUzMjY0JisBIgYUFgcUFjMhMjY0JiMhIgYFISIGFBYzITI2NCYDLYMIDP5RDBAQDAIyDBA4/gYBUSEYcHBw/lqpDBAQDKkLEREREQsBUgsREQv+rgsRAW7+rgsREQsBUgsREQJkgggRDP1eDBERCwIiDP3vAmpwFyE4bm5xERcRERcRcAwQEBgQEH0QFxERFxAAAAYAAAAAAz0C4AADAAcACwAPAB8AIwAAATMVIzczFSMHIRUhFSEVIQEhIgYVERQWMyEyNjURNCYDIREhAVCNjdONjdMBYP6gAWD+oAHJ/c4QExMQAjIQExMz/hQB7AJTjWpHaUZHRgIzFBD9iBAUFBACeBAU/YcCMgAAAAAGAAAAAANbArUAEgAiACUASQBNAFEAABMhFTM1NCYjISIGFREUFjMhNSETIyIHAwcUFjsBMj8BMycmFyM3BSM1NCYrASIGHQEjIgYdARQWOwEVFBY7ATI2PQEzMjY9ATQmByM1MxcjNTPhAcM6Dgr9+QsODgsBpP5+1C8FAWIBBAMqBAIZmEsBBUIhAatqAwMrAwNpCAsLCGkDAysDA2oHCwuoRER7REQCen6gCw4OC/3ICw47AcAE/uMCAgQESdgEsF+BRwMEBANHCwiICAp2AgQEAnYKCIgIC3Y+Pj4AAAYAAAAAA3MCvQALABgAJAA4AD0APgAAEyEyNjQmIyEiBhQWBTQmKwEiBhQWOwEWNgcjIgYUFjsBMjY0JgEnJgYHAwYVFx4BMz8CNjcTNiYHAwcnEwPjAmASGxsS/aATGhsBMRsT8RIbGhPyExq+YRIbGhNhExsbAgJFECkN2AgCARIMBAZgDwjYCwlUvxoBwMgCYRsmGhomG9wTGxsmGgEbyhsmGhomGwFMLw0GEP7SCw9lDBIBASEFDAEuEiYm/vYJGAEN/s0AAgAAAAADOwKlABoANQAAARUUBiMiBzMyFh0BFAYrASImPQE0PgIzMhYFMjY9ATQmIyIOAh0BFBY7ATI2PQE0JisBNgHUDwtMBlILDw8L2wsPHj5dPAsPAU0LDw8LPF0+Hg8L2wsPDwtRBgKLaQsPmw8L3gsPDwveSnpbMw+ODwtpCw8zW3pK3gsPDwveCw+bAAAAAAIAAAAAA0EC6AAYADEAAAEyFhcWFSM0JyYnJiIHBgczFSM1MxU2NzYTIiYnJjUzFBcWFxYyNzY3IzUzFSM1BgcGAgBbkSkrUBwdNDmSMjYsZPBQLU9CMluRKStQHB00OZIyNixk8FAtT0IC6E1HSmI+NjggJBETLFDwZDYZFf1YTUdKYj42OCAkEhIsUPBkNhkVAAAFAAAAAANyAuAAHAAuAE0AZwBoAAAlIicmLwEjIiY9ATQ2OwE3Njc2MzIXFhURFAcGIwEiBh0BFBY7ATIfAhEPAQYjASInLgE/ATY3NjQnJi8BJj4BFh8BFhcWFAcGDwEGIxciLgE3Njc2NCcmJyY+ARYXFhcWFAcGBwYjMQH/DQ8ME5xHIjAwIkecEg0PDBILDg4LEf7iCxAQC1ILCKQICKQICwFVCAgJAwYLGwoQDwgaDwYDExYHDR4LExQMHwoJDl0KEAIIMRggIBgxCAIRFgg2HCUlHDYIDSAJBxCCMCLZITGBEAgICw4a/aYaDQwB6BAL2QwQCIkIAkIHigj+vgUGFwkPJRQhTh8TIhMKFg0DChInGSlmKxoqDgtdDhcIOS4/iD8vOAkWDwEJPjZKoEo2PgkAAAABAAAAAANLAq0AFwAAASEiBhQWMyEHBhQWMjcBNjQnASYiBhQXAuT90g0REQ0CLtwIEhgKAQ4ICP7yChgSCAGeERoR2goYEggBDgoYCgEOCBIYCgAGAAAAAAOVAs4AAwAPABMAFwAbAB8AABMzFSMBMzUjFTMVIREhESEXESERBTMVIyUzFSM3MxUjbEZGAbc1sDX++AJW/vjC/jcCMkZG/iVYWMJYWAG1wgGVRkYj/d8CIUf+bAGUacKNWFhYAAAFAAAAAANrAusADwAWACUALgA3AAATITIWFREUBiMhIiY1ETQ2AScBITI2NQMhIgYVERQWOwEBFxE0JgUyFhQGIiY0NhciBhQWMjY0JvgCECk6Oin98Ck6OgJapf7lAZ8NFCH98A0UFA0UAXilFP5nKTo6Ujo6KQ0UFBsTEwLrOin98Ck6OikCECk6/eOk/uUUDQIxFA398A0UAXmlAV0NFEI6Ujo6UjpCFBsTExsUAAQAAAAAA3EC8QATACcAKwAyAAABISIOARURFB4BMyEyPgE1ETQuARMUDgEjISIuATURND4BMyEyHgEVJSEVIR8BIxUjNSMC3f5GKEMoKEMoAbooQygoQyEdMx7+kB4zHR0zHgFwHjMd/iIBcP6QuG5JSkkC8ChDKP5GKEMoKEMoAbooQyj92B4zHR0zHgFwHjMdHTMeJUolk7i4AAUAAP/1A4oDCgAUACkAPgBTAGYAAAUiJyYnJjQ3Njc2MhcWFxYUBwYHBgMiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJjY3PgE0JicuATYyFx4BFAYHBiciJjQ3PgE0JicmNDYWFx4BFAYHBiciJjY3NjQnLgE+ARceARQGBwYCAGtbWjQ2NjRaW9ZcWTQ2NjRZXGtbT0wtLi4tTE+3Tk0sLy8sTU4lCxEBCCUnJyUIARAYCC0wMC0IXwsRCBcYGRcIERcIHyEgHwhgDRADCRERCQMPFwkSFRUSCAo2NFlc1VxZNDY2NFlc1VxZNDYC2y4tTE+3T0wtLi4tTE+3T0wtLv3OERcIJFtkWyQIFxEIK3B8cCsIORAXCBg/RT8YCBcRAQggU1tSIAlIFBcHDikOBxcSAwcPKS0pDwYAAAABAAAAAAKmApkAFAAAJSInJjQ/AScmNDYyHwEWFA8BFAcGAY4jCxERwsIRIi4R5RER5Q0HYgsSLRLCtxEuIhHlES4R5QcDAQADAAAAAAOMAsoACAAYACEAAAE0JiIGFBYyNiURITUhNTcXNycHESEVFxEDNycHFzcVMzUDCCc2Jyc2J/1sAYz+tsaELrLGApRCOS+bmy5MQgIEGycnNicn4f1sQlbGhC6yxgFe50IBa/24LpubLky5uQAAAAEAAAAAA5oCwwASAAABIyIHAScmKwEiBhcBFjI3ATYmA5BGDwr+ZMYKD0YFBAMBEgkfCgHoAwQCwgz99voMCQT+pQwMAmsECQAAAAAEAAAAAAOMAsoADwATABcAGwAANyImJwM0NjclMhYXExQGBwEjETMBIREhESEVIaYTHAIBGhMCuRMcAgEaE/3bhIQCEP4yAc79bAKUNhoTAjUTHQEBGhP9yxMdAQGL/rYBSv62AhCEAAwAAAAAA5ECwAADAAgAHAAhACcAKwAzAEAASQBNAFIAVwAAJRUHIyUVByM1JSEyFhcVIzU0JyEiBgcVIzU0NjcnFhcBNQEVBzUmJwMBNQEFFQcmJyM2NycyHgEUDgEiLgE0PgEXIgYUFjI2NCYnBzU3IQcmJzcjByYnNwEQJlQC+ooW/o4BBBsoAzwI/voDBgE8JRsXAxL++gMgoAIO3v5uAT0B4+MQEiEVDYwhNyAgN0I3ICA3IRkjIzIjI8veigJwzgcTk19lHiJRulQm31WKPrIlG7CqCAIEBKyqGykCjyIe/vtUAQVVoRQbFwGd/m5UAT45VeMHAhIYxiA3QjcgIDdCNyA8IzIjIzIjtN5Uis4gG5NmEgNRAAAAAgAA//YDigMKABAAEwAAASEVIxEjESMRIxEiLgE0PgEBFwcByAHCcXBxcDZaNTVa/uTh4QMKcf1dAqP9XQGKNVprWzX+rsXEAAAAAAIAAP/0A4wDDAAQABMAAAEiDgEUHgEzETMRMxEzETM1FwcXATo1WzY2WzVjY2NjxsbGAww2W2tbNf50ArX9SwK1Y5XGxQAAAAIAAP/RA68C7QASACEAACUXBycGIyInBxEhBxYzMjY3MwYBIgYHIz4BMzIXNxEhNyYC09xC3lVnhF5eARFzQmBTehFcCf7PU3wRXBKzd4JeXv7vc0Lx3kLcPl5eARFzQmZPTQFeZk9znl5e/u9zQgAFAAD/6wNiAxUAFAAbAC0ARgBUAAABLgEnJiMhIgYVERQWMyEyNjURNC8BFhcjNRYXExQGIyEiJjURNDYzIRUUFjsBAyc2NTQuASIOARQeATMyNjcXFjI/ATY0JyUiLgE0PgEyHgEUDgEjA0AbUyUuGv54GiUlGgJGGiUiaCEYeR4iVwcF/boFBwcFAYgPCrFSjyYvUGBQLy9QMB4vFY8EDAQTBAT+6B81Hx81PjUfHzUfAl8mUxshJRr9VholJRoB7RotKyEfehgi/aEFCAgFAqoFCLELDv5ojjA9MFEvL1FfUS8ND48EBBMECwSKHzQ/NB8fND80HwAAAAALAAD/4wOZAyAAFAAkADIAQABNAFoAZwB0AIEAjgCbAAAFJS4CNRE0PgEzITIeARURFA4BIwEiBhURFBYzITI2NRE0JiMHIiY9ATQ2MhYdARQGIyEiJj0BNDYyFh0BFAYjEyMiJjQ2OwEyFhQGIwEhIiY0NjMhMhYUBiMFIyImNDY7ATIWFAYjMyMiJjQ2OwEyFhQGIzMjIiY0NjsBMhYUBiMFIyImNDY7ATIWFAYjISMiJjQ2OwEyFhQGIwMC/e8mPiQoRSkCAylFKChFKf39JTQ0JQIDJTQ0JV4RGBgiGBgR/q8QGBghGBgRwScRGBgRJxEYGBEBXP05ERgYEQLHERgYEf3uJxEXFxEnERgYEbYnERgYEScRGBgRticRGBgRJxAYGBD+lCcRFxcRJxEYGBEBbCcRGBgRJxAYGBAdAQQpQiYByShFKSlFKP43KEUpArg1JP43JDQ0JAHJJDVYGBCMERgYEYwQGBgQjBEYGBGMEBj+RBgiGBgiGAEtGCIYGCIYrBciGBgiFxciGBgiFxciGBgiF4EYIhgYIhgYIhgYIhgAAAAAAQAAAAADgAMBADEAACUiJiczNSEmNDchNSM2NzYzMhYXNy4BIyIHDgEHIxUzBhQXIxUzHgEXFjMyNzY3Jw4BAoBPhCP2/u4DAwES9iNBQ08zXCVMNYRHUkpIaxuWgwMDg5Yba0hKUkhDQTRMJV1rUURVGCYYVUQoKSMfSy8zISB1SlUVLBVVSnUgIRoaLkwhIgAAAAEAAP/4AywDBAAhAAABETQmBwUOARURJg4CHgE+ATc0NRElESYOAh4BPgE3NAMrIBT+gA8TLWFCCDVdXzwBASotYUIINV1gOwEBAAHVFRkEVQMYD/6cFRRKY1QjG08xDAsBs0L+0RYUS2NUIxtQMQsAAAAABAAA//0DgwMDABQAKQAtAFEAAAEyFxYXFhQHBgcGIicmJyY0NzY3NhciBwYHBhQXFhcWMjc2NzY0JyYnJgMVIzUTFhcWFRQHBg8BBgcVIzU0Nj8BPgEuAQcGBwYdASM0Njc2NzYCAGlaWDM1NTNYWtJaWDM1NTNYWmlXSkgqLCwqSEquSkgqLCwqSEotQD0iGh4WCxkGFQJADA0oEAMWHg8bCwdADhUWIR0DAzUzWFrSWlgzNTUzWFrSWlgzNUQsKkhKrkpIKiwsKkhKrkpIKiz+OEREAVIHGx8oIRkNDwMOFEBVDxYJGwsmFQgEBRMOGQ8oLRYYCAYAAAAAAgAAAAADmQL8ADYAcQAANzI2NTY3NjcXFgYvAS4BBw4BHwEeATc+Ai8BLgEHLgEHBgcuAQcGBycuAQ4BHwEOAQcGFRQWBQYnJi8BLgE2Fh8BFjc+AScDJj4BFhcTHgE+AS8BNjc2Fh8BHgE+AS8BPgEWHwEeAT4BLwE2Fh8BFgZhCg0DOzliWAEFAiwWMxYYARh+SKdeSloSHR0WUDENJxYQDg4rFwwLKww3QBkMA0lwHiAPAnlNQkg/fgoBEhUKVxMUDAgEhgQJFhIFXwMSEwgDIwoKDRUFHgQSEgkEGAgYFQUUBBISCQMPFysPGCZA8Q4KelhXJPEDAgIwFwUTFDodmVY1Ihtpj1JNPTEREQsIBgsTDAgFCHYhGxc4IQgcbUpOWQoPkhwTFE2XDBYQBApaEwcEFQwBbwwTCAoL/voJCAcRCV8JAwULDlIJCAcRCkIJCQsONwoHBxEJKQglKkBqnAAEAAD/+gOGAwYAJwArAC8ASQAAASM1NCYjISIGHQEjIg4BHQEUHgE7ARUUFjMhMjY9ATMyPgE9ATQuASUhFSEBITUhFxQGKwE1NCYjISIGHQEjIiY9ATQ2MyEyFhUDICoSDP5QDBIqHC4cHC4cKhIMAbAMEiocLhwcLv4KAXT+jAF0/owBdJAYEioSDP5QDBIqEhgYEgJAEhgCCt4MEhIM3hwuHLQcLhxyDBISDHIcLhy0HC4cwMD+LOQqEhhyDBISDHIYErQSGBgSAAADAAD/5gOaAxoAFAApADsAAAEiBwYHBhQXFhcWMjc2NzY0JyYnJgMiJyYnJjQ3Njc2MhcWFxYUBwYHBhMnNTQmIgYdARQfARYzMjc2JgIAb2BdNjg4Nl1g3mBdNjg4Nl1gb15STy8wMC9PUrxSTy8wMC9PUk6OEhgSEqAECBMJBQkDGjg2XWDeYF02ODg2XWDeYF02OP0IMC9PUrxSTy8wMC9PUrxSTy8wASpCzgwSEgzgEwlMAhILFwAAAAYAAAAAA2gC6AAbADUAPgBHAFAAWQAAATIWFxYXHgEOAQcqASMmByoBIy4CNjc2Nz4BNyIOAQcOAR4BFxYyNzYXFjI3PgImJy4CNyIGFBYyNjQmFyIGFBYyNjQmISIGFBYyNjQmNyIGFBYyNjQmAgAbLw0jQR0eCzAhBw0GgIEFDQcgLwsdHUAiDi8bMVUuKzQ0FFU7CxcLdncKFww6VhQ0NSsvVDMZIyMyIyOvGSMjMiMj/Y8ZIyMyIyOvGSMjMiMjAbwcF0IiDztBLgQPDwQuQDsPI0EYHFAyVhgbanRRCAIBDg4BAgdSdGobGFYy3C9CLy9CL4wvQi8vQi8vQi8vQi+ML0IvL0IvAAAMAAD/9AN8AwwAIgBAAEkAUgB2AIIAjgCXAKAArADGANkAACUiJicmJyYvASYnJicmJzQ+ATIeARUUBwYHBg8BBgcGBw4BAyIOARUUFxYXFhcxFhcWFzY3Nj8BNjc2NzY1NC4BByImNDYyFhQGJyIGFBYyNjQmEyEuATURNDYzITIWFAYjISIGFREUFjMhMjY1ETQ2MhYVERQGJSImNwE2MhYUBwEGISInASY0NjIXARYGASImNDYyFhQGJyIGFBYyNjQmMyMiJjQ2OwEyFhQGByInLgE1NDcmNTQ2MhYUFxYXMRYXFhUUBwYnBgcGFRQXFhcWMzI2NzY1NCcmAsYGCQESIRMnAREIFgYCATFUYlMxAwYXBhIBJxMhEQEJBilEKAMFEggSIREdEhIdESECEAcSBgIoRCgiMTFEMDAiFR0dKR0dLv3PIjAwIgFKBwkJB/62FB0dFAIxFB0KDQow/YwLCAgBnAUNCgX+ZAUCbAcF/scFCg0FATkICP3lGycnNyYmHA0UFBsTEzRCBwkJB0IHCgpJGhQSElcFCg4JBQQJDwYLGRMKKBURBAUJDRIXFQMDBgS6CAVVRik9ARsNIScODzFUMTFUMQ0RJyEMGwE9KUZVBQgCMShEKQsNIRoOGzQgOD4+OCA0AxkMGyENCyhFKOcwRDExRDCEHSkdHSkd/WwBMCICDyIxCg4JHRX98RUdHRUBnAcJCQf+ZCIxIRUIAZwECQ4F/mQFBQE5BQ4JBP7HCBUBzic2Jyc2J2MUGxMTGxQJDgoKDgnnCwoeDy4QCgoHCgoMBgUJDgoPEicQC2IFCggJBQYJBgcHCAUNCAgGAAAAAAYAAAAAA2oC9wALABcAIwAvAD8AQwAAASEiBhQWMyEyNjQmJyEiBhQWMyEyNjQmJyEiBhQWMyEyNjQmAyEiBhQWMyEyNjQmBSEyNjURNCYjISIGFREUFhMhESECoP7ACAsLCAFACAsLCP7ACAsLCAFACAsLCP7ACAsLCAFACAsLCP7ACAsLCAFACAsL/gECrggLCwj9UggLCxsCiP14AUkLDwsLDwuKCxALCxALiQsPCwsPC/5kCxAKChALtwsIAsgICwsI/TgICwLJ/VwAAAAFAAAAAAOFAvgACwAXACMAMwA3AAATITI2NCYjISIGFBYBISIGFBYzITI2NCYnISIGFBYzITI2NCYBIgYVERQWMyEyNjURNCYjAyE1IY4C5AgLCwj9HAgLCwLs/RwICwsIAuQICwsI/RwICwsIAuQICwv9lgcLCwcB4AcLCwcT/kYBugLSCw8LCw8L/VwLDwsLDwuZCw8LCw8LAZcLB/79BwsLBwEDBwv+/t0ACAAAAAADhQL4AAsAFwAjAC8AOwBHAFcAWwAAEyEyNjQmIyEiBhQWASMiBhQWOwEyNjQmJyMiBhQWOwEyNjQmJyMiBhQWOwEyNjQmAyMiBhQWOwEyNjQmByEiBhQWMyEyNjQmJSEyNjURNCYjISIGFREUFhMhESGOAuQICwsI/RwICwsC7KAHCwsHoAgLCwigBwsLB6AICwsIoAcLCwegCAsLCKAHCwsHoAgLCwj9HAgLCwgC5AgLC/0UAd8ICwsI/iEICwsaAbv+RQLSCw8LCw8L/n0LDwsLDwuHCw8LCw8LiAsPCwsPC/5pCw8LCw8LmQsPCwsPC3QLBwGYBwsLB/5oBwsBl/6OAAAAAAgAAAAAA4UC+AALABcAIwAvADsARwBXAFsAABMhMjY0JiMhIgYUFhMzMjY0JisBIgYUFjczMjY0JisBIgYUFjczMjY0JisBIgYUFhMzMjY0JisBIgYUFgUhIgYUFjMhMjY0JgMhIgYVERQWMyEyNjURNCYDIREhjgLkCAsLCP0cCAsLCKAHCwsHoAgLCwigBwsLB6AICwsIoAcLCwegCAsLCKAHCwsHoAgLCwLs/RwICwsIAuQICwsI/iEICwsIAd8ICwsa/kUBuwLSCw8LCw8L/lgLDwsLDwuHCw8LCw8LiAsPCwsPC/5pCw8LCw8LdAsPCwsPCwIwCwf+aAcLCwcBmAcL/mkBcgAAAAADAAAAAAMvAvcAEgAVAB4AAAE0LwEmLwEhIgYVERQWMyEyNjUDIzUBESEVFBY7AREDLgSFBAkB/k0ICwsIAjgICzpM/k4BjQsIcgI+BgWnBQEBCwj9OAgLCwgCNF/9fwKklQgL/gQAAAUAAAAAA4EC+AAWACwAOABEAGAAAAEiBhURIRE0JiIGFREUFjMhMjY1ETQmAyEiBhURFBYyNjURIREUFjI2NRE0JgEzMjY0JisBIgYUFhMjIgYUFjsBMjY0JiU0LwImDgEWHwEjIgYUFjsBBw4BFjI/AjY3A24IC/5iCxALCwgBxAcLCwf+PAgLCxALAZ4LDwsL/qnWCAsLCNYICgre1ggKCgjWCAsL/n0DAWMGDwsCBTyjBwsLB6M7BgILDwViAgMBAvcLCP8AAQAICwsI/u4ICwsIARIIC/5KCwj+7ggLCwgBAP8ACAsLCAESCAsBNAsPCwsPC/46ChALCxAK0wQFAlYFAQsQBTMLEAsyBQ8MBFMDAwIAAAACAAAAAAOmAuAAMQA6AAAlJwcXNw4CBxEzNSM1PgE1NCYiBhUUFhcVIxUzES4CJxc3JwcXNx4BFxYyNz4BNxcBNDYyFhQGIiYDpTdxDzwVXH9IYGAhKzZNNywhYGBJf1sVPQ9xNx4eGGpJS6ZKSWsXH/49IzEjIzEj/3A3Hx5Fa0ADAU0hdQY0IiY3NyYiNAZ1If6zA0BsRB4fN3APPU56IiMjIntOPgGTGCMjMSMjAAMAAAAAA7YC7QAoAEcAbgAAJSERJyYnNSYvASIrAScmIwciBzEGDwIGFhcWMzI/AREUFjMhMjY0JjcmBg8BETQmIyEiBhQWMyERFxYXFRYfARYyPwI2JgUxMjY/ARceARcxMjY3EzYuAQYHAycuAScxIgYPAQMuAQ4BFxMeAQNi/U4BAQICAgEBAgICAQEDAgQEAQJAAwQGBAULBR4KCALECAoKQQcOBB4KCP08CAoKCAKyAQECAgIBBQoGBEADBP3qCQ8DT0kCDwoJDwNwAgYPDQJpSAMOCgkPA1BtAg4OBwN0Aw44AhsCAwMBAwICAQEBAwICAXEHDgQCCTX+GAgKCg8L+gQEBzUB5AgKCg8L/ekCAgQBAwICAgUEcQcOeAsJ9vMKCwEMCQFZBw0FBwf+v/MKCwEMCfgBRQcHBQ0H/qUJCwAAAAAFAAAAAAN7AuEAFQAYADMAQABfAAABLgIGBwMGHgE2PwEhFxYzMjc+ASclGwElIgYdAS4BIyIOARQeATMyNjcVFBYyNj0BNCYHIi4BND4BMh4BFA4BAzAdARYfAhYyNiYvASEyNjQmIyE3PgEuAQ8CBhUBjQQQFBAEygMFDQ0DQgEOQgULBAMGBQL+nnh5AYMHChU5ICdCJydCJyA5FQoOCgqGHjMdHTM8Mh4eMvoBAgJaBA4KAQY2AR0HCgoH/uM3BQEJDgZbAQICDAkLAQsK/iwGDQYFB5mZCwIDDQauARn+51oKByMYHCdCTkInHBkkBwoKB/4HCv4eMzszHR0zOzMeAjwBAQICBEsECw4FLQoOCjAEDgsBBU8CBAQAAAAFAAAAAAN7AuEAFQAYADMAQABcAAABLgIGBwMGHgE2PwEhFxYzMjc+ASclGwElIgYdAS4BIyIOARQeATMyNjcVFBYyNj0BNCYHIi4BND4BMh4BFA4BAyEHDgEWMj8CNjc1NCc1JyYOARYfASEiBhQWAY0EEBMRBMoDBQ0NA0IBDkIFCwQDBgUC/p54eQGDBwoVOSAnQicnQicgORUKDgoKhh4zHR0zPDIeHjLqARw2BQEJDgVaAgIBA1wFDgkBBTf+4wcKCgIMCQsBDAn+LAYNBgUHmZkLAgMNBq4BGf7nWgoHIxgcJ0JOQiccGSQHCgoH/gcK/h4zOzMdHTM7Mx4CLi0FDgsESwQCAgYEBAJPBQELDgQwCQ8KAAAAAAEAAAAAA68BkwALAAABISIGFBYzITI2NCYDnPzICAoKCAM4CAoKAZIKEAoKEAoAAAoAAP/wA6EDEAAPABMAFwAbAC8AMwA3ADwAQABbAAABISIGFREUFjMhMjY1ETQmAyM1MyUjETMDMxUjNzMyNjQmKwERIREjIgYUFjsBFSElIxEzNSM1MykBFSE1IxUjNQEmBg8BNTQmIgYdAScuAQ4BHwI3Nj8BNiYnA4385ggMDAgDGggMDByNjf2bjY2NjY21YwgMDAhjAYhqCAwMCGr+eAI9jY2Njf3JAYL+eCiNAbwGEQUSDBELFAURDAIGOAoKBgM1BgIGAxAMCP0ICAwMCAL4CAz9CIUoAXb+YoWFDBAMAXb+igwQDIWtAXYohYWFhYX+FgUCBhWvCAwMCLAWBwELEQZBBQECBD8HEAUABwAA//ADoQMQAA8AEwAYABwAIAAkACgAAAEhIgYVERQWMyEyNjURNCYHITUpAhUhNQczFSMTFSM1ETMVIykBESEDjfzmCAwMCAMaCAwMHP71AQv9yQEE/va1jY2NjY2NAvL9wwI9AxAMCP0ICAwMCAL4CAythYWFrf4Bq4WF/i39AiMACgAA//ADoQMQAA8AJAAoACwAMAA0ADgAPQBBAFwAAAEhIgYVERQWMyEyNjURNCYFMxUUFjI2PQEzESM1NCYiBh0BIREDIxEzAzMVIzchFSElMxUjEyM1MykBFSE1IxUjNQEzBw4BFjI/ATYnMSYvAiYOARYfASMiBhQWA4385ggMDAgDGggMDP7FagwQDI2NDBAM/ngojY2NjY21AYj+eAGwjY2NjY39yQGC/ngojQFrsBYHAQwQBkEGAQEBA0EHEAsBBxWvCAwMAxAMCP0ICAwMCAL4CAzVYAgMDAhg/opfCAwMCF8Bdv6KAXb+YoWFhYWFAkuFhYWFhf6FFAURDQU5BgkDAwU3BgIMEQUSDBELAAAACwAA//ADoQMQAA8AIwAnACsALwAzADcAOwA/AEMATwAAASEiBhURFBYzITI2NRE0JgE1MzI2NCYrATUhFSMiBhQWOwEdAiE1AzMRIxM1IRUXMxEjEyM1MyEVIzURMxUjITUzFQEjIgYUFjsBMjY0JgON/OYIDAwIAxoIDAz9sEkIDAwISQF2PQgMDAg9/oq+lpa+AXYolpaWlpb9pJaWlgJclv61UAgMDAhQCQsLAxAMCP0ICAwMCAL4CAz9tacMEAynpwwQDKcohYUBnv6KAZ6FhSj+igGehYWF/bWFhYUBfAwQDAwQDAAAAAALAAD/8AOhAxAADwATACcAKwAvADMANwA7AD8AQwBQAAABISIGFREUFjMhMjY1ETQmAxUhNTc1NCYiBh0BIxEzFRQWMjY9ATMRATMRIxM1IRUXMxEjEyM1MyEVIzURMxUjITUzFQEiBh0BFBYyNj0BNCYDjfzmCAwMCAMaCAwM2v6KzQsRDKWlDBELqf3Mlpa+AXYolpaWlpb9pJaWlgJclv6FCAwMEQsLAxAMCP0ICAwMCAL4CAz9joaGKEsIDAwISwF2OwgMDAg7/ooBdv6KAZ6EhCj+igGehISE/baGhoYBrQsJUAgMDAhQCQsAAAATAAD/VQOAAvMACwAbAB8ALwAzAEMARwBXAFsAawBvAH8AgwCTAJcApwCrALsAvwAABSEiJjQ2MyEyFhQGASMiBh0BFBY7ATI2PQE0JgcjNTMXIyIGHQEUFjsBMjY9ATQmByM1MxcjIgYdARQWOwEyNj0BNCYHIzUzASMiBh0BFBY7ATI2PQE0JgcjNTMXIyIGHQEUFjsBMjY9ATQmByM1MxcjIgYdARQWOwEyNj0BNCYHIzUzASMiBh0BFBY7ATI2PQE0JgcjNTMXIyIGHQEUFjsBMjY9ATQmByM1MxcjIgYdARQWOwEyNj0BNCYHIzUzAuf9QwgKCggCvQcKCv5btAgKCgi0BwsLGZGRErQICgoItAcLCxmRkRK0CAoKCLQHCwsZkZEBJLQICgoItAcLCxmRkRK0CAoKCLQHCwsZkZEStAgKCgi0BwsLGZGRASS0BwsLB7QICgoZkZERtAcLCwe0CAoKGZGREbQHCwsHtAgKChmRkasLDgsLDgsDnQoHoAcKCgegBwqffN0KB6AHCgoHoAcKn3zdCgegBwsLB6AHCp98AiMKB6AHCgoHoAcKn3zdCgegBwoKB6AHCp983QoHoAcLCwegBwqffAIjCgegBwoKB6AHCp983QoHoAcKCgegBwqffN0KB6AHCwsHoAcKn3wAAAAIAAAAAAORAuEADwATABcAGwAfACMAJwA3AAABISIGFREUFjMhMjY1ETQmASM1MzUjNTMTIzUzNSM1MxMjNTM1IzUzNyEiBh0BFBYzITI2PQE0JgNv/SIOExMOAt4NFBP967CwsLDwsLCwsPCwsLCwQPzwAwUFAwMQAwUFAjATDf4wDRMTDQHQDRP+OKBAoP6AoECg/oCgQKD4BQNQAwUFA1ADBQAAAAAEAAD//QODAuAACwAXACMAPAAAASEiBhQWMyEyNjQmBSEiBhQWMyEyNjQmBSEiBhQWMyEyNjQmBSIGHQEnJiIGFB8BFjI/ATY0JiIPATU0JgNx/UEHCwsHAr8HCwv+4P5aBwsLBwGmBwoKARL9QQcLCwcCvwcLC/6aCAooBQ8KBUYFDwVGBQoOBigKAuALDgsLDguwCw4KCg4LsAoPCgoPCrAKB4YpBQsOBUcFBUcFDgsFKYYHCgAABAAAAAADgwL1AAsAFwAjADwAACUhIiY0NjMhMhYUBiUhIiY0NjMhMhYUBiUhIiY0NjMhMhYUBiUiJj0BBwYiJjQ/ATYyHwEWFAYiLwEVFAYDcf1BBwsLBwK/BwsL/uD+WgcLCwcBpgcKCgES/UEHCwsHAr8HCwv+mggKKAUPCgVGBQ8FRgUKDgYoChMKDgsLDgqvCw4LCw4LsAoPCgoPCrAKCIUoBgsOBUcFBUcFDgsGKIUICgAAAAkAAAAAA5kC1QAPAB8ALwAwADkAOgBDAEQATQAAASEiBh0BFBYzITI2PQE0JgMhIgYdARQWMyEyNj0BNCYDISIGHQEUFjMhMjY9ATQmASMUFjI2NCYiBhMjFBYyNjQmIgYTIxQWMjY0JiIGA5D9uAMFBQMCSAMFBQP9uAMFBQMCSAMFBQP9uAMFBQMCSAMFBf0NOCEuISEuITg4IS4hIS4hODghLiEhLiECwAUDOAMFBQM4AwX+5AUDOAMFBQM4AwX+5AUDOAMFBQM4AwUCFBchIS4hIf7NFyEhLiEh/s0XISEuISEAAAAGAAAAAAOAAwAAAwANABkAJQApAC0AAAEhFSEnFTMVIzUzNSM1ETUzNSM1MxUjFTMVByM1MzUjNTMVIzUzEyEVIRUhFSEBVQIr/dWAK4ArK1VVgFVVK1VVVYCAVYACK/3VAiv91QLVVYCAKytVK/4rahYqahYq6ysVK6srAYBW1VUAAAADAAAAAAOBAwEADwAbACUAAAEyFhURFAYjISImNRE0NjMFIREzFSMRIREjNTMlFyMRMwcnMxEjA1USGRkS/VYSGRkSAoD9qqurAlarq/7VgFVVgIBVVQMAGRL9VhIZGRICqhIZVf8AVv8AAQBW1YD/AICAAQAAAAADAAAAAAOBAwEADwAbACUAAAEyFhURFAYjISImNRE0NjMFIREhNTMVIREhFSMzFwc1IRUnNxUhA1USGRkS/VYSGRkSASr/AAEAVgEA/wBWq4CA/wCAgAEAAwAZEv1WEhkZEgKqEhlV/aqrqwJWq4CAVVWAgFUAAAABAAD/0QNeAy0AMQAAAScBDgEeAjY3AT4BLgIGBwEOAR4CNj8BJwcOAS4CNjcBPgEeAgYHAQYiJjQ3An82/vUWDw8rOzoWAUElGRlJYWIk/q4zIyNliIgz5zbmJWFhSBkZJAFSFjs6LA8PFv6/CyAWCwIYNv70FTs6LA8PFgFBJGJhSRkZJf6vM4iIZSQkMuc25yQZGUhhYSQBUhYPDyw6Oxb+vwsWIAsAAAAAAgAAAAADnAKrACEAQwAAARUjLwEmJyMHBg8BIzUzNycjNTMfARYXMzY/AjMVIwcXBRUhLwE0PgQ1NCYjIgcGByc2NzYyFhUUDgMHMzUCRYVVDQQCAQUFCFOLRWljSZRKDQQCAQIEDUuKQ2JtAZD+7QICHCowKhwgFhsZBww4DhQqdUklNTYnAnwBI1qHFwQHCwsNhlqbklp6FgUHBQcWelqPnnVuDhkiOSQiGSERFRoVBg4xFA8jQDUjOCQfJRQqAAAAABIAAP/4A4kDCwAFAAkADQARABUAGwAhACUAKQAtADEANgA6AD4AQgBGAEoATgAAEzM1IgYVETM1IxMzNSMDMzUjJSMVMyUVMzQmIwE1IxQWMyczNSMBIxUzEzM1IwEzNSMRMjY1IxEzNSMRMzUjAzM1IxEzNSMFESERAyERIXZXJDNXV69XV69XVwG1WFgBBlczJP2cVzMkV1dXAQZXV1dYWAFeV1ckM1dXV1dXr1dXV1f+owG0V/76AQYCs1g0JP6jV/5MVwG1V69YWFgkNPzuVyQzrlgCDFj9RlcBBlf+TDMkAbVX/ktY/vpXAmNYr/5LAbX+owEGAAAAAAIAAAAAA4EC+AAgAEUAACUVIy8BJicjBwYPASM1MzcnIzUzHwEWFzM2PwEzFSMHFwEVIScmNTQ+BDU0JiMiBwYHJzY3NjMyFhUUDgQHMzUCQX1QDAQBAgQFCE6BQGNdRYtGCwQCAQIEU4E/XGYBd/7+AgIaJy4nGh4UGhcHCzUNEyk1N0UZJiwmHAF0klN+FQUGCwoMfVOTiFVzFQUGBQaIVYaVAVVnDg4JIDUiHxcgEBMZFAUOLhMPIDwxHDAdHRYeESgAAAAABwAAAAADigMDABkAKAA/AEgAUQBmAHQAACUiJicmNj8BEQcGLgE2PwE2FxYVERQGDwEGIyIvAS4BPgEfAR4BBw4BISImNRE0Nj8BNh4BBg8BETc2HgEGDwEBIiY0NjIWFAYnIgYUFjI2NCYDJyYnJicmNTQ+ATIeARUUBwYHBgcDIg4BFBcWFzY3NjQuAQJ5CQ4CBQsL4WYKFggKC4wLDwsMCPUCBgYC9QsKCBQN9AsKBAQQ/hEFFwwIQQoWCAoLL80KFgkLCvUBSSQwMEgwMCQNDw8aDw8NFBMjMh8qNVpsWjUqHzIjExQnQCYvJzc2JzAmQAwLCAsWBEwBTiEEChUWBC0HCgsL/nYIDwJVAgJVBBQXCgRUBRMNCAsNDwGJCQ8CGQQKFRYEEf6xRgULFRYEVAHeMEgwMEgwcA8aDw8aD/6hFhMtQDZKLTZaNTVaNi1KNkAtEwG6JkBMSz9AQD9LTEAmAAAABAAAAAADeQMXABEAJgApADkAACUyNjU0JyYnJicmOQEGBwYUFiUWMj8BNjQnASYiDwEGFB8BBwYUFzcXIQEhIgYdARQWMyEyNj0BNCYC8B4sCwoQDA4LExMlLP67BQ8F8QUF/sMCBwMtAwM/xAUF/qj+rwKB/R4DBQUDAuIDBQWlLR8RGRQXEREOFRs1Py0qBQXxBQ4FATwDAy0CBwM/xAUOBbWo/pUFA0sDBQUDSwMFAAAABAAA//QDjAMMAAwANABEAFQAAAEyHgEUDgEiLgE0PgEXMjY0JisBIiY9ATQmIgYdARQGKwEiBhQWOwEyFh0BFBYyNj0BNDYzJRQeATI+ATURNC4BIg4BFQMRND4BMh4BFREUDgEiLgEBGS1MLCxMWUwtLUx/DBMTDCoEBhIaEgYEKQ0SEg0pBAYTGRIGBAFCGi42LRsbLTYuGkIsTFlMLS1MWUwsAT4sTFlMLS1MWUwsxBIaEgYEKgwTEwwqBAYSGhIGBCkNEhINKQQGHxstGxstGwHOGy0bGy0b/jIBzixMLS1MLP4yLEwtLUwAAAAABAAA//QDjAMMAAwANABEAFQAAAEyHgEUDgEiLgE0PgEXMjY0JisBIiY9ATQmIgYdARQGKwEiBhQWOwEyFh0BFBYyNj0BNDYzJRQeATI+ATURNC4BIg4BFQMRND4BMh4BFREUDgEiLgEC5yxMLS1MWUwsLEx/DRISDSkEBhMZEgYEKgwTEwwqBAYSGhIGBP2mGy02LhoaLjYtG0ItTFlMLCxMWUwtAT4sTFlMLS1MWUwsxBIaEgYEKgwTEwwqBAYSGhIGBCkNEhINKQQGHxstGxstGwHOGy0bGy0b/jIBzixMLS1MLP4yLEwtLUwAAAAABAAA//QDjAMMAAwANABEAFQAAAEyHgEUDgEiLgE0PgEXMjY0JisBIiY9ATQmIgYdARQGKwEiBhQWOwEyFh0BFBYyNj0BNDYzASIOARQeATMhMj4BNC4BIyUhMh4BFA4BIyEiLgE0PgEC5yxMLS1MWUwsLEx/DRISDSkEBhMZEgYEKgwTEwwqBAYSGhIGBP4JGy0bGy0bAc4bLRsbLRv+MgHOLEwtLUws/jIsTC0tTAMMLUxZTCwsTFlMLcQSGRMGBCkNEhINKQQGExkSBgQqDBMTDCoEBv60Gi42LRsbLTYuGkIsTFlMLS1MWUwsAAAABAAA//QDjAMMAAwANABEAFQAAAEyHgEUDgEiLgE0PgEXMjY0JisBIiY9ATQmIgYdARQGKwEiBhQWOwEyFh0BFBYyNj0BNDYzASIOARQeATMhMj4BNC4BIyUhMh4BFA4BIyEiLgE0PgEC5yxMLS1MWUwsLEx/DRISDSkEBhMZEgYEKgwTEwwqBAYSGhIGBP4JGi4bGy4aAc4bLRsbLRv+MgHOLEwtLUws/jIsTC0tTAE+LExZTC0tTFlMLMQSGhIGBCoMExMMKgQGEhoSBgQpDRISDSkEBgJQGy41LhoaLjYtG0ItTFlMLCxMWUwtAAAAAwAAAAADXgLzAB0AKgA2AAAlFhcGLgI1ETQ+ATIeAR0BBgc1NCYiBhURFB4CNzIeARQOASIuATQ+AQczMjY0JisBIgYUFgH+DhYkTD4kKkdTSCkhHTZNNhIhKdkqRykpR1RHKipHI5oMEREMmgwREU0dGQ0JK0QmAbAqRyoqRyrhChT/JzY2J/5QFSYbCfkpR1RHKipHVEcptxEYEREYEQAAAAAFAAD/9AOMAwwAEwAoADUAQgBPAAA3FB4BMyEyPgE1ETQuASMhIg4BFQMRND4CMyEyHgEVERQOASMhIi4BATIWHQEUBiImPQE0NhcyFh0BFAYiJj0BNDYTMhYdARQGIiY9ATQ2thstGwHOGy0bGy0b/jIbLRtCGi49IAHOLEwtLUws/jIsTC0BjA4TExwTEw4OExMcExMODhMTHBMTmRstGxstGwHOGy0bGy0b/jIBziA9LhotTCz+MixMLS1MAVUTDkIOExMOQg4TxhMOYw0UFA1jDhMBrRQNYw4TEw5jDRQAAAAGAAD/+gOEAwQACwAZACUAUAB0AJcAAAEhMjY0JiMhIgYUFgUhIg4BFB4BMyEyNjQmAyEiBhQWMyEyNjQmJSIGBwYWNjc+AR4BDgEjIgYWMzIeAQ4BJicuAQYXHgI+ASYnJjc+AS4BNzQmIgYVFBYyNjU0NjIWFRQPAQ4BHgE7ATI2NCYrASImPwE2JyMiJj0BNCYrASIGFBY7ATIWHQEUBisBIgYUFjsBMjY0JiMBdAHuDhMTDv4SDhMTAfz+EgkPCQkPCQHuDhMTDv4SDhMTDgHuDhMT/U0WJAUEFBwDAgsNBwEJBw4ODg4HCQEHDQsBBBwUBAUdJyQVAQsDAwoCER8xJzcmDhUOCg0KB0YEAgYMB1MKDw8KDgUFBBoTCQgDBRsSFQoPDwoIBAQEBAgKDw8KUgsODgsCdxQbExMbFNYJDxIPCRMcE/7oFBsTExsUShsWDhQIDQcGAgoNCBkZCA0KAwcGDggVDhMaBRAhJxAFBQ8kIBPWHCYmHAoODgoHCgoHDAlXBQ8MCA4VDgoEIRfTBARvExoOFQ4FA2MEBQ4UDw8UDgAAAwAA//QDkAIlAB8ALAA4AAABBgcjIi4BND4BMyEyHgIHJic2LgIjISIOARQeATMlMh4BFA4BIi4BND4BBzMyNjQmKwEiBhQWAikVCvEsTC0tTCwBzihILwkOGiAFChwpFv4yGy0bGy0bAc4sTC0tTFlMLCxMJqUNEhINpQwTEwEdHiQtS1pLLSZDUSYXDxYsIhQbLTYtGyEsTFlMLS1MWUwsxBIaEhIaEgAAAAgAAP/0A40DDAAMABgAPgBGAEoAUgBWAF4AAAEyHgEUDgEiLgE0PgEHMzI2NCYrASIGFBYnIxUzFhchIi4BNRE0PgEzITIeAh0BFgcVJic1IxUGBzUjFTMGEzM1NC4BKwEHNSMVJyMiDgEdATMHFTM1AxUUHgE7ATUC5yxMLS1MWUwsLEwmpQ0SEg2lDBMTfm15Eh3+1CxMLS1MLAHOID0uGgEBHSWlJB7GjBWRpRstG0JCxkJCGy0bpaWlpRstG0IBPixMWUwtLUxZTCzEEhoSEhoSYaUlHS1MLAHOLEwtGi49IF0GBsMdEnltChWMxh4BJkIbLRulpaWlGy0bQkLGxv74QhstG6UAAAAJAAAAAAOMAtsAAAANABkAGgAnADMANABBAE0AABMjFB4BMj4BNC4BIg4BBSEyNjQmIyEiBhQWByMUHgEyPgE0LgEiDgElISIGFBYzITI2NCYBIxQeATI+ATQuASIOASUhIgYUFjMhMjY0JsdTFyYsJhYWJiwmFwEZAd4NExMN/iIOExO4UxcmLCYWFiYsJhcC9/4iDhMTDgHeDRQU/U9TFyYsJhYWJiwmFwL3/iIOExMOAd4NExMCiBYnFhYnLCYWFiY3ExsUFBsT5xYmFhYmLCYWFiYLExwTExwT/tcWJhYWJiwnFhYnCxMbFBQbEwABAAD/9gNoAwsAKAAAASYPAQYnLgEGBw4CFhcWPgEmJy4BPgE3PgEXHgEPAQYWOwEyNj0BNANeCwdWBAVElpM/T1kBV08NIhQFDj5GAUc/RaZNBAIDPQgJC9wHCgMGBAdWBAMjESUsOK3CrjkKBRsiCi6Km4ktMBQgAQkDPQgUCgbdCwAKAAD/9AONAwwABwALAA8AEwAbAB8AOgBCAEYATgAAJRUzMj4BPQErARUzNzM1Iwc1IxUBMzU0LgErAQc1IxUBFRQOASMhIi4BNRE0PgEzITIeAh0BFgcVFgEjIg4BHQEzBxUzNQMVFB4BOwE1AqVCGy0b58bGQqWlQsYBCKUbLRtCQsYB7y1MLP4yLEwtLUwsAc4gPS4aAQEB/c5CGy0bpaWlpRstG0LbpRstG0Kl58bGxsYBCEIbLRulpaX+0V0sTC0tTCwBzixMLRouPSBdBgb8BgHOGy0bQkLGxv74QhstG6UAAAAAAQAA//cDaQMLACcAAAEuAQYHBi8BJgYdARQWOwEyNi8BJjY3NhYXHgIGBw4BHgE3PgEuAQK/P5OWRAUEVgcVCgfdCwgIPQMCBE2mRT9HAUY+DQQTIQ1PWAFaAo8sJREjAwRWBwgL3QcJFAg9AwkBHxMwLYmbii4KIRoGCTmuwq0AAAAABQAA//QDjAMMABoAJgA0AD0AQAAAASIGFSMiBhURFBYzITUhESEVMzU0JisBNCYjByIGFBY7ATI2NCYjFyIGFREUFjsBNzU0JiMFIRUjIgYdASM3MwcBbBcblBYcHBYBKf7XAe4yGxeUGxatDA0NDPcLDQ0LGBYbGxaVxhwW/tcBKXwWG3ytUFADDBwWGxb94BYcMgIglZUWGxYclQ0XDQ0XDZQbF/51FhzG9xcbMt4bFnx8UAAAAAMAAAAAA2gC6QAVACkAOQAAJTU0NjIWHQEUBiMhIiY9ATQ2MhYdARMHDgEuAjY/ATYyFhURFAYiJjUTLgE+AhYfAR4BDgImJwMYFyIXFxH9gBEXFyIX8KwHFRUPBgYI8AwgGBciF5UHBAcRFhQHZAcEBxEWFAdoUBEXFxF4ERcXEXgRFxcRUAH3qwgGBg8VFQfwDBcR/iARFxcRAU4JFRQOBAgIeAkVFA4ECAgAAAAAAwAA//YDigLuAA0ALgA8AAABIRUUFhczFTM1Mz4BNyU0NzY3IQc3MwYHBhczFQ4BByMVFAYjISImPQEjLgEnNTMhJjc2NyMHNyEGBwYVA1L9XSAYqeGoGCAB/VoOEzYBbg1huSAMCAI+AUAwcBAM/uYMEHAwQAFuAjADCQULVMMZ/vQiDgwBuKgYIAGoqAEgGOE+MkdGPj45VDg44TBAAY0MEBAMjQFAMOE8PCgkfHwyMSo4AAAAAAYAAAAAA5UC2wAVACsANwBDAE8AWwAAATI2NCYiBz4BNz4BNCYjIgYHBhUUFiMyNjQmIgc+ATc+ATQmIyIGBwYVFBYlMzI2NCYrASIGFBYXMzI2NCYrASIGFBYFITI2NCYjISIGFBYXITI2NCYjISIGFBYB0Cc3L0kSCT0rDA8TECxPFxg+xyg2L0oSCj0sCxAUEC1OFxk/AejjDRISDeMMEhIM4w0SEg3jDBIS/gMC7A0SEg39FA0SEg0C7A0SEg39FA0SEgGwMU4vHCs0AgEPGA8vKCoyNUIxTi8cKzQCAQ8YDy8oKjI1Qu0SGRISGRLSERoRERoR0xIZEhIZEtIRGhISGhEAAAQAAP/HA2gC6AAMABgAKAAsAAABMh4BFA4BIi4BND4BFyMVIxUzFTM1MzUjATIWHQEUBiMhIiY9ATQ2MxcVITUCADZcNjZcbFw2NlxeUFBQUFBQARgRFxcR/YARFxcRKAIwAVg2XGxcNjZcbFw2UFBQUFBQAjAXEfARFxcR8BEXUKCgAAQAAP/1A40DCwAbADcAUgBxAAATMjY9ARcWMjY0LwEzMjY0JisBIgcGBwYdARQWBSIGHQEnJiIGFB8BIyIGFBY7ATI3Njc2PQE2JiUHNTQmIgYdARQXFhcWOwEyNjQmKwE3NjQmBgE0NRUmJyYrASIGFBY7AQcGFBYyPwEVFBYyNj0BJyaVDRO8CR0TCryHDBQUDNYIAgwIAhQC4g0TyQkaEwnJiQwUFAzWCAIPAgMBEv4GyRMZFAIICgQG1gwUFAyJyQkTFwIBBwsEBtgMFBQMibwJEh4IvBMaEwIBAfUUDIm8CBIZCrwTGRQCBgwECNYMFOoUDInJCRMaCckTGRQCCAoEBtgMFCLJhwwUFAzWCAIPAgMUGRPJChkTAQHAAQECDgMDFBkTvAoZEwm8hwwUFAzWBQQAAAQAAP//A4EDVgAPABMAIAAsAAABMhYVERQGIyEiJjURNDYzBSEVIQEyHgEUDgEiLgE0PgEXIxUjFTMVMzUzNSMDVRIZGRL9VhIZGRICgP2qAlb+1TpiOTlidGI5OWJlVlVVVlVVAVUZEf8AEhkZEgEAERlVqwMAOWJ0Yjk5YnRiOVVVVlVVVgAHAAD//wOBAwEADwATACMAJwAzAD8ASwAAASEiJj0BNDYzITIWHQEUBiUVITUBIyImNRE0NjsBMhYVERQGAxEzESkBIiY0NjMhMhYUBgchIiY0NjMhMhYUBgchIiY0NjMhMhYUBgMr/aojMjIjAlYjMjL9hwJW/lWrIzIyI6sjMjLOqwHV/wATFxcTAQAUFxcU/wATFxcTAQAUFxcU/wATFxcTAQAUFxcCADIjViMyMiNWIzKrVlb9VTIjAQAkMjIk/wAjMgFV/wABABgmGBgmGKoXJxcXJxerFycXFycXAAcAAAAAA4ADAAADAAcACwAPABMAFwAbAAABESMRNyERIREhNSEFIRUhFSEVIRUhFSEFIRUhAyuA1f7VASv9AAMA/oD+gAGA/oABgP6AAYABgP0AAwACAP8AAQBV/lYCAFWrVVVWVVVWVQAAAAcAAAAAA4ADAAADAAcACwAPABMAFwAbAAABESMRNyERIQEhNSEVIRUhFSEVIRUhFSEVIRUhAVWA1v7VASsB1f0AAwD+gAGA/oABgP6AAYD9AAMAAgD/AAEAVf5WAgBVq1VVVlVVVlUACgAAAAADgAMAAAMABwALAA8AEwAXABsAHwAjACcAAAERIxE3IREhEyE1IQUjFTMVIxUzFSMVMwEjFTMVIxUzFSMVMxUhFSECQIDV/tYBKuv9AAMA/ZWVlZWVlZUCa5WVlZWVlf0AAwACAP8AAQBV/lYCAFWrVVVWVVUBqlVVVlVVVlUABAAA//8DgAMBACIALgA6AEYAAAEnJg8BBhY7ATIVERQGKwEiBh8BFj8BNiYrASI1ETQ7ATI2FxUUMyEyPQE0IyEiEyEyPQE0IyEiHQEUFyEyPQE0IyEiHQEUAayPAwOQAgIDZQQCAmUDAgKQAwOPAgIDZQQEZQMCfQQBTQQE/rMEBAFNBAT+swQEAU0EBP6zBAJujwMDjwIGBP48AgIGAo8DA48CBgQBxAQGG00EBE0E/wAFTAUFTAWqBE0EBE0EAAAAAAMAAP/0A4wDDQAPABQAKAAAASEiBhURFBYzITI2NRE0JgMRIREhBSIGFBY7AREUFjI2NREzMjY0JiMDTP1oGyUlGwKYGyUlG/1oApj+FA0TEw2AExoTgA0TEw0DDCUb/WgbJSUbApgbJf50/rQCmKATGhP+0A0TEw0BMBMaEwAABQAA/+cDmQMZABQAKQAyADsATwAAASIHBgcGFBcWFxYyNzY3NjQnJicmAyInJicmNDc2NzYyFxYXFhQHBgcGAzI2NCYiBhQWITI2NCYiBhQWFw4BIiYnLgEOARceATI2NzYuAQYCAG9fXTY4ODZdX95fXTY4ODZdX29ZTUssLS0sS02yTUssLS0sS03dFh8fLB8fAR4WHx8sHx8cGUlQSRkLIRkDCyVodGglCwMZIQMZODZdX95fXTY4ODZdX95fXTY4/R0tLEtNsk1LLC0tLEtNsk1LLC0BZB8sHx8sHx8sHx8sH3cfIiIfDAMVIA0sMTEsDSAVAwAEAAAAAAOdAtIACwAXACMALwAAJSEGJjQ2MyEyFhQGJyEiJj4BMyEyFhQGAyEiJj4BMyEyFhQGByEiJj4BMyEyFg4BA3P9GhIXFxIC5hIYGRH9GhIYARcSAuYSGBkR/RoSGAEXEgLmEhgZEf0aEhgBFxIC5hIYARgvARwoGxsoG74cKBsbKBwBhhsoHBwoG78bKBwcJxwAAAIAAAAAA6wC2wAJABcAADcHJzcXEyEVIQM/ASchFwcnIxcHMzcXB6k7AW4cdgI+/f2fwYJ+AVcvRRyoV1SmG0Uw/QFLAkQB1Uv9hzjc8XEeQ6ePPR9pAAABAAAAAANWAkAABQAAJQEnCQEHAgABVTn+5P7kOcEBSDb+7wERNgAAAwAAAAADgAMBABQAKQBGAAABIgcGBwYUFxYXFjI3Njc2NCcmJyYDIicmJyY0NzY3NjIXFhcWFAcGBwYTJiIPAScmIgYUHwEHBhQWMj8BFxYyNjQvATc2NAIAaFlXMzU1M1dZ0FlXMzU1M1dZaFhLSCorKypIS7BLSCorKypIS0gKGQpzcwoZFApzcwoUGQpzcwoZFApzcwoDADUzV1nQWVczNTUzV1nQWVczNf1AKypIS7BLSCorKypIS7BLSCorAeAKCnNzChQZCnNzChkUCnNzChQZCnNzChkAAAoAAAAAA4ADJgAkACwARQBVAF8AaQCKAJIAswC7AAABIiY1NC4BIyImNDYzMj4BNTQ2MhYVFB4BMzIWFAYjIg4BFRQGJxYXNjcmJwYBIiY0JiImNDYyNjQ2MhYUFjIWFAYiBhQGBQEmIg8BBhQXARYyPwE2NAE3NjIfAQcnJjQBBwYiJwE3ARYUASImNTQmIyImNDYzMjY1NDYyFhUUFjMyFhQGIyIGFRQGJxYXNjcmJwYTIiY1NCYjIiY0NjMyNjU0NjIWFRQWMzIWFAYjIgYVFAYnFhc2NyYnBgJVCQwdMB0JDAwJHTAdDBENHDEcCQwMCRwxHA07IBMTHx8TE/5tCQwNEQ0NEQ0MEQ0MEgwMEgwNArb+QRI1EhkSEgG/EjUSGRP92hkGEQc8Nj0GAfsZBhEG/pw2AWQG/a4JDCUaCQwMCRolDBIMJRoJDQ0JGiUMHgwJCQwMCQkJCQwlGgkMDAkaJQwSDCUaCQ0NCRolDB4MCQkMDAkJAf8MCRwxHAwSDB0wHQkMDAkdMB0MEgwcMRwJDJMTHx8TEyAg/tsMEgwNEQwNEQ0NEQ0MEQ0MEgz7Ab8TExkSNRL+QRISGRI1AZoZBgY8Nz0GEf5DGQYGAWQ3/pwHEQIDDAkaJQ0RDSUaCQwMCRomDBENJRoJDGkJDAwJCgwM/ecMCRolDRENJRoJDAwJGiUNEQ0lGgkMagoMDAoJDAwAAwAAAAADqwMrABIAFwAbAAABBgcBBhYfARYzITUjATY0JwEmAyMnARc3JzcXAlQSDP4rDAEMqwwSAgDEATcNDf7VDHmygQEN5j3pVe0DKwEN/gANIgyrDFUBNw0jDAErDf1VgQEl5jzpXe0ABgAAAAADpgJuAAMABwATABsAJwAtAAATESERBSERIRMVMzUzFTM1IxUjNTMVMxUzNTM1MxUzNRc3FTM1IwcnMxUzNSM1WgNM/OkC4v0eTzUaNTUaaRs0Gxo1Gho1NRoahGk1Am3+JgHaNP6OASLST0/ST080np400noiInrSIiLSNJ4ACAAAAAADcAMMAAsAFwAkAD0AVQBiAG4AegAAJQcGIiY0PwE2MhYUFxUUBiImPQE0NjIWJxQGKwEiJjQ2OwEyFgUUDwEGIi8BJic3FxYyPwE2NC8BNxYfARYBBycmIg8BBhQfAQcmLwEmND8BNjIfARYFFAYrASImNDY7ATIWJxUUBiImPQE0NjIWFwcGIiY0PwE2MhYUAVNxBQsJBHEFCwhHCAwICAwIYwgGjQYICAaNBggCLiVBJWolkwoJangMJAxBDAx5CBAJlCX+8Gp4DSINQQwMeQgQCZQlJUElaiWTCgEgCAaNBggIBo0GCPAIDAgIDAi0cQULCANxBQsJ2nEECQsFcQQJCxeNBggIBo0HBwdcBggIDAgIPjUlQCUmkwoPCHkMDEANIg15agoJlCYBCwh5DQxBDCMMeWoJCZUmaSRBJCWUCTUGCAgMCAjqjQYICAaNBwgISXEECAwEcQQIDAAFAAAAAAN3AsoADwAfAC8APwBLAAABITI2PQE0JiMhIgYdARQWBxQWMyEyNj0BNCYjISIGFQEhIgYdARQWMyEyNj0BNCYDISIGHQEUFjMhMjY9ATQmJTc2NC8BJgYdARQWAZ8BwgMEBAP+PgQEBAQEBAHCAwQEA/4+BAQB2f0hBAQEBALfAwQEA/0hBAQEBALfAwQE/TOSAwOSBQkJAcIEAzUDBAQDNQMEwAMEBAM1AwQEAwGTBAM1AwQEAzUDBP2wBQM0BAQEBDQDBYxzAwgCdAMEBecGBAAEAAAAAAORAuMADwAfAC8APwAAASEiBh0BFBYzITI2PQE0JgMhIgYdARQWMyEyNj0BNCYHISIGHQEUFjMhMjY9ATQmAyEiBh0BFBYzITI2PQE0JgOI/hADBQUDAfADBQUD/hADBQUDAfADBQUD/PADBQUDAxADBQUD/PADBQUDAxADBQUC4gUDOAMFBQM4AwX+WAUDOAMFBQM4AwXUBQM4AwUFAzgDBQGoBQM4AwUFAzgDBQAEAAAAAAORAuMADwAfAC8APwAAASEyNj0BNCYjISIGHQEUFgEyNj0BNCYjISIGHQEUFjMFISIGHQEUFjMhMjY9ATQmAyEiBh0BFBYzITI2PQE0JgEIAfADBQUD/hADBQUB8wMFBQP+EAMFBQMCgPzwAwUFAwMQAwUFA/zwAwUFAwMQAwUFApoFAzgDBQUDOAMF/lgFAzgDBQUDOAMFjAUDOAMFBQM4AwUBqAUDOAMFBQM4AwUAAAAABAAAAAADkQLjAA8AHwAvAD8AABMhMjY9ATQmIyEiBh0BFBYTITI2PQE0JiMhIgYdARQWBSEiBh0BFBYzITI2PQE0JgMhIgYdARQWMyEyNj0BNCZ4AfADBQUD/hADBQUDAfADBQUD/hADBQUDE/zwAwUFAwMQAwUFA/zwAwUFAwMQAwUFApoFAzgDBQUDOAMF/lgFAzgDBQUDOAMFjAUDOAMFBQM4AwUBqAUDOAMFBQM4AwUAAwAAAAADdwL3AA8AJwArAAAlISIGHQEUFjMhMjY9ATQmJTMyPwEzFxY7Aj4BJwMmKwEiBwMVFBYTMxcjA3D9IQQEBAQC3wMEBP2bUAYCM80yAgdTAwQDAcMCB2AGAsQF9AROomMEA0sEBAQESwMESwacnAYCBwMCNwYG/ckDBAUB5PcAAwAA/58D4QNcABQALgBEAAABJyYOAhURFB4BMj8BNjc2NCcmJwMiBw4BBwYUFx4BFxYyNz4BNzY0Jy4BJyYjESInJicmNDc2NzYyFxYXFhQHBgcGIwKa3QkUEwkKERUI3wsDBgUEDJhhWVWFJCYmJIVVWcJZVoUkJiYkhVZZYXFiXjg5OThfYeNiXjg5OThfYXIBjs8FAQsRC/5vChILBcQKBQkTCAULAc4mJIVVWcJZVoUkJiYkhVZZwllVhSQm/H85OF9h42JeODk5OF9h42FfODkAAAAAAgAA/8cDuQM5AAsARwAAJSEiBhQWMyEyNjQmATMyFhURFBcWFxYyNzY3NjURNDY7ATI2NCYrASIGFBY7ATIWFREUDgEiLgE1ETQ2OwEyNjQmKwEiBhQWA4r87BMcHBMDFBMcHPzrMwQGKypHSaxJRyorBgQzExwcE9cTHBwTMwQGPGZ4ZjsFBDMTHBwT1xMcHCUbJxwcJxsCtgYD/sBWSUgpKyspSElWAUADBhsnHBwnGwYD/sA8Zjw8ZjwBQAMGGyccHCcbAAABAAD//AOEAwQAJQAAASMiBhQWOwEyFgcBBisBIgYUFjsBMjY0JisBIiY3ATY7ATI2NCYDWvwRGBgRJAUFA/6JBQleERgYEfwRGBgRJAUFAwF3BQleERgYAwMYIhgJBP2zCBgiGBgiGAkEAk0IGCIYAAAAAAMAAP/pA5cDFwAqADcAYQAAAQ4BFxYGDwEGIi8BJjQ/AT4BFxY+ASYnJgYPAQ4BFh8BHgE2PwE+AScuAQcWMjcBNjQmIgcBBhQBJy4BBg8BDgEXHgE+AScmNj8BNjIfARYUDwEOAScmDgEWFxY2PwE+ASYCDw4MBgQECGoWPhZQFhZqCBcKDxwMDA4gQxhqHRQUHVAcTk0dahgNDQYcvQsfCwEkChYeC/7cCwIQUBxOTR1qGA0NBhwdDAYEBAhqFj4WUBYWaggXCg8cDAwOIEMYah0UFAETBh0OChcIahYWUBY+FmoIBAQGDB0cBg0NGGodTU4cUB0UFB1qGEMgDgw4CwsBJAseFgr+3AsfAapQHRQUHWoYQyAODAwdDgsWCGoWFlAWPhZqCAQEBgwdHAYNDRhqHU1OAAEAAP/iA54DHgBbAAABNCYjISInJicmJyYnJjU0NzYzNhYXFgcVFBYyNj0BNiYnJiMiDgEVFBcWFxYGKwEiBhQWMyEyFx4BFxQHBgcGIyInLgE3Ni4BBgcGFhcWMzI+ATU2JyY2OwEyNgOdGhL+xgUFGjQ5HCUREywfMRw4GBYGGiQaBBUYNXZAYDQrIEIFBAbiEhoaEgGCAwIfJAEgGSsbHmIlEAsEAhckHAIHFx1AiEhwPQEfAgUF1RIaAV8SGgMSICMVHBkdITQXDwQOER8mCxIaGhIJJEYbNSxQNkM3KiwEDRklGQIVQCU0HxgLBikUMhkSHAQXEixVIkY1YD87MwUIGgAAAAMAAAAAA58C0AAVACsALAAAJSInASY0NwE+AR4BDwEGFB8BHgEOATMiLgE2PwE2NC8BJj4BFhcBFhQHAQYTAZwTDf78FhYBBA0kGgEN8gUF8gkFCha7DRYKBAryBQXyDQEaJA0BBBYW/vwN0jANAQwXQBcBDAwBGSUN+QUOBfkKGhgPDxgaCvkFDgX5DSUZAQz+9BdAF/71DgFKAAMAAP/8Ay0DBAAgADAAQAAAAT4BLgEjISIGFBY7ATIWFREUBisBIgYUFjMhMj4CLgEDHgIUDgEHIyImPQE0NjMTIyImNRE0NjsBHgIUDgECqywZL2c+/uYRGBgRIgMFBQMiERgYEQFJMlo/Fxc9vSE4ISE4IZYDBQUDxcUDBQUDxSU/JSU/AaIse3NHGCIYBQP9rgMFGCIYLE9jYk8BJQEhOUI5IQEFA+gDBf2eBQMBBwQFASZASz8mAAAAAAASAN4AAQAAAAAAAAATAAAAAQAAAAAAAQANABMAAQAAAAAAAgAHACAAAQAAAAAAAwANACcAAQAAAAAABAANADQAAQAAAAAABQALAEEAAQAAAAAABgANAEwAAQAAAAAACgArAFkAAQAAAAAACwATAIQAAwABBAkAAAAmAJcAAwABBAkAAQAaAL0AAwABBAkAAgAOANcAAwABBAkAAwAaAOUAAwABBAkABAAaAP8AAwABBAkABQAWARkAAwABBAkABgAaAS8AAwABBAkACgBWAUkAAwABBAkACwAmAZ9DcmVhdGVkIGJ5IGljb25mb250ZWR1aS1pY29uZm9udFJlZ3VsYXJlZHVpLWljb25mb250ZWR1aS1pY29uZm9udFZlcnNpb24gMS4wZWR1aS1pY29uZm9udEdlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAcgBlAGEAdABlAGQAIABiAHkAIABpAGMAbwBuAGYAbwBuAHQAZQBkAHUAaQAtAGkAYwBvAG4AZgBvAG4AdABSAGUAZwB1AGwAYQByAGUAZAB1AGkALQBpAGMAbwBuAGYAbwBuAHQAZQBkAHUAaQAtAGkAYwBvAG4AZgBvAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAZQBkAHUAaQAtAGkAYwBvAG4AZgBvAG4AdABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAA1sZXR0ZXJzcGFjaW5nC3RleHQtc2hyaW5rC3RleHQtZXh0ZW5kCXRyYW5zbGF0ZQ5jb250aW51ZS13cml0ZQVxdW90YQdyZWZyZXNoBGJlbGwPcmlnaHQtZGlyZWN0aW9uBXJvYm90BWltYWdlDmNvbnRlbnQtaW1wb3J0BXNvdW5kBXJpZ2h0D2ljX2ltYWdlX3VwbG9hZAVjaGVjawZpZnJhbWUKYmFja2dyb3VuZANsdHIDcnRsC2ZpbmRyZXBsYWNlCWljcHJldmlldwVyaXFpMgtldXJvLXN5bWJvbAVtdXNpYwRoZWxwCWhhbmRfZHJhdwVwcmludAR0aW1lBWJhaWR1C0dvb2dsZS1NYXBzCmltYWdlLW5vbmUMaW1hZ2UtY2VudGVyCmltYWdlLWxlZnQLaW1hZ2UtcmlnaHQJY2xlYXItZG9jCnBhZ2UtYnJlYWsGYXV0aG9yCndvcmQtaW1hZ2ULdG91cHBlcmNhc2ULdG9sb3dlcmNhc2UKaG9yaXpvbnRhbA9tZXJnZS1kb3duLWNlbGwLbWVyZ2UtY2VsbHMQbWVyZ2UtcmlnaHQtY2VsbA1zcGxpdC10by1yb3dzDXNwbGl0LXRvLWNvbHMOc3BsaXQtdG8tY2VsbHMOaW5zZXJ0cm93YWJvdmUXcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20UcGFyYWdyYXBoLW1hcmdpbi10b3ANdW5vcmRlcmVkbGlzdAxsaXN0LW9yZGVyZWQUc3BsaXQtY2VsbHMtdmVydGljYWwWc3BsaXQtY2VsbHMtaG9yaXpvbnRhbAphdHRhY2htZW50CXN1YnNjcmlwdAlzZWxlY3RhbGwLc3VwZXJzY3JpcHQDbWFwCWJnLWNvbG9ycw1hZGRfY29sX2FmdGVyDmFkZF9jb2xfYmVmb3JlDWFkZF9yb3dfYWZ0ZXIOYWRkX3Jvd19iZWZvcmUKZGVsZXRlX2NvbA1jb21iaW5lX2NlbGxzAm9sCmRlbGV0ZV9yb3cMZGVsZXRlX3RhYmxlAnVsBHJlZG8FdGFibGUEdW5kbwVwYXN0ZQZ1cGxvYWQFYnJ1c2gKdGV4dC1xdW90ZRFpbnNlcnQtcm93LWJvdHRvbRFmdWxsc2NyZWVuLWV4cGFuZA5pbnNlcnQtcm93LXRvcAh0ZW1wbGF0ZRJmb3JtYXQtaW1hZ2UtcmlnaHQRZm9ybWF0LWltYWdlLWxlZnQTZm9ybWF0LWltYWdlLWNlbnRlcgtsaW5lLWhlaWdodAdvdXRsaW5lBXNtaWxlDWFsaWduLWp1c3RpZnkHZm9ybXVsYQphbmdsZS1kb3duBWNsb3NlCm1hZ2ljLXdhbmQGZXJhc2VyBGh0bWwGdW5saW5rBmluZGVudAthbGlnbi1yaWdodAxhbGlnbi1jZW50ZXIKYWxpZ24tbGVmdAtmb250LWNvbG9ycwRwbGF5CXVuZGVybGluZQZpdGFsaWMEbGluawZzdHJpa2UEY29kZQRib2xkAAAAAAA=\") format('truetype');\n}\n.edui-iconfont {\n  font-family: \"edui-iconfont\" !important;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.edui-default {\n  accent-color: #333;\n}\n/* common layer */\n.edui-default .edui-box {\n  border: none;\n  padding: 0;\n  margin: 0;\n  overflow: hidden;\n  line-height: 30px;\n}\n.edui-default a.edui-box {\n  display: block;\n  text-decoration: none;\n  color: black;\n}\n.edui-default a.edui-box:hover {\n  text-decoration: none;\n}\n.edui-default a.edui-box:active {\n  text-decoration: none;\n}\n.edui-default table.edui-box {\n  border-collapse: collapse;\n}\n.edui-default ul.edui-box {\n  list-style-type: none;\n}\ndiv.edui-box {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.edui-default .edui-clearfix {\n  zoom: 1;\n}\n.edui-default .edui-clearfix:after {\n  content: '\\20';\n  display: block;\n  clear: both;\n}\n* html div.edui-box {\n  display: inline !important;\n}\n*:first-child + html div.edui-box {\n  display: inline !important;\n}\n/* control layout */\n.edui-default .edui-button-body,\n.edui-splitbutton-body,\n.edui-menubutton-body,\n.edui-combox-body {\n  position: relative;\n}\n.edui-default .edui-popup {\n  position: absolute;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n}\n.edui-default .edui-popup .edui-shadow {\n  position: absolute;\n  z-index: -1;\n}\n.edui-default .edui-popup .edui-bordereraser {\n  position: absolute;\n  overflow: hidden;\n}\n.edui-default .edui-tablepicker .edui-canvas {\n  position: relative;\n}\n.edui-default .edui-tablepicker .edui-canvas .edui-overlay {\n  position: absolute;\n}\n.edui-default .edui-dialog-modalmask,\n.edui-dialog-dragmask {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 100%;\n  height: 100%;\n}\n.edui-default .edui-toolbar {\n  position: relative;\n}\n/*\n * default theme\n */\n.edui-default .edui-label {\n  cursor: pointer;\n}\n.edui-default span.edui-clickable {\n  color: #666;\n  cursor: pointer;\n  text-decoration: none;\n}\n.edui-default span.edui-clickable:hover {\n  color: #333;\n}\n.edui-default span.edui-unclickable {\n  color: gray;\n  cursor: default;\n}\n.edui-default span.edui-popup-action-item {\n  margin-right: 5px;\n}\n.edui-default span.edui-popup-action-item:last-child {\n  margin-right: 0;\n}\n"
  },
  {
    "path": "themes/default/_css/uibase.less",
    "content": "/*基础UI构建\n*/\n\n:root {\n    --edui-color-active-bg: rgba(200, 200, 200, 0.3);\n    --edui-color-border: #EEEEEE;\n    --edui-bg-toolbar: #FFFFFF;\n    --edui-color-muted: #CCCCCC;\n}\n\n@font-face {\n    font-family: \"edui-iconfont\";\n    src: data-uri('./../font/iconfont.woff2') format('woff2'),\n    data-uri('./../font/iconfont.woff') format('woff'),\n    data-uri('./../font/iconfont.ttf') format('truetype');\n}\n\n.edui-iconfont {\n    font-family: \"edui-iconfont\" !important;\n    font-style: normal;\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n\n\n.edui-default {\n    accent-color: #333;\n}\n\n/* common layer */\n.edui-default .edui-box {\n    border: none;\n    padding: 0;\n    margin: 0;\n    overflow: hidden;\n    line-height: 30px;\n}\n\n.edui-default a.edui-box {\n    display: block;\n    text-decoration: none;\n    color: black;\n}\n\n.edui-default a.edui-box:hover {\n    text-decoration: none;\n}\n\n.edui-default a.edui-box:active {\n    text-decoration: none;\n}\n\n.edui-default table.edui-box {\n    border-collapse: collapse;\n}\n\n.edui-default ul.edui-box {\n    list-style-type: none;\n}\n\ndiv.edui-box {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.edui-default .edui-clearfix {\n    zoom: 1\n}\n\n.edui-default .edui-clearfix:after {\n    content: '\\20';\n    display: block;\n    clear: both;\n}\n\n* html div.edui-box {\n    display: inline !important;\n}\n\n*:first-child + html div.edui-box {\n    display: inline !important;\n}\n\n/* control layout */\n.edui-default .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {\n    position: relative;\n}\n\n.edui-default .edui-popup {\n    position: absolute;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n}\n\n.edui-default .edui-popup .edui-shadow {\n    position: absolute;\n    z-index: -1;\n}\n\n.edui-default .edui-popup .edui-bordereraser {\n    position: absolute;\n    overflow: hidden;\n}\n\n.edui-default .edui-tablepicker .edui-canvas {\n    position: relative;\n}\n\n.edui-default .edui-tablepicker .edui-canvas .edui-overlay {\n    position: absolute;\n}\n\n.edui-default .edui-dialog-modalmask, .edui-dialog-dragmask {\n    position: absolute;\n    left: 0;\n    top: 0;\n    width: 100%;\n    height: 100%;\n}\n\n.edui-default .edui-toolbar {\n    position: relative;\n}\n\n/*\n * default theme\n */\n.edui-default .edui-label {\n    cursor: pointer;\n}\n\n.edui-default span.edui-clickable {\n    color: #666;\n    cursor: pointer;\n    text-decoration: none;\n}\n\n.edui-default span.edui-clickable:hover {\n    color: #333;\n}\n\n.edui-default span.edui-unclickable {\n    color: gray;\n    cursor: default;\n}\n\n.edui-default span.edui-popup-action-item {\n    margin-right: 5px;\n}\n\n.edui-default span.edui-popup-action-item:last-child {\n    margin-right: 0;\n}\n\n"
  },
  {
    "path": "themes/default/dialog.css",
    "content": ":root {\n  --edui-primary-color: #1890FF;\n  --edui-color-active-bg: rgba(200, 200, 200, 0.3);\n  --edui-color-border: #EEEEEE;\n  --edui-bg-toolbar: #FFFFFF;\n  --edui-color-muted: #CCCCCC;\n}\n* {\n  font-size: 13px;\n}\n@font-face {\n  font-family: \"edui-iconfont\";\n  src: url(\"data:font/woff2;base64,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\") format('woff2'), url(\"data:font/woff;base64,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\") format('woff'), url(\"data:font/ttf;base64,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aQAtAGkAYwBvAG4AZgBvAG4AdABWAGUAcgBzAGkAbwBuACAAMQAuADAAZQBkAHUAaQAtAGkAYwBvAG4AZgBvAG4AdABHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbQECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4BHwEgASEBIgEjASQBJQEmAScBKAEpASoBKwEsAS0BLgEvATABMQEyATMBNAE1ATYBNwE4ATkBOgE7ATwBPQE+AT8BQAFBAUIBQwFEAUUBRgFHAUgBSQFKAUsBTAFNAU4BTwFQAVEBUgFTAVQBVQFWAVcBWAFZAVoBWwFcAV0BXgFfAWABYQFiAWMBZAFlAWYBZwFoAWkBagFrAWwBbQFuAA1sZXR0ZXJzcGFjaW5nC3RleHQtc2hyaW5rC3RleHQtZXh0ZW5kCXRyYW5zbGF0ZQ5jb250aW51ZS13cml0ZQVxdW90YQdyZWZyZXNoBGJlbGwPcmlnaHQtZGlyZWN0aW9uBXJvYm90BWltYWdlDmNvbnRlbnQtaW1wb3J0BXNvdW5kBXJpZ2h0D2ljX2ltYWdlX3VwbG9hZAVjaGVjawZpZnJhbWUKYmFja2dyb3VuZANsdHIDcnRsC2ZpbmRyZXBsYWNlCWljcHJldmlldwVyaXFpMgtldXJvLXN5bWJvbAVtdXNpYwRoZWxwCWhhbmRfZHJhdwVwcmludAR0aW1lBWJhaWR1C0dvb2dsZS1NYXBzCmltYWdlLW5vbmUMaW1hZ2UtY2VudGVyCmltYWdlLWxlZnQLaW1hZ2UtcmlnaHQJY2xlYXItZG9jCnBhZ2UtYnJlYWsGYXV0aG9yCndvcmQtaW1hZ2ULdG91cHBlcmNhc2ULdG9sb3dlcmNhc2UKaG9yaXpvbnRhbA9tZXJnZS1kb3duLWNlbGwLbWVyZ2UtY2VsbHMQbWVyZ2UtcmlnaHQtY2VsbA1zcGxpdC10by1yb3dzDXNwbGl0LXRvLWNvbHMOc3BsaXQtdG8tY2VsbHMOaW5zZXJ0cm93YWJvdmUXcGFyYWdyYXBoLW1hcmdpbi1ib3R0b20UcGFyYWdyYXBoLW1hcmdpbi10b3ANdW5vcmRlcmVkbGlzdAxsaXN0LW9yZGVyZWQUc3BsaXQtY2VsbHMtdmVydGljYWwWc3BsaXQtY2VsbHMtaG9yaXpvbnRhbAphdHRhY2htZW50CXN1YnNjcmlwdAlzZWxlY3RhbGwLc3VwZXJzY3JpcHQDbWFwCWJnLWNvbG9ycw1hZGRfY29sX2FmdGVyDmFkZF9jb2xfYmVmb3JlDWFkZF9yb3dfYWZ0ZXIOYWRkX3Jvd19iZWZvcmUKZGVsZXRlX2NvbA1jb21iaW5lX2NlbGxzAm9sCmRlbGV0ZV9yb3cMZGVsZXRlX3RhYmxlAnVsBHJlZG8FdGFibGUEdW5kbwVwYXN0ZQZ1cGxvYWQFYnJ1c2gKdGV4dC1xdW90ZRFpbnNlcnQtcm93LWJvdHRvbRFmdWxsc2NyZWVuLWV4cGFuZA5pbnNlcnQtcm93LXRvcAh0ZW1wbGF0ZRJmb3JtYXQtaW1hZ2UtcmlnaHQRZm9ybWF0LWltYWdlLWxlZnQTZm9ybWF0LWltYWdlLWNlbnRlcgtsaW5lLWhlaWdodAdvdXRsaW5lBXNtaWxlDWFsaWduLWp1c3RpZnkHZm9ybXVsYQphbmdsZS1kb3duBWNsb3NlCm1hZ2ljLXdhbmQGZXJhc2VyBGh0bWwGdW5saW5rBmluZGVudAthbGlnbi1yaWdodAxhbGlnbi1jZW50ZXIKYWxpZ24tbGVmdAtmb250LWNvbG9ycwRwbGF5CXVuZGVybGluZQZpdGFsaWMEbGluawZzdHJpa2UEY29kZQRib2xkAAAAAAA=\") format('truetype');\n}\n.edui-iconfont {\n  font-family: \"edui-iconfont\" !important;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.edui-icon-letterspacing:before {\n  content: \"\\e8a8\";\n}\n.edui-icon-text-shrink:before {\n  content: \"\\e62e\";\n}\n.edui-icon-text-extend:before {\n  content: \"\\e734\";\n}\n.edui-icon-translate:before {\n  content: \"\\e902\";\n}\n.edui-icon-continue-write:before {\n  content: \"\\e8b8\";\n}\n.edui-icon-quota:before {\n  content: \"\\e63c\";\n}\n.edui-icon-refresh:before {\n  content: \"\\e706\";\n}\n.edui-icon-bell:before {\n  content: \"\\e625\";\n}\n.edui-icon-right-direction:before {\n  content: \"\\ed51\";\n}\n.edui-icon-robot:before {\n  content: \"\\e61c\";\n}\n.edui-icon-image:before {\n  content: \"\\e605\";\n}\n.edui-icon-content-import:before {\n  content: \"\\e6f1\";\n}\n.edui-icon-sound:before {\n  content: \"\\e77b\";\n}\n.edui-icon-right:before {\n  content: \"\\e665\";\n}\n.edui-icon-ic_image_upload:before {\n  content: \"\\edfc\";\n}\n.edui-icon-check:before {\n  content: \"\\e7fc\";\n}\n.edui-icon-iframe:before {\n  content: \"\\e6c0\";\n}\n.edui-icon-background:before {\n  content: \"\\e624\";\n}\n.edui-icon-ltr:before {\n  content: \"\\e623\";\n}\n.edui-icon-rtl:before {\n  content: \"\\e7bc\";\n}\n.edui-icon-findreplace:before {\n  content: \"\\eb6c\";\n}\n.edui-icon-icpreview:before {\n  content: \"\\e644\";\n}\n.edui-icon-riqi2:before {\n  content: \"\\e697\";\n}\n.edui-icon-euro-symbol:before {\n  content: \"\\e891\";\n}\n.edui-icon-music:before {\n  content: \"\\e656\";\n}\n.edui-icon-help:before {\n  content: \"\\e752\";\n}\n.edui-icon-hand_draw:before {\n  content: \"\\e70b\";\n}\n.edui-icon-print:before {\n  content: \"\\e67a\";\n}\n.edui-icon-time:before {\n  content: \"\\e680\";\n}\n.edui-icon-baidu:before {\n  content: \"\\e669\";\n}\n.edui-icon-Google-Maps:before {\n  content: \"\\e87b\";\n}\n.edui-icon-image-none:before {\n  content: \"\\e61f\";\n}\n.edui-icon-image-center:before {\n  content: \"\\e620\";\n}\n.edui-icon-image-left:before {\n  content: \"\\e621\";\n}\n.edui-icon-image-right:before {\n  content: \"\\e622\";\n}\n.edui-icon-clear-doc:before {\n  content: \"\\e61e\";\n}\n.edui-icon-page-break:before {\n  content: \"\\e61d\";\n}\n.edui-icon-author:before {\n  content: \"\\e61b\";\n}\n.edui-icon-word-image:before {\n  content: \"\\e618\";\n}\n.edui-icon-touppercase:before {\n  content: \"\\e619\";\n}\n.edui-icon-tolowercase:before {\n  content: \"\\e61a\";\n}\n.edui-icon-horizontal:before {\n  content: \"\\e617\";\n}\n.edui-icon-merge-down-cell:before {\n  content: \"\\e613\";\n}\n.edui-icon-merge-cells:before {\n  content: \"\\e614\";\n}\n.edui-icon-merge-right-cell:before {\n  content: \"\\e615\";\n}\n.edui-icon-split-to-rows:before {\n  content: \"\\e610\";\n}\n.edui-icon-split-to-cols:before {\n  content: \"\\e611\";\n}\n.edui-icon-split-to-cells:before {\n  content: \"\\e612\";\n}\n.edui-icon-insertrowabove:before {\n  content: \"\\e901\";\n}\n.edui-icon-paragraph-margin-bottom:before {\n  content: \"\\eb09\";\n}\n.edui-icon-paragraph-margin-top:before {\n  content: \"\\eb0a\";\n}\n.edui-icon-unorderedlist:before {\n  content: \"\\e7f4\";\n}\n.edui-icon-list-ordered:before {\n  content: \"\\e737\";\n}\n.edui-icon-split-cells-vertical:before {\n  content: \"\\e7d1\";\n}\n.edui-icon-split-cells-horizontal:before {\n  content: \"\\e7d2\";\n}\n.edui-icon-attachment:before {\n  content: \"\\e704\";\n}\n.edui-icon-subscript:before {\n  content: \"\\ece9\";\n}\n.edui-icon-selectall:before {\n  content: \"\\e62f\";\n}\n.edui-icon-superscript:before {\n  content: \"\\e83e\";\n}\n.edui-icon-map:before {\n  content: \"\\e649\";\n}\n.edui-icon-bg-colors:before {\n  content: \"\\e71a\";\n}\n.edui-icon-add_col_after:before {\n  content: \"\\e600\";\n}\n.edui-icon-add_col_before:before {\n  content: \"\\e601\";\n}\n.edui-icon-add_row_after:before {\n  content: \"\\e602\";\n}\n.edui-icon-add_row_before:before {\n  content: \"\\e603\";\n}\n.edui-icon-delete_col:before {\n  content: \"\\e604\";\n}\n.edui-icon-combine_cells:before {\n  content: \"\\e606\";\n}\n.edui-icon-ol:before {\n  content: \"\\e607\";\n}\n.edui-icon-delete_row:before {\n  content: \"\\e609\";\n}\n.edui-icon-delete_table:before {\n  content: \"\\e60a\";\n}\n.edui-icon-ul:before {\n  content: \"\\e60b\";\n}\n.edui-icon-redo:before {\n  content: \"\\e60c\";\n}\n.edui-icon-table:before {\n  content: \"\\e60d\";\n}\n.edui-icon-undo:before {\n  content: \"\\e60f\";\n}\n.edui-icon-paste:before {\n  content: \"\\edfb\";\n}\n.edui-icon-upload:before {\n  content: \"\\e7ad\";\n}\n.edui-icon-brush:before {\n  content: \"\\e637\";\n}\n.edui-icon-text-quote:before {\n  content: \"\\e6d8\";\n}\n.edui-icon-insert-row-bottom:before {\n  content: \"\\e842\";\n}\n.edui-icon-fullscreen-expand:before {\n  content: \"\\e675\";\n}\n.edui-icon-insert-row-top:before {\n  content: \"\\e735\";\n}\n.edui-icon-template:before {\n  content: \"\\e6ad\";\n}\n.edui-icon-format-image-right:before {\n  content: \"\\e6f8\";\n}\n.edui-icon-format-image-left:before {\n  content: \"\\e6f9\";\n}\n.edui-icon-format-image-center:before {\n  content: \"\\e6fa\";\n}\n.edui-icon-line-height:before {\n  content: \"\\e638\";\n}\n.edui-icon-outline:before {\n  content: \"\\e62d\";\n}\n.edui-icon-smile:before {\n  content: \"\\e60e\";\n}\n.edui-icon-align-justify:before {\n  content: \"\\e87c\";\n}\n.edui-icon-formula:before {\n  content: \"\\e616\";\n}\n.edui-icon-angle-down:before {\n  content: \"\\e9f0\";\n}\n.edui-icon-close:before {\n  content: \"\\e6a7\";\n}\n.edui-icon-magic-wand:before {\n  content: \"\\e662\";\n}\n.edui-icon-eraser:before {\n  content: \"\\e782\";\n}\n.edui-icon-html:before {\n  content: \"\\e608\";\n}\n.edui-icon-unlink:before {\n  content: \"\\e92b\";\n}\n.edui-icon-indent:before {\n  content: \"\\e7f3\";\n}\n.edui-icon-align-right:before {\n  content: \"\\e7f5\";\n}\n.edui-icon-align-center:before {\n  content: \"\\e7f6\";\n}\n.edui-icon-align-left:before {\n  content: \"\\e7f7\";\n}\n.edui-icon-font-colors:before {\n  content: \"\\e7f8\";\n}\n.edui-icon-play:before {\n  content: \"\\e636\";\n}\n.edui-icon-underline:before {\n  content: \"\\e63e\";\n}\n.edui-icon-italic:before {\n  content: \"\\e62a\";\n}\n.edui-icon-link:before {\n  content: \"\\e648\";\n}\n.edui-icon-strike:before {\n  content: \"\\e64a\";\n}\n.edui-icon-code:before {\n  content: \"\\e64c\";\n}\n.edui-icon-bold:before {\n  content: \"\\e628\";\n}\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n.flex {\n  display: flex;\n}\n.flex-grow {\n  flex-grow: 1;\n}\n.flex-items-center {\n  align-items: center;\n}\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\ninput[type=\"text\"] {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 5px;\n  line-height: 2px;\n  outline: none;\n}\nselect {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 5px;\n  line-height: 2px;\n  outline: none;\n}\n.btn {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 10px;\n  display: inline-block;\n  line-height: 30px;\n  text-decoration: none;\n  color: #333;\n  background-color: #F8F8F8;\n}\n.btn:hover {\n  background-color: #F0F0F0;\n}\n.btn.sm {\n  height: 24px;\n  line-height: 24px;\n}\n.btn.primary {\n  background-color: var(--edui-primary-color);\n  color: #FFF;\n}\n.ub-html {\n  line-height: 2;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n  overflow: hidden;\n  word-wrap: break-word;\n  font-size: 0.8125rem;\n}\n.ub-html > *:first-child {\n  margin-top: 0;\n}\n.ub-html > p:first-child {\n  margin-top: 0;\n}\n.ub-html > p:last-child {\n  margin-bottom: 0;\n}\n.ub-html p {\n  padding: 0;\n  line-height: 1.8;\n  word-spacing: 0.05rem;\n  margin: 0.5em 0;\n}\n.ub-html img {\n  max-width: 100%;\n}\n.ub-html iframe {\n  max-width: 100%;\n}\n.ub-html p.video-player {\n  position: relative;\n  padding-bottom: 56.25%;\n  height: 0;\n  overflow: hidden;\n}\n.ub-html p.video-player iframe {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.ub-html video {\n  max-width: 100%;\n}\n.ub-html a {\n  background: transparent;\n}\n.ub-html hr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n.ub-html code,\n.ub-html kbd,\n.ub-html pre {\n  font-family: \"Meiryo UI\", \"YaHei Consolas Hybrid\", Consolas, \"Malgun Gothic\", \"Segoe UI\", \"Trebuchet MS\", Helvetica, monospace, monospace;\n  font-size: 1em;\n  white-space: pre;\n  word-spacing: normal;\n  word-wrap: normal;\n  tab-size: 4;\n  hyphens: none;\n  text-align: left;\n  line-height: 1.8em;\n  padding: 1em;\n}\n.ub-html table {\n  border-spacing: 0;\n  max-width: 98%;\n  margin: 1em 0;\n  box-shadow: 0 0 0.1rem #CCC;\n  display: table;\n  text-align: left;\n  border: 0.05rem solid #ddd;\n  border-collapse: collapse;\n  overflow: auto;\n  word-break: keep-all;\n}\n.ub-html table tr {\n  background-color: #fff;\n  border-top: 0.05rem solid #ccc;\n}\n.ub-html table tr tbody {\n  border: 0;\n}\n.ub-html table tr th {\n  font-weight: bold;\n  background-color: #f0f0f0;\n  padding: 0.15rem 0.3rem;\n  border: 0.05rem solid #ddd;\n}\n.ub-html table tr td {\n  padding: 0.15rem 0.3rem;\n  border: 0.05rem solid #ddd;\n}\n.ub-html > p svg,\n.ub-html > p table,\n.ub-html > p pre {\n  -webkit-box-shadow: 0 0 0.5rem #CCC;\n  -moz-box-shadow: 0 0 0.5rem #CCC;\n  box-shadow: 0 0 0.5rem #CCC;\n  margin: 1em auto;\n  display: block;\n}\n.ub-html td,\n.ub-html th {\n  padding: 0;\n}\n.ub-html * {\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.ub-html input {\n  font: 0.65rem/1.4 Helvetica, arial, freesans, clean, sans-serif, \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n}\n.ub-html a {\n  color: #4183c4;\n  text-decoration: none;\n}\n.ub-html a:hover,\n.ub-html a:active {\n  text-decoration: underline;\n}\n.ub-html hr {\n  height: 0;\n  margin: 0.75rem 0;\n  overflow: hidden;\n  background: transparent;\n  border: 0;\n  border-bottom: 0.05rem solid #ddd;\n}\n.ub-html hr:before {\n  display: table;\n  content: \"\";\n}\n.ub-html hr:after {\n  display: table;\n  clear: both;\n  content: \"\";\n}\n.ub-html h1,\n.ub-html h2,\n.ub-html h3,\n.ub-html h4,\n.ub-html h5,\n.ub-html h6 {\n  font-weight: bold;\n  margin: 1.2em 0 0.6em 0;\n  text-align: start;\n}\n.ub-html h1 {\n  font-size: 2em;\n  margin: 1em 0;\n}\n.ub-html h2 {\n  font-size: 1.7em;\n  border-bottom: 1px solid #eee;\n  line-height: 2em;\n}\n.ub-html h3 {\n  font-size: 1.5em;\n}\n.ub-html h4 {\n  font-size: 1.25em;\n}\n.ub-html h5 {\n  font-size: 1em;\n}\n.ub-html h6 {\n  font-size: 0.85em;\n}\n.ub-html blockquote {\n  display: block;\n  font-size: 1em;\n  overflow: auto;\n  overflow-scrolling: touch;\n  border-left: 3px solid rgba(0, 0, 0, 0.4);\n  background: rgba(0, 0, 0, 0.05);\n  color: #6a737d;\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n  padding-left: 1em;\n  padding-right: 0.5em;\n  margin-bottom: 1em;\n  margin-top: 1em;\n}\n.ub-html blockquote p {\n  margin: 0.5em 0;\n}\n.ub-html ul,\n.ub-html ol {\n  padding: 0.5em 0;\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-left: 1.4em;\n}\n.ub-html ol li {\n  list-style: decimal;\n}\n.ub-html ul li {\n  list-style: disc;\n}\n.ub-html ol ol,\n.ub-html ul ol {\n  list-style-type: lower-roman;\n}\n.ub-html ul ul ol,\n.ub-html ul ol ol,\n.ub-html ol ul ol,\n.ub-html ol ol ol {\n  list-style-type: lower-alpha;\n}\n.ub-html dd {\n  margin-left: 0;\n}\n.ub-html code {\n  color: #d63384;\n  word-wrap: break-word;\n  border-radius: 0.2em;\n  white-space: pre;\n  font-family: \"Source Code Pro\", monospace;\n  font-size: 0.9em;\n  padding: 0.1em 0.2em;\n}\n.ub-html code.formula {\n  color: inherit;\n  background-color: inherit;\n  border: inherit;\n  font-size: inherit;\n}\n.ub-html pre {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  font-size: 0.9em;\n}\n.ub-html pre code {\n  color: inherit;\n  background: none;\n  border: none;\n}\n"
  },
  {
    "path": "themes/default/dialog.less",
    "content": ":root {\n  --edui-primary-color: #1890FF;\n  --edui-color-active-bg: rgba(200, 200, 200, 0.3);\n  --edui-color-border: #EEEEEE;\n  --edui-bg-toolbar: #FFFFFF;\n  --edui-color-muted: #CCCCCC;\n}\n\n* {\n  font-size: 13px;\n}\n\n@font-face {\n  font-family: \"edui-iconfont\";\n  src: data-uri('./font/iconfont.woff2') format('woff2'),\n  data-uri('./font/iconfont.woff') format('woff'),\n  data-uri('./font/iconfont.ttf') format('truetype');\n}\n\n\n@import \"./font/iconfont\";\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.flex {\n  display: flex;\n}\n\n.flex-grow {\n  flex-grow: 1;\n}\n\n.flex-items-center {\n  align-items: center;\n}\n\n.flex-shrink-0 {\n  flex-shrink: 0;\n}\n\ninput[type=\"text\"] {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 5px;\n  line-height: 2px;\n  outline: none;\n}\n\nselect {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 5px;\n  line-height: 2px;\n  outline: none;\n}\n\n.btn {\n  height: 30px;\n  border: 1px solid #EEE;\n  border-radius: 3px;\n  padding: 0 10px;\n  display: inline-block;\n  line-height: 30px;\n  text-decoration: none;\n  color: #333;\n  background-color: #F8F8F8;\n\n  &:hover {\n    background-color: #F0F0F0;\n  }\n\n  &.sm {\n    height: 24px;\n    line-height: 24px;\n  }\n\n  &.primary {\n    background-color: var(--edui-primary-color);\n    color: #FFF;\n  }\n}\n\n.ub-html {\n\n  line-height: 2;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n  overflow: hidden;\n  word-wrap: break-word;\n  font-size: .8125rem;\n\n  & > *:first-child {\n    margin-top: 0;\n  }\n\n  & > p:first-child {\n    margin-top: 0;\n  }\n\n  & > p:last-child {\n    margin-bottom: 0;\n  }\n\n  p {\n    padding: 0;\n    line-height: 1.8;\n    word-spacing: .05rem;\n    margin: 0.5em 0;\n  }\n\n  img {\n    max-width: 100%;\n  }\n\n  iframe {\n    max-width: 100%;\n  }\n\n  p.video-player {\n    position: relative;\n    padding-bottom: 56.25%;\n    height: 0;\n    overflow: hidden;\n\n    iframe {\n      position: absolute;\n      top: 0;\n      left: 0;\n      width: 100%;\n      height: 100%;\n    }\n  }\n\n  video {\n    max-width: 100%;\n  }\n\n  a {\n    background: transparent;\n  }\n\n  hr {\n    -moz-box-sizing: content-box;\n    box-sizing: content-box;\n    height: 0;\n  }\n\n  code,\n  kbd,\n  pre {\n    font-family: \"Meiryo UI\", \"YaHei Consolas Hybrid\", Consolas, \"Malgun Gothic\", \"Segoe UI\", \"Trebuchet MS\", Helvetica, monospace, monospace;\n    font-size: 1em;\n    white-space: pre;\n    word-spacing: normal;\n    word-wrap: normal;\n    tab-size: 4;\n    hyphens: none;\n    text-align: left;\n    line-height: 1.8em;\n    padding: 1em;\n  }\n\n  pre {\n\n  }\n\n  table {\n    border-spacing: 0;\n    max-width: 98%;\n    margin: 1em 0;\n    box-shadow: 0 0 0.1rem #CCC;\n    display: table;\n    text-align: left;\n    border: 0.05rem solid #ddd;\n    border-collapse: collapse;\n    overflow: auto;\n    word-break: keep-all;\n\n    tr {\n      background-color: #fff;\n      border-top: 0.05rem solid #ccc;\n\n      tbody {\n        border: 0;\n      }\n\n      th {\n        font-weight: bold;\n        background-color: #f0f0f0;\n        padding: 0.15rem 0.3rem;\n        border: 0.05rem solid #ddd;\n      }\n\n      td {\n        padding: 0.15rem 0.3rem;\n        border: 0.05rem solid #ddd;\n      }\n    }\n  }\n\n  > p {\n    svg, table, pre {\n      -webkit-box-shadow: 0 0 0.5rem #CCC;\n      -moz-box-shadow: 0 0 0.5rem #CCC;\n      box-shadow: 0 0 0.5rem #CCC;\n      margin: 1em auto;\n      display: block;\n    }\n\n    img {\n      //-webkit-box-shadow: 0 0 0.5rem #CCC;\n      //-moz-box-shadow: 0 0 0.5rem #CCC;\n      //box-shadow: 0 0 0.5rem #CCC;\n    }\n  }\n\n  td,\n  th {\n    padding: 0;\n  }\n\n  * {\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n\n  input {\n    font: 0.65rem/1.4 Helvetica, arial, freesans, clean, sans-serif, \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  }\n\n  a {\n    color: #4183c4;\n    text-decoration: none;\n  }\n\n  a:hover,\n  a:active {\n    text-decoration: underline;\n  }\n\n  hr {\n    height: 0;\n    margin: 0.75rem 0;\n    overflow: hidden;\n    background: transparent;\n    border: 0;\n    border-bottom: 0.05rem solid #ddd;\n  }\n\n  hr:before {\n    display: table;\n    content: \"\";\n  }\n\n  hr:after {\n    display: table;\n    clear: both;\n    content: \"\";\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    font-weight: bold;\n    margin: 1.2em 0 .6em 0;\n    text-align: start;\n  }\n\n  h1 {\n    font-size: 2em;\n    margin: 1em 0;\n  }\n\n  h2 {\n    font-size: 1.7em;\n    border-bottom: 1px solid #eee;\n    line-height: 2em;\n  }\n\n  h3 {\n    font-size: 1.5em\n  }\n\n  h4 {\n    font-size: 1.25em\n  }\n\n  h5 {\n    font-size: 1em\n  }\n\n  h6 {\n    font-size: .85em\n  }\n\n  blockquote {\n    display: block;\n    font-size: 1em;\n    overflow: auto;\n    overflow-scrolling: touch;\n    border-left: 3px solid rgba(0, 0, 0, 0.4);\n    background: rgba(0, 0, 0, 0.05);\n    color: #6a737d;\n    padding-top: 0.5em;\n    padding-bottom: 0.5em;\n    padding-left: 1em;\n    padding-right: 0.5em;\n    margin-bottom: 1em;\n    margin-top: 1em;\n\n    p {\n      margin: 0.5em 0;\n    }\n  }\n\n  ul,\n  ol {\n    padding: 0.5em 0;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 1.4em;\n  }\n\n  ol {\n    li {\n      list-style: decimal;\n    }\n  }\n\n  ul {\n    li {\n      list-style: disc;\n    }\n  }\n\n  ol ol,\n  ul ol {\n    list-style-type: lower-roman;\n  }\n\n  ul ul ol,\n  ul ol ol,\n  ol ul ol,\n  ol ol ol {\n    list-style-type: lower-alpha;\n  }\n\n  dd {\n    margin-left: 0;\n  }\n\n  code {\n    color: #d63384;\n    word-wrap: break-word;\n    border-radius: 0.2em;\n    white-space: pre;\n    font-family: \"Source Code Pro\", monospace;\n    font-size: .9em;\n    padding: 0.1em 0.2em;\n\n    &.formula {\n      color: inherit;\n      background-color: inherit;\n      border: inherit;\n      font-size: inherit;\n    }\n  }\n\n  pre {\n    margin-top: 0;\n    margin-bottom: 0;\n    font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    font-size: 0.9em;\n\n    code {\n      color: inherit;\n      background: none;\n      border: none;\n    }\n  }\n\n}\n\n\n"
  },
  {
    "path": "themes/default/dialogbase.css",
    "content": "/*弹出对话框页面样式组件\n*/\n\n/*reset\n*/\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, font, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td {\n    margin: 0;\n    padding: 0;\n    outline: 0;\n    font-size: 100%;\n}\n\nbody {\n    line-height: 1;\n}\n\nol, ul {\n    list-style: none;\n}\n\nblockquote, q {\n    quotes: none;\n}\n\nins {\n    text-decoration: none;\n}\n\ndel {\n    text-decoration: line-through;\n}\n\ntable {\n    border-collapse: collapse;\n    border-spacing: 0;\n}\n\n/*module\n*/\nbody {\n    background-color: #fff;\n    font: 12px/1.5 sans-serif, \"宋体\", \"Arial Narrow\", HELVETICA;\n    color: #646464;\n}\n\n/*tab*/\n.tabhead {\n    position: relative;\n    z-index: 10;\n}\n\n.tabhead span {\n    display: inline-block;\n    padding: 0 5px;\n    height: 30px;\n    border: 1px solid #ccc;\n    background: #EEE;\n    text-align: center;\n    line-height: 30px;\n    cursor: pointer;\n    *margin-right: 5px;\n    border-radius: 3px 3px 0 0;\n}\n\n.tabhead span.focus {\n    height: 31px;\n    border-bottom: none;\n    background: #fff;\n}\n\n.tabbody {\n    position: relative;\n    top: -1px;\n    margin: 0 auto;\n    border: 1px solid #ccc;\n}\n\n/*button*/\na.button {\n    display: block;\n    text-align: center;\n    line-height: 24px;\n    text-decoration: none;\n    height: 24px;\n    width: 95px;\n    border: 0;\n    color: #838383;\n}\n\na.button:hover {\n    background-position: 0 -30px;\n}\n"
  },
  {
    "path": "themes/default/font/iconfont.less",
    "content": ".edui-iconfont {\n  font-family: \"edui-iconfont\" !important;\n  font-style: normal;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.edui-icon-letterspacing:before {\n  content: \"\\e8a8\";\n}\n\n.edui-icon-text-shrink:before {\n  content: \"\\e62e\";\n}\n\n.edui-icon-text-extend:before {\n  content: \"\\e734\";\n}\n\n.edui-icon-translate:before {\n  content: \"\\e902\";\n}\n\n.edui-icon-continue-write:before {\n  content: \"\\e8b8\";\n}\n\n.edui-icon-quota:before {\n  content: \"\\e63c\";\n}\n\n.edui-icon-refresh:before {\n  content: \"\\e706\";\n}\n\n.edui-icon-bell:before {\n  content: \"\\e625\";\n}\n\n.edui-icon-right-direction:before {\n  content: \"\\ed51\";\n}\n\n.edui-icon-robot:before {\n  content: \"\\e61c\";\n}\n\n.edui-icon-image:before {\n  content: \"\\e605\";\n}\n\n.edui-icon-content-import:before {\n  content: \"\\e6f1\";\n}\n\n.edui-icon-sound:before {\n  content: \"\\e77b\";\n}\n\n.edui-icon-right:before {\n  content: \"\\e665\";\n}\n\n.edui-icon-ic_image_upload:before {\n  content: \"\\edfc\";\n}\n\n.edui-icon-check:before {\n  content: \"\\e7fc\";\n}\n\n.edui-icon-iframe:before {\n  content: \"\\e6c0\";\n}\n\n.edui-icon-background:before {\n  content: \"\\e624\";\n}\n\n.edui-icon-ltr:before {\n  content: \"\\e623\";\n}\n\n.edui-icon-rtl:before {\n  content: \"\\e7bc\";\n}\n\n.edui-icon-findreplace:before {\n  content: \"\\eb6c\";\n}\n\n.edui-icon-icpreview:before {\n  content: \"\\e644\";\n}\n\n.edui-icon-riqi2:before {\n  content: \"\\e697\";\n}\n\n.edui-icon-euro-symbol:before {\n  content: \"\\e891\";\n}\n\n.edui-icon-music:before {\n  content: \"\\e656\";\n}\n\n.edui-icon-help:before {\n  content: \"\\e752\";\n}\n\n.edui-icon-hand_draw:before {\n  content: \"\\e70b\";\n}\n\n.edui-icon-print:before {\n  content: \"\\e67a\";\n}\n\n.edui-icon-time:before {\n  content: \"\\e680\";\n}\n\n.edui-icon-baidu:before {\n  content: \"\\e669\";\n}\n\n.edui-icon-Google-Maps:before {\n  content: \"\\e87b\";\n}\n\n.edui-icon-image-none:before {\n  content: \"\\e61f\";\n}\n\n.edui-icon-image-center:before {\n  content: \"\\e620\";\n}\n\n.edui-icon-image-left:before {\n  content: \"\\e621\";\n}\n\n.edui-icon-image-right:before {\n  content: \"\\e622\";\n}\n\n.edui-icon-clear-doc:before {\n  content: \"\\e61e\";\n}\n\n.edui-icon-page-break:before {\n  content: \"\\e61d\";\n}\n\n.edui-icon-author:before {\n  content: \"\\e61b\";\n}\n\n.edui-icon-word-image:before {\n  content: \"\\e618\";\n}\n\n.edui-icon-touppercase:before {\n  content: \"\\e619\";\n}\n\n.edui-icon-tolowercase:before {\n  content: \"\\e61a\";\n}\n\n.edui-icon-horizontal:before {\n  content: \"\\e617\";\n}\n\n.edui-icon-merge-down-cell:before {\n  content: \"\\e613\";\n}\n\n.edui-icon-merge-cells:before {\n  content: \"\\e614\";\n}\n\n.edui-icon-merge-right-cell:before {\n  content: \"\\e615\";\n}\n\n.edui-icon-split-to-rows:before {\n  content: \"\\e610\";\n}\n\n.edui-icon-split-to-cols:before {\n  content: \"\\e611\";\n}\n\n.edui-icon-split-to-cells:before {\n  content: \"\\e612\";\n}\n\n.edui-icon-insertrowabove:before {\n  content: \"\\e901\";\n}\n\n.edui-icon-paragraph-margin-bottom:before {\n  content: \"\\eb09\";\n}\n\n.edui-icon-paragraph-margin-top:before {\n  content: \"\\eb0a\";\n}\n\n.edui-icon-unorderedlist:before {\n  content: \"\\e7f4\";\n}\n\n.edui-icon-list-ordered:before {\n  content: \"\\e737\";\n}\n\n.edui-icon-split-cells-vertical:before {\n  content: \"\\e7d1\";\n}\n\n.edui-icon-split-cells-horizontal:before {\n  content: \"\\e7d2\";\n}\n\n.edui-icon-attachment:before {\n  content: \"\\e704\";\n}\n\n.edui-icon-subscript:before {\n  content: \"\\ece9\";\n}\n\n.edui-icon-selectall:before {\n  content: \"\\e62f\";\n}\n\n.edui-icon-superscript:before {\n  content: \"\\e83e\";\n}\n\n.edui-icon-map:before {\n  content: \"\\e649\";\n}\n\n.edui-icon-bg-colors:before {\n  content: \"\\e71a\";\n}\n\n.edui-icon-add_col_after:before {\n  content: \"\\e600\";\n}\n\n.edui-icon-add_col_before:before {\n  content: \"\\e601\";\n}\n\n.edui-icon-add_row_after:before {\n  content: \"\\e602\";\n}\n\n.edui-icon-add_row_before:before {\n  content: \"\\e603\";\n}\n\n.edui-icon-delete_col:before {\n  content: \"\\e604\";\n}\n\n.edui-icon-combine_cells:before {\n  content: \"\\e606\";\n}\n\n.edui-icon-ol:before {\n  content: \"\\e607\";\n}\n\n.edui-icon-delete_row:before {\n  content: \"\\e609\";\n}\n\n.edui-icon-delete_table:before {\n  content: \"\\e60a\";\n}\n\n.edui-icon-ul:before {\n  content: \"\\e60b\";\n}\n\n.edui-icon-redo:before {\n  content: \"\\e60c\";\n}\n\n.edui-icon-table:before {\n  content: \"\\e60d\";\n}\n\n.edui-icon-undo:before {\n  content: \"\\e60f\";\n}\n\n.edui-icon-paste:before {\n  content: \"\\edfb\";\n}\n\n.edui-icon-upload:before {\n  content: \"\\e7ad\";\n}\n\n.edui-icon-brush:before {\n  content: \"\\e637\";\n}\n\n.edui-icon-text-quote:before {\n  content: \"\\e6d8\";\n}\n\n.edui-icon-insert-row-bottom:before {\n  content: \"\\e842\";\n}\n\n.edui-icon-fullscreen-expand:before {\n  content: \"\\e675\";\n}\n\n.edui-icon-insert-row-top:before {\n  content: \"\\e735\";\n}\n\n.edui-icon-template:before {\n  content: \"\\e6ad\";\n}\n\n.edui-icon-format-image-right:before {\n  content: \"\\e6f8\";\n}\n\n.edui-icon-format-image-left:before {\n  content: \"\\e6f9\";\n}\n\n.edui-icon-format-image-center:before {\n  content: \"\\e6fa\";\n}\n\n.edui-icon-line-height:before {\n  content: \"\\e638\";\n}\n\n.edui-icon-outline:before {\n  content: \"\\e62d\";\n}\n\n.edui-icon-smile:before {\n  content: \"\\e60e\";\n}\n\n.edui-icon-align-justify:before {\n  content: \"\\e87c\";\n}\n\n.edui-icon-formula:before {\n  content: \"\\e616\";\n}\n\n.edui-icon-angle-down:before {\n  content: \"\\e9f0\";\n}\n\n.edui-icon-close:before {\n  content: \"\\e6a7\";\n}\n\n.edui-icon-magic-wand:before {\n  content: \"\\e662\";\n}\n\n.edui-icon-eraser:before {\n  content: \"\\e782\";\n}\n\n.edui-icon-html:before {\n  content: \"\\e608\";\n}\n\n.edui-icon-unlink:before {\n  content: \"\\e92b\";\n}\n\n.edui-icon-indent:before {\n  content: \"\\e7f3\";\n}\n\n.edui-icon-align-right:before {\n  content: \"\\e7f5\";\n}\n\n.edui-icon-align-center:before {\n  content: \"\\e7f6\";\n}\n\n.edui-icon-align-left:before {\n  content: \"\\e7f7\";\n}\n\n.edui-icon-font-colors:before {\n  content: \"\\e7f8\";\n}\n\n.edui-icon-play:before {\n  content: \"\\e636\";\n}\n\n.edui-icon-underline:before {\n  content: \"\\e63e\";\n}\n\n.edui-icon-italic:before {\n  content: \"\\e62a\";\n}\n\n.edui-icon-link:before {\n  content: \"\\e648\";\n}\n\n.edui-icon-strike:before {\n  content: \"\\e64a\";\n}\n\n.edui-icon-code:before {\n  content: \"\\e64c\";\n}\n\n.edui-icon-bold:before {\n  content: \"\\e628\";\n}\n"
  },
  {
    "path": "themes/iframe.css",
    "content": "body {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';\n    font-size: 14px;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n}\n\na {\n    color: #09f;\n    text-decoration: none;\n}\n\na:hover,\na:focus {\n    color: #09f;\n    text-decoration: none;\n}\n\nblockquote {\n    padding: 0 0 0 15px;\n    margin: 0 0 18px;\n    border-left: 5px solid #EEE;\n}\n\nimg + br {\n    display: block;\n    padding: 4px 0;\n    content: ' ';\n}\n\nbody p {\n    margin-bottom: 1em;\n}\n\niframe {\n    border: none;\n}\n\nimg {\n    max-width: 100%;\n}\n\nimg[data-word-image] {\n    cursor: pointer;\n}\n\npre {\n    margin: .5em 0;\n    padding: .4em .6em;\n    border-radius: 8px;\n    background: #f8f8f8;\n    line-height: 1.5;\n}\n\n/*交互操作*/\nimg {\n    cursor: pointer;\n}\n\n.edui-quick-operate-active {\n    background: #E6ECFF;\n}\n"
  },
  {
    "path": "third-party/SyntaxHighlighter/shCore.js",
    "content": "// XRegExp 1.5.1\n// (c) 2007-2012 Steven Levithan\n// MIT License\n// <http://xregexp.com>\n// Provides an augmented, extensible, cross-browser implementation of regular expressions,\n// including support for additional syntax, flags, and methods\n\nvar XRegExp;\n\nif (XRegExp) {\n    // Avoid running twice, since that would break references to native globals\n    throw Error(\"can't load XRegExp twice in the same frame\");\n}\n\n// Run within an anonymous function to protect variables and avoid new globals\n(function (undefined) {\n\n    //---------------------------------\n    //  Constructor\n    //---------------------------------\n\n    // Accepts a pattern and flags; returns a new, extended `RegExp` object. Differs from a native\n    // regular expression in that additional syntax and flags are supported and cross-browser\n    // syntax inconsistencies are ameliorated. `XRegExp(/regex/)` clones an existing regex and\n    // converts to type XRegExp\n    XRegExp = function (pattern, flags) {\n        var output = [],\n            currScope = XRegExp.OUTSIDE_CLASS,\n            pos = 0,\n            context, tokenResult, match, chr, regex;\n\n        if (XRegExp.isRegExp(pattern)) {\n            if (flags !== undefined)\n                throw TypeError(\"can't supply flags when constructing one RegExp from another\");\n            return clone(pattern);\n        }\n        // Tokens become part of the regex construction process, so protect against infinite\n        // recursion when an XRegExp is constructed within a token handler or trigger\n        if (isInsideConstructor)\n            throw Error(\"can't call the XRegExp constructor within token definition functions\");\n\n        flags = flags || \"\";\n        context = { // `this` object for custom tokens\n            hasNamedCapture: false,\n            captureNames: [],\n            hasFlag: function (flag) {return flags.indexOf(flag) > -1;},\n            setFlag: function (flag) {flags += flag;}\n        };\n\n        while (pos < pattern.length) {\n            // Check for custom tokens at the current position\n            tokenResult = runTokens(pattern, pos, currScope, context);\n\n            if (tokenResult) {\n                output.push(tokenResult.output);\n                pos += (tokenResult.match[0].length || 1);\n            } else {\n                // Check for native multicharacter metasequences (excluding character classes) at\n                // the current position\n                if (match = nativ.exec.call(nativeTokens[currScope], pattern.slice(pos))) {\n                    output.push(match[0]);\n                    pos += match[0].length;\n                } else {\n                    chr = pattern.charAt(pos);\n                    if (chr === \"[\")\n                        currScope = XRegExp.INSIDE_CLASS;\n                    else if (chr === \"]\")\n                        currScope = XRegExp.OUTSIDE_CLASS;\n                    // Advance position one character\n                    output.push(chr);\n                    pos++;\n                }\n            }\n        }\n\n        regex = RegExp(output.join(\"\"), nativ.replace.call(flags, flagClip, \"\"));\n        regex._xregexp = {\n            source: pattern,\n            captureNames: context.hasNamedCapture ? context.captureNames : null\n        };\n        return regex;\n    };\n\n\n    //---------------------------------\n    //  Public properties\n    //---------------------------------\n\n    XRegExp.version = \"1.5.1\";\n\n    // Token scope bitflags\n    XRegExp.INSIDE_CLASS = 1;\n    XRegExp.OUTSIDE_CLASS = 2;\n\n\n    //---------------------------------\n    //  Private variables\n    //---------------------------------\n\n    var replacementToken = /\\$(?:(\\d\\d?|[$&`'])|{([$\\w]+)})/g,\n        flagClip = /[^gimy]+|([\\s\\S])(?=[\\s\\S]*\\1)/g, // Nonnative and duplicate flags\n        quantifier = /^(?:[?*+]|{\\d+(?:,\\d*)?})\\??/,\n        isInsideConstructor = false,\n        tokens = [],\n    // Copy native globals for reference (\"native\" is an ES3 reserved keyword)\n        nativ = {\n            exec: RegExp.prototype.exec,\n            test: RegExp.prototype.test,\n            match: String.prototype.match,\n            replace: String.prototype.replace,\n            split: String.prototype.split\n        },\n        compliantExecNpcg = nativ.exec.call(/()??/, \"\")[1] === undefined, // check `exec` handling of nonparticipating capturing groups\n        compliantLastIndexIncrement = function () {\n            var x = /^/g;\n            nativ.test.call(x, \"\");\n            return !x.lastIndex;\n        }(),\n        hasNativeY = RegExp.prototype.sticky !== undefined,\n        nativeTokens = {};\n\n    // `nativeTokens` match native multicharacter metasequences only (including deprecated octals,\n    // excluding character classes)\n    nativeTokens[XRegExp.INSIDE_CLASS] = /^(?:\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S]))/;\n    nativeTokens[XRegExp.OUTSIDE_CLASS] = /^(?:\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u[\\dA-Fa-f]{4}|c[A-Za-z]|[\\s\\S])|\\(\\?[:=!]|[?*+]\\?|{\\d+(?:,\\d*)?}\\??)/;\n\n\n    //---------------------------------\n    //  Public methods\n    //---------------------------------\n\n    // Lets you extend or change XRegExp syntax and create custom flags. This is used internally by\n    // the XRegExp library and can be used to create XRegExp plugins. This function is intended for\n    // users with advanced knowledge of JavaScript's regular expression syntax and behavior. It can\n    // be disabled by `XRegExp.freezeTokens`\n    XRegExp.addToken = function (regex, handler, scope, trigger) {\n        tokens.push({\n            pattern: clone(regex, \"g\" + (hasNativeY ? \"y\" : \"\")),\n            handler: handler,\n            scope: scope || XRegExp.OUTSIDE_CLASS,\n            trigger: trigger || null\n        });\n    };\n\n    // Accepts a pattern and flags; returns an extended `RegExp` object. If the pattern and flag\n    // combination has previously been cached, the cached copy is returned; otherwise the newly\n    // created regex is cached\n    XRegExp.cache = function (pattern, flags) {\n        var key = pattern + \"/\" + (flags || \"\");\n        return XRegExp.cache[key] || (XRegExp.cache[key] = XRegExp(pattern, flags));\n    };\n\n    // Accepts a `RegExp` instance; returns a copy with the `/g` flag set. The copy has a fresh\n    // `lastIndex` (set to zero). If you want to copy a regex without forcing the `global`\n    // property, use `XRegExp(regex)`. Do not use `RegExp(regex)` because it will not preserve\n    // special properties required for named capture\n    XRegExp.copyAsGlobal = function (regex) {\n        return clone(regex, \"g\");\n    };\n\n    // Accepts a string; returns the string with regex metacharacters escaped. The returned string\n    // can safely be used at any point within a regex to match the provided literal string. Escaped\n    // characters are [ ] { } ( ) * + ? - . , \\ ^ $ | # and whitespace\n    XRegExp.escape = function (str) {\n        return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n    };\n\n    // Accepts a string to search, regex to search with, position to start the search within the\n    // string (default: 0), and an optional Boolean indicating whether matches must start at-or-\n    // after the position or at the specified position only. This function ignores the `lastIndex`\n    // of the provided regex in its own handling, but updates the property for compatibility\n    XRegExp.execAt = function (str, regex, pos, anchored) {\n        var r2 = clone(regex, \"g\" + ((anchored && hasNativeY) ? \"y\" : \"\")),\n            match;\n        r2.lastIndex = pos = pos || 0;\n        match = r2.exec(str); // Run the altered `exec` (required for `lastIndex` fix, etc.)\n        if (anchored && match && match.index !== pos)\n            match = null;\n        if (regex.global)\n            regex.lastIndex = match ? r2.lastIndex : 0;\n        return match;\n    };\n\n    // Breaks the unrestorable link to XRegExp's private list of tokens, thereby preventing\n    // syntax and flag changes. Should be run after XRegExp and any plugins are loaded\n    XRegExp.freezeTokens = function () {\n        XRegExp.addToken = function () {\n            throw Error(\"can't run addToken after freezeTokens\");\n        };\n    };\n\n    // Accepts any value; returns a Boolean indicating whether the argument is a `RegExp` object.\n    // Note that this is also `true` for regex literals and regexes created by the `XRegExp`\n    // constructor. This works correctly for variables created in another frame, when `instanceof`\n    // and `constructor` checks would fail to work as intended\n    XRegExp.isRegExp = function (o) {\n        return Object.prototype.toString.call(o) === \"[object RegExp]\";\n    };\n\n    // Executes `callback` once per match within `str`. Provides a simpler and cleaner way to\n    // iterate over regex matches compared to the traditional approaches of subverting\n    // `String.prototype.replace` or repeatedly calling `exec` within a `while` loop\n    XRegExp.iterate = function (str, regex, callback, context) {\n        var r2 = clone(regex, \"g\"),\n            i = -1, match;\n        while (match = r2.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (regex.global)\n                regex.lastIndex = r2.lastIndex; // Doing this to follow expectations if `lastIndex` is checked within `callback`\n            callback.call(context, match, ++i, str, regex);\n            if (r2.lastIndex === match.index)\n                r2.lastIndex++;\n        }\n        if (regex.global)\n            regex.lastIndex = 0;\n    };\n\n    // Accepts a string and an array of regexes; returns the result of using each successive regex\n    // to search within the matches of the previous regex. The array of regexes can also contain\n    // objects with `regex` and `backref` properties, in which case the named or numbered back-\n    // references specified are passed forward to the next regex or returned. E.g.:\n    // var xregexpImgFileNames = XRegExp.matchChain(html, [\n    //     {regex: /<img\\b([^>]+)>/i, backref: 1}, // <img> tag attributes\n    //     {regex: XRegExp('(?ix) \\\\s src=\" (?<src> [^\"]+ )'), backref: \"src\"}, // src attribute values\n    //     {regex: XRegExp(\"^http://xregexp\\\\.com(/[^#?]+)\", \"i\"), backref: 1}, // xregexp.com paths\n    //     /[^\\/]+$/ // filenames (strip directory paths)\n    // ]);\n    XRegExp.matchChain = function (str, chain) {\n        return function recurseChain (values, level) {\n            var item = chain[level].regex ? chain[level] : {regex: chain[level]},\n                regex = clone(item.regex, \"g\"),\n                matches = [], i;\n            for (i = 0; i < values.length; i++) {\n                XRegExp.iterate(values[i], regex, function (match) {\n                    matches.push(item.backref ? (match[item.backref] || \"\") : match[0]);\n                });\n            }\n            return ((level === chain.length - 1) || !matches.length) ?\n                matches : recurseChain(matches, level + 1);\n        }([str], 0);\n    };\n\n\n    //---------------------------------\n    //  New RegExp prototype methods\n    //---------------------------------\n\n    // Accepts a context object and arguments array; returns the result of calling `exec` with the\n    // first value in the arguments array. the context is ignored but is accepted for congruity\n    // with `Function.prototype.apply`\n    RegExp.prototype.apply = function (context, args) {\n        return this.exec(args[0]);\n    };\n\n    // Accepts a context object and string; returns the result of calling `exec` with the provided\n    // string. the context is ignored but is accepted for congruity with `Function.prototype.call`\n    RegExp.prototype.call = function (context, str) {\n        return this.exec(str);\n    };\n\n\n    //---------------------------------\n    //  Overriden native methods\n    //---------------------------------\n\n    // Adds named capture support (with backreferences returned as `result.name`), and fixes two\n    // cross-browser issues per ES3:\n    // - Captured values for nonparticipating capturing groups should be returned as `undefined`,\n    //   rather than the empty string.\n    // - `lastIndex` should not be incremented after zero-length matches.\n    RegExp.prototype.exec = function (str) {\n        var match, name, r2, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.apply(this, arguments);\n        if (match) {\n            // Fix browsers whose `exec` methods don't consistently return `undefined` for\n            // nonparticipating capturing groups\n            if (!compliantExecNpcg && match.length > 1 && indexOf(match, \"\") > -1) {\n                r2 = RegExp(this.source, nativ.replace.call(getNativeFlags(this), \"g\", \"\"));\n                // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n                // matching due to characters outside the match\n                nativ.replace.call((str + \"\").slice(match.index), r2, function () {\n                    for (var i = 1; i < arguments.length - 2; i++) {\n                        if (arguments[i] === undefined)\n                            match[i] = undefined;\n                    }\n                });\n            }\n            // Attach named capture properties\n            if (this._xregexp && this._xregexp.captureNames) {\n                for (var i = 1; i < match.length; i++) {\n                    name = this._xregexp.captureNames[i - 1];\n                    if (name)\n                        match[name] = match[i];\n                }\n            }\n            // Fix browsers that increment `lastIndex` after zero-length matches\n            if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n                this.lastIndex--;\n        }\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return match;\n    };\n\n    // Fix browser bugs in native method\n    RegExp.prototype.test = function (str) {\n        // Use the native `exec` to skip some processing overhead, even though the altered\n        // `exec` would take care of the `lastIndex` fixes\n        var match, origLastIndex;\n        if (!this.global)\n            origLastIndex = this.lastIndex;\n        match = nativ.exec.call(this, str);\n        // Fix browsers that increment `lastIndex` after zero-length matches\n        if (match && !compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index))\n            this.lastIndex--;\n        if (!this.global)\n            this.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        return !!match;\n    };\n\n    // Adds named capture support and fixes browser bugs in native method\n    String.prototype.match = function (regex) {\n        if (!XRegExp.isRegExp(regex))\n            regex = RegExp(regex); // Native `RegExp`\n        if (regex.global) {\n            var result = nativ.match.apply(this, arguments);\n            regex.lastIndex = 0; // Fix IE bug\n            return result;\n        }\n        return regex.exec(this); // Run the altered `exec`\n    };\n\n    // Adds support for `${n}` tokens for named and numbered backreferences in replacement text,\n    // and provides named backreferences to replacement functions as `arguments[0].name`. Also\n    // fixes cross-browser differences in replacement text syntax when performing a replacement\n    // using a nonregex search value, and the value of replacement regexes' `lastIndex` property\n    // during replacement iterations. Note that this doesn't support SpiderMonkey's proprietary\n    // third (`flags`) parameter\n    String.prototype.replace = function (search, replacement) {\n        var isRegex = XRegExp.isRegExp(search),\n            captureNames, result, str, origLastIndex;\n\n        // There are too many combinations of search/replacement types/values and browser bugs that\n        // preclude passing to native `replace`, so don't try\n        //if (...)\n        //    return nativ.replace.apply(this, arguments);\n\n        if (isRegex) {\n            if (search._xregexp)\n                captureNames = search._xregexp.captureNames; // Array or `null`\n            if (!search.global)\n                origLastIndex = search.lastIndex;\n        } else {\n            search = search + \"\"; // Type conversion\n        }\n\n        if (Object.prototype.toString.call(replacement) === \"[object Function]\") {\n            result = nativ.replace.call(this + \"\", search, function () {\n                if (captureNames) {\n                    // Change the `arguments[0]` string primitive to a String object which can store properties\n                    arguments[0] = new String(arguments[0]);\n                    // Store named backreferences on `arguments[0]`\n                    for (var i = 0; i < captureNames.length; i++) {\n                        if (captureNames[i])\n                            arguments[0][captureNames[i]] = arguments[i + 1];\n                    }\n                }\n                // Update `lastIndex` before calling `replacement` (fix browsers)\n                if (isRegex && search.global)\n                    search.lastIndex = arguments[arguments.length - 2] + arguments[0].length;\n                return replacement.apply(null, arguments);\n            });\n        } else {\n            str = this + \"\"; // Type conversion, so `args[args.length - 1]` will be a string (given nonstring `this`)\n            result = nativ.replace.call(str, search, function () {\n                var args = arguments; // Keep this function's `arguments` available through closure\n                return nativ.replace.call(replacement + \"\", replacementToken, function ($0, $1, $2) {\n                    // Numbered backreference (without delimiters) or special variable\n                    if ($1) {\n                        switch ($1) {\n                            case \"$\": return \"$\";\n                            case \"&\": return args[0];\n                            case \"`\": return args[args.length - 1].slice(0, args[args.length - 2]);\n                            case \"'\": return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n                            // Numbered backreference\n                            default:\n                                // What does \"$10\" mean?\n                                // - Backreference 10, if 10 or more capturing groups exist\n                                // - Backreference 1 followed by \"0\", if 1-9 capturing groups exist\n                                // - Otherwise, it's the string \"$10\"\n                                // Also note:\n                                // - Backreferences cannot be more than two digits (enforced by `replacementToken`)\n                                // - \"$01\" is equivalent to \"$1\" if a capturing group exists, otherwise it's the string \"$01\"\n                                // - There is no \"$0\" token (\"$&\" is the entire match)\n                                var literalNumbers = \"\";\n                                $1 = +$1; // Type conversion; drop leading zero\n                                if (!$1) // `$1` was \"0\" or \"00\"\n                                    return $0;\n                                while ($1 > args.length - 3) {\n                                    literalNumbers = String.prototype.slice.call($1, -1) + literalNumbers;\n                                    $1 = Math.floor($1 / 10); // Drop the last digit\n                                }\n                                return ($1 ? args[$1] || \"\" : \"$\") + literalNumbers;\n                        }\n                        // Named backreference or delimited numbered backreference\n                    } else {\n                        // What does \"${n}\" mean?\n                        // - Backreference to numbered capture n. Two differences from \"$n\":\n                        //   - n can be more than two digits\n                        //   - Backreference 0 is allowed, and is the entire match\n                        // - Backreference to named capture n, if it exists and is not a number overridden by numbered capture\n                        // - Otherwise, it's the string \"${n}\"\n                        var n = +$2; // Type conversion; drop leading zeros\n                        if (n <= args.length - 3)\n                            return args[n];\n                        n = captureNames ? indexOf(captureNames, $2) : -1;\n                        return n > -1 ? args[n + 1] : $0;\n                    }\n                });\n            });\n        }\n\n        if (isRegex) {\n            if (search.global)\n                search.lastIndex = 0; // Fix IE, Safari bug (last tested IE 9.0.5, Safari 5.1.2 on Windows)\n            else\n                search.lastIndex = origLastIndex; // Fix IE, Opera bug (last tested IE 9.0.5, Opera 11.61 on Windows)\n        }\n\n        return result;\n    };\n\n    // A consistent cross-browser, ES3 compliant `split`\n    String.prototype.split = function (s /* separator */, limit) {\n        // If separator `s` is not a regex, use the native `split`\n        if (!XRegExp.isRegExp(s))\n            return nativ.split.apply(this, arguments);\n\n        var str = this + \"\", // Type conversion\n            output = [],\n            lastLastIndex = 0,\n            match, lastLength;\n\n        // Behavior for `limit`: if it's...\n        // - `undefined`: No limit\n        // - `NaN` or zero: Return an empty array\n        // - A positive number: Use `Math.floor(limit)`\n        // - A negative number: No limit\n        // - Other: Type-convert, then use the above rules\n        if (limit === undefined || +limit < 0) {\n            limit = Infinity;\n        } else {\n            limit = Math.floor(+limit);\n            if (!limit)\n                return [];\n        }\n\n        // This is required if not `s.global`, and it avoids needing to set `s.lastIndex` to zero\n        // and restore it to its original value when we're done using the regex\n        s = XRegExp.copyAsGlobal(s);\n\n        while (match = s.exec(str)) { // Run the altered `exec` (required for `lastIndex` fix, etc.)\n            if (s.lastIndex > lastLastIndex) {\n                output.push(str.slice(lastLastIndex, match.index));\n\n                if (match.length > 1 && match.index < str.length)\n                    Array.prototype.push.apply(output, match.slice(1));\n\n                lastLength = match[0].length;\n                lastLastIndex = s.lastIndex;\n\n                if (output.length >= limit)\n                    break;\n            }\n\n            if (s.lastIndex === match.index)\n                s.lastIndex++;\n        }\n\n        if (lastLastIndex === str.length) {\n            if (!nativ.test.call(s, \"\") || lastLength)\n                output.push(\"\");\n        } else {\n            output.push(str.slice(lastLastIndex));\n        }\n\n        return output.length > limit ? output.slice(0, limit) : output;\n    };\n\n\n    //---------------------------------\n    //  Private helper functions\n    //---------------------------------\n\n    // Supporting function for `XRegExp`, `XRegExp.copyAsGlobal`, etc. Returns a copy of a `RegExp`\n    // instance with a fresh `lastIndex` (set to zero), preserving properties required for named\n    // capture. Also allows adding new flags in the process of copying the regex\n    function clone (regex, additionalFlags) {\n        if (!XRegExp.isRegExp(regex))\n            throw TypeError(\"type RegExp expected\");\n        var x = regex._xregexp;\n        regex = XRegExp(regex.source, getNativeFlags(regex) + (additionalFlags || \"\"));\n        if (x) {\n            regex._xregexp = {\n                source: x.source,\n                captureNames: x.captureNames ? x.captureNames.slice(0) : null\n            };\n        }\n        return regex;\n    }\n\n    function getNativeFlags (regex) {\n        return (regex.global     ? \"g\" : \"\") +\n            (regex.ignoreCase ? \"i\" : \"\") +\n            (regex.multiline  ? \"m\" : \"\") +\n            (regex.extended   ? \"x\" : \"\") + // Proposed for ES4; included in AS3\n            (regex.sticky     ? \"y\" : \"\");\n    }\n\n    function runTokens (pattern, index, scope, context) {\n        var i = tokens.length,\n            result, match, t;\n        // Protect against constructing XRegExps within token handler and trigger functions\n        isInsideConstructor = true;\n        // Must reset `isInsideConstructor`, even if a `trigger` or `handler` throws\n        try {\n            while (i--) { // Run in reverse order\n                t = tokens[i];\n                if ((scope & t.scope) && (!t.trigger || t.trigger.call(context))) {\n                    t.pattern.lastIndex = index;\n                    match = t.pattern.exec(pattern); // Running the altered `exec` here allows use of named backreferences, etc.\n                    if (match && match.index === index) {\n                        result = {\n                            output: t.handler.call(context, match, scope),\n                            match: match\n                        };\n                        break;\n                    }\n                }\n            }\n        } catch (err) {\n            throw err;\n        } finally {\n            isInsideConstructor = false;\n        }\n        return result;\n    }\n\n    function indexOf (array, item, from) {\n        if (Array.prototype.indexOf) // Use the native array method if available\n            return array.indexOf(item, from);\n        for (var i = from || 0; i < array.length; i++) {\n            if (array[i] === item)\n                return i;\n        }\n        return -1;\n    }\n\n\n    //---------------------------------\n    //  Built-in tokens\n    //---------------------------------\n\n    // Augment XRegExp's regular expression syntax and flags. Note that when adding tokens, the\n    // third (`scope`) argument defaults to `XRegExp.OUTSIDE_CLASS`\n\n    // Comment pattern: (?# )\n    XRegExp.addToken(\n        /\\(\\?#[^)]*\\)/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        }\n    );\n\n    // Capturing group (match the opening parenthesis only).\n    // Required for support of named capturing groups\n    XRegExp.addToken(\n        /\\((?!\\?)/,\n        function () {\n            this.captureNames.push(null);\n            return \"(\";\n        }\n    );\n\n    // Named capturing group (match the opening delimiter only): (?<name>\n    XRegExp.addToken(\n        /\\(\\?<([$\\w]+)>/,\n        function (match) {\n            this.captureNames.push(match[1]);\n            this.hasNamedCapture = true;\n            return \"(\";\n        }\n    );\n\n    // Named backreference: \\k<name>\n    XRegExp.addToken(\n        /\\\\k<([\\w$]+)>/,\n        function (match) {\n            var index = indexOf(this.captureNames, match[1]);\n            // Keep backreferences separate from subsequent literal numbers. Preserve back-\n            // references to named groups that are undefined at this point as literal strings\n            return index > -1 ?\n                \"\\\\\" + (index + 1) + (isNaN(match.input.charAt(match.index + match[0].length)) ? \"\" : \"(?:)\") :\n                match[0];\n        }\n    );\n\n    // Empty character class: [] or [^]\n    XRegExp.addToken(\n        /\\[\\^?]/,\n        function (match) {\n            // For cross-browser compatibility with ES3, convert [] to \\b\\B and [^] to [\\s\\S].\n            // (?!) should work like \\b\\B, but is unreliable in Firefox\n            return match[0] === \"[]\" ? \"\\\\b\\\\B\" : \"[\\\\s\\\\S]\";\n        }\n    );\n\n    // Mode modifier at the start of the pattern only, with any combination of flags imsx: (?imsx)\n    // Does not support x(?i), (?-i), (?i-m), (?i: ), (?i)(?m), etc.\n    XRegExp.addToken(\n        /^\\(\\?([imsx]+)\\)/,\n        function (match) {\n            this.setFlag(match[1]);\n            return \"\";\n        }\n    );\n\n    // Whitespace and comments, in free-spacing (aka extended) mode only\n    XRegExp.addToken(\n        /(?:\\s+|#.*)+/,\n        function (match) {\n            // Keep tokens separated unless the following token is a quantifier\n            return nativ.test.call(quantifier, match.input.slice(match.index + match[0].length)) ? \"\" : \"(?:)\";\n        },\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"x\");}\n    );\n\n    // Dot, in dotall (aka singleline) mode only\n    XRegExp.addToken(\n        /\\./,\n        function () {return \"[\\\\s\\\\S]\";},\n        XRegExp.OUTSIDE_CLASS,\n        function () {return this.hasFlag(\"s\");}\n    );\n\n\n    //---------------------------------\n    //  Backward compatibility\n    //---------------------------------\n\n    // Uncomment the following block for compatibility with XRegExp 1.0-1.2:\n    /*\n     XRegExp.matchWithinChain = XRegExp.matchChain;\n     RegExp.prototype.addFlags = function (s) {return clone(this, s);};\n     RegExp.prototype.execAll = function (s) {var r = []; XRegExp.iterate(s, this, function (m) {r.push(m);}); return r;};\n     RegExp.prototype.forEachExec = function (s, f, c) {return XRegExp.iterate(s, this, f, c);};\n     RegExp.prototype.validate = function (s) {var r = RegExp(\"^(?:\" + this.source + \")$(?!\\\\s)\", getNativeFlags(this)); if (this.global) this.lastIndex = 0; return s.search(r) === 0;};\n     */\n\n})();\n\n//\n// Begin anonymous function. This is used to contain local scope variables without polutting global scope.\n//\nif (typeof(SyntaxHighlighter) == 'undefined') var SyntaxHighlighter = function() {\n\n// CommonJS\n    if (typeof(require) != 'undefined' && typeof(XRegExp) == 'undefined')\n    {\n        XRegExp = require('XRegExp').XRegExp;\n    }\n\n// Shortcut object which will be assigned to the SyntaxHighlighter variable.\n// This is a shorthand for local reference in order to avoid long namespace\n// references to SyntaxHighlighter.whatever...\n    var sh = {\n        defaults : {\n            /** Additional CSS class names to be added to highlighter elements. */\n            'class-name' : '',\n\n            /** First line number. */\n            'first-line' : 1,\n\n            /**\n             * Pads line numbers. Possible values are:\n             *\n             *   false - don't pad line numbers.\n             *   true  - automaticaly pad numbers with minimum required number of leading zeroes.\n             *   [int] - length up to which pad line numbers.\n             */\n            'pad-line-numbers' : false,\n\n            /** Lines to highlight. */\n            'highlight' : false,\n\n            /** Title to be displayed above the code block. */\n            'title' : null,\n\n            /** Enables or disables smart tabs. */\n            'smart-tabs' : true,\n\n            /** Gets or sets tab size. */\n            'tab-size' : 4,\n\n            /** Enables or disables gutter. */\n            'gutter' : true,\n\n            /** Enables or disables toolbar. */\n            'toolbar' : true,\n\n            /** Enables quick code copy and paste from double click. */\n            'quick-code' : true,\n\n            /** Forces code view to be collapsed. */\n            'collapse' : false,\n\n            /** Enables or disables automatic links. */\n            'auto-links' : false,\n\n            /** Gets or sets light mode. Equavalent to turning off gutter and toolbar. */\n            'light' : false,\n\n            'unindent' : true,\n\n            'html-script' : false\n        },\n\n        config : {\n            space : '&nbsp;',\n\n            /** Enables use of <SCRIPT type=\"syntaxhighlighter\" /> tags. */\n            useScriptTags : true,\n\n            /** Blogger mode flag. */\n            bloggerMode : false,\n\n            stripBrs : false,\n\n            /** Name of the tag that SyntaxHighlighter will automatically look for. */\n            tagName : 'pre',\n\n            strings : {\n                expandSource : 'expand source',\n                help : '?',\n                alert: 'SyntaxHighlighter\\n\\n',\n                noBrush : 'Can\\'t find brush for: ',\n                brushNotHtmlScript : 'Brush wasn\\'t configured for html-script option: ',\n\n                // this is populated by the build script\n                aboutDialog : '@ABOUT@'\n            }\n        },\n\n        /** Internal 'global' variables. */\n        vars : {\n            discoveredBrushes : null,\n            highlighters : {}\n        },\n\n        /** This object is populated by user included external brush files. */\n        brushes : {},\n\n        /** Common regular expressions. */\n        regexLib : {\n            multiLineCComments\t\t\t: /\\/\\*[\\s\\S]*?\\*\\//gm,\n            singleLineCComments\t\t\t: /\\/\\/.*$/gm,\n            singleLinePerlComments\t\t: /#.*$/gm,\n            doubleQuotedString\t\t\t: /\"([^\\\\\"\\n]|\\\\.)*\"/g,\n            singleQuotedString\t\t\t: /'([^\\\\'\\n]|\\\\.)*'/g,\n            multiLineDoubleQuotedString\t: new XRegExp('\"([^\\\\\\\\\"]|\\\\\\\\.)*\"', 'gs'),\n            multiLineSingleQuotedString\t: new XRegExp(\"'([^\\\\\\\\']|\\\\\\\\.)*'\", 'gs'),\n            xmlComments\t\t\t\t\t: /(&lt;|<)!--[\\s\\S]*?--(&gt;|>)/gm,\n            url\t\t\t\t\t\t\t: /\\w+:\\/\\/[\\w-.\\/?%&=:@;#]*/g,\n\n            /** <?= ?> tags. */\n            phpScriptTags \t\t\t\t: { left: /(&lt;|<)\\?(?:=|php)?/g, right: /\\?(&gt;|>)/g, 'eof' : true },\n\n            /** <%= %> tags. */\n            aspScriptTags\t\t\t\t: { left: /(&lt;|<)%=?/g, right: /%(&gt;|>)/g },\n\n            /** <script> tags. */\n            scriptScriptTags\t\t\t: { left: /(&lt;|<)\\s*script.*?(&gt;|>)/gi, right: /(&lt;|<)\\/\\s*script\\s*(&gt;|>)/gi }\n        },\n\n        toolbar: {\n            /**\n             * Generates HTML markup for the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @return {String} Returns HTML markup.\n             */\n            getHtml: function(highlighter)\n            {\n                var html = '<div class=\"toolbar\">',\n                    items = sh.toolbar.items,\n                    list = items.list\n                    ;\n\n                function defaultGetHtml(highlighter, name)\n                {\n                    return sh.toolbar.getButtonHtml(highlighter, name, sh.config.strings[name]);\n                };\n\n                for (var i = 0; i < list.length; i++)\n                    html += (items[list[i]].getHtml || defaultGetHtml)(highlighter, list[i]);\n\n                html += '</div>';\n\n                return html;\n            },\n\n            /**\n             * Generates HTML markup for a regular button in the toolbar.\n             * @param {Highlighter} highlighter Highlighter instance.\n             * @param {String} commandName\t\tCommand name that would be executed.\n             * @param {String} label\t\t\tLabel text to display.\n             * @return {String}\t\t\t\t\tReturns HTML markup.\n             */\n            getButtonHtml: function(highlighter, commandName, label)\n            {\n                return '<span><a href=\"#\" class=\"toolbar_item'\n                    + ' command_' + commandName\n                    + ' ' + commandName\n                    + '\">' + label + '</a></span>'\n                    ;\n            },\n\n            /**\n             * Event handler for a toolbar anchor.\n             */\n            handler: function(e)\n            {\n                var target = e.target,\n                    className = target.className || ''\n                    ;\n\n                function getValue(name)\n                {\n                    var r = new RegExp(name + '_(\\\\w+)'),\n                        match = r.exec(className)\n                        ;\n\n                    return match ? match[1] : null;\n                };\n\n                var highlighter = getHighlighterById(findParentElement(target, '.syntaxhighlighter').id),\n                    commandName = getValue('command')\n                    ;\n\n                // execute the toolbar command\n                if (highlighter && commandName)\n                    sh.toolbar.items[commandName].execute(highlighter);\n\n                // disable default A click behaviour\n                e.preventDefault();\n            },\n\n            /** Collection of toolbar items. */\n            items : {\n                // Ordered lis of items in the toolbar. Can't expect `for (var n in items)` to be consistent.\n                list: ['expandSource', 'help'],\n\n                expandSource: {\n                    getHtml: function(highlighter)\n                    {\n                        if (highlighter.getParam('collapse') != true)\n                            return '';\n\n                        var title = highlighter.getParam('title');\n                        return sh.toolbar.getButtonHtml(highlighter, 'expandSource', title ? title : sh.config.strings.expandSource);\n                    },\n\n                    execute: function(highlighter)\n                    {\n                        var div = getHighlighterDivById(highlighter.id);\n                        removeClass(div, 'collapsed');\n                    }\n                },\n\n                /** Command to display the about dialog window. */\n                help: {\n                    execute: function(highlighter)\n                    {\n                        var wnd = popup('', '_blank', 500, 250, 'scrollbars=0'),\n                            doc = wnd.document\n                            ;\n\n                        doc.write(sh.config.strings.aboutDialog);\n                        doc.close();\n                        wnd.focus();\n                    }\n                }\n            }\n        },\n\n        /**\n         * Finds all elements on the page which should be processes by SyntaxHighlighter.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare returned which qualify.\n         *\n         * @return {Array}\tReturns list of <code>{ target: DOMElement, params: Object }</code> objects.\n         */\n        findElements: function(globalParams, element)\n        {\n            var elements = element ? [element] : toArray(document.getElementsByTagName(sh.config.tagName)),\n                conf = sh.config,\n                result = []\n                ;\n\n            // support for <SCRIPT TYPE=\"syntaxhighlighter\" /> feature\n            if (conf.useScriptTags)\n                elements = elements.concat(getSyntaxHighlighterScriptTags());\n\n            if (elements.length === 0)\n                return result;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var item = {\n                    target: elements[i],\n                    // local params take precedence over globals\n                    params: merge(globalParams, parseParams(elements[i].className))\n                };\n\n                if (item.params['brush'] == null)\n                    continue;\n\n                result.push(item);\n            }\n\n            return result;\n        },\n\n        /**\n         * Shorthand to highlight all elements on the page that are marked as\n         * SyntaxHighlighter source code.\n         *\n         * @param {Object} globalParams\t\tOptional parameters which override element's\n         * \t\t\t\t\t\t\t\t\tparameters. Only used if element is specified.\n         *\n         * @param {Object} element\tOptional element to highlight. If none is\n         * \t\t\t\t\t\t\tprovided, all elements in the current document\n         * \t\t\t\t\t\t\tare highlighted.\n         */\n        highlight: function(globalParams, element)\n        {\n            var elements = this.findElements(globalParams, element),\n                propertyName = 'innerHTML',\n                highlighter = null,\n                conf = sh.config\n                ;\n\n            if (elements.length === 0)\n                return;\n\n            for (var i = 0; i < elements.length; i++)\n            {\n                var element = elements[i],\n                    target = element.target,\n                    params = element.params,\n                    brushName = params.brush,\n                    code\n                    ;\n\n                if (brushName == null)\n                    continue;\n\n                // Instantiate a brush\n                if (params['html-script'] == 'true' || sh.defaults['html-script'] == true)\n                {\n                    highlighter = new sh.HtmlScript(brushName);\n                    brushName = 'htmlscript';\n                }\n                else\n                {\n                    var brush = findBrush(brushName);\n\n                    if (brush)\n                        highlighter = new brush();\n                    else\n                        continue;\n                }\n\n                code = target[propertyName];\n\n                // remove CDATA from <SCRIPT/> tags if it's present\n                if (conf.useScriptTags)\n                    code = stripCData(code);\n\n                // Inject title if the attribute is present\n                if ((target.title || '') != '')\n                    params.title = target.title;\n\n                params['brush'] = brushName;\n                highlighter.init(params);\n                element = highlighter.getDiv(code);\n\n                // carry over ID\n                if ((target.id || '') != '')\n                    element.id = target.id;\n                //by zhanyi 去掉多余的外围div\n                var tmp = element.firstChild.firstChild;\n                tmp.className = element.firstChild.className;\n\n                target.parentNode.replaceChild(tmp, target);\n            }\n        },\n\n        /**\n         * Main entry point for the SyntaxHighlighter.\n         * @param {Object} params Optional params to apply to all highlighted elements.\n         */\n        all: function(params)\n        {\n            attachEvent(\n                window,\n                'load',\n                function() { sh.highlight(params); }\n            );\n        }\n    }; // end of sh\n\n    /**\n     * Checks if target DOM elements has specified CSS class.\n     * @param {DOMElement} target Target DOM element to check.\n     * @param {String} className Name of the CSS class to check for.\n     * @return {Boolean} Returns true if class name is present, false otherwise.\n     */\n    function hasClass(target, className)\n    {\n        return target.className.indexOf(className) != -1;\n    };\n\n    /**\n     * Adds CSS class name to the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className New CSS class to add.\n     */\n    function addClass(target, className)\n    {\n        if (!hasClass(target, className))\n            target.className += ' ' + className;\n    };\n\n    /**\n     * Removes CSS class name from the target DOM element.\n     * @param {DOMElement} target Target DOM element.\n     * @param {String} className CSS class to remove.\n     */\n    function removeClass(target, className)\n    {\n        target.className = target.className.replace(className, '');\n    };\n\n    /**\n     * Converts the source to array object. Mostly used for function arguments and\n     * lists returned by getElementsByTagName() which aren't Array objects.\n     * @param {List} source Source list.\n     * @return {Array} Returns array.\n     */\n    function toArray(source)\n    {\n        var result = [];\n\n        for (var i = 0; i < source.length; i++)\n            result.push(source[i]);\n\n        return result;\n    };\n\n    /**\n     * Splits block of text into lines.\n     * @param {String} block Block of text.\n     * @return {Array} Returns array of lines.\n     */\n    function splitLines(block)\n    {\n        return block.split(/\\r?\\n/);\n    }\n\n    /**\n     * Generates HTML ID for the highlighter.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {String} Returns HTML ID.\n     */\n    function getHighlighterId(id)\n    {\n        var prefix = 'highlighter_';\n        return id.indexOf(prefix) == 0 ? id : prefix + id;\n    };\n\n    /**\n     * Finds Highlighter instance by ID.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Highlighter} Returns instance of the highlighter.\n     */\n    function getHighlighterById(id)\n    {\n        return sh.vars.highlighters[getHighlighterId(id)];\n    };\n\n    /**\n     * Finds highlighter's DIV container.\n     * @param {String} highlighterId Highlighter ID.\n     * @return {Element} Returns highlighter's DIV element.\n     */\n    function getHighlighterDivById(id)\n    {\n        return document.getElementById(getHighlighterId(id));\n    };\n\n    /**\n     * Stores highlighter so that getHighlighterById() can do its thing. Each\n     * highlighter must call this method to preserve itself.\n     * @param {Highilghter} highlighter Highlighter instance.\n     */\n    function storeHighlighter(highlighter)\n    {\n        sh.vars.highlighters[getHighlighterId(highlighter.id)] = highlighter;\n    };\n\n    /**\n     * Looks for a child or parent node which has specified classname.\n     * Equivalent to jQuery's $(container).find(\".className\")\n     * @param {Element} target Target element.\n     * @param {String} search Class name or node name to look for.\n     * @param {Boolean} reverse If set to true, will go up the node tree instead of down.\n     * @return {Element} Returns found child or parent element on null.\n     */\n    function findElement(target, search, reverse /* optional */)\n    {\n        if (target == null)\n            return null;\n\n        var nodes\t\t\t= reverse != true ? target.childNodes : [ target.parentNode ],\n            propertyToFind\t= { '#' : 'id', '.' : 'className' }[search.substr(0, 1)] || 'nodeName',\n            expectedValue,\n            found\n            ;\n\n        expectedValue = propertyToFind != 'nodeName'\n            ? search.substr(1)\n            : search.toUpperCase()\n        ;\n\n        // main return of the found node\n        if ((target[propertyToFind] || '').indexOf(expectedValue) != -1)\n            return target;\n\n        for (var i = 0; nodes && i < nodes.length && found == null; i++)\n            found = findElement(nodes[i], search, reverse);\n\n        return found;\n    };\n\n    /**\n     * Looks for a parent node which has specified classname.\n     * This is an alias to <code>findElement(container, className, true)</code>.\n     * @param {Element} target Target element.\n     * @param {String} className Class name to look for.\n     * @return {Element} Returns found parent element on null.\n     */\n    function findParentElement(target, className)\n    {\n        return findElement(target, className, true);\n    };\n\n    /**\n     * Finds an index of element in the array.\n     * @ignore\n     * @param {Object} searchElement\n     * @param {Number} fromIndex\n     * @return {Number} Returns index of element if found; -1 otherwise.\n     */\n    function indexOf(array, searchElement, fromIndex)\n    {\n        fromIndex = Math.max(fromIndex || 0, 0);\n\n        for (var i = fromIndex; i < array.length; i++)\n            if(array[i] == searchElement)\n                return i;\n\n        return -1;\n    };\n\n    /**\n     * Generates a unique element ID.\n     */\n    function guid(prefix)\n    {\n        return (prefix || '') + Math.round(Math.random() * 1000000).toString();\n    };\n\n    /**\n     * Merges two objects. Values from obj2 override values in obj1.\n     * Function is NOT recursive and works only for one dimensional objects.\n     * @param {Object} obj1 First object.\n     * @param {Object} obj2 Second object.\n     * @return {Object} Returns combination of both objects.\n     */\n    function merge(obj1, obj2)\n    {\n        var result = {}, name;\n\n        for (name in obj1)\n            result[name] = obj1[name];\n\n        for (name in obj2)\n            result[name] = obj2[name];\n\n        return result;\n    };\n\n    /**\n     * Attempts to convert string to boolean.\n     * @param {String} value Input string.\n     * @return {Boolean} Returns true if input was \"true\", false if input was \"false\" and value otherwise.\n     */\n    function toBoolean(value)\n    {\n        var result = { \"true\" : true, \"false\" : false }[value];\n        return result == null ? value : result;\n    };\n\n    /**\n     * Opens up a centered popup window.\n     * @param {String} url\t\tURL to open in the window.\n     * @param {String} name\t\tPopup name.\n     * @param {int} width\t\tPopup width.\n     * @param {int} height\t\tPopup height.\n     * @param {String} options\twindow.open() options.\n     * @return {Window}\t\t\tReturns window instance.\n     */\n    function popup(url, name, width, height, options)\n    {\n        var x = (screen.width - width) / 2,\n            y = (screen.height - height) / 2\n            ;\n\n        options +=\t', left=' + x +\n            ', top=' + y +\n            ', width=' + width +\n            ', height=' + height\n        ;\n        options = options.replace(/^,/, '');\n\n        var win = window.open(url, name, options);\n        win.focus();\n        return win;\n    };\n\n    /**\n     * Adds event handler to the target object.\n     * @param {Object} obj\t\tTarget object.\n     * @param {String} type\t\tName of the event.\n     * @param {Function} func\tHandling function.\n     */\n    function attachEvent(obj, type, func, scope)\n    {\n        function handler(e)\n        {\n            e = e || window.event;\n\n            if (!e.target)\n            {\n                e.target = e.srcElement;\n                e.preventDefault = function()\n                {\n                    this.returnValue = false;\n                };\n            }\n\n            func.call(scope || window, e);\n        };\n\n        if (obj.attachEvent)\n        {\n            obj.attachEvent('on' + type, handler);\n        }\n        else\n        {\n            obj.addEventListener(type, handler, false);\n        }\n    };\n\n    /**\n     * Displays an alert.\n     * @param {String} str String to display.\n     */\n    function alert(str)\n    {\n        window.alert(sh.config.strings.alert + str);\n    };\n\n    /**\n     * Finds a brush by its alias.\n     *\n     * @param {String} alias\t\tBrush alias.\n     * @param {Boolean} showAlert\tSuppresses the alert if false.\n     * @return {Brush}\t\t\t\tReturns bursh constructor if found, null otherwise.\n     */\n    function findBrush(alias, showAlert)\n    {\n        var brushes = sh.vars.discoveredBrushes,\n            result = null\n            ;\n\n        if (brushes == null)\n        {\n            brushes = {};\n\n            // Find all brushes\n            for (var brush in sh.brushes)\n            {\n                var info = sh.brushes[brush],\n                    aliases = info.aliases\n                    ;\n\n                if (aliases == null)\n                    continue;\n\n                // keep the brush name\n                info.brushName = brush.toLowerCase();\n\n                for (var i = 0; i < aliases.length; i++)\n                    brushes[aliases[i]] = brush;\n            }\n\n            sh.vars.discoveredBrushes = brushes;\n        }\n\n        result = sh.brushes[brushes[alias]];\n\n        if (result == null && showAlert)\n            alert(sh.config.strings.noBrush + alias);\n\n        return result;\n    };\n\n    /**\n     * Executes a callback on each line and replaces each line with result from the callback.\n     * @param {Object} str\t\t\tInput string.\n     * @param {Object} callback\t\tCallback function taking one string argument and returning a string.\n     */\n    function eachLine(str, callback)\n    {\n        var lines = splitLines(str);\n\n        for (var i = 0; i < lines.length; i++)\n            lines[i] = callback(lines[i], i);\n\n        // include \\r to enable copy-paste on windows (ie8) without getting everything on one line\n        return lines.join('\\r\\n');\n    };\n\n    /**\n     * This is a special trim which only removes first and last empty lines\n     * and doesn't affect valid leading space on the first line.\n     *\n     * @param {String} str   Input string\n     * @return {String}      Returns string without empty first and last lines.\n     */\n    function trimFirstAndLastLines(str)\n    {\n        return str.replace(/^[ ]*[\\n]+|[\\n]*[ ]*$/g, '');\n    };\n\n    /**\n     * Parses key/value pairs into hash object.\n     *\n     * Understands the following formats:\n     * - name: word;\n     * - name: [word, word];\n     * - name: \"string\";\n     * - name: 'string';\n     *\n     * For example:\n     *   name1: value; name2: [value, value]; name3: 'value'\n     *\n     * @param {String} str    Input string.\n     * @return {Object}       Returns deserialized object.\n     */\n    function parseParams(str)\n    {\n        var match,\n            result = {},\n            arrayRegex = new XRegExp(\"^\\\\[(?<values>(.*?))\\\\]$\"),\n            regex = new XRegExp(\n                \"(?<name>[\\\\w-]+)\" +\n                    \"\\\\s*:\\\\s*\" +\n                    \"(?<value>\" +\n                    \"[\\\\w-%#]+|\" +\t\t// word\n                    \"\\\\[.*?\\\\]|\" +\t\t// [] array\n                    '\".*?\"|' +\t\t\t// \"\" string\n                    \"'.*?'\" +\t\t\t// '' string\n                    \")\\\\s*;?\",\n                \"g\"\n            )\n            ;\n\n        while ((match = regex.exec(str)) != null)\n        {\n            var value = match.value\n                    .replace(/^['\"]|['\"]$/g, '') // strip quotes from end of strings\n                ;\n\n            // try to parse array value\n            if (value != null && arrayRegex.test(value))\n            {\n                var m = arrayRegex.exec(value);\n                value = m.values.length > 0 ? m.values.split(/\\s*,\\s*/) : [];\n            }\n\n            result[match.name] = value;\n        }\n\n        return result;\n    };\n\n    /**\n     * Wraps each line of the string into <code/> tag with given style applied to it.\n     *\n     * @param {String} str   Input string.\n     * @param {String} css   Style name to apply to the string.\n     * @return {String}      Returns input string with each line surrounded by <span/> tag.\n     */\n    function wrapLinesWithCode(str, css)\n    {\n        if (str == null || str.length == 0 || str == '\\n')\n            return str;\n\n        str = str.replace(/</g, '&lt;');\n\n        // Replace two or more sequential spaces with &nbsp; leaving last space untouched.\n        str = str.replace(/ {2,}/g, function(m)\n        {\n            var spaces = '';\n\n            for (var i = 0; i < m.length - 1; i++)\n                spaces += sh.config.space;\n\n            return spaces + ' ';\n        });\n\n        // Split each line and apply <span class=\"...\">...</span> to them so that\n        // leading spaces aren't included.\n        if (css != null)\n            str = eachLine(str, function(line)\n            {\n                if (line.length == 0)\n                    return '';\n\n                var spaces = '';\n\n                line = line.replace(/^(&nbsp;| )+/, function(s)\n                {\n                    spaces = s;\n                    return '';\n                });\n\n                if (line.length == 0)\n                    return spaces;\n\n                return spaces + '<code class=\"' + css + '\">' + line + '</code>';\n            });\n\n        return str;\n    };\n\n    /**\n     * Pads number with zeros until it's length is the same as given length.\n     *\n     * @param {Number} number\tNumber to pad.\n     * @param {Number} length\tMax string length with.\n     * @return {String}\t\t\tReturns a string padded with proper amount of '0'.\n     */\n    function padNumber(number, length)\n    {\n        var result = number.toString();\n\n        while (result.length < length)\n            result = '0' + result;\n\n        return result;\n    };\n\n    /**\n     * Replaces tabs with spaces.\n     *\n     * @param {String} code\t\tSource code.\n     * @param {Number} tabSize\tSize of the tab.\n     * @return {String}\t\t\tReturns code with all tabs replaces by spaces.\n     */\n    function processTabs(code, tabSize)\n    {\n        var tab = '';\n\n        for (var i = 0; i < tabSize; i++)\n            tab += ' ';\n\n        return code.replace(/\\t/g, tab);\n    };\n\n    /**\n     * Replaces tabs with smart spaces.\n     *\n     * @param {String} code    Code to fix the tabs in.\n     * @param {Number} tabSize Number of spaces in a column.\n     * @return {String}        Returns code with all tabs replaces with roper amount of spaces.\n     */\n    function processSmartTabs(code, tabSize)\n    {\n        var lines = splitLines(code),\n            tab = '\\t',\n            spaces = ''\n            ;\n\n        // Create a string with 1000 spaces to copy spaces from...\n        // It's assumed that there would be no indentation longer than that.\n        for (var i = 0; i < 50; i++)\n            spaces += '                    '; // 20 spaces * 50\n\n        // This function inserts specified amount of spaces in the string\n        // where a tab is while removing that given tab.\n        function insertSpaces(line, pos, count)\n        {\n            return line.substr(0, pos)\n                + spaces.substr(0, count)\n                + line.substr(pos + 1, line.length) // pos + 1 will get rid of the tab\n                ;\n        };\n\n        // Go through all the lines and do the 'smart tabs' magic.\n        code = eachLine(code, function(line)\n        {\n            if (line.indexOf(tab) == -1)\n                return line;\n\n            var pos = 0;\n\n            while ((pos = line.indexOf(tab)) != -1)\n            {\n                // This is pretty much all there is to the 'smart tabs' logic.\n                // Based on the position within the line and size of a tab,\n                // calculate the amount of spaces we need to insert.\n                var spaces = tabSize - pos % tabSize;\n                line = insertSpaces(line, pos, spaces);\n            }\n\n            return line;\n        });\n\n        return code;\n    };\n\n    /**\n     * Performs various string fixes based on configuration.\n     */\n    function fixInputString(str)\n    {\n        var br = /<br\\s*\\/?>|&lt;br\\s*\\/?&gt;/gi;\n\n        if (sh.config.bloggerMode == true)\n            str = str.replace(br, '\\n');\n\n        if (sh.config.stripBrs == true)\n            str = str.replace(br, '');\n\n        return str;\n    };\n\n    /**\n     * Removes all white space at the begining and end of a string.\n     *\n     * @param {String} str   String to trim.\n     * @return {String}      Returns string without leading and following white space characters.\n     */\n    function trim(str)\n    {\n        return str.replace(/^\\s+|\\s+$/g, '');\n    };\n\n    /**\n     * Unindents a block of text by the lowest common indent amount.\n     * @param {String} str   Text to unindent.\n     * @return {String}      Returns unindented text block.\n     */\n    function unindent(str)\n    {\n        var lines = splitLines(fixInputString(str)),\n            indents = new Array(),\n            regex = /^\\s*/,\n            min = 1000\n            ;\n\n        // go through every line and check for common number of indents\n        for (var i = 0; i < lines.length && min > 0; i++)\n        {\n            var line = lines[i];\n\n            if (trim(line).length == 0)\n                continue;\n\n            var matches = regex.exec(line);\n\n            // In the event that just one line doesn't have leading white space\n            // we can't unindent anything, so bail completely.\n            if (matches == null)\n                return str;\n\n            min = Math.min(matches[0].length, min);\n        }\n\n        // trim minimum common number of white space from the begining of every line\n        if (min > 0)\n            for (var i = 0; i < lines.length; i++)\n                lines[i] = lines[i].substr(min);\n\n        return lines.join('\\n');\n    };\n\n    /**\n     * Callback method for Array.sort() which sorts matches by\n     * index position and then by length.\n     *\n     * @param {Match} m1\tLeft object.\n     * @param {Match} m2    Right object.\n     * @return {Number}     Returns -1, 0 or -1 as a comparison result.\n     */\n    function matchesSortCallback(m1, m2)\n    {\n        // sort matches by index first\n        if(m1.index < m2.index)\n            return -1;\n        else if(m1.index > m2.index)\n            return 1;\n        else\n        {\n            // if index is the same, sort by length\n            if(m1.length < m2.length)\n                return -1;\n            else if(m1.length > m2.length)\n                return 1;\n        }\n\n        return 0;\n    };\n\n    /**\n     * Executes given regular expression on provided code and returns all\n     * matches that are found.\n     *\n     * @param {String} code    Code to execute regular expression on.\n     * @param {Object} regex   Regular expression item info from <code>regexList</code> collection.\n     * @return {Array}         Returns a list of Match objects.\n     */\n    function getMatches(code, regexInfo)\n    {\n        function defaultAdd(match, regexInfo)\n        {\n            return match[0];\n        };\n\n        var index = 0,\n            match = null,\n            matches = [],\n            func = regexInfo.func ? regexInfo.func : defaultAdd\n            ;\n\n        while((match = regexInfo.regex.exec(code)) != null)\n        {\n            var resultMatch = func(match, regexInfo);\n\n            if (typeof(resultMatch) == 'string')\n                resultMatch = [new sh.Match(resultMatch, match.index, regexInfo.css)];\n\n            matches = matches.concat(resultMatch);\n        }\n\n        return matches;\n    };\n\n    /**\n     * Turns all URLs in the code into <a/> tags.\n     * @param {String} code Input code.\n     * @return {String} Returns code with </a> tags.\n     */\n    function processUrls(code)\n    {\n        var gt = /(.*)((&gt;|&lt;).*)/;\n\n        return code.replace(sh.regexLib.url, function(m)\n        {\n            var suffix = '',\n                match = null\n                ;\n\n            // We include &lt; and &gt; in the URL for the common cases like <http://google.com>\n            // The problem is that they get transformed into &lt;http://google.com&gt;\n            // Where as &gt; easily looks like part of the URL string.\n\n            if (match = gt.exec(m))\n            {\n                m = match[1];\n                suffix = match[2];\n            }\n\n            return '<a href=\"' + m + '\">' + m + '</a>' + suffix;\n        });\n    };\n\n    /**\n     * Finds all <SCRIPT TYPE=\"syntaxhighlighter\" /> elementss.\n     * @return {Array} Returns array of all found SyntaxHighlighter tags.\n     */\n    function getSyntaxHighlighterScriptTags()\n    {\n        var tags = document.getElementsByTagName('script'),\n            result = []\n            ;\n\n        for (var i = 0; i < tags.length; i++)\n            if (tags[i].type == 'syntaxhighlighter')\n                result.push(tags[i]);\n\n        return result;\n    };\n\n    /**\n     * Strips <![CDATA[]]> from <SCRIPT /> content because it should be used\n     * there in most cases for XHTML compliance.\n     * @param {String} original\tInput code.\n     * @return {String} Returns code without leading <![CDATA[]]> tags.\n     */\n    function stripCData(original)\n    {\n        var left = '<![CDATA[',\n            right = ']]>',\n        // for some reason IE inserts some leading blanks here\n            copy = trim(original),\n            changed = false,\n            leftLength = left.length,\n            rightLength = right.length\n            ;\n\n        if (copy.indexOf(left) == 0)\n        {\n            copy = copy.substring(leftLength);\n            changed = true;\n        }\n\n        var copyLength = copy.length;\n\n        if (copy.indexOf(right) == copyLength - rightLength)\n        {\n            copy = copy.substring(0, copyLength - rightLength);\n            changed = true;\n        }\n\n        return changed ? copy : original;\n    };\n\n\n    /**\n     * Quick code mouse double click handler.\n     */\n    function quickCodeHandler(e)\n    {\n        var target = e.target,\n            highlighterDiv = findParentElement(target, '.syntaxhighlighter'),\n            container = findParentElement(target, '.container'),\n            textarea = document.createElement('textarea'),\n            highlighter\n            ;\n\n        if (!container || !highlighterDiv || findElement(container, 'textarea'))\n            return;\n\n        highlighter = getHighlighterById(highlighterDiv.id);\n\n        // add source class name\n        addClass(highlighterDiv, 'source');\n\n        // Have to go over each line and grab it's text, can't just do it on the\n        // container because Firefox loses all \\n where as Webkit doesn't.\n        var lines = container.childNodes,\n            code = []\n            ;\n\n        for (var i = 0; i < lines.length; i++)\n            code.push(lines[i].innerText || lines[i].textContent);\n\n        // using \\r instead of \\r or \\r\\n makes this work equally well on IE, FF and Webkit\n        code = code.join('\\r');\n\n        // For Webkit browsers, replace nbsp with a breaking space\n        code = code.replace(/\\u00a0/g, \" \");\n\n        // inject <textarea/> tag\n        textarea.appendChild(document.createTextNode(code));\n        container.appendChild(textarea);\n\n        // preselect all text\n        textarea.focus();\n        textarea.select();\n\n        // set up handler for lost focus\n        attachEvent(textarea, 'blur', function(e)\n        {\n            textarea.parentNode.removeChild(textarea);\n            removeClass(highlighterDiv, 'source');\n        });\n    };\n\n    /**\n     * Match object.\n     */\n    sh.Match = function(value, index, css)\n    {\n        this.value = value;\n        this.index = index;\n        this.length = value.length;\n        this.css = css;\n        this.brushName = null;\n    };\n\n    sh.Match.prototype.toString = function()\n    {\n        return this.value;\n    };\n\n    /**\n     * Simulates HTML code with a scripting language embedded.\n     *\n     * @param {String} scriptBrushName Brush name of the scripting language.\n     */\n    sh.HtmlScript = function(scriptBrushName)\n    {\n        var brushClass = findBrush(scriptBrushName),\n            scriptBrush,\n            xmlBrush = new sh.brushes.Xml(),\n            bracketsRegex = null,\n            ref = this,\n            methodsToExpose = 'getDiv getHtml init'.split(' ')\n            ;\n\n        if (brushClass == null)\n            return;\n\n        scriptBrush = new brushClass();\n\n        for(var i = 0; i < methodsToExpose.length; i++)\n            // make a closure so we don't lose the name after i changes\n            (function() {\n                var name = methodsToExpose[i];\n\n                ref[name] = function()\n                {\n                    return xmlBrush[name].apply(xmlBrush, arguments);\n                };\n            })();\n\n        if (scriptBrush.htmlScript == null)\n        {\n            alert(sh.config.strings.brushNotHtmlScript + scriptBrushName);\n            return;\n        }\n\n        xmlBrush.regexList.push(\n            { regex: scriptBrush.htmlScript.code, func: process }\n        );\n\n        function offsetMatches(matches, offset)\n        {\n            for (var j = 0; j < matches.length; j++)\n                matches[j].index += offset;\n        }\n\n        function process(match, info)\n        {\n            var code = match.code,\n                matches = [],\n                regexList = scriptBrush.regexList,\n                offset = match.index + match.left.length,\n                htmlScript = scriptBrush.htmlScript,\n                result\n                ;\n\n            // add all matches from the code\n            for (var i = 0; i < regexList.length; i++)\n            {\n                result = getMatches(code, regexList[i]);\n                offsetMatches(result, offset);\n                matches = matches.concat(result);\n            }\n\n            // add left script bracket\n            if (htmlScript.left != null && match.left != null)\n            {\n                result = getMatches(match.left, htmlScript.left);\n                offsetMatches(result, match.index);\n                matches = matches.concat(result);\n            }\n\n            // add right script bracket\n            if (htmlScript.right != null && match.right != null)\n            {\n                result = getMatches(match.right, htmlScript.right);\n                offsetMatches(result, match.index + match[0].lastIndexOf(match.right));\n                matches = matches.concat(result);\n            }\n\n            for (var j = 0; j < matches.length; j++)\n                matches[j].brushName = brushClass.brushName;\n\n            return matches;\n        }\n    };\n\n    /**\n     * Main Highlither class.\n     * @constructor\n     */\n    sh.Highlighter = function()\n    {\n        // not putting any code in here because of the prototype inheritance\n    };\n\n    sh.Highlighter.prototype = {\n        /**\n         * Returns value of the parameter passed to the highlighter.\n         * @param {String} name\t\t\t\tName of the parameter.\n         * @param {Object} defaultValue\t\tDefault value.\n         * @return {Object}\t\t\t\t\tReturns found value or default value otherwise.\n         */\n        getParam: function(name, defaultValue)\n        {\n            var result = this.params[name];\n            return toBoolean(result == null ? defaultValue : result);\n        },\n\n        /**\n         * Shortcut to document.createElement().\n         * @param {String} name\t\tName of the element to create (DIV, A, etc).\n         * @return {HTMLElement}\tReturns new HTML element.\n         */\n        create: function(name)\n        {\n            return document.createElement(name);\n        },\n\n        /**\n         * Applies all regular expression to the code and stores all found\n         * matches in the `this.matches` array.\n         * @param {Array} regexList\t\tList of regular expressions.\n         * @param {String} code\t\t\tSource code.\n         * @return {Array}\t\t\t\tReturns list of matches.\n         */\n        findMatches: function(regexList, code)\n        {\n            var result = [];\n\n            if (regexList != null)\n                for (var i = 0; i < regexList.length; i++)\n                    // BUG: length returns len+1 for array if methods added to prototype chain (oising@gmail.com)\n                    if (typeof (regexList[i]) == \"object\")\n                        result = result.concat(getMatches(code, regexList[i]));\n\n            // sort and remove nested the matches\n            return this.removeNestedMatches(result.sort(matchesSortCallback));\n        },\n\n        /**\n         * Checks to see if any of the matches are inside of other matches.\n         * This process would get rid of highligted strings inside comments,\n         * keywords inside strings and so on.\n         */\n        removeNestedMatches: function(matches)\n        {\n            // Optimized by Jose Prado (http://joseprado.com)\n            for (var i = 0; i < matches.length; i++)\n            {\n                if (matches[i] === null)\n                    continue;\n\n                var itemI = matches[i],\n                    itemIEndPos = itemI.index + itemI.length\n                    ;\n\n                for (var j = i + 1; j < matches.length && matches[i] !== null; j++)\n                {\n                    var itemJ = matches[j];\n\n                    if (itemJ === null)\n                        continue;\n                    else if (itemJ.index > itemIEndPos)\n                        break;\n                    else if (itemJ.index == itemI.index && itemJ.length > itemI.length)\n                        matches[i] = null;\n                    else if (itemJ.index >= itemI.index && itemJ.index < itemIEndPos)\n                        matches[j] = null;\n                }\n            }\n\n            return matches;\n        },\n\n        /**\n         * Creates an array containing integer line numbers starting from the 'first-line' param.\n         * @return {Array} Returns array of integers.\n         */\n        figureOutLineNumbers: function(code)\n        {\n            var lines = [],\n                firstLine = parseInt(this.getParam('first-line'))\n                ;\n\n            eachLine(code, function(line, index)\n            {\n                lines.push(index + firstLine);\n            });\n\n            return lines;\n        },\n\n        /**\n         * Determines if specified line number is in the highlighted list.\n         */\n        isLineHighlighted: function(lineNumber)\n        {\n            var list = this.getParam('highlight', []);\n\n            if (typeof(list) != 'object' && list.push == null)\n                list = [ list ];\n\n            return indexOf(list, lineNumber.toString()) != -1;\n        },\n\n        /**\n         * Generates HTML markup for a single line of code while determining alternating line style.\n         * @param {Integer} lineNumber\tLine number.\n         * @param {String} code Line\tHTML markup.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineHtml: function(lineIndex, lineNumber, code)\n        {\n            var classes = [\n                'line',\n                'number' + lineNumber,\n                'index' + lineIndex,\n                'alt' + (lineNumber % 2 == 0 ? 1 : 2).toString()\n            ];\n\n            if (this.isLineHighlighted(lineNumber))\n                classes.push('highlighted');\n\n            if (lineNumber == 0)\n                classes.push('break');\n\n            return '<div class=\"' + classes.join(' ') + '\">' + code + '</div>';\n        },\n\n        /**\n         * Generates HTML markup for line number column.\n         * @param {String} code\t\t\tComplete code HTML markup.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns HTML markup.\n         */\n        getLineNumbersHtml: function(code, lineNumbers)\n        {\n            var html = '',\n                count = splitLines(code).length,\n                firstLine = parseInt(this.getParam('first-line')),\n                pad = this.getParam('pad-line-numbers')\n                ;\n\n            if (pad == true)\n                pad = (firstLine + count - 1).toString().length;\n            else if (isNaN(pad) == true)\n                pad = 0;\n\n            for (var i = 0; i < count; i++)\n            {\n                var lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i,\n                    code = lineNumber == 0 ? sh.config.space : padNumber(lineNumber, pad)\n                    ;\n\n                html += this.getLineHtml(i, lineNumber, code);\n            }\n\n            return html;\n        },\n\n        /**\n         * Splits block of text into individual DIV lines.\n         * @param {String} code\t\t\tCode to highlight.\n         * @param {Array} lineNumbers\tCalculated line numbers.\n         * @return {String}\t\t\t\tReturns highlighted code in HTML form.\n         */\n        getCodeLinesHtml: function(html, lineNumbers)\n        {\n            html = trim(html);\n\n            var lines = splitLines(html),\n                padLength = this.getParam('pad-line-numbers'),\n                firstLine = parseInt(this.getParam('first-line')),\n                html = '',\n                brushName = this.getParam('brush')\n                ;\n\n            for (var i = 0; i < lines.length; i++)\n            {\n                var line = lines[i],\n                    indent = /^(&nbsp;|\\s)+/.exec(line),\n                    spaces = null,\n                    lineNumber = lineNumbers ? lineNumbers[i] : firstLine + i;\n                ;\n\n                if (indent != null)\n                {\n                    spaces = indent[0].toString();\n                    line = line.substr(spaces.length);\n                    spaces = spaces.replace(' ', sh.config.space);\n                }\n\n                line = trim(line);\n\n                if (line.length == 0)\n                    line = sh.config.space;\n\n                html += this.getLineHtml(\n                    i,\n                    lineNumber,\n                    (spaces != null ? '<code class=\"' + brushName + ' spaces\">' + spaces + '</code>' : '') + line\n                );\n            }\n\n            return html;\n        },\n\n        /**\n         * Returns HTML for the table title or empty string if title is null.\n         */\n        getTitleHtml: function(title)\n        {\n            return title ? '<caption>' + title + '</caption>' : '';\n        },\n\n        /**\n         * Finds all matches in the source code.\n         * @param {String} code\t\tSource code to process matches in.\n         * @param {Array} matches\tDiscovered regex matches.\n         * @return {String} Returns formatted HTML with processed mathes.\n         */\n        getMatchesHtml: function(code, matches)\n        {\n            var pos = 0,\n                result = '',\n                brushName = this.getParam('brush', '')\n                ;\n\n            function getBrushNameCss(match)\n            {\n                var result = match ? (match.brushName || brushName) : brushName;\n                return result ? result + ' ' : '';\n            };\n\n            // Finally, go through the final list of matches and pull the all\n            // together adding everything in between that isn't a match.\n            for (var i = 0; i < matches.length; i++)\n            {\n                var match = matches[i],\n                    matchBrushName\n                    ;\n\n                if (match === null || match.length === 0)\n                    continue;\n\n                matchBrushName = getBrushNameCss(match);\n\n                result += wrapLinesWithCode(code.substr(pos, match.index - pos), matchBrushName + 'plain')\n                    + wrapLinesWithCode(match.value, matchBrushName + match.css)\n                ;\n\n                pos = match.index + match.length + (match.offset || 0);\n            }\n\n            // don't forget to add whatever's remaining in the string\n            result += wrapLinesWithCode(code.substr(pos), getBrushNameCss() + 'plain');\n\n            return result;\n        },\n\n        /**\n         * Generates HTML markup for the whole syntax highlighter.\n         * @param {String} code Source code.\n         * @return {String} Returns HTML markup.\n         */\n        getHtml: function(code)\n        {\n            var html = '',\n                classes = [ 'syntaxhighlighter' ],\n                tabSize,\n                matches,\n                lineNumbers\n                ;\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n\n            className = 'syntaxhighlighter';\n\n            if (this.getParam('collapse') == true)\n                classes.push('collapsed');\n\n            if ((gutter = this.getParam('gutter')) == false)\n                classes.push('nogutter');\n\n            // add custom user style name\n            classes.push(this.getParam('class-name'));\n\n            // add brush alias to the class name for custom CSS\n            classes.push(this.getParam('brush'));\n\n            code = trimFirstAndLastLines(code)\n                .replace(/\\r/g, ' ') // IE lets these buggers through\n            ;\n\n            tabSize = this.getParam('tab-size');\n\n            // replace tabs with spaces\n            code = this.getParam('smart-tabs') == true\n                ? processSmartTabs(code, tabSize)\n                : processTabs(code, tabSize)\n            ;\n\n            // unindent code by the common indentation\n            if (this.getParam('unindent'))\n                code = unindent(code);\n\n            if (gutter)\n                lineNumbers = this.figureOutLineNumbers(code);\n\n            // find matches in the code using brushes regex list\n            matches = this.findMatches(this.regexList, code);\n            // processes found matches into the html\n            html = this.getMatchesHtml(code, matches);\n            // finally, split all lines so that they wrap well\n            html = this.getCodeLinesHtml(html, lineNumbers);\n\n            // finally, process the links\n            if (this.getParam('auto-links'))\n                html = processUrls(html);\n\n            if (typeof(navigator) != 'undefined' && navigator.userAgent && navigator.userAgent.match(/MSIE/))\n                classes.push('ie');\n\n            html =\n                '<div id=\"' + getHighlighterId(this.id) + '\" class=\"' + classes.join(' ') + '\">'\n                    + (this.getParam('toolbar') ? sh.toolbar.getHtml(this) : '')\n                    + '<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">'\n                    + this.getTitleHtml(this.getParam('title'))\n                    + '<tbody>'\n                    + '<tr>'\n                    + (gutter ? '<td class=\"gutter\">' + this.getLineNumbersHtml(code) + '</td>' : '')\n                    + '<td class=\"code\">'\n                    + '<div class=\"container\">'\n                    + html\n                    + '</div>'\n                    + '</td>'\n                    + '</tr>'\n                    + '</tbody>'\n                    + '</table>'\n                    + '</div>'\n            ;\n\n            return html;\n        },\n\n        /**\n         * Highlights the code and returns complete HTML.\n         * @param {String} code     Code to highlight.\n         * @return {Element}        Returns container DIV element with all markup.\n         */\n        getDiv: function(code)\n        {\n            if (code === null)\n                code = '';\n\n            this.code = code;\n\n            var div = this.create('div');\n\n            // create main HTML\n            div.innerHTML = this.getHtml(code);\n\n            // set up click handlers\n            if (this.getParam('toolbar'))\n                attachEvent(findElement(div, '.toolbar'), 'click', sh.toolbar.handler);\n\n            if (this.getParam('quick-code'))\n                attachEvent(findElement(div, '.code'), 'dblclick', quickCodeHandler);\n\n            return div;\n        },\n\n        /**\n         * Initializes the highlighter/brush.\n         *\n         * Constructor isn't used for initialization so that nothing executes during necessary\n         * `new SyntaxHighlighter.Highlighter()` call when setting up brush inheritence.\n         *\n         * @param {Hash} params Highlighter parameters.\n         */\n        init: function(params)\n        {\n            this.id = guid();\n\n            // register this instance in the highlighters list\n            storeHighlighter(this);\n\n            // local params take precedence over defaults\n            this.params = merge(sh.defaults, params || {})\n\n            // process light mode\n            if (this.getParam('light') == true)\n                this.params.toolbar = this.params.gutter = false;\n        },\n\n        /**\n         * Converts space separated list of keywords into a regular expression string.\n         * @param {String} str    Space separated keywords.\n         * @return {String}       Returns regular expression string.\n         */\n        getKeywords: function(str)\n        {\n            str = str\n                .replace(/^\\s+|\\s+$/g, '')\n                .replace(/\\s+/g, '|')\n            ;\n\n            return '\\\\b(?:' + str + ')\\\\b';\n        },\n\n        /**\n         * Makes a brush compatible with the `html-script` functionality.\n         * @param {Object} regexGroup Object containing `left` and `right` regular expressions.\n         */\n        forHtmlScript: function(regexGroup)\n        {\n            var regex = { 'end' : regexGroup.right.source };\n\n            if(regexGroup.eof)\n                regex.end = \"(?:(?:\" + regex.end + \")|$)\";\n\n            this.htmlScript = {\n                left : { regex: regexGroup.left, css: 'script' },\n                right : { regex: regexGroup.right, css: 'script' },\n                code : new XRegExp(\n                    \"(?<left>\" + regexGroup.left.source + \")\" +\n                        \"(?<code>.*?)\" +\n                        \"(?<right>\" + regex.end + \")\",\n                    \"sgi\"\n                )\n            };\n        }\n    }; // end of Highlighter\n\n    return sh;\n}(); // end of anonymous function\n\n// CommonJS\ntypeof(exports) != 'undefined' ? exports.SyntaxHighlighter = SyntaxHighlighter : null;\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // Created by Peter Atoria @ http://iAtoria.com\n\n        var inits \t =  'class interface function package';\n\n        var keywords =\t'-Infinity ...rest Array as AS3 Boolean break case catch const continue Date decodeURI ' +\n                'decodeURIComponent default delete do dynamic each else encodeURI encodeURIComponent escape ' +\n                'extends false final finally flash_proxy for get if implements import in include Infinity ' +\n                'instanceof int internal is isFinite isNaN isXMLName label namespace NaN native new null ' +\n                'Null Number Object object_proxy override parseFloat parseInt private protected public ' +\n                'return set static String super switch this throw true try typeof uint undefined unescape ' +\n                'use void while with'\n            ;\n\n        this.regexList = [\n            { regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n            { regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t// multiline comments\n            { regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n            { regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n            { regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n            { regex: new RegExp(this.getKeywords(inits), 'gm'),\t\t\tcss: 'color3' },\t\t// initializations\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n            { regex: new RegExp('var', 'gm'),\t\t\t\t\t\t\tcss: 'variable' },\t\t// variable\n            { regex: new RegExp('trace', 'gm'),\t\t\t\t\t\t\tcss: 'color1' }\t\t\t// trace\n        ];\n\n        this.forHtmlScript(SyntaxHighlighter.regexLib.scriptScriptTags);\n    };\n\n    Brush.prototype\t= new SyntaxHighlighter.Highlighter();\n    Brush.aliases\t= ['actionscript3', 'as3'];\n\n    SyntaxHighlighter.brushes.AS3 = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n    // CommonJS\n    SyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n    function Brush()\n    {\n        // AppleScript brush by David Chambers\n        // http://davidchambersdesign.com/\n        var keywords   = 'after before beginning continue copy each end every from return get global in local named of set some that the then times to where whose with without';\n        var ordinals   = 'first second third fourth fifth sixth seventh eighth ninth tenth last front back middle';\n        var specials   = 'activate add alias AppleScript ask attachment boolean class constant delete duplicate empty exists false id integer list make message modal modified new no paragraph pi properties quit real record remove rest result reveal reverse run running save string true word yes';\n\n        this.regexList = [\n\n            { regex: /(--|#).*$/gm,\n                css: 'comments' },\n\n            { regex: /\\(\\*(?:[\\s\\S]*?\\(\\*[\\s\\S]*?\\*\\))*[\\s\\S]*?\\*\\)/gm, // support nested comments\n                css: 'comments' },\n\n            { regex: /\"[\\s\\S]*?\"/gm,\n                css: 'string' },\n\n            { regex: /(?:,|:|¬|'s\\b|\\(|\\)|\\{|\\}|«|\\b\\w*»)/g,\n                css: 'color1' },\n\n            { regex: /(-)?(\\d)+(\\.(\\d)?)?(E\\+(\\d)+)?/g, // numbers\n                css: 'color1' },\n\n            { regex: /(?:&(amp;|gt;|lt;)?|=|� |>|<|≥|>=|≤|<=|\\*|\\+|-|\\/|÷|\\^)/g,\n                css: 'color2' },\n\n            { regex: /\\b(?:and|as|div|mod|not|or|return(?!\\s&)(ing)?|equals|(is(n't| not)? )?equal( to)?|does(n't| not) equal|(is(n't| not)? )?(greater|less) than( or equal( to)?)?|(comes|does(n't| not) come) (after|before)|is(n't| not)?( in)? (back|front) of|is(n't| not)? behind|is(n't| not)?( (in|contained by))?|does(n't| not) contain|contain(s)?|(start|begin|end)(s)? with|((but|end) )?(consider|ignor)ing|prop(erty)?|(a )?ref(erence)?( to)?|repeat (until|while|with)|((end|exit) )?repeat|((else|end) )?if|else|(end )?(script|tell|try)|(on )?error|(put )?into|(of )?(it|me)|its|my|with (timeout( of)?|transaction)|end (timeout|transaction))\\b/g,\n                css: 'keyword' },\n\n            { regex: /\\b\\d+(st|nd|rd|th)\\b/g, // ordinals\n                css: 'keyword' },\n\n            { regex: /\\b(?:about|above|against|around|at|below|beneath|beside|between|by|(apart|aside) from|(instead|out) of|into|on(to)?|over|since|thr(ough|u)|under)\\b/g,\n                css: 'color3' },\n\n            { regex: /\\b(?:adding folder items to|after receiving|choose( ((remote )?application|color|folder|from list|URL))?|clipboard info|set the clipboard to|(the )?clipboard|entire contents|display(ing| (alert|dialog|mode))?|document( (edited|file|nib name))?|file( (name|type))?|(info )?for|giving up after|(name )?extension|quoted form|return(ed)?|second(?! item)(s)?|list (disks|folder)|text item(s| delimiters)?|(Unicode )?text|(disk )?item(s)?|((current|list) )?view|((container|key) )?window|with (data|icon( (caution|note|stop))?|parameter(s)?|prompt|properties|seed|title)|case|diacriticals|hyphens|numeric strings|punctuation|white space|folder creation|application(s( folder)?| (processes|scripts position|support))?|((desktop )?(pictures )?|(documents|downloads|favorites|home|keychain|library|movies|music|public|scripts|sites|system|users|utilities|workflows) )folder|desktop|Folder Action scripts|font(s| panel)?|help|internet plugins|modem scripts|(system )?preferences|printer descriptions|scripting (additions|components)|shared (documents|libraries)|startup (disk|items)|temporary items|trash|on server|in AppleTalk zone|((as|long|short) )?user name|user (ID|locale)|(with )?password|in (bundle( with identifier)?|directory)|(close|open for) access|read|write( permission)?|(g|s)et eof|using( delimiters)?|starting at|default (answer|button|color|country code|entr(y|ies)|identifiers|items|name|location|script editor)|hidden( answer)?|open(ed| (location|untitled))?|error (handling|reporting)|(do( shell)?|load|run|store) script|administrator privileges|altering line endings|get volume settings|(alert|boot|input|mount|output|set) volume|output muted|(fax|random )?number|round(ing)?|up|down|toward zero|to nearest|as taught in school|system (attribute|info)|((AppleScript( Studio)?|system) )?version|(home )?directory|(IPv4|primary Ethernet) address|CPU (type|speed)|physical memory|time (stamp|to GMT)|replacing|ASCII (character|number)|localized string|from table|offset|summarize|beep|delay|say|(empty|multiple) selections allowed|(of|preferred) type|invisibles|showing( package contents)?|editable URL|(File|FTP|News|Media|Web) [Ss]ervers|Telnet hosts|Directory services|Remote applications|waiting until completion|saving( (in|to))?|path (for|to( (((current|frontmost) )?application|resource))?)|POSIX (file|path)|(background|RGB) color|(OK|cancel) button name|cancel button|button(s)?|cubic ((centi)?met(re|er)s|yards|feet|inches)|square ((kilo)?met(re|er)s|miles|yards|feet)|(centi|kilo)?met(re|er)s|miles|yards|feet|inches|lit(re|er)s|gallons|quarts|(kilo)?grams|ounces|pounds|degrees (Celsius|Fahrenheit|Kelvin)|print( (dialog|settings))?|clos(e(able)?|ing)|(de)?miniaturized|miniaturizable|zoom(ed|able)|attribute run|action (method|property|title)|phone|email|((start|end)ing|home) page|((birth|creation|current|custom|modification) )?date|((((phonetic )?(first|last|middle))|computer|host|maiden|related) |nick)?name|aim|icq|jabber|msn|yahoo|address(es)?|save addressbook|should enable action|city|country( code)?|formatte(r|d address)|(palette )?label|state|street|zip|AIM [Hh]andle(s)?|my card|select(ion| all)?|unsaved|(alpha )?value|entr(y|ies)|group|(ICQ|Jabber|MSN) handle|person|people|company|department|icon image|job title|note|organization|suffix|vcard|url|copies|collating|pages (across|down)|request print time|target( printer)?|((GUI Scripting|Script menu) )?enabled|show Computer scripts|(de)?activated|awake from nib|became (key|main)|call method|of (class|object)|center|clicked toolbar item|closed|for document|exposed|(can )?hide|idle|keyboard (down|up)|event( (number|type))?|launch(ed)?|load (image|movie|nib|sound)|owner|log|mouse (down|dragged|entered|exited|moved|up)|move|column|localization|resource|script|register|drag (info|types)|resigned (active|key|main)|resiz(e(d)?|able)|right mouse (down|dragged|up)|scroll wheel|(at )?index|should (close|open( untitled)?|quit( after last window closed)?|zoom)|((proposed|screen) )?bounds|show(n)?|behind|in front of|size (mode|to fit)|update(d| toolbar item)?|was (hidden|miniaturized)|will (become active|close|finish launching|hide|miniaturize|move|open|quit|(resign )?active|((maximum|minimum|proposed) )?size|show|zoom)|bundle|data source|movie|pasteboard|sound|tool(bar| tip)|(color|open|save) panel|coordinate system|frontmost|main( (bundle|menu|window))?|((services|(excluded from )?windows) )?menu|((executable|frameworks|resource|scripts|shared (frameworks|support)) )?path|(selected item )?identifier|data|content(s| view)?|character(s)?|click count|(command|control|option|shift) key down|context|delta (x|y|z)|key( code)?|location|pressure|unmodified characters|types|(first )?responder|playing|(allowed|selectable) identifiers|allows customization|(auto saves )?configuration|visible|image( name)?|menu form representation|tag|user(-| )defaults|associated file name|(auto|needs) display|current field editor|floating|has (resize indicator|shadow)|hides when deactivated|level|minimized (image|title)|opaque|position|release when closed|sheet|title(d)?)\\b/g,\n                css: 'color3' },\n\n            { regex: new RegExp(this.getKeywords(specials), 'gm'), css: 'color3' },\n            { regex: new RegExp(this.getKeywords(keywords), 'gm'), css: 'keyword' },\n            { regex: new RegExp(this.getKeywords(ordinals), 'gm'), css: 'keyword' }\n        ];\n    };\n\n    Brush.prototype = new SyntaxHighlighter.Highlighter();\n    Brush.aliases = ['applescript'];\n\n    SyntaxHighlighter.brushes.AppleScript = Brush;\n\n    // CommonJS\n    typeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'if fi then elif else for do done until while break continue case esac function return in eq ne ge le';\n\t\tvar commands =  'alias apropos awk basename bash bc bg builtin bzip2 cal cat cd cfdisk chgrp chmod chown chroot' +\n\t\t\t\t\t\t'cksum clear cmp comm command cp cron crontab csplit cut date dc dd ddrescue declare df ' +\n\t\t\t\t\t\t'diff diff3 dig dir dircolors dirname dirs du echo egrep eject enable env ethtool eval ' +\n\t\t\t\t\t\t'exec exit expand export expr false fdformat fdisk fg fgrep file find fmt fold format ' +\n\t\t\t\t\t\t'free fsck ftp gawk getopts grep groups gzip hash head history hostname id ifconfig ' +\n\t\t\t\t\t\t'import install join kill less let ln local locate logname logout look lpc lpr lprint ' +\n\t\t\t\t\t\t'lprintd lprintq lprm ls lsof make man mkdir mkfifo mkisofs mknod more mount mtools ' +\n\t\t\t\t\t\t'mv netstat nice nl nohup nslookup open op passwd paste pathchk ping popd pr printcap ' +\n\t\t\t\t\t\t'printenv printf ps pushd pwd quota quotacheck quotactl ram rcp read readonly renice ' +\n\t\t\t\t\t\t'remsync rm rmdir rsync screen scp sdiff sed select seq set sftp shift shopt shutdown ' +\n\t\t\t\t\t\t'sleep sort source split ssh strace su sudo sum symlink sync tail tar tee test time ' +\n\t\t\t\t\t\t'times touch top traceroute trap tr true tsort tty type ulimit umask umount unalias ' +\n\t\t\t\t\t\t'uname unexpand uniq units unset unshar useradd usermod users uuencode uudecode v vdir ' +\n\t\t\t\t\t\t'vi watch wc whereis which who whoami Wget xargs yes'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /^#!.*$/gm,\t\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor bold' },\n\t\t\t{ regex: /\\/[\\w-\\/]+/gm,\t\t\t\t\t\t\t\t\t\tcss: 'plain' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(commands), 'gm'),\t\t\tcss: 'functions' }\t\t// commands\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['bash', 'shell', 'sh'];\n\n\tSyntaxHighlighter.brushes.Bash = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jen\n\t\t// http://www.jensbits.com/2009/05/14/coldfusion-brush-for-syntaxhighlighter-plus\n\t\n\t\tvar funcs\t=\t'Abs ACos AddSOAPRequestHeader AddSOAPResponseHeader AjaxLink AjaxOnLoad ArrayAppend ArrayAvg ArrayClear ArrayDeleteAt ' + \n\t\t\t\t\t\t'ArrayInsertAt ArrayIsDefined ArrayIsEmpty ArrayLen ArrayMax ArrayMin ArraySet ArraySort ArraySum ArraySwap ArrayToList ' + \n\t\t\t\t\t\t'Asc ASin Atn BinaryDecode BinaryEncode BitAnd BitMaskClear BitMaskRead BitMaskSet BitNot BitOr BitSHLN BitSHRN BitXor ' + \n\t\t\t\t\t\t'Ceiling CharsetDecode CharsetEncode Chr CJustify Compare CompareNoCase Cos CreateDate CreateDateTime CreateObject ' + \n\t\t\t\t\t\t'CreateODBCDate CreateODBCDateTime CreateODBCTime CreateTime CreateTimeSpan CreateUUID DateAdd DateCompare DateConvert ' + \n\t\t\t\t\t\t'DateDiff DateFormat DatePart Day DayOfWeek DayOfWeekAsString DayOfYear DaysInMonth DaysInYear DE DecimalFormat DecrementValue ' + \n\t\t\t\t\t\t'Decrypt DecryptBinary DeleteClientVariable DeserializeJSON DirectoryExists DollarFormat DotNetToCFType Duplicate Encrypt ' + \n\t\t\t\t\t\t'EncryptBinary Evaluate Exp ExpandPath FileClose FileCopy FileDelete FileExists FileIsEOF FileMove FileOpen FileRead ' + \n\t\t\t\t\t\t'FileReadBinary FileReadLine FileSetAccessMode FileSetAttribute FileSetLastModified FileWrite Find FindNoCase FindOneOf ' + \n\t\t\t\t\t\t'FirstDayOfMonth Fix FormatBaseN GenerateSecretKey GetAuthUser GetBaseTagData GetBaseTagList GetBaseTemplatePath ' + \n\t\t\t\t\t\t'GetClientVariablesList GetComponentMetaData GetContextRoot GetCurrentTemplatePath GetDirectoryFromPath GetEncoding ' + \n\t\t\t\t\t\t'GetException GetFileFromPath GetFileInfo GetFunctionList GetGatewayHelper GetHttpRequestData GetHttpTimeString ' + \n\t\t\t\t\t\t'GetK2ServerDocCount GetK2ServerDocCountLimit GetLocale GetLocaleDisplayName GetLocalHostIP GetMetaData GetMetricData ' + \n\t\t\t\t\t\t'GetPageContext GetPrinterInfo GetProfileSections GetProfileString GetReadableImageFormats GetSOAPRequest GetSOAPRequestHeader ' + \n\t\t\t\t\t\t'GetSOAPResponse GetSOAPResponseHeader GetTempDirectory GetTempFile GetTemplatePath GetTickCount GetTimeZoneInfo GetToken ' + \n\t\t\t\t\t\t'GetUserRoles GetWriteableImageFormats Hash Hour HTMLCodeFormat HTMLEditFormat IIf ImageAddBorder ImageBlur ImageClearRect ' + \n\t\t\t\t\t\t'ImageCopy ImageCrop ImageDrawArc ImageDrawBeveledRect ImageDrawCubicCurve ImageDrawLine ImageDrawLines ImageDrawOval ' + \n\t\t\t\t\t\t'ImageDrawPoint ImageDrawQuadraticCurve ImageDrawRect ImageDrawRoundRect ImageDrawText ImageFlip ImageGetBlob ImageGetBufferedImage ' + \n\t\t\t\t\t\t'ImageGetEXIFTag ImageGetHeight ImageGetIPTCTag ImageGetWidth ImageGrayscale ImageInfo ImageNegative ImageNew ImageOverlay ImagePaste ' + \n\t\t\t\t\t\t'ImageRead ImageReadBase64 ImageResize ImageRotate ImageRotateDrawingAxis ImageScaleToFit ImageSetAntialiasing ImageSetBackgroundColor ' + \n\t\t\t\t\t\t'ImageSetDrawingColor ImageSetDrawingStroke ImageSetDrawingTransparency ImageSharpen ImageShear ImageShearDrawingAxis ImageTranslate ' + \n\t\t\t\t\t\t'ImageTranslateDrawingAxis ImageWrite ImageWriteBase64 ImageXORDrawingMode IncrementValue InputBaseN Insert Int IsArray IsBinary ' + \n\t\t\t\t\t\t'IsBoolean IsCustomFunction IsDate IsDDX IsDebugMode IsDefined IsImage IsImageFile IsInstanceOf IsJSON IsLeapYear IsLocalHost ' + \n\t\t\t\t\t\t'IsNumeric IsNumericDate IsObject IsPDFFile IsPDFObject IsQuery IsSimpleValue IsSOAPRequest IsStruct IsUserInAnyRole IsUserInRole ' + \n\t\t\t\t\t\t'IsUserLoggedIn IsValid IsWDDX IsXML IsXmlAttribute IsXmlDoc IsXmlElem IsXmlNode IsXmlRoot JavaCast JSStringFormat LCase Left Len ' + \n\t\t\t\t\t\t'ListAppend ListChangeDelims ListContains ListContainsNoCase ListDeleteAt ListFind ListFindNoCase ListFirst ListGetAt ListInsertAt ' + \n\t\t\t\t\t\t'ListLast ListLen ListPrepend ListQualify ListRest ListSetAt ListSort ListToArray ListValueCount ListValueCountNoCase LJustify Log ' + \n\t\t\t\t\t\t'Log10 LSCurrencyFormat LSDateFormat LSEuroCurrencyFormat LSIsCurrency LSIsDate LSIsNumeric LSNumberFormat LSParseCurrency LSParseDateTime ' + \n\t\t\t\t\t\t'LSParseEuroCurrency LSParseNumber LSTimeFormat LTrim Max Mid Min Minute Month MonthAsString Now NumberFormat ParagraphFormat ParseDateTime ' + \n\t\t\t\t\t\t'Pi PrecisionEvaluate PreserveSingleQuotes Quarter QueryAddColumn QueryAddRow QueryConvertForGrid QueryNew QuerySetCell QuotedValueList Rand ' + \n\t\t\t\t\t\t'Randomize RandRange REFind REFindNoCase ReleaseComObject REMatch REMatchNoCase RemoveChars RepeatString Replace ReplaceList ReplaceNoCase ' + \n\t\t\t\t\t\t'REReplace REReplaceNoCase Reverse Right RJustify Round RTrim Second SendGatewayMessage SerializeJSON SetEncoding SetLocale SetProfileString ' + \n\t\t\t\t\t\t'SetVariable Sgn Sin Sleep SpanExcluding SpanIncluding Sqr StripCR StructAppend StructClear StructCopy StructCount StructDelete StructFind ' + \n\t\t\t\t\t\t'StructFindKey StructFindValue StructGet StructInsert StructIsEmpty StructKeyArray StructKeyExists StructKeyList StructKeyList StructNew ' + \n\t\t\t\t\t\t'StructSort StructUpdate Tan TimeFormat ToBase64 ToBinary ToScript ToString Trim UCase URLDecode URLEncodedFormat URLSessionFormat Val ' + \n\t\t\t\t\t\t'ValueList VerifyClient Week Wrap Wrap WriteOutput XmlChildPos XmlElemNew XmlFormat XmlGetNodeType XmlNew XmlParse XmlSearch XmlTransform ' + \n\t\t\t\t\t\t'XmlValidate Year YesNoFormat';\n\n\t\tvar keywords =\t'cfabort cfajaximport cfajaxproxy cfapplet cfapplication cfargument cfassociate cfbreak cfcache cfcalendar ' + \n\t\t\t\t\t\t'cfcase cfcatch cfchart cfchartdata cfchartseries cfcol cfcollection cfcomponent cfcontent cfcookie cfdbinfo ' + \n\t\t\t\t\t\t'cfdefaultcase cfdirectory cfdiv cfdocument cfdocumentitem cfdocumentsection cfdump cfelse cfelseif cferror ' + \n\t\t\t\t\t\t'cfexchangecalendar cfexchangeconnection cfexchangecontact cfexchangefilter cfexchangemail cfexchangetask ' + \n\t\t\t\t\t\t'cfexecute cfexit cffeed cffile cfflush cfform cfformgroup cfformitem cfftp cffunction cfgrid cfgridcolumn ' + \n\t\t\t\t\t\t'cfgridrow cfgridupdate cfheader cfhtmlhead cfhttp cfhttpparam cfif cfimage cfimport cfinclude cfindex ' + \n\t\t\t\t\t\t'cfinput cfinsert cfinterface cfinvoke cfinvokeargument cflayout cflayoutarea cfldap cflocation cflock cflog ' + \n\t\t\t\t\t\t'cflogin cfloginuser cflogout cfloop cfmail cfmailparam cfmailpart cfmenu cfmenuitem cfmodule cfNTauthenticate ' + \n\t\t\t\t\t\t'cfobject cfobjectcache cfoutput cfparam cfpdf cfpdfform cfpdfformparam cfpdfparam cfpdfsubform cfpod cfpop ' + \n\t\t\t\t\t\t'cfpresentation cfpresentationslide cfpresenter cfprint cfprocessingdirective cfprocparam cfprocresult ' + \n\t\t\t\t\t\t'cfproperty cfquery cfqueryparam cfregistry cfreport cfreportparam cfrethrow cfreturn cfsavecontent cfschedule ' + \n\t\t\t\t\t\t'cfscript cfsearch cfselect cfset cfsetting cfsilent cfslider cfsprydataset cfstoredproc cfswitch cftable ' + \n\t\t\t\t\t\t'cftextarea cfthread cfthrow cftimer cftooltip cftrace cftransaction cftree cftreeitem cftry cfupdate cfwddx ' + \n\t\t\t\t\t\t'cfwindow cfxml cfzip cfzipparam';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('--(.*)$', 'gm'),\t\t\t\t\t\tcss: 'comments' },  // one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\tcss: 'comments' },    // single quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },    // double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },    // single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' }, // functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\tcss: 'color1' },    // operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }    // keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['coldfusion','cf'];\n\t\n\tSyntaxHighlighter.brushes.ColdFusion = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Copyright 2006 Shin, YoungJin\n\t\n\t\tvar datatypes =\t'ATOM BOOL BOOLEAN BYTE CHAR COLORREF DWORD DWORDLONG DWORD_PTR ' +\n\t\t\t\t\t\t'DWORD32 DWORD64 FLOAT HACCEL HALF_PTR HANDLE HBITMAP HBRUSH ' +\n\t\t\t\t\t\t'HCOLORSPACE HCONV HCONVLIST HCURSOR HDC HDDEDATA HDESK HDROP HDWP ' +\n\t\t\t\t\t\t'HENHMETAFILE HFILE HFONT HGDIOBJ HGLOBAL HHOOK HICON HINSTANCE HKEY ' +\n\t\t\t\t\t\t'HKL HLOCAL HMENU HMETAFILE HMODULE HMONITOR HPALETTE HPEN HRESULT ' +\n\t\t\t\t\t\t'HRGN HRSRC HSZ HWINSTA HWND INT INT_PTR INT32 INT64 LANGID LCID LCTYPE ' +\n\t\t\t\t\t\t'LGRPID LONG LONGLONG LONG_PTR LONG32 LONG64 LPARAM LPBOOL LPBYTE LPCOLORREF ' +\n\t\t\t\t\t\t'LPCSTR LPCTSTR LPCVOID LPCWSTR LPDWORD LPHANDLE LPINT LPLONG LPSTR LPTSTR ' +\n\t\t\t\t\t\t'LPVOID LPWORD LPWSTR LRESULT PBOOL PBOOLEAN PBYTE PCHAR PCSTR PCTSTR PCWSTR ' +\n\t\t\t\t\t\t'PDWORDLONG PDWORD_PTR PDWORD32 PDWORD64 PFLOAT PHALF_PTR PHANDLE PHKEY PINT ' +\n\t\t\t\t\t\t'PINT_PTR PINT32 PINT64 PLCID PLONG PLONGLONG PLONG_PTR PLONG32 PLONG64 POINTER_32 ' +\n\t\t\t\t\t\t'POINTER_64 PSHORT PSIZE_T PSSIZE_T PSTR PTBYTE PTCHAR PTSTR PUCHAR PUHALF_PTR ' +\n\t\t\t\t\t\t'PUINT PUINT_PTR PUINT32 PUINT64 PULONG PULONGLONG PULONG_PTR PULONG32 PULONG64 ' +\n\t\t\t\t\t\t'PUSHORT PVOID PWCHAR PWORD PWSTR SC_HANDLE SC_LOCK SERVICE_STATUS_HANDLE SHORT ' +\n\t\t\t\t\t\t'SIZE_T SSIZE_T TBYTE TCHAR UCHAR UHALF_PTR UINT UINT_PTR UINT32 UINT64 ULONG ' +\n\t\t\t\t\t\t'ULONGLONG ULONG_PTR ULONG32 ULONG64 USHORT USN VOID WCHAR WORD WPARAM WPARAM WPARAM ' +\n\t\t\t\t\t\t'char bool short int __int32 __int64 __int8 __int16 long float double __wchar_t ' +\n\t\t\t\t\t\t'clock_t _complex _dev_t _diskfree_t div_t ldiv_t _exception _EXCEPTION_POINTERS ' +\n\t\t\t\t\t\t'FILE _finddata_t _finddatai64_t _wfinddata_t _wfinddatai64_t __finddata64_t ' +\n\t\t\t\t\t\t'__wfinddata64_t _FPIEEE_RECORD fpos_t _HEAPINFO _HFILE lconv intptr_t ' +\n\t\t\t\t\t\t'jmp_buf mbstate_t _off_t _onexit_t _PNH ptrdiff_t _purecall_handler ' +\n\t\t\t\t\t\t'sig_atomic_t size_t _stat __stat64 _stati64 terminate_function ' +\n\t\t\t\t\t\t'time_t __time64_t _timeb __timeb64 tm uintptr_t _utimbuf ' +\n\t\t\t\t\t\t'va_list wchar_t wctrans_t wctype_t wint_t signed';\n\n\t\tvar keywords =\t'auto break case catch class const decltype __finally __exception __try ' +\n\t\t\t\t\t\t'const_cast continue private public protected __declspec ' +\n\t\t\t\t\t\t'default delete deprecated dllexport dllimport do dynamic_cast ' +\n\t\t\t\t\t\t'else enum explicit extern if for friend goto inline ' +\n\t\t\t\t\t\t'mutable naked namespace new noinline noreturn nothrow ' +\n\t\t\t\t\t\t'register reinterpret_cast return selectany ' +\n\t\t\t\t\t\t'sizeof static static_cast struct switch template this ' +\n\t\t\t\t\t\t'thread throw true false try typedef typeid typename union ' +\n\t\t\t\t\t\t'using uuid virtual void volatile whcar_t while';\n\t\t\t\t\t\n\t\tvar functions =\t'assert isalnum isalpha iscntrl isdigit isgraph islower isprint' +\n\t\t\t\t\t\t'ispunct isspace isupper isxdigit tolower toupper errno localeconv ' +\n\t\t\t\t\t\t'setlocale acos asin atan atan2 ceil cos cosh exp fabs floor fmod ' +\n\t\t\t\t\t\t'frexp ldexp log log10 modf pow sin sinh sqrt tan tanh jmp_buf ' +\n\t\t\t\t\t\t'longjmp setjmp raise signal sig_atomic_t va_arg va_end va_start ' +\n\t\t\t\t\t\t'clearerr fclose feof ferror fflush fgetc fgetpos fgets fopen ' +\n\t\t\t\t\t\t'fprintf fputc fputs fread freopen fscanf fseek fsetpos ftell ' +\n\t\t\t\t\t\t'fwrite getc getchar gets perror printf putc putchar puts remove ' +\n\t\t\t\t\t\t'rename rewind scanf setbuf setvbuf sprintf sscanf tmpfile tmpnam ' +\n\t\t\t\t\t\t'ungetc vfprintf vprintf vsprintf abort abs atexit atof atoi atol ' +\n\t\t\t\t\t\t'bsearch calloc div exit free getenv labs ldiv malloc mblen mbstowcs ' +\n\t\t\t\t\t\t'mbtowc qsort rand realloc srand strtod strtol strtoul system ' +\n\t\t\t\t\t\t'wcstombs wctomb memchr memcmp memcpy memmove memset strcat strchr ' +\n\t\t\t\t\t\t'strcmp strcoll strcpy strcspn strerror strlen strncat strncmp ' +\n\t\t\t\t\t\t'strncpy strpbrk strrchr strspn strstr strtok strxfrm asctime ' +\n\t\t\t\t\t\t'clock ctime difftime gmtime localtime mktime strftime time';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^ *#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'color1 bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(functions), 'gm'),\t\tcss: 'functions bold' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword bold' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['cpp', 'c'];\n\n\tSyntaxHighlighter.brushes.Cpp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract as base bool break byte case catch char checked class const ' +\n\t\t\t\t\t\t'continue decimal default delegate do double else enum event explicit volatile ' +\n\t\t\t\t\t\t'extern false finally fixed float for foreach get goto if implicit in int ' +\n\t\t\t\t\t\t'interface internal is lock long namespace new null object operator out ' +\n\t\t\t\t\t\t'override params private protected public readonly ref return sbyte sealed set ' +\n\t\t\t\t\t\t'short sizeof stackalloc static string struct switch this throw true try ' +\n\t\t\t\t\t\t'typeof uint ulong unchecked unsafe ushort using virtual void while var ' +\n\t\t\t\t\t\t'from group by into select let where orderby join on equals ascending descending';\n\n\t\tfunction fixComments(match, regexInfo)\n\t\t{\n\t\t\tvar css = (match[0].indexOf(\"///\") == 0)\n\t\t\t\t? 'color1'\n\t\t\t\t: 'comments'\n\t\t\t\t;\n\t\t\t\n\t\t\treturn [new SyntaxHighlighter.Match(match[0], match.index, css)];\n\t\t}\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tfunc : fixComments },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /@\"(?:[^\"]|\"\")*\"/g,\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t// @-quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*/gm,\t\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t\t// c# keyword\n\t\t\t{ regex: /\\bpartial(?=\\s+(?:class|interface|struct)\\b)/g,\tcss: 'keyword' },\t\t\t// contextual keyword: 'partial'\n\t\t\t{ regex: /\\byield(?=\\s+(?:return|break)\\b)/g,\t\t\t\tcss: 'keyword' }\t\t\t// contextual keyword: 'yield'\n\t\t\t];\n\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['c#', 'c-sharp', 'csharp'];\n\n\tSyntaxHighlighter.brushes.CSharp = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// html colors\n\t\t\t{ regex: /(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)/g,\t\t\t\tcss: 'value' },\t\t// sizes\n\t\t\t{ regex: /!important/g,\t\t\t\t\t\t\t\t\t\tcss: 'color3' },\t// !important\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t// fonts\n\t\t\t];\n\n\t\tthis.forHtmlScript({ \n\t\t\tleft: /(&lt;|<)\\s*style.*?(&gt;|>)/gi, \n\t\t\tright: /(&lt;|<)\\/\\s*style\\s*(&gt;|>)/gi \n\t\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['css'];\n\n\tSyntaxHighlighter.brushes.CSS = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abs addr and ansichar ansistring array as asm begin boolean byte cardinal ' +\n\t\t\t\t\t\t'case char class comp const constructor currency destructor div do double ' +\n\t\t\t\t\t\t'downto else end except exports extended false file finalization finally ' +\n\t\t\t\t\t\t'for function goto if implementation in inherited int64 initialization ' +\n\t\t\t\t\t\t'integer interface is label library longint longword mod nil not object ' +\n\t\t\t\t\t\t'of on or packed pansichar pansistring pchar pcurrency pdatetime pextended ' +\n\t\t\t\t\t\t'pint64 pointer private procedure program property pshortstring pstring ' +\n\t\t\t\t\t\t'pvariant pwidechar pwidestring protected public published raise real real48 ' +\n\t\t\t\t\t\t'record repeat set shl shortint shortstring shr single smallint string then ' +\n\t\t\t\t\t\t'threadvar to true try type unit until uses val var varirnt while widechar ' +\n\t\t\t\t\t\t'widestring with word write writeln xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /\\(\\*[\\s\\S]*?\\*\\)/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments (* *)\n\t\t\t{ regex: /{(?!\\$)[\\s\\S]*?}/gm,\t\t\t\t\t\t\t\tcss: 'comments' },  \t// multiline comments { }\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },  \t// one line\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\{\\$[a-zA-Z]+ .+\\}/g,\t\t\t\t\t\t\t\tcss: 'color1' },\t\t// compiler Directives and Region tags\n\t\t\t{ regex: /\\b[\\d\\.]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers 12345\n\t\t\t{ regex: /\\$[a-zA-Z0-9]+\\b/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// numbers $F5D3\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\tcss: 'keyword' }\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['delphi', 'pascal', 'pas'];\n\n\tSyntaxHighlighter.brushes.Delphi = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tthis.regexList = [\n\t\t\t{ regex: /^\\+\\+\\+ .*$/gm,\tcss: 'color2' },\t// new file\n\t\t\t{ regex: /^\\-\\-\\- .*$/gm,\tcss: 'color2' },\t// old file\n\t\t\t{ regex: /^\\s.*$/gm,\t\tcss: 'color1' },\t// unchanged\n\t\t\t{ regex: /^@@.*@@.*$/gm,\tcss: 'variable' },\t// location\n\t\t\t{ regex: /^\\+.*$/gm,\t\tcss: 'string' },\t// additions\n\t\t\t{ regex: /^\\-.*$/gm,\t\tcss: 'color3' }\t\t// deletions\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['diff', 'patch'];\n\n\tSyntaxHighlighter.brushes.Diff = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Jean-Lou Dupont\n\t\t// http://jldupont.blogspot.com/2009/06/erlang-syntax-highlighter.html  \n\n\t\t// According to: http://erlang.org/doc/reference_manual/introduction.html#1.5\n\t\tvar keywords = 'after and andalso band begin bnot bor bsl bsr bxor '+\n\t\t\t'case catch cond div end fun if let not of or orelse '+\n\t\t\t'query receive rem try when xor'+\n\t\t\t// additional\n\t\t\t' module export import define';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp(\"[A-Z][A-Za-z0-9_]+\", 'g'), \t\t\tcss: 'constants' },\n\t\t\t{ regex: new RegExp(\"\\\\%.+\", 'gm'), \t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: new RegExp(\"\\\\?[A-Za-z0-9_]+\", 'g'), \t\t\t\tcss: 'preprocessor' },\n\t\t\t{ regex: new RegExp(\"[a-z0-9_]+:[a-z0-9_]+\", 'g'), \t\t\tcss: 'functions' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords),\t'gm'),\t\tcss: 'keyword' }\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['erl', 'erlang'];\n\n\tSyntaxHighlighter.brushes.Erland = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Andres Almiray\n\t\t// http://jroller.com/aalmiray/entry/nice_source_code_syntax_highlighter\n\n\t\tvar keywords =\t'as assert break case catch class continue def default do else extends finally ' +\n\t\t\t\t\t\t'if in implements import instanceof interface new package property return switch ' +\n\t\t\t\t\t\t'throw throws try while public protected private static';\n\t\tvar types    =  'void boolean byte char short int long float double';\n\t\tvar constants = 'null';\n\t\tvar methods   = 'allProperties count get size '+\n\t\t\t\t\t\t'collect each eachProperty eachPropertyName eachWithIndex find findAll ' +\n\t\t\t\t\t\t'findIndexOf grep inject max min reverseEach sort ' +\n\t\t\t\t\t\t'asImmutable asSynchronized flatten intersect join pop reverse subMap toList ' +\n\t\t\t\t\t\t'padRight padLeft contains eachMatch toCharacter toLong toUrl tokenize ' +\n\t\t\t\t\t\t'eachFile eachFileRecurse eachB yte eachLine readBytes readLine getText ' +\n\t\t\t\t\t\t'splitEachLine withReader append encodeBase64 decodeBase64 filterLine ' +\n\t\t\t\t\t\t'transformChar transformLine withOutputStream withPrintWriter withStream ' +\n\t\t\t\t\t\t'withStreams withWriter withWriterAppend write writeLine '+\n\t\t\t\t\t\t'dump inspect invokeMethod print println step times upto use waitForOrKill '+\n\t\t\t\t\t\t'getText';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\t\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\"\"\".*\"\"\"/g,\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string' },\t\t// GStrings\n\t\t\t{ regex: new RegExp('\\\\b([\\\\d]+(\\\\.[\\\\d]+)?|0x[a-f0-9]+)\\\\b', 'gi'),\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\t\tcss: 'keyword' },\t\t// goovy keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(types), 'gm'),\t\t\t\t\t\tcss: 'color1' },\t\t// goovy/java type\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gm'),\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(methods), 'gm'),\t\t\t\t\tcss: 'functions' }\t\t// methods\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['groovy'];\n\n\tSyntaxHighlighter.brushes.Groovy = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'abstract assert boolean break byte case catch char class const ' +\n\t\t\t\t\t\t'continue default do double else enum extends ' +\n\t\t\t\t\t\t'false final finally float for goto if implements import ' +\n\t\t\t\t\t\t'instanceof int interface long native new null ' +\n\t\t\t\t\t\t'package private protected public return ' +\n\t\t\t\t\t\t'short static strictfp super switch synchronized this throw throws true ' +\n\t\t\t\t\t\t'transient try void volatile while';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: /\\/\\*([^\\*][\\s\\S]*)?\\*\\//gm,\t\t\t\t\t\tcss: 'comments' },\t \t// multiline comments\n\t\t\t{ regex: /\\/\\*(?!\\*\\/)\\*[\\s\\S]*?\\*\\//gm,\t\t\t\t\tcss: 'preprocessor' },\t// documentation comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// strings\n\t\t\t{ regex: /\\b([\\d]+(\\.[\\d]+)?|0x[a-f0-9]+)\\b/gi,\t\t\t\tcss: 'value' },\t\t\t// numbers\n\t\t\t{ regex: /(?!\\@interface\\b)\\@[\\$\\w]+\\b/g,\t\t\t\t\tcss: 'color1' },\t\t// annotation @anno\n\t\t\t{ regex: /\\@interface\\b/g,\t\t\t\t\t\t\t\t\tcss: 'color2' },\t\t// @interface keyword\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t// java keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript({\n\t\t\tleft\t: /(&lt;|<)%[@!=]?/g, \n\t\t\tright\t: /%(&gt;|>)/g \n\t\t});\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['java'];\n\n\tSyntaxHighlighter.brushes.Java = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Patrick Webster\n\t\t// http://patrickwebster.blogspot.com/2009/04/javafx-brush-for-syntaxhighlighter.html\n\t\tvar datatypes =\t'Boolean Byte Character Double Duration '\n\t\t\t\t\t\t+ 'Float Integer Long Number Short String Void'\n\t\t\t\t\t\t;\n\n\t\tvar keywords = 'abstract after and as assert at before bind bound break catch class '\n\t\t\t\t\t\t+ 'continue def delete else exclusive extends false finally first for from '\n\t\t\t\t\t\t+ 'function if import in indexof init insert instanceof into inverse last '\n\t\t\t\t\t\t+ 'lazy mixin mod nativearray new not null on or override package postinit '\n\t\t\t\t\t\t+ 'protected public public-init public-read replace return reverse sizeof '\n\t\t\t\t\t\t+ 'step super then this throw true try tween typeof var where while with '\n\t\t\t\t\t\t+ 'attribute let private readonly static trigger'\n\t\t\t\t\t\t;\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\n\t\t\t{ regex: /(-?\\.?)(\\b(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[+-]?\\d+)?|0x[a-f\\d]+)\\b\\.?/gi, css: 'color2' },\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(datatypes), 'gm'),\t\tcss: 'variable' },\t// datatypes\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\n\t\t];\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['jfx', 'javafx'];\n\n\tSyntaxHighlighter.brushes.JavaFX = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'break case catch continue ' +\n\t\t\t\t\t\t'default delete do else false  ' +\n\t\t\t\t\t\t'for function if in instanceof ' +\n\t\t\t\t\t\t'new null return super switch ' +\n\t\t\t\t\t\t'this throw true try typeof var while with'\n\t\t\t\t\t\t;\n\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineDoubleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: r.multiLineSingleQuotedString,\t\t\t\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: /\\s*#.*/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// keywords\n\t\t\t];\n\t\n\t\tthis.forHtmlScript(r.scriptScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['js', 'jscript', 'javascript'];\n\n\tSyntaxHighlighter.brushes.JScript = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by David Simmons-Duffin and Marty Kube\n\t\n\t\tvar funcs = \n\t\t\t'abs accept alarm atan2 bind binmode chdir chmod chomp chop chown chr ' + \n\t\t\t'chroot close closedir connect cos crypt defined delete each endgrent ' + \n\t\t\t'endhostent endnetent endprotoent endpwent endservent eof exec exists ' + \n\t\t\t'exp fcntl fileno flock fork format formline getc getgrent getgrgid ' + \n\t\t\t'getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr ' + \n\t\t\t'getnetbyname getnetent getpeername getpgrp getppid getpriority ' + \n\t\t\t'getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid ' + \n\t\t\t'getservbyname getservbyport getservent getsockname getsockopt glob ' + \n\t\t\t'gmtime grep hex index int ioctl join keys kill lc lcfirst length link ' + \n\t\t\t'listen localtime lock log lstat map mkdir msgctl msgget msgrcv msgsnd ' + \n\t\t\t'oct open opendir ord pack pipe pop pos print printf prototype push ' + \n\t\t\t'quotemeta rand read readdir readline readlink readpipe recv rename ' + \n\t\t\t'reset reverse rewinddir rindex rmdir scalar seek seekdir select semctl ' + \n\t\t\t'semget semop send setgrent sethostent setnetent setpgrp setpriority ' + \n\t\t\t'setprotoent setpwent setservent setsockopt shift shmctl shmget shmread ' + \n\t\t\t'shmwrite shutdown sin sleep socket socketpair sort splice split sprintf ' + \n\t\t\t'sqrt srand stat study substr symlink syscall sysopen sysread sysseek ' + \n\t\t\t'system syswrite tell telldir time times tr truncate uc ucfirst umask ' + \n\t\t\t'undef unlink unpack unshift utime values vec wait waitpid warn write ' +\n\t\t\t// feature\n\t\t\t'say';\n    \n\t\tvar keywords =  \n\t\t\t'bless caller continue dbmclose dbmopen die do dump else elsif eval exit ' +\n\t\t\t'for foreach goto if import last local my next no our package redo ref ' + \n\t\t\t'require return sub tie tied unless untie until use wantarray while ' +\n\t\t\t// feature\n\t\t\t'given when default ' +\n\t\t\t// Try::Tiny\n\t\t\t'try catch finally ' +\n\t\t\t// Moose\n\t\t\t'has extends with before after around override augment';\n    \n\t\tthis.regexList = [\n\t\t\t{ regex: /(<<|&lt;&lt;)((\\w+)|(['\"])(.+?)\\4)[\\s\\S]+?\\n\\3\\5\\n/g,\tcss: 'string' },\t// here doc (maybe html encoded)\n\t\t\t{ regex: /#.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /^#!.*\\n/g,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t// shebang\n\t\t\t{ regex: /-?\\w+(?=\\s*=(>|&gt;))/g,\tcss: 'string' }, // fat comma\n\n\t\t\t// is this too much?\n\t\t\t{ regex: /\\bq[qwxr]?\\([\\s\\S]*?\\)/g,\tcss: 'string' }, // quote-like operators ()\n\t\t\t{ regex: /\\bq[qwxr]?\\{[\\s\\S]*?\\}/g,\tcss: 'string' }, // quote-like operators {}\n\t\t\t{ regex: /\\bq[qwxr]?\\[[\\s\\S]*?\\]/g,\tcss: 'string' }, // quote-like operators []\n\t\t\t{ regex: /\\bq[qwxr]?(<|&lt;)[\\s\\S]*?(>|&gt;)/g,\tcss: 'string' }, // quote-like operators <>\n\t\t\t{ regex: /\\bq[qwxr]?([^\\w({<[])[\\s\\S]*?\\1/g,\tcss: 'string' }, // quote-like operators non-paired\n\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\tcss: 'string' },\n\t\t\t// currently ignoring single quote package separator and utf8 names\n\t\t\t{ regex: /(?:&amp;|[$@%*]|\\$#)[a-zA-Z_](\\w+|::)*/g,   \t\tcss: 'variable' },\n\t\t\t{ regex: /\\b__(?:END|DATA)__\\b[\\s\\S]*$/g,\t\t\t\tcss: 'comments' },\n\t\t\t{ regex: /(^|\\n)=\\w[\\s\\S]*?(\\n=cut\\s*\\n|$)/g,\t\t\t\tcss: 'comments' },\t\t// pod\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gm'),\t\tcss: 'functions' },\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\n\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t\t= ['perl', 'Perl', 'pl'];\n\n\tSyntaxHighlighter.brushes.Perl = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs acos acosh addcslashes addslashes ' +\n\t\t\t\t\t\t'array_change_key_case array_chunk array_combine array_count_values array_diff '+\n\t\t\t\t\t\t'array_diff_assoc array_diff_key array_diff_uassoc array_diff_ukey array_fill '+\n\t\t\t\t\t\t'array_filter array_flip array_intersect array_intersect_assoc array_intersect_key '+\n\t\t\t\t\t\t'array_intersect_uassoc array_intersect_ukey array_key_exists array_keys array_map '+\n\t\t\t\t\t\t'array_merge array_merge_recursive array_multisort array_pad array_pop array_product '+\n\t\t\t\t\t\t'array_push array_rand array_reduce array_reverse array_search array_shift '+\n\t\t\t\t\t\t'array_slice array_splice array_sum array_udiff array_udiff_assoc '+\n\t\t\t\t\t\t'array_udiff_uassoc array_uintersect array_uintersect_assoc '+\n\t\t\t\t\t\t'array_uintersect_uassoc array_unique array_unshift array_values array_walk '+\n\t\t\t\t\t\t'array_walk_recursive atan atan2 atanh base64_decode base64_encode base_convert '+\n\t\t\t\t\t\t'basename bcadd bccomp bcdiv bcmod bcmul bindec bindtextdomain bzclose bzcompress '+\n\t\t\t\t\t\t'bzdecompress bzerrno bzerror bzerrstr bzflush bzopen bzread bzwrite ceil chdir '+\n\t\t\t\t\t\t'checkdate checkdnsrr chgrp chmod chop chown chr chroot chunk_split class_exists '+\n\t\t\t\t\t\t'closedir closelog copy cos cosh count count_chars date decbin dechex decoct '+\n\t\t\t\t\t\t'deg2rad delete ebcdic2ascii echo empty end ereg ereg_replace eregi eregi_replace error_log '+\n\t\t\t\t\t\t'error_reporting escapeshellarg escapeshellcmd eval exec exit exp explode extension_loaded '+\n\t\t\t\t\t\t'feof fflush fgetc fgetcsv fgets fgetss file_exists file_get_contents file_put_contents '+\n\t\t\t\t\t\t'fileatime filectime filegroup fileinode filemtime fileowner fileperms filesize filetype '+\n\t\t\t\t\t\t'floatval flock floor flush fmod fnmatch fopen fpassthru fprintf fputcsv fputs fread fscanf '+\n\t\t\t\t\t\t'fseek fsockopen fstat ftell ftok getallheaders getcwd getdate getenv gethostbyaddr gethostbyname '+\n\t\t\t\t\t\t'gethostbynamel getimagesize getlastmod getmxrr getmygid getmyinode getmypid getmyuid getopt '+\n\t\t\t\t\t\t'getprotobyname getprotobynumber getrandmax getrusage getservbyname getservbyport gettext '+\n\t\t\t\t\t\t'gettimeofday gettype glob gmdate gmmktime ini_alter ini_get ini_get_all ini_restore ini_set '+\n\t\t\t\t\t\t'interface_exists intval ip2long is_a is_array is_bool is_callable is_dir is_double '+\n\t\t\t\t\t\t'is_executable is_file is_finite is_float is_infinite is_int is_integer is_link is_long '+\n\t\t\t\t\t\t'is_nan is_null is_numeric is_object is_readable is_real is_resource is_scalar is_soap_fault '+\n\t\t\t\t\t\t'is_string is_subclass_of is_uploaded_file is_writable is_writeable mkdir mktime nl2br '+\n\t\t\t\t\t\t'parse_ini_file parse_str parse_url passthru pathinfo print readlink realpath rewind rewinddir rmdir '+\n\t\t\t\t\t\t'round str_ireplace str_pad str_repeat str_replace str_rot13 str_shuffle str_split '+\n\t\t\t\t\t\t'str_word_count strcasecmp strchr strcmp strcoll strcspn strftime strip_tags stripcslashes '+\n\t\t\t\t\t\t'stripos stripslashes stristr strlen strnatcasecmp strnatcmp strncasecmp strncmp strpbrk '+\n\t\t\t\t\t\t'strpos strptime strrchr strrev strripos strrpos strspn strstr strtok strtolower strtotime '+\n\t\t\t\t\t\t'strtoupper strtr strval substr substr_compare';\n\n\t\tvar keywords =\t'abstract and array as break case catch cfunction class clone const continue declare default die do ' +\n\t\t\t\t\t\t'else elseif enddeclare endfor endforeach endif endswitch endwhile extends final for foreach ' +\n\t\t\t\t\t\t'function global goto if implements include include_once interface instanceof insteadof namespace new ' +\n\t\t\t\t\t\t'old_function or private protected public return require require_once static switch ' +\n\t\t\t\t\t\t'trait throw try use var while xor ';\n\t\t\n\t\tvar constants\t= '__FILE__ __LINE__ __METHOD__ __FUNCTION__ __CLASS__';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\tcss: 'comments' },\t\t\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\t\t\t// common functions\n\t\t\t{ regex: new RegExp(this.getKeywords(constants), 'gmi'),\tcss: 'constants' },\t\t\t// constants\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.phpScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['php'];\n\n\tSyntaxHighlighter.brushes.Php = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['text', 'plain'];\n\n\tSyntaxHighlighter.brushes.Plain = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Joel 'Jaykul' Bennett, http://PoshCode.org | http://HuddledMasses.org\n\t\tvar keywords =\t'while validateset validaterange validatepattern validatelength validatecount ' +\n\t\t\t\t\t\t'until trap switch return ref process param parameter in if global: '+\n\t\t\t\t\t\t'function foreach for finally filter end elseif else dynamicparam do default ' +\n\t\t\t\t\t\t'continue cmdletbinding break begin alias \\\\? % #script #private #local #global '+\n\t\t\t\t\t\t'mandatory parametersetname position valuefrompipeline ' +\n\t\t\t\t\t\t'valuefrompipelinebypropertyname valuefromremainingarguments helpmessage ';\n\n\t\tvar operators =\t' and as band bnot bor bxor casesensitive ccontains ceq cge cgt cle ' +\n\t\t\t\t\t\t'clike clt cmatch cne cnotcontains cnotlike cnotmatch contains ' +\n\t\t\t\t\t\t'creplace eq exact f file ge gt icontains ieq ige igt ile ilike ilt ' +\n\t\t\t\t\t\t'imatch ine inotcontains inotlike inotmatch ireplace is isnot le like ' +\n\t\t\t\t\t\t'lt match ne not notcontains notlike notmatch or regex replace wildcard';\n\t\t\t\t\t\t\n\t\tvar verbs =\t\t'write where wait use update unregister undo trace test tee take suspend ' +\n\t\t\t\t\t\t'stop start split sort skip show set send select scroll resume restore ' +\n\t\t\t\t\t\t'restart resolve resize reset rename remove register receive read push ' +\n\t\t\t\t\t\t'pop ping out new move measure limit join invoke import group get format ' +\n\t\t\t\t\t\t'foreach export expand exit enter enable disconnect disable debug cxnew ' +\n\t\t\t\t\t\t'copy convertto convertfrom convert connect complete compare clear ' +\n\t\t\t\t\t\t'checkpoint aggregate add';\n\n\t\t// I can't find a way to match the comment based help in multi-line comments, because SH won't highlight in highlights, and javascript doesn't support lookbehind\n\t\tvar commenthelp = ' component description example externalhelp forwardhelpcategory forwardhelptargetname forwardhelptargetname functionality inputs link notes outputs parameter remotehelprunspace role synopsis';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: new RegExp('^\\\\s*#[#\\\\s]*\\\\.('+this.getKeywords(commenthelp)+').*$', 'gim'),\t\t\tcss: 'preprocessor help bold' },\t\t// comment-based help\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t\t\t\t// one line comments\n\t\t\t{ regex: /(&lt;|<)#[\\s\\S]*?#(&gt;|>)/gm,\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments here' },\t\t\t\t\t// multi-line comments\n\t\t\t\n\t\t\t{ regex: new RegExp('@\"\\\\n[\\\\s\\\\S]*?\\\\n\"@', 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string here' },\t\t\t// double quoted here-strings\n\t\t\t{ regex: new RegExp(\"@'\\\\n[\\\\s\\\\S]*?\\\\n'@\", 'gm'),\t\t\t\t\t\t\t\t\t\t\t\tcss: 'script string single here' },\t\t// single quoted here-strings\n\t\t\t{ regex: new RegExp('\"(?:\\\\$\\\\([^\\\\)]*\\\\)|[^\"]|`\"|\"\")*[^`]\"','g'),\t\t\t\t\t\t\t\tcss: 'string' },\t\t\t\t\t\t// double quoted strings\n\t\t\t{ regex: new RegExp(\"'(?:[^']|'')*'\", 'g'),\t\t\t\t\t\t\t\t\t\t\t\t\t\tcss: 'string single' },\t\t\t\t\t// single quoted strings\n\t\t\t\n\t\t\t{ regex: new RegExp('[\\\\$|@|@@](?:(?:global|script|private|env):)?[A-Z0-9_]+', 'gi'),\t\t\tcss: 'variable' },\t\t\t\t\t\t// $variables\n\t\t\t{ regex: new RegExp('(?:\\\\b'+verbs.replace(/ /g, '\\\\b|\\\\b')+')-[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'functions' },\t\t\t\t\t\t// functions and cmdlets\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\t\t\t\t\t\t\t\tcss: 'keyword' },\t\t\t\t\t\t// keywords\n\t\t\t{ regex: new RegExp('-'+this.getKeywords(operators), 'gmi'),\t\t\t\t\t\t\t\t\tcss: 'operator value' },\t\t\t\t// operators\n\t\t\t{ regex: new RegExp('\\\\[[A-Z_\\\\[][A-Z0-9_. `,\\\\[\\\\]]*\\\\]', 'gi'),\t\t\t\t\t\t\t\tcss: 'constants' },\t\t\t\t\t\t// .Net [Type]s\n\t\t\t{ regex: new RegExp('\\\\s+-(?!'+this.getKeywords(operators)+')[a-zA-Z_][a-zA-Z0-9_]*', 'gmi'),\tcss: 'color1' },\t\t\t\t\t\t// parameters\t  \n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['powershell', 'ps', 'posh'];\n\n\tSyntaxHighlighter.brushes.PowerShell = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Gheorghe Milas and Ahmad Sherif\n\t\n\t\tvar keywords =  'and assert break class continue def del elif else ' +\n\t\t\t\t\t\t'except exec finally for from global if import in is ' +\n\t\t\t\t\t\t'lambda not or pass print raise return try yield while';\n\n\t\tvar funcs = '__import__ abs all any apply basestring bin bool buffer callable ' +\n\t\t\t\t\t'chr classmethod cmp coerce compile complex delattr dict dir ' +\n\t\t\t\t\t'divmod enumerate eval execfile file filter float format frozenset ' +\n\t\t\t\t\t'getattr globals hasattr hash help hex id input int intern ' +\n\t\t\t\t\t'isinstance issubclass iter len list locals long map max min next ' +\n\t\t\t\t\t'object oct open ord pow print property range raw_input reduce ' +\n\t\t\t\t\t'reload repr reversed round set setattr slice sorted staticmethod ' +\n\t\t\t\t\t'str sum super tuple type type unichr unicode vars xrange zip';\n\n\t\tvar special =  'None True False self cls class_';\n\n\t\tthis.regexList = [\n\t\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments, css: 'comments' },\n\t\t\t\t{ regex: /^\\s*@\\w+/gm, \t\t\t\t\t\t\t\t\t\tcss: 'decorator' },\n\t\t\t\t{ regex: /(['\\\"]{3})([^\\1])*?\\1/gm, \t\t\t\t\t\tcss: 'comments' },\n\t\t\t\t{ regex: /\"(?!\")(?:\\.|\\\\\\\"|[^\\\"\"\\n])*\"/gm, \t\t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /'(?!')(?:\\.|(\\\\\\')|[^\\''\\n])*'/gm, \t\t\t\tcss: 'string' },\n\t\t\t\t{ regex: /\\+|\\-|\\*|\\/|\\%|=|==/gm, \t\t\t\t\t\t\tcss: 'keyword' },\n\t\t\t\t{ regex: /\\b\\d+\\.?\\w*/g, \t\t\t\t\t\t\t\t\tcss: 'value' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\tcss: 'functions' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'), \t\tcss: 'keyword' },\n\t\t\t\t{ regex: new RegExp(this.getKeywords(special), 'gm'), \t\tcss: 'color1' }\n\t\t\t\t];\n\t\t\t\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['py', 'python'];\n\n\tSyntaxHighlighter.brushes.Python = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Erik Peterson.\n\t\n\t\tvar keywords =\t'alias and BEGIN begin break case class def define_method defined do each else elsif ' +\n\t\t\t\t\t\t'END end ensure false for if in module new next nil not or raise redo rescue retry return ' +\n\t\t\t\t\t\t'self super then throw true undef unless until when while yield';\n\n\t\tvar builtins =\t'Array Bignum Binding Class Continuation Dir Exception FalseClass File::Stat File Fixnum Fload ' +\n\t\t\t\t\t\t'Hash Integer IO MatchData Method Module NilClass Numeric Object Proc Range Regexp String Struct::TMS Symbol ' +\n\t\t\t\t\t\t'ThreadGroup Thread Time TrueClass';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLinePerlComments,\tcss: 'comments' },\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\b[A-Z0-9_]+\\b/g,\t\t\t\t\t\t\t\t\tcss: 'constants' },\t\t// constants\n\t\t\t{ regex: /:[a-z][A-Za-z0-9_]*/g,\t\t\t\t\t\t\tcss: 'color2' },\t\t// symbols\n\t\t\t{ regex: /(\\$|@@|@)\\w+/g,\t\t\t\t\t\t\t\t\tcss: 'variable bold' },\t// $global, @instance, and @@class variables\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(this.getKeywords(builtins), 'gm'),\t\tcss: 'color1' }\t\t\t// builtins\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['ruby', 'rails', 'ror', 'rb'];\n\n\tSyntaxHighlighter.brushes.Ruby = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction getKeywordsCSS(str)\n\t\t{\n\t\t\treturn '\\\\b([a-z_]|)' + str.replace(/ /g, '(?=:)\\\\b|\\\\b([a-z_\\\\*]|\\\\*|)') + '(?=:)\\\\b';\n\t\t};\n\t\n\t\tfunction getValuesCSS(str)\n\t\t{\n\t\t\treturn '\\\\b' + str.replace(/ /g, '(?!-)(?!:)\\\\b|\\\\b()') + '\\:\\\\b';\n\t\t};\n\n\t\tvar keywords =\t'ascent azimuth background-attachment background-color background-image background-position ' +\n\t\t\t\t\t\t'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top ' +\n\t\t\t\t\t\t'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color ' +\n\t\t\t\t\t\t'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width ' +\n\t\t\t\t\t\t'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color ' +\n\t\t\t\t\t\t'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display ' +\n\t\t\t\t\t\t'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font ' +\n\t\t\t\t\t\t'height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top ' +\n\t\t\t\t\t\t'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans ' +\n\t\t\t\t\t\t'outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page ' +\n\t\t\t\t\t\t'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position ' +\n\t\t\t\t\t\t'quotes right richness size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress ' +\n\t\t\t\t\t\t'table-layout text-align top text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em ' +\n\t\t\t\t\t\t'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index';\n\t\t\n\t\tvar values =\t'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder '+\n\t\t\t\t\t\t'both bottom braille capitalize caption center center-left center-right circle close-quote code collapse compact condensed '+\n\t\t\t\t\t\t'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero digits disc dotted double '+\n\t\t\t\t\t\t'embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+\n\t\t\t\t\t\t'gray green groove handheld hebrew help hidden hide high higher icon inline-table inline inset inside invert italic '+\n\t\t\t\t\t\t'justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+\n\t\t\t\t\t\t'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower '+\n\t\t\t\t\t\t'navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+\n\t\t\t\t\t\t'outside overline pointer portrait pre print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side '+\n\t\t\t\t\t\t'rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+\n\t\t\t\t\t\t'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize '+\n\t\t\t\t\t\t'table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+\n\t\t\t\t\t\t'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin '+\n\t\t\t\t\t\t'upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';\n\t\t\n\t\tvar fonts =\t\t'[mM]onospace [tT]ahoma [vV]erdana [aA]rial [hH]elvetica [sS]ans-serif [sS]erif [cC]ourier mono sans serif';\n\t\t\n\t\tvar statements\t\t= '!important !default';\n\t\tvar preprocessor\t= '@import @extend @debug @warn @if @for @while @mixin @include';\n\t\t\n\t\tvar r = SyntaxHighlighter.regexLib;\n\t\t\n\t\tthis.regexList = [\n\t\t\t{ regex: r.multiLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// multiline comments\n\t\t\t{ regex: r.singleLineCComments,\t\t\t\t\t\t\t\tcss: 'comments' },\t\t// singleline comments\n\t\t\t{ regex: r.doubleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// double quoted strings\n\t\t\t{ regex: r.singleQuotedString,\t\t\t\t\t\t\t\tcss: 'string' },\t\t// single quoted strings\n\t\t\t{ regex: /\\#[a-fA-F0-9]{3,6}/g,\t\t\t\t\t\t\t\tcss: 'value' },\t\t\t// html colors\n\t\t\t{ regex: /\\b(-?\\d+)(\\.\\d+)?(px|em|pt|\\:|\\%|)\\b/g,\t\t\tcss: 'value' },\t\t\t// sizes\n\t\t\t{ regex: /\\$\\w+/g,\t\t\t\t\t\t\t\t\t\t\tcss: 'variable' },\t\t// variables\n\t\t\t{ regex: new RegExp(this.getKeywords(statements), 'g'),\t\tcss: 'color3' },\t\t// statements\n\t\t\t{ regex: new RegExp(this.getKeywords(preprocessor), 'g'),\tcss: 'preprocessor' },\t// preprocessor\n\t\t\t{ regex: new RegExp(getKeywordsCSS(keywords), 'gm'),\t\tcss: 'keyword' },\t\t// keywords\n\t\t\t{ regex: new RegExp(getValuesCSS(values), 'g'),\t\t\t\tcss: 'value' },\t\t\t// values\n\t\t\t{ regex: new RegExp(this.getKeywords(fonts), 'g'),\t\t\tcss: 'color1' }\t\t\t// fonts\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sass', 'scss'];\n\n\tSyntaxHighlighter.brushes.Sass = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\t// Contributed by Yegor Jbanov and David Bernard.\n\t\n\t\tvar keywords =\t'val sealed case def true trait implicit forSome import match object null finally super ' +\n\t\t\t\t\t\t'override try lazy for var catch throw type extends class while with new final yield abstract ' +\n\t\t\t\t\t\t'else do if return protected private this package false';\n\n\t\tvar keyops =\t'[_:=><%#@]+';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleLineCComments,\t\t\tcss: 'comments' },\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineCComments,\t\t\t\tcss: 'comments' },\t// multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t// multi-line strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,    css: 'string' },\t// double-quoted string\n\t\t\t{ regex: SyntaxHighlighter.regexLib.singleQuotedString,\t\t\t\tcss: 'string' },\t// strings\n\t\t\t{ regex: /0x[a-f0-9]+|\\d+(\\.\\d+)?/gi,\t\t\t\t\t\t\t\tcss: 'value' },\t\t// numbers\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\t\t\t\tcss: 'keyword' },\t// keywords\n\t\t\t{ regex: new RegExp(keyops, 'gm'),\t\t\t\t\t\t\t\t\tcss: 'keyword' }\t// scala keyword\n\t\t\t];\n\t}\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['scala'];\n\n\tSyntaxHighlighter.brushes.Scala = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar funcs\t=\t'abs avg case cast coalesce convert count current_timestamp ' +\n\t\t\t\t\t\t'current_user day isnull left lower month nullif replace right ' +\n\t\t\t\t\t\t'session_user space substring sum system_user upper user year';\n\n\t\tvar keywords =\t'absolute action add after alter as asc at authorization begin bigint ' +\n\t\t\t\t\t\t'binary bit by cascade char character check checkpoint close collate ' +\n\t\t\t\t\t\t'column commit committed connect connection constraint contains continue ' +\n\t\t\t\t\t\t'create cube current current_date current_time cursor database date ' +\n\t\t\t\t\t\t'deallocate dec decimal declare default delete desc distinct double drop ' +\n\t\t\t\t\t\t'dynamic else end end-exec escape except exec execute false fetch first ' +\n\t\t\t\t\t\t'float for force foreign forward free from full function global goto grant ' +\n\t\t\t\t\t\t'group grouping having hour ignore index inner insensitive insert instead ' +\n\t\t\t\t\t\t'int integer intersect into is isolation key last level load local max min ' +\n\t\t\t\t\t\t'minute modify move name national nchar next no numeric of off on only ' +\n\t\t\t\t\t\t'open option order out output partial password precision prepare primary ' +\n\t\t\t\t\t\t'prior privileges procedure public read real references relative repeatable ' +\n\t\t\t\t\t\t'restrict return returns revoke rollback rollup rows rule schema scroll ' +\n\t\t\t\t\t\t'second section select sequence serializable set size smallint static ' +\n\t\t\t\t\t\t'statistics table temp temporary then time timestamp to top transaction ' +\n\t\t\t\t\t\t'translation trigger true truncate uncommitted union unique update values ' +\n\t\t\t\t\t\t'varchar varying view when where with work';\n\n\t\tvar operators =\t'all and any between cross in join like not null or outer some';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /--(.*)$/gm,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line and multiline comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineDoubleQuotedString,\tcss: 'string' },\t\t\t// double quoted strings\n\t\t\t{ regex: SyntaxHighlighter.regexLib.multiLineSingleQuotedString,\tcss: 'string' },\t\t\t// single quoted strings\n\t\t\t{ regex: new RegExp(this.getKeywords(funcs), 'gmi'),\t\t\t\tcss: 'color2' },\t\t\t// functions\n\t\t\t{ regex: new RegExp(this.getKeywords(operators), 'gmi'),\t\t\tcss: 'color1' },\t\t\t// operators and such\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gmi'),\t\t\t\tcss: 'keyword' }\t\t\t// keyword\n\t\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['sql'];\n\n\tSyntaxHighlighter.brushes.Sql = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tvar keywords =\t'AddHandler AddressOf AndAlso Alias And Ansi As Assembly Auto ' +\n\t\t\t\t\t\t'Boolean ByRef Byte ByVal Call Case Catch CBool CByte CChar CDate ' +\n\t\t\t\t\t\t'CDec CDbl Char CInt Class CLng CObj Const CShort CSng CStr CType ' +\n\t\t\t\t\t\t'Date Decimal Declare Default Delegate Dim DirectCast Do Double Each ' +\n\t\t\t\t\t\t'Else ElseIf End Enum Erase Error Event Exit False Finally For Friend ' +\n\t\t\t\t\t\t'Function Get GetType GoSub GoTo Handles If Implements Imports In ' +\n\t\t\t\t\t\t'Inherits Integer Interface Is Let Lib Like Long Loop Me Mod Module ' +\n\t\t\t\t\t\t'MustInherit MustOverride MyBase MyClass Namespace New Next Not Nothing ' +\n\t\t\t\t\t\t'NotInheritable NotOverridable Object On Option Optional Or OrElse ' +\n\t\t\t\t\t\t'Overloads Overridable Overrides ParamArray Preserve Private Property ' +\n\t\t\t\t\t\t'Protected Public RaiseEvent ReadOnly ReDim REM RemoveHandler Resume ' +\n\t\t\t\t\t\t'Return Select Set Shadows Shared Short Single Static Step Stop String ' +\n\t\t\t\t\t\t'Structure Sub SyncLock Then Throw To True Try TypeOf Unicode Until ' +\n\t\t\t\t\t\t'Variant When While With WithEvents WriteOnly Xor';\n\n\t\tthis.regexList = [\n\t\t\t{ regex: /'.*$/gm,\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t\t\t// one line comments\n\t\t\t{ regex: SyntaxHighlighter.regexLib.doubleQuotedString,\tcss: 'string' },\t\t\t// strings\n\t\t\t{ regex: /^\\s*#.*$/gm,\t\t\t\t\t\t\t\t\tcss: 'preprocessor' },\t\t// preprocessor tags like #region and #endregion\n\t\t\t{ regex: new RegExp(this.getKeywords(keywords), 'gm'),\tcss: 'keyword' }\t\t\t// vb keyword\n\t\t\t];\n\n\t\tthis.forHtmlScript(SyntaxHighlighter.regexLib.aspScriptTags);\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['vb', 'vbnet'];\n\n\tSyntaxHighlighter.brushes.Vb = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n;(function()\n{\n\t// CommonJS\n\tSyntaxHighlighter = SyntaxHighlighter || (typeof require !== 'undefined'? require('shCore').SyntaxHighlighter : null);\n\n\tfunction Brush()\n\t{\n\t\tfunction process(match, regexInfo)\n\t\t{\n\t\t\tvar constructor = SyntaxHighlighter.Match,\n\t\t\t\tcode = match[0],\n\t\t\t\ttag = new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(?<name>[:\\\\w-\\\\.]+)', 'xg').exec(code),\n\t\t\t\tresult = []\n\t\t\t\t;\n\t\t\n\t\t\tif (match.attributes != null) \n\t\t\t{\n\t\t\t\tvar attributes,\n\t\t\t\t\tregex = new XRegExp('(?<name> [\\\\w:\\\\-\\\\.]+)' +\n\t\t\t\t\t\t\t\t\t\t'\\\\s*=\\\\s*' +\n\t\t\t\t\t\t\t\t\t\t'(?<value> \".*?\"|\\'.*?\\'|\\\\w+)',\n\t\t\t\t\t\t\t\t\t\t'xg');\n\n\t\t\t\twhile ((attributes = regex.exec(code)) != null) \n\t\t\t\t{\n\t\t\t\t\tresult.push(new constructor(attributes.name, match.index + attributes.index, 'color1'));\n\t\t\t\t\tresult.push(new constructor(attributes.value, match.index + attributes.index + attributes[0].indexOf(attributes.value), 'string'));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (tag != null)\n\t\t\t\tresult.push(\n\t\t\t\t\tnew constructor(tag.name, match.index + tag[0].indexOf(tag.name), 'keyword')\n\t\t\t\t);\n\n\t\t\treturn result;\n\t\t}\n\t\n\t\tthis.regexList = [\n\t\t\t{ regex: new XRegExp('(\\\\&lt;|<)\\\\!\\\\[[\\\\w\\\\s]*?\\\\[(.|\\\\s)*?\\\\]\\\\](\\\\&gt;|>)', 'gm'),\t\t\tcss: 'color2' },\t// <![ ... [ ... ]]>\n\t\t\t{ regex: SyntaxHighlighter.regexLib.xmlComments,\t\t\t\t\t\t\t\t\t\t\t\tcss: 'comments' },\t// <!-- ... -->\n\t\t\t{ regex: new XRegExp('(&lt;|<)[\\\\s\\\\/\\\\?]*(\\\\w+)(?<attributes>.*?)[\\\\s\\\\/\\\\?]*(&gt;|>)', 'sg'), func: process }\n\t\t];\n\t};\n\n\tBrush.prototype\t= new SyntaxHighlighter.Highlighter();\n\tBrush.aliases\t= ['xml', 'xhtml', 'xslt', 'html'];\n\n\tSyntaxHighlighter.brushes.Xml = Brush;\n\n\t// CommonJS\n\ttypeof(exports) != 'undefined' ? exports.Brush = Brush : null;\n})();\n"
  },
  {
    "path": "third-party/SyntaxHighlighter/shCoreDefault.css",
    "content": ".syntaxhighlighter a,.syntaxhighlighter div,.syntaxhighlighter code,.syntaxhighlighter,.syntaxhighlighter td,.syntaxhighlighter tr,.syntaxhighlighter tbody,.syntaxhighlighter thead,.syntaxhighlighter caption,.syntaxhighlighter textarea{-moz-border-radius:0 0 0 0!important;-webkit-border-radius:0 0 0 0!important;background:none!important;border:0!important;bottom:auto!important;float:none!important;left:auto!important;line-height:1.1em!important;margin:0!important;outline:0!important;overflow:visible!important;padding:0!important;position:static!important;right:auto!important;text-align:left!important;top:auto!important;vertical-align:baseline!important;width:auto!important;box-sizing:content-box!important;font-family:Monaco,Menlo,Consolas,\"Courier New\",monospace;font-weight:normal!important;font-style:normal!important;min-height:inherit!important;min-height:auto!important;font-size:13px!important}.syntaxhighlighter{width:100%!important;margin:.3em 0 .3em 0!important;position:relative!important;overflow:auto!important;background-color:#f5f5f5!important;border:1px solid #ccc!important;border-radius:4px!important;border-collapse:separate!important}.syntaxhighlighter.source{overflow:hidden!important}.syntaxhighlighter .bold{font-weight:bold!important}.syntaxhighlighter .italic{font-style:italic!important}.syntaxhighlighter .gutter div{white-space:pre!important;word-wrap:normal}.syntaxhighlighter caption{text-align:left!important;padding:.5em 0 .5em 1em!important}.syntaxhighlighter td.code{width:100%!important}.syntaxhighlighter td.code .container{position:relative!important}.syntaxhighlighter td.code .container textarea{box-sizing:border-box!important;position:absolute!important;left:0!important;top:0!important;width:100%!important;border:none!important;background:white!important;padding-left:1em!important;overflow:hidden!important;white-space:pre!important}.syntaxhighlighter td.gutter .line{text-align:right!important;padding:0 .5em 0 1em!important}.syntaxhighlighter td.code .line{padding:0 1em!important}.syntaxhighlighter.nogutter td.code .container textarea,.syntaxhighlighter.nogutter td.code .line{padding-left:0!important}.syntaxhighlighter.show{display:block!important}.syntaxhighlighter.collapsed table{display:none!important}.syntaxhighlighter.collapsed .toolbar{padding:.1em .8em 0 .8em!important;font-size:1em!important;position:static!important;width:auto!important}.syntaxhighlighter.collapsed .toolbar span{display:inline!important;margin-right:1em!important}.syntaxhighlighter.collapsed .toolbar span a{padding:0!important;display:none!important}.syntaxhighlighter.collapsed .toolbar span a.expandSource{display:inline!important}.syntaxhighlighter .toolbar{position:absolute!important;right:1px!important;top:1px!important;width:11px!important;height:11px!important;font-size:10px!important;z-index:10!important}.syntaxhighlighter .toolbar span.title{display:inline!important}.syntaxhighlighter .toolbar a{display:block!important;text-align:center!important;text-decoration:none!important;padding-top:1px!important}.syntaxhighlighter .toolbar a.expandSource{display:none!important}.syntaxhighlighter.ie{font-size:.9em!important;padding:1px 0 1px 0!important}.syntaxhighlighter.ie .toolbar{line-height:8px!important}.syntaxhighlighter.ie .toolbar a{padding-top:0!important}.syntaxhighlighter.printing .line.alt1 .content,.syntaxhighlighter.printing .line.alt2 .content,.syntaxhighlighter.printing .line.highlighted .number,.syntaxhighlighter.printing .line.highlighted.alt1 .content,.syntaxhighlighter.printing .line.highlighted.alt2 .content{background:none!important}.syntaxhighlighter.printing .line .number{color:#bbb!important}.syntaxhighlighter.printing .line .content{color:black!important}.syntaxhighlighter.printing .toolbar{display:none!important}.syntaxhighlighter.printing a{text-decoration:none!important}.syntaxhighlighter.printing .plain,.syntaxhighlighter.printing .plain a{color:black!important}.syntaxhighlighter.printing .comments,.syntaxhighlighter.printing .comments a{color:#008200!important}.syntaxhighlighter.printing .string,.syntaxhighlighter.printing .string a{color:blue!important}.syntaxhighlighter.printing .keyword{color:#ff7800!important;font-weight:bold!important}.syntaxhighlighter.printing .preprocessor{color:gray!important}.syntaxhighlighter.printing .variable{color:#a70!important}.syntaxhighlighter.printing .value{color:#090!important}.syntaxhighlighter.printing .functions{color:#ff1493!important}.syntaxhighlighter.printing .constants{color:#06c!important}.syntaxhighlighter.printing .script{font-weight:bold!important}.syntaxhighlighter.printing .color1,.syntaxhighlighter.printing .color1 a{color:gray!important}.syntaxhighlighter.printing .color2,.syntaxhighlighter.printing .color2 a{color:#ff1493!important}.syntaxhighlighter.printing .color3,.syntaxhighlighter.printing .color3 a{color:red!important}.syntaxhighlighter.printing .break,.syntaxhighlighter.printing .break a{color:black!important}.syntaxhighlighter{background-color:#f5f5f5!important}.syntaxhighlighter .line.highlighted.number{color:black!important}.syntaxhighlighter caption{color:black!important}.syntaxhighlighter .gutter{color:#afafaf!important;background-color:#f7f7f9!important;border-right:1px solid #e1e1e8!important;padding:9.5px 0 9.5px 9.5px!important;border-top-left-radius:4px!important;border-bottom-left-radius:4px!important;user-select:none!important;-moz-user-select:none!important;-webkit-user-select:none!important}.syntaxhighlighter .gutter .line.highlighted{background-color:#6ce26c!important;color:white!important}.syntaxhighlighter.printing .line .content{border:none!important}.syntaxhighlighter.collapsed{overflow:visible!important}.syntaxhighlighter.collapsed .toolbar{color:blue!important;background:white!important;border:1px solid #6ce26c!important}.syntaxhighlighter.collapsed .toolbar a{color:blue!important}.syntaxhighlighter.collapsed .toolbar a:hover{color:red!important}.syntaxhighlighter .toolbar{color:white!important;background:#6ce26c!important;border:none!important}.syntaxhighlighter .toolbar a{color:white!important}.syntaxhighlighter .toolbar a:hover{color:black!important}.syntaxhighlighter .plain,.syntaxhighlighter .plain a{color:black!important}.syntaxhighlighter .comments,.syntaxhighlighter .comments a{color:#008200!important}.syntaxhighlighter .string,.syntaxhighlighter .string a{color:blue!important}.syntaxhighlighter .keyword{color:#ff7800!important}.syntaxhighlighter .preprocessor{color:gray!important}.syntaxhighlighter .variable{color:#a70!important}.syntaxhighlighter .value{color:#090!important}.syntaxhighlighter .functions{color:#ff1493!important}.syntaxhighlighter .constants{color:#06c!important}.syntaxhighlighter .script{font-weight:bold!important;color:#ff7800!important;background-color:none!important}.syntaxhighlighter .color1,.syntaxhighlighter .color1 a{color:gray!important}.syntaxhighlighter .color2,.syntaxhighlighter .color2 a{color:#ff1493!important}.syntaxhighlighter .color3,.syntaxhighlighter .color3 a{color:red!important}.syntaxhighlighter .keyword{font-weight:bold!important}"
  },
  {
    "path": "third-party/clipboard/clipboard.js",
    "content": "/*!\n * clipboard.js v1.5.15\n * https://zenorocha.github.io/clipboard.js\n *\n * Licensed MIT © Zeno Rocha\n */\n(function(f){if(typeof exports===\"object\"&&typeof module!==\"undefined\"){module.exports=f()}else if(typeof define===\"function\"&&define.amd){define([],f)}else{var g;if(typeof window!==\"undefined\"){g=window}else if(typeof global!==\"undefined\"){g=global}else if(typeof self!==\"undefined\"){g=self}else{g=this}g.Clipboard = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n    /**\n     * A polyfill for Element.matches()\n     */\n    if (Element && !Element.prototype.matches) {\n        var proto = Element.prototype;\n\n        proto.matches = proto.matchesSelector ||\n            proto.mozMatchesSelector ||\n            proto.msMatchesSelector ||\n            proto.oMatchesSelector ||\n            proto.webkitMatchesSelector;\n    }\n\n    /**\n     * Finds the closest parent that matches a selector.\n     *\n     * @param {Element} element\n     * @param {String} selector\n     * @return {Function}\n     */\n    function closest (element, selector) {\n        while (element && element !== document) {\n            if (element.matches(selector)) return element;\n            element = element.parentNode;\n        }\n    }\n\n    module.exports = closest;\n\n},{}],2:[function(require,module,exports){\n    var closest = require('./closest');\n\n    /**\n     * Delegates event to a selector.\n     *\n     * @param {Element} element\n     * @param {String} selector\n     * @param {String} type\n     * @param {Function} callback\n     * @param {Boolean} useCapture\n     * @return {Object}\n     */\n    function delegate(element, selector, type, callback, useCapture) {\n        var listenerFn = listener.apply(this, arguments);\n\n        element.addEventListener(type, listenerFn, useCapture);\n\n        return {\n            destroy: function() {\n                element.removeEventListener(type, listenerFn, useCapture);\n            }\n        }\n    }\n\n    /**\n     * Finds closest match and invokes callback.\n     *\n     * @param {Element} element\n     * @param {String} selector\n     * @param {String} type\n     * @param {Function} callback\n     * @return {Function}\n     */\n    function listener(element, selector, type, callback) {\n        return function(e) {\n            e.delegateTarget = closest(e.target, selector);\n\n            if (e.delegateTarget) {\n                callback.call(element, e);\n            }\n        }\n    }\n\n    module.exports = delegate;\n\n},{\"./closest\":1}],3:[function(require,module,exports){\n    /**\n     * Check if argument is a HTML element.\n     *\n     * @param {Object} value\n     * @return {Boolean}\n     */\n    exports.node = function(value) {\n        return value !== undefined\n            && value instanceof HTMLElement\n            && value.nodeType === 1;\n    };\n\n    /**\n     * Check if argument is a list of HTML elements.\n     *\n     * @param {Object} value\n     * @return {Boolean}\n     */\n    exports.nodeList = function(value) {\n        var type = Object.prototype.toString.call(value);\n\n        return value !== undefined\n            && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n            && ('length' in value)\n            && (value.length === 0 || exports.node(value[0]));\n    };\n\n    /**\n     * Check if argument is a string.\n     *\n     * @param {Object} value\n     * @return {Boolean}\n     */\n    exports.string = function(value) {\n        return typeof value === 'string'\n            || value instanceof String;\n    };\n\n    /**\n     * Check if argument is a function.\n     *\n     * @param {Object} value\n     * @return {Boolean}\n     */\n    exports.fn = function(value) {\n        var type = Object.prototype.toString.call(value);\n\n        return type === '[object Function]';\n    };\n\n},{}],4:[function(require,module,exports){\n    var is = require('./is');\n    var delegate = require('delegate');\n\n    /**\n     * Validates all params and calls the right\n     * listener function based on its target type.\n     *\n     * @param {String|HTMLElement|HTMLCollection|NodeList} target\n     * @param {String} type\n     * @param {Function} callback\n     * @return {Object}\n     */\n    function listen(target, type, callback) {\n        if (!target && !type && !callback) {\n            throw new Error('Missing required arguments');\n        }\n\n        if (!is.string(type)) {\n            throw new TypeError('Second argument must be a String');\n        }\n\n        if (!is.fn(callback)) {\n            throw new TypeError('Third argument must be a Function');\n        }\n\n        if (is.node(target)) {\n            return listenNode(target, type, callback);\n        }\n        else if (is.nodeList(target)) {\n            return listenNodeList(target, type, callback);\n        }\n        else if (is.string(target)) {\n            return listenSelector(target, type, callback);\n        }\n        else {\n            throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n        }\n    }\n\n    /**\n     * Adds an event listener to a HTML element\n     * and returns a remove listener function.\n     *\n     * @param {HTMLElement} node\n     * @param {String} type\n     * @param {Function} callback\n     * @return {Object}\n     */\n    function listenNode(node, type, callback) {\n        node.addEventListener(type, callback);\n\n        return {\n            destroy: function() {\n                node.removeEventListener(type, callback);\n            }\n        }\n    }\n\n    /**\n     * Add an event listener to a list of HTML elements\n     * and returns a remove listener function.\n     *\n     * @param {NodeList|HTMLCollection} nodeList\n     * @param {String} type\n     * @param {Function} callback\n     * @return {Object}\n     */\n    function listenNodeList(nodeList, type, callback) {\n        Array.prototype.forEach.call(nodeList, function(node) {\n            node.addEventListener(type, callback);\n        });\n\n        return {\n            destroy: function() {\n                Array.prototype.forEach.call(nodeList, function(node) {\n                    node.removeEventListener(type, callback);\n                });\n            }\n        }\n    }\n\n    /**\n     * Add an event listener to a selector\n     * and returns a remove listener function.\n     *\n     * @param {String} selector\n     * @param {String} type\n     * @param {Function} callback\n     * @return {Object}\n     */\n    function listenSelector(selector, type, callback) {\n        return delegate(document.body, selector, type, callback);\n    }\n\n    module.exports = listen;\n\n},{\"./is\":3,\"delegate\":2}],5:[function(require,module,exports){\n    function select(element) {\n        var selectedText;\n\n        if (element.nodeName === 'SELECT') {\n            element.focus();\n\n            selectedText = element.value;\n        }\n        else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n            element.focus();\n            element.setSelectionRange(0, element.value.length);\n\n            selectedText = element.value;\n        }\n        else {\n            if (element.hasAttribute('contenteditable')) {\n                element.focus();\n            }\n\n            var selection = window.getSelection();\n            var range = document.createRange();\n\n            range.selectNodeContents(element);\n            selection.removeAllRanges();\n            selection.addRange(range);\n\n            selectedText = selection.toString();\n        }\n\n        return selectedText;\n    }\n\n    module.exports = select;\n\n},{}],6:[function(require,module,exports){\n    function E () {\n        // Keep this empty so it's easier to inherit from\n        // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n    }\n\n    E.prototype = {\n        on: function (name, callback, ctx) {\n            var e = this.e || (this.e = {});\n\n            (e[name] || (e[name] = [])).push({\n                fn: callback,\n                ctx: ctx\n            });\n\n            return this;\n        },\n\n        once: function (name, callback, ctx) {\n            var self = this;\n            function listener () {\n                self.off(name, listener);\n                callback.apply(ctx, arguments);\n            };\n\n            listener._ = callback\n            return this.on(name, listener, ctx);\n        },\n\n        emit: function (name) {\n            var data = [].slice.call(arguments, 1);\n            var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n            var i = 0;\n            var len = evtArr.length;\n\n            for (i; i < len; i++) {\n                evtArr[i].fn.apply(evtArr[i].ctx, data);\n            }\n\n            return this;\n        },\n\n        off: function (name, callback) {\n            var e = this.e || (this.e = {});\n            var evts = e[name];\n            var liveEvents = [];\n\n            if (evts && callback) {\n                for (var i = 0, len = evts.length; i < len; i++) {\n                    if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n                        liveEvents.push(evts[i]);\n                }\n            }\n\n            // Remove event from queue to prevent memory leak\n            // Suggested by https://github.com/lazd\n            // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n            (liveEvents.length)\n                ? e[name] = liveEvents\n                : delete e[name];\n\n            return this;\n        }\n    };\n\n    module.exports = E;\n\n},{}],7:[function(require,module,exports){\n    (function (global, factory) {\n        if (typeof define === \"function\" && define.amd) {\n            define(['module', 'select'], factory);\n        } else if (typeof exports !== \"undefined\") {\n            factory(module, require('select'));\n        } else {\n            var mod = {\n                exports: {}\n            };\n            factory(mod, global.select);\n            global.clipboardAction = mod.exports;\n        }\n    })(this, function (module, _select) {\n        'use strict';\n\n        var _select2 = _interopRequireDefault(_select);\n\n        function _interopRequireDefault(obj) {\n            return obj && obj.__esModule ? obj : {\n                default: obj\n            };\n        }\n\n        var _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n            return typeof obj;\n        } : function (obj) {\n            return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n        };\n\n        function _classCallCheck(instance, Constructor) {\n            if (!(instance instanceof Constructor)) {\n                throw new TypeError(\"Cannot call a class as a function\");\n            }\n        }\n\n        var _createClass = function () {\n            function defineProperties(target, props) {\n                for (var i = 0; i < props.length; i++) {\n                    var descriptor = props[i];\n                    descriptor.enumerable = descriptor.enumerable || false;\n                    descriptor.configurable = true;\n                    if (\"value\" in descriptor) descriptor.writable = true;\n                    Object.defineProperty(target, descriptor.key, descriptor);\n                }\n            }\n\n            return function (Constructor, protoProps, staticProps) {\n                if (protoProps) defineProperties(Constructor.prototype, protoProps);\n                if (staticProps) defineProperties(Constructor, staticProps);\n                return Constructor;\n            };\n        }();\n\n        var ClipboardAction = function () {\n            /**\n             * @param {Object} options\n             */\n            function ClipboardAction(options) {\n                _classCallCheck(this, ClipboardAction);\n\n                this.resolveOptions(options);\n                this.initSelection();\n            }\n\n            /**\n             * Defines base properties passed from constructor.\n             * @param {Object} options\n             */\n\n\n            _createClass(ClipboardAction, [{\n                key: 'resolveOptions',\n                value: function resolveOptions() {\n                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n                    this.action = options.action;\n                    this.emitter = options.emitter;\n                    this.target = options.target;\n                    this.text = options.text;\n                    this.trigger = options.trigger;\n\n                    this.selectedText = '';\n                }\n            }, {\n                key: 'initSelection',\n                value: function initSelection() {\n                    if (this.text) {\n                        this.selectFake();\n                    } else if (this.target) {\n                        this.selectTarget();\n                    }\n                }\n            }, {\n                key: 'selectFake',\n                value: function selectFake() {\n                    var _this = this;\n\n                    var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n                    this.removeFake();\n\n                    this.fakeHandlerCallback = function () {\n                        return _this.removeFake();\n                    };\n                    this.fakeHandler = document.body.addEventListener('click', this.fakeHandlerCallback) || true;\n\n                    this.fakeElem = document.createElement('textarea');\n                    // Prevent zooming on iOS\n                    this.fakeElem.style.fontSize = '12pt';\n                    // Reset box model\n                    this.fakeElem.style.border = '0';\n                    this.fakeElem.style.padding = '0';\n                    this.fakeElem.style.margin = '0';\n                    // Move element out of screen horizontally\n                    this.fakeElem.style.position = 'absolute';\n                    this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n                    // Move element to the same position vertically\n                    var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n                    this.fakeElem.addEventListener('focus', window.scrollTo(0, yPosition));\n                    this.fakeElem.style.top = yPosition + 'px';\n\n                    this.fakeElem.setAttribute('readonly', '');\n                    this.fakeElem.value = this.text;\n\n                    document.body.appendChild(this.fakeElem);\n\n                    this.selectedText = (0, _select2.default)(this.fakeElem);\n                    this.copyText();\n                }\n            }, {\n                key: 'removeFake',\n                value: function removeFake() {\n                    if (this.fakeHandler) {\n                        document.body.removeEventListener('click', this.fakeHandlerCallback);\n                        this.fakeHandler = null;\n                        this.fakeHandlerCallback = null;\n                    }\n\n                    if (this.fakeElem) {\n                        document.body.removeChild(this.fakeElem);\n                        this.fakeElem = null;\n                    }\n                }\n            }, {\n                key: 'selectTarget',\n                value: function selectTarget() {\n                    this.selectedText = (0, _select2.default)(this.target);\n                    this.copyText();\n                }\n            }, {\n                key: 'copyText',\n                value: function copyText() {\n                    var succeeded = void 0;\n\n                    try {\n                        succeeded = document.execCommand(this.action);\n                    } catch (err) {\n                        succeeded = false;\n                    }\n\n                    this.handleResult(succeeded);\n                }\n            }, {\n                key: 'handleResult',\n                value: function handleResult(succeeded) {\n                    this.emitter.emit(succeeded ? 'success' : 'error', {\n                        action: this.action,\n                        text: this.selectedText,\n                        trigger: this.trigger,\n                        clearSelection: this.clearSelection.bind(this)\n                    });\n                }\n            }, {\n                key: 'clearSelection',\n                value: function clearSelection() {\n                    if (this.target) {\n                        this.target.blur();\n                    }\n\n                    window.getSelection().removeAllRanges();\n                }\n            }, {\n                key: 'destroy',\n                value: function destroy() {\n                    this.removeFake();\n                }\n            }, {\n                key: 'action',\n                set: function set() {\n                    var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n                    this._action = action;\n\n                    if (this._action !== 'copy' && this._action !== 'cut') {\n                        throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n                    }\n                },\n                get: function get() {\n                    return this._action;\n                }\n            }, {\n                key: 'target',\n                set: function set(target) {\n                    if (target !== undefined) {\n                        if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n                            if (this.action === 'copy' && target.hasAttribute('disabled')) {\n                                throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n                            }\n\n                            if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n                                throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n                            }\n\n                            this._target = target;\n                        } else {\n                            throw new Error('Invalid \"target\" value, use a valid Element');\n                        }\n                    }\n                },\n                get: function get() {\n                    return this._target;\n                }\n            }]);\n\n            return ClipboardAction;\n        }();\n\n        module.exports = ClipboardAction;\n    });\n\n},{\"select\":5}],8:[function(require,module,exports){\n    (function (global, factory) {\n        if (typeof define === \"function\" && define.amd) {\n            define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);\n        } else if (typeof exports !== \"undefined\") {\n            factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));\n        } else {\n            var mod = {\n                exports: {}\n            };\n            factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);\n            global.clipboard = mod.exports;\n        }\n    })(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {\n        'use strict';\n\n        var _clipboardAction2 = _interopRequireDefault(_clipboardAction);\n\n        var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);\n\n        var _goodListener2 = _interopRequireDefault(_goodListener);\n\n        function _interopRequireDefault(obj) {\n            return obj && obj.__esModule ? obj : {\n                default: obj\n            };\n        }\n\n        function _classCallCheck(instance, Constructor) {\n            if (!(instance instanceof Constructor)) {\n                throw new TypeError(\"Cannot call a class as a function\");\n            }\n        }\n\n        var _createClass = function () {\n            function defineProperties(target, props) {\n                for (var i = 0; i < props.length; i++) {\n                    var descriptor = props[i];\n                    descriptor.enumerable = descriptor.enumerable || false;\n                    descriptor.configurable = true;\n                    if (\"value\" in descriptor) descriptor.writable = true;\n                    Object.defineProperty(target, descriptor.key, descriptor);\n                }\n            }\n\n            return function (Constructor, protoProps, staticProps) {\n                if (protoProps) defineProperties(Constructor.prototype, protoProps);\n                if (staticProps) defineProperties(Constructor, staticProps);\n                return Constructor;\n            };\n        }();\n\n        function _possibleConstructorReturn(self, call) {\n            if (!self) {\n                throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n            }\n\n            return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n        }\n\n        function _inherits(subClass, superClass) {\n            if (typeof superClass !== \"function\" && superClass !== null) {\n                throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n            }\n\n            subClass.prototype = Object.create(superClass && superClass.prototype, {\n                constructor: {\n                    value: subClass,\n                    enumerable: false,\n                    writable: true,\n                    configurable: true\n                }\n            });\n            if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n        }\n\n        var Clipboard = function (_Emitter) {\n            _inherits(Clipboard, _Emitter);\n\n            /**\n             * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n             * @param {Object} options\n             */\n            function Clipboard(trigger, options) {\n                _classCallCheck(this, Clipboard);\n\n                var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n                _this.resolveOptions(options);\n                _this.listenClick(trigger);\n                return _this;\n            }\n\n            /**\n             * Defines if attributes would be resolved using internal setter functions\n             * or custom functions that were passed in the constructor.\n             * @param {Object} options\n             */\n\n\n            _createClass(Clipboard, [{\n                key: 'resolveOptions',\n                value: function resolveOptions() {\n                    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n                    this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n                    this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n                    this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n                }\n            }, {\n                key: 'listenClick',\n                value: function listenClick(trigger) {\n                    var _this2 = this;\n\n                    this.listener = (0, _goodListener2.default)(trigger, 'click', function (e) {\n                        return _this2.onClick(e);\n                    });\n                }\n            }, {\n                key: 'onClick',\n                value: function onClick(e) {\n                    var trigger = e.delegateTarget || e.currentTarget;\n\n                    if (this.clipboardAction) {\n                        this.clipboardAction = null;\n                    }\n\n                    this.clipboardAction = new _clipboardAction2.default({\n                        action: this.action(trigger),\n                        target: this.target(trigger),\n                        text: this.text(trigger),\n                        trigger: trigger,\n                        emitter: this\n                    });\n                }\n            }, {\n                key: 'defaultAction',\n                value: function defaultAction(trigger) {\n                    return getAttributeValue('action', trigger);\n                }\n            }, {\n                key: 'defaultTarget',\n                value: function defaultTarget(trigger) {\n                    var selector = getAttributeValue('target', trigger);\n\n                    if (selector) {\n                        return document.querySelector(selector);\n                    }\n                }\n            }, {\n                key: 'defaultText',\n                value: function defaultText(trigger) {\n                    return getAttributeValue('text', trigger);\n                }\n            }, {\n                key: 'destroy',\n                value: function destroy() {\n                    this.listener.destroy();\n\n                    if (this.clipboardAction) {\n                        this.clipboardAction.destroy();\n                        this.clipboardAction = null;\n                    }\n                }\n            }]);\n\n            return Clipboard;\n        }(_tinyEmitter2.default);\n\n        /**\n         * Helper function to retrieve attribute value.\n         * @param {String} suffix\n         * @param {Element} element\n         */\n        function getAttributeValue(suffix, element) {\n            var attribute = 'data-clipboard-' + suffix;\n\n            if (!element.hasAttribute(attribute)) {\n                return;\n            }\n\n            return element.getAttribute(attribute);\n        }\n\n        module.exports = Clipboard;\n    });\n\n},{\"./clipboard-action\":7,\"good-listener\":4,\"tiny-emitter\":6}]},{},[8])(8)\n});"
  },
  {
    "path": "third-party/codemirror/codemirror.css",
    "content": ".CodeMirror {\n    line-height: 1.5;\n    font-family: monospace;\n}\n\n.CodeMirror-scroll {\n    overflow: auto;\n    height: 300px;\n    /* This is needed to prevent an IE[67] bug where the scrolled content\n       is visible outside of the scrolling box. */\n    position: relative;\n}\n\n.CodeMirror-gutter {\n    position: absolute; left: 0; top: 0;\n    z-index: 10;\n    background-color: #f7f7f7;\n    border-right: 1px solid #eee;\n    min-width: 2em;\n    height: 100%;\n}\n.CodeMirror-gutter-text {\n    color: #aaa;\n    text-align: right;\n    padding: .4em .2em .4em .4em;\n    white-space: pre !important;\n}\n.CodeMirror-lines {\n    padding: .4em;\n}\n\n.CodeMirror pre {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    -o-border-radius: 0;\n    border-radius: 0;\n    border-width: 0; margin: 0; padding: 0; background: transparent;\n    font-family: inherit;\n    font-size: inherit;\n    padding: 0; margin: 0;\n    white-space: pre;\n    word-wrap: normal;\n}\n\n.CodeMirror-wrap pre {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n    line-height: 1.4;\n}\n.CodeMirror-wrap .CodeMirror-scroll {\n    overflow-x: hidden;\n}\n\n.CodeMirror textarea {\n    outline: none !important;\n}\n\n.CodeMirror pre.CodeMirror-cursor {\n    z-index: 10;\n    position: absolute;\n    visibility: hidden;\n    border-left: 1px solid black;\n    margin-top: -2px;\n}\n.CodeMirror-focused pre.CodeMirror-cursor {\n    visibility: visible;\n}\n\nspan.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused span.CodeMirror-selected { background: #d2dcf8; }\n\n.CodeMirror-searching {background: #ffa;}\n\n/* Default theme */\n\n.cm-s-default span.cm-keyword {color: #708;}\n.cm-s-default span.cm-atom {color: #219;}\n.cm-s-default span.cm-number {color: #164;}\n.cm-s-default span.cm-def {color: #00f;}\n.cm-s-default span.cm-variable {color: black;}\n.cm-s-default span.cm-variable-2 {color: #05a;}\n.cm-s-default span.cm-variable-3 {color: #085;}\n.cm-s-default span.cm-property {color: black;}\n.cm-s-default span.cm-operator {color: black;}\n.cm-s-default span.cm-comment {color: #a50;}\n.cm-s-default span.cm-string {color: #a11;}\n.cm-s-default span.cm-string-2 {color: #f50;}\n.cm-s-default span.cm-meta {color: #555;}\n.cm-s-default span.cm-error {color: #f00;}\n.cm-s-default span.cm-qualifier {color: #555;}\n.cm-s-default span.cm-builtin {color: #30a;}\n.cm-s-default span.cm-bracket {color: #cc7;}\n.cm-s-default span.cm-tag {color: #170;}\n.cm-s-default span.cm-attribute {color: #00c;}\n.cm-s-default span.cm-header {color: #a0a;}\n.cm-s-default span.cm-quote {color: #090;}\n.cm-s-default span.cm-hr {color: #999;}\n.cm-s-default span.cm-link {color: #00c;}\n\nspan.cm-header, span.cm-strong {font-weight: bold;}\nspan.cm-em {font-style: italic;}\nspan.cm-emstrong {font-style: italic; font-weight: bold;}\nspan.cm-link {text-decoration: underline;}\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n"
  },
  {
    "path": "third-party/codemirror/codemirror.js",
    "content": "// CodeMirror version 2.2\r\n//\r\n// All functions that need access to the editor's state live inside\r\n// the CodeMirror function. Below that, at the bottom of the file,\r\n// some utilities are defined.\r\n\r\n// CodeMirror is the only global var we claim\r\nvar CodeMirror = (function() {\r\n    // This is the function that produces an editor instance. It's\r\n    // closure is used to store the editor state.\r\n    function CodeMirror(place, givenOptions) {\r\n        // Determine effective options based on given values and defaults.\r\n        var options = {}, defaults = CodeMirror.defaults;\r\n        for (var opt in defaults)\r\n            if (defaults.hasOwnProperty(opt))\r\n                options[opt] = (givenOptions && givenOptions.hasOwnProperty(opt) ? givenOptions : defaults)[opt];\r\n\r\n        var targetDocument = options[\"document\"];\r\n        // The element in which the editor lives.\r\n        var wrapper = targetDocument.createElement(\"div\");\r\n        wrapper.className = \"CodeMirror\" + (options.lineWrapping ? \" CodeMirror-wrap\" : \"\");\r\n        // This mess creates the base DOM structure for the editor.\r\n        wrapper.innerHTML =\r\n            '<div style=\"overflow: hidden; position: relative; width: 3px; height: 0px;\">' + // Wraps and hides input textarea\r\n                '<textarea style=\"position: absolute; padding: 0; width: 1px;\" wrap=\"off\" ' +\r\n                'autocorrect=\"off\" autocapitalize=\"off\"></textarea></div>' +\r\n                '<div class=\"CodeMirror-scroll\" tabindex=\"-1\">' +\r\n                '<div style=\"position: relative\">' + // Set to the height of the text, causes scrolling\r\n                '<div style=\"position: relative\">' + // Moved around its parent to cover visible view\r\n                '<div class=\"CodeMirror-gutter\"><div class=\"CodeMirror-gutter-text\"></div></div>' +\r\n                // Provides positioning relative to (visible) text origin\r\n                '<div class=\"CodeMirror-lines\"><div style=\"position: relative\">' +\r\n                '<div style=\"position: absolute; width: 100%; height: 0; overflow: hidden; visibility: hidden\"></div>' +\r\n                '<pre class=\"CodeMirror-cursor\">&#160;</pre>' + // Absolutely positioned blinky cursor\r\n                '<div></div>' + // This DIV contains the actual code\r\n                '</div></div></div></div></div>';\r\n        if (place.appendChild) place.appendChild(wrapper); else place(wrapper);\r\n        // I've never seen more elegant code in my life.\r\n        var inputDiv = wrapper.firstChild, input = inputDiv.firstChild,\r\n            scroller = wrapper.lastChild, code = scroller.firstChild,\r\n            mover = code.firstChild, gutter = mover.firstChild, gutterText = gutter.firstChild,\r\n            lineSpace = gutter.nextSibling.firstChild, measure = lineSpace.firstChild,\r\n            cursor = measure.nextSibling, lineDiv = cursor.nextSibling;\r\n        themeChanged();\r\n        // Needed to hide big blue blinking cursor on Mobile Safari\r\n        if (/AppleWebKit/.test(navigator.userAgent) && /Mobile\\/\\w+/.test(navigator.userAgent)) input.style.width = \"0px\";\r\n        if (!webkit) lineSpace.draggable = true;\r\n        if (options.tabindex != null) input.tabIndex = options.tabindex;\r\n        if (!options.gutter && !options.lineNumbers) gutter.style.display = \"none\";\r\n\r\n        // Check for problem with IE innerHTML not working when we have a\r\n        // P (or similar) parent node.\r\n        try { stringWidth(\"x\"); }\r\n        catch (e) {\r\n            if (e.message.match(/runtime/i))\r\n                e = new Error(\"A CodeMirror inside a P-style element does not work in Internet Explorer. (innerHTML bug)\");\r\n            throw e;\r\n        }\r\n\r\n        // Delayed object wrap timeouts, making sure only one is active. blinker holds an interval.\r\n        var poll = new Delayed(), highlight = new Delayed(), blinker;\r\n\r\n        // mode holds a mode API object. doc is the tree of Line objects,\r\n        // work an array of lines that should be parsed, and history the\r\n        // undo history (instance of History constructor).\r\n        var mode, doc = new BranchChunk([new LeafChunk([new Line(\"\")])]), work, focused;\r\n        loadMode();\r\n        // The selection. These are always maintained to point at valid\r\n        // positions. Inverted is used to remember that the user is\r\n        // selecting bottom-to-top.\r\n        var sel = {from: {line: 0, ch: 0}, to: {line: 0, ch: 0}, inverted: false};\r\n        // Selection-related flags. shiftSelecting obviously tracks\r\n        // whether the user is holding shift.\r\n        var shiftSelecting, lastClick, lastDoubleClick, draggingText, overwrite = false;\r\n        // Variables used by startOperation/endOperation to track what\r\n        // happened during the operation.\r\n        var updateInput, userSelChange, changes, textChanged, selectionChanged, leaveInputAlone,\r\n            gutterDirty, callbacks;\r\n        // Current visible range (may be bigger than the view window).\r\n        var displayOffset = 0, showingFrom = 0, showingTo = 0, lastSizeC = 0;\r\n        // bracketHighlighted is used to remember that a backet has been\r\n        // marked.\r\n        var bracketHighlighted;\r\n        // Tracks the maximum line length so that the horizontal scrollbar\r\n        // can be kept static when scrolling.\r\n        var maxLine = \"\", maxWidth, tabText = computeTabText();\r\n\r\n        // Initialize the content.\r\n        operation(function(){setValue(options.value || \"\"); updateInput = false;})();\r\n        var history = new History();\r\n\r\n        // Register our event handlers.\r\n        connect(scroller, \"mousedown\", operation(onMouseDown));\r\n        connect(scroller, \"dblclick\", operation(onDoubleClick));\r\n        connect(lineSpace, \"dragstart\", onDragStart);\r\n        connect(lineSpace, \"selectstart\", e_preventDefault);\r\n        // Gecko browsers fire contextmenu *after* opening the menu, at\r\n        // which point we can't mess with it anymore. Context menu is\r\n        // handled in onMouseDown for Gecko.\r\n        if (!gecko) connect(scroller, \"contextmenu\", onContextMenu);\r\n        connect(scroller, \"scroll\", function() {\r\n            updateDisplay([]);\r\n            if (options.fixedGutter) gutter.style.left = scroller.scrollLeft + \"px\";\r\n            if (options.onScroll) options.onScroll(instance);\r\n        });\r\n        connect(window, \"resize\", function() {updateDisplay(true);});\r\n        connect(input, \"keyup\", operation(onKeyUp));\r\n        connect(input, \"input\", fastPoll);\r\n        connect(input, \"keydown\", operation(onKeyDown));\r\n        connect(input, \"keypress\", operation(onKeyPress));\r\n        connect(input, \"focus\", onFocus);\r\n        connect(input, \"blur\", onBlur);\r\n\r\n        connect(scroller, \"dragenter\", e_stop);\r\n        connect(scroller, \"dragover\", e_stop);\r\n        connect(scroller, \"drop\", operation(onDrop));\r\n        connect(scroller, \"paste\", function(){focusInput(); fastPoll();});\r\n        connect(input, \"paste\", fastPoll);\r\n        connect(input, \"cut\", operation(function(){replaceSelection(\"\");}));\r\n\r\n        // IE throws unspecified error in certain cases, when\r\n        // trying to access activeElement before onload\r\n        var hasFocus; try { hasFocus = (targetDocument.activeElement == input); } catch(e) { }\r\n        if (hasFocus) setTimeout(onFocus, 20);\r\n        else onBlur();\r\n\r\n        function isLine(l) {return l >= 0 && l < doc.size;}\r\n        // The instance object that we'll return. Mostly calls out to\r\n        // local functions in the CodeMirror function. Some do some extra\r\n        // range checking and/or clipping. operation is used to wrap the\r\n        // call so that changes it makes are tracked, and the display is\r\n        // updated afterwards.\r\n        var instance = wrapper.CodeMirror = {\r\n            getValue: getValue,\r\n            setValue: operation(setValue),\r\n            getSelection: getSelection,\r\n            replaceSelection: operation(replaceSelection),\r\n            focus: function(){focusInput(); onFocus(); fastPoll();},\r\n            setOption: function(option, value) {\r\n                var oldVal = options[option];\r\n                options[option] = value;\r\n                if (option == \"mode\" || option == \"indentUnit\") loadMode();\r\n                else if (option == \"readOnly\" && value) {onBlur(); input.blur();}\r\n                else if (option == \"theme\") themeChanged();\r\n                else if (option == \"lineWrapping\" && oldVal != value) operation(wrappingChanged)();\r\n                else if (option == \"tabSize\") operation(tabsChanged)();\r\n                if (option == \"lineNumbers\" || option == \"gutter\" || option == \"firstLineNumber\" || option == \"theme\")\r\n                    operation(gutterChanged)();\r\n            },\r\n            getOption: function(option) {return options[option];},\r\n            undo: operation(undo),\r\n            redo: operation(redo),\r\n            indentLine: operation(function(n, dir) {\r\n                if (isLine(n)) indentLine(n, dir == null ? \"smart\" : dir ? \"add\" : \"subtract\");\r\n            }),\r\n            indentSelection: operation(indentSelected),\r\n            historySize: function() {return {undo: history.done.length, redo: history.undone.length};},\r\n            clearHistory: function() {history = new History();},\r\n            matchBrackets: operation(function(){matchBrackets(true);}),\r\n            getTokenAt: operation(function(pos) {\r\n                pos = clipPos(pos);\r\n                return getLine(pos.line).getTokenAt(mode, getStateBefore(pos.line), pos.ch);\r\n            }),\r\n            getStateAfter: function(line) {\r\n                line = clipLine(line == null ? doc.size - 1: line);\r\n                return getStateBefore(line + 1);\r\n            },\r\n            cursorCoords: function(start){\r\n                if (start == null) start = sel.inverted;\r\n                return pageCoords(start ? sel.from : sel.to);\r\n            },\r\n            charCoords: function(pos){return pageCoords(clipPos(pos));},\r\n            coordsChar: function(coords) {\r\n                var off = eltOffset(lineSpace);\r\n                return coordsChar(coords.x - off.left, coords.y - off.top);\r\n            },\r\n            markText: operation(markText),\r\n            setBookmark: setBookmark,\r\n            setMarker: operation(addGutterMarker),\r\n            clearMarker: operation(removeGutterMarker),\r\n            setLineClass: operation(setLineClass),\r\n            hideLine: operation(function(h) {return setLineHidden(h, true);}),\r\n            showLine: operation(function(h) {return setLineHidden(h, false);}),\r\n            onDeleteLine: function(line, f) {\r\n                if (typeof line == \"number\") {\r\n                    if (!isLine(line)) return null;\r\n                    line = getLine(line);\r\n                }\r\n                (line.handlers || (line.handlers = [])).push(f);\r\n                return line;\r\n            },\r\n            lineInfo: lineInfo,\r\n            addWidget: function(pos, node, scroll, vert, horiz) {\r\n                pos = localCoords(clipPos(pos));\r\n                var top = pos.yBot, left = pos.x;\r\n                node.style.position = \"absolute\";\r\n                code.appendChild(node);\r\n                if (vert == \"over\") top = pos.y;\r\n                else if (vert == \"near\") {\r\n                    var vspace = Math.max(scroller.offsetHeight, doc.height * textHeight()),\r\n                        hspace = Math.max(code.clientWidth, lineSpace.clientWidth) - paddingLeft();\r\n                    if (pos.yBot + node.offsetHeight > vspace && pos.y > node.offsetHeight)\r\n                        top = pos.y - node.offsetHeight;\r\n                    if (left + node.offsetWidth > hspace)\r\n                        left = hspace - node.offsetWidth;\r\n                }\r\n                node.style.top = (top + paddingTop()) + \"px\";\r\n                node.style.left = node.style.right = \"\";\r\n                if (horiz == \"right\") {\r\n                    left = code.clientWidth - node.offsetWidth;\r\n                    node.style.right = \"0px\";\r\n                } else {\r\n                    if (horiz == \"left\") left = 0;\r\n                    else if (horiz == \"middle\") left = (code.clientWidth - node.offsetWidth) / 2;\r\n                    node.style.left = (left + paddingLeft()) + \"px\";\r\n                }\r\n                if (scroll)\r\n                    scrollIntoView(left, top, left + node.offsetWidth, top + node.offsetHeight);\r\n            },\r\n\r\n            lineCount: function() {return doc.size;},\r\n            clipPos: clipPos,\r\n            getCursor: function(start) {\r\n                if (start == null) start = sel.inverted;\r\n                return copyPos(start ? sel.from : sel.to);\r\n            },\r\n            somethingSelected: function() {return !posEq(sel.from, sel.to);},\r\n            setCursor: operation(function(line, ch, user) {\r\n                if (ch == null && typeof line.line == \"number\") setCursor(line.line, line.ch, user);\r\n                else setCursor(line, ch, user);\r\n            }),\r\n            setSelection: operation(function(from, to, user) {\r\n                (user ? setSelectionUser : setSelection)(clipPos(from), clipPos(to || from));\r\n            }),\r\n            getLine: function(line) {if (isLine(line)) return getLine(line).text;},\r\n            getLineHandle: function(line) {if (isLine(line)) return getLine(line);},\r\n            setLine: operation(function(line, text) {\r\n                if (isLine(line)) replaceRange(text, {line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\r\n            }),\r\n            removeLine: operation(function(line) {\r\n                if (isLine(line)) replaceRange(\"\", {line: line, ch: 0}, clipPos({line: line+1, ch: 0}));\r\n            }),\r\n            replaceRange: operation(replaceRange),\r\n            getRange: function(from, to) {return getRange(clipPos(from), clipPos(to));},\r\n\r\n            execCommand: function(cmd) {return commands[cmd](instance);},\r\n            // Stuff used by commands, probably not much use to outside code.\r\n            moveH: operation(moveH),\r\n            deleteH: operation(deleteH),\r\n            moveV: operation(moveV),\r\n            toggleOverwrite: function() {overwrite = !overwrite;},\r\n\r\n            posFromIndex: function(off) {\r\n                var lineNo = 0, ch;\r\n                doc.iter(0, doc.size, function(line) {\r\n                    var sz = line.text.length + 1;\r\n                    if (sz > off) { ch = off; return true; }\r\n                    off -= sz;\r\n                    ++lineNo;\r\n                });\r\n                return clipPos({line: lineNo, ch: ch});\r\n            },\r\n            indexFromPos: function (coords) {\r\n                if (coords.line < 0 || coords.ch < 0) return 0;\r\n                var index = coords.ch;\r\n                doc.iter(0, coords.line, function (line) {\r\n                    index += line.text.length + 1;\r\n                });\r\n                return index;\r\n            },\r\n\r\n            operation: function(f){return operation(f)();},\r\n            refresh: function(){updateDisplay(true);},\r\n            getInputField: function(){return input;},\r\n            getWrapperElement: function(){return wrapper;},\r\n            getScrollerElement: function(){return scroller;},\r\n            getGutterElement: function(){return gutter;}\r\n        };\r\n\r\n        function getLine(n) { return getLineAt(doc, n); }\r\n        function updateLineHeight(line, height) {\r\n            gutterDirty = true;\r\n            var diff = height - line.height;\r\n            for (var n = line; n; n = n.parent) n.height += diff;\r\n        }\r\n\r\n        function setValue(code) {\r\n            var top = {line: 0, ch: 0};\r\n            updateLines(top, {line: doc.size - 1, ch: getLine(doc.size-1).text.length},\r\n                splitLines(code), top, top);\r\n            updateInput = true;\r\n        }\r\n        function getValue(code) {\r\n            var text = [];\r\n            doc.iter(0, doc.size, function(line) { text.push(line.text); });\r\n            return text.join(\"\\n\");\r\n        }\r\n\r\n        function onMouseDown(e) {\r\n            setShift(e.shiftKey);\r\n            // Check whether this is a click in a widget\r\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\r\n                if (n.parentNode == code && n != mover) return;\r\n\r\n            // See if this is a click in the gutter\r\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\r\n                if (n.parentNode == gutterText) {\r\n                    if (options.onGutterClick)\r\n                        options.onGutterClick(instance, indexOf(gutterText.childNodes, n) + showingFrom, e);\r\n                    return e_preventDefault(e);\r\n                }\r\n\r\n            var start = posFromMouse(e);\r\n\r\n            switch (e_button(e)) {\r\n                case 3:\r\n                    if (gecko && !mac) onContextMenu(e);\r\n                    return;\r\n                case 2:\r\n                    if (start) setCursor(start.line, start.ch, true);\r\n                    return;\r\n            }\r\n            // For button 1, if it was clicked inside the editor\r\n            // (posFromMouse returning non-null), we have to adjust the\r\n            // selection.\r\n            if (!start) {if (e_target(e) == scroller) e_preventDefault(e); return;}\r\n\r\n            if (!focused) onFocus();\r\n\r\n            var now = +new Date;\r\n            if (lastDoubleClick && lastDoubleClick.time > now - 400 && posEq(lastDoubleClick.pos, start)) {\r\n                e_preventDefault(e);\r\n                setTimeout(focusInput, 20);\r\n                return selectLine(start.line);\r\n            } else if (lastClick && lastClick.time > now - 400 && posEq(lastClick.pos, start)) {\r\n                lastDoubleClick = {time: now, pos: start};\r\n                e_preventDefault(e);\r\n                return selectWordAt(start);\r\n            } else { lastClick = {time: now, pos: start}; }\r\n\r\n            var last = start, going;\r\n            if (dragAndDrop && !posEq(sel.from, sel.to) &&\r\n                !posLess(start, sel.from) && !posLess(sel.to, start)) {\r\n                // Let the drag handler handle this.\r\n                if (webkit) lineSpace.draggable = true;\r\n                var up = connect(targetDocument, \"mouseup\", operation(function(e2) {\r\n                    if (webkit) lineSpace.draggable = false;\r\n                    draggingText = false;\r\n                    up();\r\n                    if (Math.abs(e.clientX - e2.clientX) + Math.abs(e.clientY - e2.clientY) < 10) {\r\n                        e_preventDefault(e2);\r\n                        setCursor(start.line, start.ch, true);\r\n                        focusInput();\r\n                    }\r\n                }), true);\r\n                draggingText = true;\r\n                return;\r\n            }\r\n            e_preventDefault(e);\r\n            setCursor(start.line, start.ch, true);\r\n\r\n            function extend(e) {\r\n                var cur = posFromMouse(e, true);\r\n                if (cur && !posEq(cur, last)) {\r\n                    if (!focused) onFocus();\r\n                    last = cur;\r\n                    setSelectionUser(start, cur);\r\n                    updateInput = false;\r\n                    var visible = visibleLines();\r\n                    if (cur.line >= visible.to || cur.line < visible.from)\r\n                        going = setTimeout(operation(function(){extend(e);}), 150);\r\n                }\r\n            }\r\n\r\n            var move = connect(targetDocument, \"mousemove\", operation(function(e) {\r\n                clearTimeout(going);\r\n                e_preventDefault(e);\r\n                extend(e);\r\n            }), true);\r\n            var up = connect(targetDocument, \"mouseup\", operation(function(e) {\r\n                clearTimeout(going);\r\n                var cur = posFromMouse(e);\r\n                if (cur) setSelectionUser(start, cur);\r\n                e_preventDefault(e);\r\n                focusInput();\r\n                updateInput = true;\r\n                move(); up();\r\n            }), true);\r\n        }\r\n        function onDoubleClick(e) {\r\n            for (var n = e_target(e); n != wrapper; n = n.parentNode)\r\n                if (n.parentNode == gutterText) return e_preventDefault(e);\r\n            var start = posFromMouse(e);\r\n            if (!start) return;\r\n            lastDoubleClick = {time: +new Date, pos: start};\r\n            e_preventDefault(e);\r\n            selectWordAt(start);\r\n        }\r\n        function onDrop(e) {\r\n            e.preventDefault();\r\n            var pos = posFromMouse(e, true), files = e.dataTransfer.files;\r\n            if (!pos || options.readOnly) return;\r\n            if (files && files.length && window.FileReader && window.File) {\r\n                function loadFile(file, i) {\r\n                    var reader = new FileReader;\r\n                    reader.onload = function() {\r\n                        text[i] = reader.result;\r\n                        if (++read == n) {\r\n                            pos = clipPos(pos);\r\n                            operation(function() {\r\n                                var end = replaceRange(text.join(\"\"), pos, pos);\r\n                                setSelectionUser(pos, end);\r\n                            })();\r\n                        }\r\n                    };\r\n                    reader.readAsText(file);\r\n                }\r\n                var n = files.length, text = Array(n), read = 0;\r\n                for (var i = 0; i < n; ++i) loadFile(files[i], i);\r\n            }\r\n            else {\r\n                try {\r\n                    var text = e.dataTransfer.getData(\"Text\");\r\n                    if (text) {\r\n                        var end = replaceRange(text, pos, pos);\r\n                        var curFrom = sel.from, curTo = sel.to;\r\n                        setSelectionUser(pos, end);\r\n                        if (draggingText) replaceRange(\"\", curFrom, curTo);\r\n                        focusInput();\r\n                    }\r\n                }\r\n                catch(e){}\r\n            }\r\n        }\r\n        function onDragStart(e) {\r\n            var txt = getSelection();\r\n            // This will reset escapeElement\r\n            htmlEscape(txt);\r\n            e.dataTransfer.setDragImage(escapeElement, 0, 0);\r\n            e.dataTransfer.setData(\"Text\", txt);\r\n        }\r\n        function handleKeyBinding(e) {\r\n            var name = keyNames[e.keyCode], next = keyMap[options.keyMap].auto, bound, dropShift;\r\n            if (name == null || e.altGraphKey) {\r\n                if (next) options.keyMap = next;\r\n                return null;\r\n            }\r\n            if (e.altKey) name = \"Alt-\" + name;\r\n            if (e.ctrlKey) name = \"Ctrl-\" + name;\r\n            if (e.metaKey) name = \"Cmd-\" + name;\r\n            if (e.shiftKey && (bound = lookupKey(\"Shift-\" + name, options.extraKeys, options.keyMap))) {\r\n                dropShift = true;\r\n            } else {\r\n                bound = lookupKey(name, options.extraKeys, options.keyMap);\r\n            }\r\n            if (typeof bound == \"string\") {\r\n                if (commands.propertyIsEnumerable(bound)) bound = commands[bound];\r\n                else bound = null;\r\n            }\r\n            if (next && (bound || !isModifierKey(e))) options.keyMap = next;\r\n            if (!bound) return false;\r\n            if (dropShift) {\r\n                var prevShift = shiftSelecting;\r\n                shiftSelecting = null;\r\n                bound(instance);\r\n                shiftSelecting = prevShift;\r\n            } else bound(instance);\r\n            e_preventDefault(e);\r\n            return true;\r\n        }\r\n        var lastStoppedKey = null;\r\n        function onKeyDown(e) {\r\n            if (!focused) onFocus();\r\n            var code = e.keyCode;\r\n            // IE does strange things with escape.\r\n            if (ie && code == 27) { e.returnValue = false; }\r\n            setShift(code == 16 || e.shiftKey);\r\n            // First give onKeyEvent option a chance to handle this.\r\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\r\n            var handled = handleKeyBinding(e);\r\n            if (window.opera) {\r\n                lastStoppedKey = handled ? e.keyCode : null;\r\n                // Opera has no cut event... we try to at least catch the key combo\r\n                if (!handled && (mac ? e.metaKey : e.ctrlKey) && e.keyCode == 88)\r\n                    replaceSelection(\"\");\r\n            }\r\n        }\r\n        function onKeyPress(e) {\r\n            if (window.opera && e.keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\r\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\r\n            if (window.opera && !e.which && handleKeyBinding(e)) return;\r\n            if (options.electricChars && mode.electricChars) {\r\n                var ch = String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode);\r\n                if (mode.electricChars.indexOf(ch) > -1)\r\n                    setTimeout(operation(function() {indentLine(sel.to.line, \"smart\");}), 75);\r\n            }\r\n            fastPoll();\r\n        }\r\n        function onKeyUp(e) {\r\n            if (options.onKeyEvent && options.onKeyEvent(instance, addStop(e))) return;\r\n            if (e.keyCode == 16) shiftSelecting = null;\r\n        }\r\n\r\n        function onFocus() {\r\n            if (options.readOnly) return;\r\n            if (!focused) {\r\n                if (options.onFocus) options.onFocus(instance);\r\n                focused = true;\r\n                if (wrapper.className.search(/\\bCodeMirror-focused\\b/) == -1)\r\n                    wrapper.className += \" CodeMirror-focused\";\r\n                if (!leaveInputAlone) resetInput(true);\r\n            }\r\n            slowPoll();\r\n            restartBlink();\r\n        }\r\n        function onBlur() {\r\n            if (focused) {\r\n                if (options.onBlur) options.onBlur(instance);\r\n                focused = false;\r\n                wrapper.className = wrapper.className.replace(\" CodeMirror-focused\", \"\");\r\n            }\r\n            clearInterval(blinker);\r\n            setTimeout(function() {if (!focused) shiftSelecting = null;}, 150);\r\n        }\r\n\r\n        // Replace the range from from to to by the strings in newText.\r\n        // Afterwards, set the selection to selFrom, selTo.\r\n        function updateLines(from, to, newText, selFrom, selTo) {\r\n            if (history) {\r\n                var old = [];\r\n                doc.iter(from.line, to.line + 1, function(line) { old.push(line.text); });\r\n                history.addChange(from.line, newText.length, old);\r\n                while (history.done.length > options.undoDepth) history.done.shift();\r\n            }\r\n            updateLinesNoUndo(from, to, newText, selFrom, selTo);\r\n        }\r\n        function unredoHelper(from, to) {\r\n            var change = from.pop();\r\n            if (change) {\r\n                var replaced = [], end = change.start + change.added;\r\n                doc.iter(change.start, end, function(line) { replaced.push(line.text); });\r\n                to.push({start: change.start, added: change.old.length, old: replaced});\r\n                var pos = clipPos({line: change.start + change.old.length - 1,\r\n                    ch: editEnd(replaced[replaced.length-1], change.old[change.old.length-1])});\r\n                updateLinesNoUndo({line: change.start, ch: 0}, {line: end - 1, ch: getLine(end-1).text.length}, change.old, pos, pos);\r\n                updateInput = true;\r\n            }\r\n        }\r\n        function undo() {unredoHelper(history.done, history.undone);}\r\n        function redo() {unredoHelper(history.undone, history.done);}\r\n\r\n        function updateLinesNoUndo(from, to, newText, selFrom, selTo) {\r\n            var recomputeMaxLength = false, maxLineLength = maxLine.length;\r\n            if (!options.lineWrapping)\r\n                doc.iter(from.line, to.line, function(line) {\r\n                    if (line.text.length == maxLineLength) {recomputeMaxLength = true; return true;}\r\n                });\r\n            if (from.line != to.line || newText.length > 1) gutterDirty = true;\r\n\r\n            var nlines = to.line - from.line, firstLine = getLine(from.line), lastLine = getLine(to.line);\r\n            // First adjust the line structure, taking some care to leave highlighting intact.\r\n            if (from.ch == 0 && to.ch == 0 && newText[newText.length - 1] == \"\") {\r\n                // This is a whole-line replace. Treated specially to make\r\n                // sure line objects move the way they are supposed to.\r\n                var added = [], prevLine = null;\r\n                if (from.line) {\r\n                    prevLine = getLine(from.line - 1);\r\n                    prevLine.fixMarkEnds(lastLine);\r\n                } else lastLine.fixMarkStarts();\r\n                for (var i = 0, e = newText.length - 1; i < e; ++i)\r\n                    added.push(Line.inheritMarks(newText[i], prevLine));\r\n                if (nlines) doc.remove(from.line, nlines, callbacks);\r\n                if (added.length) doc.insert(from.line, added);\r\n            } else if (firstLine == lastLine) {\r\n                if (newText.length == 1)\r\n                    firstLine.replace(from.ch, to.ch, newText[0]);\r\n                else {\r\n                    lastLine = firstLine.split(to.ch, newText[newText.length-1]);\r\n                    firstLine.replace(from.ch, null, newText[0]);\r\n                    firstLine.fixMarkEnds(lastLine);\r\n                    var added = [];\r\n                    for (var i = 1, e = newText.length - 1; i < e; ++i)\r\n                        added.push(Line.inheritMarks(newText[i], firstLine));\r\n                    added.push(lastLine);\r\n                    doc.insert(from.line + 1, added);\r\n                }\r\n            } else if (newText.length == 1) {\r\n                firstLine.replace(from.ch, null, newText[0]);\r\n                lastLine.replace(null, to.ch, \"\");\r\n                firstLine.append(lastLine);\r\n                doc.remove(from.line + 1, nlines, callbacks);\r\n            } else {\r\n                var added = [];\r\n                firstLine.replace(from.ch, null, newText[0]);\r\n                lastLine.replace(null, to.ch, newText[newText.length-1]);\r\n                firstLine.fixMarkEnds(lastLine);\r\n                for (var i = 1, e = newText.length - 1; i < e; ++i)\r\n                    added.push(Line.inheritMarks(newText[i], firstLine));\r\n                if (nlines > 1) doc.remove(from.line + 1, nlines - 1, callbacks);\r\n                doc.insert(from.line + 1, added);\r\n            }\r\n            if (options.lineWrapping) {\r\n                var perLine = scroller.clientWidth / charWidth() - 3;\r\n                doc.iter(from.line, from.line + newText.length, function(line) {\r\n                    if (line.hidden) return;\r\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\r\n                    if (guess != line.height) updateLineHeight(line, guess);\r\n                });\r\n            } else {\r\n                doc.iter(from.line, i + newText.length, function(line) {\r\n                    var l = line.text;\r\n                    if (l.length > maxLineLength) {\r\n                        maxLine = l; maxLineLength = l.length; maxWidth = null;\r\n                        recomputeMaxLength = false;\r\n                    }\r\n                });\r\n                if (recomputeMaxLength) {\r\n                    maxLineLength = 0; maxLine = \"\"; maxWidth = null;\r\n                    doc.iter(0, doc.size, function(line) {\r\n                        var l = line.text;\r\n                        if (l.length > maxLineLength) {\r\n                            maxLineLength = l.length; maxLine = l;\r\n                        }\r\n                    });\r\n                }\r\n            }\r\n\r\n            // Add these lines to the work array, so that they will be\r\n            // highlighted. Adjust work lines if lines were added/removed.\r\n            var newWork = [], lendiff = newText.length - nlines - 1;\r\n            for (var i = 0, l = work.length; i < l; ++i) {\r\n                var task = work[i];\r\n                if (task < from.line) newWork.push(task);\r\n                else if (task > to.line) newWork.push(task + lendiff);\r\n            }\r\n            var hlEnd = from.line + Math.min(newText.length, 500);\r\n            highlightLines(from.line, hlEnd);\r\n            newWork.push(hlEnd);\r\n            work = newWork;\r\n            startWorker(100);\r\n            // Remember that these lines changed, for updating the display\r\n            changes.push({from: from.line, to: to.line + 1, diff: lendiff});\r\n            var changeObj = {from: from, to: to, text: newText};\r\n            if (textChanged) {\r\n                for (var cur = textChanged; cur.next; cur = cur.next) {}\r\n                cur.next = changeObj;\r\n            } else textChanged = changeObj;\r\n\r\n            // Update the selection\r\n            function updateLine(n) {return n <= Math.min(to.line, to.line + lendiff) ? n : n + lendiff;}\r\n            setSelection(selFrom, selTo, updateLine(sel.from.line), updateLine(sel.to.line));\r\n\r\n            // Make sure the scroll-size div has the correct height.\r\n            code.style.height = (doc.height * textHeight() + 2 * paddingTop()) + \"px\";\r\n        }\r\n\r\n        function replaceRange(code, from, to) {\r\n            from = clipPos(from);\r\n            if (!to) to = from; else to = clipPos(to);\r\n            code = splitLines(code);\r\n            function adjustPos(pos) {\r\n                if (posLess(pos, from)) return pos;\r\n                if (!posLess(to, pos)) return end;\r\n                var line = pos.line + code.length - (to.line - from.line) - 1;\r\n                var ch = pos.ch;\r\n                if (pos.line == to.line)\r\n                    ch += code[code.length-1].length - (to.ch - (to.line == from.line ? from.ch : 0));\r\n                return {line: line, ch: ch};\r\n            }\r\n            var end;\r\n            replaceRange1(code, from, to, function(end1) {\r\n                end = end1;\r\n                return {from: adjustPos(sel.from), to: adjustPos(sel.to)};\r\n            });\r\n            return end;\r\n        }\r\n        function replaceSelection(code, collapse) {\r\n            replaceRange1(splitLines(code), sel.from, sel.to, function(end) {\r\n                if (collapse == \"end\") return {from: end, to: end};\r\n                else if (collapse == \"start\") return {from: sel.from, to: sel.from};\r\n                else return {from: sel.from, to: end};\r\n            });\r\n        }\r\n        function replaceRange1(code, from, to, computeSel) {\r\n            var endch = code.length == 1 ? code[0].length + from.ch : code[code.length-1].length;\r\n            var newSel = computeSel({line: from.line + code.length - 1, ch: endch});\r\n            updateLines(from, to, code, newSel.from, newSel.to);\r\n        }\r\n\r\n        function getRange(from, to) {\r\n            var l1 = from.line, l2 = to.line;\r\n            if (l1 == l2) return getLine(l1).text.slice(from.ch, to.ch);\r\n            var code = [getLine(l1).text.slice(from.ch)];\r\n            doc.iter(l1 + 1, l2, function(line) { code.push(line.text); });\r\n            code.push(getLine(l2).text.slice(0, to.ch));\r\n            return code.join(\"\\n\");\r\n        }\r\n        function getSelection() {\r\n            return getRange(sel.from, sel.to);\r\n        }\r\n\r\n        var pollingFast = false; // Ensures slowPoll doesn't cancel fastPoll\r\n        function slowPoll() {\r\n            if (pollingFast) return;\r\n            poll.set(options.pollInterval, function() {\r\n                startOperation();\r\n                readInput();\r\n                if (focused) slowPoll();\r\n                endOperation();\r\n            });\r\n        }\r\n        function fastPoll() {\r\n            var missed = false;\r\n            pollingFast = true;\r\n            function p() {\r\n                startOperation();\r\n                var changed = readInput();\r\n                if (!changed && !missed) {missed = true; poll.set(60, p);}\r\n                else {pollingFast = false; slowPoll();}\r\n                endOperation();\r\n            }\r\n            poll.set(20, p);\r\n        }\r\n\r\n        // Previnput is a hack to work with IME. If we reset the textarea\r\n        // on every change, that breaks IME. So we look for changes\r\n        // compared to the previous content instead. (Modern browsers have\r\n        // events that indicate IME taking place, but these are not widely\r\n        // supported or compatible enough yet to rely on.)\r\n        var prevInput = \"\";\r\n        function readInput() {\r\n            if (leaveInputAlone || !focused || hasSelection(input)) return false;\r\n            var text = input.value;\r\n            if (text == prevInput) return false;\r\n            shiftSelecting = null;\r\n            var same = 0, l = Math.min(prevInput.length, text.length);\r\n            while (same < l && prevInput[same] == text[same]) ++same;\r\n            if (same < prevInput.length)\r\n                sel.from = {line: sel.from.line, ch: sel.from.ch - (prevInput.length - same)};\r\n            else if (overwrite && posEq(sel.from, sel.to))\r\n                sel.to = {line: sel.to.line, ch: Math.min(getLine(sel.to.line).text.length, sel.to.ch + (text.length - same))};\r\n            replaceSelection(text.slice(same), \"end\");\r\n            prevInput = text;\r\n            return true;\r\n        }\r\n        function resetInput(user) {\r\n            if (!posEq(sel.from, sel.to)) {\r\n                prevInput = \"\";\r\n                input.value = getSelection();\r\n                input.select();\r\n            } else if (user) prevInput = input.value = \"\";\r\n        }\r\n\r\n        function focusInput() {\r\n            if (!options.readOnly) input.focus();\r\n        }\r\n\r\n        function scrollEditorIntoView() {\r\n            if (!cursor.getBoundingClientRect) return;\r\n            var rect = cursor.getBoundingClientRect();\r\n            // IE returns bogus coordinates when the instance sits inside of an iframe and the cursor is hidden\r\n            if (ie && rect.top == rect.bottom) return;\r\n            var winH = window.innerHeight || Math.max(document.body.offsetHeight, document.documentElement.offsetHeight);\r\n            if (rect.top < 0 || rect.bottom > winH) cursor.scrollIntoView();\r\n        }\r\n        function scrollCursorIntoView() {\r\n            var cursor = localCoords(sel.inverted ? sel.from : sel.to);\r\n            var x = options.lineWrapping ? Math.min(cursor.x, lineSpace.offsetWidth) : cursor.x;\r\n            return scrollIntoView(x, cursor.y, x, cursor.yBot);\r\n        }\r\n        function scrollIntoView(x1, y1, x2, y2) {\r\n            var pl = paddingLeft(), pt = paddingTop(), lh = textHeight();\r\n            y1 += pt; y2 += pt; x1 += pl; x2 += pl;\r\n            var screen = scroller.clientHeight, screentop = scroller.scrollTop, scrolled = false, result = true;\r\n            if (y1 < screentop) {scroller.scrollTop = Math.max(0, y1 - 2*lh); scrolled = true;}\r\n            else if (y2 > screentop + screen) {scroller.scrollTop = y2 + lh - screen; scrolled = true;}\r\n\r\n            var screenw = scroller.clientWidth, screenleft = scroller.scrollLeft;\r\n            var gutterw = options.fixedGutter ? gutter.clientWidth : 0;\r\n            if (x1 < screenleft + gutterw) {\r\n                if (x1 < 50) x1 = 0;\r\n                scroller.scrollLeft = Math.max(0, x1 - 10 - gutterw);\r\n                scrolled = true;\r\n            }\r\n            else if (x2 > screenw + screenleft - 3) {\r\n                scroller.scrollLeft = x2 + 10 - screenw;\r\n                scrolled = true;\r\n                if (x2 > code.clientWidth) result = false;\r\n            }\r\n            if (scrolled && options.onScroll) options.onScroll(instance);\r\n            return result;\r\n        }\r\n\r\n        function visibleLines() {\r\n            var lh = textHeight(), top = scroller.scrollTop - paddingTop();\r\n            var from_height = Math.max(0, Math.floor(top / lh));\r\n            var to_height = Math.ceil((top + scroller.clientHeight) / lh);\r\n            return {from: lineAtHeight(doc, from_height),\r\n                to: lineAtHeight(doc, to_height)};\r\n        }\r\n        // Uses a set of changes plus the current scroll position to\r\n        // determine which DOM updates have to be made, and makes the\r\n        // updates.\r\n        function updateDisplay(changes, suppressCallback) {\r\n            if (!scroller.clientWidth) {\r\n                showingFrom = showingTo = displayOffset = 0;\r\n                return;\r\n            }\r\n            // Compute the new visible window\r\n            var visible = visibleLines();\r\n            // Bail out if the visible area is already rendered and nothing changed.\r\n            if (changes !== true && changes.length == 0 && visible.from >= showingFrom && visible.to <= showingTo) return;\r\n            var from = Math.max(visible.from - 100, 0), to = Math.min(doc.size, visible.to + 100);\r\n            if (showingFrom < from && from - showingFrom < 20) from = showingFrom;\r\n            if (showingTo > to && showingTo - to < 20) to = Math.min(doc.size, showingTo);\r\n\r\n            // Create a range of theoretically intact lines, and punch holes\r\n            // in that using the change info.\r\n            var intact = changes === true ? [] :\r\n                computeIntact([{from: showingFrom, to: showingTo, domStart: 0}], changes);\r\n            // Clip off the parts that won't be visible\r\n            var intactLines = 0;\r\n            for (var i = 0; i < intact.length; ++i) {\r\n                var range = intact[i];\r\n                if (range.from < from) {range.domStart += (from - range.from); range.from = from;}\r\n                if (range.to > to) range.to = to;\r\n                if (range.from >= range.to) intact.splice(i--, 1);\r\n                else intactLines += range.to - range.from;\r\n            }\r\n            if (intactLines == to - from) return;\r\n            intact.sort(function(a, b) {return a.domStart - b.domStart;});\r\n\r\n            var th = textHeight(), gutterDisplay = gutter.style.display;\r\n            lineDiv.style.display = gutter.style.display = \"none\";\r\n            patchDisplay(from, to, intact);\r\n            lineDiv.style.display = \"\";\r\n\r\n            // Position the mover div to align with the lines it's supposed\r\n            // to be showing (which will cover the visible display)\r\n            var different = from != showingFrom || to != showingTo || lastSizeC != scroller.clientHeight + th;\r\n            // This is just a bogus formula that detects when the editor is\r\n            // resized or the font size changes.\r\n            if (different) lastSizeC = scroller.clientHeight + th;\r\n            showingFrom = from; showingTo = to;\r\n            displayOffset = heightAtLine(doc, from);\r\n            mover.style.top = (displayOffset * th) + \"px\";\r\n            code.style.height = (doc.height * th + 2 * paddingTop()) + \"px\";\r\n\r\n            // Since this is all rather error prone, it is honoured with the\r\n            // only assertion in the whole file.\r\n            if (lineDiv.childNodes.length != showingTo - showingFrom)\r\n                throw new Error(\"BAD PATCH! \" + JSON.stringify(intact) + \" size=\" + (showingTo - showingFrom) +\r\n                    \" nodes=\" + lineDiv.childNodes.length);\r\n\r\n            if (options.lineWrapping) {\r\n                maxWidth = scroller.clientWidth;\r\n                var curNode = lineDiv.firstChild;\r\n                doc.iter(showingFrom, showingTo, function(line) {\r\n                    if (!line.hidden) {\r\n                        var height = Math.round(curNode.offsetHeight / th) || 1;\r\n                        if (line.height != height) {updateLineHeight(line, height); gutterDirty = true;}\r\n                    }\r\n                    curNode = curNode.nextSibling;\r\n                });\r\n            } else {\r\n                if (maxWidth == null) maxWidth = stringWidth(maxLine);\r\n                if (maxWidth > scroller.clientWidth) {\r\n                    lineSpace.style.width = maxWidth + \"px\";\r\n                    // Needed to prevent odd wrapping/hiding of widgets placed in here.\r\n                    code.style.width = \"\";\r\n                    code.style.width = scroller.scrollWidth + \"px\";\r\n                } else {\r\n                    lineSpace.style.width = code.style.width = \"\";\r\n                }\r\n            }\r\n            gutter.style.display = gutterDisplay;\r\n            if (different || gutterDirty) updateGutter();\r\n            updateCursor();\r\n            if (!suppressCallback && options.onUpdate) options.onUpdate(instance);\r\n            return true;\r\n        }\r\n\r\n        function computeIntact(intact, changes) {\r\n            for (var i = 0, l = changes.length || 0; i < l; ++i) {\r\n                var change = changes[i], intact2 = [], diff = change.diff || 0;\r\n                for (var j = 0, l2 = intact.length; j < l2; ++j) {\r\n                    var range = intact[j];\r\n                    if (change.to <= range.from && change.diff)\r\n                        intact2.push({from: range.from + diff, to: range.to + diff,\r\n                            domStart: range.domStart});\r\n                    else if (change.to <= range.from || change.from >= range.to)\r\n                        intact2.push(range);\r\n                    else {\r\n                        if (change.from > range.from)\r\n                            intact2.push({from: range.from, to: change.from, domStart: range.domStart});\r\n                        if (change.to < range.to)\r\n                            intact2.push({from: change.to + diff, to: range.to + diff,\r\n                                domStart: range.domStart + (change.to - range.from)});\r\n                    }\r\n                }\r\n                intact = intact2;\r\n            }\r\n            return intact;\r\n        }\r\n\r\n        function patchDisplay(from, to, intact) {\r\n            // The first pass removes the DOM nodes that aren't intact.\r\n            if (!intact.length) lineDiv.innerHTML = \"\";\r\n            else {\r\n                function killNode(node) {\r\n                    var tmp = node.nextSibling;\r\n                    node.parentNode.removeChild(node);\r\n                    return tmp;\r\n                }\r\n                var domPos = 0, curNode = lineDiv.firstChild, n;\r\n                for (var i = 0; i < intact.length; ++i) {\r\n                    var cur = intact[i];\r\n                    while (cur.domStart > domPos) {curNode = killNode(curNode); domPos++;}\r\n                    for (var j = 0, e = cur.to - cur.from; j < e; ++j) {curNode = curNode.nextSibling; domPos++;}\r\n                }\r\n                while (curNode) curNode = killNode(curNode);\r\n            }\r\n            // This pass fills in the lines that actually changed.\r\n            var nextIntact = intact.shift(), curNode = lineDiv.firstChild, j = from;\r\n            var sfrom = sel.from.line, sto = sel.to.line, inSel = sfrom < from && sto >= from;\r\n            var scratch = targetDocument.createElement(\"div\"), newElt;\r\n            doc.iter(from, to, function(line) {\r\n                var ch1 = null, ch2 = null;\r\n                if (inSel) {\r\n                    ch1 = 0;\r\n                    if (sto == j) {inSel = false; ch2 = sel.to.ch;}\r\n                } else if (sfrom == j) {\r\n                    if (sto == j) {ch1 = sel.from.ch; ch2 = sel.to.ch;}\r\n                    else {inSel = true; ch1 = sel.from.ch;}\r\n                }\r\n                if (nextIntact && nextIntact.to == j) nextIntact = intact.shift();\r\n                if (!nextIntact || nextIntact.from > j) {\r\n                    if (line.hidden) scratch.innerHTML = \"<pre></pre>\";\r\n                    else scratch.innerHTML = line.getHTML(ch1, ch2, true, tabText);\r\n                    lineDiv.insertBefore(scratch.firstChild, curNode);\r\n                } else {\r\n                    curNode = curNode.nextSibling;\r\n                }\r\n                ++j;\r\n            });\r\n        }\r\n\r\n        function updateGutter() {\r\n            if (!options.gutter && !options.lineNumbers) return;\r\n            var hText = mover.offsetHeight, hEditor = scroller.clientHeight;\r\n            gutter.style.height = (hText - hEditor < 2 ? hEditor : hText) + \"px\";\r\n            var html = [], i = showingFrom;\r\n            doc.iter(showingFrom, Math.max(showingTo, showingFrom + 1), function(line) {\r\n                if (line.hidden) {\r\n                    html.push(\"<pre></pre>\");\r\n                } else {\r\n                    var marker = line.gutterMarker;\r\n                    var text = options.lineNumbers ? i + options.firstLineNumber : null;\r\n                    if (marker && marker.text)\r\n                        text = marker.text.replace(\"%N%\", text != null ? text : \"\");\r\n                    else if (text == null)\r\n                        text = \"\\u00a0\";\r\n                    html.push((marker && marker.style ? '<pre class=\"' + marker.style + '\">' : \"<pre>\"), text);\r\n                    for (var j = 1; j < line.height; ++j) html.push(\"<br/>&#160;\");\r\n                    html.push(\"</pre>\");\r\n                }\r\n                ++i;\r\n            });\r\n            gutter.style.display = \"none\";\r\n            gutterText.innerHTML = html.join(\"\");\r\n            var minwidth = String(doc.size).length, firstNode = gutterText.firstChild, val = eltText(firstNode), pad = \"\";\r\n            while (val.length + pad.length < minwidth) pad += \"\\u00a0\";\r\n            if (pad) firstNode.insertBefore(targetDocument.createTextNode(pad), firstNode.firstChild);\r\n            gutter.style.display = \"\";\r\n            lineSpace.style.marginLeft = gutter.offsetWidth + \"px\";\r\n            gutterDirty = false;\r\n        }\r\n        function updateCursor() {\r\n            var head = sel.inverted ? sel.from : sel.to, lh = textHeight();\r\n            var pos = localCoords(head, true);\r\n            var wrapOff = eltOffset(wrapper), lineOff = eltOffset(lineDiv);\r\n            inputDiv.style.top = (pos.y + lineOff.top - wrapOff.top) + \"px\";\r\n            inputDiv.style.left = (pos.x + lineOff.left - wrapOff.left) + \"px\";\r\n            if (posEq(sel.from, sel.to)) {\r\n                cursor.style.top = pos.y + \"px\";\r\n                cursor.style.left = (options.lineWrapping ? Math.min(pos.x, lineSpace.offsetWidth) : pos.x) + \"px\";\r\n                cursor.style.display = \"\";\r\n            }\r\n            else cursor.style.display = \"none\";\r\n        }\r\n\r\n        function setShift(val) {\r\n            if (val) shiftSelecting = shiftSelecting || (sel.inverted ? sel.to : sel.from);\r\n            else shiftSelecting = null;\r\n        }\r\n        function setSelectionUser(from, to) {\r\n            var sh = shiftSelecting && clipPos(shiftSelecting);\r\n            if (sh) {\r\n                if (posLess(sh, from)) from = sh;\r\n                else if (posLess(to, sh)) to = sh;\r\n            }\r\n            setSelection(from, to);\r\n            userSelChange = true;\r\n        }\r\n        // Update the selection. Last two args are only used by\r\n        // updateLines, since they have to be expressed in the line\r\n        // numbers before the update.\r\n        function setSelection(from, to, oldFrom, oldTo) {\r\n            goalColumn = null;\r\n            if (oldFrom == null) {oldFrom = sel.from.line; oldTo = sel.to.line;}\r\n            if (posEq(sel.from, from) && posEq(sel.to, to)) return;\r\n            if (posLess(to, from)) {var tmp = to; to = from; from = tmp;}\r\n\r\n            // Skip over hidden lines.\r\n            if (from.line != oldFrom) from = skipHidden(from, oldFrom, sel.from.ch);\r\n            if (to.line != oldTo) to = skipHidden(to, oldTo, sel.to.ch);\r\n\r\n            if (posEq(from, to)) sel.inverted = false;\r\n            else if (posEq(from, sel.to)) sel.inverted = false;\r\n            else if (posEq(to, sel.from)) sel.inverted = true;\r\n\r\n            // Some ugly logic used to only mark the lines that actually did\r\n            // see a change in selection as changed, rather than the whole\r\n            // selected range.\r\n            if (posEq(from, to)) {\r\n                if (!posEq(sel.from, sel.to))\r\n                    changes.push({from: oldFrom, to: oldTo + 1});\r\n            }\r\n            else if (posEq(sel.from, sel.to)) {\r\n                changes.push({from: from.line, to: to.line + 1});\r\n            }\r\n            else {\r\n                if (!posEq(from, sel.from)) {\r\n                    if (from.line < oldFrom)\r\n                        changes.push({from: from.line, to: Math.min(to.line, oldFrom) + 1});\r\n                    else\r\n                        changes.push({from: oldFrom, to: Math.min(oldTo, from.line) + 1});\r\n                }\r\n                if (!posEq(to, sel.to)) {\r\n                    if (to.line < oldTo)\r\n                        changes.push({from: Math.max(oldFrom, from.line), to: oldTo + 1});\r\n                    else\r\n                        changes.push({from: Math.max(from.line, oldTo), to: to.line + 1});\r\n                }\r\n            }\r\n            sel.from = from; sel.to = to;\r\n            selectionChanged = true;\r\n        }\r\n        function skipHidden(pos, oldLine, oldCh) {\r\n            function getNonHidden(dir) {\r\n                var lNo = pos.line + dir, end = dir == 1 ? doc.size : -1;\r\n                while (lNo != end) {\r\n                    var line = getLine(lNo);\r\n                    if (!line.hidden) {\r\n                        var ch = pos.ch;\r\n                        if (ch > oldCh || ch > line.text.length) ch = line.text.length;\r\n                        return {line: lNo, ch: ch};\r\n                    }\r\n                    lNo += dir;\r\n                }\r\n            }\r\n            var line = getLine(pos.line);\r\n            if (!line.hidden) return pos;\r\n            if (pos.line >= oldLine) return getNonHidden(1) || getNonHidden(-1);\r\n            else return getNonHidden(-1) || getNonHidden(1);\r\n        }\r\n        function setCursor(line, ch, user) {\r\n            var pos = clipPos({line: line, ch: ch || 0});\r\n            (user ? setSelectionUser : setSelection)(pos, pos);\r\n        }\r\n\r\n        function clipLine(n) {return Math.max(0, Math.min(n, doc.size-1));}\r\n        function clipPos(pos) {\r\n            if (pos.line < 0) return {line: 0, ch: 0};\r\n            if (pos.line >= doc.size) return {line: doc.size-1, ch: getLine(doc.size-1).text.length};\r\n            var ch = pos.ch, linelen = getLine(pos.line).text.length;\r\n            if (ch == null || ch > linelen) return {line: pos.line, ch: linelen};\r\n            else if (ch < 0) return {line: pos.line, ch: 0};\r\n            else return pos;\r\n        }\r\n\r\n        function findPosH(dir, unit) {\r\n            var end = sel.inverted ? sel.from : sel.to, line = end.line, ch = end.ch;\r\n            var lineObj = getLine(line);\r\n            function findNextLine() {\r\n                for (var l = line + dir, e = dir < 0 ? -1 : doc.size; l != e; l += dir) {\r\n                    var lo = getLine(l);\r\n                    if (!lo.hidden) { line = l; lineObj = lo; return true; }\r\n                }\r\n            }\r\n            function moveOnce(boundToLine) {\r\n                if (ch == (dir < 0 ? 0 : lineObj.text.length)) {\r\n                    if (!boundToLine && findNextLine()) ch = dir < 0 ? lineObj.text.length : 0;\r\n                    else return false;\r\n                } else ch += dir;\r\n                return true;\r\n            }\r\n            if (unit == \"char\") moveOnce();\r\n            else if (unit == \"column\") moveOnce(true);\r\n            else if (unit == \"word\") {\r\n                var sawWord = false;\r\n                for (;;) {\r\n                    if (dir < 0) if (!moveOnce()) break;\r\n                    if (isWordChar(lineObj.text.charAt(ch))) sawWord = true;\r\n                    else if (sawWord) {if (dir < 0) {dir = 1; moveOnce();} break;}\r\n                    if (dir > 0) if (!moveOnce()) break;\r\n                }\r\n            }\r\n            return {line: line, ch: ch};\r\n        }\r\n        function moveH(dir, unit) {\r\n            var pos = dir < 0 ? sel.from : sel.to;\r\n            if (shiftSelecting || posEq(sel.from, sel.to)) pos = findPosH(dir, unit);\r\n            setCursor(pos.line, pos.ch, true);\r\n        }\r\n        function deleteH(dir, unit) {\r\n            if (!posEq(sel.from, sel.to)) replaceRange(\"\", sel.from, sel.to);\r\n            else if (dir < 0) replaceRange(\"\", findPosH(dir, unit), sel.to);\r\n            else replaceRange(\"\", sel.from, findPosH(dir, unit));\r\n            userSelChange = true;\r\n        }\r\n        var goalColumn = null;\r\n        function moveV(dir, unit) {\r\n            var dist = 0, pos = localCoords(sel.inverted ? sel.from : sel.to, true);\r\n            if (goalColumn != null) pos.x = goalColumn;\r\n            if (unit == \"page\") dist = scroller.clientHeight;\r\n            else if (unit == \"line\") dist = textHeight();\r\n            var target = coordsChar(pos.x, pos.y + dist * dir + 2);\r\n            setCursor(target.line, target.ch, true);\r\n            goalColumn = pos.x;\r\n        }\r\n\r\n        function selectWordAt(pos) {\r\n            var line = getLine(pos.line).text;\r\n            var start = pos.ch, end = pos.ch;\r\n            while (start > 0 && isWordChar(line.charAt(start - 1))) --start;\r\n            while (end < line.length && isWordChar(line.charAt(end))) ++end;\r\n            setSelectionUser({line: pos.line, ch: start}, {line: pos.line, ch: end});\r\n        }\r\n        function selectLine(line) {\r\n            setSelectionUser({line: line, ch: 0}, {line: line, ch: getLine(line).text.length});\r\n        }\r\n        function indentSelected(mode) {\r\n            if (posEq(sel.from, sel.to)) return indentLine(sel.from.line, mode);\r\n            var e = sel.to.line - (sel.to.ch ? 0 : 1);\r\n            for (var i = sel.from.line; i <= e; ++i) indentLine(i, mode);\r\n        }\r\n\r\n        function indentLine(n, how) {\r\n            if (!how) how = \"add\";\r\n            if (how == \"smart\") {\r\n                if (!mode.indent) how = \"prev\";\r\n                else var state = getStateBefore(n);\r\n            }\r\n\r\n            var line = getLine(n), curSpace = line.indentation(options.tabSize),\r\n                curSpaceString = line.text.match(/^\\s*/)[0], indentation;\r\n            if (how == \"prev\") {\r\n                if (n) indentation = getLine(n-1).indentation(options.tabSize);\r\n                else indentation = 0;\r\n            }\r\n            else if (how == \"smart\") indentation = mode.indent(state, line.text.slice(curSpaceString.length), line.text);\r\n            else if (how == \"add\") indentation = curSpace + options.indentUnit;\r\n            else if (how == \"subtract\") indentation = curSpace - options.indentUnit;\r\n            indentation = Math.max(0, indentation);\r\n            var diff = indentation - curSpace;\r\n\r\n            if (!diff) {\r\n                if (sel.from.line != n && sel.to.line != n) return;\r\n                var indentString = curSpaceString;\r\n            }\r\n            else {\r\n                var indentString = \"\", pos = 0;\r\n                if (options.indentWithTabs)\r\n                    for (var i = Math.floor(indentation / options.tabSize); i; --i) {pos += options.tabSize; indentString += \"\\t\";}\r\n                while (pos < indentation) {++pos; indentString += \" \";}\r\n            }\r\n\r\n            replaceRange(indentString, {line: n, ch: 0}, {line: n, ch: curSpaceString.length});\r\n        }\r\n\r\n        function loadMode() {\r\n            mode = CodeMirror.getMode(options, options.mode);\r\n            doc.iter(0, doc.size, function(line) { line.stateAfter = null; });\r\n            work = [0];\r\n            startWorker();\r\n        }\r\n        function gutterChanged() {\r\n            var visible = options.gutter || options.lineNumbers;\r\n            gutter.style.display = visible ? \"\" : \"none\";\r\n            if (visible) gutterDirty = true;\r\n            else lineDiv.parentNode.style.marginLeft = 0;\r\n        }\r\n        function wrappingChanged(from, to) {\r\n            if (options.lineWrapping) {\r\n                wrapper.className += \" CodeMirror-wrap\";\r\n                var perLine = scroller.clientWidth / charWidth() - 3;\r\n                doc.iter(0, doc.size, function(line) {\r\n                    if (line.hidden) return;\r\n                    var guess = Math.ceil(line.text.length / perLine) || 1;\r\n                    if (guess != 1) updateLineHeight(line, guess);\r\n                });\r\n                lineSpace.style.width = code.style.width = \"\";\r\n            } else {\r\n                wrapper.className = wrapper.className.replace(\" CodeMirror-wrap\", \"\");\r\n                maxWidth = null; maxLine = \"\";\r\n                doc.iter(0, doc.size, function(line) {\r\n                    if (line.height != 1 && !line.hidden) updateLineHeight(line, 1);\r\n                    if (line.text.length > maxLine.length) maxLine = line.text;\r\n                });\r\n            }\r\n            changes.push({from: 0, to: doc.size});\r\n        }\r\n        function computeTabText() {\r\n            for (var str = '<span class=\"cm-tab\">', i = 0; i < options.tabSize; ++i) str += \" \";\r\n            return str + \"</span>\";\r\n        }\r\n        function tabsChanged() {\r\n            tabText = computeTabText();\r\n            updateDisplay(true);\r\n        }\r\n        function themeChanged() {\r\n            scroller.className = scroller.className.replace(/\\s*cm-s-\\w+/g, \"\") +\r\n                options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\r\n        }\r\n\r\n        function TextMarker() { this.set = []; }\r\n        TextMarker.prototype.clear = operation(function() {\r\n            var min = Infinity, max = -Infinity;\r\n            for (var i = 0, e = this.set.length; i < e; ++i) {\r\n                var line = this.set[i], mk = line.marked;\r\n                if (!mk || !line.parent) continue;\r\n                var lineN = lineNo(line);\r\n                min = Math.min(min, lineN); max = Math.max(max, lineN);\r\n                for (var j = 0; j < mk.length; ++j)\r\n                    if (mk[j].set == this.set) mk.splice(j--, 1);\r\n            }\r\n            if (min != Infinity)\r\n                changes.push({from: min, to: max + 1});\r\n        });\r\n        TextMarker.prototype.find = function() {\r\n            var from, to;\r\n            for (var i = 0, e = this.set.length; i < e; ++i) {\r\n                var line = this.set[i], mk = line.marked;\r\n                for (var j = 0; j < mk.length; ++j) {\r\n                    var mark = mk[j];\r\n                    if (mark.set == this.set) {\r\n                        if (mark.from != null || mark.to != null) {\r\n                            var found = lineNo(line);\r\n                            if (found != null) {\r\n                                if (mark.from != null) from = {line: found, ch: mark.from};\r\n                                if (mark.to != null) to = {line: found, ch: mark.to};\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            return {from: from, to: to};\r\n        };\r\n\r\n        function markText(from, to, className) {\r\n            from = clipPos(from); to = clipPos(to);\r\n            var tm = new TextMarker();\r\n            function add(line, from, to, className) {\r\n                getLine(line).addMark(new MarkedText(from, to, className, tm.set));\r\n            }\r\n            if (from.line == to.line) add(from.line, from.ch, to.ch, className);\r\n            else {\r\n                add(from.line, from.ch, null, className);\r\n                for (var i = from.line + 1, e = to.line; i < e; ++i)\r\n                    add(i, null, null, className);\r\n                add(to.line, null, to.ch, className);\r\n            }\r\n            changes.push({from: from.line, to: to.line + 1});\r\n            return tm;\r\n        }\r\n\r\n        function setBookmark(pos) {\r\n            pos = clipPos(pos);\r\n            var bm = new Bookmark(pos.ch);\r\n            getLine(pos.line).addMark(bm);\r\n            return bm;\r\n        }\r\n\r\n        function addGutterMarker(line, text, className) {\r\n            if (typeof line == \"number\") line = getLine(clipLine(line));\r\n            line.gutterMarker = {text: text, style: className};\r\n            gutterDirty = true;\r\n            return line;\r\n        }\r\n        function removeGutterMarker(line) {\r\n            if (typeof line == \"number\") line = getLine(clipLine(line));\r\n            line.gutterMarker = null;\r\n            gutterDirty = true;\r\n        }\r\n\r\n        function changeLine(handle, op) {\r\n            var no = handle, line = handle;\r\n            if (typeof handle == \"number\") line = getLine(clipLine(handle));\r\n            else no = lineNo(handle);\r\n            if (no == null) return null;\r\n            if (op(line, no)) changes.push({from: no, to: no + 1});\r\n            else return null;\r\n            return line;\r\n        }\r\n        function setLineClass(handle, className) {\r\n            return changeLine(handle, function(line) {\r\n                if (line.className != className) {\r\n                    line.className = className;\r\n                    return true;\r\n                }\r\n            });\r\n        }\r\n        function setLineHidden(handle, hidden) {\r\n            return changeLine(handle, function(line, no) {\r\n                if (line.hidden != hidden) {\r\n                    line.hidden = hidden;\r\n                    updateLineHeight(line, hidden ? 0 : 1);\r\n                    if (hidden && (sel.from.line == no || sel.to.line == no))\r\n                        setSelection(skipHidden(sel.from, sel.from.line, sel.from.ch),\r\n                            skipHidden(sel.to, sel.to.line, sel.to.ch));\r\n                    return (gutterDirty = true);\r\n                }\r\n            });\r\n        }\r\n\r\n        function lineInfo(line) {\r\n            if (typeof line == \"number\") {\r\n                if (!isLine(line)) return null;\r\n                var n = line;\r\n                line = getLine(line);\r\n                if (!line) return null;\r\n            }\r\n            else {\r\n                var n = lineNo(line);\r\n                if (n == null) return null;\r\n            }\r\n            var marker = line.gutterMarker;\r\n            return {line: n, handle: line, text: line.text, markerText: marker && marker.text,\r\n                markerClass: marker && marker.style, lineClass: line.className};\r\n        }\r\n\r\n        function stringWidth(str) {\r\n            measure.innerHTML = \"<pre><span>x</span></pre>\";\r\n            measure.firstChild.firstChild.firstChild.nodeValue = str;\r\n            return measure.firstChild.firstChild.offsetWidth || 10;\r\n        }\r\n        // These are used to go from pixel positions to character\r\n        // positions, taking varying character widths into account.\r\n        function charFromX(line, x) {\r\n            if (x <= 0) return 0;\r\n            var lineObj = getLine(line), text = lineObj.text;\r\n            function getX(len) {\r\n                measure.innerHTML = \"<pre><span>\" + lineObj.getHTML(null, null, false, tabText, len) + \"</span></pre>\";\r\n                return measure.firstChild.firstChild.offsetWidth;\r\n            }\r\n            var from = 0, fromX = 0, to = text.length, toX;\r\n            // Guess a suitable upper bound for our search.\r\n            var estimated = Math.min(to, Math.ceil(x / charWidth()));\r\n            for (;;) {\r\n                var estX = getX(estimated);\r\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\r\n                else {toX = estX; to = estimated; break;}\r\n            }\r\n            if (x > toX) return to;\r\n            // Try to guess a suitable lower bound as well.\r\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\r\n            if (estX < x) {from = estimated; fromX = estX;}\r\n            // Do a binary search between these bounds.\r\n            for (;;) {\r\n                if (to - from <= 1) return (toX - x > x - fromX) ? from : to;\r\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\r\n                if (middleX > x) {to = middle; toX = middleX;}\r\n                else {from = middle; fromX = middleX;}\r\n            }\r\n        }\r\n\r\n        var tempId = Math.floor(Math.random() * 0xffffff).toString(16);\r\n        function measureLine(line, ch) {\r\n            var extra = \"\";\r\n            // Include extra text at the end to make sure the measured line is wrapped in the right way.\r\n            if (options.lineWrapping) {\r\n                var end = line.text.indexOf(\" \", ch + 2);\r\n                extra = htmlEscape(line.text.slice(ch + 1, end < 0 ? line.text.length : end + (ie ? 5 : 0)));\r\n            }\r\n            measure.innerHTML = \"<pre>\" + line.getHTML(null, null, false, tabText, ch) +\r\n                '<span id=\"CodeMirror-temp-' + tempId + '\">' + htmlEscape(line.text.charAt(ch) || \" \") + \"</span>\" +\r\n                extra + \"</pre>\";\r\n            var elt = document.getElementById(\"CodeMirror-temp-\" + tempId);\r\n            var top = elt.offsetTop, left = elt.offsetLeft;\r\n            // Older IEs report zero offsets for spans directly after a wrap\r\n            if (ie && ch && top == 0 && left == 0) {\r\n                var backup = document.createElement(\"span\");\r\n                backup.innerHTML = \"x\";\r\n                elt.parentNode.insertBefore(backup, elt.nextSibling);\r\n                top = backup.offsetTop;\r\n            }\r\n            return {top: top, left: left};\r\n        }\r\n        function localCoords(pos, inLineWrap) {\r\n            var x, lh = textHeight(), y = lh * (heightAtLine(doc, pos.line) - (inLineWrap ? displayOffset : 0));\r\n            if (pos.ch == 0) x = 0;\r\n            else {\r\n                var sp = measureLine(getLine(pos.line), pos.ch);\r\n                x = sp.left;\r\n                if (options.lineWrapping) y += Math.max(0, sp.top);\r\n            }\r\n            return {x: x, y: y, yBot: y + lh};\r\n        }\r\n        // Coords must be lineSpace-local\r\n        function coordsChar(x, y) {\r\n            if (y < 0) y = 0;\r\n            var th = textHeight(), cw = charWidth(), heightPos = displayOffset + Math.floor(y / th);\r\n            var lineNo = lineAtHeight(doc, heightPos);\r\n            if (lineNo >= doc.size) return {line: doc.size - 1, ch: getLine(doc.size - 1).text.length};\r\n            var lineObj = getLine(lineNo), text = lineObj.text;\r\n            var tw = options.lineWrapping, innerOff = tw ? heightPos - heightAtLine(doc, lineNo) : 0;\r\n            if (x <= 0 && innerOff == 0) return {line: lineNo, ch: 0};\r\n            function getX(len) {\r\n                var sp = measureLine(lineObj, len);\r\n                if (tw) {\r\n                    var off = Math.round(sp.top / th);\r\n                    return Math.max(0, sp.left + (off - innerOff) * scroller.clientWidth);\r\n                }\r\n                return sp.left;\r\n            }\r\n            var from = 0, fromX = 0, to = text.length, toX;\r\n            // Guess a suitable upper bound for our search.\r\n            var estimated = Math.min(to, Math.ceil((x + innerOff * scroller.clientWidth * .9) / cw));\r\n            for (;;) {\r\n                var estX = getX(estimated);\r\n                if (estX <= x && estimated < to) estimated = Math.min(to, Math.ceil(estimated * 1.2));\r\n                else {toX = estX; to = estimated; break;}\r\n            }\r\n            if (x > toX) return {line: lineNo, ch: to};\r\n            // Try to guess a suitable lower bound as well.\r\n            estimated = Math.floor(to * 0.8); estX = getX(estimated);\r\n            if (estX < x) {from = estimated; fromX = estX;}\r\n            // Do a binary search between these bounds.\r\n            for (;;) {\r\n                if (to - from <= 1) return {line: lineNo, ch: (toX - x > x - fromX) ? from : to};\r\n                var middle = Math.ceil((from + to) / 2), middleX = getX(middle);\r\n                if (middleX > x) {to = middle; toX = middleX;}\r\n                else {from = middle; fromX = middleX;}\r\n            }\r\n        }\r\n        function pageCoords(pos) {\r\n            var local = localCoords(pos, true), off = eltOffset(lineSpace);\r\n            return {x: off.left + local.x, y: off.top + local.y, yBot: off.top + local.yBot};\r\n        }\r\n\r\n        var cachedHeight, cachedHeightFor, measureText;\r\n        function textHeight() {\r\n            if (measureText == null) {\r\n                measureText = \"<pre>\";\r\n                for (var i = 0; i < 49; ++i) measureText += \"x<br/>\";\r\n                measureText += \"x</pre>\";\r\n            }\r\n            var offsetHeight = lineDiv.clientHeight;\r\n            if (offsetHeight == cachedHeightFor) return cachedHeight;\r\n            cachedHeightFor = offsetHeight;\r\n            measure.innerHTML = measureText;\r\n            cachedHeight = measure.firstChild.offsetHeight / 50 || 1;\r\n            measure.innerHTML = \"\";\r\n            return cachedHeight;\r\n        }\r\n        var cachedWidth, cachedWidthFor = 0;\r\n        function charWidth() {\r\n            if (scroller.clientWidth == cachedWidthFor) return cachedWidth;\r\n            cachedWidthFor = scroller.clientWidth;\r\n            return (cachedWidth = stringWidth(\"x\"));\r\n        }\r\n        function paddingTop() {return lineSpace.offsetTop;}\r\n        function paddingLeft() {return lineSpace.offsetLeft;}\r\n\r\n        function posFromMouse(e, liberal) {\r\n            var offW = eltOffset(scroller, true), x, y;\r\n            // Fails unpredictably on IE[67] when mouse is dragged around quickly.\r\n            try { x = e.clientX; y = e.clientY; } catch (e) { return null; }\r\n            // This is a mess of a heuristic to try and determine whether a\r\n            // scroll-bar was clicked or not, and to return null if one was\r\n            // (and !liberal).\r\n            if (!liberal && (x - offW.left > scroller.clientWidth || y - offW.top > scroller.clientHeight))\r\n                return null;\r\n            var offL = eltOffset(lineSpace, true);\r\n            return coordsChar(x - offL.left, y - offL.top);\r\n        }\r\n        function onContextMenu(e) {\r\n            var pos = posFromMouse(e);\r\n            if (!pos || window.opera) return; // Opera is difficult.\r\n            if (posEq(sel.from, sel.to) || posLess(pos, sel.from) || !posLess(pos, sel.to))\r\n                operation(setCursor)(pos.line, pos.ch);\r\n\r\n            var oldCSS = input.style.cssText;\r\n            inputDiv.style.position = \"absolute\";\r\n            input.style.cssText = \"position: fixed; width: 30px; height: 30px; top: \" + (e.clientY - 5) +\r\n                \"px; left: \" + (e.clientX - 5) + \"px; z-index: 1000; background: white; \" +\r\n                \"border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\r\n            leaveInputAlone = true;\r\n            var val = input.value = getSelection();\r\n            focusInput();\r\n            input.select();\r\n            function rehide() {\r\n                var newVal = splitLines(input.value).join(\"\\n\");\r\n                if (newVal != val) operation(replaceSelection)(newVal, \"end\");\r\n                inputDiv.style.position = \"relative\";\r\n                input.style.cssText = oldCSS;\r\n                leaveInputAlone = false;\r\n                resetInput(true);\r\n                slowPoll();\r\n            }\r\n\r\n            if (gecko) {\r\n                e_stop(e);\r\n                var mouseup = connect(window, \"mouseup\", function() {\r\n                    mouseup();\r\n                    setTimeout(rehide, 20);\r\n                }, true);\r\n            }\r\n            else {\r\n                setTimeout(rehide, 50);\r\n            }\r\n        }\r\n\r\n        // Cursor-blinking\r\n        function restartBlink() {\r\n            clearInterval(blinker);\r\n            var on = true;\r\n            cursor.style.visibility = \"\";\r\n            blinker = setInterval(function() {\r\n                cursor.style.visibility = (on = !on) ? \"\" : \"hidden\";\r\n            }, 650);\r\n        }\r\n\r\n        var matching = {\"(\": \")>\", \")\": \"(<\", \"[\": \"]>\", \"]\": \"[<\", \"{\": \"}>\", \"}\": \"{<\"};\r\n        function matchBrackets(autoclear) {\r\n            var head = sel.inverted ? sel.from : sel.to, line = getLine(head.line), pos = head.ch - 1;\r\n            var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)];\r\n            if (!match) return;\r\n            var ch = match.charAt(0), forward = match.charAt(1) == \">\", d = forward ? 1 : -1, st = line.styles;\r\n            for (var off = pos + 1, i = 0, e = st.length; i < e; i+=2)\r\n                if ((off -= st[i].length) <= 0) {var style = st[i+1]; break;}\r\n\r\n            var stack = [line.text.charAt(pos)], re = /[(){}[\\]]/;\r\n            function scan(line, from, to) {\r\n                if (!line.text) return;\r\n                var st = line.styles, pos = forward ? 0 : line.text.length - 1, cur;\r\n                for (var i = forward ? 0 : st.length - 2, e = forward ? st.length : -2; i != e; i += 2*d) {\r\n                    var text = st[i];\r\n                    if (st[i+1] != null && st[i+1] != style) {pos += d * text.length; continue;}\r\n                    for (var j = forward ? 0 : text.length - 1, te = forward ? text.length : -1; j != te; j += d, pos+=d) {\r\n                        if (pos >= from && pos < to && re.test(cur = text.charAt(j))) {\r\n                            var match = matching[cur];\r\n                            if (match.charAt(1) == \">\" == forward) stack.push(cur);\r\n                            else if (stack.pop() != match.charAt(0)) return {pos: pos, match: false};\r\n                            else if (!stack.length) return {pos: pos, match: true};\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n            for (var i = head.line, e = forward ? Math.min(i + 100, doc.size) : Math.max(-1, i - 100); i != e; i+=d) {\r\n                var line = getLine(i), first = i == head.line;\r\n                var found = scan(line, first && forward ? pos + 1 : 0, first && !forward ? pos : line.text.length);\r\n                if (found) break;\r\n            }\r\n            if (!found) found = {pos: null, match: false};\r\n            var style = found.match ? \"CodeMirror-matchingbracket\" : \"CodeMirror-nonmatchingbracket\";\r\n            var one = markText({line: head.line, ch: pos}, {line: head.line, ch: pos+1}, style),\r\n                two = found.pos != null && markText({line: i, ch: found.pos}, {line: i, ch: found.pos + 1}, style);\r\n            var clear = operation(function(){one.clear(); two && two.clear();});\r\n            if (autoclear) setTimeout(clear, 800);\r\n            else bracketHighlighted = clear;\r\n        }\r\n\r\n        // Finds the line to start with when starting a parse. Tries to\r\n        // find a line with a stateAfter, so that it can start with a\r\n        // valid state. If that fails, it returns the line with the\r\n        // smallest indentation, which tends to need the least context to\r\n        // parse correctly.\r\n        function findStartLine(n) {\r\n            var minindent, minline;\r\n            for (var search = n, lim = n - 40; search > lim; --search) {\r\n                if (search == 0) return 0;\r\n                var line = getLine(search-1);\r\n                if (line.stateAfter) return search;\r\n                var indented = line.indentation(options.tabSize);\r\n                if (minline == null || minindent > indented) {\r\n                    minline = search - 1;\r\n                    minindent = indented;\r\n                }\r\n            }\r\n            return minline;\r\n        }\r\n        function getStateBefore(n) {\r\n            var start = findStartLine(n), state = start && getLine(start-1).stateAfter;\r\n            if (!state) state = startState(mode);\r\n            else state = copyState(mode, state);\r\n            doc.iter(start, n, function(line) {\r\n                line.highlight(mode, state, options.tabSize);\r\n                line.stateAfter = copyState(mode, state);\r\n            });\r\n            if (start < n) changes.push({from: start, to: n});\r\n            if (n < doc.size && !getLine(n).stateAfter) work.push(n);\r\n            return state;\r\n        }\r\n        function highlightLines(start, end) {\r\n            var state = getStateBefore(start);\r\n            doc.iter(start, end, function(line) {\r\n                line.highlight(mode, state, options.tabSize);\r\n                line.stateAfter = copyState(mode, state);\r\n            });\r\n        }\r\n        function highlightWorker() {\r\n            var end = +new Date + options.workTime;\r\n            var foundWork = work.length;\r\n            while (work.length) {\r\n                if (!getLine(showingFrom).stateAfter) var task = showingFrom;\r\n                else var task = work.pop();\r\n                if (task >= doc.size) continue;\r\n                var start = findStartLine(task), state = start && getLine(start-1).stateAfter;\r\n                if (state) state = copyState(mode, state);\r\n                else state = startState(mode);\r\n\r\n                var unchanged = 0, compare = mode.compareStates, realChange = false,\r\n                    i = start, bail = false;\r\n                doc.iter(i, doc.size, function(line) {\r\n                    var hadState = line.stateAfter;\r\n                    if (+new Date > end) {\r\n                        work.push(i);\r\n                        startWorker(options.workDelay);\r\n                        if (realChange) changes.push({from: task, to: i + 1});\r\n                        return (bail = true);\r\n                    }\r\n                    var changed = line.highlight(mode, state, options.tabSize);\r\n                    if (changed) realChange = true;\r\n                    line.stateAfter = copyState(mode, state);\r\n                    if (compare) {\r\n                        if (hadState && compare(hadState, state)) return true;\r\n                    } else {\r\n                        if (changed !== false || !hadState) unchanged = 0;\r\n                        else if (++unchanged > 3 && (!mode.indent || mode.indent(hadState, \"\") == mode.indent(state, \"\")))\r\n                            return true;\r\n                    }\r\n                    ++i;\r\n                });\r\n                if (bail) return;\r\n                if (realChange) changes.push({from: task, to: i + 1});\r\n            }\r\n            if (foundWork && options.onHighlightComplete)\r\n                options.onHighlightComplete(instance);\r\n        }\r\n        function startWorker(time) {\r\n            if (!work.length) return;\r\n            highlight.set(time, operation(highlightWorker));\r\n        }\r\n\r\n        // Operations are used to wrap changes in such a way that each\r\n        // change won't have to update the cursor and display (which would\r\n        // be awkward, slow, and error-prone), but instead updates are\r\n        // batched and then all combined and executed at once.\r\n        function startOperation() {\r\n            updateInput = userSelChange = textChanged = null;\r\n            changes = []; selectionChanged = false; callbacks = [];\r\n        }\r\n        function endOperation() {\r\n            var reScroll = false, updated;\r\n            if (selectionChanged) reScroll = !scrollCursorIntoView();\r\n            if (changes.length) updated = updateDisplay(changes, true);\r\n            else {\r\n                if (selectionChanged) updateCursor();\r\n                if (gutterDirty) updateGutter();\r\n            }\r\n            if (reScroll) scrollCursorIntoView();\r\n            if (selectionChanged) {scrollEditorIntoView(); restartBlink();}\r\n\r\n            if (focused && !leaveInputAlone &&\r\n                (updateInput === true || (updateInput !== false && selectionChanged)))\r\n                resetInput(userSelChange);\r\n\r\n            if (selectionChanged && options.matchBrackets)\r\n                setTimeout(operation(function() {\r\n                    if (bracketHighlighted) {bracketHighlighted(); bracketHighlighted = null;}\r\n                    if (posEq(sel.from, sel.to)) matchBrackets(false);\r\n                }), 20);\r\n            var tc = textChanged, cbs = callbacks; // these can be reset by callbacks\r\n            if (selectionChanged && options.onCursorActivity)\r\n                options.onCursorActivity(instance);\r\n            if (tc && options.onChange && instance)\r\n                options.onChange(instance, tc);\r\n            for (var i = 0; i < cbs.length; ++i) cbs[i](instance);\r\n            if (updated && options.onUpdate) options.onUpdate(instance);\r\n        }\r\n        var nestedOperation = 0;\r\n        function operation(f) {\r\n            return function() {\r\n                if (!nestedOperation++) startOperation();\r\n                try {var result = f.apply(this, arguments);}\r\n                finally {if (!--nestedOperation) endOperation();}\r\n                return result;\r\n            };\r\n        }\r\n\r\n        for (var ext in extensions)\r\n            if (extensions.propertyIsEnumerable(ext) &&\r\n                !instance.propertyIsEnumerable(ext))\r\n                instance[ext] = extensions[ext];\r\n        return instance;\r\n    } // (end of function CodeMirror)\r\n\r\n    // The default configuration options.\r\n    CodeMirror.defaults = {\r\n        value: \"\",\r\n        mode: null,\r\n        theme: \"default\",\r\n        indentUnit: 2,\r\n        indentWithTabs: false,\r\n        tabSize: 4,\r\n        keyMap: \"default\",\r\n        extraKeys: null,\r\n        electricChars: true,\r\n        onKeyEvent: null,\r\n        lineWrapping: false,\r\n        lineNumbers: false,\r\n        gutter: false,\r\n        fixedGutter: false,\r\n        firstLineNumber: 1,\r\n        readOnly: false,\r\n        onChange: null,\r\n        onCursorActivity: null,\r\n        onGutterClick: null,\r\n        onHighlightComplete: null,\r\n        onUpdate: null,\r\n        onFocus: null, onBlur: null, onScroll: null,\r\n        matchBrackets: false,\r\n        workTime: 100,\r\n        workDelay: 200,\r\n        pollInterval: 100,\r\n        undoDepth: 40,\r\n        tabindex: null,\r\n        document: window.document\r\n    };\r\n\r\n    var mac = /Mac/.test(navigator.platform);\r\n    var win = /Win/.test(navigator.platform);\r\n\r\n    // Known modes, by name and by MIME\r\n    var modes = {}, mimeModes = {};\r\n    CodeMirror.defineMode = function(name, mode) {\r\n        if (!CodeMirror.defaults.mode && name != \"null\") CodeMirror.defaults.mode = name;\r\n        modes[name] = mode;\r\n    };\r\n    CodeMirror.defineMIME = function(mime, spec) {\r\n        mimeModes[mime] = spec;\r\n    };\r\n    CodeMirror.getMode = function(options, spec) {\r\n        if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec))\r\n            spec = mimeModes[spec];\r\n        if (typeof spec == \"string\")\r\n            var mname = spec, config = {};\r\n        else if (spec != null)\r\n            var mname = spec.name, config = spec;\r\n        var mfactory = modes[mname];\r\n        if (!mfactory) {\r\n            if (window.console) console.warn(\"No mode \" + mname + \" found, falling back to plain text.\");\r\n            return CodeMirror.getMode(options, \"text/plain\");\r\n        }\r\n        return mfactory(options, config || {});\r\n    };\r\n    CodeMirror.listModes = function() {\r\n        var list = [];\r\n        for (var m in modes)\r\n            if (modes.propertyIsEnumerable(m)) list.push(m);\r\n        return list;\r\n    };\r\n    CodeMirror.listMIMEs = function() {\r\n        var list = [];\r\n        for (var m in mimeModes)\r\n            if (mimeModes.propertyIsEnumerable(m)) list.push({mime: m, mode: mimeModes[m]});\r\n        return list;\r\n    };\r\n\r\n    var extensions = CodeMirror.extensions = {};\r\n    CodeMirror.defineExtension = function(name, func) {\r\n        extensions[name] = func;\r\n    };\r\n\r\n    var commands = CodeMirror.commands = {\r\n        selectAll: function(cm) {cm.setSelection({line: 0, ch: 0}, {line: cm.lineCount() - 1});},\r\n        killLine: function(cm) {\r\n            var from = cm.getCursor(true), to = cm.getCursor(false), sel = !posEq(from, to);\r\n            if (!sel && cm.getLine(from.line).length == from.ch) cm.replaceRange(\"\", from, {line: from.line + 1, ch: 0});\r\n            else cm.replaceRange(\"\", from, sel ? to : {line: from.line});\r\n        },\r\n        deleteLine: function(cm) {var l = cm.getCursor().line; cm.replaceRange(\"\", {line: l, ch: 0}, {line: l});},\r\n        undo: function(cm) {cm.undo();},\r\n        redo: function(cm) {cm.redo();},\r\n        goDocStart: function(cm) {cm.setCursor(0, 0, true);},\r\n        goDocEnd: function(cm) {cm.setSelection({line: cm.lineCount() - 1}, null, true);},\r\n        goLineStart: function(cm) {cm.setCursor(cm.getCursor().line, 0, true);},\r\n        goLineStartSmart: function(cm) {\r\n            var cur = cm.getCursor();\r\n            var text = cm.getLine(cur.line), firstNonWS = Math.max(0, text.search(/\\S/));\r\n            cm.setCursor(cur.line, cur.ch <= firstNonWS && cur.ch ? 0 : firstNonWS, true);\r\n        },\r\n        goLineEnd: function(cm) {cm.setSelection({line: cm.getCursor().line}, null, true);},\r\n        goLineUp: function(cm) {cm.moveV(-1, \"line\");},\r\n        goLineDown: function(cm) {cm.moveV(1, \"line\");},\r\n        goPageUp: function(cm) {cm.moveV(-1, \"page\");},\r\n        goPageDown: function(cm) {cm.moveV(1, \"page\");},\r\n        goCharLeft: function(cm) {cm.moveH(-1, \"char\");},\r\n        goCharRight: function(cm) {cm.moveH(1, \"char\");},\r\n        goColumnLeft: function(cm) {cm.moveH(-1, \"column\");},\r\n        goColumnRight: function(cm) {cm.moveH(1, \"column\");},\r\n        goWordLeft: function(cm) {cm.moveH(-1, \"word\");},\r\n        goWordRight: function(cm) {cm.moveH(1, \"word\");},\r\n        delCharLeft: function(cm) {cm.deleteH(-1, \"char\");},\r\n        delCharRight: function(cm) {cm.deleteH(1, \"char\");},\r\n        delWordLeft: function(cm) {cm.deleteH(-1, \"word\");},\r\n        delWordRight: function(cm) {cm.deleteH(1, \"word\");},\r\n        indentAuto: function(cm) {cm.indentSelection(\"smart\");},\r\n        indentMore: function(cm) {cm.indentSelection(\"add\");},\r\n        indentLess: function(cm) {cm.indentSelection(\"subtract\");},\r\n        insertTab: function(cm) {cm.replaceSelection(\"\\t\", \"end\");},\r\n        transposeChars: function(cm) {\r\n            var cur = cm.getCursor(), line = cm.getLine(cur.line);\r\n            if (cur.ch > 0 && cur.ch < line.length - 1)\r\n                cm.replaceRange(line.charAt(cur.ch) + line.charAt(cur.ch - 1),\r\n                    {line: cur.line, ch: cur.ch - 1}, {line: cur.line, ch: cur.ch + 1});\r\n        },\r\n        newlineAndIndent: function(cm) {\r\n            cm.replaceSelection(\"\\n\", \"end\");\r\n            cm.indentLine(cm.getCursor().line);\r\n        },\r\n        toggleOverwrite: function(cm) {cm.toggleOverwrite();}\r\n    };\r\n\r\n    var keyMap = CodeMirror.keyMap = {};\r\n    keyMap.basic = {\r\n        \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\r\n        \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\r\n        \"Delete\": \"delCharRight\", \"Backspace\": \"delCharLeft\", \"Tab\": \"indentMore\", \"Shift-Tab\": \"indentLess\",\r\n        \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\"\r\n    };\r\n    // Note that the save and find-related commands aren't defined by\r\n    // default. Unknown commands are simply ignored.\r\n    keyMap.pcDefault = {\r\n        \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\r\n        \"Ctrl-Home\": \"goDocStart\", \"Alt-Up\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Down\": \"goDocEnd\",\r\n        \"Ctrl-Left\": \"goWordLeft\", \"Ctrl-Right\": \"goWordRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\r\n        \"Ctrl-Backspace\": \"delWordLeft\", \"Ctrl-Delete\": \"delWordRight\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\r\n        \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\r\n        fallthrough: \"basic\"\r\n    };\r\n    keyMap.macDefault = {\r\n        \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\r\n        \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goWordLeft\",\r\n        \"Alt-Right\": \"goWordRight\", \"Cmd-Left\": \"goLineStart\", \"Cmd-Right\": \"goLineEnd\", \"Alt-Backspace\": \"delWordLeft\",\r\n        \"Ctrl-Alt-Backspace\": \"delWordRight\", \"Alt-Delete\": \"delWordRight\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\r\n        \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\r\n        fallthrough: [\"basic\", \"emacsy\"]\r\n    };\r\n    keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\r\n    keyMap.emacsy = {\r\n        \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\r\n        \"Alt-F\": \"goWordRight\", \"Alt-B\": \"goWordLeft\", \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\",\r\n        \"Ctrl-V\": \"goPageUp\", \"Shift-Ctrl-V\": \"goPageDown\", \"Ctrl-D\": \"delCharRight\", \"Ctrl-H\": \"delCharLeft\",\r\n        \"Alt-D\": \"delWordRight\", \"Alt-Backspace\": \"delWordLeft\", \"Ctrl-K\": \"killLine\", \"Ctrl-T\": \"transposeChars\"\r\n    };\r\n\r\n    function lookupKey(name, extraMap, map) {\r\n        function lookup(name, map, ft) {\r\n            var found = map[name];\r\n            if (found != null) return found;\r\n            if (ft == null) ft = map.fallthrough;\r\n            if (ft == null) return map.catchall;\r\n            if (typeof ft == \"string\") return lookup(name, keyMap[ft]);\r\n            for (var i = 0, e = ft.length; i < e; ++i) {\r\n                found = lookup(name, keyMap[ft[i]]);\r\n                if (found != null) return found;\r\n            }\r\n            return null;\r\n        }\r\n        return extraMap ? lookup(name, extraMap, map) : lookup(name, keyMap[map]);\r\n    }\r\n    function isModifierKey(event) {\r\n        var name = keyNames[event.keyCode];\r\n        return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\r\n    }\r\n\r\n    CodeMirror.fromTextArea = function(textarea, options) {\r\n        if (!options) options = {};\r\n        options.value = textarea.value;\r\n        if (!options.tabindex && textarea.tabindex)\r\n            options.tabindex = textarea.tabindex;\r\n\r\n        function save() {textarea.value = instance.getValue();}\r\n        if (textarea.form) {\r\n            // Deplorable hack to make the submit method do the right thing.\r\n            var rmSubmit = connect(textarea.form, \"submit\", save, true);\r\n            if (typeof textarea.form.submit == \"function\") {\r\n                var realSubmit = textarea.form.submit;\r\n                function wrappedSubmit() {\r\n                    save();\r\n                    textarea.form.submit = realSubmit;\r\n                    textarea.form.submit();\r\n                    textarea.form.submit = wrappedSubmit;\r\n                }\r\n                textarea.form.submit = wrappedSubmit;\r\n            }\r\n        }\r\n\r\n        textarea.style.display = \"none\";\r\n        var instance = CodeMirror(function(node) {\r\n            textarea.parentNode.insertBefore(node, textarea.nextSibling);\r\n        }, options);\r\n        instance.save = save;\r\n        instance.getTextArea = function() { return textarea; };\r\n        instance.toTextArea = function() {\r\n            save();\r\n            textarea.parentNode.removeChild(instance.getWrapperElement());\r\n            textarea.style.display = \"\";\r\n            if (textarea.form) {\r\n                rmSubmit();\r\n                if (typeof textarea.form.submit == \"function\")\r\n                    textarea.form.submit = realSubmit;\r\n            }\r\n        };\r\n        return instance;\r\n    };\r\n\r\n    // Utility functions for working with state. Exported because modes\r\n    // sometimes need to do this.\r\n    function copyState(mode, state) {\r\n        if (state === true) return state;\r\n        if (mode.copyState) return mode.copyState(state);\r\n        var nstate = {};\r\n        for (var n in state) {\r\n            var val = state[n];\r\n            if (val instanceof Array) val = val.concat([]);\r\n            nstate[n] = val;\r\n        }\r\n        return nstate;\r\n    }\r\n    CodeMirror.copyState = copyState;\r\n    function startState(mode, a1, a2) {\r\n        return mode.startState ? mode.startState(a1, a2) : true;\r\n    }\r\n    CodeMirror.startState = startState;\r\n\r\n    // The character stream used by a mode's parser.\r\n    function StringStream(string, tabSize) {\r\n        this.pos = this.start = 0;\r\n        this.string = string;\r\n        this.tabSize = tabSize || 8;\r\n    }\r\n    StringStream.prototype = {\r\n        eol: function() {return this.pos >= this.string.length;},\r\n        sol: function() {return this.pos == 0;},\r\n        peek: function() {return this.string.charAt(this.pos);},\r\n        next: function() {\r\n            if (this.pos < this.string.length)\r\n                return this.string.charAt(this.pos++);\r\n        },\r\n        eat: function(match) {\r\n            var ch = this.string.charAt(this.pos);\r\n            if (typeof match == \"string\") var ok = ch == match;\r\n            else var ok = ch && (match.test ? match.test(ch) : match(ch));\r\n            if (ok) {++this.pos; return ch;}\r\n        },\r\n        eatWhile: function(match) {\r\n            var start = this.pos;\r\n            while (this.eat(match)){}\r\n            return this.pos > start;\r\n        },\r\n        eatSpace: function() {\r\n            var start = this.pos;\r\n            while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) ++this.pos;\r\n            return this.pos > start;\r\n        },\r\n        skipToEnd: function() {this.pos = this.string.length;},\r\n        skipTo: function(ch) {\r\n            var found = this.string.indexOf(ch, this.pos);\r\n            if (found > -1) {this.pos = found; return true;}\r\n        },\r\n        backUp: function(n) {this.pos -= n;},\r\n        column: function() {return countColumn(this.string, this.start, this.tabSize);},\r\n        indentation: function() {return countColumn(this.string, null, this.tabSize);},\r\n        match: function(pattern, consume, caseInsensitive) {\r\n            if (typeof pattern == \"string\") {\r\n                function cased(str) {return caseInsensitive ? str.toLowerCase() : str;}\r\n                if (cased(this.string).indexOf(cased(pattern), this.pos) == this.pos) {\r\n                    if (consume !== false) this.pos += pattern.length;\r\n                    return true;\r\n                }\r\n            }\r\n            else {\r\n                var match = this.string.slice(this.pos).match(pattern);\r\n                if (match && consume !== false) this.pos += match[0].length;\r\n                return match;\r\n            }\r\n        },\r\n        current: function(){return this.string.slice(this.start, this.pos);}\r\n    };\r\n    CodeMirror.StringStream = StringStream;\r\n\r\n    function MarkedText(from, to, className, set) {\r\n        this.from = from; this.to = to; this.style = className; this.set = set;\r\n    }\r\n    MarkedText.prototype = {\r\n        attach: function(line) { this.set.push(line); },\r\n        detach: function(line) {\r\n            var ix = indexOf(this.set, line);\r\n            if (ix > -1) this.set.splice(ix, 1);\r\n        },\r\n        split: function(pos, lenBefore) {\r\n            if (this.to <= pos && this.to != null) return null;\r\n            var from = this.from < pos || this.from == null ? null : this.from - pos + lenBefore;\r\n            var to = this.to == null ? null : this.to - pos + lenBefore;\r\n            return new MarkedText(from, to, this.style, this.set);\r\n        },\r\n        dup: function() { return new MarkedText(null, null, this.style, this.set); },\r\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\r\n            if (this.from != null && this.from >= from)\r\n                this.from = Math.max(to, this.from) + diff;\r\n            if (this.to != null && this.to > from)\r\n                this.to = to < this.to ? this.to + diff : from;\r\n            if (fromOpen && to > this.from && (to < this.to || this.to == null))\r\n                this.from = null;\r\n            if (toOpen && (from < this.to || this.to == null) && (from > this.from || this.from == null))\r\n                this.to = null;\r\n        },\r\n        isDead: function() { return this.from != null && this.to != null && this.from >= this.to; },\r\n        sameSet: function(x) { return this.set == x.set; }\r\n    };\r\n\r\n    function Bookmark(pos) {\r\n        this.from = pos; this.to = pos; this.line = null;\r\n    }\r\n    Bookmark.prototype = {\r\n        attach: function(line) { this.line = line; },\r\n        detach: function(line) { if (this.line == line) this.line = null; },\r\n        split: function(pos, lenBefore) {\r\n            if (pos < this.from) {\r\n                this.from = this.to = (this.from - pos) + lenBefore;\r\n                return this;\r\n            }\r\n        },\r\n        isDead: function() { return this.from > this.to; },\r\n        clipTo: function(fromOpen, from, toOpen, to, diff) {\r\n            if ((fromOpen || from < this.from) && (toOpen || to > this.to)) {\r\n                this.from = 0; this.to = -1;\r\n            } else if (this.from > from) {\r\n                this.from = this.to = Math.max(to, this.from) + diff;\r\n            }\r\n        },\r\n        sameSet: function(x) { return false; },\r\n        find: function() {\r\n            if (!this.line || !this.line.parent) return null;\r\n            return {line: lineNo(this.line), ch: this.from};\r\n        },\r\n        clear: function() {\r\n            if (this.line) {\r\n                var found = indexOf(this.line.marked, this);\r\n                if (found != -1) this.line.marked.splice(found, 1);\r\n                this.line = null;\r\n            }\r\n        }\r\n    };\r\n\r\n    // Line objects. These hold state related to a line, including\r\n    // highlighting info (the styles array).\r\n    function Line(text, styles) {\r\n        this.styles = styles || [text, null];\r\n        this.text = text;\r\n        this.height = 1;\r\n        this.marked = this.gutterMarker = this.className = this.handlers = null;\r\n        this.stateAfter = this.parent = this.hidden = null;\r\n    }\r\n    Line.inheritMarks = function(text, orig) {\r\n        var ln = new Line(text), mk = orig && orig.marked;\r\n        if (mk) {\r\n            for (var i = 0; i < mk.length; ++i) {\r\n                if (mk[i].to == null && mk[i].style) {\r\n                    var newmk = ln.marked || (ln.marked = []), mark = mk[i];\r\n                    var nmark = mark.dup(); newmk.push(nmark); nmark.attach(ln);\r\n                }\r\n            }\r\n        }\r\n        return ln;\r\n    }\r\n    Line.prototype = {\r\n        // Replace a piece of a line, keeping the styles around it intact.\r\n        replace: function(from, to_, text) {\r\n            var st = [], mk = this.marked, to = to_ == null ? this.text.length : to_;\r\n            copyStyles(0, from, this.styles, st);\r\n            if (text) st.push(text, null);\r\n            copyStyles(to, this.text.length, this.styles, st);\r\n            this.styles = st;\r\n            this.text = this.text.slice(0, from) + text + this.text.slice(to);\r\n            this.stateAfter = null;\r\n            if (mk) {\r\n                var diff = text.length - (to - from);\r\n                for (var i = 0, mark = mk[i]; i < mk.length; ++i) {\r\n                    mark.clipTo(from == null, from || 0, to_ == null, to, diff);\r\n                    if (mark.isDead()) {mark.detach(this); mk.splice(i--, 1);}\r\n                }\r\n            }\r\n        },\r\n        // Split a part off a line, keeping styles and markers intact.\r\n        split: function(pos, textBefore) {\r\n            var st = [textBefore, null], mk = this.marked;\r\n            copyStyles(pos, this.text.length, this.styles, st);\r\n            var taken = new Line(textBefore + this.text.slice(pos), st);\r\n            if (mk) {\r\n                for (var i = 0; i < mk.length; ++i) {\r\n                    var mark = mk[i];\r\n                    var newmark = mark.split(pos, textBefore.length);\r\n                    if (newmark) {\r\n                        if (!taken.marked) taken.marked = [];\r\n                        taken.marked.push(newmark); newmark.attach(taken);\r\n                    }\r\n                }\r\n            }\r\n            return taken;\r\n        },\r\n        append: function(line) {\r\n            var mylen = this.text.length, mk = line.marked, mymk = this.marked;\r\n            this.text += line.text;\r\n            copyStyles(0, line.text.length, line.styles, this.styles);\r\n            if (mymk) {\r\n                for (var i = 0; i < mymk.length; ++i)\r\n                    if (mymk[i].to == null) mymk[i].to = mylen;\r\n            }\r\n            if (mk && mk.length) {\r\n                if (!mymk) this.marked = mymk = [];\r\n                outer: for (var i = 0; i < mk.length; ++i) {\r\n                    var mark = mk[i];\r\n                    if (!mark.from) {\r\n                        for (var j = 0; j < mymk.length; ++j) {\r\n                            var mymark = mymk[j];\r\n                            if (mymark.to == mylen && mymark.sameSet(mark)) {\r\n                                mymark.to = mark.to == null ? null : mark.to + mylen;\r\n                                if (mymark.isDead()) {\r\n                                    mymark.detach(this);\r\n                                    mk.splice(i--, 1);\r\n                                }\r\n                                continue outer;\r\n                            }\r\n                        }\r\n                    }\r\n                    mymk.push(mark);\r\n                    mark.attach(this);\r\n                    mark.from += mylen;\r\n                    if (mark.to != null) mark.to += mylen;\r\n                }\r\n            }\r\n        },\r\n        fixMarkEnds: function(other) {\r\n            var mk = this.marked, omk = other.marked;\r\n            if (!mk) return;\r\n            for (var i = 0; i < mk.length; ++i) {\r\n                var mark = mk[i], close = mark.to == null;\r\n                if (close && omk) {\r\n                    for (var j = 0; j < omk.length; ++j)\r\n                        if (omk[j].sameSet(mark)) {close = false; break;}\r\n                }\r\n                if (close) mark.to = this.text.length;\r\n            }\r\n        },\r\n        fixMarkStarts: function() {\r\n            var mk = this.marked;\r\n            if (!mk) return;\r\n            for (var i = 0; i < mk.length; ++i)\r\n                if (mk[i].from == null) mk[i].from = 0;\r\n        },\r\n        addMark: function(mark) {\r\n            mark.attach(this);\r\n            if (this.marked == null) this.marked = [];\r\n            this.marked.push(mark);\r\n            this.marked.sort(function(a, b){return (a.from || 0) - (b.from || 0);});\r\n        },\r\n        // Run the given mode's parser over a line, update the styles\r\n        // array, which contains alternating fragments of text and CSS\r\n        // classes.\r\n        highlight: function(mode, state, tabSize) {\r\n            var stream = new StringStream(this.text, tabSize), st = this.styles, pos = 0;\r\n            var changed = false, curWord = st[0], prevWord;\r\n            if (this.text == \"\" && mode.blankLine) mode.blankLine(state);\r\n            while (!stream.eol()) {\r\n                var style = mode.token(stream, state);\r\n                var substr = this.text.slice(stream.start, stream.pos);\r\n                stream.start = stream.pos;\r\n                if (pos && st[pos-1] == style)\r\n                    st[pos-2] += substr;\r\n                else if (substr) {\r\n                    if (!changed && (st[pos+1] != style || (pos && st[pos-2] != prevWord))) changed = true;\r\n                    st[pos++] = substr; st[pos++] = style;\r\n                    prevWord = curWord; curWord = st[pos];\r\n                }\r\n                // Give up when line is ridiculously long\r\n                if (stream.pos > 5000) {\r\n                    st[pos++] = this.text.slice(stream.pos); st[pos++] = null;\r\n                    break;\r\n                }\r\n            }\r\n            if (st.length != pos) {st.length = pos; changed = true;}\r\n            if (pos && st[pos-2] != prevWord) changed = true;\r\n            // Short lines with simple highlights return null, and are\r\n            // counted as changed by the driver because they are likely to\r\n            // highlight the same way in various contexts.\r\n            return changed || (st.length < 5 && this.text.length < 10 ? null : false);\r\n        },\r\n        // Fetch the parser token for a given character. Useful for hacks\r\n        // that want to inspect the mode state (say, for completion).\r\n        getTokenAt: function(mode, state, ch) {\r\n            var txt = this.text, stream = new StringStream(txt);\r\n            while (stream.pos < ch && !stream.eol()) {\r\n                stream.start = stream.pos;\r\n                var style = mode.token(stream, state);\r\n            }\r\n            return {start: stream.start,\r\n                end: stream.pos,\r\n                string: stream.current(),\r\n                className: style || null,\r\n                state: state};\r\n        },\r\n        indentation: function(tabSize) {return countColumn(this.text, null, tabSize);},\r\n        // Produces an HTML fragment for the line, taking selection,\r\n        // marking, and highlighting into account.\r\n        getHTML: function(sfrom, sto, includePre, tabText, endAt) {\r\n            var html = [], first = true;\r\n            if (includePre)\r\n                html.push(this.className ? '<pre class=\"' + this.className + '\">': \"<pre>\");\r\n            function span(text, style) {\r\n                if (!text) return;\r\n                // Work around a bug where, in some compat modes, IE ignores leading spaces\r\n                if (first && ie && text.charAt(0) == \" \") text = \"\\u00a0\" + text.slice(1);\r\n                first = false;\r\n                if (style) html.push('<span class=\"', style, '\">', htmlEscape(text).replace(/\\t/g, tabText), \"</span>\");\r\n                else html.push(htmlEscape(text).replace(/\\t/g, tabText));\r\n            }\r\n            var st = this.styles, allText = this.text, marked = this.marked;\r\n            if (sfrom == sto) sfrom = null;\r\n            var len = allText.length;\r\n            if (endAt != null) len = Math.min(endAt, len);\r\n\r\n            if (!allText && endAt == null)\r\n                span(\" \", sfrom != null && sto == null ? \"CodeMirror-selected\" : null);\r\n            else if (!marked && sfrom == null)\r\n                for (var i = 0, ch = 0; ch < len; i+=2) {\r\n                    var str = st[i], style = st[i+1], l = str.length;\r\n                    if (ch + l > len) str = str.slice(0, len - ch);\r\n                    ch += l;\r\n                    span(str, style && \"cm-\" + style);\r\n                }\r\n            else {\r\n                var pos = 0, i = 0, text = \"\", style, sg = 0;\r\n                var markpos = -1, mark = null;\r\n                function nextMark() {\r\n                    if (marked) {\r\n                        markpos += 1;\r\n                        mark = (markpos < marked.length) ? marked[markpos] : null;\r\n                    }\r\n                }\r\n                nextMark();\r\n                while (pos < len) {\r\n                    var upto = len;\r\n                    var extraStyle = \"\";\r\n                    if (sfrom != null) {\r\n                        if (sfrom > pos) upto = sfrom;\r\n                        else if (sto == null || sto > pos) {\r\n                            extraStyle = \" CodeMirror-selected\";\r\n                            if (sto != null) upto = Math.min(upto, sto);\r\n                        }\r\n                    }\r\n                    while (mark && mark.to != null && mark.to <= pos) nextMark();\r\n                    if (mark) {\r\n                        if (mark.from > pos) upto = Math.min(upto, mark.from);\r\n                        else {\r\n                            extraStyle += \" \" + mark.style;\r\n                            if (mark.to != null) upto = Math.min(upto, mark.to);\r\n                        }\r\n                    }\r\n                    for (;;) {\r\n                        var end = pos + text.length;\r\n                        var appliedStyle = style;\r\n                        if (extraStyle) appliedStyle = style ? style + extraStyle : extraStyle;\r\n                        span(end > upto ? text.slice(0, upto - pos) : text, appliedStyle);\r\n                        if (end >= upto) {text = text.slice(upto - pos); pos = upto; break;}\r\n                        pos = end;\r\n                        text = st[i++]; style = \"cm-\" + st[i++];\r\n                    }\r\n                }\r\n                if (sfrom != null && sto == null) span(\" \", \"CodeMirror-selected\");\r\n            }\r\n            if (includePre) html.push(\"</pre>\");\r\n            return html.join(\"\");\r\n        },\r\n        cleanUp: function() {\r\n            this.parent = null;\r\n            if (this.marked)\r\n                for (var i = 0, e = this.marked.length; i < e; ++i) this.marked[i].detach(this);\r\n        }\r\n    };\r\n    // Utility used by replace and split above\r\n    function copyStyles(from, to, source, dest) {\r\n        for (var i = 0, pos = 0, state = 0; pos < to; i+=2) {\r\n            var part = source[i], end = pos + part.length;\r\n            if (state == 0) {\r\n                if (end > from) dest.push(part.slice(from - pos, Math.min(part.length, to - pos)), source[i+1]);\r\n                if (end >= from) state = 1;\r\n            }\r\n            else if (state == 1) {\r\n                if (end > to) dest.push(part.slice(0, to - pos), source[i+1]);\r\n                else dest.push(part, source[i+1]);\r\n            }\r\n            pos = end;\r\n        }\r\n    }\r\n\r\n    // Data structure that holds the sequence of lines.\r\n    function LeafChunk(lines) {\r\n        this.lines = lines;\r\n        this.parent = null;\r\n        for (var i = 0, e = lines.length, height = 0; i < e; ++i) {\r\n            lines[i].parent = this;\r\n            height += lines[i].height;\r\n        }\r\n        this.height = height;\r\n    }\r\n    LeafChunk.prototype = {\r\n        chunkSize: function() { return this.lines.length; },\r\n        remove: function(at, n, callbacks) {\r\n            for (var i = at, e = at + n; i < e; ++i) {\r\n                var line = this.lines[i];\r\n                this.height -= line.height;\r\n                line.cleanUp();\r\n                if (line.handlers)\r\n                    for (var j = 0; j < line.handlers.length; ++j) callbacks.push(line.handlers[j]);\r\n            }\r\n            this.lines.splice(at, n);\r\n        },\r\n        collapse: function(lines) {\r\n            lines.splice.apply(lines, [lines.length, 0].concat(this.lines));\r\n        },\r\n        insertHeight: function(at, lines, height) {\r\n            this.height += height;\r\n            this.lines.splice.apply(this.lines, [at, 0].concat(lines));\r\n            for (var i = 0, e = lines.length; i < e; ++i) lines[i].parent = this;\r\n        },\r\n        iterN: function(at, n, op) {\r\n            for (var e = at + n; at < e; ++at)\r\n                if (op(this.lines[at])) return true;\r\n        }\r\n    };\r\n    function BranchChunk(children) {\r\n        this.children = children;\r\n        var size = 0, height = 0;\r\n        for (var i = 0, e = children.length; i < e; ++i) {\r\n            var ch = children[i];\r\n            size += ch.chunkSize(); height += ch.height;\r\n            ch.parent = this;\r\n        }\r\n        this.size = size;\r\n        this.height = height;\r\n        this.parent = null;\r\n    }\r\n    BranchChunk.prototype = {\r\n        chunkSize: function() { return this.size; },\r\n        remove: function(at, n, callbacks) {\r\n            this.size -= n;\r\n            for (var i = 0; i < this.children.length; ++i) {\r\n                var child = this.children[i], sz = child.chunkSize();\r\n                if (at < sz) {\r\n                    var rm = Math.min(n, sz - at), oldHeight = child.height;\r\n                    child.remove(at, rm, callbacks);\r\n                    this.height -= oldHeight - child.height;\r\n                    if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\r\n                    if ((n -= rm) == 0) break;\r\n                    at = 0;\r\n                } else at -= sz;\r\n            }\r\n            if (this.size - n < 25) {\r\n                var lines = [];\r\n                this.collapse(lines);\r\n                this.children = [new LeafChunk(lines)];\r\n            }\r\n        },\r\n        collapse: function(lines) {\r\n            for (var i = 0, e = this.children.length; i < e; ++i) this.children[i].collapse(lines);\r\n        },\r\n        insert: function(at, lines) {\r\n            var height = 0;\r\n            for (var i = 0, e = lines.length; i < e; ++i) height += lines[i].height;\r\n            this.insertHeight(at, lines, height);\r\n        },\r\n        insertHeight: function(at, lines, height) {\r\n            this.size += lines.length;\r\n            this.height += height;\r\n            for (var i = 0, e = this.children.length; i < e; ++i) {\r\n                var child = this.children[i], sz = child.chunkSize();\r\n                if (at <= sz) {\r\n                    child.insertHeight(at, lines, height);\r\n                    if (child.lines && child.lines.length > 50) {\r\n                        while (child.lines.length > 50) {\r\n                            var spilled = child.lines.splice(child.lines.length - 25, 25);\r\n                            var newleaf = new LeafChunk(spilled);\r\n                            child.height -= newleaf.height;\r\n                            this.children.splice(i + 1, 0, newleaf);\r\n                            newleaf.parent = this;\r\n                        }\r\n                        this.maybeSpill();\r\n                    }\r\n                    break;\r\n                }\r\n                at -= sz;\r\n            }\r\n        },\r\n        maybeSpill: function() {\r\n            if (this.children.length <= 10) return;\r\n            var me = this;\r\n            do {\r\n                var spilled = me.children.splice(me.children.length - 5, 5);\r\n                var sibling = new BranchChunk(spilled);\r\n                if (!me.parent) { // Become the parent node\r\n                    var copy = new BranchChunk(me.children);\r\n                    copy.parent = me;\r\n                    me.children = [copy, sibling];\r\n                    me = copy;\r\n                } else {\r\n                    me.size -= sibling.size;\r\n                    me.height -= sibling.height;\r\n                    var myIndex = indexOf(me.parent.children, me);\r\n                    me.parent.children.splice(myIndex + 1, 0, sibling);\r\n                }\r\n                sibling.parent = me.parent;\r\n            } while (me.children.length > 10);\r\n            me.parent.maybeSpill();\r\n        },\r\n        iter: function(from, to, op) { this.iterN(from, to - from, op); },\r\n        iterN: function(at, n, op) {\r\n            for (var i = 0, e = this.children.length; i < e; ++i) {\r\n                var child = this.children[i], sz = child.chunkSize();\r\n                if (at < sz) {\r\n                    var used = Math.min(n, sz - at);\r\n                    if (child.iterN(at, used, op)) return true;\r\n                    if ((n -= used) == 0) break;\r\n                    at = 0;\r\n                } else at -= sz;\r\n            }\r\n        }\r\n    };\r\n\r\n    function getLineAt(chunk, n) {\r\n        while (!chunk.lines) {\r\n            for (var i = 0;; ++i) {\r\n                var child = chunk.children[i], sz = child.chunkSize();\r\n                if (n < sz) { chunk = child; break; }\r\n                n -= sz;\r\n            }\r\n        }\r\n        return chunk.lines[n];\r\n    }\r\n    function lineNo(line) {\r\n        if (line.parent == null) return null;\r\n        var cur = line.parent, no = indexOf(cur.lines, line);\r\n        for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\r\n            for (var i = 0, e = chunk.children.length; ; ++i) {\r\n                if (chunk.children[i] == cur) break;\r\n                no += chunk.children[i].chunkSize();\r\n            }\r\n        }\r\n        return no;\r\n    }\r\n    function lineAtHeight(chunk, h) {\r\n        var n = 0;\r\n        outer: do {\r\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\r\n                var child = chunk.children[i], ch = child.height;\r\n                if (h < ch) { chunk = child; continue outer; }\r\n                h -= ch;\r\n                n += child.chunkSize();\r\n            }\r\n            return n;\r\n        } while (!chunk.lines);\r\n        for (var i = 0, e = chunk.lines.length; i < e; ++i) {\r\n            var line = chunk.lines[i], lh = line.height;\r\n            if (h < lh) break;\r\n            h -= lh;\r\n        }\r\n        return n + i;\r\n    }\r\n    function heightAtLine(chunk, n) {\r\n        var h = 0;\r\n        outer: do {\r\n            for (var i = 0, e = chunk.children.length; i < e; ++i) {\r\n                var child = chunk.children[i], sz = child.chunkSize();\r\n                if (n < sz) { chunk = child; continue outer; }\r\n                n -= sz;\r\n                h += child.height;\r\n            }\r\n            return h;\r\n        } while (!chunk.lines);\r\n        for (var i = 0; i < n; ++i) h += chunk.lines[i].height;\r\n        return h;\r\n    }\r\n\r\n    // The history object 'chunks' changes that are made close together\r\n    // and at almost the same time into bigger undoable units.\r\n    function History() {\r\n        this.time = 0;\r\n        this.done = []; this.undone = [];\r\n    }\r\n    History.prototype = {\r\n        addChange: function(start, added, old) {\r\n            this.undone.length = 0;\r\n            var time = +new Date, last = this.done[this.done.length - 1];\r\n            if (time - this.time > 400 || !last ||\r\n                last.start > start + added || last.start + last.added < start - last.added + last.old.length)\r\n                this.done.push({start: start, added: added, old: old});\r\n            else {\r\n                var oldoff = 0;\r\n                if (start < last.start) {\r\n                    for (var i = last.start - start - 1; i >= 0; --i)\r\n                        last.old.unshift(old[i]);\r\n                    last.added += last.start - start;\r\n                    last.start = start;\r\n                }\r\n                else if (last.start < start) {\r\n                    oldoff = start - last.start;\r\n                    added += oldoff;\r\n                }\r\n                for (var i = last.added - oldoff, e = old.length; i < e; ++i)\r\n                    last.old.push(old[i]);\r\n                if (last.added < added) last.added = added;\r\n            }\r\n            this.time = time;\r\n        }\r\n    };\r\n\r\n    function stopMethod() {e_stop(this);}\r\n    // Ensure an event has a stop method.\r\n    function addStop(event) {\r\n        if (!event.stop) event.stop = stopMethod;\r\n        return event;\r\n    }\r\n\r\n    function e_preventDefault(e) {\r\n        if (e.preventDefault) e.preventDefault();\r\n        else e.returnValue = false;\r\n    }\r\n    function e_stopPropagation(e) {\r\n        if (e.stopPropagation) e.stopPropagation();\r\n        else e.cancelBubble = true;\r\n    }\r\n    function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\r\n    CodeMirror.e_stop = e_stop;\r\n    CodeMirror.e_preventDefault = e_preventDefault;\r\n    CodeMirror.e_stopPropagation = e_stopPropagation;\r\n\r\n    function e_target(e) {return e.target || e.srcElement;}\r\n    function e_button(e) {\r\n        if (e.which) return e.which;\r\n        else if (e.button & 1) return 1;\r\n        else if (e.button & 2) return 3;\r\n        else if (e.button & 4) return 2;\r\n    }\r\n\r\n    // Event handler registration. If disconnect is true, it'll return a\r\n    // function that unregisters the handler.\r\n    function connect(node, type, handler, disconnect) {\r\n        if (typeof node.addEventListener == \"function\") {\r\n            node.addEventListener(type, handler, false);\r\n            if (disconnect) return function() {node.removeEventListener(type, handler, false);};\r\n        }\r\n        else {\r\n            var wrapHandler = function(event) {handler(event || window.event);};\r\n            node.attachEvent(\"on\" + type, wrapHandler);\r\n            if (disconnect) return function() {node.detachEvent(\"on\" + type, wrapHandler);};\r\n        }\r\n    }\r\n    CodeMirror.connect = connect;\r\n\r\n    function Delayed() {this.id = null;}\r\n    Delayed.prototype = {set: function(ms, f) {clearTimeout(this.id); this.id = setTimeout(f, ms);}};\r\n\r\n    // Detect drag-and-drop\r\n    var dragAndDrop = function() {\r\n        // IE8 has ondragstart and ondrop properties, but doesn't seem to\r\n        // actually support ondragstart the way it's supposed to work.\r\n        if (/MSIE [1-8]\\b/.test(navigator.userAgent)) return false;\r\n        var div = document.createElement('div');\r\n        return \"draggable\" in div;\r\n    }();\r\n\r\n    var gecko = /gecko\\/\\d{7}/i.test(navigator.userAgent);\r\n    var ie = /MSIE \\d/.test(navigator.userAgent);\r\n    var webkit = /WebKit\\//.test(navigator.userAgent);\r\n\r\n    var lineSep = \"\\n\";\r\n    // Feature-detect whether newlines in textareas are converted to \\r\\n\r\n    (function () {\r\n        var te = document.createElement(\"textarea\");\r\n        te.value = \"foo\\nbar\";\r\n        if (te.value.indexOf(\"\\r\") > -1) lineSep = \"\\r\\n\";\r\n    }());\r\n\r\n    // Counts the column offset in a string, taking tabs into account.\r\n    // Used mostly to find indentation.\r\n    function countColumn(string, end, tabSize) {\r\n        if (end == null) {\r\n            end = string.search(/[^\\s\\u00a0]/);\r\n            if (end == -1) end = string.length;\r\n        }\r\n        for (var i = 0, n = 0; i < end; ++i) {\r\n            if (string.charAt(i) == \"\\t\") n += tabSize - (n % tabSize);\r\n            else ++n;\r\n        }\r\n        return n;\r\n    }\r\n\r\n    function computedStyle(elt) {\r\n        if (elt.currentStyle) return elt.currentStyle;\r\n        return window.getComputedStyle(elt, null);\r\n    }\r\n\r\n    // Find the position of an element by following the offsetParent chain.\r\n    // If screen==true, it returns screen (rather than page) coordinates.\r\n    function eltOffset(node, screen) {\r\n        var bod = node.ownerDocument.body;\r\n        var x = 0, y = 0, skipBody = false;\r\n        for (var n = node; n; n = n.offsetParent) {\r\n            var ol = n.offsetLeft, ot = n.offsetTop;\r\n            // Firefox reports weird inverted offsets when the body has a border.\r\n            if (n == bod) { x += Math.abs(ol); y += Math.abs(ot); }\r\n            else { x += ol, y += ot; }\r\n            if (screen && computedStyle(n).position == \"fixed\")\r\n                skipBody = true;\r\n        }\r\n        var e = screen && !skipBody ? null : bod;\r\n        for (var n = node.parentNode; n != e; n = n.parentNode)\r\n            if (n.scrollLeft != null) { x -= n.scrollLeft; y -= n.scrollTop;}\r\n        return {left: x, top: y};\r\n    }\r\n    // Use the faster and saner getBoundingClientRect method when possible.\r\n    if (document.documentElement.getBoundingClientRect != null) eltOffset = function(node, screen) {\r\n        // Take the parts of bounding client rect that we are interested in so we are able to edit if need be,\r\n        // since the returned value cannot be changed externally (they are kept in sync as the element moves within the page)\r\n        try { var box = node.getBoundingClientRect(); box = { top: box.top, left: box.left }; }\r\n        catch(e) { box = {top: 0, left: 0}; }\r\n        if (!screen) {\r\n            // Get the toplevel scroll, working around browser differences.\r\n            if (window.pageYOffset == null) {\r\n                var t = document.documentElement || document.body.parentNode;\r\n                if (t.scrollTop == null) t = document.body;\r\n                box.top += t.scrollTop; box.left += t.scrollLeft;\r\n            } else {\r\n                box.top += window.pageYOffset; box.left += window.pageXOffset;\r\n            }\r\n        }\r\n        return box;\r\n    };\r\n\r\n    // Get a node's text content.\r\n    function eltText(node) {\r\n        return node.textContent || node.innerText || node.nodeValue || \"\";\r\n    }\r\n\r\n    // Operations on {line, ch} objects.\r\n    function posEq(a, b) {return a.line == b.line && a.ch == b.ch;}\r\n    function posLess(a, b) {return a.line < b.line || (a.line == b.line && a.ch < b.ch);}\r\n    function copyPos(x) {return {line: x.line, ch: x.ch};}\r\n\r\n    var escapeElement = document.createElement(\"pre\");\r\n    function htmlEscape(str) {\r\n        escapeElement.textContent = str;\r\n        return escapeElement.innerHTML;\r\n    }\r\n    // Recent (late 2011) Opera betas insert bogus newlines at the start\r\n    // of the textContent, so we strip those.\r\n    if (htmlEscape(\"a\") == \"\\na\")\r\n        htmlEscape = function(str) {\r\n            escapeElement.textContent = str;\r\n            return escapeElement.innerHTML.slice(1);\r\n        };\r\n    // Some IEs don't preserve tabs through innerHTML\r\n    else if (htmlEscape(\"\\t\") != \"\\t\")\r\n        htmlEscape = function(str) {\r\n            escapeElement.innerHTML = \"\";\r\n            escapeElement.appendChild(document.createTextNode(str));\r\n            return escapeElement.innerHTML;\r\n        };\r\n    CodeMirror.htmlEscape = htmlEscape;\r\n\r\n    // Used to position the cursor after an undo/redo by finding the\r\n    // last edited character.\r\n    function editEnd(from, to) {\r\n        if (!to) return from ? from.length : 0;\r\n        if (!from) return to.length;\r\n        for (var i = from.length, j = to.length; i >= 0 && j >= 0; --i, --j)\r\n            if (from.charAt(i) != to.charAt(j)) break;\r\n        return j + 1;\r\n    }\r\n\r\n    function indexOf(collection, elt) {\r\n        if (collection.indexOf) return collection.indexOf(elt);\r\n        for (var i = 0, e = collection.length; i < e; ++i)\r\n            if (collection[i] == elt) return i;\r\n        return -1;\r\n    }\r\n    function isWordChar(ch) {\r\n        return /\\w/.test(ch) || ch.toUpperCase() != ch.toLowerCase();\r\n    }\r\n\r\n    // See if \"\".split is the broken IE version, if so, provide an\r\n    // alternative way to split lines.\r\n    var splitLines = \"\\n\\nb\".split(/\\n/).length != 3 ? function(string) {\r\n        var pos = 0, nl, result = [];\r\n        while ((nl = string.indexOf(\"\\n\", pos)) > -1) {\r\n            result.push(string.slice(pos, string.charAt(nl-1) == \"\\r\" ? nl - 1 : nl));\r\n            pos = nl + 1;\r\n        }\r\n        result.push(string.slice(pos));\r\n        return result;\r\n    } : function(string){return string.split(/\\r?\\n/);};\r\n    CodeMirror.splitLines = splitLines;\r\n\r\n    var hasSelection = window.getSelection ? function(te) {\r\n        try { return te.selectionStart != te.selectionEnd; }\r\n        catch(e) { return false; }\r\n    } : function(te) {\r\n        try {var range = te.ownerDocument.selection.createRange();}\r\n        catch(e) {}\r\n        if (!range || range.parentElement() != te) return false;\r\n        return range.compareEndPoints(\"StartToEnd\", range) != 0;\r\n    };\r\n\r\n    CodeMirror.defineMode(\"null\", function() {\r\n        return {token: function(stream) {stream.skipToEnd();}};\r\n    });\r\n    CodeMirror.defineMIME(\"text/plain\", \"null\");\r\n\r\n    var keyNames = {3: \"Enter\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\r\n        19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\r\n        36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\r\n        46: \"Delete\", 59: \";\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\", 186: \";\", 187: \"=\", 188: \",\",\r\n        189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\", 221: \"]\", 222: \"'\", 63276: \"PageUp\",\r\n        63277: \"PageDown\", 63275: \"End\", 63273: \"Home\", 63234: \"Left\", 63232: \"Up\", 63235: \"Right\",\r\n        63233: \"Down\", 63302: \"Insert\", 63272: \"Delete\"};\r\n    CodeMirror.keyNames = keyNames;\r\n    (function() {\r\n        // Number keys\r\n        for (var i = 0; i < 10; i++) keyNames[i + 48] = String(i);\r\n        // Alphabetic keys\r\n        for (var i = 65; i <= 90; i++) keyNames[i] = String.fromCharCode(i);\r\n        // Function keys\r\n        for (var i = 1; i <= 12; i++) keyNames[i + 111] = keyNames[i + 63235] = \"F\" + i;\r\n    })();\r\n\r\n    return CodeMirror;\r\n})();\r\nCodeMirror.defineMode(\"xml\", function(config, parserConfig) {\r\n    var indentUnit = config.indentUnit;\r\n    var Kludges = parserConfig.htmlMode ? {\r\n        autoSelfClosers: {\"br\": true, \"img\": true, \"hr\": true, \"link\": true, \"input\": true,\r\n            \"meta\": true, \"col\": true, \"frame\": true, \"base\": true, \"area\": true},\r\n        doNotIndent: {\"pre\": true},\r\n        allowUnquoted: true\r\n    } : {autoSelfClosers: {}, doNotIndent: {}, allowUnquoted: false};\r\n    var alignCDATA = parserConfig.alignCDATA;\r\n\r\n    // Return variables for tokenizers\r\n    var tagName, type;\r\n\r\n    function inText(stream, state) {\r\n        function chain(parser) {\r\n            state.tokenize = parser;\r\n            return parser(stream, state);\r\n        }\r\n\r\n        var ch = stream.next();\r\n        if (ch == \"<\") {\r\n            if (stream.eat(\"!\")) {\r\n                if (stream.eat(\"[\")) {\r\n                    if (stream.match(\"CDATA[\")) return chain(inBlock(\"atom\", \"]]>\"));\r\n                    else return null;\r\n                }\r\n                else if (stream.match(\"--\")) return chain(inBlock(\"comment\", \"-->\"));\r\n                else if (stream.match(\"DOCTYPE\", true, true)) {\r\n                    stream.eatWhile(/[\\w\\._\\-]/);\r\n                    return chain(doctype(1));\r\n                }\r\n                else return null;\r\n            }\r\n            else if (stream.eat(\"?\")) {\r\n                stream.eatWhile(/[\\w\\._\\-]/);\r\n                state.tokenize = inBlock(\"meta\", \"?>\");\r\n                return \"meta\";\r\n            }\r\n            else {\r\n                type = stream.eat(\"/\") ? \"closeTag\" : \"openTag\";\r\n                stream.eatSpace();\r\n                tagName = \"\";\r\n                var c;\r\n                while ((c = stream.eat(/[^\\s\\u00a0=<>\\\"\\'\\/?]/))) tagName += c;\r\n                state.tokenize = inTag;\r\n                return \"tag\";\r\n            }\r\n        }\r\n        else if (ch == \"&\") {\r\n            stream.eatWhile(/[^;]/);\r\n            stream.eat(\";\");\r\n            return \"atom\";\r\n        }\r\n        else {\r\n            stream.eatWhile(/[^&<]/);\r\n            return null;\r\n        }\r\n    }\r\n\r\n    function inTag(stream, state) {\r\n        var ch = stream.next();\r\n        if (ch == \">\" || (ch == \"/\" && stream.eat(\">\"))) {\r\n            state.tokenize = inText;\r\n            type = ch == \">\" ? \"endTag\" : \"selfcloseTag\";\r\n            return \"tag\";\r\n        }\r\n        else if (ch == \"=\") {\r\n            type = \"equals\";\r\n            return null;\r\n        }\r\n        else if (/[\\'\\\"]/.test(ch)) {\r\n            state.tokenize = inAttribute(ch);\r\n            return state.tokenize(stream, state);\r\n        }\r\n        else {\r\n            stream.eatWhile(/[^\\s\\u00a0=<>\\\"\\'\\/?]/);\r\n            return \"word\";\r\n        }\r\n    }\r\n\r\n    function inAttribute(quote) {\r\n        return function(stream, state) {\r\n            while (!stream.eol()) {\r\n                if (stream.next() == quote) {\r\n                    state.tokenize = inTag;\r\n                    break;\r\n                }\r\n            }\r\n            return \"string\";\r\n        };\r\n    }\r\n\r\n    function inBlock(style, terminator) {\r\n        return function(stream, state) {\r\n            while (!stream.eol()) {\r\n                if (stream.match(terminator)) {\r\n                    state.tokenize = inText;\r\n                    break;\r\n                }\r\n                stream.next();\r\n            }\r\n            return style;\r\n        };\r\n    }\r\n    function doctype(depth) {\r\n        return function(stream, state) {\r\n            var ch;\r\n            while ((ch = stream.next()) != null) {\r\n                if (ch == \"<\") {\r\n                    state.tokenize = doctype(depth + 1);\r\n                    return state.tokenize(stream, state);\r\n                } else if (ch == \">\") {\r\n                    if (depth == 1) {\r\n                        state.tokenize = inText;\r\n                        break;\r\n                    } else {\r\n                        state.tokenize = doctype(depth - 1);\r\n                        return state.tokenize(stream, state);\r\n                    }\r\n                }\r\n            }\r\n            return \"meta\";\r\n        };\r\n    }\r\n\r\n    var curState, setStyle;\r\n    function pass() {\r\n        for (var i = arguments.length - 1; i >= 0; i--) curState.cc.push(arguments[i]);\r\n    }\r\n    function cont() {\r\n        pass.apply(null, arguments);\r\n        return true;\r\n    }\r\n\r\n    function pushContext(tagName, startOfLine) {\r\n        var noIndent = Kludges.doNotIndent.hasOwnProperty(tagName) || (curState.context && curState.context.noIndent);\r\n        curState.context = {\r\n            prev: curState.context,\r\n            tagName: tagName,\r\n            indent: curState.indented,\r\n            startOfLine: startOfLine,\r\n            noIndent: noIndent\r\n        };\r\n    }\r\n    function popContext() {\r\n        if (curState.context) curState.context = curState.context.prev;\r\n    }\r\n\r\n    function element(type) {\r\n        if (type == \"openTag\") {\r\n            curState.tagName = tagName;\r\n            return cont(attributes, endtag(curState.startOfLine));\r\n        } else if (type == \"closeTag\") {\r\n            var err = false;\r\n            if (curState.context) {\r\n                err = curState.context.tagName != tagName;\r\n            } else {\r\n                err = true;\r\n            }\r\n            if (err) setStyle = \"error\";\r\n            return cont(endclosetag(err));\r\n        }\r\n        return cont();\r\n    }\r\n    function endtag(startOfLine) {\r\n        return function(type) {\r\n            if (type == \"selfcloseTag\" ||\r\n                (type == \"endTag\" && Kludges.autoSelfClosers.hasOwnProperty(curState.tagName.toLowerCase())))\r\n                return cont();\r\n            if (type == \"endTag\") {pushContext(curState.tagName, startOfLine); return cont();}\r\n            return cont();\r\n        };\r\n    }\r\n    function endclosetag(err) {\r\n        return function(type) {\r\n            if (err) setStyle = \"error\";\r\n            if (type == \"endTag\") { popContext(); return cont(); }\r\n            setStyle = \"error\";\r\n            return cont(arguments.callee);\r\n        }\r\n    }\r\n\r\n    function attributes(type) {\r\n        if (type == \"word\") {setStyle = \"attribute\"; return cont(attributes);}\r\n        if (type == \"equals\") return cont(attvalue, attributes);\r\n        if (type == \"string\") {setStyle = \"error\"; return cont(attributes);}\r\n        return pass();\r\n    }\r\n    function attvalue(type) {\r\n        if (type == \"word\" && Kludges.allowUnquoted) {setStyle = \"string\"; return cont();}\r\n        if (type == \"string\") return cont(attvaluemaybe);\r\n        return pass();\r\n    }\r\n    function attvaluemaybe(type) {\r\n        if (type == \"string\") return cont(attvaluemaybe);\r\n        else return pass();\r\n    }\r\n\r\n    return {\r\n        startState: function() {\r\n            return {tokenize: inText, cc: [], indented: 0, startOfLine: true, tagName: null, context: null};\r\n        },\r\n\r\n        token: function(stream, state) {\r\n            if (stream.sol()) {\r\n                state.startOfLine = true;\r\n                state.indented = stream.indentation();\r\n            }\r\n            if (stream.eatSpace()) return null;\r\n\r\n            setStyle = type = tagName = null;\r\n            var style = state.tokenize(stream, state);\r\n            state.type = type;\r\n            if ((style || type) && style != \"comment\") {\r\n                curState = state;\r\n                while (true) {\r\n                    var comb = state.cc.pop() || element;\r\n                    if (comb(type || style)) break;\r\n                }\r\n            }\r\n            state.startOfLine = false;\r\n            return setStyle || style;\r\n        },\r\n\r\n        indent: function(state, textAfter, fullLine) {\r\n            var context = state.context;\r\n            if ((state.tokenize != inTag && state.tokenize != inText) ||\r\n                context && context.noIndent)\r\n                return fullLine ? fullLine.match(/^(\\s*)/)[0].length : 0;\r\n            if (alignCDATA && /<!\\[CDATA\\[/.test(textAfter)) return 0;\r\n            if (context && /^<\\//.test(textAfter))\r\n                context = context.prev;\r\n            while (context && !context.startOfLine)\r\n                context = context.prev;\r\n            if (context) return context.indent + indentUnit;\r\n            else return 0;\r\n        },\r\n\r\n        compareStates: function(a, b) {\r\n            if (a.indented != b.indented || a.tokenize != b.tokenize) return false;\r\n            for (var ca = a.context, cb = b.context; ; ca = ca.prev, cb = cb.prev) {\r\n                if (!ca || !cb) return ca == cb;\r\n                if (ca.tagName != cb.tagName) return false;\r\n            }\r\n        },\r\n\r\n        electricChars: \"/\"\r\n    };\r\n});\r\n\r\nCodeMirror.defineMIME(\"application/xml\", \"xml\");\r\nCodeMirror.defineMIME(\"text/html\", {name: \"xml\", htmlMode: true});\r\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\r\n    var indentUnit = config.indentUnit;\r\n    var jsonMode = parserConfig.json;\r\n\r\n    // Tokenizer\r\n\r\n    var keywords = function(){\r\n        function kw(type) {return {type: type, style: \"keyword\"};}\r\n        var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\");\r\n        var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\r\n        return {\r\n            \"if\": A, \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\r\n            \"return\": C, \"break\": C, \"continue\": C, \"new\": C, \"delete\": C, \"throw\": C,\r\n            \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\r\n            \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\r\n            \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\r\n            \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\r\n            \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom\r\n        };\r\n    }();\r\n\r\n    var isOperatorChar = /[+\\-*&%=<>!?|]/;\r\n\r\n    function chain(stream, state, f) {\r\n        state.tokenize = f;\r\n        return f(stream, state);\r\n    }\r\n\r\n    function nextUntilUnescaped(stream, end) {\r\n        var escaped = false, next;\r\n        while ((next = stream.next()) != null) {\r\n            if (next == end && !escaped)\r\n                return false;\r\n            escaped = !escaped && next == \"\\\\\";\r\n        }\r\n        return escaped;\r\n    }\r\n\r\n    // Used as scratch variables to communicate multiple values without\r\n    // consing up tons of objects.\r\n    var type, content;\r\n    function ret(tp, style, cont) {\r\n        type = tp; content = cont;\r\n        return style;\r\n    }\r\n\r\n    function jsTokenBase(stream, state) {\r\n        var ch = stream.next();\r\n        if (ch == '\"' || ch == \"'\")\r\n            return chain(stream, state, jsTokenString(ch));\r\n        else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch))\r\n            return ret(ch);\r\n        else if (ch == \"0\" && stream.eat(/x/i)) {\r\n            stream.eatWhile(/[\\da-f]/i);\r\n            return ret(\"number\", \"number\");\r\n        }\r\n        else if (/\\d/.test(ch)) {\r\n            stream.match(/^\\d*(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/);\r\n            return ret(\"number\", \"number\");\r\n        }\r\n        else if (ch == \"/\") {\r\n            if (stream.eat(\"*\")) {\r\n                return chain(stream, state, jsTokenComment);\r\n            }\r\n            else if (stream.eat(\"/\")) {\r\n                stream.skipToEnd();\r\n                return ret(\"comment\", \"comment\");\r\n            }\r\n            else if (state.reAllowed) {\r\n                nextUntilUnescaped(stream, \"/\");\r\n                stream.eatWhile(/[gimy]/); // 'y' is \"sticky\" option in Mozilla\r\n                return ret(\"regexp\", \"string\");\r\n            }\r\n            else {\r\n                stream.eatWhile(isOperatorChar);\r\n                return ret(\"operator\", null, stream.current());\r\n            }\r\n        }\r\n        else if (ch == \"#\") {\r\n            stream.skipToEnd();\r\n            return ret(\"error\", \"error\");\r\n        }\r\n        else if (isOperatorChar.test(ch)) {\r\n            stream.eatWhile(isOperatorChar);\r\n            return ret(\"operator\", null, stream.current());\r\n        }\r\n        else {\r\n            stream.eatWhile(/[\\w\\$_]/);\r\n            var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word];\r\n            return (known && state.kwAllowed) ? ret(known.type, known.style, word) :\r\n                ret(\"variable\", \"variable\", word);\r\n        }\r\n    }\r\n\r\n    function jsTokenString(quote) {\r\n        return function(stream, state) {\r\n            if (!nextUntilUnescaped(stream, quote))\r\n                state.tokenize = jsTokenBase;\r\n            return ret(\"string\", \"string\");\r\n        };\r\n    }\r\n\r\n    function jsTokenComment(stream, state) {\r\n        var maybeEnd = false, ch;\r\n        while (ch = stream.next()) {\r\n            if (ch == \"/\" && maybeEnd) {\r\n                state.tokenize = jsTokenBase;\r\n                break;\r\n            }\r\n            maybeEnd = (ch == \"*\");\r\n        }\r\n        return ret(\"comment\", \"comment\");\r\n    }\r\n\r\n    // Parser\r\n\r\n    var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true, \"regexp\": true};\r\n\r\n    function JSLexical(indented, column, type, align, prev, info) {\r\n        this.indented = indented;\r\n        this.column = column;\r\n        this.type = type;\r\n        this.prev = prev;\r\n        this.info = info;\r\n        if (align != null) this.align = align;\r\n    }\r\n\r\n    function inScope(state, varname) {\r\n        for (var v = state.localVars; v; v = v.next)\r\n            if (v.name == varname) return true;\r\n    }\r\n\r\n    function parseJS(state, style, type, content, stream) {\r\n        var cc = state.cc;\r\n        // Communicate our context to the combinators.\r\n        // (Less wasteful than consing up a hundred closures on every call.)\r\n        cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc;\r\n\r\n        if (!state.lexical.hasOwnProperty(\"align\"))\r\n            state.lexical.align = true;\r\n\r\n        while(true) {\r\n            var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\r\n            if (combinator(type, content)) {\r\n                while(cc.length && cc[cc.length - 1].lex)\r\n                    cc.pop()();\r\n                if (cx.marked) return cx.marked;\r\n                if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\r\n                return style;\r\n            }\r\n        }\r\n    }\r\n\r\n    // Combinator utils\r\n\r\n    var cx = {state: null, column: null, marked: null, cc: null};\r\n    function pass() {\r\n        for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\r\n    }\r\n    function cont() {\r\n        pass.apply(null, arguments);\r\n        return true;\r\n    }\r\n    function register(varname) {\r\n        var state = cx.state;\r\n        if (state.context) {\r\n            cx.marked = \"def\";\r\n            for (var v = state.localVars; v; v = v.next)\r\n                if (v.name == varname) return;\r\n            state.localVars = {name: varname, next: state.localVars};\r\n        }\r\n    }\r\n\r\n    // Combinators\r\n\r\n    var defaultVars = {name: \"this\", next: {name: \"arguments\"}};\r\n    function pushcontext() {\r\n        if (!cx.state.context) cx.state.localVars = defaultVars;\r\n        cx.state.context = {prev: cx.state.context, vars: cx.state.localVars};\r\n    }\r\n    function popcontext() {\r\n        cx.state.localVars = cx.state.context.vars;\r\n        cx.state.context = cx.state.context.prev;\r\n    }\r\n    function pushlex(type, info) {\r\n        var result = function() {\r\n            var state = cx.state;\r\n            state.lexical = new JSLexical(state.indented, cx.stream.column(), type, null, state.lexical, info)\r\n        };\r\n        result.lex = true;\r\n        return result;\r\n    }\r\n    function poplex() {\r\n        var state = cx.state;\r\n        if (state.lexical.prev) {\r\n            if (state.lexical.type == \")\")\r\n                state.indented = state.lexical.indented;\r\n            state.lexical = state.lexical.prev;\r\n        }\r\n    }\r\n    poplex.lex = true;\r\n\r\n    function expect(wanted) {\r\n        return function expecting(type) {\r\n            if (type == wanted) return cont();\r\n            else if (wanted == \";\") return pass();\r\n            else return cont(arguments.callee);\r\n        };\r\n    }\r\n\r\n    function statement(type) {\r\n        if (type == \"var\") return cont(pushlex(\"vardef\"), vardef1, expect(\";\"), poplex);\r\n        if (type == \"keyword a\") return cont(pushlex(\"form\"), expression, statement, poplex);\r\n        if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\r\n        if (type == \"{\") return cont(pushlex(\"}\"), block, poplex);\r\n        if (type == \";\") return cont();\r\n        if (type == \"function\") return cont(functiondef);\r\n        if (type == \"for\") return cont(pushlex(\"form\"), expect(\"(\"), pushlex(\")\"), forspec1, expect(\")\"),\r\n            poplex, statement, poplex);\r\n        if (type == \"variable\") return cont(pushlex(\"stat\"), maybelabel);\r\n        if (type == \"switch\") return cont(pushlex(\"form\"), expression, pushlex(\"}\", \"switch\"), expect(\"{\"),\r\n            block, poplex, poplex);\r\n        if (type == \"case\") return cont(expression, expect(\":\"));\r\n        if (type == \"default\") return cont(expect(\":\"));\r\n        if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, expect(\"(\"), funarg, expect(\")\"),\r\n            statement, poplex, popcontext);\r\n        return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\r\n    }\r\n    function expression(type) {\r\n        if (atomicTypes.hasOwnProperty(type)) return cont(maybeoperator);\r\n        if (type == \"function\") return cont(functiondef);\r\n        if (type == \"keyword c\") return cont(maybeexpression);\r\n        if (type == \"(\") return cont(pushlex(\")\"), expression, expect(\")\"), poplex, maybeoperator);\r\n        if (type == \"operator\") return cont(expression);\r\n        if (type == \"[\") return cont(pushlex(\"]\"), commasep(expression, \"]\"), poplex, maybeoperator);\r\n        if (type == \"{\") return cont(pushlex(\"}\"), commasep(objprop, \"}\"), poplex, maybeoperator);\r\n        return cont();\r\n    }\r\n    function maybeexpression(type) {\r\n        if (type.match(/[;\\}\\)\\],]/)) return pass();\r\n        return pass(expression);\r\n    }\r\n\r\n    function maybeoperator(type, value) {\r\n        if (type == \"operator\" && /\\+\\+|--/.test(value)) return cont(maybeoperator);\r\n        if (type == \"operator\") return cont(expression);\r\n        if (type == \";\") return;\r\n        if (type == \"(\") return cont(pushlex(\")\"), commasep(expression, \")\"), poplex, maybeoperator);\r\n        if (type == \".\") return cont(property, maybeoperator);\r\n        if (type == \"[\") return cont(pushlex(\"]\"), expression, expect(\"]\"), poplex, maybeoperator);\r\n    }\r\n    function maybelabel(type) {\r\n        if (type == \":\") return cont(poplex, statement);\r\n        return pass(maybeoperator, expect(\";\"), poplex);\r\n    }\r\n    function property(type) {\r\n        if (type == \"variable\") {cx.marked = \"property\"; return cont();}\r\n    }\r\n    function objprop(type) {\r\n        if (type == \"variable\") cx.marked = \"property\";\r\n        if (atomicTypes.hasOwnProperty(type)) return cont(expect(\":\"), expression);\r\n    }\r\n    function commasep(what, end) {\r\n        function proceed(type) {\r\n            if (type == \",\") return cont(what, proceed);\r\n            if (type == end) return cont();\r\n            return cont(expect(end));\r\n        }\r\n        return function commaSeparated(type) {\r\n            if (type == end) return cont();\r\n            else return pass(what, proceed);\r\n        };\r\n    }\r\n    function block(type) {\r\n        if (type == \"}\") return cont();\r\n        return pass(statement, block);\r\n    }\r\n    function vardef1(type, value) {\r\n        if (type == \"variable\"){register(value); return cont(vardef2);}\r\n        return cont();\r\n    }\r\n    function vardef2(type, value) {\r\n        if (value == \"=\") return cont(expression, vardef2);\r\n        if (type == \",\") return cont(vardef1);\r\n    }\r\n    function forspec1(type) {\r\n        if (type == \"var\") return cont(vardef1, forspec2);\r\n        if (type == \";\") return pass(forspec2);\r\n        if (type == \"variable\") return cont(formaybein);\r\n        return pass(forspec2);\r\n    }\r\n    function formaybein(type, value) {\r\n        if (value == \"in\") return cont(expression);\r\n        return cont(maybeoperator, forspec2);\r\n    }\r\n    function forspec2(type, value) {\r\n        if (type == \";\") return cont(forspec3);\r\n        if (value == \"in\") return cont(expression);\r\n        return cont(expression, expect(\";\"), forspec3);\r\n    }\r\n    function forspec3(type) {\r\n        if (type != \")\") cont(expression);\r\n    }\r\n    function functiondef(type, value) {\r\n        if (type == \"variable\") {register(value); return cont(functiondef);}\r\n        if (type == \"(\") return cont(pushlex(\")\"), pushcontext, commasep(funarg, \")\"), poplex, statement, popcontext);\r\n    }\r\n    function funarg(type, value) {\r\n        if (type == \"variable\") {register(value); return cont();}\r\n    }\r\n\r\n    // Interface\r\n\r\n    return {\r\n        startState: function(basecolumn) {\r\n            return {\r\n                tokenize: jsTokenBase,\r\n                reAllowed: true,\r\n                kwAllowed: true,\r\n                cc: [],\r\n                lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\r\n                localVars: null,\r\n                context: null,\r\n                indented: 0\r\n            };\r\n        },\r\n\r\n        token: function(stream, state) {\r\n            if (stream.sol()) {\r\n                if (!state.lexical.hasOwnProperty(\"align\"))\r\n                    state.lexical.align = false;\r\n                state.indented = stream.indentation();\r\n            }\r\n            if (stream.eatSpace()) return null;\r\n            var style = state.tokenize(stream, state);\r\n            if (type == \"comment\") return style;\r\n            state.reAllowed = type == \"operator\" || type == \"keyword c\" || type.match(/^[\\[{}\\(,;:]$/);\r\n            state.kwAllowed = type != '.';\r\n            return parseJS(state, style, type, content, stream);\r\n        },\r\n\r\n        indent: function(state, textAfter) {\r\n            if (state.tokenize != jsTokenBase) return 0;\r\n            var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical,\r\n                type = lexical.type, closing = firstChar == type;\r\n            if (type == \"vardef\") return lexical.indented + 4;\r\n            else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\r\n            else if (type == \"stat\" || type == \"form\") return lexical.indented + indentUnit;\r\n            else if (lexical.info == \"switch\" && !closing)\r\n                return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\r\n            else if (lexical.align) return lexical.column + (closing ? 0 : 1);\r\n            else return lexical.indented + (closing ? 0 : indentUnit);\r\n        },\r\n\r\n        electricChars: \":{}\"\r\n    };\r\n});\r\n\r\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\r\nCodeMirror.defineMIME(\"application/json\", {name: \"javascript\", json: true});\r\n\r\nCodeMirror.defineMode(\"css\", function(config) {\r\n    var indentUnit = config.indentUnit, type;\r\n    function ret(style, tp) {type = tp; return style;}\r\n\r\n    function tokenBase(stream, state) {\r\n        var ch = stream.next();\r\n        if (ch == \"@\") {stream.eatWhile(/[\\w\\\\\\-]/); return ret(\"meta\", stream.current());}\r\n        else if (ch == \"/\" && stream.eat(\"*\")) {\r\n            state.tokenize = tokenCComment;\r\n            return tokenCComment(stream, state);\r\n        }\r\n        else if (ch == \"<\" && stream.eat(\"!\")) {\r\n            state.tokenize = tokenSGMLComment;\r\n            return tokenSGMLComment(stream, state);\r\n        }\r\n        else if (ch == \"=\") ret(null, \"compare\");\r\n        else if ((ch == \"~\" || ch == \"|\") && stream.eat(\"=\")) return ret(null, \"compare\");\r\n        else if (ch == \"\\\"\" || ch == \"'\") {\r\n            state.tokenize = tokenString(ch);\r\n            return state.tokenize(stream, state);\r\n        }\r\n        else if (ch == \"#\") {\r\n            stream.eatWhile(/[\\w\\\\\\-]/);\r\n            return ret(\"atom\", \"hash\");\r\n        }\r\n        else if (ch == \"!\") {\r\n            stream.match(/^\\s*\\w*/);\r\n            return ret(\"keyword\", \"important\");\r\n        }\r\n        else if (/\\d/.test(ch)) {\r\n            stream.eatWhile(/[\\w.%]/);\r\n            return ret(\"number\", \"unit\");\r\n        }\r\n        else if (/[,.+>*\\/]/.test(ch)) {\r\n            return ret(null, \"select-op\");\r\n        }\r\n        else if (/[;{}:\\[\\]]/.test(ch)) {\r\n            return ret(null, ch);\r\n        }\r\n        else {\r\n            stream.eatWhile(/[\\w\\\\\\-]/);\r\n            return ret(\"variable\", \"variable\");\r\n        }\r\n    }\r\n\r\n    function tokenCComment(stream, state) {\r\n        var maybeEnd = false, ch;\r\n        while ((ch = stream.next()) != null) {\r\n            if (maybeEnd && ch == \"/\") {\r\n                state.tokenize = tokenBase;\r\n                break;\r\n            }\r\n            maybeEnd = (ch == \"*\");\r\n        }\r\n        return ret(\"comment\", \"comment\");\r\n    }\r\n\r\n    function tokenSGMLComment(stream, state) {\r\n        var dashes = 0, ch;\r\n        while ((ch = stream.next()) != null) {\r\n            if (dashes >= 2 && ch == \">\") {\r\n                state.tokenize = tokenBase;\r\n                break;\r\n            }\r\n            dashes = (ch == \"-\") ? dashes + 1 : 0;\r\n        }\r\n        return ret(\"comment\", \"comment\");\r\n    }\r\n\r\n    function tokenString(quote) {\r\n        return function(stream, state) {\r\n            var escaped = false, ch;\r\n            while ((ch = stream.next()) != null) {\r\n                if (ch == quote && !escaped)\r\n                    break;\r\n                escaped = !escaped && ch == \"\\\\\";\r\n            }\r\n            if (!escaped) state.tokenize = tokenBase;\r\n            return ret(\"string\", \"string\");\r\n        };\r\n    }\r\n\r\n    return {\r\n        startState: function(base) {\r\n            return {tokenize: tokenBase,\r\n                baseIndent: base || 0,\r\n                stack: []};\r\n        },\r\n\r\n        token: function(stream, state) {\r\n            if (stream.eatSpace()) return null;\r\n            var style = state.tokenize(stream, state);\r\n\r\n            var context = state.stack[state.stack.length-1];\r\n            if (type == \"hash\" && context == \"rule\") style = \"atom\";\r\n            else if (style == \"variable\") {\r\n                if (context == \"rule\") style = \"number\";\r\n                else if (!context || context == \"@media{\") style = \"tag\";\r\n            }\r\n\r\n            if (context == \"rule\" && /^[\\{\\};]$/.test(type))\r\n                state.stack.pop();\r\n            if (type == \"{\") {\r\n                if (context == \"@media\") state.stack[state.stack.length-1] = \"@media{\";\r\n                else state.stack.push(\"{\");\r\n            }\r\n            else if (type == \"}\") state.stack.pop();\r\n            else if (type == \"@media\") state.stack.push(\"@media\");\r\n            else if (context == \"{\" && type != \"comment\") state.stack.push(\"rule\");\r\n            return style;\r\n        },\r\n\r\n        indent: function(state, textAfter) {\r\n            var n = state.stack.length;\r\n            if (/^\\}/.test(textAfter))\r\n                n -= state.stack[state.stack.length-1] == \"rule\" ? 2 : 1;\r\n            return state.baseIndent + n * indentUnit;\r\n        },\r\n\r\n        electricChars: \"}\"\r\n    };\r\n});\r\n\r\nCodeMirror.defineMIME(\"text/css\", \"css\");\r\nCodeMirror.defineMode(\"htmlmixed\", function(config, parserConfig) {\r\n    var htmlMode = CodeMirror.getMode(config, {name: \"xml\", htmlMode: true});\r\n    var jsMode = CodeMirror.getMode(config, \"javascript\");\r\n    var cssMode = CodeMirror.getMode(config, \"css\");\r\n\r\n    function html(stream, state) {\r\n        var style = htmlMode.token(stream, state.htmlState);\r\n        if (style == \"tag\" && stream.current() == \">\" && state.htmlState.context) {\r\n            if (/^script$/i.test(state.htmlState.context.tagName)) {\r\n                state.token = javascript;\r\n                state.localState = jsMode.startState(htmlMode.indent(state.htmlState, \"\"));\r\n                state.mode = \"javascript\";\r\n            }\r\n            else if (/^style$/i.test(state.htmlState.context.tagName)) {\r\n                state.token = css;\r\n                state.localState = cssMode.startState(htmlMode.indent(state.htmlState, \"\"));\r\n                state.mode = \"css\";\r\n            }\r\n        }\r\n        return style;\r\n    }\r\n    function maybeBackup(stream, pat, style) {\r\n        var cur = stream.current();\r\n        var close = cur.search(pat);\r\n        if (close > -1) stream.backUp(cur.length - close);\r\n        return style;\r\n    }\r\n    function javascript(stream, state) {\r\n        if (stream.match(/^<\\/\\s*script\\s*>/i, false)) {\r\n            state.token = html;\r\n            state.curState = null;\r\n            state.mode = \"html\";\r\n            return html(stream, state);\r\n        }\r\n        return maybeBackup(stream, /<\\/\\s*script\\s*>/,\r\n            jsMode.token(stream, state.localState));\r\n    }\r\n    function css(stream, state) {\r\n        if (stream.match(/^<\\/\\s*style\\s*>/i, false)) {\r\n            state.token = html;\r\n            state.localState = null;\r\n            state.mode = \"html\";\r\n            return html(stream, state);\r\n        }\r\n        return maybeBackup(stream, /<\\/\\s*style\\s*>/,\r\n            cssMode.token(stream, state.localState));\r\n    }\r\n\r\n    return {\r\n        startState: function() {\r\n            var state = htmlMode.startState();\r\n            return {token: html, localState: null, mode: \"html\", htmlState: state};\r\n        },\r\n\r\n        copyState: function(state) {\r\n            if (state.localState)\r\n                var local = CodeMirror.copyState(state.token == css ? cssMode : jsMode, state.localState);\r\n            return {token: state.token, localState: local, mode: state.mode,\r\n                htmlState: CodeMirror.copyState(htmlMode, state.htmlState)};\r\n        },\r\n\r\n        token: function(stream, state) {\r\n            return state.token(stream, state);\r\n        },\r\n\r\n        indent: function(state, textAfter) {\r\n            if (state.token == html || /^\\s*<\\//.test(textAfter))\r\n                return htmlMode.indent(state.htmlState, textAfter);\r\n            else if (state.token == javascript)\r\n                return jsMode.indent(state.localState, textAfter);\r\n            else\r\n                return cssMode.indent(state.localState, textAfter);\r\n        },\r\n\r\n        compareStates: function(a, b) {\r\n            return htmlMode.compareStates(a.htmlState, b.htmlState);\r\n        },\r\n\r\n        electricChars: \"/{}:\"\r\n    }\r\n});\r\n\r\nCodeMirror.defineMIME(\"text/html\", \"htmlmixed\");\r\n"
  },
  {
    "path": "third-party/jquery-1.10.2.js",
    "content": "/*! jQuery v1.10.2 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license\n//@ sourceMappingURL=jquery-1.10.2.min.map\n*/\n(function(e,t){var n,r,i=typeof t,o=e.location,a=e.document,s=a.documentElement,l=e.jQuery,u=e.$,c={},p=[],f=\"1.10.2\",d=p.concat,h=p.push,g=p.slice,m=p.indexOf,y=c.toString,v=c.hasOwnProperty,b=f.trim,x=function(e,t){return new x.fn.init(e,t,r)},w=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,T=/\\S+/g,C=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,N=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,k=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,E=/^[\\],:{}\\s]*$/,S=/(?:^|:|,)(?:\\s*\\[)+/g,A=/\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,j=/\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/g,D=/^-ms-/,L=/-([\\da-z])/gi,H=function(e,t){return t.toUpperCase()},q=function(e){(a.addEventListener||\"load\"===e.type||\"complete\"===a.readyState)&&(_(),x.ready())},_=function(){a.addEventListener?(a.removeEventListener(\"DOMContentLoaded\",q,!1),e.removeEventListener(\"load\",q,!1)):(a.detachEvent(\"onreadystatechange\",q),e.detachEvent(\"onload\",q))};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,n,r){var i,o;if(!e)return this;if(\"string\"==typeof e){if(i=\"<\"===e.charAt(0)&&\">\"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:N.exec(e),!i||!i[1]&&n)return!n||n.jquery?(n||r).find(e):this.constructor(n).find(e);if(i[1]){if(n=n instanceof x?n[0]:n,x.merge(this,x.parseHTML(i[1],n&&n.nodeType?n.ownerDocument||n:a,!0)),k.test(i[1])&&x.isPlainObject(n))for(i in n)x.isFunction(this[i])?this[i](n[i]):this.attr(i,n[i]);return this}if(o=a.getElementById(i[2]),o&&o.parentNode){if(o.id!==i[2])return r.find(e);this.length=1,this[0]=o}return this.context=a,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?r.ready(e):(e.selector!==t&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:\"\",length:0,toArray:function(){return g.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(g.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,n,r,i,o,a,s=arguments[0]||{},l=1,u=arguments.length,c=!1;for(\"boolean\"==typeof s&&(c=s,s=arguments[1]||{},l=2),\"object\"==typeof s||x.isFunction(s)||(s={}),u===l&&(s=this,--l);u>l;l++)if(null!=(o=arguments[l]))for(i in o)e=s[i],r=o[i],s!==r&&(c&&r&&(x.isPlainObject(r)||(n=x.isArray(r)))?(n?(n=!1,a=e&&x.isArray(e)?e:[]):a=e&&x.isPlainObject(e)?e:{},s[i]=x.extend(c,a,r)):r!==t&&(s[i]=r));return s},x.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=l),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){if(e===!0?!--x.readyWait:!x.isReady){if(!a.body)return setTimeout(x.ready);x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(a,[x]),x.fn.trigger&&x(a).trigger(\"ready\").off(\"ready\"))}},isFunction:function(e){return\"function\"===x.type(e)},isArray:Array.isArray||function(e){return\"array\"===x.type(e)},isWindow:function(e){return null!=e&&e==e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?c[y.call(e)]||\"object\":typeof e},isPlainObject:function(e){var n;if(!e||\"object\"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!v.call(e,\"constructor\")&&!v.call(e.constructor.prototype,\"isPrototypeOf\"))return!1}catch(r){return!1}if(x.support.ownLast)for(n in e)return v.call(e,n);for(n in e);return n===t||v.call(e,n)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||\"string\"!=typeof e)return null;\"boolean\"==typeof t&&(n=t,t=!1),t=t||a;var r=k.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:function(n){return e.JSON&&e.JSON.parse?e.JSON.parse(n):null===n?n:\"string\"==typeof n&&(n=x.trim(n),n&&E.test(n.replace(A,\"@\").replace(j,\"]\").replace(S,\"\")))?Function(\"return \"+n)():(x.error(\"Invalid JSON: \"+n),t)},parseXML:function(n){var r,i;if(!n||\"string\"!=typeof n)return null;try{e.DOMParser?(i=new DOMParser,r=i.parseFromString(n,\"text/xml\")):(r=new ActiveXObject(\"Microsoft.XMLDOM\"),r.async=\"false\",r.loadXML(n))}catch(o){r=t}return r&&r.documentElement&&!r.getElementsByTagName(\"parsererror\").length||x.error(\"Invalid XML: \"+n),r},noop:function(){},globalEval:function(t){t&&x.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(D,\"ms-\").replace(L,H)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,a=M(e);if(n){if(a){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(a){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:b&&!b.call(\"\\ufeff\\u00a0\")?function(e){return null==e?\"\":b.call(e)}:function(e){return null==e?\"\":(e+\"\").replace(C,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(M(Object(e))?x.merge(n,\"string\"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){var r;if(t){if(m)return m.call(t,e,n);for(r=t.length,n=n?0>n?Math.max(0,r+n):n:0;r>n;n++)if(n in t&&t[n]===e)return n}return-1},merge:function(e,n){var r=n.length,i=e.length,o=0;if(\"number\"==typeof r)for(;r>o;o++)e[i++]=n[o];else while(n[o]!==t)e[i++]=n[o++];return e.length=i,e},grep:function(e,t,n){var r,i=[],o=0,a=e.length;for(n=!!n;a>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,a=M(e),s=[];if(a)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(s[s.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(s[s.length]=r);return d.apply([],s)},guid:1,proxy:function(e,n){var r,i,o;return\"string\"==typeof n&&(o=e[n],n=e,e=o),x.isFunction(e)?(r=g.call(arguments,2),i=function(){return e.apply(n||this,r.concat(g.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):t},access:function(e,n,r,i,o,a,s){var l=0,u=e.length,c=null==r;if(\"object\"===x.type(r)){o=!0;for(l in r)x.access(e,n,l,r[l],!0,a,s)}else if(i!==t&&(o=!0,x.isFunction(i)||(s=!0),c&&(s?(n.call(e,i),n=null):(c=n,n=function(e,t,n){return c.call(x(e),n)})),n))for(;u>l;l++)n(e[l],r,s?i:i.call(e[l],l,n(e[l],r)));return o?e:c?n.call(e):u?n(e[0],r):a},now:function(){return(new Date).getTime()},swap:function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=a[o];return i}}),x.ready.promise=function(t){if(!n)if(n=x.Deferred(),\"complete\"===a.readyState)setTimeout(x.ready);else if(a.addEventListener)a.addEventListener(\"DOMContentLoaded\",q,!1),e.addEventListener(\"load\",q,!1);else{a.attachEvent(\"onreadystatechange\",q),e.attachEvent(\"onload\",q);var r=!1;try{r=null==e.frameElement&&a.documentElement}catch(i){}r&&r.doScroll&&function o(){if(!x.isReady){try{r.doScroll(\"left\")}catch(e){return setTimeout(o,50)}_(),x.ready()}}()}return n.promise(t)},x.each(\"Boolean Number String Function Array Date RegExp Object Error\".split(\" \"),function(e,t){c[\"[object \"+t+\"]\"]=t.toLowerCase()});function M(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:\"array\"===n||\"function\"!==n&&(0===t||\"number\"==typeof t&&t>0&&t-1 in e)}r=x(a),function(e,t){var n,r,i,o,a,s,l,u,c,p,f,d,h,g,m,y,v,b=\"sizzle\"+-new Date,w=e.document,T=0,C=0,N=st(),k=st(),E=st(),S=!1,A=function(e,t){return e===t?(S=!0,0):0},j=typeof t,D=1<<31,L={}.hasOwnProperty,H=[],q=H.pop,_=H.push,M=H.push,O=H.slice,F=H.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},B=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",P=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",R=\"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",W=R.replace(\"w\",\"w#\"),$=\"\\\\[\"+P+\"*(\"+R+\")\"+P+\"*(?:([*^$|!~]?=)\"+P+\"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\"+W+\")|)|)\"+P+\"*\\\\]\",I=\":(\"+R+\")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+$.replace(3,8)+\")*)|.*)\\\\)|)\",z=RegExp(\"^\"+P+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+P+\"+$\",\"g\"),X=RegExp(\"^\"+P+\"*,\"+P+\"*\"),U=RegExp(\"^\"+P+\"*([>+~]|\"+P+\")\"+P+\"*\"),V=RegExp(P+\"*[+~]\"),Y=RegExp(\"=\"+P+\"*([^\\\\]'\\\"]*)\"+P+\"*\\\\]\",\"g\"),J=RegExp(I),G=RegExp(\"^\"+W+\"$\"),Q={ID:RegExp(\"^#(\"+R+\")\"),CLASS:RegExp(\"^\\\\.(\"+R+\")\"),TAG:RegExp(\"^(\"+R.replace(\"w\",\"w*\")+\")\"),ATTR:RegExp(\"^\"+$),PSEUDO:RegExp(\"^\"+I),CHILD:RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+P+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+P+\"*(?:([+-]|)\"+P+\"*(\\\\d+)|))\"+P+\"*\\\\)|)\",\"i\"),bool:RegExp(\"^(?:\"+B+\")$\",\"i\"),needsContext:RegExp(\"^\"+P+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+P+\"*((?:-\\\\d)?\\\\d*)\"+P+\"*\\\\)|)(?=[^-]|$)\",\"i\")},K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,et=/^(?:input|select|textarea|button)$/i,tt=/^h\\d$/i,nt=/'|\\\\/g,rt=RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+P+\"?|(\"+P+\")|.)\",\"ig\"),it=function(e,t,n){var r=\"0x\"+t-65536;return r!==r||n?t:0>r?String.fromCharCode(r+65536):String.fromCharCode(55296|r>>10,56320|1023&r)};try{M.apply(H=O.call(w.childNodes),w.childNodes),H[w.childNodes.length].nodeType}catch(ot){M={apply:H.length?function(e,t){_.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function at(e,t,n,i){var o,a,s,l,u,c,d,m,y,x;if((t?t.ownerDocument||t:w)!==f&&p(t),t=t||f,n=n||[],!e||\"string\"!=typeof e)return n;if(1!==(l=t.nodeType)&&9!==l)return[];if(h&&!i){if(o=Z.exec(e))if(s=o[1]){if(9===l){if(a=t.getElementById(s),!a||!a.parentNode)return n;if(a.id===s)return n.push(a),n}else if(t.ownerDocument&&(a=t.ownerDocument.getElementById(s))&&v(t,a)&&a.id===s)return n.push(a),n}else{if(o[2])return M.apply(n,t.getElementsByTagName(e)),n;if((s=o[3])&&r.getElementsByClassName&&t.getElementsByClassName)return M.apply(n,t.getElementsByClassName(s)),n}if(r.qsa&&(!g||!g.test(e))){if(m=d=b,y=t,x=9===l&&e,1===l&&\"object\"!==t.nodeName.toLowerCase()){c=mt(e),(d=t.getAttribute(\"id\"))?m=d.replace(nt,\"\\\\$&\"):t.setAttribute(\"id\",m),m=\"[id='\"+m+\"'] \",u=c.length;while(u--)c[u]=m+yt(c[u]);y=V.test(e)&&t.parentNode||t,x=c.join(\",\")}if(x)try{return M.apply(n,y.querySelectorAll(x)),n}catch(T){}finally{d||t.removeAttribute(\"id\")}}}return kt(e.replace(z,\"$1\"),t,n,i)}function st(){var e=[];function t(n,r){return e.push(n+=\" \")>o.cacheLength&&delete t[e.shift()],t[n]=r}return t}function lt(e){return e[b]=!0,e}function ut(e){var t=f.createElement(\"div\");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ct(e,t){var n=e.split(\"|\"),r=e.length;while(r--)o.attrHandle[n[r]]=t}function pt(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return\"input\"===n&&t.type===e}}function dt(e){return function(t){var n=t.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&t.type===e}}function ht(e){return lt(function(t){return t=+t,lt(function(n,r){var i,o=e([],n.length,t),a=o.length;while(a--)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}s=at.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?\"HTML\"!==t.nodeName:!1},r=at.support={},p=at.setDocument=function(e){var n=e?e.ownerDocument||e:w,i=n.defaultView;return n!==f&&9===n.nodeType&&n.documentElement?(f=n,d=n.documentElement,h=!s(n),i&&i.attachEvent&&i!==i.top&&i.attachEvent(\"onbeforeunload\",function(){p()}),r.attributes=ut(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),r.getElementsByTagName=ut(function(e){return e.appendChild(n.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),r.getElementsByClassName=ut(function(e){return e.innerHTML=\"<div class='a'></div><div class='a i'></div>\",e.firstChild.className=\"i\",2===e.getElementsByClassName(\"i\").length}),r.getById=ut(function(e){return d.appendChild(e).id=b,!n.getElementsByName||!n.getElementsByName(b).length}),r.getById?(o.find.ID=function(e,t){if(typeof t.getElementById!==j&&h){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){return e.getAttribute(\"id\")===t}}):(delete o.find.ID,o.filter.ID=function(e){var t=e.replace(rt,it);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode(\"id\");return n&&n.value===t}}),o.find.TAG=r.getElementsByTagName?function(e,n){return typeof n.getElementsByTagName!==j?n.getElementsByTagName(e):t}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},o.find.CLASS=r.getElementsByClassName&&function(e,n){return typeof n.getElementsByClassName!==j&&h?n.getElementsByClassName(e):t},m=[],g=[],(r.qsa=K.test(n.querySelectorAll))&&(ut(function(e){e.innerHTML=\"<select><option selected=''></option></select>\",e.querySelectorAll(\"[selected]\").length||g.push(\"\\\\[\"+P+\"*(?:value|\"+B+\")\"),e.querySelectorAll(\":checked\").length||g.push(\":checked\")}),ut(function(e){var t=n.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"t\",\"\"),e.querySelectorAll(\"[t^='']\").length&&g.push(\"[*^$]=\"+P+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\":enabled\").length||g.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),g.push(\",.*:\")})),(r.matchesSelector=K.test(y=d.webkitMatchesSelector||d.mozMatchesSelector||d.oMatchesSelector||d.msMatchesSelector))&&ut(function(e){r.disconnectedMatch=y.call(e,\"div\"),y.call(e,\"[s!='']:x\"),m.push(\"!=\",I)}),g=g.length&&RegExp(g.join(\"|\")),m=m.length&&RegExp(m.join(\"|\")),v=K.test(d.contains)||d.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},A=d.compareDocumentPosition?function(e,t){if(e===t)return S=!0,0;var i=t.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(t);return i?1&i||!r.sortDetached&&t.compareDocumentPosition(e)===i?e===n||v(w,e)?-1:t===n||v(w,t)?1:c?F.call(c,e)-F.call(c,t):0:4&i?-1:1:e.compareDocumentPosition?-1:1}:function(e,t){var r,i=0,o=e.parentNode,a=t.parentNode,s=[e],l=[t];if(e===t)return S=!0,0;if(!o||!a)return e===n?-1:t===n?1:o?-1:a?1:c?F.call(c,e)-F.call(c,t):0;if(o===a)return pt(e,t);r=e;while(r=r.parentNode)s.unshift(r);r=t;while(r=r.parentNode)l.unshift(r);while(s[i]===l[i])i++;return i?pt(s[i],l[i]):s[i]===w?-1:l[i]===w?1:0},n):f},at.matches=function(e,t){return at(e,null,null,t)},at.matchesSelector=function(e,t){if((e.ownerDocument||e)!==f&&p(e),t=t.replace(Y,\"='$1']\"),!(!r.matchesSelector||!h||m&&m.test(t)||g&&g.test(t)))try{var n=y.call(e,t);if(n||r.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(i){}return at(t,f,null,[e]).length>0},at.contains=function(e,t){return(e.ownerDocument||e)!==f&&p(e),v(e,t)},at.attr=function(e,n){(e.ownerDocument||e)!==f&&p(e);var i=o.attrHandle[n.toLowerCase()],a=i&&L.call(o.attrHandle,n.toLowerCase())?i(e,n,!h):t;return a===t?r.attributes||!h?e.getAttribute(n):(a=e.getAttributeNode(n))&&a.specified?a.value:null:a},at.error=function(e){throw Error(\"Syntax error, unrecognized expression: \"+e)},at.uniqueSort=function(e){var t,n=[],i=0,o=0;if(S=!r.detectDuplicates,c=!r.sortStable&&e.slice(0),e.sort(A),S){while(t=e[o++])t===e[o]&&(i=n.push(o));while(i--)e.splice(n[i],1)}return e},a=at.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=a(e)}else if(3===i||4===i)return e.nodeValue}else for(;t=e[r];r++)n+=a(t);return n},o=at.selectors={cacheLength:50,createPseudo:lt,match:Q,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(rt,it),e[3]=(e[4]||e[5]||\"\").replace(rt,it),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||at.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&at.error(e[0]),e},PSEUDO:function(e){var n,r=!e[5]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]&&e[4]!==t?e[2]=e[4]:r&&J.test(r)&&(n=mt(r,!0))&&(n=r.indexOf(\")\",r.length-n)-r.length)&&(e[0]=e[0].slice(0,n),e[2]=r.slice(0,n)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(rt,it).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=N[e+\" \"];return t||(t=RegExp(\"(^|\"+P+\")\"+e+\"(\"+P+\"|$)\"))&&N(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute(\"class\")||\"\")})},ATTR:function(e,t,n){return function(r){var i=at.attr(r,e);return null==i?\"!=\"===t:t?(i+=\"\",\"=\"===t?i===n:\"!=\"===t?i!==n:\"^=\"===t?n&&0===i.indexOf(n):\"*=\"===t?n&&i.indexOf(n)>-1:\"$=\"===t?n&&i.slice(-n.length)===n:\"~=\"===t?(\" \"+i+\" \").indexOf(n)>-1:\"|=\"===t?i===n||i.slice(0,n.length+1)===n+\"-\":!1):!0}},CHILD:function(e,t,n,r,i){var o=\"nth\"!==e.slice(0,3),a=\"last\"!==e.slice(-4),s=\"of-type\"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,l){var u,c,p,f,d,h,g=o!==a?\"nextSibling\":\"previousSibling\",m=t.parentNode,y=s&&t.nodeName.toLowerCase(),v=!l&&!s;if(m){if(o){while(g){p=t;while(p=p[g])if(s?p.nodeName.toLowerCase()===y:1===p.nodeType)return!1;h=g=\"only\"===e&&!h&&\"nextSibling\"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&v){c=m[b]||(m[b]={}),u=c[e]||[],d=u[0]===T&&u[1],f=u[0]===T&&u[2],p=d&&m.childNodes[d];while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if(1===p.nodeType&&++f&&p===t){c[e]=[T,d,f];break}}else if(v&&(u=(t[b]||(t[b]={}))[e])&&u[0]===T)f=u[1];else while(p=++d&&p&&p[g]||(f=d=0)||h.pop())if((s?p.nodeName.toLowerCase()===y:1===p.nodeType)&&++f&&(v&&((p[b]||(p[b]={}))[e]=[T,f]),p===t))break;return f-=i,f===r||0===f%r&&f/r>=0}}},PSEUDO:function(e,t){var n,r=o.pseudos[e]||o.setFilters[e.toLowerCase()]||at.error(\"unsupported pseudo: \"+e);return r[b]?r(t):r.length>1?(n=[e,e,\"\",t],o.setFilters.hasOwnProperty(e.toLowerCase())?lt(function(e,n){var i,o=r(e,t),a=o.length;while(a--)i=F.call(e,o[a]),e[i]=!(n[i]=o[a])}):function(e){return r(e,0,n)}):r}},pseudos:{not:lt(function(e){var t=[],n=[],r=l(e.replace(z,\"$1\"));return r[b]?lt(function(e,t,n,i){var o,a=r(e,null,i,[]),s=e.length;while(s--)(o=a[s])&&(e[s]=!(t[s]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:lt(function(e){return function(t){return at(e,t).length>0}}),contains:lt(function(e){return function(t){return(t.textContent||t.innerText||a(t)).indexOf(e)>-1}}),lang:lt(function(e){return G.test(e||\"\")||at.error(\"unsupported lang: \"+e),e=e.replace(rt,it).toLowerCase(),function(t){var n;do if(n=h?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+\"-\");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===d},focus:function(e){return e===f.activeElement&&(!f.hasFocus||f.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>\"@\"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!o.pseudos.empty(e)},header:function(e){return tt.test(e.nodeName)},input:function(e){return et.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||t.toLowerCase()===e.type)},first:ht(function(){return[0]}),last:ht(function(e,t){return[t-1]}),eq:ht(function(e,t,n){return[0>n?n+t:n]}),even:ht(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:ht(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:ht(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:ht(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}},o.pseudos.nth=o.pseudos.eq;for(n in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})o.pseudos[n]=ft(n);for(n in{submit:!0,reset:!0})o.pseudos[n]=dt(n);function gt(){}gt.prototype=o.filters=o.pseudos,o.setFilters=new gt;function mt(e,t){var n,r,i,a,s,l,u,c=k[e+\" \"];if(c)return t?0:c.slice(0);s=e,l=[],u=o.preFilter;while(s){(!n||(r=X.exec(s)))&&(r&&(s=s.slice(r[0].length)||s),l.push(i=[])),n=!1,(r=U.exec(s))&&(n=r.shift(),i.push({value:n,type:r[0].replace(z,\" \")}),s=s.slice(n.length));for(a in o.filter)!(r=Q[a].exec(s))||u[a]&&!(r=u[a](r))||(n=r.shift(),i.push({value:n,type:a,matches:r}),s=s.slice(n.length));if(!n)break}return t?s.length:s?at.error(e):k(e,l).slice(0)}function yt(e){var t=0,n=e.length,r=\"\";for(;n>t;t++)r+=e[t].value;return r}function vt(e,t,n){var r=t.dir,o=n&&\"parentNode\"===r,a=C++;return t.first?function(t,n,i){while(t=t[r])if(1===t.nodeType||o)return e(t,n,i)}:function(t,n,s){var l,u,c,p=T+\" \"+a;if(s){while(t=t[r])if((1===t.nodeType||o)&&e(t,n,s))return!0}else while(t=t[r])if(1===t.nodeType||o)if(c=t[b]||(t[b]={}),(u=c[r])&&u[0]===p){if((l=u[1])===!0||l===i)return l===!0}else if(u=c[r]=[p],u[1]=e(t,n,s)||i,u[1]===!0)return!0}}function bt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,a=[],s=0,l=e.length,u=null!=t;for(;l>s;s++)(o=e[s])&&(!n||n(o,r,i))&&(a.push(o),u&&t.push(s));return a}function wt(e,t,n,r,i,o){return r&&!r[b]&&(r=wt(r)),i&&!i[b]&&(i=wt(i,o)),lt(function(o,a,s,l){var u,c,p,f=[],d=[],h=a.length,g=o||Nt(t||\"*\",s.nodeType?[s]:s,[]),m=!e||!o&&t?g:xt(g,f,e,s,l),y=n?i||(o?e:h||r)?[]:a:m;if(n&&n(m,y,s,l),r){u=xt(y,d),r(u,[],s,l),c=u.length;while(c--)(p=u[c])&&(y[d[c]]=!(m[d[c]]=p))}if(o){if(i||e){if(i){u=[],c=y.length;while(c--)(p=y[c])&&u.push(m[c]=p);i(null,y=[],u,l)}c=y.length;while(c--)(p=y[c])&&(u=i?F.call(o,p):f[c])>-1&&(o[u]=!(a[u]=p))}}else y=xt(y===a?y.splice(h,y.length):y),i?i(null,a,y,l):M.apply(a,y)})}function Tt(e){var t,n,r,i=e.length,a=o.relative[e[0].type],s=a||o.relative[\" \"],l=a?1:0,c=vt(function(e){return e===t},s,!0),p=vt(function(e){return F.call(t,e)>-1},s,!0),f=[function(e,n,r){return!a&&(r||n!==u)||((t=n).nodeType?c(e,n,r):p(e,n,r))}];for(;i>l;l++)if(n=o.relative[e[l].type])f=[vt(bt(f),n)];else{if(n=o.filter[e[l].type].apply(null,e[l].matches),n[b]){for(r=++l;i>r;r++)if(o.relative[e[r].type])break;return wt(l>1&&bt(f),l>1&&yt(e.slice(0,l-1).concat({value:\" \"===e[l-2].type?\"*\":\"\"})).replace(z,\"$1\"),n,r>l&&Tt(e.slice(l,r)),i>r&&Tt(e=e.slice(r)),i>r&&yt(e))}f.push(n)}return bt(f)}function Ct(e,t){var n=0,r=t.length>0,a=e.length>0,s=function(s,l,c,p,d){var h,g,m,y=[],v=0,b=\"0\",x=s&&[],w=null!=d,C=u,N=s||a&&o.find.TAG(\"*\",d&&l.parentNode||l),k=T+=null==C?1:Math.random()||.1;for(w&&(u=l!==f&&l,i=n);null!=(h=N[b]);b++){if(a&&h){g=0;while(m=e[g++])if(m(h,l,c)){p.push(h);break}w&&(T=k,i=++n)}r&&((h=!m&&h)&&v--,s&&x.push(h))}if(v+=b,r&&b!==v){g=0;while(m=t[g++])m(x,y,l,c);if(s){if(v>0)while(b--)x[b]||y[b]||(y[b]=q.call(p));y=xt(y)}M.apply(p,y),w&&!s&&y.length>0&&v+t.length>1&&at.uniqueSort(p)}return w&&(T=k,u=C),x};return r?lt(s):s}l=at.compile=function(e,t){var n,r=[],i=[],o=E[e+\" \"];if(!o){t||(t=mt(e)),n=t.length;while(n--)o=Tt(t[n]),o[b]?r.push(o):i.push(o);o=E(e,Ct(i,r))}return o};function Nt(e,t,n){var r=0,i=t.length;for(;i>r;r++)at(e,t[r],n);return n}function kt(e,t,n,i){var a,s,u,c,p,f=mt(e);if(!i&&1===f.length){if(s=f[0]=f[0].slice(0),s.length>2&&\"ID\"===(u=s[0]).type&&r.getById&&9===t.nodeType&&h&&o.relative[s[1].type]){if(t=(o.find.ID(u.matches[0].replace(rt,it),t)||[])[0],!t)return n;e=e.slice(s.shift().value.length)}a=Q.needsContext.test(e)?0:s.length;while(a--){if(u=s[a],o.relative[c=u.type])break;if((p=o.find[c])&&(i=p(u.matches[0].replace(rt,it),V.test(s[0].type)&&t.parentNode||t))){if(s.splice(a,1),e=i.length&&yt(s),!e)return M.apply(n,i),n;break}}}return l(e,f)(i,t,!h,n,V.test(e)),n}r.sortStable=b.split(\"\").sort(A).join(\"\")===b,r.detectDuplicates=S,p(),r.sortDetached=ut(function(e){return 1&e.compareDocumentPosition(f.createElement(\"div\"))}),ut(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||ct(\"type|href|height|width\",function(e,n,r){return r?t:e.getAttribute(n,\"type\"===n.toLowerCase()?1:2)}),r.attributes&&ut(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||ct(\"value\",function(e,n,r){return r||\"input\"!==e.nodeName.toLowerCase()?t:e.defaultValue}),ut(function(e){return null==e.getAttribute(\"disabled\")})||ct(B,function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&i.specified?i.value:e[n]===!0?n.toLowerCase():null}),x.find=at,x.expr=at.selectors,x.expr[\":\"]=x.expr.pseudos,x.unique=at.uniqueSort,x.text=at.getText,x.isXMLDoc=at.isXML,x.contains=at.contains}(e);var O={};function F(e){var t=O[e]={};return x.each(e.match(T)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e=\"string\"==typeof e?O[e]||F(e):x.extend({},e);var n,r,i,o,a,s,l=[],u=!e.once&&[],c=function(t){for(r=e.memory&&t,i=!0,a=s||0,s=0,o=l.length,n=!0;l&&o>a;a++)if(l[a].apply(t[0],t[1])===!1&&e.stopOnFalse){r=!1;break}n=!1,l&&(u?u.length&&c(u.shift()):r?l=[]:p.disable())},p={add:function(){if(l){var t=l.length;(function i(t){x.each(t,function(t,n){var r=x.type(n);\"function\"===r?e.unique&&p.has(n)||l.push(n):n&&n.length&&\"string\"!==r&&i(n)})})(arguments),n?o=l.length:r&&(s=t,c(r))}return this},remove:function(){return l&&x.each(arguments,function(e,t){var r;while((r=x.inArray(t,l,r))>-1)l.splice(r,1),n&&(o>=r&&o--,a>=r&&a--)}),this},has:function(e){return e?x.inArray(e,l)>-1:!(!l||!l.length)},empty:function(){return l=[],o=0,this},disable:function(){return l=u=r=t,this},disabled:function(){return!l},lock:function(){return u=t,r||p.disable(),this},locked:function(){return!u},fireWith:function(e,t){return!l||i&&!u||(t=t||[],t=[e,t.slice?t.slice():t],n?u.push(t):c(t)),this},fire:function(){return p.fireWith(this,arguments),this},fired:function(){return!!i}};return p},x.extend({Deferred:function(e){var t=[[\"resolve\",\"done\",x.Callbacks(\"once memory\"),\"resolved\"],[\"reject\",\"fail\",x.Callbacks(\"once memory\"),\"rejected\"],[\"notify\",\"progress\",x.Callbacks(\"memory\")]],n=\"pending\",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var a=o[0],s=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=s&&s.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[a+\"With\"](this===r?n.promise():this,s?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var a=o[2],s=o[3];r[o[1]]=a.add,s&&a.add(function(){n=s},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+\"With\"](this===i?r:this,arguments),this},i[o[0]+\"With\"]=a.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=g.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),a=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?g.call(arguments):r,n===s?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},s,l,u;if(r>1)for(s=Array(r),l=Array(r),u=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(a(t,u,n)).fail(o.reject).progress(a(t,l,s)):--i;return i||o.resolveWith(u,n),o.promise()}}),x.support=function(t){var n,r,o,s,l,u,c,p,f,d=a.createElement(\"div\");if(d.setAttribute(\"className\",\"t\"),d.innerHTML=\"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\",n=d.getElementsByTagName(\"*\")||[],r=d.getElementsByTagName(\"a\")[0],!r||!r.style||!n.length)return t;s=a.createElement(\"select\"),u=s.appendChild(a.createElement(\"option\")),o=d.getElementsByTagName(\"input\")[0],r.style.cssText=\"top:1px;float:left;opacity:.5\",t.getSetAttribute=\"t\"!==d.className,t.leadingWhitespace=3===d.firstChild.nodeType,t.tbody=!d.getElementsByTagName(\"tbody\").length,t.htmlSerialize=!!d.getElementsByTagName(\"link\").length,t.style=/top/.test(r.getAttribute(\"style\")),t.hrefNormalized=\"/a\"===r.getAttribute(\"href\"),t.opacity=/^0.5/.test(r.style.opacity),t.cssFloat=!!r.style.cssFloat,t.checkOn=!!o.value,t.optSelected=u.selected,t.enctype=!!a.createElement(\"form\").enctype,t.html5Clone=\"<:nav></:nav>\"!==a.createElement(\"nav\").cloneNode(!0).outerHTML,t.inlineBlockNeedsLayout=!1,t.shrinkWrapBlocks=!1,t.pixelPosition=!1,t.deleteExpando=!0,t.noCloneEvent=!0,t.reliableMarginRight=!0,t.boxSizingReliable=!0,o.checked=!0,t.noCloneChecked=o.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!u.disabled;try{delete d.test}catch(h){t.deleteExpando=!1}o=a.createElement(\"input\"),o.setAttribute(\"value\",\"\"),t.input=\"\"===o.getAttribute(\"value\"),o.value=\"t\",o.setAttribute(\"type\",\"radio\"),t.radioValue=\"t\"===o.value,o.setAttribute(\"checked\",\"t\"),o.setAttribute(\"name\",\"t\"),l=a.createDocumentFragment(),l.appendChild(o),t.appendChecked=o.checked,t.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,d.attachEvent&&(d.attachEvent(\"onclick\",function(){t.noCloneEvent=!1}),d.cloneNode(!0).click());for(f in{submit:!0,change:!0,focusin:!0})d.setAttribute(c=\"on\"+f,\"t\"),t[f+\"Bubbles\"]=c in e||d.attributes[c].expando===!1;d.style.backgroundClip=\"content-box\",d.cloneNode(!0).style.backgroundClip=\"\",t.clearCloneStyle=\"content-box\"===d.style.backgroundClip;for(f in x(t))break;return t.ownLast=\"0\"!==f,x(function(){var n,r,o,s=\"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",l=a.getElementsByTagName(\"body\")[0];l&&(n=a.createElement(\"div\"),n.style.cssText=\"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\",l.appendChild(n).appendChild(d),d.innerHTML=\"<table><tr><td></td><td>t</td></tr></table>\",o=d.getElementsByTagName(\"td\"),o[0].style.cssText=\"padding:0;margin:0;border:0;display:none\",p=0===o[0].offsetHeight,o[0].style.display=\"\",o[1].style.display=\"none\",t.reliableHiddenOffsets=p&&0===o[0].offsetHeight,d.innerHTML=\"\",d.style.cssText=\"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\",x.swap(l,null!=l.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===d.offsetWidth}),e.getComputedStyle&&(t.pixelPosition=\"1%\"!==(e.getComputedStyle(d,null)||{}).top,t.boxSizingReliable=\"4px\"===(e.getComputedStyle(d,null)||{width:\"4px\"}).width,r=d.appendChild(a.createElement(\"div\")),r.style.cssText=d.style.cssText=s,r.style.marginRight=r.style.width=\"0\",d.style.width=\"1px\",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),typeof d.style.zoom!==i&&(d.innerHTML=\"\",d.style.cssText=s+\"width:1px;padding:1px;display:inline;zoom:1\",t.inlineBlockNeedsLayout=3===d.offsetWidth,d.style.display=\"block\",d.innerHTML=\"<div></div>\",d.firstChild.style.width=\"5px\",t.shrinkWrapBlocks=3!==d.offsetWidth,t.inlineBlockNeedsLayout&&(l.style.zoom=1)),l.removeChild(n),n=d=o=r=null)}),n=s=l=u=r=o=null,t\n}({});var B=/(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,P=/([A-Z])/g;function R(e,n,r,i){if(x.acceptData(e)){var o,a,s=x.expando,l=e.nodeType,u=l?x.cache:e,c=l?e[s]:e[s]&&s;if(c&&u[c]&&(i||u[c].data)||r!==t||\"string\"!=typeof n)return c||(c=l?e[s]=p.pop()||x.guid++:s),u[c]||(u[c]=l?{}:{toJSON:x.noop}),(\"object\"==typeof n||\"function\"==typeof n)&&(i?u[c]=x.extend(u[c],n):u[c].data=x.extend(u[c].data,n)),a=u[c],i||(a.data||(a.data={}),a=a.data),r!==t&&(a[x.camelCase(n)]=r),\"string\"==typeof n?(o=a[n],null==o&&(o=a[x.camelCase(n)])):o=a,o}}function W(e,t,n){if(x.acceptData(e)){var r,i,o=e.nodeType,a=o?x.cache:e,s=o?e[x.expando]:x.expando;if(a[s]){if(t&&(r=n?a[s]:a[s].data)){x.isArray(t)?t=t.concat(x.map(t,x.camelCase)):t in r?t=[t]:(t=x.camelCase(t),t=t in r?[t]:t.split(\" \")),i=t.length;while(i--)delete r[t[i]];if(n?!I(r):!x.isEmptyObject(r))return}(n||(delete a[s].data,I(a[s])))&&(o?x.cleanData([e],!0):x.support.deleteExpando||a!=a.window?delete a[s]:a[s]=null)}}}x.extend({cache:{},noData:{applet:!0,embed:!0,object:\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"},hasData:function(e){return e=e.nodeType?x.cache[e[x.expando]]:e[x.expando],!!e&&!I(e)},data:function(e,t,n){return R(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return R(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)},acceptData:function(e){if(e.nodeType&&1!==e.nodeType&&9!==e.nodeType)return!1;var t=e.nodeName&&x.noData[e.nodeName.toLowerCase()];return!t||t!==!0&&e.getAttribute(\"classid\")===t}}),x.fn.extend({data:function(e,n){var r,i,o=null,a=0,s=this[0];if(e===t){if(this.length&&(o=x.data(s),1===s.nodeType&&!x._data(s,\"parsedAttrs\"))){for(r=s.attributes;r.length>a;a++)i=r[a].name,0===i.indexOf(\"data-\")&&(i=x.camelCase(i.slice(5)),$(s,i,o[i]));x._data(s,\"parsedAttrs\",!0)}return o}return\"object\"==typeof e?this.each(function(){x.data(this,e)}):arguments.length>1?this.each(function(){x.data(this,e,n)}):s?$(s,e,x.data(s,e)):null},removeData:function(e){return this.each(function(){x.removeData(this,e)})}});function $(e,n,r){if(r===t&&1===e.nodeType){var i=\"data-\"+n.replace(P,\"-$1\").toLowerCase();if(r=e.getAttribute(i),\"string\"==typeof r){try{r=\"true\"===r?!0:\"false\"===r?!1:\"null\"===r?null:+r+\"\"===r?+r:B.test(r)?x.parseJSON(r):r}catch(o){}x.data(e,n,r)}else r=t}return r}function I(e){var t;for(t in e)if((\"data\"!==t||!x.isEmptyObject(e[t]))&&\"toJSON\"!==t)return!1;return!0}x.extend({queue:function(e,n,r){var i;return e?(n=(n||\"fx\")+\"queue\",i=x._data(e,n),r&&(!i||x.isArray(r)?i=x._data(e,n,x.makeArray(r)):i.push(r)),i||[]):t},dequeue:function(e,t){t=t||\"fx\";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),a=function(){x.dequeue(e,t)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return x._data(e,n)||x._data(e,n,{empty:x.Callbacks(\"once memory\").add(function(){x._removeData(e,t+\"queue\"),x._removeData(e,n)})})}}),x.fn.extend({queue:function(e,n){var r=2;return\"string\"!=typeof e&&(n=e,e=\"fx\",r--),r>arguments.length?x.queue(this[0],e):n===t?this:this.each(function(){var t=x.queue(this,e,n);x._queueHooks(this,e),\"fx\"===e&&\"inprogress\"!==t[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||\"fx\",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,n){var r,i=1,o=x.Deferred(),a=this,s=this.length,l=function(){--i||o.resolveWith(a,[a])};\"string\"!=typeof e&&(n=e,e=t),e=e||\"fx\";while(s--)r=x._data(a[s],e+\"queueHooks\"),r&&r.empty&&(i++,r.empty.add(l));return l(),o.promise(n)}});var z,X,U=/[\\t\\r\\n\\f]/g,V=/\\r/g,Y=/^(?:input|select|textarea|button|object)$/i,J=/^(?:a|area)$/i,G=/^(?:checked|selected)$/i,Q=x.support.getSetAttribute,K=x.support.input;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return e=x.propFix[e]||e,this.each(function(){try{this[e]=t,delete this[e]}catch(n){}})},addClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\" \")){o=0;while(i=t[o++])0>r.indexOf(\" \"+i+\" \")&&(r+=i+\" \");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,a=0,s=this.length,l=0===arguments.length||\"string\"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(l)for(t=(e||\"\").match(T)||[];s>a;a++)if(n=this[a],r=1===n.nodeType&&(n.className?(\" \"+n.className+\" \").replace(U,\" \"):\"\")){o=0;while(i=t[o++])while(r.indexOf(\" \"+i+\" \")>=0)r=r.replace(\" \"+i+\" \",\" \");n.className=e?x.trim(r):\"\"}return this},toggleClass:function(e,t){var n=typeof e;return\"boolean\"==typeof t&&\"string\"===n?t?this.addClass(e):this.removeClass(e):x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(\"string\"===n){var t,r=0,o=x(this),a=e.match(T)||[];while(t=a[r++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else(n===i||\"boolean\"===n)&&(this.className&&x._data(this,\"__className__\",this.className),this.className=this.className||e===!1?\"\":x._data(this,\"__className__\")||\"\")})},hasClass:function(e){var t=\" \"+e+\" \",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(\" \"+this[n].className+\" \").replace(U,\" \").indexOf(t)>=0)return!0;return!1},val:function(e){var n,r,i,o=this[0];{if(arguments.length)return i=x.isFunction(e),this.each(function(n){var o;1===this.nodeType&&(o=i?e.call(this,n,x(this).val()):e,null==o?o=\"\":\"number\"==typeof o?o+=\"\":x.isArray(o)&&(o=x.map(o,function(e){return null==e?\"\":e+\"\"})),r=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],r&&\"set\"in r&&r.set(this,o,\"value\")!==t||(this.value=o))});if(o)return r=x.valHooks[o.type]||x.valHooks[o.nodeName.toLowerCase()],r&&\"get\"in r&&(n=r.get(o,\"value\"))!==t?n:(n=o.value,\"string\"==typeof n?n.replace(V,\"\"):null==n?\"\":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=x.find.attr(e,\"value\");return null!=t?t:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o=\"select-one\"===e.type||0>i,a=o?null:[],s=o?i+1:r.length,l=0>i?s:o?i:0;for(;s>l;l++)if(n=r[l],!(!n.selected&&l!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute(\"disabled\"))||n.parentNode.disabled&&x.nodeName(n.parentNode,\"optgroup\"))){if(t=x(n).val(),o)return t;a.push(t)}return a},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),a=i.length;while(a--)r=i[a],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,n,r){var o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===i?x.prop(e,n,r):(1===s&&x.isXMLDoc(e)||(n=n.toLowerCase(),o=x.attrHooks[n]||(x.expr.match.bool.test(n)?X:z)),r===t?o&&\"get\"in o&&null!==(a=o.get(e,n))?a:(a=x.find.attr(e,n),null==a?t:a):null!==r?o&&\"set\"in o&&(a=o.set(e,r,n))!==t?a:(e.setAttribute(n,r+\"\"),r):(x.removeAttr(e,n),t))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(T);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.bool.test(n)?K&&Q||!G.test(n)?e[r]=!1:e[x.camelCase(\"default-\"+n)]=e[r]=!1:x.attr(e,n,\"\"),e.removeAttribute(Q?n:r)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&\"radio\"===t&&x.nodeName(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"},prop:function(e,n,r){var i,o,a,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return a=1!==s||!x.isXMLDoc(e),a&&(n=x.propFix[n]||n,o=x.propHooks[n]),r!==t?o&&\"set\"in o&&(i=o.set(e,r,n))!==t?i:e[n]=r:o&&\"get\"in o&&null!==(i=o.get(e,n))?i:e[n]},propHooks:{tabIndex:{get:function(e){var t=x.find.attr(e,\"tabindex\");return t?parseInt(t,10):Y.test(e.nodeName)||J.test(e.nodeName)&&e.href?0:-1}}}}),X={set:function(e,t,n){return t===!1?x.removeAttr(e,n):K&&Q||!G.test(n)?e.setAttribute(!Q&&x.propFix[n]||n,n):e[x.camelCase(\"default-\"+n)]=e[n]=!0,n}},x.each(x.expr.match.bool.source.match(/\\w+/g),function(e,n){var r=x.expr.attrHandle[n]||x.find.attr;x.expr.attrHandle[n]=K&&Q||!G.test(n)?function(e,n,i){var o=x.expr.attrHandle[n],a=i?t:(x.expr.attrHandle[n]=t)!=r(e,n,i)?n.toLowerCase():null;return x.expr.attrHandle[n]=o,a}:function(e,n,r){return r?t:e[x.camelCase(\"default-\"+n)]?n.toLowerCase():null}}),K&&Q||(x.attrHooks.value={set:function(e,n,r){return x.nodeName(e,\"input\")?(e.defaultValue=n,t):z&&z.set(e,n,r)}}),Q||(z={set:function(e,n,r){var i=e.getAttributeNode(r);return i||e.setAttributeNode(i=e.ownerDocument.createAttribute(r)),i.value=n+=\"\",\"value\"===r||n===e.getAttribute(r)?n:t}},x.expr.attrHandle.id=x.expr.attrHandle.name=x.expr.attrHandle.coords=function(e,n,r){var i;return r?t:(i=e.getAttributeNode(n))&&\"\"!==i.value?i.value:null},x.valHooks.button={get:function(e,n){var r=e.getAttributeNode(n);return r&&r.specified?r.value:t},set:z.set},x.attrHooks.contenteditable={set:function(e,t,n){z.set(e,\"\"===t?!1:t,n)}},x.each([\"width\",\"height\"],function(e,n){x.attrHooks[n]={set:function(e,r){return\"\"===r?(e.setAttribute(n,\"auto\"),r):t}}})),x.support.hrefNormalized||x.each([\"href\",\"src\"],function(e,t){x.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),x.support.style||(x.attrHooks.style={get:function(e){return e.style.cssText||t},set:function(e,t){return e.style.cssText=t+\"\"}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),x.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){x.propFix[this.toLowerCase()]=this}),x.support.enctype||(x.propFix.enctype=\"encoding\"),x.each([\"radio\",\"checkbox\"],function(){x.valHooks[this]={set:function(e,n){return x.isArray(n)?e.checked=x.inArray(x(e).val(),n)>=0:t}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})});var Z=/^(?:input|select|textarea)$/i,et=/^key/,tt=/^(?:mouse|contextmenu)|click/,nt=/^(?:focusinfocus|focusoutblur)$/,rt=/^([^.]*)(?:\\.(.+)|)$/;function it(){return!0}function ot(){return!1}function at(){try{return a.activeElement}catch(e){}}x.event={global:{},add:function(e,n,r,o,a){var s,l,u,c,p,f,d,h,g,m,y,v=x._data(e);if(v){r.handler&&(c=r,r=c.handler,a=c.selector),r.guid||(r.guid=x.guid++),(l=v.events)||(l=v.events={}),(f=v.handle)||(f=v.handle=function(e){return typeof x===i||e&&x.event.triggered===e.type?t:x.event.dispatch.apply(f.elem,arguments)},f.elem=e),n=(n||\"\").match(T)||[\"\"],u=n.length;while(u--)s=rt.exec(n[u])||[],g=y=s[1],m=(s[2]||\"\").split(\".\").sort(),g&&(p=x.event.special[g]||{},g=(a?p.delegateType:p.bindType)||g,p=x.event.special[g]||{},d=x.extend({type:g,origType:y,data:o,handler:r,guid:r.guid,selector:a,needsContext:a&&x.expr.match.needsContext.test(a),namespace:m.join(\".\")},c),(h=l[g])||(h=l[g]=[],h.delegateCount=0,p.setup&&p.setup.call(e,o,m,f)!==!1||(e.addEventListener?e.addEventListener(g,f,!1):e.attachEvent&&e.attachEvent(\"on\"+g,f))),p.add&&(p.add.call(e,d),d.handler.guid||(d.handler.guid=r.guid)),a?h.splice(h.delegateCount++,0,d):h.push(d),x.event.global[g]=!0);e=null}},remove:function(e,t,n,r,i){var o,a,s,l,u,c,p,f,d,h,g,m=x.hasData(e)&&x._data(e);if(m&&(c=m.events)){t=(t||\"\").match(T)||[\"\"],u=t.length;while(u--)if(s=rt.exec(t[u])||[],d=g=s[1],h=(s[2]||\"\").split(\".\").sort(),d){p=x.event.special[d]||{},d=(r?p.delegateType:p.bindType)||d,f=c[d]||[],s=s[2]&&RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),l=o=f.length;while(o--)a=f[o],!i&&g!==a.origType||n&&n.guid!==a.guid||s&&!s.test(a.namespace)||r&&r!==a.selector&&(\"**\"!==r||!a.selector)||(f.splice(o,1),a.selector&&f.delegateCount--,p.remove&&p.remove.call(e,a));l&&!f.length&&(p.teardown&&p.teardown.call(e,h,m.handle)!==!1||x.removeEvent(e,d,m.handle),delete c[d])}else for(d in c)x.event.remove(e,d+t[u],n,r,!0);x.isEmptyObject(c)&&(delete m.handle,x._removeData(e,\"events\"))}},trigger:function(n,r,i,o){var s,l,u,c,p,f,d,h=[i||a],g=v.call(n,\"type\")?n.type:n,m=v.call(n,\"namespace\")?n.namespace.split(\".\"):[];if(u=f=i=i||a,3!==i.nodeType&&8!==i.nodeType&&!nt.test(g+x.event.triggered)&&(g.indexOf(\".\")>=0&&(m=g.split(\".\"),g=m.shift(),m.sort()),l=0>g.indexOf(\":\")&&\"on\"+g,n=n[x.expando]?n:new x.Event(g,\"object\"==typeof n&&n),n.isTrigger=o?2:3,n.namespace=m.join(\".\"),n.namespace_re=n.namespace?RegExp(\"(^|\\\\.)\"+m.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,n.result=t,n.target||(n.target=i),r=null==r?[n]:x.makeArray(r,[n]),p=x.event.special[g]||{},o||!p.trigger||p.trigger.apply(i,r)!==!1)){if(!o&&!p.noBubble&&!x.isWindow(i)){for(c=p.delegateType||g,nt.test(c+g)||(u=u.parentNode);u;u=u.parentNode)h.push(u),f=u;f===(i.ownerDocument||a)&&h.push(f.defaultView||f.parentWindow||e)}d=0;while((u=h[d++])&&!n.isPropagationStopped())n.type=d>1?c:p.bindType||g,s=(x._data(u,\"events\")||{})[n.type]&&x._data(u,\"handle\"),s&&s.apply(u,r),s=l&&u[l],s&&x.acceptData(u)&&s.apply&&s.apply(u,r)===!1&&n.preventDefault();if(n.type=g,!o&&!n.isDefaultPrevented()&&(!p._default||p._default.apply(h.pop(),r)===!1)&&x.acceptData(i)&&l&&i[g]&&!x.isWindow(i)){f=i[l],f&&(i[l]=null),x.event.triggered=g;try{i[g]()}catch(y){}x.event.triggered=t,f&&(i[l]=f)}return n.result}},dispatch:function(e){e=x.event.fix(e);var n,r,i,o,a,s=[],l=g.call(arguments),u=(x._data(this,\"events\")||{})[e.type]||[],c=x.event.special[e.type]||{};if(l[0]=e,e.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),n=0;while((o=s[n++])&&!e.isPropagationStopped()){e.currentTarget=o.elem,a=0;while((i=o.handlers[a++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(i.namespace))&&(e.handleObj=i,e.data=i.data,r=((x.event.special[i.origType]||{}).handle||i.handler).apply(o.elem,l),r!==t&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,e),e.result}},handlers:function(e,n){var r,i,o,a,s=[],l=n.delegateCount,u=e.target;if(l&&u.nodeType&&(!e.button||\"click\"!==e.type))for(;u!=this;u=u.parentNode||this)if(1===u.nodeType&&(u.disabled!==!0||\"click\"!==e.type)){for(o=[],a=0;l>a;a++)i=n[a],r=i.selector+\" \",o[r]===t&&(o[r]=i.needsContext?x(r,this).index(u)>=0:x.find(r,this,null,[u]).length),o[r]&&o.push(i);o.length&&s.push({elem:u,handlers:o})}return n.length>l&&s.push({elem:this,handlers:n.slice(l)}),s},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=tt.test(i)?this.mouseHooks:et.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return e.target||(e.target=o.srcElement||a),3===e.target.nodeType&&(e.target=e.target.parentNode),e.metaKey=!!e.metaKey,s.filter?s.filter(e,o):e},props:\"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which\".split(\" \"),fixHooks:{},keyHooks:{props:\"char charCode key keyCode\".split(\" \"),filter:function(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:\"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),filter:function(e,n){var r,i,o,s=n.button,l=n.fromElement;return null==e.pageX&&null!=n.clientX&&(i=e.target.ownerDocument||a,o=i.documentElement,r=i.body,e.pageX=n.clientX+(o&&o.scrollLeft||r&&r.scrollLeft||0)-(o&&o.clientLeft||r&&r.clientLeft||0),e.pageY=n.clientY+(o&&o.scrollTop||r&&r.scrollTop||0)-(o&&o.clientTop||r&&r.clientTop||0)),!e.relatedTarget&&l&&(e.relatedTarget=l===e.target?n.toElement:l),e.which||s===t||(e.which=1&s?1:2&s?3:4&s?2:0),e}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==at()&&this.focus)try{return this.focus(),!1}catch(e){}},delegateType:\"focusin\"},blur:{trigger:function(){return this===at()&&this.blur?(this.blur(),!1):t},delegateType:\"focusout\"},click:{trigger:function(){return x.nodeName(this,\"input\")&&\"checkbox\"===this.type&&this.click?(this.click(),!1):t},_default:function(e){return x.nodeName(e.target,\"a\")}},beforeunload:{postDispatch:function(e){e.result!==t&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=a.removeEventListener?function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)}:function(e,t,n){var r=\"on\"+t;e.detachEvent&&(typeof e[r]===i&&(e[r]=null),e.detachEvent(r,n))},x.Event=function(e,n){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.returnValue===!1||e.getPreventDefault&&e.getPreventDefault()?it:ot):this.type=e,n&&x.extend(this,n),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,t):new x.Event(e,n)},x.Event.prototype={isDefaultPrevented:ot,isPropagationStopped:ot,isImmediatePropagationStopped:ot,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=it,e&&(e.preventDefault?e.preventDefault():e.returnValue=!1)},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=it,e&&(e.stopPropagation&&e.stopPropagation(),e.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=it,this.stopPropagation()}},x.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.submitBubbles||(x.event.special.submit={setup:function(){return x.nodeName(this,\"form\")?!1:(x.event.add(this,\"click._submit keypress._submit\",function(e){var n=e.target,r=x.nodeName(n,\"input\")||x.nodeName(n,\"button\")?n.form:t;r&&!x._data(r,\"submitBubbles\")&&(x.event.add(r,\"submit._submit\",function(e){e._submit_bubble=!0}),x._data(r,\"submitBubbles\",!0))}),t)},postDispatch:function(e){e._submit_bubble&&(delete e._submit_bubble,this.parentNode&&!e.isTrigger&&x.event.simulate(\"submit\",this.parentNode,e,!0))},teardown:function(){return x.nodeName(this,\"form\")?!1:(x.event.remove(this,\"._submit\"),t)}}),x.support.changeBubbles||(x.event.special.change={setup:function(){return Z.test(this.nodeName)?((\"checkbox\"===this.type||\"radio\"===this.type)&&(x.event.add(this,\"propertychange._change\",function(e){\"checked\"===e.originalEvent.propertyName&&(this._just_changed=!0)}),x.event.add(this,\"click._change\",function(e){this._just_changed&&!e.isTrigger&&(this._just_changed=!1),x.event.simulate(\"change\",this,e,!0)})),!1):(x.event.add(this,\"beforeactivate._change\",function(e){var t=e.target;Z.test(t.nodeName)&&!x._data(t,\"changeBubbles\")&&(x.event.add(t,\"change._change\",function(e){!this.parentNode||e.isSimulated||e.isTrigger||x.event.simulate(\"change\",this.parentNode,e,!0)}),x._data(t,\"changeBubbles\",!0))}),t)},handle:function(e){var n=e.target;return this!==n||e.isSimulated||e.isTrigger||\"radio\"!==n.type&&\"checkbox\"!==n.type?e.handleObj.handler.apply(this,arguments):t},teardown:function(){return x.event.remove(this,\"._change\"),!Z.test(this.nodeName)}}),x.support.focusinBubbles||x.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&a.addEventListener(e,r,!0)},teardown:function(){0===--n&&a.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=t);for(a in e)this.on(a,n,r,e[a],o);return this}if(null==r&&null==i?(i=n,r=n=t):null==i&&(\"string\"==typeof n?(i=r,r=t):(i=r,r=n,n=t)),i===!1)i=ot;else if(!i)return this;return 1===o&&(s=i,i=function(e){return x().off(e),s.apply(this,arguments)},i.guid=s.guid||(s.guid=x.guid++)),this.each(function(){x.event.add(this,e,i,r,n)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,n,r){var i,o;if(e&&e.preventDefault&&e.handleObj)return i=e.handleObj,x(e.delegateTarget).off(i.namespace?i.origType+\".\"+i.namespace:i.origType,i.selector,i.handler),this;if(\"object\"==typeof e){for(o in e)this.off(o,n,e[o]);return this}return(n===!1||\"function\"==typeof n)&&(r=n,n=t),r===!1&&(r=ot),this.each(function(){x.event.remove(this,e,r,n)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,n){var r=this[0];return r?x.event.trigger(e,n,r,!0):t}});var st=/^.[^:#\\[\\.,]*$/,lt=/^(?:parents|prev(?:Until|All))/,ut=x.expr.match.needsContext,ct={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(\"string\"!=typeof e)return this.pushStack(x(e).filter(function(){for(t=0;i>t;t++)if(x.contains(r[t],this))return!0}));for(t=0;i>t;t++)x.find(e,r[t],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=this.selector?this.selector+\" \"+e:e,n},has:function(e){var t,n=x(e,this),r=n.length;return this.filter(function(){for(t=0;r>t;t++)if(x.contains(this,n[t]))return!0})},not:function(e){return this.pushStack(ft(this,e||[],!0))},filter:function(e){return this.pushStack(ft(this,e||[],!1))},is:function(e){return!!ft(this,\"string\"==typeof e&&ut.test(e)?x(e):e||[],!1).length},closest:function(e,t){var n,r=0,i=this.length,o=[],a=ut.test(e)||\"string\"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(a?a.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?\"string\"==typeof e?x.inArray(this[0],x(e)):x.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n=\"string\"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function pt(e,t){do e=e[t];while(e&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,\"parentNode\")},parentsUntil:function(e,t,n){return x.dir(e,\"parentNode\",n)},next:function(e){return pt(e,\"nextSibling\")},prev:function(e){return pt(e,\"previousSibling\")},nextAll:function(e){return x.dir(e,\"nextSibling\")},prevAll:function(e){return x.dir(e,\"previousSibling\")},nextUntil:function(e,t,n){return x.dir(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return x.dir(e,\"previousSibling\",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,\"iframe\")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return\"Until\"!==e.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=x.filter(r,i)),this.length>1&&(ct[e]||(i=x.unique(i)),lt.test(e)&&(i=i.reverse())),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,n,r){var i=[],o=e[n];while(o&&9!==o.nodeType&&(r===t||1!==o.nodeType||!x(o).is(r)))1===o.nodeType&&i.push(o),o=o[n];return i},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function ft(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if(\"string\"==typeof t){if(st.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return x.inArray(e,t)>=0!==n})}function dt(e){var t=ht.split(\"|\"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}var ht=\"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",gt=/ jQuery\\d+=\"(?:null|\\d+)\"/g,mt=RegExp(\"<(?:\"+ht+\")[\\\\s/>]\",\"i\"),yt=/^\\s+/,vt=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,bt=/<([\\w:]+)/,xt=/<tbody/i,wt=/<|&#?\\w+;/,Tt=/<(?:script|style|link)/i,Ct=/^(?:checkbox|radio)$/i,Nt=/checked\\s*(?:[^=]|=\\s*.checked.)/i,kt=/^$|\\/(?:java|ecma)script/i,Et=/^true\\/(.*)/,St=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,At={option:[1,\"<select multiple='multiple'>\",\"</select>\"],legend:[1,\"<fieldset>\",\"</fieldset>\"],area:[1,\"<map>\",\"</map>\"],param:[1,\"<object>\",\"</object>\"],thead:[1,\"<table>\",\"</table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],col:[2,\"<table><tbody></tbody><colgroup>\",\"</colgroup></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:x.support.htmlSerialize?[0,\"\",\"\"]:[1,\"X<div>\",\"</div>\"]},jt=dt(a),Dt=jt.appendChild(a.createElement(\"div\"));At.optgroup=At.option,At.tbody=At.tfoot=At.colgroup=At.caption=At.thead,At.th=At.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===t?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||a).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Lt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(Ft(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&_t(Ft(n,\"script\")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++){1===e.nodeType&&x.cleanData(Ft(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&x.nodeName(e,\"select\")&&(e.options.length=0)}return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var n=this[0]||{},r=0,i=this.length;if(e===t)return 1===n.nodeType?n.innerHTML.replace(gt,\"\"):t;if(!(\"string\"!=typeof e||Tt.test(e)||!x.support.htmlSerialize&&mt.test(e)||!x.support.leadingWhitespace&&yt.test(e)||At[(bt.exec(e)||[\"\",\"\"])[1].toLowerCase()])){e=e.replace(vt,\"<$1></$2>\");try{for(;i>r;r++)n=this[r]||{},1===n.nodeType&&(x.cleanData(Ft(n,!1)),n.innerHTML=e);n=0}catch(o){}}n&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(r&&r.parentNode!==i&&(r=this.nextSibling),x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=d.apply([],e);var r,i,o,a,s,l,u=0,c=this.length,p=this,f=c-1,h=e[0],g=x.isFunction(h);if(g||!(1>=c||\"string\"!=typeof h||x.support.checkClone)&&Nt.test(h))return this.each(function(r){var i=p.eq(r);g&&(e[0]=h.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(l=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),r=l.firstChild,1===l.childNodes.length&&(l=r),r)){for(a=x.map(Ft(l,\"script\"),Ht),o=a.length;c>u;u++)i=l,u!==f&&(i=x.clone(i,!0,!0),o&&x.merge(a,Ft(i,\"script\"))),t.call(this[u],i,u);if(o)for(s=a[a.length-1].ownerDocument,x.map(a,qt),u=0;o>u;u++)i=a[u],kt.test(i.type||\"\")&&!x._data(i,\"globalEval\")&&x.contains(s,i)&&(i.src?x._evalUrl(i.src):x.globalEval((i.text||i.textContent||i.innerHTML||\"\").replace(St,\"\")));l=r=null}return this}});function Lt(e,t){return x.nodeName(e,\"table\")&&x.nodeName(1===t.nodeType?t:t.firstChild,\"tr\")?e.getElementsByTagName(\"tbody\")[0]||e.appendChild(e.ownerDocument.createElement(\"tbody\")):e}function Ht(e){return e.type=(null!==x.find.attr(e,\"type\"))+\"/\"+e.type,e}function qt(e){var t=Et.exec(e.type);return t?e.type=t[1]:e.removeAttribute(\"type\"),e}function _t(e,t){var n,r=0;for(;null!=(n=e[r]);r++)x._data(n,\"globalEval\",!t||x._data(t[r],\"globalEval\"))}function Mt(e,t){if(1===t.nodeType&&x.hasData(e)){var n,r,i,o=x._data(e),a=x._data(t,o),s=o.events;if(s){delete a.handle,a.events={};for(n in s)for(r=0,i=s[n].length;i>r;r++)x.event.add(t,n,s[n][r])}a.data&&(a.data=x.extend({},a.data))}}function Ot(e,t){var n,r,i;if(1===t.nodeType){if(n=t.nodeName.toLowerCase(),!x.support.noCloneEvent&&t[x.expando]){i=x._data(t);for(r in i.events)x.removeEvent(t,r,i.handle);t.removeAttribute(x.expando)}\"script\"===n&&t.text!==e.text?(Ht(t).text=e.text,qt(t)):\"object\"===n?(t.parentNode&&(t.outerHTML=e.outerHTML),x.support.html5Clone&&e.innerHTML&&!x.trim(t.innerHTML)&&(t.innerHTML=e.innerHTML)):\"input\"===n&&Ct.test(e.type)?(t.defaultChecked=t.checked=e.checked,t.value!==e.value&&(t.value=e.value)):\"option\"===n?t.defaultSelected=t.selected=e.defaultSelected:(\"input\"===n||\"textarea\"===n)&&(t.defaultValue=e.defaultValue)}}x.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,t){x.fn[e]=function(e){var n,r=0,i=[],o=x(e),a=o.length-1;for(;a>=r;r++)n=r===a?this:this.clone(!0),x(o[r])[t](n),h.apply(i,n.get());return this.pushStack(i)}});function Ft(e,n){var r,o,a=0,s=typeof e.getElementsByTagName!==i?e.getElementsByTagName(n||\"*\"):typeof e.querySelectorAll!==i?e.querySelectorAll(n||\"*\"):t;if(!s)for(s=[],r=e.childNodes||e;null!=(o=r[a]);a++)!n||x.nodeName(o,n)?s.push(o):x.merge(s,Ft(o,n));return n===t||n&&x.nodeName(e,n)?x.merge([e],s):s}function Bt(e){Ct.test(e.type)&&(e.defaultChecked=e.checked)}x.extend({clone:function(e,t,n){var r,i,o,a,s,l=x.contains(e.ownerDocument,e);if(x.support.html5Clone||x.isXMLDoc(e)||!mt.test(\"<\"+e.nodeName+\">\")?o=e.cloneNode(!0):(Dt.innerHTML=e.outerHTML,Dt.removeChild(o=Dt.firstChild)),!(x.support.noCloneEvent&&x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(r=Ft(o),s=Ft(e),a=0;null!=(i=s[a]);++a)r[a]&&Ot(i,r[a]);if(t)if(n)for(s=s||Ft(e),r=r||Ft(o),a=0;null!=(i=s[a]);a++)Mt(i,r[a]);else Mt(e,o);return r=Ft(o,\"script\"),r.length>0&&_t(r,!l&&Ft(e,\"script\")),r=s=i=null,o},buildFragment:function(e,t,n,r){var i,o,a,s,l,u,c,p=e.length,f=dt(t),d=[],h=0;for(;p>h;h++)if(o=e[h],o||0===o)if(\"object\"===x.type(o))x.merge(d,o.nodeType?[o]:o);else if(wt.test(o)){s=s||f.appendChild(t.createElement(\"div\")),l=(bt.exec(o)||[\"\",\"\"])[1].toLowerCase(),c=At[l]||At._default,s.innerHTML=c[1]+o.replace(vt,\"<$1></$2>\")+c[2],i=c[0];while(i--)s=s.lastChild;if(!x.support.leadingWhitespace&&yt.test(o)&&d.push(t.createTextNode(yt.exec(o)[0])),!x.support.tbody){o=\"table\"!==l||xt.test(o)?\"<table>\"!==c[1]||xt.test(o)?0:s:s.firstChild,i=o&&o.childNodes.length;while(i--)x.nodeName(u=o.childNodes[i],\"tbody\")&&!u.childNodes.length&&o.removeChild(u)}x.merge(d,s.childNodes),s.textContent=\"\";while(s.firstChild)s.removeChild(s.firstChild);s=f.lastChild}else d.push(t.createTextNode(o));s&&f.removeChild(s),x.support.appendChecked||x.grep(Ft(d,\"input\"),Bt),h=0;while(o=d[h++])if((!r||-1===x.inArray(o,r))&&(a=x.contains(o.ownerDocument,o),s=Ft(f.appendChild(o),\"script\"),a&&_t(s),n)){i=0;while(o=s[i++])kt.test(o.type||\"\")&&n.push(o)}return s=null,f},cleanData:function(e,t){var n,r,o,a,s=0,l=x.expando,u=x.cache,c=x.support.deleteExpando,f=x.event.special;for(;null!=(n=e[s]);s++)if((t||x.acceptData(n))&&(o=n[l],a=o&&u[o])){if(a.events)for(r in a.events)f[r]?x.event.remove(n,r):x.removeEvent(n,r,a.handle);\nu[o]&&(delete u[o],c?delete n[l]:typeof n.removeAttribute!==i?n.removeAttribute(l):n[l]=null,p.push(o))}},_evalUrl:function(e){return x.ajax({url:e,type:\"GET\",dataType:\"script\",async:!1,global:!1,\"throws\":!0})}}),x.fn.extend({wrapAll:function(e){if(x.isFunction(e))return this.each(function(t){x(this).wrapAll(e.call(this,t))});if(this[0]){var t=x(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&1===e.firstChild.nodeType)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,\"body\")||x(this).replaceWith(this.childNodes)}).end()}});var Pt,Rt,Wt,$t=/alpha\\([^)]*\\)/i,It=/opacity\\s*=\\s*([^)]*)/,zt=/^(top|right|bottom|left)$/,Xt=/^(none|table(?!-c[ea]).+)/,Ut=/^margin/,Vt=RegExp(\"^(\"+w+\")(.*)$\",\"i\"),Yt=RegExp(\"^(\"+w+\")(?!px)[a-z%]+$\",\"i\"),Jt=RegExp(\"^([+-])=(\"+w+\")\",\"i\"),Gt={BODY:\"block\"},Qt={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Kt={letterSpacing:0,fontWeight:400},Zt=[\"Top\",\"Right\",\"Bottom\",\"Left\"],en=[\"Webkit\",\"O\",\"Moz\",\"ms\"];function tn(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=en.length;while(i--)if(t=en[i]+n,t in e)return t;return r}function nn(e,t){return e=t||e,\"none\"===x.css(e,\"display\")||!x.contains(e.ownerDocument,e)}function rn(e,t){var n,r,i,o=[],a=0,s=e.length;for(;s>a;a++)r=e[a],r.style&&(o[a]=x._data(r,\"olddisplay\"),n=r.style.display,t?(o[a]||\"none\"!==n||(r.style.display=\"\"),\"\"===r.style.display&&nn(r)&&(o[a]=x._data(r,\"olddisplay\",ln(r.nodeName)))):o[a]||(i=nn(r),(n&&\"none\"!==n||!i)&&x._data(r,\"olddisplay\",i?n:x.css(r,\"display\"))));for(a=0;s>a;a++)r=e[a],r.style&&(t&&\"none\"!==r.style.display&&\"\"!==r.style.display||(r.style.display=t?o[a]||\"\":\"none\"));return e}x.fn.extend({css:function(e,n){return x.access(this,function(e,n,r){var i,o,a={},s=0;if(x.isArray(n)){for(o=Rt(e),i=n.length;i>s;s++)a[n[s]]=x.css(e,n[s],!1,o);return a}return r!==t?x.style(e,n,r):x.css(e,n)},e,n,arguments.length>1)},show:function(){return rn(this,!0)},hide:function(){return rn(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){nn(this)?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Wt(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{\"float\":x.support.cssFloat?\"cssFloat\":\"styleFloat\"},style:function(e,n,r,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var o,a,s,l=x.camelCase(n),u=e.style;if(n=x.cssProps[l]||(x.cssProps[l]=tn(u,l)),s=x.cssHooks[n]||x.cssHooks[l],r===t)return s&&\"get\"in s&&(o=s.get(e,!1,i))!==t?o:u[n];if(a=typeof r,\"string\"===a&&(o=Jt.exec(r))&&(r=(o[1]+1)*o[2]+parseFloat(x.css(e,n)),a=\"number\"),!(null==r||\"number\"===a&&isNaN(r)||(\"number\"!==a||x.cssNumber[l]||(r+=\"px\"),x.support.clearCloneStyle||\"\"!==r||0!==n.indexOf(\"background\")||(u[n]=\"inherit\"),s&&\"set\"in s&&(r=s.set(e,r,i))===t)))try{u[n]=r}catch(c){}}},css:function(e,n,r,i){var o,a,s,l=x.camelCase(n);return n=x.cssProps[l]||(x.cssProps[l]=tn(e.style,l)),s=x.cssHooks[n]||x.cssHooks[l],s&&\"get\"in s&&(a=s.get(e,!0,r)),a===t&&(a=Wt(e,n,i)),\"normal\"===a&&n in Kt&&(a=Kt[n]),\"\"===r||r?(o=parseFloat(a),r===!0||x.isNumeric(o)?o||0:a):a}}),e.getComputedStyle?(Rt=function(t){return e.getComputedStyle(t,null)},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s.getPropertyValue(n)||s[n]:t,u=e.style;return s&&(\"\"!==l||x.contains(e.ownerDocument,e)||(l=x.style(e,n)),Yt.test(l)&&Ut.test(n)&&(i=u.width,o=u.minWidth,a=u.maxWidth,u.minWidth=u.maxWidth=u.width=l,l=s.width,u.width=i,u.minWidth=o,u.maxWidth=a)),l}):a.documentElement.currentStyle&&(Rt=function(e){return e.currentStyle},Wt=function(e,n,r){var i,o,a,s=r||Rt(e),l=s?s[n]:t,u=e.style;return null==l&&u&&u[n]&&(l=u[n]),Yt.test(l)&&!zt.test(n)&&(i=u.left,o=e.runtimeStyle,a=o&&o.left,a&&(o.left=e.currentStyle.left),u.left=\"fontSize\"===n?\"1em\":l,l=u.pixelLeft+\"px\",u.left=i,a&&(o.left=a)),\"\"===l?\"auto\":l});function on(e,t,n){var r=Vt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||\"px\"):t}function an(e,t,n,r,i){var o=n===(r?\"border\":\"content\")?4:\"width\"===t?1:0,a=0;for(;4>o;o+=2)\"margin\"===n&&(a+=x.css(e,n+Zt[o],!0,i)),r?(\"content\"===n&&(a-=x.css(e,\"padding\"+Zt[o],!0,i)),\"margin\"!==n&&(a-=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i))):(a+=x.css(e,\"padding\"+Zt[o],!0,i),\"padding\"!==n&&(a+=x.css(e,\"border\"+Zt[o]+\"Width\",!0,i)));return a}function sn(e,t,n){var r=!0,i=\"width\"===t?e.offsetWidth:e.offsetHeight,o=Rt(e),a=x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,o);if(0>=i||null==i){if(i=Wt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Yt.test(i))return i;r=a&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+an(e,t,n||(a?\"border\":\"content\"),r,o)+\"px\"}function ln(e){var t=a,n=Gt[e];return n||(n=un(e,t),\"none\"!==n&&n||(Pt=(Pt||x(\"<iframe frameborder='0' width='0' height='0'/>\").css(\"cssText\",\"display:block !important\")).appendTo(t.documentElement),t=(Pt[0].contentWindow||Pt[0].contentDocument).document,t.write(\"<!doctype html><html><body>\"),t.close(),n=un(e,t),Pt.detach()),Gt[e]=n),n}function un(e,t){var n=x(t.createElement(e)).appendTo(t.body),r=x.css(n[0],\"display\");return n.remove(),r}x.each([\"height\",\"width\"],function(e,n){x.cssHooks[n]={get:function(e,r,i){return r?0===e.offsetWidth&&Xt.test(x.css(e,\"display\"))?x.swap(e,Qt,function(){return sn(e,n,i)}):sn(e,n,i):t},set:function(e,t,r){var i=r&&Rt(e);return on(e,t,r?an(e,n,r,x.support.boxSizing&&\"border-box\"===x.css(e,\"boxSizing\",!1,i),i):0)}}}),x.support.opacity||(x.cssHooks.opacity={get:function(e,t){return It.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||\"\")?.01*parseFloat(RegExp.$1)+\"\":t?\"1\":\"\"},set:function(e,t){var n=e.style,r=e.currentStyle,i=x.isNumeric(t)?\"alpha(opacity=\"+100*t+\")\":\"\",o=r&&r.filter||n.filter||\"\";n.zoom=1,(t>=1||\"\"===t)&&\"\"===x.trim(o.replace($t,\"\"))&&n.removeAttribute&&(n.removeAttribute(\"filter\"),\"\"===t||r&&!r.filter)||(n.filter=$t.test(o)?o.replace($t,i):o+\" \"+i)}}),x(function(){x.support.reliableMarginRight||(x.cssHooks.marginRight={get:function(e,n){return n?x.swap(e,{display:\"inline-block\"},Wt,[e,\"marginRight\"]):t}}),!x.support.pixelPosition&&x.fn.position&&x.each([\"top\",\"left\"],function(e,n){x.cssHooks[n]={get:function(e,r){return r?(r=Wt(e,n),Yt.test(r)?x(e).position()[n]+\"px\":r):t}}})}),x.expr&&x.expr.filters&&(x.expr.filters.hidden=function(e){return 0>=e.offsetWidth&&0>=e.offsetHeight||!x.support.reliableHiddenOffsets&&\"none\"===(e.style&&e.style.display||x.css(e,\"display\"))},x.expr.filters.visible=function(e){return!x.expr.filters.hidden(e)}),x.each({margin:\"\",padding:\"\",border:\"Width\"},function(e,t){x.cssHooks[e+t]={expand:function(n){var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];for(;4>r;r++)i[e+Zt[r]+t]=o[r]||o[r-2]||o[0];return i}},Ut.test(e)||(x.cssHooks[e+t].set=on)});var cn=/%20/g,pn=/\\[\\]$/,fn=/\\r?\\n/g,dn=/^(?:submit|button|image|reset|file)$/i,hn=/^(?:input|select|textarea|keygen)/i;x.fn.extend({serialize:function(){return x.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=x.prop(this,\"elements\");return e?x.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!x(this).is(\":disabled\")&&hn.test(this.nodeName)&&!dn.test(e)&&(this.checked||!Ct.test(e))}).map(function(e,t){var n=x(this).val();return null==n?null:x.isArray(n)?x.map(n,function(e){return{name:t.name,value:e.replace(fn,\"\\r\\n\")}}):{name:t.name,value:n.replace(fn,\"\\r\\n\")}}).get()}}),x.param=function(e,n){var r,i=[],o=function(e,t){t=x.isFunction(t)?t():null==t?\"\":t,i[i.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(t)};if(n===t&&(n=x.ajaxSettings&&x.ajaxSettings.traditional),x.isArray(e)||e.jquery&&!x.isPlainObject(e))x.each(e,function(){o(this.name,this.value)});else for(r in e)gn(r,e[r],n,o);return i.join(\"&\").replace(cn,\"+\")};function gn(e,t,n,r){var i;if(x.isArray(t))x.each(t,function(t,i){n||pn.test(e)?r(e,i):gn(e+\"[\"+(\"object\"==typeof i?t:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==x.type(t))r(e,t);else for(i in t)gn(e+\"[\"+i+\"]\",t[i],n,r)}x.each(\"blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu\".split(\" \"),function(e,t){x.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),x.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}});var mn,yn,vn=x.now(),bn=/\\?/,xn=/#.*$/,wn=/([?&])_=[^&]*/,Tn=/^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/gm,Cn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Nn=/^(?:GET|HEAD)$/,kn=/^\\/\\//,En=/^([\\w.+-]+:)(?:\\/\\/([^\\/?#:]*)(?::(\\d+)|)|)/,Sn=x.fn.load,An={},jn={},Dn=\"*/\".concat(\"*\");try{yn=o.href}catch(Ln){yn=a.createElement(\"a\"),yn.href=\"\",yn=yn.href}mn=En.exec(yn.toLowerCase())||[];function Hn(e){return function(t,n){\"string\"!=typeof t&&(n=t,t=\"*\");var r,i=0,o=t.toLowerCase().match(T)||[];if(x.isFunction(n))while(r=o[i++])\"+\"===r[0]?(r=r.slice(1)||\"*\",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function qn(e,n,r,i){var o={},a=e===jn;function s(l){var u;return o[l]=!0,x.each(e[l]||[],function(e,l){var c=l(n,r,i);return\"string\"!=typeof c||a||o[c]?a?!(u=c):t:(n.dataTypes.unshift(c),s(c),!1)}),u}return s(n.dataTypes[0])||!o[\"*\"]&&s(\"*\")}function _n(e,n){var r,i,o=x.ajaxSettings.flatOptions||{};for(i in n)n[i]!==t&&((o[i]?e:r||(r={}))[i]=n[i]);return r&&x.extend(!0,e,r),e}x.fn.load=function(e,n,r){if(\"string\"!=typeof e&&Sn)return Sn.apply(this,arguments);var i,o,a,s=this,l=e.indexOf(\" \");return l>=0&&(i=e.slice(l,e.length),e=e.slice(0,l)),x.isFunction(n)?(r=n,n=t):n&&\"object\"==typeof n&&(a=\"POST\"),s.length>0&&x.ajax({url:e,type:a,dataType:\"html\",data:n}).done(function(e){o=arguments,s.html(i?x(\"<div>\").append(x.parseHTML(e)).find(i):e)}).complete(r&&function(e,t){s.each(r,o||[e.responseText,t,e])}),this},x.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){x.fn[t]=function(e){return this.on(t,e)}}),x.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:yn,type:\"GET\",isLocal:Cn.test(mn[1]),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":Dn,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":x.parseJSON,\"text xml\":x.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?_n(_n(e,x.ajaxSettings),t):_n(x.ajaxSettings,e)},ajaxPrefilter:Hn(An),ajaxTransport:Hn(jn),ajax:function(e,n){\"object\"==typeof e&&(n=e,e=t),n=n||{};var r,i,o,a,s,l,u,c,p=x.ajaxSetup({},n),f=p.context||p,d=p.context&&(f.nodeType||f.jquery)?x(f):x.event,h=x.Deferred(),g=x.Callbacks(\"once memory\"),m=p.statusCode||{},y={},v={},b=0,w=\"canceled\",C={readyState:0,getResponseHeader:function(e){var t;if(2===b){if(!c){c={};while(t=Tn.exec(a))c[t[1].toLowerCase()]=t[2]}t=c[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return 2===b?a:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=v[n]=v[n]||e,y[e]=t),this},overrideMimeType:function(e){return b||(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(2>b)for(t in e)m[t]=[m[t],e[t]];else C.always(e[C.status]);return this},abort:function(e){var t=e||w;return u&&u.abort(t),k(0,t),this}};if(h.promise(C).complete=g.add,C.success=C.done,C.error=C.fail,p.url=((e||p.url||yn)+\"\").replace(xn,\"\").replace(kn,mn[1]+\"//\"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=x.trim(p.dataType||\"*\").toLowerCase().match(T)||[\"\"],null==p.crossDomain&&(r=En.exec(p.url.toLowerCase()),p.crossDomain=!(!r||r[1]===mn[1]&&r[2]===mn[2]&&(r[3]||(\"http:\"===r[1]?\"80\":\"443\"))===(mn[3]||(\"http:\"===mn[1]?\"80\":\"443\")))),p.data&&p.processData&&\"string\"!=typeof p.data&&(p.data=x.param(p.data,p.traditional)),qn(An,p,n,C),2===b)return C;l=p.global,l&&0===x.active++&&x.event.trigger(\"ajaxStart\"),p.type=p.type.toUpperCase(),p.hasContent=!Nn.test(p.type),o=p.url,p.hasContent||(p.data&&(o=p.url+=(bn.test(o)?\"&\":\"?\")+p.data,delete p.data),p.cache===!1&&(p.url=wn.test(o)?o.replace(wn,\"$1_=\"+vn++):o+(bn.test(o)?\"&\":\"?\")+\"_=\"+vn++)),p.ifModified&&(x.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",x.lastModified[o]),x.etag[o]&&C.setRequestHeader(\"If-None-Match\",x.etag[o])),(p.data&&p.hasContent&&p.contentType!==!1||n.contentType)&&C.setRequestHeader(\"Content-Type\",p.contentType),C.setRequestHeader(\"Accept\",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+(\"*\"!==p.dataTypes[0]?\", \"+Dn+\"; q=0.01\":\"\"):p.accepts[\"*\"]);for(i in p.headers)C.setRequestHeader(i,p.headers[i]);if(p.beforeSend&&(p.beforeSend.call(f,C,p)===!1||2===b))return C.abort();w=\"abort\";for(i in{success:1,error:1,complete:1})C[i](p[i]);if(u=qn(jn,p,n,C)){C.readyState=1,l&&d.trigger(\"ajaxSend\",[C,p]),p.async&&p.timeout>0&&(s=setTimeout(function(){C.abort(\"timeout\")},p.timeout));try{b=1,u.send(y,k)}catch(N){if(!(2>b))throw N;k(-1,N)}}else k(-1,\"No Transport\");function k(e,n,r,i){var c,y,v,w,T,N=n;2!==b&&(b=2,s&&clearTimeout(s),u=t,a=i||\"\",C.readyState=e>0?4:0,c=e>=200&&300>e||304===e,r&&(w=Mn(p,C,r)),w=On(p,w,C,c),c?(p.ifModified&&(T=C.getResponseHeader(\"Last-Modified\"),T&&(x.lastModified[o]=T),T=C.getResponseHeader(\"etag\"),T&&(x.etag[o]=T)),204===e||\"HEAD\"===p.type?N=\"nocontent\":304===e?N=\"notmodified\":(N=w.state,y=w.data,v=w.error,c=!v)):(v=N,(e||!N)&&(N=\"error\",0>e&&(e=0))),C.status=e,C.statusText=(n||N)+\"\",c?h.resolveWith(f,[y,N,C]):h.rejectWith(f,[C,N,v]),C.statusCode(m),m=t,l&&d.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,p,c?y:v]),g.fireWith(f,[C,N]),l&&(d.trigger(\"ajaxComplete\",[C,p]),--x.active||x.event.trigger(\"ajaxStop\")))}return C},getJSON:function(e,t,n){return x.get(e,t,n,\"json\")},getScript:function(e,n){return x.get(e,t,n,\"script\")}}),x.each([\"get\",\"post\"],function(e,n){x[n]=function(e,r,i,o){return x.isFunction(r)&&(o=o||i,i=r,r=t),x.ajax({url:e,type:n,dataType:o,data:r,success:i})}});function Mn(e,n,r){var i,o,a,s,l=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),o===t&&(o=e.mimeType||n.getResponseHeader(\"Content-Type\"));if(o)for(s in l)if(l[s]&&l[s].test(o)){u.unshift(s);break}if(u[0]in r)a=u[0];else{for(s in r){if(!u[0]||e.converters[s+\" \"+u[0]]){a=s;break}i||(i=s)}a=a||i}return a?(a!==u[0]&&u.unshift(a),r[a]):t}function On(e,t,n,r){var i,o,a,s,l,u={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)u[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!l&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),l=o,o=c.shift())if(\"*\"===o)o=l;else if(\"*\"!==l&&l!==o){if(a=u[l+\" \"+o]||u[\"* \"+o],!a)for(i in u)if(s=i.split(\" \"),s[1]===o&&(a=u[l+\" \"+s[0]]||u[\"* \"+s[0]])){a===!0?a=u[i]:u[i]!==!0&&(o=s[0],c.unshift(s[1]));break}if(a!==!0)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(p){return{state:\"parsererror\",error:a?p:\"No conversion from \"+l+\" to \"+o}}}return{state:\"success\",data:t}}x.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/(?:java|ecma)script/},converters:{\"text script\":function(e){return x.globalEval(e),e}}}),x.ajaxPrefilter(\"script\",function(e){e.cache===t&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\",e.global=!1)}),x.ajaxTransport(\"script\",function(e){if(e.crossDomain){var n,r=a.head||x(\"head\")[0]||a.documentElement;return{send:function(t,i){n=a.createElement(\"script\"),n.async=!0,e.scriptCharset&&(n.charset=e.scriptCharset),n.src=e.url,n.onload=n.onreadystatechange=function(e,t){(t||!n.readyState||/loaded|complete/.test(n.readyState))&&(n.onload=n.onreadystatechange=null,n.parentNode&&n.parentNode.removeChild(n),n=null,t||i(200,\"success\"))},r.insertBefore(n,r.firstChild)},abort:function(){n&&n.onload(t,!0)}}}});var Fn=[],Bn=/(=)\\?(?=&|$)|\\?\\?/;x.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Fn.pop()||x.expando+\"_\"+vn++;return this[e]=!0,e}}),x.ajaxPrefilter(\"json jsonp\",function(n,r,i){var o,a,s,l=n.jsonp!==!1&&(Bn.test(n.url)?\"url\":\"string\"==typeof n.data&&!(n.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Bn.test(n.data)&&\"data\");return l||\"jsonp\"===n.dataTypes[0]?(o=n.jsonpCallback=x.isFunction(n.jsonpCallback)?n.jsonpCallback():n.jsonpCallback,l?n[l]=n[l].replace(Bn,\"$1\"+o):n.jsonp!==!1&&(n.url+=(bn.test(n.url)?\"&\":\"?\")+n.jsonp+\"=\"+o),n.converters[\"script json\"]=function(){return s||x.error(o+\" was not called\"),s[0]},n.dataTypes[0]=\"json\",a=e[o],e[o]=function(){s=arguments},i.always(function(){e[o]=a,n[o]&&(n.jsonpCallback=r.jsonpCallback,Fn.push(o)),s&&x.isFunction(a)&&a(s[0]),s=a=t}),\"script\"):t});var Pn,Rn,Wn=0,$n=e.ActiveXObject&&function(){var e;for(e in Pn)Pn[e](t,!0)};function In(){try{return new e.XMLHttpRequest}catch(t){}}function zn(){try{return new e.ActiveXObject(\"Microsoft.XMLHTTP\")}catch(t){}}x.ajaxSettings.xhr=e.ActiveXObject?function(){return!this.isLocal&&In()||zn()}:In,Rn=x.ajaxSettings.xhr(),x.support.cors=!!Rn&&\"withCredentials\"in Rn,Rn=x.support.ajax=!!Rn,Rn&&x.ajaxTransport(function(n){if(!n.crossDomain||x.support.cors){var r;return{send:function(i,o){var a,s,l=n.xhr();if(n.username?l.open(n.type,n.url,n.async,n.username,n.password):l.open(n.type,n.url,n.async),n.xhrFields)for(s in n.xhrFields)l[s]=n.xhrFields[s];n.mimeType&&l.overrideMimeType&&l.overrideMimeType(n.mimeType),n.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");try{for(s in i)l.setRequestHeader(s,i[s])}catch(u){}l.send(n.hasContent&&n.data||null),r=function(e,i){var s,u,c,p;try{if(r&&(i||4===l.readyState))if(r=t,a&&(l.onreadystatechange=x.noop,$n&&delete Pn[a]),i)4!==l.readyState&&l.abort();else{p={},s=l.status,u=l.getAllResponseHeaders(),\"string\"==typeof l.responseText&&(p.text=l.responseText);try{c=l.statusText}catch(f){c=\"\"}s||!n.isLocal||n.crossDomain?1223===s&&(s=204):s=p.text?200:404}}catch(d){i||o(-1,d)}p&&o(s,c,p,u)},n.async?4===l.readyState?setTimeout(r):(a=++Wn,$n&&(Pn||(Pn={},x(e).unload($n)),Pn[a]=r),l.onreadystatechange=r):r()},abort:function(){r&&r(t,!0)}}}});var Xn,Un,Vn=/^(?:toggle|show|hide)$/,Yn=RegExp(\"^(?:([+-])=|)(\"+w+\")([a-z%]*)$\",\"i\"),Jn=/queueHooks$/,Gn=[nr],Qn={\"*\":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=Yn.exec(t),o=i&&i[3]||(x.cssNumber[e]?\"\":\"px\"),a=(x.cssNumber[e]||\"px\"!==o&&+r)&&Yn.exec(x.css(n.elem,e)),s=1,l=20;if(a&&a[3]!==o){o=o||a[3],i=i||[],a=+r||1;do s=s||\".5\",a/=s,x.style(n.elem,e,a+o);while(s!==(s=n.cur()/r)&&1!==s&&--l)}return i&&(a=n.start=+a||+r||0,n.unit=o,n.end=i[1]?a+(i[1]+1)*i[2]:+i[2]),n}]};function Kn(){return setTimeout(function(){Xn=t}),Xn=x.now()}function Zn(e,t,n){var r,i=(Qn[t]||[]).concat(Qn[\"*\"]),o=0,a=i.length;for(;a>o;o++)if(r=i[o].call(n,t,e))return r}function er(e,t,n){var r,i,o=0,a=Gn.length,s=x.Deferred().always(function(){delete l.elem}),l=function(){if(i)return!1;var t=Xn||Kn(),n=Math.max(0,u.startTime+u.duration-t),r=n/u.duration||0,o=1-r,a=0,l=u.tweens.length;for(;l>a;a++)u.tweens[a].run(o);return s.notifyWith(e,[u,o,n]),1>o&&l?n:(s.resolveWith(e,[u]),!1)},u=s.promise({elem:e,props:x.extend({},t),opts:x.extend(!0,{specialEasing:{}},n),originalProperties:t,originalOptions:n,startTime:Xn||Kn(),duration:n.duration,tweens:[],createTween:function(t,n){var r=x.Tween(e,u.opts,t,n,u.opts.specialEasing[t]||u.opts.easing);return u.tweens.push(r),r},stop:function(t){var n=0,r=t?u.tweens.length:0;if(i)return this;for(i=!0;r>n;n++)u.tweens[n].run(1);return t?s.resolveWith(e,[u,t]):s.rejectWith(e,[u,t]),this}}),c=u.props;for(tr(c,u.opts.specialEasing);a>o;o++)if(r=Gn[o].call(u,e,c,u.opts))return r;return x.map(c,Zn,u),x.isFunction(u.opts.start)&&u.opts.start.call(e,u),x.fx.timer(x.extend(l,{elem:e,anim:u,queue:u.opts.queue})),u.progress(u.opts.progress).done(u.opts.done,u.opts.complete).fail(u.opts.fail).always(u.opts.always)}function tr(e,t){var n,r,i,o,a;for(n in e)if(r=x.camelCase(n),i=t[r],o=e[n],x.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),a=x.cssHooks[r],a&&\"expand\"in a){o=a.expand(o),delete e[r];for(n in o)n in e||(e[n]=o[n],t[n]=i)}else t[r]=i}x.Animation=x.extend(er,{tweener:function(e,t){x.isFunction(e)?(t=e,e=[\"*\"]):e=e.split(\" \");var n,r=0,i=e.length;for(;i>r;r++)n=e[r],Qn[n]=Qn[n]||[],Qn[n].unshift(t)},prefilter:function(e,t){t?Gn.unshift(e):Gn.push(e)}});function nr(e,t,n){var r,i,o,a,s,l,u=this,c={},p=e.style,f=e.nodeType&&nn(e),d=x._data(e,\"fxshow\");n.queue||(s=x._queueHooks(e,\"fx\"),null==s.unqueued&&(s.unqueued=0,l=s.empty.fire,s.empty.fire=function(){s.unqueued||l()}),s.unqueued++,u.always(function(){u.always(function(){s.unqueued--,x.queue(e,\"fx\").length||s.empty.fire()})})),1===e.nodeType&&(\"height\"in t||\"width\"in t)&&(n.overflow=[p.overflow,p.overflowX,p.overflowY],\"inline\"===x.css(e,\"display\")&&\"none\"===x.css(e,\"float\")&&(x.support.inlineBlockNeedsLayout&&\"inline\"!==ln(e.nodeName)?p.zoom=1:p.display=\"inline-block\")),n.overflow&&(p.overflow=\"hidden\",x.support.shrinkWrapBlocks||u.always(function(){p.overflow=n.overflow[0],p.overflowX=n.overflow[1],p.overflowY=n.overflow[2]}));for(r in t)if(i=t[r],Vn.exec(i)){if(delete t[r],o=o||\"toggle\"===i,i===(f?\"hide\":\"show\"))continue;c[r]=d&&d[r]||x.style(e,r)}if(!x.isEmptyObject(c)){d?\"hidden\"in d&&(f=d.hidden):d=x._data(e,\"fxshow\",{}),o&&(d.hidden=!f),f?x(e).show():u.done(function(){x(e).hide()}),u.done(function(){var t;x._removeData(e,\"fxshow\");for(t in c)x.style(e,t,c[t])});for(r in c)a=Zn(f?d[r]:0,r,u),r in d||(d[r]=a.start,f&&(a.end=a.start,a.start=\"width\"===r||\"height\"===r?1:0))}}function rr(e,t,n,r,i){return new rr.prototype.init(e,t,n,r,i)}x.Tween=rr,rr.prototype={constructor:rr,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||\"swing\",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(x.cssNumber[n]?\"\":\"px\")},cur:function(){var e=rr.propHooks[this.prop];return e&&e.get?e.get(this):rr.propHooks._default.get(this)},run:function(e){var t,n=rr.propHooks[this.prop];return this.pos=t=this.options.duration?x.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):rr.propHooks._default.set(this),this}},rr.prototype.init.prototype=rr.prototype,rr.propHooks={_default:{get:function(e){var t;return null==e.elem[e.prop]||e.elem.style&&null!=e.elem.style[e.prop]?(t=x.css(e.elem,e.prop,\"\"),t&&\"auto\"!==t?t:0):e.elem[e.prop]},set:function(e){x.fx.step[e.prop]?x.fx.step[e.prop](e):e.elem.style&&(null!=e.elem.style[x.cssProps[e.prop]]||x.cssHooks[e.prop])?x.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},rr.propHooks.scrollTop=rr.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},x.each([\"toggle\",\"show\",\"hide\"],function(e,t){var n=x.fn[t];x.fn[t]=function(e,r,i){return null==e||\"boolean\"==typeof e?n.apply(this,arguments):this.animate(ir(t,!0),e,r,i)}}),x.fn.extend({fadeTo:function(e,t,n,r){return this.filter(nn).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i=x.isEmptyObject(e),o=x.speed(t,n,r),a=function(){var t=er(this,x.extend({},e),o);(i||x._data(this,\"finish\"))&&t.stop(!0)};return a.finish=a,i||o.queue===!1?this.each(a):this.queue(o.queue,a)},stop:function(e,n,r){var i=function(e){var t=e.stop;delete e.stop,t(r)};return\"string\"!=typeof e&&(r=n,n=e,e=t),n&&e!==!1&&this.queue(e||\"fx\",[]),this.each(function(){var t=!0,n=null!=e&&e+\"queueHooks\",o=x.timers,a=x._data(this);if(n)a[n]&&a[n].stop&&i(a[n]);else for(n in a)a[n]&&a[n].stop&&Jn.test(n)&&i(a[n]);for(n=o.length;n--;)o[n].elem!==this||null!=e&&o[n].queue!==e||(o[n].anim.stop(r),t=!1,o.splice(n,1));(t||!r)&&x.dequeue(this,e)})},finish:function(e){return e!==!1&&(e=e||\"fx\"),this.each(function(){var t,n=x._data(this),r=n[e+\"queue\"],i=n[e+\"queueHooks\"],o=x.timers,a=r?r.length:0;for(n.finish=!0,x.queue(this,e,[]),i&&i.stop&&i.stop.call(this,!0),t=o.length;t--;)o[t].elem===this&&o[t].queue===e&&(o[t].anim.stop(!0),o.splice(t,1));for(t=0;a>t;t++)r[t]&&r[t].finish&&r[t].finish.call(this);delete n.finish})}});function ir(e,t){var n,r={height:e},i=0;for(t=t?1:0;4>i;i+=2-t)n=Zt[i],r[\"margin\"+n]=r[\"padding\"+n]=e;return t&&(r.opacity=r.width=e),r}x.each({slideDown:ir(\"show\"),slideUp:ir(\"hide\"),slideToggle:ir(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,t){x.fn[e]=function(e,n,r){return this.animate(t,e,n,r)}}),x.speed=function(e,t,n){var r=e&&\"object\"==typeof e?x.extend({},e):{complete:n||!n&&t||x.isFunction(e)&&e,duration:e,easing:n&&t||t&&!x.isFunction(t)&&t};return r.duration=x.fx.off?0:\"number\"==typeof r.duration?r.duration:r.duration in x.fx.speeds?x.fx.speeds[r.duration]:x.fx.speeds._default,(null==r.queue||r.queue===!0)&&(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){x.isFunction(r.old)&&r.old.call(this),r.queue&&x.dequeue(this,r.queue)},r},x.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},x.timers=[],x.fx=rr.prototype.init,x.fx.tick=function(){var e,n=x.timers,r=0;for(Xn=x.now();n.length>r;r++)e=n[r],e()||n[r]!==e||n.splice(r--,1);n.length||x.fx.stop(),Xn=t},x.fx.timer=function(e){e()&&x.timers.push(e)&&x.fx.start()},x.fx.interval=13,x.fx.start=function(){Un||(Un=setInterval(x.fx.tick,x.fx.interval))},x.fx.stop=function(){clearInterval(Un),Un=null},x.fx.speeds={slow:600,fast:200,_default:400},x.fx.step={},x.expr&&x.expr.filters&&(x.expr.filters.animated=function(e){return x.grep(x.timers,function(t){return e===t.elem}).length}),x.fn.offset=function(e){if(arguments.length)return e===t?this:this.each(function(t){x.offset.setOffset(this,e,t)});var n,r,o={top:0,left:0},a=this[0],s=a&&a.ownerDocument;if(s)return n=s.documentElement,x.contains(n,a)?(typeof a.getBoundingClientRect!==i&&(o=a.getBoundingClientRect()),r=or(s),{top:o.top+(r.pageYOffset||n.scrollTop)-(n.clientTop||0),left:o.left+(r.pageXOffset||n.scrollLeft)-(n.clientLeft||0)}):o},x.offset={setOffset:function(e,t,n){var r=x.css(e,\"position\");\"static\"===r&&(e.style.position=\"relative\");var i=x(e),o=i.offset(),a=x.css(e,\"top\"),s=x.css(e,\"left\"),l=(\"absolute\"===r||\"fixed\"===r)&&x.inArray(\"auto\",[a,s])>-1,u={},c={},p,f;l?(c=i.position(),p=c.top,f=c.left):(p=parseFloat(a)||0,f=parseFloat(s)||0),x.isFunction(t)&&(t=t.call(e,n,o)),null!=t.top&&(u.top=t.top-o.top+p),null!=t.left&&(u.left=t.left-o.left+f),\"using\"in t?t.using.call(e,u):i.css(u)}},x.fn.extend({position:function(){if(this[0]){var e,t,n={top:0,left:0},r=this[0];return\"fixed\"===x.css(r,\"position\")?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),x.nodeName(e[0],\"html\")||(n=e.offset()),n.top+=x.css(e[0],\"borderTopWidth\",!0),n.left+=x.css(e[0],\"borderLeftWidth\",!0)),{top:t.top-n.top-x.css(r,\"marginTop\",!0),left:t.left-n.left-x.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||s;while(e&&!x.nodeName(e,\"html\")&&\"static\"===x.css(e,\"position\"))e=e.offsetParent;return e||s})}}),x.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(e,n){var r=/Y/.test(n);x.fn[e]=function(i){return x.access(this,function(e,i,o){var a=or(e);return o===t?a?n in a?a[n]:a.document.documentElement[i]:e[i]:(a?a.scrollTo(r?x(a).scrollLeft():o,r?o:x(a).scrollTop()):e[i]=o,t)},e,i,arguments.length,null)}});function or(e){return x.isWindow(e)?e:9===e.nodeType?e.defaultView||e.parentWindow:!1}x.each({Height:\"height\",Width:\"width\"},function(e,n){x.each({padding:\"inner\"+e,content:n,\"\":\"outer\"+e},function(r,i){x.fn[i]=function(i,o){var a=arguments.length&&(r||\"boolean\"!=typeof i),s=r||(i===!0||o===!0?\"margin\":\"border\");return x.access(this,function(n,r,i){var o;return x.isWindow(n)?n.document.documentElement[\"client\"+e]:9===n.nodeType?(o=n.documentElement,Math.max(n.body[\"scroll\"+e],o[\"scroll\"+e],n.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):i===t?x.css(n,r,s):x.style(n,r,i,s)},n,a?i:t,a,null)}})}),x.fn.size=function(){return this.length},x.fn.andSelf=x.fn.addBack,\"object\"==typeof module&&module&&\"object\"==typeof module.exports?module.exports=x:(e.jQuery=e.$=x,\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return x}))})(window);\n"
  },
  {
    "path": "third-party/showdown.js",
    "content": "/*! showdown v 2.1.0 - 21-04-2022 */\n!function(){function a(e){\"use strict\";var r={omitExtraWLInCodeBlocks:{defaultValue:!1,describe:\"Omit the default extra whiteline added to code blocks\",type:\"boolean\"},noHeaderId:{defaultValue:!1,describe:\"Turn on/off generated header id\",type:\"boolean\"},prefixHeaderId:{defaultValue:!1,describe:\"Add a prefix to the generated header ids. Passing a string will prefix that string to the header id. Setting to true will add a generic 'section-' prefix\",type:\"string\"},rawPrefixHeaderId:{defaultValue:!1,describe:'Setting this option to true will prevent showdown from modifying the prefix. This might result in malformed IDs (if, for instance, the \" char is used in the prefix)',type:\"boolean\"},ghCompatibleHeaderId:{defaultValue:!1,describe:\"Generate header ids compatible with github style (spaces are replaced with dashes, a bunch of non alphanumeric chars are removed)\",type:\"boolean\"},rawHeaderId:{defaultValue:!1,describe:\"Remove only spaces, ' and \\\" from generated header ids (including prefixes), replacing them with dashes (-). WARNING: This might result in malformed ids\",type:\"boolean\"},headerLevelStart:{defaultValue:!1,describe:\"The header blocks level start\",type:\"integer\"},parseImgDimensions:{defaultValue:!1,describe:\"Turn on/off image dimension parsing\",type:\"boolean\"},simplifiedAutoLink:{defaultValue:!1,describe:\"Turn on/off GFM autolink style\",type:\"boolean\"},excludeTrailingPunctuationFromURLs:{defaultValue:!1,describe:\"Excludes trailing punctuation from links generated with autoLinking\",type:\"boolean\"},literalMidWordUnderscores:{defaultValue:!1,describe:\"Parse midword underscores as literal underscores\",type:\"boolean\"},literalMidWordAsterisks:{defaultValue:!1,describe:\"Parse midword asterisks as literal asterisks\",type:\"boolean\"},strikethrough:{defaultValue:!1,describe:\"Turn on/off strikethrough support\",type:\"boolean\"},tables:{defaultValue:!1,describe:\"Turn on/off tables support\",type:\"boolean\"},tablesHeaderId:{defaultValue:!1,describe:\"Add an id to table headers\",type:\"boolean\"},ghCodeBlocks:{defaultValue:!0,describe:\"Turn on/off GFM fenced code blocks support\",type:\"boolean\"},tasklists:{defaultValue:!1,describe:\"Turn on/off GFM tasklist support\",type:\"boolean\"},smoothLivePreview:{defaultValue:!1,describe:\"Prevents weird effects in live previews due to incomplete input\",type:\"boolean\"},smartIndentationFix:{defaultValue:!1,describe:\"Tries to smartly fix indentation in es6 strings\",type:\"boolean\"},disableForced4SpacesIndentedSublists:{defaultValue:!1,describe:\"Disables the requirement of indenting nested sublists by 4 spaces\",type:\"boolean\"},simpleLineBreaks:{defaultValue:!1,describe:\"Parses simple line breaks as <br> (GFM Style)\",type:\"boolean\"},requireSpaceBeforeHeadingText:{defaultValue:!1,describe:\"Makes adding a space between `#` and the header text mandatory (GFM Style)\",type:\"boolean\"},ghMentions:{defaultValue:!1,describe:\"Enables github @mentions\",type:\"boolean\"},ghMentionsLink:{defaultValue:\"https://github.com/{u}\",describe:\"Changes the link generated by @mentions. Only applies if ghMentions option is enabled.\",type:\"string\"},encodeEmails:{defaultValue:!0,describe:\"Encode e-mail addresses through the use of Character Entities, transforming ASCII e-mail addresses into its equivalent decimal entities\",type:\"boolean\"},openLinksInNewWindow:{defaultValue:!1,describe:\"Open all links in new windows\",type:\"boolean\"},backslashEscapesHTMLTags:{defaultValue:!1,describe:\"Support for HTML Tag escaping. ex: <div>foo</div>\",type:\"boolean\"},emoji:{defaultValue:!1,describe:\"Enable emoji support. Ex: `this is a :smile: emoji`\",type:\"boolean\"},underline:{defaultValue:!1,describe:\"Enable support for underline. Syntax is double or triple underscores: `__underline word__`. With this option enabled, underscores no longer parses into `<em>` and `<strong>`\",type:\"boolean\"},ellipsis:{defaultValue:!0,describe:\"Replaces three dots with the ellipsis unicode character\",type:\"boolean\"},completeHTMLDocument:{defaultValue:!1,describe:\"Outputs a complete html document, including `<html>`, `<head>` and `<body>` tags\",type:\"boolean\"},metadata:{defaultValue:!1,describe:\"Enable support for document metadata (defined at the top of the document between `«««` and `»»»` or between `---` and `---`).\",type:\"boolean\"},splitAdjacentBlockquotes:{defaultValue:!1,describe:\"Split adjacent blockquote blocks\",type:\"boolean\"}};if(!1===e)return JSON.parse(JSON.stringify(r));var t,a={};for(t in r)r.hasOwnProperty(t)&&(a[t]=r[t].defaultValue);return a}var x={},t={},d={},p=a(!0),h=\"vanilla\",_={github:{omitExtraWLInCodeBlocks:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,disableForced4SpacesIndentedSublists:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghCompatibleHeaderId:!0,ghMentions:!0,backslashEscapesHTMLTags:!0,emoji:!0,splitAdjacentBlockquotes:!0},original:{noHeaderId:!0,ghCodeBlocks:!1},ghost:{omitExtraWLInCodeBlocks:!0,parseImgDimensions:!0,simplifiedAutoLink:!0,excludeTrailingPunctuationFromURLs:!0,literalMidWordUnderscores:!0,strikethrough:!0,tables:!0,tablesHeaderId:!0,ghCodeBlocks:!0,tasklists:!0,smoothLivePreview:!0,simpleLineBreaks:!0,requireSpaceBeforeHeadingText:!0,ghMentions:!1,encodeEmails:!0},vanilla:a(!0),allOn:function(){\"use strict\";var e,r=a(!0),t={};for(e in r)r.hasOwnProperty(e)&&(t[e]=!0);return t}()};function g(e,r){\"use strict\";var t=r?\"Error in \"+r+\" extension->\":\"Error in unnamed extension\",a={valid:!0,error:\"\"};x.helper.isArray(e)||(e=[e]);for(var n=0;n<e.length;++n){var s=t+\" sub-extension \"+n+\": \",o=e[n];if(\"object\"!=typeof o)return a.valid=!1,a.error=s+\"must be an object, but \"+typeof o+\" given\",a;if(!x.helper.isString(o.type))return a.valid=!1,a.error=s+'property \"type\" must be a string, but '+typeof o.type+\" given\",a;var i=o.type=o.type.toLowerCase();if(\"lang\"!==(i=\"html\"===(i=\"language\"===i?o.type=\"lang\":i)?o.type=\"output\":i)&&\"output\"!==i&&\"listener\"!==i)return a.valid=!1,a.error=s+\"type \"+i+' is not recognized. Valid values: \"lang/language\", \"output/html\" or \"listener\"',a;if(\"listener\"===i){if(x.helper.isUndefined(o.listeners))return a.valid=!1,a.error=s+'. Extensions of type \"listener\" must have a property called \"listeners\"',a}else if(x.helper.isUndefined(o.filter)&&x.helper.isUndefined(o.regex))return a.valid=!1,a.error=s+i+' extensions must define either a \"regex\" property or a \"filter\" method',a;if(o.listeners){if(\"object\"!=typeof o.listeners)return a.valid=!1,a.error=s+'\"listeners\" property must be an object but '+typeof o.listeners+\" given\",a;for(var l in o.listeners)if(o.listeners.hasOwnProperty(l)&&\"function\"!=typeof o.listeners[l])return a.valid=!1,a.error=s+'\"listeners\" property must be an hash of [event name]: [callback]. listeners.'+l+\" must be a function but \"+typeof o.listeners[l]+\" given\",a}if(o.filter){if(\"function\"!=typeof o.filter)return a.valid=!1,a.error=s+'\"filter\" must be a function, but '+typeof o.filter+\" given\",a}else if(o.regex){if(x.helper.isString(o.regex)&&(o.regex=new RegExp(o.regex,\"g\")),!(o.regex instanceof RegExp))return a.valid=!1,a.error=s+'\"regex\" property must either be a string or a RegExp object, but '+typeof o.regex+\" given\",a;if(x.helper.isUndefined(o.replace))return a.valid=!1,a.error=s+'\"regex\" extensions must implement a replace string or function',a}}return a}function n(e,r){\"use strict\";return\"¨E\"+r.charCodeAt(0)+\"E\"}x.helper={},x.extensions={},x.setOption=function(e,r){\"use strict\";return p[e]=r,this},x.getOption=function(e){\"use strict\";return p[e]},x.getOptions=function(){\"use strict\";return p},x.resetOptions=function(){\"use strict\";p=a(!0)},x.setFlavor=function(e){\"use strict\";if(!_.hasOwnProperty(e))throw Error(e+\" flavor was not found\");x.resetOptions();var r,t=_[e];for(r in h=e,t)t.hasOwnProperty(r)&&(p[r]=t[r])},x.getFlavor=function(){\"use strict\";return h},x.getFlavorOptions=function(e){\"use strict\";if(_.hasOwnProperty(e))return _[e]},x.getDefaultOptions=a,x.subParser=function(e,r){\"use strict\";if(x.helper.isString(e)){if(void 0===r){if(t.hasOwnProperty(e))return t[e];throw Error(\"SubParser named \"+e+\" not registered!\")}t[e]=r}},x.extension=function(e,r){\"use strict\";if(!x.helper.isString(e))throw Error(\"Extension 'name' must be a string\");if(e=x.helper.stdExtName(e),x.helper.isUndefined(r)){if(d.hasOwnProperty(e))return d[e];throw Error(\"Extension named \"+e+\" is not registered!\")}\"function\"==typeof r&&(r=r());var t=g(r=x.helper.isArray(r)?r:[r],e);if(!t.valid)throw Error(t.error);d[e]=r},x.getAllExtensions=function(){\"use strict\";return d},x.removeExtension=function(e){\"use strict\";delete d[e]},x.resetExtensions=function(){\"use strict\";d={}},x.validateExtension=function(e){\"use strict\";e=g(e,null);return!!e.valid||(console.warn(e.error),!1)},x.hasOwnProperty(\"helper\")||(x.helper={}),x.helper.isString=function(e){\"use strict\";return\"string\"==typeof e||e instanceof String},x.helper.isFunction=function(e){\"use strict\";return e&&\"[object Function]\"==={}.toString.call(e)},x.helper.isArray=function(e){\"use strict\";return Array.isArray(e)},x.helper.isUndefined=function(e){\"use strict\";return void 0===e},x.helper.forEach=function(e,r){\"use strict\";if(x.helper.isUndefined(e))throw new Error(\"obj param is required\");if(x.helper.isUndefined(r))throw new Error(\"callback param is required\");if(!x.helper.isFunction(r))throw new Error(\"callback param must be a function/closure\");if(\"function\"==typeof e.forEach)e.forEach(r);else if(x.helper.isArray(e))for(var t=0;t<e.length;t++)r(e[t],t,e);else{if(\"object\"!=typeof e)throw new Error(\"obj does not seem to be an array or an iterable object\");for(var a in e)e.hasOwnProperty(a)&&r(e[a],a,e)}},x.helper.stdExtName=function(e){\"use strict\";return e.replace(/[_?*+\\/\\\\.^-]/g,\"\").replace(/\\s/g,\"\").toLowerCase()},x.helper.escapeCharactersCallback=n,x.helper.escapeCharacters=function(e,r,t){\"use strict\";r=\"([\"+r.replace(/([\\[\\]\\\\])/g,\"\\\\$1\")+\"])\",t&&(r=\"\\\\\\\\\"+r),t=new RegExp(r,\"g\");return e=e.replace(t,n)},x.helper.unescapeHTMLEntities=function(e){\"use strict\";return e.replace(/&quot;/g,'\"').replace(/&lt;/g,\"<\").replace(/&gt;/g,\">\").replace(/&amp;/g,\"&\")};function u(e,r,t,a){\"use strict\";var n,s,o,i=-1<(a=a||\"\").indexOf(\"g\"),l=new RegExp(r+\"|\"+t,\"g\"+a.replace(/g/g,\"\")),c=new RegExp(r,a.replace(/g/g,\"\")),u=[];do{for(n=0;p=l.exec(e);)if(c.test(p[0]))n++||(o=(s=l.lastIndex)-p[0].length);else if(n&&!--n){var d=p.index+p[0].length,p={left:{start:o,end:s},match:{start:s,end:p.index},right:{start:p.index,end:d},wholeMatch:{start:o,end:d}};if(u.push(p),!i)return u}}while(n&&(l.lastIndex=s));return u}function s(u){\"use strict\";return function(e,r,t,a,n,s,o){var i=t=t.replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback),l=\"\",c=\"\",r=r||\"\",o=o||\"\";return/^www\\./i.test(t)&&(t=t.replace(/^www\\./i,\"http://www.\")),u.excludeTrailingPunctuationFromURLs&&s&&(l=s),r+'<a href=\"'+t+'\"'+(c=u.openLinksInNewWindow?' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"':c)+\">\"+i+\"</a>\"+l+o}}function o(n,s){\"use strict\";return function(e,r,t){var a=\"mailto:\";return r=r||\"\",t=x.subParser(\"unescapeSpecialChars\")(t,n,s),n.encodeEmails?(a=x.helper.encodeEmailAddress(a+t),t=x.helper.encodeEmailAddress(t)):a+=t,r+'<a href=\"'+a+'\">'+t+\"</a>\"}}x.helper.matchRecursiveRegExp=function(e,r,t,a){\"use strict\";for(var n=u(e,r,t,a),s=[],o=0;o<n.length;++o)s.push([e.slice(n[o].wholeMatch.start,n[o].wholeMatch.end),e.slice(n[o].match.start,n[o].match.end),e.slice(n[o].left.start,n[o].left.end),e.slice(n[o].right.start,n[o].right.end)]);return s},x.helper.replaceRecursiveRegExp=function(e,r,t,a,n){\"use strict\";x.helper.isFunction(r)||(s=r,r=function(){return s});var s,o=u(e,t,a,n),t=e,i=o.length;if(0<i){var l=[];0!==o[0].wholeMatch.start&&l.push(e.slice(0,o[0].wholeMatch.start));for(var c=0;c<i;++c)l.push(r(e.slice(o[c].wholeMatch.start,o[c].wholeMatch.end),e.slice(o[c].match.start,o[c].match.end),e.slice(o[c].left.start,o[c].left.end),e.slice(o[c].right.start,o[c].right.end))),c<i-1&&l.push(e.slice(o[c].wholeMatch.end,o[c+1].wholeMatch.start));o[i-1].wholeMatch.end<e.length&&l.push(e.slice(o[i-1].wholeMatch.end)),t=l.join(\"\")}return t},x.helper.regexIndexOf=function(e,r,t){\"use strict\";if(!x.helper.isString(e))throw\"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string\";if(r instanceof RegExp==!1)throw\"InvalidArgumentError: second parameter of showdown.helper.regexIndexOf function must be an instance of RegExp\";e=e.substring(t||0).search(r);return 0<=e?e+(t||0):e},x.helper.splitAtIndex=function(e,r){\"use strict\";if(x.helper.isString(e))return[e.substring(0,r),e.substring(r)];throw\"InvalidArgumentError: first parameter of showdown.helper.regexIndexOf function must be a string\"},x.helper.encodeEmailAddress=function(e){\"use strict\";var t=[function(e){return\"&#\"+e.charCodeAt(0)+\";\"},function(e){return\"&#x\"+e.charCodeAt(0).toString(16)+\";\"},function(e){return e}];return e=e.replace(/./g,function(e){var r;return e=\"@\"===e?t[Math.floor(2*Math.random())](e):.9<(r=Math.random())?t[2](e):.45<r?t[1](e):t[0](e)})},x.helper.padEnd=function(e,r,t){\"use strict\";return r>>=0,t=String(t||\" \"),e.length>r?String(e):((r-=e.length)>t.length&&(t+=t.repeat(r/t.length)),String(e)+t.slice(0,r))},\"undefined\"==typeof console&&(console={warn:function(e){\"use strict\";alert(e)},log:function(e){\"use strict\";alert(e)},error:function(e){\"use strict\";throw e}}),x.helper.regexes={asteriskDashAndColon:/([*_:~])/g},x.helper.emojis={\"+1\":\"👍\",\"-1\":\"👎\",100:\"💯\",1234:\"🔢\",\"1st_place_medal\":\"🥇\",\"2nd_place_medal\":\"🥈\",\"3rd_place_medal\":\"🥉\",\"8ball\":\"🎱\",a:\"🅰️\",ab:\"🆎\",abc:\"🔤\",abcd:\"🔡\",accept:\"🉑\",aerial_tramway:\"🚡\",airplane:\"✈️\",alarm_clock:\"⏰\",alembic:\"⚗️\",alien:\"👽\",ambulance:\"🚑\",amphora:\"🏺\",anchor:\"⚓️\",angel:\"👼\",anger:\"💢\",angry:\"😠\",anguished:\"😧\",ant:\"🐜\",apple:\"🍎\",aquarius:\"♒️\",aries:\"♈️\",arrow_backward:\"◀️\",arrow_double_down:\"⏬\",arrow_double_up:\"⏫\",arrow_down:\"⬇️\",arrow_down_small:\"🔽\",arrow_forward:\"▶️\",arrow_heading_down:\"⤵️\",arrow_heading_up:\"⤴️\",arrow_left:\"⬅️\",arrow_lower_left:\"↙️\",arrow_lower_right:\"↘️\",arrow_right:\"➡️\",arrow_right_hook:\"↪️\",arrow_up:\"⬆️\",arrow_up_down:\"↕️\",arrow_up_small:\"🔼\",arrow_upper_left:\"↖️\",arrow_upper_right:\"↗️\",arrows_clockwise:\"🔃\",arrows_counterclockwise:\"🔄\",art:\"🎨\",articulated_lorry:\"🚛\",artificial_satellite:\"🛰\",astonished:\"😲\",athletic_shoe:\"👟\",atm:\"🏧\",atom_symbol:\"⚛️\",avocado:\"🥑\",b:\"🅱️\",baby:\"👶\",baby_bottle:\"🍼\",baby_chick:\"🐤\",baby_symbol:\"🚼\",back:\"🔙\",bacon:\"🥓\",badminton:\"🏸\",baggage_claim:\"🛄\",baguette_bread:\"🥖\",balance_scale:\"⚖️\",balloon:\"🎈\",ballot_box:\"🗳\",ballot_box_with_check:\"☑️\",bamboo:\"🎍\",banana:\"🍌\",bangbang:\"‼️\",bank:\"🏦\",bar_chart:\"📊\",barber:\"💈\",baseball:\"⚾️\",basketball:\"🏀\",basketball_man:\"⛹️\",basketball_woman:\"⛹️&zwj;♀️\",bat:\"🦇\",bath:\"🛀\",bathtub:\"🛁\",battery:\"🔋\",beach_umbrella:\"🏖\",bear:\"🐻\",bed:\"🛏\",bee:\"🐝\",beer:\"🍺\",beers:\"🍻\",beetle:\"🐞\",beginner:\"🔰\",bell:\"🔔\",bellhop_bell:\"🛎\",bento:\"🍱\",biking_man:\"🚴\",bike:\"🚲\",biking_woman:\"🚴&zwj;♀️\",bikini:\"👙\",biohazard:\"☣️\",bird:\"🐦\",birthday:\"🎂\",black_circle:\"⚫️\",black_flag:\"🏴\",black_heart:\"🖤\",black_joker:\"🃏\",black_large_square:\"⬛️\",black_medium_small_square:\"◾️\",black_medium_square:\"◼️\",black_nib:\"✒️\",black_small_square:\"▪️\",black_square_button:\"🔲\",blonde_man:\"👱\",blonde_woman:\"👱&zwj;♀️\",blossom:\"🌼\",blowfish:\"🐡\",blue_book:\"📘\",blue_car:\"🚙\",blue_heart:\"💙\",blush:\"😊\",boar:\"🐗\",boat:\"⛵️\",bomb:\"💣\",book:\"📖\",bookmark:\"🔖\",bookmark_tabs:\"📑\",books:\"📚\",boom:\"💥\",boot:\"👢\",bouquet:\"💐\",bowing_man:\"🙇\",bow_and_arrow:\"🏹\",bowing_woman:\"🙇&zwj;♀️\",bowling:\"🎳\",boxing_glove:\"🥊\",boy:\"👦\",bread:\"🍞\",bride_with_veil:\"👰\",bridge_at_night:\"🌉\",briefcase:\"💼\",broken_heart:\"💔\",bug:\"🐛\",building_construction:\"🏗\",bulb:\"💡\",bullettrain_front:\"🚅\",bullettrain_side:\"🚄\",burrito:\"🌯\",bus:\"🚌\",business_suit_levitating:\"🕴\",busstop:\"🚏\",bust_in_silhouette:\"👤\",busts_in_silhouette:\"👥\",butterfly:\"🦋\",cactus:\"🌵\",cake:\"🍰\",calendar:\"📆\",call_me_hand:\"🤙\",calling:\"📲\",camel:\"🐫\",camera:\"📷\",camera_flash:\"📸\",camping:\"🏕\",cancer:\"♋️\",candle:\"🕯\",candy:\"🍬\",canoe:\"🛶\",capital_abcd:\"🔠\",capricorn:\"♑️\",car:\"🚗\",card_file_box:\"🗃\",card_index:\"📇\",card_index_dividers:\"🗂\",carousel_horse:\"🎠\",carrot:\"🥕\",cat:\"🐱\",cat2:\"🐈\",cd:\"💿\",chains:\"⛓\",champagne:\"🍾\",chart:\"💹\",chart_with_downwards_trend:\"📉\",chart_with_upwards_trend:\"📈\",checkered_flag:\"🏁\",cheese:\"🧀\",cherries:\"🍒\",cherry_blossom:\"🌸\",chestnut:\"🌰\",chicken:\"🐔\",children_crossing:\"🚸\",chipmunk:\"🐿\",chocolate_bar:\"🍫\",christmas_tree:\"🎄\",church:\"⛪️\",cinema:\"🎦\",circus_tent:\"🎪\",city_sunrise:\"🌇\",city_sunset:\"🌆\",cityscape:\"🏙\",cl:\"🆑\",clamp:\"🗜\",clap:\"👏\",clapper:\"🎬\",classical_building:\"🏛\",clinking_glasses:\"🥂\",clipboard:\"📋\",clock1:\"🕐\",clock10:\"🕙\",clock1030:\"🕥\",clock11:\"🕚\",clock1130:\"🕦\",clock12:\"🕛\",clock1230:\"🕧\",clock130:\"🕜\",clock2:\"🕑\",clock230:\"🕝\",clock3:\"🕒\",clock330:\"🕞\",clock4:\"🕓\",clock430:\"🕟\",clock5:\"🕔\",clock530:\"🕠\",clock6:\"🕕\",clock630:\"🕡\",clock7:\"🕖\",clock730:\"🕢\",clock8:\"🕗\",clock830:\"🕣\",clock9:\"🕘\",clock930:\"🕤\",closed_book:\"📕\",closed_lock_with_key:\"🔐\",closed_umbrella:\"🌂\",cloud:\"☁️\",cloud_with_lightning:\"🌩\",cloud_with_lightning_and_rain:\"⛈\",cloud_with_rain:\"🌧\",cloud_with_snow:\"🌨\",clown_face:\"🤡\",clubs:\"♣️\",cocktail:\"🍸\",coffee:\"☕️\",coffin:\"⚰️\",cold_sweat:\"😰\",comet:\"☄️\",computer:\"💻\",computer_mouse:\"🖱\",confetti_ball:\"🎊\",confounded:\"😖\",confused:\"😕\",congratulations:\"㊗️\",construction:\"🚧\",construction_worker_man:\"👷\",construction_worker_woman:\"👷&zwj;♀️\",control_knobs:\"🎛\",convenience_store:\"🏪\",cookie:\"🍪\",cool:\"🆒\",policeman:\"👮\",copyright:\"©️\",corn:\"🌽\",couch_and_lamp:\"🛋\",couple:\"👫\",couple_with_heart_woman_man:\"💑\",couple_with_heart_man_man:\"👨&zwj;❤️&zwj;👨\",couple_with_heart_woman_woman:\"👩&zwj;❤️&zwj;👩\",couplekiss_man_man:\"👨&zwj;❤️&zwj;💋&zwj;👨\",couplekiss_man_woman:\"💏\",couplekiss_woman_woman:\"👩&zwj;❤️&zwj;💋&zwj;👩\",cow:\"🐮\",cow2:\"🐄\",cowboy_hat_face:\"🤠\",crab:\"🦀\",crayon:\"🖍\",credit_card:\"💳\",crescent_moon:\"🌙\",cricket:\"🏏\",crocodile:\"🐊\",croissant:\"🥐\",crossed_fingers:\"🤞\",crossed_flags:\"🎌\",crossed_swords:\"⚔️\",crown:\"👑\",cry:\"😢\",crying_cat_face:\"😿\",crystal_ball:\"🔮\",cucumber:\"🥒\",cupid:\"💘\",curly_loop:\"➰\",currency_exchange:\"💱\",curry:\"🍛\",custard:\"🍮\",customs:\"🛃\",cyclone:\"🌀\",dagger:\"🗡\",dancer:\"💃\",dancing_women:\"👯\",dancing_men:\"👯&zwj;♂️\",dango:\"🍡\",dark_sunglasses:\"🕶\",dart:\"🎯\",dash:\"💨\",date:\"📅\",deciduous_tree:\"🌳\",deer:\"🦌\",department_store:\"🏬\",derelict_house:\"🏚\",desert:\"🏜\",desert_island:\"🏝\",desktop_computer:\"🖥\",male_detective:\"🕵️\",diamond_shape_with_a_dot_inside:\"💠\",diamonds:\"♦️\",disappointed:\"😞\",disappointed_relieved:\"😥\",dizzy:\"💫\",dizzy_face:\"😵\",do_not_litter:\"🚯\",dog:\"🐶\",dog2:\"🐕\",dollar:\"💵\",dolls:\"🎎\",dolphin:\"🐬\",door:\"🚪\",doughnut:\"🍩\",dove:\"🕊\",dragon:\"🐉\",dragon_face:\"🐲\",dress:\"👗\",dromedary_camel:\"🐪\",drooling_face:\"🤤\",droplet:\"💧\",drum:\"🥁\",duck:\"🦆\",dvd:\"📀\",\"e-mail\":\"📧\",eagle:\"🦅\",ear:\"👂\",ear_of_rice:\"🌾\",earth_africa:\"🌍\",earth_americas:\"🌎\",earth_asia:\"🌏\",egg:\"🥚\",eggplant:\"🍆\",eight_pointed_black_star:\"✴️\",eight_spoked_asterisk:\"✳️\",electric_plug:\"🔌\",elephant:\"🐘\",email:\"✉️\",end:\"🔚\",envelope_with_arrow:\"📩\",euro:\"💶\",european_castle:\"🏰\",european_post_office:\"🏤\",evergreen_tree:\"🌲\",exclamation:\"❗️\",expressionless:\"😑\",eye:\"👁\",eye_speech_bubble:\"👁&zwj;🗨\",eyeglasses:\"👓\",eyes:\"👀\",face_with_head_bandage:\"🤕\",face_with_thermometer:\"🤒\",fist_oncoming:\"👊\",factory:\"🏭\",fallen_leaf:\"🍂\",family_man_woman_boy:\"👪\",family_man_boy:\"👨&zwj;👦\",family_man_boy_boy:\"👨&zwj;👦&zwj;👦\",family_man_girl:\"👨&zwj;👧\",family_man_girl_boy:\"👨&zwj;👧&zwj;👦\",family_man_girl_girl:\"👨&zwj;👧&zwj;👧\",family_man_man_boy:\"👨&zwj;👨&zwj;👦\",family_man_man_boy_boy:\"👨&zwj;👨&zwj;👦&zwj;👦\",family_man_man_girl:\"👨&zwj;👨&zwj;👧\",family_man_man_girl_boy:\"👨&zwj;👨&zwj;👧&zwj;👦\",family_man_man_girl_girl:\"👨&zwj;👨&zwj;👧&zwj;👧\",family_man_woman_boy_boy:\"👨&zwj;👩&zwj;👦&zwj;👦\",family_man_woman_girl:\"👨&zwj;👩&zwj;👧\",family_man_woman_girl_boy:\"👨&zwj;👩&zwj;👧&zwj;👦\",family_man_woman_girl_girl:\"👨&zwj;👩&zwj;👧&zwj;👧\",family_woman_boy:\"👩&zwj;👦\",family_woman_boy_boy:\"👩&zwj;👦&zwj;👦\",family_woman_girl:\"👩&zwj;👧\",family_woman_girl_boy:\"👩&zwj;👧&zwj;👦\",family_woman_girl_girl:\"👩&zwj;👧&zwj;👧\",family_woman_woman_boy:\"👩&zwj;👩&zwj;👦\",family_woman_woman_boy_boy:\"👩&zwj;👩&zwj;👦&zwj;👦\",family_woman_woman_girl:\"👩&zwj;👩&zwj;👧\",family_woman_woman_girl_boy:\"👩&zwj;👩&zwj;👧&zwj;👦\",family_woman_woman_girl_girl:\"👩&zwj;👩&zwj;👧&zwj;👧\",fast_forward:\"⏩\",fax:\"📠\",fearful:\"😨\",feet:\"🐾\",female_detective:\"🕵️&zwj;♀️\",ferris_wheel:\"🎡\",ferry:\"⛴\",field_hockey:\"🏑\",file_cabinet:\"🗄\",file_folder:\"📁\",film_projector:\"📽\",film_strip:\"🎞\",fire:\"🔥\",fire_engine:\"🚒\",fireworks:\"🎆\",first_quarter_moon:\"🌓\",first_quarter_moon_with_face:\"🌛\",fish:\"🐟\",fish_cake:\"🍥\",fishing_pole_and_fish:\"🎣\",fist_raised:\"✊\",fist_left:\"🤛\",fist_right:\"🤜\",flags:\"🎏\",flashlight:\"🔦\",fleur_de_lis:\"⚜️\",flight_arrival:\"🛬\",flight_departure:\"🛫\",floppy_disk:\"💾\",flower_playing_cards:\"🎴\",flushed:\"😳\",fog:\"🌫\",foggy:\"🌁\",football:\"🏈\",footprints:\"👣\",fork_and_knife:\"🍴\",fountain:\"⛲️\",fountain_pen:\"🖋\",four_leaf_clover:\"🍀\",fox_face:\"🦊\",framed_picture:\"🖼\",free:\"🆓\",fried_egg:\"🍳\",fried_shrimp:\"🍤\",fries:\"🍟\",frog:\"🐸\",frowning:\"😦\",frowning_face:\"☹️\",frowning_man:\"🙍&zwj;♂️\",frowning_woman:\"🙍\",middle_finger:\"🖕\",fuelpump:\"⛽️\",full_moon:\"🌕\",full_moon_with_face:\"🌝\",funeral_urn:\"⚱️\",game_die:\"🎲\",gear:\"⚙️\",gem:\"💎\",gemini:\"♊️\",ghost:\"👻\",gift:\"🎁\",gift_heart:\"💝\",girl:\"👧\",globe_with_meridians:\"🌐\",goal_net:\"🥅\",goat:\"🐐\",golf:\"⛳️\",golfing_man:\"🏌️\",golfing_woman:\"🏌️&zwj;♀️\",gorilla:\"🦍\",grapes:\"🍇\",green_apple:\"🍏\",green_book:\"📗\",green_heart:\"💚\",green_salad:\"🥗\",grey_exclamation:\"❕\",grey_question:\"❔\",grimacing:\"😬\",grin:\"😁\",grinning:\"😀\",guardsman:\"💂\",guardswoman:\"💂&zwj;♀️\",guitar:\"🎸\",gun:\"🔫\",haircut_woman:\"💇\",haircut_man:\"💇&zwj;♂️\",hamburger:\"🍔\",hammer:\"🔨\",hammer_and_pick:\"⚒\",hammer_and_wrench:\"🛠\",hamster:\"🐹\",hand:\"✋\",handbag:\"👜\",handshake:\"🤝\",hankey:\"💩\",hatched_chick:\"🐥\",hatching_chick:\"🐣\",headphones:\"🎧\",hear_no_evil:\"🙉\",heart:\"❤️\",heart_decoration:\"💟\",heart_eyes:\"😍\",heart_eyes_cat:\"😻\",heartbeat:\"💓\",heartpulse:\"💗\",hearts:\"♥️\",heavy_check_mark:\"✔️\",heavy_division_sign:\"➗\",heavy_dollar_sign:\"💲\",heavy_heart_exclamation:\"❣️\",heavy_minus_sign:\"➖\",heavy_multiplication_x:\"✖️\",heavy_plus_sign:\"➕\",helicopter:\"🚁\",herb:\"🌿\",hibiscus:\"🌺\",high_brightness:\"🔆\",high_heel:\"👠\",hocho:\"🔪\",hole:\"🕳\",honey_pot:\"🍯\",horse:\"🐴\",horse_racing:\"🏇\",hospital:\"🏥\",hot_pepper:\"🌶\",hotdog:\"🌭\",hotel:\"🏨\",hotsprings:\"♨️\",hourglass:\"⌛️\",hourglass_flowing_sand:\"⏳\",house:\"🏠\",house_with_garden:\"🏡\",houses:\"🏘\",hugs:\"🤗\",hushed:\"😯\",ice_cream:\"🍨\",ice_hockey:\"🏒\",ice_skate:\"⛸\",icecream:\"🍦\",id:\"🆔\",ideograph_advantage:\"🉐\",imp:\"👿\",inbox_tray:\"📥\",incoming_envelope:\"📨\",tipping_hand_woman:\"💁\",information_source:\"ℹ️\",innocent:\"😇\",interrobang:\"⁉️\",iphone:\"📱\",izakaya_lantern:\"🏮\",jack_o_lantern:\"🎃\",japan:\"🗾\",japanese_castle:\"🏯\",japanese_goblin:\"👺\",japanese_ogre:\"👹\",jeans:\"👖\",joy:\"😂\",joy_cat:\"😹\",joystick:\"🕹\",kaaba:\"🕋\",key:\"🔑\",keyboard:\"⌨️\",keycap_ten:\"🔟\",kick_scooter:\"🛴\",kimono:\"👘\",kiss:\"💋\",kissing:\"😗\",kissing_cat:\"😽\",kissing_closed_eyes:\"😚\",kissing_heart:\"😘\",kissing_smiling_eyes:\"😙\",kiwi_fruit:\"🥝\",koala:\"🐨\",koko:\"🈁\",label:\"🏷\",large_blue_circle:\"🔵\",large_blue_diamond:\"🔷\",large_orange_diamond:\"🔶\",last_quarter_moon:\"🌗\",last_quarter_moon_with_face:\"🌜\",latin_cross:\"✝️\",laughing:\"😆\",leaves:\"🍃\",ledger:\"📒\",left_luggage:\"🛅\",left_right_arrow:\"↔️\",leftwards_arrow_with_hook:\"↩️\",lemon:\"🍋\",leo:\"♌️\",leopard:\"🐆\",level_slider:\"🎚\",libra:\"♎️\",light_rail:\"🚈\",link:\"🔗\",lion:\"🦁\",lips:\"👄\",lipstick:\"💄\",lizard:\"🦎\",lock:\"🔒\",lock_with_ink_pen:\"🔏\",lollipop:\"🍭\",loop:\"➿\",loud_sound:\"🔊\",loudspeaker:\"📢\",love_hotel:\"🏩\",love_letter:\"💌\",low_brightness:\"🔅\",lying_face:\"🤥\",m:\"Ⓜ️\",mag:\"🔍\",mag_right:\"🔎\",mahjong:\"🀄️\",mailbox:\"📫\",mailbox_closed:\"📪\",mailbox_with_mail:\"📬\",mailbox_with_no_mail:\"📭\",man:\"👨\",man_artist:\"👨&zwj;🎨\",man_astronaut:\"👨&zwj;🚀\",man_cartwheeling:\"🤸&zwj;♂️\",man_cook:\"👨&zwj;🍳\",man_dancing:\"🕺\",man_facepalming:\"🤦&zwj;♂️\",man_factory_worker:\"👨&zwj;🏭\",man_farmer:\"👨&zwj;🌾\",man_firefighter:\"👨&zwj;🚒\",man_health_worker:\"👨&zwj;⚕️\",man_in_tuxedo:\"🤵\",man_judge:\"👨&zwj;⚖️\",man_juggling:\"🤹&zwj;♂️\",man_mechanic:\"👨&zwj;🔧\",man_office_worker:\"👨&zwj;💼\",man_pilot:\"👨&zwj;✈️\",man_playing_handball:\"🤾&zwj;♂️\",man_playing_water_polo:\"🤽&zwj;♂️\",man_scientist:\"👨&zwj;🔬\",man_shrugging:\"🤷&zwj;♂️\",man_singer:\"👨&zwj;🎤\",man_student:\"👨&zwj;🎓\",man_teacher:\"👨&zwj;🏫\",man_technologist:\"👨&zwj;💻\",man_with_gua_pi_mao:\"👲\",man_with_turban:\"👳\",tangerine:\"🍊\",mans_shoe:\"👞\",mantelpiece_clock:\"🕰\",maple_leaf:\"🍁\",martial_arts_uniform:\"🥋\",mask:\"😷\",massage_woman:\"💆\",massage_man:\"💆&zwj;♂️\",meat_on_bone:\"🍖\",medal_military:\"🎖\",medal_sports:\"🏅\",mega:\"📣\",melon:\"🍈\",memo:\"📝\",men_wrestling:\"🤼&zwj;♂️\",menorah:\"🕎\",mens:\"🚹\",metal:\"🤘\",metro:\"🚇\",microphone:\"🎤\",microscope:\"🔬\",milk_glass:\"🥛\",milky_way:\"🌌\",minibus:\"🚐\",minidisc:\"💽\",mobile_phone_off:\"📴\",money_mouth_face:\"🤑\",money_with_wings:\"💸\",moneybag:\"💰\",monkey:\"🐒\",monkey_face:\"🐵\",monorail:\"🚝\",moon:\"🌔\",mortar_board:\"🎓\",mosque:\"🕌\",motor_boat:\"🛥\",motor_scooter:\"🛵\",motorcycle:\"🏍\",motorway:\"🛣\",mount_fuji:\"🗻\",mountain:\"⛰\",mountain_biking_man:\"🚵\",mountain_biking_woman:\"🚵&zwj;♀️\",mountain_cableway:\"🚠\",mountain_railway:\"🚞\",mountain_snow:\"🏔\",mouse:\"🐭\",mouse2:\"🐁\",movie_camera:\"🎥\",moyai:\"🗿\",mrs_claus:\"🤶\",muscle:\"💪\",mushroom:\"🍄\",musical_keyboard:\"🎹\",musical_note:\"🎵\",musical_score:\"🎼\",mute:\"🔇\",nail_care:\"💅\",name_badge:\"📛\",national_park:\"🏞\",nauseated_face:\"🤢\",necktie:\"👔\",negative_squared_cross_mark:\"❎\",nerd_face:\"🤓\",neutral_face:\"😐\",new:\"🆕\",new_moon:\"🌑\",new_moon_with_face:\"🌚\",newspaper:\"📰\",newspaper_roll:\"🗞\",next_track_button:\"⏭\",ng:\"🆖\",no_good_man:\"🙅&zwj;♂️\",no_good_woman:\"🙅\",night_with_stars:\"🌃\",no_bell:\"🔕\",no_bicycles:\"🚳\",no_entry:\"⛔️\",no_entry_sign:\"🚫\",no_mobile_phones:\"📵\",no_mouth:\"😶\",no_pedestrians:\"🚷\",no_smoking:\"🚭\",\"non-potable_water\":\"🚱\",nose:\"👃\",notebook:\"📓\",notebook_with_decorative_cover:\"📔\",notes:\"🎶\",nut_and_bolt:\"🔩\",o:\"⭕️\",o2:\"🅾️\",ocean:\"🌊\",octopus:\"🐙\",oden:\"🍢\",office:\"🏢\",oil_drum:\"🛢\",ok:\"🆗\",ok_hand:\"👌\",ok_man:\"🙆&zwj;♂️\",ok_woman:\"🙆\",old_key:\"🗝\",older_man:\"👴\",older_woman:\"👵\",om:\"🕉\",on:\"🔛\",oncoming_automobile:\"🚘\",oncoming_bus:\"🚍\",oncoming_police_car:\"🚔\",oncoming_taxi:\"🚖\",open_file_folder:\"📂\",open_hands:\"👐\",open_mouth:\"😮\",open_umbrella:\"☂️\",ophiuchus:\"⛎\",orange_book:\"📙\",orthodox_cross:\"☦️\",outbox_tray:\"📤\",owl:\"🦉\",ox:\"🐂\",package:\"📦\",page_facing_up:\"📄\",page_with_curl:\"📃\",pager:\"📟\",paintbrush:\"🖌\",palm_tree:\"🌴\",pancakes:\"🥞\",panda_face:\"🐼\",paperclip:\"📎\",paperclips:\"🖇\",parasol_on_ground:\"⛱\",parking:\"🅿️\",part_alternation_mark:\"〽️\",partly_sunny:\"⛅️\",passenger_ship:\"🛳\",passport_control:\"🛂\",pause_button:\"⏸\",peace_symbol:\"☮️\",peach:\"🍑\",peanuts:\"🥜\",pear:\"🍐\",pen:\"🖊\",pencil2:\"✏️\",penguin:\"🐧\",pensive:\"😔\",performing_arts:\"🎭\",persevere:\"😣\",person_fencing:\"🤺\",pouting_woman:\"🙎\",phone:\"☎️\",pick:\"⛏\",pig:\"🐷\",pig2:\"🐖\",pig_nose:\"🐽\",pill:\"💊\",pineapple:\"🍍\",ping_pong:\"🏓\",pisces:\"♓️\",pizza:\"🍕\",place_of_worship:\"🛐\",plate_with_cutlery:\"🍽\",play_or_pause_button:\"⏯\",point_down:\"👇\",point_left:\"👈\",point_right:\"👉\",point_up:\"☝️\",point_up_2:\"👆\",police_car:\"🚓\",policewoman:\"👮&zwj;♀️\",poodle:\"🐩\",popcorn:\"🍿\",post_office:\"🏣\",postal_horn:\"📯\",postbox:\"📮\",potable_water:\"🚰\",potato:\"🥔\",pouch:\"👝\",poultry_leg:\"🍗\",pound:\"💷\",rage:\"😡\",pouting_cat:\"😾\",pouting_man:\"🙎&zwj;♂️\",pray:\"🙏\",prayer_beads:\"📿\",pregnant_woman:\"🤰\",previous_track_button:\"⏮\",prince:\"🤴\",princess:\"👸\",printer:\"🖨\",purple_heart:\"💜\",purse:\"👛\",pushpin:\"📌\",put_litter_in_its_place:\"🚮\",question:\"❓\",rabbit:\"🐰\",rabbit2:\"🐇\",racehorse:\"🐎\",racing_car:\"🏎\",radio:\"📻\",radio_button:\"🔘\",radioactive:\"☢️\",railway_car:\"🚃\",railway_track:\"🛤\",rainbow:\"🌈\",rainbow_flag:\"🏳️&zwj;🌈\",raised_back_of_hand:\"🤚\",raised_hand_with_fingers_splayed:\"🖐\",raised_hands:\"🙌\",raising_hand_woman:\"🙋\",raising_hand_man:\"🙋&zwj;♂️\",ram:\"🐏\",ramen:\"🍜\",rat:\"🐀\",record_button:\"⏺\",recycle:\"♻️\",red_circle:\"🔴\",registered:\"®️\",relaxed:\"☺️\",relieved:\"😌\",reminder_ribbon:\"🎗\",repeat:\"🔁\",repeat_one:\"🔂\",rescue_worker_helmet:\"⛑\",restroom:\"🚻\",revolving_hearts:\"💞\",rewind:\"⏪\",rhinoceros:\"🦏\",ribbon:\"🎀\",rice:\"🍚\",rice_ball:\"🍙\",rice_cracker:\"🍘\",rice_scene:\"🎑\",right_anger_bubble:\"🗯\",ring:\"💍\",robot:\"🤖\",rocket:\"🚀\",rofl:\"🤣\",roll_eyes:\"🙄\",roller_coaster:\"🎢\",rooster:\"🐓\",rose:\"🌹\",rosette:\"🏵\",rotating_light:\"🚨\",round_pushpin:\"📍\",rowing_man:\"🚣\",rowing_woman:\"🚣&zwj;♀️\",rugby_football:\"🏉\",running_man:\"🏃\",running_shirt_with_sash:\"🎽\",running_woman:\"🏃&zwj;♀️\",sa:\"🈂️\",sagittarius:\"♐️\",sake:\"🍶\",sandal:\"👡\",santa:\"🎅\",satellite:\"📡\",saxophone:\"🎷\",school:\"🏫\",school_satchel:\"🎒\",scissors:\"✂️\",scorpion:\"🦂\",scorpius:\"♏️\",scream:\"😱\",scream_cat:\"🙀\",scroll:\"📜\",seat:\"💺\",secret:\"㊙️\",see_no_evil:\"🙈\",seedling:\"🌱\",selfie:\"🤳\",shallow_pan_of_food:\"🥘\",shamrock:\"☘️\",shark:\"🦈\",shaved_ice:\"🍧\",sheep:\"🐑\",shell:\"🐚\",shield:\"🛡\",shinto_shrine:\"⛩\",ship:\"🚢\",shirt:\"👕\",shopping:\"🛍\",shopping_cart:\"🛒\",shower:\"🚿\",shrimp:\"🦐\",signal_strength:\"📶\",six_pointed_star:\"🔯\",ski:\"🎿\",skier:\"⛷\",skull:\"💀\",skull_and_crossbones:\"☠️\",sleeping:\"😴\",sleeping_bed:\"🛌\",sleepy:\"😪\",slightly_frowning_face:\"🙁\",slightly_smiling_face:\"🙂\",slot_machine:\"🎰\",small_airplane:\"🛩\",small_blue_diamond:\"🔹\",small_orange_diamond:\"🔸\",small_red_triangle:\"🔺\",small_red_triangle_down:\"🔻\",smile:\"😄\",smile_cat:\"😸\",smiley:\"😃\",smiley_cat:\"😺\",smiling_imp:\"😈\",smirk:\"😏\",smirk_cat:\"😼\",smoking:\"🚬\",snail:\"🐌\",snake:\"🐍\",sneezing_face:\"🤧\",snowboarder:\"🏂\",snowflake:\"❄️\",snowman:\"⛄️\",snowman_with_snow:\"☃️\",sob:\"😭\",soccer:\"⚽️\",soon:\"🔜\",sos:\"🆘\",sound:\"🔉\",space_invader:\"👾\",spades:\"♠️\",spaghetti:\"🍝\",sparkle:\"❇️\",sparkler:\"🎇\",sparkles:\"✨\",sparkling_heart:\"💖\",speak_no_evil:\"🙊\",speaker:\"🔈\",speaking_head:\"🗣\",speech_balloon:\"💬\",speedboat:\"🚤\",spider:\"🕷\",spider_web:\"🕸\",spiral_calendar:\"🗓\",spiral_notepad:\"🗒\",spoon:\"🥄\",squid:\"🦑\",stadium:\"🏟\",star:\"⭐️\",star2:\"🌟\",star_and_crescent:\"☪️\",star_of_david:\"✡️\",stars:\"🌠\",station:\"🚉\",statue_of_liberty:\"🗽\",steam_locomotive:\"🚂\",stew:\"🍲\",stop_button:\"⏹\",stop_sign:\"🛑\",stopwatch:\"⏱\",straight_ruler:\"📏\",strawberry:\"🍓\",stuck_out_tongue:\"😛\",stuck_out_tongue_closed_eyes:\"😝\",stuck_out_tongue_winking_eye:\"😜\",studio_microphone:\"🎙\",stuffed_flatbread:\"🥙\",sun_behind_large_cloud:\"🌥\",sun_behind_rain_cloud:\"🌦\",sun_behind_small_cloud:\"🌤\",sun_with_face:\"🌞\",sunflower:\"🌻\",sunglasses:\"😎\",sunny:\"☀️\",sunrise:\"🌅\",sunrise_over_mountains:\"🌄\",surfing_man:\"🏄\",surfing_woman:\"🏄&zwj;♀️\",sushi:\"🍣\",suspension_railway:\"🚟\",sweat:\"😓\",sweat_drops:\"💦\",sweat_smile:\"😅\",sweet_potato:\"🍠\",swimming_man:\"🏊\",swimming_woman:\"🏊&zwj;♀️\",symbols:\"🔣\",synagogue:\"🕍\",syringe:\"💉\",taco:\"🌮\",tada:\"🎉\",tanabata_tree:\"🎋\",taurus:\"♉️\",taxi:\"🚕\",tea:\"🍵\",telephone_receiver:\"📞\",telescope:\"🔭\",tennis:\"🎾\",tent:\"⛺️\",thermometer:\"🌡\",thinking:\"🤔\",thought_balloon:\"💭\",ticket:\"🎫\",tickets:\"🎟\",tiger:\"🐯\",tiger2:\"🐅\",timer_clock:\"⏲\",tipping_hand_man:\"💁&zwj;♂️\",tired_face:\"😫\",tm:\"™️\",toilet:\"🚽\",tokyo_tower:\"🗼\",tomato:\"🍅\",tongue:\"👅\",top:\"🔝\",tophat:\"🎩\",tornado:\"🌪\",trackball:\"🖲\",tractor:\"🚜\",traffic_light:\"🚥\",train:\"🚋\",train2:\"🚆\",tram:\"🚊\",triangular_flag_on_post:\"🚩\",triangular_ruler:\"📐\",trident:\"🔱\",triumph:\"😤\",trolleybus:\"🚎\",trophy:\"🏆\",tropical_drink:\"🍹\",tropical_fish:\"🐠\",truck:\"🚚\",trumpet:\"🎺\",tulip:\"🌷\",tumbler_glass:\"🥃\",turkey:\"🦃\",turtle:\"🐢\",tv:\"📺\",twisted_rightwards_arrows:\"🔀\",two_hearts:\"💕\",two_men_holding_hands:\"👬\",two_women_holding_hands:\"👭\",u5272:\"🈹\",u5408:\"🈴\",u55b6:\"🈺\",u6307:\"🈯️\",u6708:\"🈷️\",u6709:\"🈶\",u6e80:\"🈵\",u7121:\"🈚️\",u7533:\"🈸\",u7981:\"🈲\",u7a7a:\"🈳\",umbrella:\"☔️\",unamused:\"😒\",underage:\"🔞\",unicorn:\"🦄\",unlock:\"🔓\",up:\"🆙\",upside_down_face:\"🙃\",v:\"✌️\",vertical_traffic_light:\"🚦\",vhs:\"📼\",vibration_mode:\"📳\",video_camera:\"📹\",video_game:\"🎮\",violin:\"🎻\",virgo:\"♍️\",volcano:\"🌋\",volleyball:\"🏐\",vs:\"🆚\",vulcan_salute:\"🖖\",walking_man:\"🚶\",walking_woman:\"🚶&zwj;♀️\",waning_crescent_moon:\"🌘\",waning_gibbous_moon:\"🌖\",warning:\"⚠️\",wastebasket:\"🗑\",watch:\"⌚️\",water_buffalo:\"🐃\",watermelon:\"🍉\",wave:\"👋\",wavy_dash:\"〰️\",waxing_crescent_moon:\"🌒\",wc:\"🚾\",weary:\"😩\",wedding:\"💒\",weight_lifting_man:\"🏋️\",weight_lifting_woman:\"🏋️&zwj;♀️\",whale:\"🐳\",whale2:\"🐋\",wheel_of_dharma:\"☸️\",wheelchair:\"♿️\",white_check_mark:\"✅\",white_circle:\"⚪️\",white_flag:\"🏳️\",white_flower:\"💮\",white_large_square:\"⬜️\",white_medium_small_square:\"◽️\",white_medium_square:\"◻️\",white_small_square:\"▫️\",white_square_button:\"🔳\",wilted_flower:\"🥀\",wind_chime:\"🎐\",wind_face:\"🌬\",wine_glass:\"🍷\",wink:\"😉\",wolf:\"🐺\",woman:\"👩\",woman_artist:\"👩&zwj;🎨\",woman_astronaut:\"👩&zwj;🚀\",woman_cartwheeling:\"🤸&zwj;♀️\",woman_cook:\"👩&zwj;🍳\",woman_facepalming:\"🤦&zwj;♀️\",woman_factory_worker:\"👩&zwj;🏭\",woman_farmer:\"👩&zwj;🌾\",woman_firefighter:\"👩&zwj;🚒\",woman_health_worker:\"👩&zwj;⚕️\",woman_judge:\"👩&zwj;⚖️\",woman_juggling:\"🤹&zwj;♀️\",woman_mechanic:\"👩&zwj;🔧\",woman_office_worker:\"👩&zwj;💼\",woman_pilot:\"👩&zwj;✈️\",woman_playing_handball:\"🤾&zwj;♀️\",woman_playing_water_polo:\"🤽&zwj;♀️\",woman_scientist:\"👩&zwj;🔬\",woman_shrugging:\"🤷&zwj;♀️\",woman_singer:\"👩&zwj;🎤\",woman_student:\"👩&zwj;🎓\",woman_teacher:\"👩&zwj;🏫\",woman_technologist:\"👩&zwj;💻\",woman_with_turban:\"👳&zwj;♀️\",womans_clothes:\"👚\",womans_hat:\"👒\",women_wrestling:\"🤼&zwj;♀️\",womens:\"🚺\",world_map:\"🗺\",worried:\"😟\",wrench:\"🔧\",writing_hand:\"✍️\",x:\"❌\",yellow_heart:\"💛\",yen:\"💴\",yin_yang:\"☯️\",yum:\"😋\",zap:\"⚡️\",zipper_mouth_face:\"🤐\",zzz:\"💤\",octocat:'<img alt=\":octocat:\" height=\"20\" width=\"20\" align=\"absmiddle\" src=\"https://assets-cdn.github.com/images/icons/emoji/octocat.png\">',showdown:\"<span style=\\\"font-family: 'Anonymous Pro', monospace; text-decoration: underline; text-decoration-style: dashed; text-decoration-color: #3e8b8a;text-underline-position: under;\\\">S</span>\"},x.Converter=function(e){\"use strict\";var r,t,n={},i=[],l=[],o={},a=h,s={parsed:{},raw:\"\",format:\"\"};for(r in e=e||{},p)p.hasOwnProperty(r)&&(n[r]=p[r]);if(\"object\"!=typeof e)throw Error(\"Converter expects the passed parameter to be an object, but \"+typeof e+\" was passed instead.\");for(t in e)e.hasOwnProperty(t)&&(n[t]=e[t]);function c(e,r){if(r=r||null,x.helper.isString(e)){if(r=e=x.helper.stdExtName(e),x.extensions[e]){console.warn(\"DEPRECATION WARNING: \"+e+\" is an old extension that uses a deprecated loading method.Please inform the developer that the extension should be updated!\");var t=x.extensions[e],a=e;if(\"function\"==typeof t&&(t=t(new x.Converter)),x.helper.isArray(t)||(t=[t]),!(a=g(t,a)).valid)throw Error(a.error);for(var n=0;n<t.length;++n)switch(t[n].type){case\"lang\":i.push(t[n]);break;case\"output\":l.push(t[n]);break;default:throw Error(\"Extension loader error: Type unrecognized!!!\")}return}if(x.helper.isUndefined(d[e]))throw Error('Extension \"'+e+'\" could not be loaded. It was either not found or is not a valid extension.');e=d[e]}\"function\"==typeof e&&(e=e());a=g(e=x.helper.isArray(e)?e:[e],r);if(!a.valid)throw Error(a.error);for(var s=0;s<e.length;++s){switch(e[s].type){case\"lang\":i.push(e[s]);break;case\"output\":l.push(e[s])}if(e[s].hasOwnProperty(\"listeners\"))for(var o in e[s].listeners)e[s].listeners.hasOwnProperty(o)&&u(o,e[s].listeners[o])}}function u(e,r){if(!x.helper.isString(e))throw Error(\"Invalid argument in converter.listen() method: name must be a string, but \"+typeof e+\" given\");if(\"function\"!=typeof r)throw Error(\"Invalid argument in converter.listen() method: callback must be a function, but \"+typeof r+\" given\");o.hasOwnProperty(e)||(o[e]=[]),o[e].push(r)}n.extensions&&x.helper.forEach(n.extensions,c),this._dispatch=function(e,r,t,a){if(o.hasOwnProperty(e))for(var n=0;n<o[e].length;++n){var s=o[e][n](e,r,this,t,a);s&&void 0!==s&&(r=s)}return r},this.listen=function(e,r){return u(e,r),this},this.makeHtml=function(r){if(!r)return r;var e,t,a={gHtmlBlocks:[],gHtmlMdBlocks:[],gHtmlSpans:[],gUrls:{},gTitles:{},gDimensions:{},gListLevel:0,hashLinkCounts:{},langExtensions:i,outputModifiers:l,converter:this,ghCodeBlocks:[],metadata:{parsed:{},raw:\"\",format:\"\"}};return r=(r=(r=(r=(r=r.replace(/¨/g,\"¨T\")).replace(/\\$/g,\"¨D\")).replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\")).replace(/\\u00A0/g,\"&nbsp;\"),n.smartIndentationFix&&(t=(e=r).match(/^\\s*/)[0].length,t=new RegExp(\"^\\\\s{0,\"+t+\"}\",\"gm\"),r=e.replace(t,\"\")),r=\"\\n\\n\"+r+\"\\n\\n\",r=(r=x.subParser(\"detab\")(r,n,a)).replace(/^[ \\t]+$/gm,\"\"),x.helper.forEach(i,function(e){r=x.subParser(\"runExtension\")(e,r,n,a)}),r=x.subParser(\"metadata\")(r,n,a),r=x.subParser(\"hashPreCodeTags\")(r,n,a),r=x.subParser(\"githubCodeBlocks\")(r,n,a),r=x.subParser(\"hashHTMLBlocks\")(r,n,a),r=x.subParser(\"hashCodeTags\")(r,n,a),r=x.subParser(\"stripLinkDefinitions\")(r,n,a),r=x.subParser(\"blockGamut\")(r,n,a),r=x.subParser(\"unhashHTMLSpans\")(r,n,a),r=(r=(r=x.subParser(\"unescapeSpecialChars\")(r,n,a)).replace(/¨D/g,\"$$\")).replace(/¨T/g,\"¨\"),r=x.subParser(\"completeHTMLDocument\")(r,n,a),x.helper.forEach(l,function(e){r=x.subParser(\"runExtension\")(e,r,n,a)}),s=a.metadata,r},this.makeMarkdown=this.makeMd=function(e,r){if(e=(e=(e=e.replace(/\\r\\n/g,\"\\n\")).replace(/\\r/g,\"\\n\")).replace(/>[ \\t]+</,\">¨NBSP;<\"),!r){if(!window||!window.document)throw new Error(\"HTMLParser is undefined. If in a webworker or nodejs environment, you need to provide a WHATWG DOM and HTML such as JSDOM\");r=window.document}for(var r=r.createElement(\"div\"),t=(r.innerHTML=e,{preList:function(e){for(var r=e.querySelectorAll(\"pre\"),t=[],a=0;a<r.length;++a)if(1===r[a].childElementCount&&\"code\"===r[a].firstChild.tagName.toLowerCase()){var n=r[a].firstChild.innerHTML.trim(),s=r[a].firstChild.getAttribute(\"data-language\")||\"\";if(\"\"===s)for(var o=r[a].firstChild.className.split(\" \"),i=0;i<o.length;++i){var l=o[i].match(/^language-(.+)$/);if(null!==l){s=l[1];break}}n=x.helper.unescapeHTMLEntities(n),t.push(n),r[a].outerHTML='<precode language=\"'+s+'\" precodenum=\"'+a.toString()+'\"></precode>'}else t.push(r[a].innerHTML),r[a].innerHTML=\"\",r[a].setAttribute(\"prenum\",a.toString());return t}(r)}),a=(!function e(r){for(var t=0;t<r.childNodes.length;++t){var a=r.childNodes[t];3===a.nodeType?/\\S/.test(a.nodeValue)||/^[ ]+$/.test(a.nodeValue)?(a.nodeValue=a.nodeValue.split(\"\\n\").join(\" \"),a.nodeValue=a.nodeValue.replace(/(\\s)+/g,\"$1\")):(r.removeChild(a),--t):1===a.nodeType&&e(a)}}(r),r.childNodes),n=\"\",s=0;s<a.length;s++)n+=x.subParser(\"makeMarkdown.node\")(a[s],t);return n},this.setOption=function(e,r){n[e]=r},this.getOption=function(e){return n[e]},this.getOptions=function(){return n},this.addExtension=function(e,r){c(e,r=r||null)},this.useExtension=function(e){c(e)},this.setFlavor=function(e){if(!_.hasOwnProperty(e))throw Error(e+\" flavor was not found\");var r,t=_[e];for(r in a=e,t)t.hasOwnProperty(r)&&(n[r]=t[r])},this.getFlavor=function(){return a},this.removeExtension=function(e){x.helper.isArray(e)||(e=[e]);for(var r=0;r<e.length;++r){for(var t=e[r],a=0;a<i.length;++a)i[a]===t&&i.splice(a,1);for(var n=0;n<l.length;++n)l[n]===t&&l.splice(n,1)}},this.getAllExtensions=function(){return{language:i,output:l}},this.getMetadata=function(e){return e?s.raw:s.parsed},this.getMetadataFormat=function(){return s.format},this._setMetadataPair=function(e,r){s.parsed[e]=r},this._setMetadataFormat=function(e){s.format=e},this._setMetadataRaw=function(e){s.raw=e}},x.subParser(\"anchors\",function(e,i,l){\"use strict\";function r(e,r,t,a,n,s,o){if(x.helper.isUndefined(o)&&(o=\"\"),t=t.toLowerCase(),-1<e.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m))a=\"\";else if(!a){if(a=\"#\"+(t=t||r.toLowerCase().replace(/ ?\\n/g,\" \")),x.helper.isUndefined(l.gUrls[t]))return e;a=l.gUrls[t],x.helper.isUndefined(l.gTitles[t])||(o=l.gTitles[t])}return e='<a href=\"'+(a=a.replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback))+'\"',\"\"!==o&&null!==o&&(e+=' title=\"'+(o=(o=o.replace(/\"/g,\"&quot;\")).replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback))+'\"'),i.openLinksInNewWindow&&!/^#/.test(a)&&(e+=' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"'),e+=\">\"+r+\"</a>\"}return e=(e=(e=(e=(e=l.converter._dispatch(\"anchors.before\",e,i,l)).replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)] ?(?:\\n *)?\\[(.*?)]()()()()/g,r)).replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<([^>]*)>(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,r)).replace(/\\[((?:\\[[^\\]]*]|[^\\[\\]])*)]()[ \\t]*\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?:[ \\t]*(([\"'])([^\"]*?)\\5))?[ \\t]?\\)/g,r)).replace(/\\[([^\\[\\]]+)]()()()()()/g,r),i.ghMentions&&(e=e.replace(/(^|\\s)(\\\\)?(@([a-z\\d]+(?:[a-z\\d.-]+?[a-z\\d]+)*))/gim,function(e,r,t,a,n){if(\"\\\\\"===t)return r+a;if(!x.helper.isString(i.ghMentionsLink))throw new Error(\"ghMentionsLink option must be a string\");t=\"\";return r+'<a href=\"'+i.ghMentionsLink.replace(/\\{u}/g,n)+'\"'+(t=i.openLinksInNewWindow?' rel=\"noopener noreferrer\" target=\"¨E95Eblank\"':t)+\">\"+a+\"</a>\"})),e=l.converter._dispatch(\"anchors.after\",e,i,l)});var i=/([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+?\\.[^'\">\\s]+?)()(\\1)?(?=\\s|$)(?![\"<>])/gi,l=/([*~_]+|\\b)(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+\\.[^'\">\\s]+?)([.!?,()\\[\\]])?(\\1)?(?=\\s|$)(?![\"<>])/gi,c=/()<(((https?|ftp|dict):\\/\\/|www\\.)[^'\">\\s]+)()>()/gi,m=/(^|\\s)(?:mailto:)?([A-Za-z0-9!#$%&'*+-/=?^_`{|}~.]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)(?=$|\\s)/gim,f=/<()(?:mailto:)?([-.\\w]+@[-a-z0-9]+(\\.[-a-z0-9]+)*\\.[a-z]+)>/gi;x.subParser(\"autoLinks\",function(e,r,t){\"use strict\";return e=(e=(e=t.converter._dispatch(\"autoLinks.before\",e,r,t)).replace(c,s(r))).replace(f,o(r,t)),e=t.converter._dispatch(\"autoLinks.after\",e,r,t)}),x.subParser(\"simplifiedAutoLinks\",function(e,r,t){\"use strict\";return r.simplifiedAutoLink?(e=t.converter._dispatch(\"simplifiedAutoLinks.before\",e,r,t),e=(e=r.excludeTrailingPunctuationFromURLs?e.replace(l,s(r)):e.replace(i,s(r))).replace(m,o(r,t)),t.converter._dispatch(\"simplifiedAutoLinks.after\",e,r,t)):e}),x.subParser(\"blockGamut\",function(e,r,t){\"use strict\";return e=t.converter._dispatch(\"blockGamut.before\",e,r,t),e=x.subParser(\"blockQuotes\")(e,r,t),e=x.subParser(\"headers\")(e,r,t),e=x.subParser(\"horizontalRule\")(e,r,t),e=x.subParser(\"lists\")(e,r,t),e=x.subParser(\"codeBlocks\")(e,r,t),e=x.subParser(\"tables\")(e,r,t),e=x.subParser(\"hashHTMLBlocks\")(e,r,t),e=x.subParser(\"paragraphs\")(e,r,t),e=t.converter._dispatch(\"blockGamut.after\",e,r,t)}),x.subParser(\"blockQuotes\",function(e,r,t){\"use strict\";e=t.converter._dispatch(\"blockQuotes.before\",e,r,t);var a=/(^ {0,3}>[ \\t]?.+\\n(.+\\n)*\\n*)+/gm;return r.splitAdjacentBlockquotes&&(a=/^ {0,3}>[\\s\\S]*?(?:\\n\\n)/gm),e=(e+=\"\\n\\n\").replace(a,function(e){return e=(e=(e=e.replace(/^[ \\t]*>[ \\t]?/gm,\"\")).replace(/¨0/g,\"\")).replace(/^[ \\t]+$/gm,\"\"),e=x.subParser(\"githubCodeBlocks\")(e,r,t),e=(e=(e=x.subParser(\"blockGamut\")(e,r,t)).replace(/(^|\\n)/g,\"$1  \")).replace(/(\\s*<pre>[^\\r]+?<\\/pre>)/gm,function(e,r){return r.replace(/^  /gm,\"¨0\").replace(/¨0/g,\"\")}),x.subParser(\"hashBlock\")(\"<blockquote>\\n\"+e+\"\\n</blockquote>\",r,t)}),e=t.converter._dispatch(\"blockQuotes.after\",e,r,t)}),x.subParser(\"codeBlocks\",function(e,n,s){\"use strict\";e=s.converter._dispatch(\"codeBlocks.before\",e,n,s);return e=(e=(e+=\"¨0\").replace(/(?:\\n\\n|^)((?:(?:[ ]{4}|\\t).*\\n+)+)(\\n*[ ]{0,3}[^ \\t\\n]|(?=¨0))/g,function(e,r,t){var a=\"\\n\",r=x.subParser(\"outdent\")(r,n,s);return r=x.subParser(\"encodeCode\")(r,n,s),r=\"<pre><code>\"+(r=(r=(r=x.subParser(\"detab\")(r,n,s)).replace(/^\\n+/g,\"\")).replace(/\\n+$/g,\"\"))+(a=n.omitExtraWLInCodeBlocks?\"\":a)+\"</code></pre>\",x.subParser(\"hashBlock\")(r,n,s)+t})).replace(/¨0/,\"\"),e=s.converter._dispatch(\"codeBlocks.after\",e,n,s)}),x.subParser(\"codeSpans\",function(e,n,s){\"use strict\";return e=(e=void 0===(e=s.converter._dispatch(\"codeSpans.before\",e,n,s))?\"\":e).replace(/(^|[^\\\\])(`+)([^\\r]*?[^`])\\2(?!`)/gm,function(e,r,t,a){return a=(a=a.replace(/^([ \\t]*)/g,\"\")).replace(/[ \\t]*$/g,\"\"),a=r+\"<code>\"+(a=x.subParser(\"encodeCode\")(a,n,s))+\"</code>\",a=x.subParser(\"hashHTMLSpans\")(a,n,s)}),e=s.converter._dispatch(\"codeSpans.after\",e,n,s)}),x.subParser(\"completeHTMLDocument\",function(e,r,t){\"use strict\";if(!r.completeHTMLDocument)return e;e=t.converter._dispatch(\"completeHTMLDocument.before\",e,r,t);var a,n=\"html\",s=\"<!DOCTYPE HTML>\\n\",o=\"\",i='<meta charset=\"utf-8\">\\n',l=\"\",c=\"\";for(a in void 0!==t.metadata.parsed.doctype&&(s=\"<!DOCTYPE \"+t.metadata.parsed.doctype+\">\\n\",\"html\"!==(n=t.metadata.parsed.doctype.toString().toLowerCase())&&\"html5\"!==n||(i='<meta charset=\"utf-8\">')),t.metadata.parsed)if(t.metadata.parsed.hasOwnProperty(a))switch(a.toLowerCase()){case\"doctype\":break;case\"title\":o=\"<title>\"+t.metadata.parsed.title+\"</title>\\n\";break;case\"charset\":i=\"html\"===n||\"html5\"===n?'<meta charset=\"'+t.metadata.parsed.charset+'\">\\n':'<meta name=\"charset\" content=\"'+t.metadata.parsed.charset+'\">\\n';break;case\"language\":case\"lang\":l=' lang=\"'+t.metadata.parsed[a]+'\"',c+='<meta name=\"'+a+'\" content=\"'+t.metadata.parsed[a]+'\">\\n';break;default:c+='<meta name=\"'+a+'\" content=\"'+t.metadata.parsed[a]+'\">\\n'}return e=s+\"<html\"+l+\">\\n<head>\\n\"+o+i+c+\"</head>\\n<body>\\n\"+e.trim()+\"\\n</body>\\n</html>\",e=t.converter._dispatch(\"completeHTMLDocument.after\",e,r,t)}),x.subParser(\"detab\",function(e,r,t){\"use strict\";return e=(e=(e=(e=(e=(e=t.converter._dispatch(\"detab.before\",e,r,t)).replace(/\\t(?=\\t)/g,\"    \")).replace(/\\t/g,\"¨A¨B\")).replace(/¨B(.+?)¨A/g,function(e,r){for(var t=r,a=4-t.length%4,n=0;n<a;n++)t+=\" \";return t})).replace(/¨A/g,\"    \")).replace(/¨B/g,\"\"),e=t.converter._dispatch(\"detab.after\",e,r,t)}),x.subParser(\"ellipsis\",function(e,r,t){\"use strict\";return r.ellipsis?(e=(e=t.converter._dispatch(\"ellipsis.before\",e,r,t)).replace(/\\.\\.\\./g,\"…\"),t.converter._dispatch(\"ellipsis.after\",e,r,t)):e}),x.subParser(\"emoji\",function(e,r,t){\"use strict\";if(!r.emoji)return e;return e=(e=t.converter._dispatch(\"emoji.before\",e,r,t)).replace(/:([\\S]+?):/g,function(e,r){return x.helper.emojis.hasOwnProperty(r)?x.helper.emojis[r]:e}),e=t.converter._dispatch(\"emoji.after\",e,r,t)}),x.subParser(\"encodeAmpsAndAngles\",function(e,r,t){\"use strict\";return e=(e=(e=(e=(e=t.converter._dispatch(\"encodeAmpsAndAngles.before\",e,r,t)).replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\\w+);)/g,\"&amp;\")).replace(/<(?![a-z\\/?$!])/gi,\"&lt;\")).replace(/</g,\"&lt;\")).replace(/>/g,\"&gt;\"),e=t.converter._dispatch(\"encodeAmpsAndAngles.after\",e,r,t)}),x.subParser(\"encodeBackslashEscapes\",function(e,r,t){\"use strict\";return e=(e=(e=t.converter._dispatch(\"encodeBackslashEscapes.before\",e,r,t)).replace(/\\\\(\\\\)/g,x.helper.escapeCharactersCallback)).replace(/\\\\([`*_{}\\[\\]()>#+.!~=|:-])/g,x.helper.escapeCharactersCallback),e=t.converter._dispatch(\"encodeBackslashEscapes.after\",e,r,t)}),x.subParser(\"encodeCode\",function(e,r,t){\"use strict\";return e=(e=t.converter._dispatch(\"encodeCode.before\",e,r,t)).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/([*_{}\\[\\]\\\\=~-])/g,x.helper.escapeCharactersCallback),e=t.converter._dispatch(\"encodeCode.after\",e,r,t)}),x.subParser(\"escapeSpecialCharsWithinTagAttributes\",function(e,r,t){\"use strict\";return e=(e=(e=t.converter._dispatch(\"escapeSpecialCharsWithinTagAttributes.before\",e,r,t)).replace(/<\\/?[a-z\\d_:-]+(?:[\\s]+[\\s\\S]+?)?>/gi,function(e){return e.replace(/(.)<\\/?code>(?=.)/g,\"$1`\").replace(/([\\\\`*_~=|])/g,x.helper.escapeCharactersCallback)})).replace(/<!(--(?:(?:[^>-]|-[^>])(?:[^-]|-[^-])*)--)>/gi,function(e){return e.replace(/([\\\\`*_~=|])/g,x.helper.escapeCharactersCallback)}),e=t.converter._dispatch(\"escapeSpecialCharsWithinTagAttributes.after\",e,r,t)}),x.subParser(\"githubCodeBlocks\",function(e,s,o){\"use strict\";return s.ghCodeBlocks?(e=o.converter._dispatch(\"githubCodeBlocks.before\",e,s,o),e=(e=(e+=\"¨0\").replace(/(?:^|\\n)(?: {0,3})(```+|~~~+)(?: *)([^\\s`~]*)\\n([\\s\\S]*?)\\n(?: {0,3})\\1/g,function(e,r,t,a){var n=s.omitExtraWLInCodeBlocks?\"\":\"\\n\";return a=x.subParser(\"encodeCode\")(a,s,o),a=\"<pre><code\"+(t?' class=\"'+t+\" language-\"+t+'\"':\"\")+\">\"+(a=(a=(a=x.subParser(\"detab\")(a,s,o)).replace(/^\\n+/g,\"\")).replace(/\\n+$/g,\"\"))+n+\"</code></pre>\",a=x.subParser(\"hashBlock\")(a,s,o),\"\\n\\n¨G\"+(o.ghCodeBlocks.push({text:e,codeblock:a})-1)+\"G\\n\\n\"})).replace(/¨0/,\"\"),o.converter._dispatch(\"githubCodeBlocks.after\",e,s,o)):e}),x.subParser(\"hashBlock\",function(e,r,t){\"use strict\";return e=(e=t.converter._dispatch(\"hashBlock.before\",e,r,t)).replace(/(^\\n+|\\n+$)/g,\"\"),e=\"\\n\\n¨K\"+(t.gHtmlBlocks.push(e)-1)+\"K\\n\\n\",e=t.converter._dispatch(\"hashBlock.after\",e,r,t)}),x.subParser(\"hashCodeTags\",function(e,n,s){\"use strict\";e=s.converter._dispatch(\"hashCodeTags.before\",e,n,s);return e=x.helper.replaceRecursiveRegExp(e,function(e,r,t,a){t=t+x.subParser(\"encodeCode\")(r,n,s)+a;return\"¨C\"+(s.gHtmlSpans.push(t)-1)+\"C\"},\"<code\\\\b[^>]*>\",\"</code>\",\"gim\"),e=s.converter._dispatch(\"hashCodeTags.after\",e,n,s)}),x.subParser(\"hashElement\",function(e,r,t){\"use strict\";return function(e,r){return r=(r=(r=r.replace(/\\n\\n/g,\"\\n\")).replace(/^\\n/,\"\")).replace(/\\n+$/g,\"\"),r=\"\\n\\n¨K\"+(t.gHtmlBlocks.push(r)-1)+\"K\\n\\n\"}}),x.subParser(\"hashHTMLBlocks\",function(e,r,n){\"use strict\";e=n.converter._dispatch(\"hashHTMLBlocks.before\",e,r,n);function t(e,r,t,a){return-1!==t.search(/\\bmarkdown\\b/)&&(e=t+n.converter.makeHtml(r)+a),\"\\n\\n¨K\"+(n.gHtmlBlocks.push(e)-1)+\"K\\n\\n\"}var a=[\"pre\",\"div\",\"h1\",\"h2\",\"h3\",\"h4\",\"h5\",\"h6\",\"blockquote\",\"table\",\"dl\",\"ol\",\"ul\",\"script\",\"noscript\",\"form\",\"fieldset\",\"iframe\",\"math\",\"style\",\"section\",\"header\",\"footer\",\"nav\",\"article\",\"aside\",\"address\",\"audio\",\"canvas\",\"figure\",\"hgroup\",\"output\",\"video\",\"p\"];r.backslashEscapesHTMLTags&&(e=e.replace(/\\\\<(\\/?[^>]+?)>/g,function(e,r){return\"&lt;\"+r+\"&gt;\"}));for(var s=0;s<a.length;++s)for(var o=new RegExp(\"^ {0,3}(<\"+a[s]+\"\\\\b[^>]*>)\",\"im\"),i=\"<\"+a[s]+\"\\\\b[^>]*>\",l=\"</\"+a[s]+\">\";-1!==(c=x.helper.regexIndexOf(e,o));){var c=x.helper.splitAtIndex(e,c),u=x.helper.replaceRecursiveRegExp(c[1],t,i,l,\"im\");if(u===c[1])break;e=c[0].concat(u)}return e=e.replace(/(\\n {0,3}(<(hr)\\b([^<>])*?\\/?>)[ \\t]*(?=\\n{2,}))/g,x.subParser(\"hashElement\")(e,r,n)),e=(e=x.helper.replaceRecursiveRegExp(e,function(e){return\"\\n\\n¨K\"+(n.gHtmlBlocks.push(e)-1)+\"K\\n\\n\"},\"^ {0,3}\\x3c!--\",\"--\\x3e\",\"gm\")).replace(/(?:\\n\\n)( {0,3}(?:<([?%])[^\\r]*?\\2>)[ \\t]*(?=\\n{2,}))/g,x.subParser(\"hashElement\")(e,r,n)),e=n.converter._dispatch(\"hashHTMLBlocks.after\",e,r,n)}),x.subParser(\"hashHTMLSpans\",function(e,r,t){\"use strict\";function a(e){return\"¨C\"+(t.gHtmlSpans.push(e)-1)+\"C\"}return e=(e=(e=(e=(e=t.converter._dispatch(\"hashHTMLSpans.before\",e,r,t)).replace(/<[^>]+?\\/>/gi,a)).replace(/<([^>]+?)>[\\s\\S]*?<\\/\\1>/g,a)).replace(/<([^>]+?)\\s[^>]+?>[\\s\\S]*?<\\/\\1>/g,a)).replace(/<[^>]+?>/gi,a),e=t.converter._dispatch(\"hashHTMLSpans.after\",e,r,t)}),x.subParser(\"unhashHTMLSpans\",function(e,r,t){\"use strict\";e=t.converter._dispatch(\"unhashHTMLSpans.before\",e,r,t);for(var a=0;a<t.gHtmlSpans.length;++a){for(var n=t.gHtmlSpans[a],s=0;/¨C(\\d+)C/.test(n);){var o=RegExp.$1,n=n.replace(\"¨C\"+o+\"C\",t.gHtmlSpans[o]);if(10===s){console.error(\"maximum nesting of 10 spans reached!!!\");break}++s}e=e.replace(\"¨C\"+a+\"C\",n)}return e=t.converter._dispatch(\"unhashHTMLSpans.after\",e,r,t)}),x.subParser(\"hashPreCodeTags\",function(e,n,s){\"use strict\";e=s.converter._dispatch(\"hashPreCodeTags.before\",e,n,s);return e=x.helper.replaceRecursiveRegExp(e,function(e,r,t,a){t=t+x.subParser(\"encodeCode\")(r,n,s)+a;return\"\\n\\n¨G\"+(s.ghCodeBlocks.push({text:e,codeblock:t})-1)+\"G\\n\\n\"},\"^ {0,3}<pre\\\\b[^>]*>\\\\s*<code\\\\b[^>]*>\",\"^ {0,3}</code>\\\\s*</pre>\",\"gim\"),e=s.converter._dispatch(\"hashPreCodeTags.after\",e,n,s)}),x.subParser(\"headers\",function(e,n,s){\"use strict\";e=s.converter._dispatch(\"headers.before\",e,n,s);var o=isNaN(parseInt(n.headerLevelStart))?1:parseInt(n.headerLevelStart),r=n.smoothLivePreview?/^(.+)[ \\t]*\\n={2,}[ \\t]*\\n+/gm:/^(.+)[ \\t]*\\n=+[ \\t]*\\n+/gm,t=n.smoothLivePreview?/^(.+)[ \\t]*\\n-{2,}[ \\t]*\\n+/gm:/^(.+)[ \\t]*\\n-+[ \\t]*\\n+/gm,r=(e=(e=e.replace(r,function(e,r){var t=x.subParser(\"spanGamut\")(r,n,s),r=n.noHeaderId?\"\":' id=\"'+i(r)+'\"',r=\"<h\"+o+r+\">\"+t+\"</h\"+o+\">\";return x.subParser(\"hashBlock\")(r,n,s)})).replace(t,function(e,r){var t=x.subParser(\"spanGamut\")(r,n,s),r=n.noHeaderId?\"\":' id=\"'+i(r)+'\"',a=o+1,r=\"<h\"+a+r+\">\"+t+\"</h\"+a+\">\";return x.subParser(\"hashBlock\")(r,n,s)}),n.requireSpaceBeforeHeadingText?/^(#{1,6})[ \\t]+(.+?)[ \\t]*#*\\n+/gm:/^(#{1,6})[ \\t]*(.+?)[ \\t]*#*\\n+/gm);function i(e){var r=e=n.customizedHeaderId&&(r=e.match(/\\{([^{]+?)}\\s*$/))&&r[1]?r[1]:e,e=x.helper.isString(n.prefixHeaderId)?n.prefixHeaderId:!0===n.prefixHeaderId?\"section-\":\"\";return n.rawPrefixHeaderId||(r=e+r),r=(n.ghCompatibleHeaderId?r.replace(/ /g,\"-\").replace(/&amp;/g,\"\").replace(/¨T/g,\"\").replace(/¨D/g,\"\").replace(/[&+$,\\/:;=?@\"#{}|^¨~\\[\\]`\\\\*)(%.!'<>]/g,\"\"):n.rawHeaderId?r.replace(/ /g,\"-\").replace(/&amp;/g,\"&\").replace(/¨T/g,\"¨\").replace(/¨D/g,\"$\").replace(/[\"']/g,\"-\"):r.replace(/[^\\w]/g,\"\")).toLowerCase(),n.rawPrefixHeaderId&&(r=e+r),s.hashLinkCounts[r]?r=r+\"-\"+s.hashLinkCounts[r]++:s.hashLinkCounts[r]=1,r}return e=e.replace(r,function(e,r,t){var a=t,a=(n.customizedHeaderId&&(a=t.replace(/\\s?\\{([^{]+?)}\\s*$/,\"\")),x.subParser(\"spanGamut\")(a,n,s)),t=n.noHeaderId?\"\":' id=\"'+i(t)+'\"',r=o-1+r.length,t=\"<h\"+r+t+\">\"+a+\"</h\"+r+\">\";return x.subParser(\"hashBlock\")(t,n,s)}),e=s.converter._dispatch(\"headers.after\",e,n,s)}),x.subParser(\"horizontalRule\",function(e,r,t){\"use strict\";e=t.converter._dispatch(\"horizontalRule.before\",e,r,t);var a=x.subParser(\"hashBlock\")(\"<hr />\",r,t);return e=(e=(e=e.replace(/^ {0,2}( ?-){3,}[ \\t]*$/gm,a)).replace(/^ {0,2}( ?\\*){3,}[ \\t]*$/gm,a)).replace(/^ {0,2}( ?_){3,}[ \\t]*$/gm,a),e=t.converter._dispatch(\"horizontalRule.after\",e,r,t)}),x.subParser(\"images\",function(e,r,d){\"use strict\";function l(e,r,t,a,n,s,o,i){var l=d.gUrls,c=d.gTitles,u=d.gDimensions;if(t=t.toLowerCase(),i=i||\"\",-1<e.search(/\\(<?\\s*>? ?(['\"].*['\"])?\\)$/m))a=\"\";else if(\"\"===a||null===a){if(a=\"#\"+(t=\"\"!==t&&null!==t?t:r.toLowerCase().replace(/ ?\\n/g,\" \")),x.helper.isUndefined(l[t]))return e;a=l[t],x.helper.isUndefined(c[t])||(i=c[t]),x.helper.isUndefined(u[t])||(n=u[t].width,s=u[t].height)}r=r.replace(/\"/g,\"&quot;\").replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback);e='<img src=\"'+(a=a.replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback))+'\" alt=\"'+r+'\"';return i&&x.helper.isString(i)&&(e+=' title=\"'+(i=i.replace(/\"/g,\"&quot;\").replace(x.helper.regexes.asteriskDashAndColon,x.helper.escapeCharactersCallback))+'\"'),n&&s&&(e=e+(' width=\"'+(n=\"*\"===n?\"auto\":n))+'\" height=\"'+(s=\"*\"===s?\"auto\":s)+'\"'),e+=\" />\"}return e=(e=(e=(e=(e=(e=d.converter._dispatch(\"images.before\",e,r,d)).replace(/!\\[([^\\]]*?)] ?(?:\\n *)?\\[([\\s\\S]*?)]()()()()()/g,l)).replace(/!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,function(e,r,t,a,n,s,o,i){return l(e,r,t,a=a.replace(/\\s/g,\"\"),n,s,0,i)})).replace(/!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<([^>]*)>(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:(?:([\"'])([^\"]*?)\\6))?[ \\t]?\\)/g,l)).replace(/!\\[([^\\]]*?)][ \\t]*()\\([ \\t]?<?([\\S]+?(?:\\([\\S]*?\\)[\\S]*?)?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*(?:([\"'])([^\"]*?)\\6)?[ \\t]?\\)/g,l)).replace(/!\\[([^\\[\\]]+)]()()()()()/g,l),e=d.converter._dispatch(\"images.after\",e,r,d)}),x.subParser(\"italicsAndBold\",function(e,r,t){\"use strict\";return e=t.converter._dispatch(\"italicsAndBold.before\",e,r,t),e=r.literalMidWordUnderscores?(e=(e=e.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g,function(e,r){return\"<strong><em>\"+r+\"</em></strong>\"})).replace(/\\b__(\\S[\\s\\S]*?)__\\b/g,function(e,r){return\"<strong>\"+r+\"</strong>\"})).replace(/\\b_(\\S[\\s\\S]*?)_\\b/g,function(e,r){return\"<em>\"+r+\"</em>\"}):(e=(e=e.replace(/___(\\S[\\s\\S]*?)___/g,function(e,r){return/\\S$/.test(r)?\"<strong><em>\"+r+\"</em></strong>\":e})).replace(/__(\\S[\\s\\S]*?)__/g,function(e,r){return/\\S$/.test(r)?\"<strong>\"+r+\"</strong>\":e})).replace(/_([^\\s_][\\s\\S]*?)_/g,function(e,r){return/\\S$/.test(r)?\"<em>\"+r+\"</em>\":e}),e=r.literalMidWordAsterisks?(e=(e=e.replace(/([^*]|^)\\B\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*\\B(?!\\*)/g,function(e,r,t){return r+\"<strong><em>\"+t+\"</em></strong>\"})).replace(/([^*]|^)\\B\\*\\*(\\S[\\s\\S]*?)\\*\\*\\B(?!\\*)/g,function(e,r,t){return r+\"<strong>\"+t+\"</strong>\"})).replace(/([^*]|^)\\B\\*(\\S[\\s\\S]*?)\\*\\B(?!\\*)/g,function(e,r,t){return r+\"<em>\"+t+\"</em>\"}):(e=(e=e.replace(/\\*\\*\\*(\\S[\\s\\S]*?)\\*\\*\\*/g,function(e,r){return/\\S$/.test(r)?\"<strong><em>\"+r+\"</em></strong>\":e})).replace(/\\*\\*(\\S[\\s\\S]*?)\\*\\*/g,function(e,r){return/\\S$/.test(r)?\"<strong>\"+r+\"</strong>\":e})).replace(/\\*([^\\s*][\\s\\S]*?)\\*/g,function(e,r){return/\\S$/.test(r)?\"<em>\"+r+\"</em>\":e}),e=t.converter._dispatch(\"italicsAndBold.after\",e,r,t)}),x.subParser(\"lists\",function(e,d,c){\"use strict\";function p(e,r){c.gListLevel++,e=e.replace(/\\n{2,}$/,\"\\n\");var t=/(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0| {0,3}([*+-]|\\d+[.])[ \\t]+))/gm,l=/\\n[ \\t]*\\n(?!¨0)/.test(e+=\"¨0\");return d.disableForced4SpacesIndentedSublists&&(t=/(\\n)?(^ {0,3})([*+-]|\\d+[.])[ \\t]+((\\[(x|X| )?])?[ \\t]*[^\\r]+?(\\n{1,2}))(?=\\n*(¨0|\\2([*+-]|\\d+[.])[ \\t]+))/gm),e=(e=e.replace(t,function(e,r,t,a,n,s,o){o=o&&\"\"!==o.trim();var n=x.subParser(\"outdent\")(n,d,c),i=\"\";return s&&d.tasklists&&(i=' class=\"task-list-item\" style=\"list-style-type: none;\"',n=n.replace(/^[ \\t]*\\[(x|X| )?]/m,function(){var e='<input type=\"checkbox\" disabled style=\"margin: 0px 0.35em 0.25em -1.6em; vertical-align: middle;\"';return o&&(e+=\" checked\"),e+=\">\"})),n=n.replace(/^([-*+]|\\d\\.)[ \\t]+[\\S\\n ]*/g,function(e){return\"¨A\"+e}),n=\"<li\"+i+\">\"+(n=(n=r||-1<n.search(/\\n{2,}/)?(n=x.subParser(\"githubCodeBlocks\")(n,d,c),x.subParser(\"blockGamut\")(n,d,c)):(n=(n=x.subParser(\"lists\")(n,d,c)).replace(/\\n$/,\"\"),n=(n=x.subParser(\"hashHTMLBlocks\")(n,d,c)).replace(/\\n\\n+/g,\"\\n\\n\"),(l?x.subParser(\"paragraphs\"):x.subParser(\"spanGamut\"))(n,d,c))).replace(\"¨A\",\"\"))+\"</li>\\n\"})).replace(/¨0/g,\"\"),c.gListLevel--,e=r?e.replace(/\\s+$/,\"\"):e}function h(e,r){if(\"ol\"===r){r=e.match(/^ *(\\d+)\\./);if(r&&\"1\"!==r[1])return' start=\"'+r[1]+'\"'}return\"\"}function n(n,s,o){var e,i=d.disableForced4SpacesIndentedSublists?/^ ?\\d+\\.[ \\t]/gm:/^ {0,3}\\d+\\.[ \\t]/gm,l=d.disableForced4SpacesIndentedSublists?/^ ?[*+-][ \\t]/gm:/^ {0,3}[*+-][ \\t]/gm,c=\"ul\"===s?i:l,u=\"\";return-1!==n.search(c)?function e(r){var t=r.search(c),a=h(n,s);-1!==t?(u+=\"\\n\\n<\"+s+a+\">\\n\"+p(r.slice(0,t),!!o)+\"</\"+s+\">\\n\",c=\"ul\"===(s=\"ul\"===s?\"ol\":\"ul\")?i:l,e(r.slice(t))):u+=\"\\n\\n<\"+s+a+\">\\n\"+p(r,!!o)+\"</\"+s+\">\\n\"}(n):(e=h(n,s),u=\"\\n\\n<\"+s+e+\">\\n\"+p(n,!!o)+\"</\"+s+\">\\n\"),u}return e=c.converter._dispatch(\"lists.before\",e,d,c),e+=\"¨0\",e=(e=c.gListLevel?e.replace(/^(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,function(e,r,t){return n(r,-1<t.search(/[*+-]/g)?\"ul\":\"ol\",!0)}):e.replace(/(\\n\\n|^\\n?)(( {0,3}([*+-]|\\d+[.])[ \\t]+)[^\\r]+?(¨0|\\n{2,}(?=\\S)(?![ \\t]*(?:[*+-]|\\d+[.])[ \\t]+)))/gm,function(e,r,t,a){return n(t,-1<a.search(/[*+-]/g)?\"ul\":\"ol\",!1)})).replace(/¨0/,\"\"),e=c.converter._dispatch(\"lists.after\",e,d,c)}),x.subParser(\"metadata\",function(e,r,a){\"use strict\";return r.metadata?(e=(e=(e=(e=a.converter._dispatch(\"metadata.before\",e,r,a)).replace(/^\\s*«««+(\\S*?)\\n([\\s\\S]+?)\\n»»»+\\n/,function(e,r,t){return n(t),\"¨M\"})).replace(/^\\s*---+(\\S*?)\\n([\\s\\S]+?)\\n---+\\n/,function(e,r,t){return r&&(a.metadata.format=r),n(t),\"¨M\"})).replace(/¨M/g,\"\"),a.converter._dispatch(\"metadata.after\",e,r,a)):e;function n(e){(e=(e=(a.metadata.raw=e).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\")).replace(/\\n {4}/g,\" \")).replace(/^([\\S ]+): +([\\s\\S]+?)$/gm,function(e,r,t){return a.metadata.parsed[r]=t,\"\"})}}),x.subParser(\"outdent\",function(e,r,t){\"use strict\";return e=(e=(e=t.converter._dispatch(\"outdent.before\",e,r,t)).replace(/^(\\t|[ ]{1,4})/gm,\"¨0\")).replace(/¨0/g,\"\"),e=t.converter._dispatch(\"outdent.after\",e,r,t)}),x.subParser(\"paragraphs\",function(e,r,t){\"use strict\";for(var a=(e=(e=(e=t.converter._dispatch(\"paragraphs.before\",e,r,t)).replace(/^\\n+/g,\"\")).replace(/\\n+$/g,\"\")).split(/\\n{2,}/g),n=[],s=a.length,o=0;o<s;o++){var i=a[o];0<=i.search(/¨(K|G)(\\d+)\\1/g)?n.push(i):0<=i.search(/\\S/)&&(i=(i=x.subParser(\"spanGamut\")(i,r,t)).replace(/^([ \\t]*)/g,\"<p>\"),i+=\"</p>\",n.push(i))}for(s=n.length,o=0;o<s;o++){for(var l=\"\",c=n[o],u=!1;/¨(K|G)(\\d+)\\1/.test(c);){var d=RegExp.$1,p=RegExp.$2;l=(l=\"K\"===d?t.gHtmlBlocks[p]:u?x.subParser(\"encodeCode\")(t.ghCodeBlocks[p].text,r,t):t.ghCodeBlocks[p].codeblock).replace(/\\$/g,\"$$$$\"),c=c.replace(/(\\n\\n)?¨(K|G)\\d+\\2(\\n\\n)?/,l),/^<pre\\b[^>]*>\\s*<code\\b[^>]*>/.test(c)&&(u=!0)}n[o]=c}return e=(e=(e=n.join(\"\\n\")).replace(/^\\n+/g,\"\")).replace(/\\n+$/g,\"\"),t.converter._dispatch(\"paragraphs.after\",e,r,t)}),x.subParser(\"runExtension\",function(e,r,t,a){\"use strict\";return e.filter?r=e.filter(r,a.converter,t):e.regex&&((a=e.regex)instanceof RegExp||(a=new RegExp(a,\"g\")),r=r.replace(a,e.replace)),r}),x.subParser(\"spanGamut\",function(e,r,t){\"use strict\";return e=t.converter._dispatch(\"spanGamut.before\",e,r,t),e=x.subParser(\"codeSpans\")(e,r,t),e=x.subParser(\"escapeSpecialCharsWithinTagAttributes\")(e,r,t),e=x.subParser(\"encodeBackslashEscapes\")(e,r,t),e=x.subParser(\"images\")(e,r,t),e=x.subParser(\"anchors\")(e,r,t),e=x.subParser(\"autoLinks\")(e,r,t),e=x.subParser(\"simplifiedAutoLinks\")(e,r,t),e=x.subParser(\"emoji\")(e,r,t),e=x.subParser(\"underline\")(e,r,t),e=x.subParser(\"italicsAndBold\")(e,r,t),e=x.subParser(\"strikethrough\")(e,r,t),e=x.subParser(\"ellipsis\")(e,r,t),e=x.subParser(\"hashHTMLSpans\")(e,r,t),e=x.subParser(\"encodeAmpsAndAngles\")(e,r,t),r.simpleLineBreaks?/\\n\\n¨K/.test(e)||(e=e.replace(/\\n+/g,\"<br />\\n\")):e=e.replace(/  +\\n/g,\"<br />\\n\"),e=t.converter._dispatch(\"spanGamut.after\",e,r,t)}),x.subParser(\"strikethrough\",function(e,t,a){\"use strict\";return t.strikethrough&&(e=(e=a.converter._dispatch(\"strikethrough.before\",e,t,a)).replace(/(?:~){2}([\\s\\S]+?)(?:~){2}/g,function(e,r){return r=r,\"<del>\"+(r=t.simplifiedAutoLink?x.subParser(\"simplifiedAutoLinks\")(r,t,a):r)+\"</del>\"}),e=a.converter._dispatch(\"strikethrough.after\",e,t,a)),e}),x.subParser(\"stripLinkDefinitions\",function(i,l,c){\"use strict\";function e(e,r,t,a,n,s,o){return r=r.toLowerCase(),i.toLowerCase().split(r).length-1<2?e:(t.match(/^data:.+?\\/.+?;base64,/)?c.gUrls[r]=t.replace(/\\s/g,\"\"):c.gUrls[r]=x.subParser(\"encodeAmpsAndAngles\")(t,l,c),s?s+o:(o&&(c.gTitles[r]=o.replace(/\"|'/g,\"&quot;\")),l.parseImgDimensions&&a&&n&&(c.gDimensions[r]={width:a,height:n}),\"\"))}return i=(i=(i=(i+=\"¨0\").replace(/^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?(data:.+?\\/.+?;base64,[A-Za-z0-9+/=\\n]+?)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n\\n|(?=¨0)|(?=\\n\\[))/gm,e)).replace(/^ {0,3}\\[([^\\]]+)]:[ \\t]*\\n?[ \\t]*<?([^>\\s]+)>?(?: =([*\\d]+[A-Za-z%]{0,4})x([*\\d]+[A-Za-z%]{0,4}))?[ \\t]*\\n?[ \\t]*(?:(\\n*)[\"|'(](.+?)[\"|')][ \\t]*)?(?:\\n+|(?=¨0))/gm,e)).replace(/¨0/,\"\")}),x.subParser(\"tables\",function(e,y,P){\"use strict\";if(!y.tables)return e;function r(e){for(var r=e.split(\"\\n\"),t=0;t<r.length;++t)/^ {0,3}\\|/.test(r[t])&&(r[t]=r[t].replace(/^ {0,3}\\|/,\"\")),/\\|[ \\t]*$/.test(r[t])&&(r[t]=r[t].replace(/\\|[ \\t]*$/,\"\")),r[t]=x.subParser(\"codeSpans\")(r[t],y,P);var a,n,s,o,i,l=r[0].split(\"|\").map(function(e){return e.trim()}),c=r[1].split(\"|\").map(function(e){return e.trim()}),u=[],d=[],p=[],h=[];for(r.shift(),r.shift(),t=0;t<r.length;++t)\"\"!==r[t].trim()&&u.push(r[t].split(\"|\").map(function(e){return e.trim()}));if(l.length<c.length)return e;for(t=0;t<c.length;++t)p.push((a=c[t],/^:[ \\t]*--*$/.test(a)?' style=\"text-align:left;\"':/^--*[ \\t]*:[ \\t]*$/.test(a)?' style=\"text-align:right;\"':/^:[ \\t]*--*[ \\t]*:$/.test(a)?' style=\"text-align:center;\"':\"\"));for(t=0;t<l.length;++t)x.helper.isUndefined(p[t])&&(p[t]=\"\"),d.push((n=l[t],s=p[t],void 0,o=\"\",n=n.trim(),\"<th\"+(o=y.tablesHeaderId||y.tableHeaderId?' id=\"'+n.replace(/ /g,\"_\").toLowerCase()+'\"':o)+s+\">\"+(n=x.subParser(\"spanGamut\")(n,y,P))+\"</th>\\n\"));for(t=0;t<u.length;++t){for(var _=[],g=0;g<d.length;++g)x.helper.isUndefined(u[t][g]),_.push((i=u[t][g],\"<td\"+p[g]+\">\"+x.subParser(\"spanGamut\")(i,y,P)+\"</td>\\n\"));h.push(_)}for(var m=d,f=h,b=\"<table>\\n<thead>\\n<tr>\\n\",w=m.length,k=0;k<w;++k)b+=m[k];for(b+=\"</tr>\\n</thead>\\n<tbody>\\n\",k=0;k<f.length;++k){b+=\"<tr>\\n\";for(var v=0;v<w;++v)b+=f[k][v];b+=\"</tr>\\n\"}return b+=\"</tbody>\\n</table>\\n\"}return e=(e=(e=(e=P.converter._dispatch(\"tables.before\",e,y,P)).replace(/\\\\(\\|)/g,x.helper.escapeCharactersCallback)).replace(/^ {0,3}\\|?.+\\|.+\\n {0,3}\\|?[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[\\s\\S]+?(?:\\n\\n|¨0)/gm,r)).replace(/^ {0,3}\\|.+\\|[ \\t]*\\n {0,3}\\|[ \\t]*:?[ \\t]*(?:[-=]){2,}[ \\t]*:?[ \\t]*\\|[ \\t]*\\n( {0,3}\\|.+\\|[ \\t]*\\n)*(?:\\n|¨0)/gm,r),e=P.converter._dispatch(\"tables.after\",e,y,P)}),x.subParser(\"underline\",function(e,r,t){\"use strict\";return r.underline?(e=t.converter._dispatch(\"underline.before\",e,r,t),e=(e=r.literalMidWordUnderscores?(e=e.replace(/\\b___(\\S[\\s\\S]*?)___\\b/g,function(e,r){return\"<u>\"+r+\"</u>\"})).replace(/\\b__(\\S[\\s\\S]*?)__\\b/g,function(e,r){return\"<u>\"+r+\"</u>\"}):(e=e.replace(/___(\\S[\\s\\S]*?)___/g,function(e,r){return/\\S$/.test(r)?\"<u>\"+r+\"</u>\":e})).replace(/__(\\S[\\s\\S]*?)__/g,function(e,r){return/\\S$/.test(r)?\"<u>\"+r+\"</u>\":e})).replace(/(_)/g,x.helper.escapeCharactersCallback),t.converter._dispatch(\"underline.after\",e,r,t)):e}),x.subParser(\"unescapeSpecialChars\",function(e,r,t){\"use strict\";return e=(e=t.converter._dispatch(\"unescapeSpecialChars.before\",e,r,t)).replace(/¨E(\\d+)E/g,function(e,r){r=parseInt(r);return String.fromCharCode(r)}),e=t.converter._dispatch(\"unescapeSpecialChars.after\",e,r,t)}),x.subParser(\"makeMarkdown.blockquote\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,s=0;s<n;++s){var o=x.subParser(\"makeMarkdown.node\")(a[s],r);\"\"!==o&&(t+=o)}return t=\"> \"+(t=t.trim()).split(\"\\n\").join(\"\\n> \")}),x.subParser(\"makeMarkdown.codeBlock\",function(e,r){\"use strict\";var t=e.getAttribute(\"language\"),e=e.getAttribute(\"precodenum\");return\"```\"+t+\"\\n\"+r.preList[e]+\"\\n```\"}),x.subParser(\"makeMarkdown.codeSpan\",function(e){\"use strict\";return\"`\"+e.innerHTML+\"`\"}),x.subParser(\"makeMarkdown.emphasis\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes()){t+=\"*\";for(var a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);t+=\"*\"}return t}),x.subParser(\"makeMarkdown.header\",function(e,r,t){\"use strict\";var t=new Array(t+1).join(\"#\"),a=\"\";if(e.hasChildNodes())for(var a=t+\" \",n=e.childNodes,s=n.length,o=0;o<s;++o)a+=x.subParser(\"makeMarkdown.node\")(n[o],r);return a}),x.subParser(\"makeMarkdown.hr\",function(){\"use strict\";return\"---\"}),x.subParser(\"makeMarkdown.image\",function(e){\"use strict\";var r=\"\";return e.hasAttribute(\"src\")&&(r=(r+=\"![\"+e.getAttribute(\"alt\")+\"](\")+\"<\"+e.getAttribute(\"src\")+\">\",e.hasAttribute(\"width\")&&e.hasAttribute(\"height\")&&(r+=\" =\"+e.getAttribute(\"width\")+\"x\"+e.getAttribute(\"height\")),e.hasAttribute(\"title\")&&(r+=' \"'+e.getAttribute(\"title\")+'\"'),r+=\")\"),r}),x.subParser(\"makeMarkdown.links\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes()&&e.hasAttribute(\"href\")){for(var a=e.childNodes,n=a.length,t=\"[\",s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);t=(t+=\"](\")+(\"<\"+e.getAttribute(\"href\")+\">\"),e.hasAttribute(\"title\")&&(t+=' \"'+e.getAttribute(\"title\")+'\"'),t+=\")\"}return t}),x.subParser(\"makeMarkdown.list\",function(e,r,t){\"use strict\";var a=\"\";if(!e.hasChildNodes())return\"\";for(var n=e.childNodes,s=n.length,o=e.getAttribute(\"start\")||1,i=0;i<s;++i)void 0!==n[i].tagName&&\"li\"===n[i].tagName.toLowerCase()&&(a+=(\"ol\"===t?o.toString()+\". \":\"- \")+x.subParser(\"makeMarkdown.listItem\")(n[i],r),++o);return(a+=\"\\n\\x3c!-- --\\x3e\\n\").trim()}),x.subParser(\"makeMarkdown.listItem\",function(e,r){\"use strict\";for(var t=\"\",a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);return/\\n$/.test(t)?t=t.split(\"\\n\").join(\"\\n    \").replace(/^ {4}$/gm,\"\").replace(/\\n\\n+/g,\"\\n\\n\"):t+=\"\\n\",t}),x.subParser(\"makeMarkdown.node\",function(e,r,t){\"use strict\";t=t||!1;var a=\"\";if(3===e.nodeType)return x.subParser(\"makeMarkdown.txt\")(e,r);if(8===e.nodeType)return\"\\x3c!--\"+e.data+\"--\\x3e\\n\\n\";if(1!==e.nodeType)return\"\";switch(e.tagName.toLowerCase()){case\"h1\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,1)+\"\\n\\n\");break;case\"h2\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,2)+\"\\n\\n\");break;case\"h3\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,3)+\"\\n\\n\");break;case\"h4\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,4)+\"\\n\\n\");break;case\"h5\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,5)+\"\\n\\n\");break;case\"h6\":t||(a=x.subParser(\"makeMarkdown.header\")(e,r,6)+\"\\n\\n\");break;case\"p\":t||(a=x.subParser(\"makeMarkdown.paragraph\")(e,r)+\"\\n\\n\");break;case\"blockquote\":t||(a=x.subParser(\"makeMarkdown.blockquote\")(e,r)+\"\\n\\n\");break;case\"hr\":t||(a=x.subParser(\"makeMarkdown.hr\")(e,r)+\"\\n\\n\");break;case\"ol\":t||(a=x.subParser(\"makeMarkdown.list\")(e,r,\"ol\")+\"\\n\\n\");break;case\"ul\":t||(a=x.subParser(\"makeMarkdown.list\")(e,r,\"ul\")+\"\\n\\n\");break;case\"precode\":t||(a=x.subParser(\"makeMarkdown.codeBlock\")(e,r)+\"\\n\\n\");break;case\"pre\":t||(a=x.subParser(\"makeMarkdown.pre\")(e,r)+\"\\n\\n\");break;case\"table\":t||(a=x.subParser(\"makeMarkdown.table\")(e,r)+\"\\n\\n\");break;case\"code\":a=x.subParser(\"makeMarkdown.codeSpan\")(e,r);break;case\"em\":case\"i\":a=x.subParser(\"makeMarkdown.emphasis\")(e,r);break;case\"strong\":case\"b\":a=x.subParser(\"makeMarkdown.strong\")(e,r);break;case\"del\":a=x.subParser(\"makeMarkdown.strikethrough\")(e,r);break;case\"a\":a=x.subParser(\"makeMarkdown.links\")(e,r);break;case\"img\":a=x.subParser(\"makeMarkdown.image\")(e,r);break;default:a=e.outerHTML+\"\\n\\n\"}return a}),x.subParser(\"makeMarkdown.paragraph\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes())for(var a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);return t=t.trim()}),x.subParser(\"makeMarkdown.pre\",function(e,r){\"use strict\";e=e.getAttribute(\"prenum\");return\"<pre>\"+r.preList[e]+\"</pre>\"}),x.subParser(\"makeMarkdown.strikethrough\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes()){t+=\"~~\";for(var a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);t+=\"~~\"}return t}),x.subParser(\"makeMarkdown.strong\",function(e,r){\"use strict\";var t=\"\";if(e.hasChildNodes()){t+=\"**\";for(var a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r);t+=\"**\"}return t}),x.subParser(\"makeMarkdown.table\",function(e,r){\"use strict\";for(var t=\"\",a=[[],[]],n=e.querySelectorAll(\"thead>tr>th\"),s=e.querySelectorAll(\"tbody>tr\"),o=0;o<n.length;++o){var i=x.subParser(\"makeMarkdown.tableCell\")(n[o],r),l=\"---\";if(n[o].hasAttribute(\"style\"))switch(n[o].getAttribute(\"style\").toLowerCase().replace(/\\s/g,\"\")){case\"text-align:left;\":l=\":---\";break;case\"text-align:right;\":l=\"---:\";break;case\"text-align:center;\":l=\":---:\"}a[0][o]=i.trim(),a[1][o]=l}for(o=0;o<s.length;++o)for(var c=a.push([])-1,u=s[o].getElementsByTagName(\"td\"),d=0;d<n.length;++d){var p=\" \";void 0!==u[d]&&(p=x.subParser(\"makeMarkdown.tableCell\")(u[d],r)),a[c].push(p)}var h=3;for(o=0;o<a.length;++o)for(d=0;d<a[o].length;++d){var _=a[o][d].length;h<_&&(h=_)}for(o=0;o<a.length;++o){for(d=0;d<a[o].length;++d)1===o?\":\"===a[o][d].slice(-1)?a[o][d]=x.helper.padEnd(a[o][d].slice(-1),h-1,\"-\")+\":\":a[o][d]=x.helper.padEnd(a[o][d],h,\"-\"):a[o][d]=x.helper.padEnd(a[o][d],h);t+=\"| \"+a[o].join(\" | \")+\" |\\n\"}return t.trim()}),x.subParser(\"makeMarkdown.tableCell\",function(e,r){\"use strict\";var t=\"\";if(!e.hasChildNodes())return\"\";for(var a=e.childNodes,n=a.length,s=0;s<n;++s)t+=x.subParser(\"makeMarkdown.node\")(a[s],r,!0);return t.trim()}),x.subParser(\"makeMarkdown.txt\",function(e){\"use strict\";e=e.nodeValue;return e=(e=e.replace(/ +/g,\" \")).replace(/¨NBSP;/g,\" \"),e=(e=(e=(e=(e=(e=(e=(e=(e=x.helper.unescapeHTMLEntities(e)).replace(/([*_~|`])/g,\"\\\\$1\")).replace(/^(\\s*)>/g,\"\\\\$1>\")).replace(/^#/gm,\"\\\\#\")).replace(/^(\\s*)([-=]{3,})(\\s*)$/,\"$1\\\\$2$3\")).replace(/^( {0,3}\\d+)\\./gm,\"$1\\\\.\")).replace(/^( {0,3})([+-])/gm,\"$1\\\\$2\")).replace(/]([\\s]*)\\(/g,\"\\\\]$1\\\\(\")).replace(/^ {0,3}\\[([\\S \\t]*?)]:/gm,\"\\\\[$1]:\")});\"function\"==typeof define&&define.amd?define(function(){\"use strict\";return x}):\"undefined\"!=typeof module&&module.exports?module.exports=x:this.showdown=x}.call(this);\n"
  },
  {
    "path": "third-party/vue.js",
    "content": "!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=e||self).Vue=t()}(this,function(){\"use strict\";var d=Object.freeze({});function D(e){return null==e}function L(e){return null!=e}function O(e){return!0===e}function l(e){return\"string\"==typeof e||\"number\"==typeof e||\"symbol\"==typeof e||\"boolean\"==typeof e}function M(e){return null!==e&&\"object\"==typeof e}var n=Object.prototype.toString;function c(e){return\"[object Object]\"===n.call(e)}function i(e){var t=parseFloat(String(e));return 0<=t&&Math.floor(t)===t&&isFinite(e)}function v(e){return L(e)&&\"function\"==typeof e.then&&\"function\"==typeof e.catch}function t(e){return null==e?\"\":Array.isArray(e)||c(e)&&e.toString===n?JSON.stringify(e,null,2):String(e)}function I(e){var t=parseFloat(e);return isNaN(t)?e:t}function a(e,t){for(var n=Object.create(null),r=e.split(\",\"),i=0;i<r.length;i++)n[r[i]]=!0;return t?function(e){return n[e.toLowerCase()]}:function(e){return n[e]}}var u=a(\"slot,component\",!0),f=a(\"key,ref,slot,slot-scope,is\");function h(e,t){if(e.length){t=e.indexOf(t);if(-1<t)return e.splice(t,1)}}var r=Object.prototype.hasOwnProperty;function p(e,t){return r.call(e,t)}function e(t){var n=Object.create(null);return function(e){return n[e]||(n[e]=t(e))}}var o=/-(\\w)/g,m=e(function(e){return e.replace(o,function(e,t){return t?t.toUpperCase():\"\"})}),s=e(function(e){return e.charAt(0).toUpperCase()+e.slice(1)}),y=/\\B([A-Z])/g,g=e(function(e){return e.replace(y,\"-$1\").toLowerCase()}),_=Function.prototype.bind?function(e,t){return e.bind(t)}:function(n,r){function e(e){var t=arguments.length;return t?1<t?n.apply(r,arguments):n.call(r,e):n.call(r)}return e._length=n.length,e};function b(e,t){for(var n=e.length-(t=t||0),r=new Array(n);n--;)r[n]=e[n+t];return r}function $(e,t){for(var n in t)e[n]=t[n];return e}function w(e){for(var t={},n=0;n<e.length;n++)e[n]&&$(t,e[n]);return t}function C(e,t,n){}function x(e,t,n){return!1}var k=function(e){return e};function A(t,n){if(t===n)return!0;var e=M(t),r=M(n);if(!e||!r)return!e&&!r&&String(t)===String(n);try{var i=Array.isArray(t),o=Array.isArray(n);if(i&&o)return t.length===n.length&&t.every(function(e,t){return A(e,n[t])});if(t instanceof Date&&n instanceof Date)return t.getTime()===n.getTime();if(i||o)return!1;var a=Object.keys(t),s=Object.keys(n);return a.length===s.length&&a.every(function(e){return A(t[e],n[e])})}catch(t){return!1}}function S(e,t){for(var n=0;n<e.length;n++)if(A(e[n],t))return n;return-1}function F(e){var t=!1;return function(){t||(t=!0,e.apply(this,arguments))}}var T=\"data-server-rendered\",E=[\"component\",\"directive\",\"filter\"],N=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\",\"errorCaptured\",\"serverPrefetch\"],j={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:x,isReservedAttr:x,isUnknownElement:x,getTagNamespace:C,parsePlatformTagName:k,mustUseProp:x,async:!0,_lifecycleHooks:N},P=/a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;function R(e,t,n,r){Object.defineProperty(e,t,{value:n,enumerable:!!r,writable:!0,configurable:!0})}var H,B=new RegExp(\"[^\"+P.source+\".$_\\\\d]\"),U=\"__proto__\"in{},z=\"undefined\"!=typeof window,V=\"undefined\"!=typeof WXEnvironment&&!!WXEnvironment.platform,K=V&&WXEnvironment.platform.toLowerCase(),J=z&&window.navigator.userAgent.toLowerCase(),q=J&&/msie|trident/.test(J),W=J&&0<J.indexOf(\"msie 9.0\"),Z=J&&0<J.indexOf(\"edge/\"),G=(J&&J.indexOf(\"android\"),J&&/iphone|ipad|ipod|ios/.test(J)||\"ios\"===K),X=(J&&/chrome\\/\\d+/.test(J),J&&/phantomjs/.test(J),J&&J.match(/firefox\\/(\\d+)/)),Y={}.watch,Q=!1;if(z)try{var ee={};Object.defineProperty(ee,\"passive\",{get:function(){Q=!0}}),window.addEventListener(\"test-passive\",null,ee)}catch(d){}var te=function(){return H=void 0===H?!z&&!V&&\"undefined\"!=typeof global&&global.process&&\"server\"===global.process.env.VUE_ENV:H},ne=z&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function re(e){return\"function\"==typeof e&&/native code/.test(e.toString())}var ie=\"undefined\"!=typeof Symbol&&re(Symbol)&&\"undefined\"!=typeof Reflect&&re(Reflect.ownKeys);function oe(){this.set=Object.create(null)}var ae=\"undefined\"!=typeof Set&&re(Set)?Set:(oe.prototype.has=function(e){return!0===this.set[e]},oe.prototype.add=function(e){this.set[e]=!0},oe.prototype.clear=function(){this.set=Object.create(null)},oe),se=C,ce=0,le=function(){this.id=ce++,this.subs=[]};le.prototype.addSub=function(e){this.subs.push(e)},le.prototype.removeSub=function(e){h(this.subs,e)},le.prototype.depend=function(){le.target&&le.target.addDep(this)},le.prototype.notify=function(){for(var e=this.subs.slice(),t=0,n=e.length;t<n;t++)e[t].update()},le.target=null;var ue=[];function fe(e){ue.push(e),le.target=e}function pe(){ue.pop(),le.target=ue[ue.length-1]}var de=function(e,t,n,r,i,o,a,s){this.tag=e,this.data=t,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=t&&t.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=s,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1},ve={child:{configurable:!0}};ve.child.get=function(){return this.componentInstance},Object.defineProperties(de.prototype,ve);var he=function(e){void 0===e&&(e=\"\");var t=new de;return t.text=e,t.isComment=!0,t};function me(e){return new de(void 0,void 0,void 0,String(e))}function ye(e){var t=new de(e.tag,e.data,e.children&&e.children.slice(),e.text,e.elm,e.context,e.componentOptions,e.asyncFactory);return t.ns=e.ns,t.isStatic=e.isStatic,t.key=e.key,t.isComment=e.isComment,t.fnContext=e.fnContext,t.fnOptions=e.fnOptions,t.fnScopeId=e.fnScopeId,t.asyncMeta=e.asyncMeta,t.isCloned=!0,t}var ge=Array.prototype,_e=Object.create(ge);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(o){var a=ge[o];R(_e,o,function(){for(var e=[],t=arguments.length;t--;)e[t]=arguments[t];var n,r=a.apply(this,e),i=this.__ob__;switch(o){case\"push\":case\"unshift\":n=e;break;case\"splice\":n=e.slice(2)}return n&&i.observeArray(n),i.dep.notify(),r})});var be=Object.getOwnPropertyNames(_e),$e=!0;function we(e){$e=e}var Ce=function(e){this.value=e,this.dep=new le,this.vmCount=0,R(e,\"__ob__\",this),Array.isArray(e)?(U?e.__proto__=_e:function(e,t,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];R(e,o,t[o])}}(e,_e,be),this.observeArray(e)):this.walk(e)};function xe(e,t){var n;if(M(e)&&!(e instanceof de))return p(e,\"__ob__\")&&e.__ob__ instanceof Ce?n=e.__ob__:$e&&!te()&&(Array.isArray(e)||c(e))&&Object.isExtensible(e)&&!e._isVue&&(n=new Ce(e)),t&&n&&n.vmCount++,n}function ke(n,e,r,t,i){var o,a,s,c=new le,l=Object.getOwnPropertyDescriptor(n,e);l&&!1===l.configurable||(o=l&&l.get,a=l&&l.set,o&&!a||2!==arguments.length||(r=n[e]),s=!i&&xe(r),Object.defineProperty(n,e,{enumerable:!0,configurable:!0,get:function(){var e=o?o.call(n):r;return le.target&&(c.depend(),s&&(s.dep.depend(),Array.isArray(e)&&function e(t){for(var n=void 0,r=0,i=t.length;r<i;r++)(n=t[r])&&n.__ob__&&n.__ob__.dep.depend(),Array.isArray(n)&&e(n)}(e))),e},set:function(e){var t=o?o.call(n):r;e===t||e!=e&&t!=t||o&&!a||(a?a.call(n,e):r=e,s=!i&&xe(e),c.notify())}}))}function Ae(e,t,n){if(Array.isArray(e)&&i(t))return e.length=Math.max(e.length,t),e.splice(t,1,n),n;if(t in e&&!(t in Object.prototype))return e[t]=n;var r=e.__ob__;return e._isVue||r&&r.vmCount||(r?(ke(r.value,t,n),r.dep.notify()):e[t]=n),n}function Oe(e,t){var n;Array.isArray(e)&&i(t)?e.splice(t,1):(n=e.__ob__,e._isVue||n&&n.vmCount||p(e,t)&&(delete e[t],n&&n.dep.notify()))}Ce.prototype.walk=function(e){for(var t=Object.keys(e),n=0;n<t.length;n++)ke(e,t[n])},Ce.prototype.observeArray=function(e){for(var t=0,n=e.length;t<n;t++)xe(e[t])};var Se=j.optionMergeStrategies;function Te(e,t){if(!t)return e;for(var n,r,i,o=ie?Reflect.ownKeys(t):Object.keys(t),a=0;a<o.length;a++)\"__ob__\"!==(n=o[a])&&(r=e[n],i=t[n],p(e,n)?r!==i&&c(r)&&c(i)&&Te(r,i):Ae(e,n,i));return e}function Ee(n,r,i){return i?function(){var e=\"function\"==typeof r?r.call(i,i):r,t=\"function\"==typeof n?n.call(i,i):n;return e?Te(e,t):t}:r?n?function(){return Te(\"function\"==typeof r?r.call(this,this):r,\"function\"==typeof n?n.call(this,this):n)}:r:n}function Ne(e,t){e=t?e?e.concat(t):Array.isArray(t)?t:[t]:e;return e&&function(e){for(var t=[],n=0;n<e.length;n++)-1===t.indexOf(e[n])&&t.push(e[n]);return t}(e)}function je(e,t,n,r){e=Object.create(e||null);return t?$(e,t):e}Se.data=function(e,t,n){return n?Ee(e,t,n):t&&\"function\"!=typeof t?e:Ee(e,t)},N.forEach(function(e){Se[e]=Ne}),E.forEach(function(e){Se[e+\"s\"]=je}),Se.watch=function(e,t,n,r){if(e===Y&&(e=void 0),!(t=t===Y?void 0:t))return Object.create(e||null);if(!e)return t;var i,o={};for(i in $(o,e),t){var a=o[i],s=t[i];a&&!Array.isArray(a)&&(a=[a]),o[i]=a?a.concat(s):Array.isArray(s)?s:[s]}return o},Se.props=Se.methods=Se.inject=Se.computed=function(e,t,n,r){if(!e)return t;var i=Object.create(null);return $(i,e),t&&$(i,t),i},Se.provide=Ee;var De=function(e,t){return void 0===t?e:t};function Le(n,r,i){if(function(e){var t=e.props;if(t){var n,r,i={};if(Array.isArray(t))for(n=t.length;n--;)\"string\"==typeof(r=t[n])&&(i[m(r)]={type:null});else if(c(t))for(var o in t)r=t[o],i[m(o)]=c(r)?r:{type:r};e.props=i}}(r=\"function\"==typeof r?r.options:r),function(e){var t=e.inject;if(t){var n=e.inject={};if(Array.isArray(t))for(var r=0;r<t.length;r++)n[t[r]]={from:t[r]};else if(c(t))for(var i in t){var o=t[i];n[i]=c(o)?$({from:i},o):{from:o}}}}(r),function(){var e=r.directives;if(e)for(var t in e){var n=e[t];\"function\"==typeof n&&(e[t]={bind:n,update:n})}}(),!r._base&&(r.extends&&(n=Le(n,r.extends,i)),r.mixins))for(var e=0,t=r.mixins.length;e<t;e++)n=Le(n,r.mixins[e],i);var o,a={};for(o in n)s(o);for(o in r)p(n,o)||s(o);function s(e){var t=Se[e]||De;a[e]=t(n[e],r[e],i,e)}return a}function Me(e,t,n){if(\"string\"==typeof n){var r=e[t];if(p(r,n))return r[n];e=m(n);if(p(r,e))return r[e];t=s(e);return!p(r,t)&&(r[n]||r[e])||r[t]}}function Ie(e,t,n,r){var i=t[e],o=!p(n,e),t=n[e],n=Re(Boolean,i.type);return-1<n&&(o&&!p(i,\"default\")?t=!1:\"\"!==t&&t!==g(e)||((o=Re(String,i.type))<0||n<o)&&(t=!0)),void 0===t&&(t=function(e,t,n){if(p(t,\"default\")){var r=t.default;return e&&e.$options.propsData&&void 0===e.$options.propsData[n]&&void 0!==e._props[n]?e._props[n]:\"function\"==typeof r&&\"Function\"!==Fe(t.type)?r.call(e):r}}(r,i,e),e=$e,we(!0),xe(t),we(e)),t}function Fe(e){e=e&&e.toString().match(/^\\s*function (\\w+)/);return e?e[1]:\"\"}function Pe(e,t){return Fe(e)===Fe(t)}function Re(e,t){if(!Array.isArray(t))return Pe(t,e)?0:-1;for(var n=0,r=t.length;n<r;n++)if(Pe(t[n],e))return n;return-1}function He(e,t,n){fe();try{if(t)for(var r=t;r=r.$parent;){var i=r.$options.errorCaptured;if(i)for(var o=0;o<i.length;o++)try{if(!1===i[o].call(r,e,t,n))return}catch(e){Ue(e,r,\"errorCaptured hook\")}}Ue(e,t,n)}finally{pe()}}function Be(e,t,n,r,i){var o;try{(o=n?e.apply(t,n):e.call(t))&&!o._isVue&&v(o)&&!o._handled&&(o.catch(function(e){return He(e,r,i+\" (Promise/async)\")}),o._handled=!0)}catch(e){He(e,r,i)}return o}function Ue(e,t,n){if(j.errorHandler)try{return j.errorHandler.call(null,e,t,n)}catch(t){t!==e&&ze(t)}ze(e)}function ze(e){if(!z&&!V||\"undefined\"==typeof console)throw e;console.error(e)}var Ve,Ke,Je,qe,We=!1,Ze=[],Ge=!1;function Xe(){Ge=!1;for(var e=Ze.slice(0),t=Ze.length=0;t<e.length;t++)e[t]()}function Ye(e,t){var n;if(Ze.push(function(){if(e)try{e.call(t)}catch(e){He(e,t,\"nextTick\")}else n&&n(t)}),Ge||(Ge=!0,Ke()),!e&&\"undefined\"!=typeof Promise)return new Promise(function(e){n=e})}\"undefined\"!=typeof Promise&&re(Promise)?(Ve=Promise.resolve(),Ke=function(){Ve.then(Xe),G&&setTimeout(C)},We=!0):q||\"undefined\"==typeof MutationObserver||!re(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString()?Ke=\"undefined\"!=typeof setImmediate&&re(setImmediate)?function(){setImmediate(Xe)}:function(){setTimeout(Xe,0)}:(Je=1,Sn=new MutationObserver(Xe),qe=document.createTextNode(String(Je)),Sn.observe(qe,{characterData:!0}),Ke=function(){Je=(Je+1)%2,qe.data=String(Je)},We=!0);var Qe=new ae;function et(e){!function e(t,n){var r,i,o=Array.isArray(t);if(!(!o&&!M(t)||Object.isFrozen(t)||t instanceof de)){if(t.__ob__){var a=t.__ob__.dep.id;if(n.has(a))return;n.add(a)}if(o)for(r=t.length;r--;)e(t[r],n);else for(r=(i=Object.keys(t)).length;r--;)e(t[i[r]],n)}}(e,Qe),Qe.clear()}var tt=e(function(e){var t=\"&\"===e.charAt(0),n=\"~\"===(e=t?e.slice(1):e).charAt(0),r=\"!\"===(e=n?e.slice(1):e).charAt(0);return{name:e=r?e.slice(1):e,once:n,capture:r,passive:t}});function nt(e,i){function o(){var e=arguments,t=o.fns;if(!Array.isArray(t))return Be(t,null,arguments,i,\"v-on handler\");for(var n=t.slice(),r=0;r<n.length;r++)Be(n[r],null,e,i,\"v-on handler\")}return o.fns=e,o}function rt(e,t,n,r,i,o){var a,s,c,l;for(a in e)s=e[a],c=t[a],l=tt(a),D(s)||(D(c)?(D(s.fns)&&(s=e[a]=nt(s,o)),O(l.once)&&(s=e[a]=i(l.name,s,l.capture)),n(l.name,s,l.capture,l.passive,l.params)):s!==c&&(c.fns=s,e[a]=c));for(a in t)D(e[a])&&r((l=tt(a)).name,t[a],l.capture)}function it(e,t,n){var r,i=(e=e instanceof de?e.data.hook||(e.data.hook={}):e)[t];function o(){n.apply(this,arguments),h(r.fns,o)}D(i)?r=nt([o]):L(i.fns)&&O(i.merged)?(r=i).fns.push(o):r=nt([i,o]),r.merged=!0,e[t]=r}function ot(e,t,n,r,i){if(L(t)){if(p(t,n))return e[n]=t[n],i||delete t[n],1;if(p(t,r))return e[n]=t[r],i||delete t[r],1}}function at(e){return l(e)?[me(e)]:Array.isArray(e)?function e(t,n){for(var r,i,o,a=[],s=0;s<t.length;s++)D(r=t[s])||\"boolean\"==typeof r||(o=a[i=a.length-1],Array.isArray(r)?0<r.length&&(st((r=e(r,(n||\"\")+\"_\"+s))[0])&&st(o)&&(a[i]=me(o.text+r[0].text),r.shift()),a.push.apply(a,r)):l(r)?st(o)?a[i]=me(o.text+r):\"\"!==r&&a.push(me(r)):st(r)&&st(o)?a[i]=me(o.text+r.text):(O(t._isVList)&&L(r.tag)&&D(r.key)&&L(n)&&(r.key=\"__vlist\"+n+\"_\"+s+\"__\"),a.push(r)));return a}(e):void 0}function st(e){return L(e)&&L(e.text)&&!1===e.isComment}function ct(e,t){if(e){for(var n=Object.create(null),r=ie?Reflect.ownKeys(e):Object.keys(e),i=0;i<r.length;i++){var o=r[i];if(\"__ob__\"!==o){for(var a,s=e[o].from,c=t;c;){if(c._provided&&p(c._provided,s)){n[o]=c._provided[s];break}c=c.$parent}!c&&\"default\"in e[o]&&(a=e[o].default,n[o]=\"function\"==typeof a?a.call(t):a)}}return n}}function lt(e,t){if(!e||!e.length)return{};for(var n,r={},i=0,o=e.length;i<o;i++){var a=e[i],s=a.data;s&&s.attrs&&s.attrs.slot&&delete s.attrs.slot,a.context!==t&&a.fnContext!==t||!s||null==s.slot?(r.default||(r.default=[])).push(a):(s=r[s=s.slot]||(r[s]=[]),\"template\"===a.tag?s.push.apply(s,a.children||[]):s.push(a))}for(n in r)r[n].every(ut)&&delete r[n];return r}function ut(e){return e.isComment&&!e.asyncFactory||\" \"===e.text}function ft(e,t,n){var r,i,o=0<Object.keys(t).length,a=e?!!e.$stable:!o,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&n&&n!==d&&s===n.$key&&!o&&!n.$hasNormal)return n;for(var c in r={},e)e[c]&&\"$\"!==c[0]&&(r[c]=function(e,t,n){function r(){var e=arguments.length?n.apply(null,arguments):n({});return(e=e&&\"object\"==typeof e&&!Array.isArray(e)?[e]:at(e))&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e}return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}(t,c,e[c]))}else r={};for(i in t)i in r||(r[i]=function(e,t){return function(){return e[t]}}(t,i));return e&&Object.isExtensible(e)&&(e._normalized=r),R(r,\"$stable\",a),R(r,\"$key\",s),R(r,\"$hasNormal\",o),r}function pt(e,t){var n,r,i,o;if(Array.isArray(e)||\"string\"==typeof e)for(a=new Array(e.length),n=0,r=e.length;n<r;n++)a[n]=t(e[n],n);else if(\"number\"==typeof e)for(a=new Array(e),n=0;n<e;n++)a[n]=t(n+1,n);else if(M(e))if(ie&&e[Symbol.iterator])for(var a=[],s=e[Symbol.iterator](),c=s.next();!c.done;)a.push(t(c.value,a.length)),c=s.next();else for(i=Object.keys(e),a=new Array(i.length),n=0,r=i.length;n<r;n++)o=i[n],a[n]=t(e[o],o,n);return(a=!L(a)?[]:a)._isVList=!0,a}function dt(e,t,n,r){var i=this.$scopedSlots[e],t=i?(n=n||{},i(n=r?$($({},r),n):n)||t):this.$slots[e]||t,n=n&&n.slot;return n?this.$createElement(\"template\",{slot:n},t):t}function vt(e){return Me(this.$options,\"filters\",e)||k}function ht(e,t){return Array.isArray(e)?-1===e.indexOf(t):e!==t}function mt(e,t,n,r,i){n=j.keyCodes[t]||n;return i&&r&&!j.keyCodes[t]?ht(i,r):n?ht(n,e):r?g(r)!==t:void 0}function yt(r,i,o,a,s){if(o&&M(o)){var c,e;for(e in o=Array.isArray(o)?w(o):o)!function(t){c=\"class\"===t||\"style\"===t||f(t)?r:(n=r.attrs&&r.attrs.type,a||j.mustUseProp(i,n,t)?r.domProps||(r.domProps={}):r.attrs||(r.attrs={}));var e=m(t),n=g(t);e in c||n in c||(c[t]=o[t],s&&((r.on||(r.on={}))[\"update:\"+t]=function(e){o[t]=e}))}(e)}return r}function gt(e,t){var n=this._staticTrees||(this._staticTrees=[]),r=n[e];return r&&!t||bt(r=n[e]=this.$options.staticRenderFns[e].call(this._renderProxy,null,this),\"__static__\"+e,!1),r}function _t(e,t,n){return bt(e,\"__once__\"+t+(n?\"_\"+n:\"\"),!0),e}function bt(e,t,n){if(Array.isArray(e))for(var r=0;r<e.length;r++)e[r]&&\"string\"!=typeof e[r]&&$t(e[r],t+\"_\"+r,n);else $t(e,t,n)}function $t(e,t,n){e.isStatic=!0,e.key=t,e.isOnce=n}function wt(e,t){if(t&&c(t)){var n,r=e.on=e.on?$({},e.on):{};for(n in t){var i=r[n],o=t[n];r[n]=i?[].concat(i,o):o}}return e}function Ct(e,t,n,r){t=t||{$stable:!n};for(var i=0;i<e.length;i++){var o=e[i];Array.isArray(o)?Ct(o,t,n):o&&(o.proxy&&(o.fn.proxy=!0),t[o.key]=o.fn)}return r&&(t.$key=r),t}function xt(e,t){for(var n=0;n<t.length;n+=2){var r=t[n];\"string\"==typeof r&&r&&(e[t[n]]=t[n+1])}return e}function kt(e,t){return\"string\"==typeof e?t+e:e}function At(e){e._o=_t,e._n=I,e._s=t,e._l=pt,e._t=dt,e._q=A,e._i=S,e._m=gt,e._f=vt,e._k=mt,e._b=yt,e._v=me,e._e=he,e._u=Ct,e._g=wt,e._d=xt,e._p=kt}function Ot(e,t,n,i,r){var o,a=this,s=r.options;p(i,\"_uid\")?(o=Object.create(i))._original=i:i=(o=i)._original;var r=O(s._compiled),c=!r;this.data=e,this.props=t,this.children=n,this.parent=i,this.listeners=e.on||d,this.injections=ct(s.inject,i),this.slots=function(){return a.$slots||ft(e.scopedSlots,a.$slots=lt(n,i)),a.$slots},Object.defineProperty(this,\"scopedSlots\",{enumerable:!0,get:function(){return ft(e.scopedSlots,this.slots())}}),r&&(this.$options=s,this.$slots=this.slots(),this.$scopedSlots=ft(e.scopedSlots,this.$slots)),s._scopeId?this._c=function(e,t,n,r){r=Mt(o,e,t,n,r,c);return r&&!Array.isArray(r)&&(r.fnScopeId=s._scopeId,r.fnContext=i),r}:this._c=function(e,t,n,r){return Mt(o,e,t,n,r,c)}}function St(e,t,n,r){e=ye(e);return e.fnContext=n,e.fnOptions=r,t.slot&&((e.data||(e.data={})).slot=t.slot),e}function Tt(e,t){for(var n in t)e[m(n)]=t[n]}At(Ot.prototype);var Et={init:function(e,t){var n,r,i;e.componentInstance&&!e.componentInstance._isDestroyed&&e.data.keepAlive?Et.prepatch(e,e):(e.componentInstance=(r={_isComponent:!0,_parentVnode:n=e,parent:Kt},L(i=n.data.inlineTemplate)&&(r.render=i.render,r.staticRenderFns=i.staticRenderFns),new n.componentOptions.Ctor(r))).$mount(t?e.elm:void 0,t)},prepatch:function(e,t){var n=t.componentOptions;!function(e,t,n,r,i){var o=r.data.scopedSlots,a=e.$scopedSlots,a=!!(o&&!o.$stable||a!==d&&!a.$stable||o&&e.$scopedSlots.$key!==o.$key),o=!!(i||e.$options._renderChildren||a);if(e.$options._parentVnode=r,e.$vnode=r,e._vnode&&(e._vnode.parent=r),e.$options._renderChildren=i,e.$attrs=r.data.attrs||d,e.$listeners=n||d,t&&e.$options.props){we(!1);for(var s=e._props,c=e.$options._propKeys||[],l=0;l<c.length;l++){var u=c[l],f=e.$options.props;s[u]=Ie(u,f,t,e)}we(!0),e.$options.propsData=t}n=n||d;a=e.$options._parentListeners;e.$options._parentListeners=n,Vt(e,n,a),o&&(e.$slots=lt(i,r.context),e.$forceUpdate())}(t.componentInstance=e.componentInstance,n.propsData,n.listeners,t,n.children)},insert:function(e){var t=e.context,n=e.componentInstance;n._isMounted||(n._isMounted=!0,Zt(n,\"mounted\")),e.data.keepAlive&&(t._isMounted?(n._inactive=!1,Yt.push(n)):Wt(n,!0))},destroy:function(e){var t=e.componentInstance;t._isDestroyed||(e.data.keepAlive?function e(t,n){if(!(n&&(t._directInactive=!0,qt(t))||t._inactive)){t._inactive=!0;for(var r=0;r<t.$children.length;r++)e(t.$children[r]);Zt(t,\"deactivated\")}}(t,!0):t.$destroy())}},Nt=Object.keys(Et);function jt(s,e,t,n,r){if(!D(s)){var i,o=t.$options._base;if(\"function\"==typeof(s=M(s)?o.extend(s):s)){if(D(s.cid)&&void 0===(s=function(t,n){if(O(t.error)&&L(t.errorComp))return t.errorComp;if(L(t.resolved))return t.resolved;var e=Ft;if(e&&L(t.owners)&&-1===t.owners.indexOf(e)&&t.owners.push(e),O(t.loading)&&L(t.loadingComp))return t.loadingComp;if(e&&!L(t.owners)){var r=t.owners=[e],i=!0,o=null,a=null;e.$on(\"hook:destroyed\",function(){return h(r,e)});var s=function(e){for(var t=0,n=r.length;t<n;t++)r[t].$forceUpdate();e&&(r.length=0,null!==o&&(clearTimeout(o),o=null),null!==a&&(clearTimeout(a),a=null))},c=F(function(e){t.resolved=Pt(e,n),i?r.length=0:s(!0)}),l=F(function(e){L(t.errorComp)&&(t.error=!0,s(!0))}),u=t(c,l);return M(u)&&(v(u)?D(t.resolved)&&u.then(c,l):v(u.component)&&(u.component.then(c,l),L(u.error)&&(t.errorComp=Pt(u.error,n)),L(u.loading)&&(t.loadingComp=Pt(u.loading,n),0===u.delay?t.loading=!0:o=setTimeout(function(){o=null,D(t.resolved)&&D(t.error)&&(t.loading=!0,s(!1))},u.delay||200)),L(u.timeout)&&(a=setTimeout(function(){a=null,D(t.resolved)&&l(null)},u.timeout)))),i=!1,t.loading?t.loadingComp:t.resolved}}(i=s,o)))return c=i,l=e,u=t,o=n,f=r,(p=he()).asyncFactory=c,p.asyncMeta={data:l,context:u,children:o,tag:f},p;e=e||{},_n(s),L(e.model)&&function(e,t){var n=e.model&&e.model.prop||\"value\",r=e.model&&e.model.event||\"input\";(t.attrs||(t.attrs={}))[n]=t.model.value;e=t.on||(t.on={}),n=e[r],t=t.model.callback;L(n)?(Array.isArray(n)?-1===n.indexOf(t):n!==t)&&(e[r]=[t].concat(n)):e[r]=t}(s.options,e);f=function(e){var t=s.options.props;if(!D(t)){var n={},r=e.attrs,i=e.props;if(L(r)||L(i))for(var o in t){var a=g(o);ot(n,i,o,a,!0)||ot(n,r,o,a,!1)}return n}}(e);if(O(s.options.functional))return function(e,t,n,r,i){var o=e.options,a={},s=o.props;if(L(s))for(var c in s)a[c]=Ie(c,s,t||d);else L(n.attrs)&&Tt(a,n.attrs),L(n.props)&&Tt(a,n.props);var l=new Ot(n,a,i,r,e),e=o.render.call(null,l._c,l);if(e instanceof de)return St(e,n,l.parent,o);if(Array.isArray(e)){for(var u=at(e)||[],f=new Array(u.length),p=0;p<u.length;p++)f[p]=St(u[p],n,l.parent,o);return f}}(s,f,e,t,n);p=e.on;e.on=e.nativeOn,O(s.options.abstract)&&(a=e.slot,e={},a&&(e.slot=a)),function(e){for(var t=e.hook||(e.hook={}),n=0;n<Nt.length;n++){var r=Nt[n],i=t[r],o=Et[r];i===o||i&&i._merged||(t[r]=i?function(n,r){function e(e,t){n(e,t),r(e,t)}return e._merged=!0,e}(o,i):o)}}(e);var a=s.options.name||r;return new de(\"vue-component-\"+s.cid+(a?\"-\"+a:\"\"),e,void 0,void 0,void 0,t,{Ctor:s,propsData:f,listeners:p,tag:r,children:n},i)}}var c,l,u,f,p}var Dt=1,Lt=2;function Mt(e,t,n,r,i,o){return(Array.isArray(n)||l(n))&&(i=r,r=n,n=void 0),O(o)&&(i=Lt),e=e,t=t,r=r,i=i,(!L(n=n)||!L(n.__ob__))&&(t=L(n)&&L(n.is)?n.is:t)?(Array.isArray(r)&&\"function\"==typeof r[0]&&((n=n||{}).scopedSlots={default:r[0]},r.length=0),i===Lt?r=at(r):i===Dt&&(r=function(e){for(var t=0;t<e.length;t++)if(Array.isArray(e[t]))return Array.prototype.concat.apply([],e);return e}(r)),r=\"string\"==typeof t?(s=e.$vnode&&e.$vnode.ns||j.getTagNamespace(t),j.isReservedTag(t)?new de(j.parsePlatformTagName(t),n,r,void 0,void 0,e):n&&n.pre||!L(a=Me(e.$options,\"components\",t))?new de(t,n,r,void 0,void 0,e):jt(a,n,e,r,t)):jt(t,n,e,r),Array.isArray(r)?r:L(r)?(L(s)&&function e(t,n,r){if(t.ns=n,\"foreignObject\"===t.tag&&(r=!(n=void 0)),L(t.children))for(var i=0,o=t.children.length;i<o;i++){var a=t.children[i];L(a.tag)&&(D(a.ns)||O(r)&&\"svg\"!==a.tag)&&e(a,n,r)}}(r,s),L(n)&&(M((n=n).style)&&et(n.style),M(n.class)&&et(n.class)),r):he()):he();var a,s}var It,Ft=null;function Pt(e,t){return M(e=e.__esModule||ie&&\"Module\"===e[Symbol.toStringTag]?e.default:e)?t.extend(e):e}function Rt(e){return e.isComment&&e.asyncFactory}function Ht(e){if(Array.isArray(e))for(var t=0;t<e.length;t++){var n=e[t];if(L(n)&&(L(n.componentOptions)||Rt(n)))return n}}function Bt(e,t){It.$on(e,t)}function Ut(e,t){It.$off(e,t)}function zt(t,n){var r=It;return function e(){null!==n.apply(null,arguments)&&r.$off(t,e)}}function Vt(e,t,n){rt(t,n||{},Bt,Ut,zt,It=e),It=void 0}var Kt=null;function Jt(e){var t=Kt;return Kt=e,function(){Kt=t}}function qt(e){for(;e=e&&e.$parent;)if(e._inactive)return 1}function Wt(e,t){if(t){if(e._directInactive=!1,qt(e))return}else if(e._directInactive)return;if(e._inactive||null===e._inactive){e._inactive=!1;for(var n=0;n<e.$children.length;n++)Wt(e.$children[n]);Zt(e,\"activated\")}}function Zt(e,t){fe();var n=e.$options[t],r=t+\" hook\";if(n)for(var i=0,o=n.length;i<o;i++)Be(n[i],e,null,e,r);e._hasHookEvent&&e.$emit(\"hook:\"+t),pe()}var Gt,Xt=[],Yt=[],Qt={},en=!1,tn=!1,nn=0,rn=0,on=Date.now;function an(){var e,t;for(rn=on(),tn=!0,Xt.sort(function(e,t){return e.id-t.id}),nn=0;nn<Xt.length;nn++)(e=Xt[nn]).before&&e.before(),t=e.id,Qt[t]=null,e.run();var n=Yt.slice(),r=Xt.slice();nn=Xt.length=Yt.length=0,en=tn=!(Qt={}),function(e){for(var t=0;t<e.length;t++)e[t]._inactive=!0,Wt(e[t],!0)}(n),function(e){for(var t=e.length;t--;){var n=e[t],r=n.vm;r._watcher===n&&r._isMounted&&!r._isDestroyed&&Zt(r,\"updated\")}}(r),ne&&j.devtools&&ne.emit(\"flush\")}!z||q||(Gt=window.performance)&&\"function\"==typeof Gt.now&&on()>document.createEvent(\"Event\").timeStamp&&(on=function(){return Gt.now()});function sn(e,t,n,r,i){this.vm=e,i&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++cn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new ae,this.newDepIds=new ae,this.expression=\"\",\"function\"==typeof t?this.getter=t:(this.getter=function(e){if(!B.test(e)){var n=e.split(\".\");return function(e){for(var t=0;t<n.length;t++){if(!e)return;e=e[n[t]]}return e}}}(t),this.getter||(this.getter=C)),this.value=this.lazy?void 0:this.get()}var cn=0;sn.prototype.get=function(){var e;fe(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(e){if(!this.user)throw e;He(e,t,'getter for watcher \"'+this.expression+'\"')}finally{this.deep&&et(e),pe(),this.cleanupDeps()}return e},sn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},sn.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},sn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():function(e){var t=e.id;if(null==Qt[t]){if(Qt[t]=!0,tn){for(var n=Xt.length-1;nn<n&&Xt[n].id>e.id;)n--;Xt.splice(n+1,0,e)}else Xt.push(e);en||(en=!0,Ye(an))}}(this)},sn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||M(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(e){He(e,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,e,t)}}},sn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},sn.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},sn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||h(this.vm._watchers,this);for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1}};var ln={enumerable:!0,configurable:!0,get:C,set:C};function un(e,t,n){ln.get=function(){return this[t][n]},ln.set=function(e){this[t][n]=e},Object.defineProperty(e,n,ln)}function fn(e){e._watchers=[];var t=e.$options;t.props&&function(n,r){var i=n.$options.propsData||{},o=n._props={},a=n.$options._propKeys=[];n.$parent&&we(!1);for(var e in r)!function(e){a.push(e);var t=Ie(e,r,i,n);ke(o,e,t),e in n||un(n,\"_props\",e)}(e);we(!0)}(e,t.props),t.methods&&function(e,t){for(var n in e.$options.props,t)e[n]=\"function\"!=typeof t[n]?C:_(t[n],e)}(e,t.methods),t.data?function(e){var t=e.$options.data;c(t=e._data=\"function\"==typeof t?function(e,t){fe();try{return e.call(t,t)}catch(e){return He(e,t,\"data()\"),{}}finally{pe()}}(t,e):t||{})||(t={});for(var n,r=Object.keys(t),i=e.$options.props,o=(e.$options.methods,r.length);o--;){var a=r[o];i&&p(i,a)||36!==(n=(a+\"\").charCodeAt(0))&&95!==n&&un(e,\"_data\",a)}xe(t,!0)}(e):xe(e._data={},!0),t.computed&&function(e,t){var n,r=e._computedWatchers=Object.create(null),i=te();for(n in t){var o=t[n],a=\"function\"==typeof o?o:o.get;i||(r[n]=new sn(e,a||C,C,pn)),n in e||dn(e,n,o)}}(e,t.computed),t.watch&&t.watch!==Y&&function(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)mn(e,n,r[i]);else mn(e,n,r)}}(e,t.watch)}var pn={lazy:!0};function dn(e,t,n){var r=!te();\"function\"==typeof n?(ln.get=r?vn(t):hn(n),ln.set=C):(ln.get=n.get?r&&!1!==n.cache?vn(t):hn(n.get):C,ln.set=n.set||C),Object.defineProperty(e,t,ln)}function vn(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),le.target&&e.depend(),e.value}}function hn(e){return function(){return e.call(this,this)}}function mn(e,t,n,r){return\"string\"==typeof(n=c(n)?(r=n).handler:n)&&(n=e[n]),e.$watch(t,n,r)}var yn,gn=0;function _n(i){var e,t,n=i.options;return!i.super||(e=_n(i.super))!==i.superOptions&&(i.superOptions=e,(t=function(){var e,t,n=i.options,r=i.sealedOptions;for(t in n)n[t]!==r[t]&&(e=e||{},e[t]=n[t]);return e}())&&$(i.extendOptions,t),(n=i.options=Le(e,i.extendOptions)).name&&(n.components[n.name]=i)),n}function bn(e){this._init(e)}function $n(e){e.cid=0;var a=1;e.extend=function(e){var t=this,n=t.cid,r=(e=e||{})._Ctor||(e._Ctor={});if(r[n])return r[n];function i(e){this._init(e)}var o=e.name||t.options.name;return((i.prototype=Object.create(t.prototype)).constructor=i).cid=a++,i.options=Le(t.options,e),i.super=t,i.options.props&&function(e){for(var t in e.options.props)un(e.prototype,\"_props\",t)}(i),i.options.computed&&function(e){var t,n=e.options.computed;for(t in n)dn(e.prototype,t,n[t])}(i),i.extend=t.extend,i.mixin=t.mixin,i.use=t.use,E.forEach(function(e){i[e]=t[e]}),o&&(i.options.components[o]=i),i.superOptions=t.options,i.extendOptions=e,i.sealedOptions=$({},i.options),r[n]=i}}function wn(e){return e&&(e.Ctor.options.name||e.tag)}function Cn(e,t){return Array.isArray(e)?-1<e.indexOf(t):\"string\"==typeof e?-1<e.split(\",\").indexOf(t):\"[object RegExp]\"===n.call(e)&&e.test(t)}function xn(e,t){var n,r=e.cache,i=e.keys,o=e._vnode;for(n in r){var a=r[n];!a||(a=wn(a.componentOptions))&&!t(a)&&kn(r,n,i,o)}}function kn(e,t,n,r){var i=e[t];!i||r&&i.tag===r.tag||i.componentInstance.$destroy(),e[t]=null,h(n,t)}bn.prototype._init=function(e){var t,n,r,i=this;i._uid=gn++,i._isVue=!0,e&&e._isComponent?function(e,t){var n=e.$options=Object.create(e.constructor.options),e=t._parentVnode;n.parent=t.parent;e=(n._parentVnode=e).componentOptions;n.propsData=e.propsData,n._parentListeners=e.listeners,n._renderChildren=e.children,n._componentTag=e.tag,t.render&&(n.render=t.render,n.staticRenderFns=t.staticRenderFns)}(i,e):i.$options=Le(_n(i.constructor),e||{},i),function(e){var t=e.$options,n=t.parent;if(n&&!t.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(e)}e.$parent=n,e.$root=n?n.$root:e,e.$children=[],e.$refs={},e._watcher=null,e._inactive=null,e._directInactive=!1,e._isMounted=!1,e._isDestroyed=!1,e._isBeingDestroyed=!1}((i._renderProxy=i)._self=i),function(e){e._events=Object.create(null),e._hasHookEvent=!1;var t=e.$options._parentListeners;t&&Vt(e,t)}(i),function(i){i._vnode=null,i._staticTrees=null;var e=i.$options,t=i.$vnode=e._parentVnode,n=t&&t.context;i.$slots=lt(e._renderChildren,n),i.$scopedSlots=d,i._c=function(e,t,n,r){return Mt(i,e,t,n,r,!1)},i.$createElement=function(e,t,n,r){return Mt(i,e,t,n,r,!0)};t=t&&t.data;ke(i,\"$attrs\",t&&t.attrs||d,null,!0),ke(i,\"$listeners\",e._parentListeners||d,null,!0)}(i),Zt(i,\"beforeCreate\"),(r=ct((n=i).$options.inject,n))&&(we(!1),Object.keys(r).forEach(function(e){ke(n,e,r[e])}),we(!0)),fn(i),(e=(t=i).$options.provide)&&(t._provided=\"function\"==typeof e?e.call(t):e),Zt(i,\"created\"),i.$options.el&&i.$mount(i.$options.el)},Qn=bn,Object.defineProperty(Qn.prototype,\"$data\",{get:function(){return this._data}}),Object.defineProperty(Qn.prototype,\"$props\",{get:function(){return this._props}}),Qn.prototype.$set=Ae,Qn.prototype.$delete=Oe,Qn.prototype.$watch=function(e,t,n){if(c(t))return mn(this,e,t,n);(n=n||{}).user=!0;var r=new sn(this,e,t,n);if(n.immediate)try{t.call(this,r.value)}catch(e){He(e,this,'callback for immediate watcher \"'+r.expression+'\"')}return function(){r.teardown()}},yn=/^hook:/,(K=bn).prototype.$on=function(e,t){var n=this;if(Array.isArray(e))for(var r=0,i=e.length;r<i;r++)n.$on(e[r],t);else(n._events[e]||(n._events[e]=[])).push(t),yn.test(e)&&(n._hasHookEvent=!0);return n},K.prototype.$once=function(e,t){var n=this;function r(){n.$off(e,r),t.apply(n,arguments)}return r.fn=t,n.$on(e,r),n},K.prototype.$off=function(e,t){var n=this;if(!arguments.length)return n._events=Object.create(null),n;if(Array.isArray(e)){for(var r=0,i=e.length;r<i;r++)n.$off(e[r],t);return n}var o,a=n._events[e];if(!a)return n;if(!t)return n._events[e]=null,n;for(var s=a.length;s--;)if((o=a[s])===t||o.fn===t){a.splice(s,1);break}return n},K.prototype.$emit=function(e){if(t=this._events[e])for(var t=1<t.length?b(t):t,n=b(arguments,1),r='event handler for \"'+e+'\"',i=0,o=t.length;i<o;i++)Be(t[i],this,n,this,r);return this},(J=bn).prototype._update=function(e,t){var n=this,r=n.$el,i=n._vnode,o=Jt(n);n._vnode=e,n.$el=i?n.__patch__(i,e):n.__patch__(n.$el,e,t,!1),o(),r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},J.prototype.$forceUpdate=function(){this._watcher&&this._watcher.update()},J.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){Zt(e,\"beforeDestroy\"),e._isBeingDestroyed=!0;var t=e.$parent;!t||t._isBeingDestroyed||e.$options.abstract||h(t.$children,e),e._watcher&&e._watcher.teardown();for(var n=e._watchers.length;n--;)e._watchers[n].teardown();e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),Zt(e,\"destroyed\"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}},At((ve=bn).prototype),ve.prototype.$nextTick=function(e){return Ye(e,this)},ve.prototype._render=function(){var e,t=this,n=t.$options,r=n.render,i=n._parentVnode;i&&(t.$scopedSlots=ft(i.data.scopedSlots,t.$slots,t.$scopedSlots)),t.$vnode=i;try{Ft=t,e=r.call(t._renderProxy,t.$createElement)}catch(n){He(n,t,\"render\"),e=t._vnode}finally{Ft=null}return(e=!((e=Array.isArray(e)&&1===e.length?e[0]:e)instanceof de)?he():e).parent=i,e};var An,On,N=[String,RegExp,Array],Sn={KeepAlive:{name:\"keep-alive\",abstract:!0,props:{include:N,exclude:N,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)kn(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch(\"include\",function(t){xn(e,function(e){return Cn(t,e)})}),this.$watch(\"exclude\",function(t){xn(e,function(e){return!Cn(t,e)})})},render:function(){var e=this.$slots.default,t=Ht(e),n=t&&t.componentOptions;if(n){var r=wn(n),i=this.include,o=this.exclude;if(i&&(!r||!Cn(i,r))||o&&r&&Cn(o,r))return t;o=this.cache,r=this.keys,n=null==t.key?n.Ctor.cid+(n.tag?\"::\"+n.tag:\"\"):t.key;o[n]?(t.componentInstance=o[n].componentInstance,h(r,n),r.push(n)):(o[n]=t,r.push(n),this.max&&r.length>parseInt(this.max)&&kn(o,r[0],r,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}}};An=bn,Qn={get:function(){return j}},Object.defineProperty(An,\"config\",Qn),An.util={warn:se,extend:$,mergeOptions:Le,defineReactive:ke},An.set=Ae,An.delete=Oe,An.nextTick=Ye,An.observable=function(e){return xe(e),e},An.options=Object.create(null),E.forEach(function(e){An.options[e+\"s\"]=Object.create(null)}),$((An.options._base=An).options.components,Sn),An.use=function(e){var t=this._installedPlugins||(this._installedPlugins=[]);if(-1<t.indexOf(e))return this;var n=b(arguments,1);return n.unshift(this),\"function\"==typeof e.install?e.install.apply(e,n):\"function\"==typeof e&&e.apply(null,n),t.push(e),this},An.mixin=function(e){return this.options=Le(this.options,e),this},$n(An),On=An,E.forEach(function(n){On[n]=function(e,t){return t?(\"component\"===n&&c(t)&&(t.name=t.name||e,t=this.options._base.extend(t)),this.options[n+\"s\"][e]=t=\"directive\"===n&&\"function\"==typeof t?{bind:t,update:t}:t):this.options[n+\"s\"][e]}}),Object.defineProperty(bn.prototype,\"$isServer\",{get:te}),Object.defineProperty(bn.prototype,\"$ssrContext\",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(bn,\"FunctionalRenderContext\",{value:Ot}),bn.version=\"2.6.12\";var K=a(\"style,class\"),Tn=a(\"input,textarea,option,select,progress\"),J=function(e,t,n){return\"value\"===n&&Tn(e)&&\"button\"!==t||\"selected\"===n&&\"option\"===e||\"checked\"===n&&\"input\"===e||\"muted\"===n&&\"video\"===e},En=a(\"contenteditable,draggable,spellcheck\"),Nn=a(\"events,caret,typing,plaintext-only\"),jn=function(e,t){return Fn(t)||\"false\"===t?\"false\":\"contenteditable\"===e&&Nn(t)?t:\"true\"},Dn=a(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),Ln=\"http://www.w3.org/1999/xlink\",Mn=function(e){return\":\"===e.charAt(5)&&\"xlink\"===e.slice(0,5)},In=function(e){return Mn(e)?e.slice(6,e.length):\"\"},Fn=function(e){return null==e||!1===e};function Pn(e,t){return{staticClass:Rn(e.staticClass,t.staticClass),class:L(e.class)?[e.class,t.class]:t.class}}function Rn(e,t){return e?t?e+\" \"+t:e:t||\"\"}function Hn(e){return Array.isArray(e)?function(e){for(var t,n=\"\",r=0,i=e.length;r<i;r++)L(t=Hn(e[r]))&&\"\"!==t&&(n&&(n+=\" \"),n+=t);return n}(e):M(e)?function(e){var t,n=\"\";for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}(e):\"string\"==typeof e?e:\"\"}function Bn(e){return zn(e)||Vn(e)}var Un={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},zn=a(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot\"),Vn=a(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0);function Kn(e){return Vn(e)?\"svg\":\"math\"===e?\"math\":void 0}var Jn=Object.create(null),qn=a(\"text,number,password,search,email,tel,url\");function Wn(e){return\"string\"!=typeof e?e:document.querySelector(e)||document.createElement(\"div\")}ve=Object.freeze({createElement:function(e,t){var n=document.createElement(e);return\"select\"!==e||t.data&&t.data.attrs&&void 0!==t.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n},createElementNS:function(e,t){return document.createElementNS(Un[e],t)},createTextNode:function(e){return document.createTextNode(e)},createComment:function(e){return document.createComment(e)},insertBefore:function(e,t,n){e.insertBefore(t,n)},removeChild:function(e,t){e.removeChild(t)},appendChild:function(e,t){e.appendChild(t)},parentNode:function(e){return e.parentNode},nextSibling:function(e){return e.nextSibling},tagName:function(e){return e.tagName},setTextContent:function(e,t){e.textContent=t},setStyleScope:function(e,t){e.setAttribute(t,\"\")}}),N={create:function(e,t){Zn(t)},update:function(e,t){e.data.ref!==t.data.ref&&(Zn(e,!0),Zn(t))},destroy:function(e){Zn(e,!0)}};function Zn(e,t){var n,r,i=e.data.ref;L(i)&&(r=e.context,n=e.componentInstance||e.elm,r=r.$refs,t?Array.isArray(r[i])?h(r[i],n):r[i]===n&&(r[i]=void 0):e.data.refInFor?Array.isArray(r[i])?r[i].indexOf(n)<0&&r[i].push(n):r[i]=[n]:r[i]=n)}var Gn=new de(\"\",{},[]),Xn=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"];function Yn(n,r){return n.key===r.key&&(n.tag===r.tag&&n.isComment===r.isComment&&L(n.data)===L(r.data)&&function(){if(\"input\"!==n.tag)return 1;var e=L(t=n.data)&&L(t=t.attrs)&&t.type,t=L(t=r.data)&&L(t=t.attrs)&&t.type;return e===t||qn(e)&&qn(t)}()||O(n.isAsyncPlaceholder)&&n.asyncFactory===r.asyncFactory&&D(r.asyncFactory.error))}var Qn={create:er,update:er,destroy:function(e){er(e,Gn)}};function er(e,t){(e.data.directives||t.data.directives)&&function(t,n){var e,r,i,o,a=t===Gn,s=n===Gn,c=nr(t.data.directives,t.context),l=nr(n.data.directives,n.context),u=[],f=[];for(e in l)r=c[e],i=l[e],r?(i.oldValue=r.value,i.oldArg=r.arg,rr(i,\"update\",n,t),i.def&&i.def.componentUpdated&&f.push(i)):(rr(i,\"bind\",n,t),i.def&&i.def.inserted&&u.push(i));if(u.length&&(o=function(){for(var e=0;e<u.length;e++)rr(u[e],\"inserted\",n,t)},a?it(n,\"insert\",o):o()),f.length&&it(n,\"postpatch\",function(){for(var e=0;e<f.length;e++)rr(f[e],\"componentUpdated\",n,t)}),!a)for(e in c)l[e]||rr(c[e],\"unbind\",t,t,s)}(e,t)}var tr=Object.create(null);function nr(e,t){var n,r,i,o=Object.create(null);if(!e)return o;for(n=0;n<e.length;n++)(r=e[n]).modifiers||(r.modifiers=tr),(o[(i=r).rawName||i.name+\".\"+Object.keys(i.modifiers||{}).join(\".\")]=r).def=Me(t.$options,\"directives\",r.name);return o}function rr(e,t,n,r,i){var o=e.def&&e.def[t];if(o)try{o(n.elm,e,n,r,i)}catch(r){He(r,n.context,\"directive \"+e.name+\" \"+t+\" hook\")}}se=[N,Qn];function ir(e,t){var n=t.componentOptions;if(!(L(n)&&!1===n.Ctor.options.inheritAttrs||D(e.data.attrs)&&D(t.data.attrs))){var r,i,o=t.elm,a=e.data.attrs||{},s=t.data.attrs||{};for(r in s=L(s.__ob__)?t.data.attrs=$({},s):s)i=s[r],a[r]!==i&&or(o,r,i);for(r in(q||Z)&&s.value!==a.value&&or(o,\"value\",s.value),a)D(s[r])&&(Mn(r)?o.removeAttributeNS(Ln,In(r)):En(r)||o.removeAttribute(r))}}function or(e,t,n){-1<e.tagName.indexOf(\"-\")?ar(e,t,n):Dn(t)?Fn(n)?e.removeAttribute(t):(n=\"allowfullscreen\"===t&&\"EMBED\"===e.tagName?\"true\":t,e.setAttribute(t,n)):En(t)?e.setAttribute(t,jn(t,n)):Mn(t)?Fn(n)?e.removeAttributeNS(Ln,In(t)):e.setAttributeNS(Ln,t,n):ar(e,t,n)}function ar(t,e,n){var r;Fn(n)?t.removeAttribute(e):(!q||W||\"TEXTAREA\"!==t.tagName||\"placeholder\"!==e||\"\"===n||t.__ieph||(r=function(e){e.stopImmediatePropagation(),t.removeEventListener(\"input\",r)},t.addEventListener(\"input\",r),t.__ieph=!0),t.setAttribute(e,n))}Sn={create:ir,update:ir};function sr(e,t){var n=t.elm,r=t.data,e=e.data;D(r.staticClass)&&D(r.class)&&(D(e)||D(e.staticClass)&&D(e.class))||(e=function(e){for(var t,n=e.data,r=e,i=e;L(i.componentInstance);)(i=i.componentInstance._vnode)&&i.data&&(n=Pn(i.data,n));for(;L(r=r.parent);)r&&r.data&&(n=Pn(n,r.data));return t=n.staticClass,e=n.class,L(t)||L(e)?Rn(t,Hn(e)):\"\"}(t),(e=L(t=n._transitionClasses)?Rn(e,Hn(t)):e)!==n._prevClass&&(n.setAttribute(\"class\",e),n._prevClass=e))}var cr,lr,ur,fr,pr,dr,N={create:sr,update:sr},vr=/[\\w).+\\-_$\\]]/;function hr(e){for(var t,n,r,i,o=!1,a=!1,s=!1,c=!1,l=0,u=0,f=0,p=0,d=0;d<e.length;d++)if(n=t,t=e.charCodeAt(d),o)39===t&&92!==n&&(o=!1);else if(a)34===t&&92!==n&&(a=!1);else if(s)96===t&&92!==n&&(s=!1);else if(c)47===t&&92!==n&&(c=!1);else if(124!==t||124===e.charCodeAt(d+1)||124===e.charCodeAt(d-1)||l||u||f){switch(t){case 34:a=!0;break;case 39:o=!0;break;case 96:s=!0;break;case 40:f++;break;case 41:f--;break;case 91:u++;break;case 93:u--;break;case 123:l++;break;case 125:l--}if(47===t){for(var v=d-1,h=void 0;0<=v&&\" \"===(h=e.charAt(v));v--);h&&vr.test(h)||(c=!0)}}else void 0===r?(p=d+1,r=e.slice(0,d).trim()):m();function m(){(i=i||[]).push(e.slice(p,d).trim()),p=d+1}if(void 0===r?r=e.slice(0,d).trim():0!==p&&m(),i)for(d=0;d<i.length;d++)r=function(e,t){var n=t.indexOf(\"(\");if(n<0)return'_f(\"'+t+'\")('+e+\")\";var r=t.slice(0,n),n=t.slice(n+1);return'_f(\"'+r+'\")('+e+(\")\"!==n?\",\"+n:n)}(r,i[d]);return r}function mr(e,t){console.error(\"[Vue compiler]: \"+e)}function yr(e,t){return e?e.map(function(e){return e[t]}).filter(function(e){return e}):[]}function gr(e,t,n,r,i){(e.props||(e.props=[])).push(Ar({name:t,value:n,dynamic:i},r)),e.plain=!1}function _r(e,t,n,r,i){(i?e.dynamicAttrs||(e.dynamicAttrs=[]):e.attrs||(e.attrs=[])).push(Ar({name:t,value:n,dynamic:i},r)),e.plain=!1}function br(e,t,n,r){e.attrsMap[t]=n,e.attrsList.push(Ar({name:t,value:n},r))}function $r(e,t,n){return n?\"_p(\"+t+',\"'+e+'\")':e+t}function wr(e,t,n,r,i,o,a,s){(r=r||d).right?s?t=\"(\"+t+\")==='click'?'contextmenu':(\"+t+\")\":\"click\"===t&&(t=\"contextmenu\",delete r.right):r.middle&&(s?t=\"(\"+t+\")==='click'?'mouseup':(\"+t+\")\":\"click\"===t&&(t=\"mouseup\")),r.capture&&(delete r.capture,t=$r(\"!\",t,s)),r.once&&(delete r.once,t=$r(\"~\",t,s)),r.passive&&(delete r.passive,t=$r(\"&\",t,s));var c=r.native?(delete r.native,e.nativeEvents||(e.nativeEvents={})):e.events||(e.events={}),a=Ar({value:n.trim(),dynamic:s},a);r!==d&&(a.modifiers=r);r=c[t];Array.isArray(r)?i?r.unshift(a):r.push(a):c[t]=r?i?[a,r]:[r,a]:a,e.plain=!1}function Cr(e,t,n){var r=xr(e,\":\"+t)||xr(e,\"v-bind:\"+t);if(null!=r)return hr(r);if(!1!==n){t=xr(e,t);if(null!=t)return JSON.stringify(t)}}function xr(e,t,n){var r;if(null!=(r=e.attrsMap[t]))for(var i=e.attrsList,o=0,a=i.length;o<a;o++)if(i[o].name===t){i.splice(o,1);break}return n&&delete e.attrsMap[t],r}function kr(e,t){for(var n=e.attrsList,r=0,i=n.length;r<i;r++){var o=n[r];if(t.test(o.name))return n.splice(r,1),o}}function Ar(e,t){return t&&(null!=t.start&&(e.start=t.start),null!=t.end&&(e.end=t.end)),e}function Or(e,t,n){var r=n||{},i=r.number,n=\"$$v\";r.trim&&(n=\"(typeof $$v === 'string'? $$v.trim(): $$v)\");n=Sr(t,n=i?\"_n(\"+n+\")\":n);e.model={value:\"(\"+t+\")\",expression:JSON.stringify(t),callback:\"function ($$v) {\"+n+\"}\"}}function Sr(e,t){var n=function(e){if(e=e.trim(),cr=e.length,e.indexOf(\"[\")<0||e.lastIndexOf(\"]\")<cr-1)return-1<(fr=e.lastIndexOf(\".\"))?{exp:e.slice(0,fr),key:'\"'+e.slice(fr+1)+'\"'}:{exp:e,key:null};for(lr=e,fr=pr=dr=0;!Er();)Nr(ur=Tr())?jr(ur):91===ur&&function(e){var t=1;for(pr=fr;!Er();)if(Nr(e=Tr()))jr(e);else if(91===e&&t++,93===e&&t--,0===t){dr=fr;break}}(ur);return{exp:e.slice(0,pr),key:e.slice(pr+1,dr)}}(e);return null===n.key?e+\"=\"+t:\"$set(\"+n.exp+\", \"+n.key+\", \"+t+\")\"}function Tr(){return lr.charCodeAt(++fr)}function Er(){return cr<=fr}function Nr(e){return 34===e||39===e}function jr(e){for(var t=e;!Er()&&(e=Tr())!==t;);}var Dr,Lr=\"__r\";function Mr(t,n,r){var i=Dr;return function e(){null!==n.apply(null,arguments)&&Pr(t,e,r,i)}}var Ir=We&&!(X&&Number(X[1])<=53);function Fr(e,t,n,r){var i,o;Ir&&(i=rn,t=(o=t)._wrapper=function(e){if(e.target===e.currentTarget||e.timeStamp>=i||e.timeStamp<=0||e.target.ownerDocument!==document)return o.apply(this,arguments)}),Dr.addEventListener(e,t,Q?{capture:n,passive:r}:n)}function Pr(e,t,n,r){(r||Dr).removeEventListener(e,t._wrapper||t,n)}function Rr(e,t){var n,r,i;D(e.data.on)&&D(t.data.on)||(n=t.data.on||{},r=e.data.on||{},Dr=t.elm,L((i=n).__r)&&(i[e=q?\"change\":\"input\"]=[].concat(i.__r,i[e]||[]),delete i.__r),L(i.__c)&&(i.change=[].concat(i.__c,i.change||[]),delete i.__c),rt(n,r,Fr,Pr,Mr,t.context),Dr=void 0)}var Hr,Qn={create:Rr,update:Rr};function Br(e,t){if(!D(e.data.domProps)||!D(t.data.domProps)){var n,r,i=t.elm,o=e.data.domProps||{},a=t.data.domProps||{};for(n in L(a.__ob__)&&(a=t.data.domProps=$({},a)),o)n in a||(i[n]=\"\");for(n in a){if(r=a[n],\"textContent\"===n||\"innerHTML\"===n){if(t.children&&(t.children.length=0),r===o[n])continue;1===i.childNodes.length&&i.removeChild(i.childNodes[0])}if(\"value\"===n&&\"PROGRESS\"!==i.tagName){var s=D(i._value=r)?\"\":String(r);u=s,(l=i).composing||\"OPTION\"!==l.tagName&&!function(e,t){var n=!0;try{n=document.activeElement!==e}catch(e){}return n&&e.value!==t}(l,u)&&!function(e){var t=l.value,n=l._vModifiers;if(L(n)){if(n.number)return I(t)!==I(e);if(n.trim)return t.trim()!==e.trim()}return t!==e}(u)||(i.value=s)}else if(\"innerHTML\"===n&&Vn(i.tagName)&&D(i.innerHTML)){(Hr=Hr||document.createElement(\"div\")).innerHTML=\"<svg>\"+r+\"</svg>\";for(var c=Hr.firstChild;i.firstChild;)i.removeChild(i.firstChild);for(;c.firstChild;)i.appendChild(c.firstChild)}else if(r!==o[n])try{i[n]=r}catch(e){}}}var l,u}var We={create:Br,update:Br},Ur=e(function(e){var t={},n=/:(.+)/;return e.split(/;(?![^(]*\\))/g).forEach(function(e){!e||1<(e=e.split(n)).length&&(t[e[0].trim()]=e[1].trim())}),t});function zr(e){var t=Vr(e.style);return e.staticStyle?$(e.staticStyle,t):t}function Vr(e){return Array.isArray(e)?w(e):\"string\"==typeof e?Ur(e):e}function Kr(e,t,n){if(qr.test(t))e.style.setProperty(t,n);else if(Wr.test(n))e.style.setProperty(g(t),n.replace(Wr,\"\"),\"important\");else{var r=Gr(t);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)e.style[r]=n[i];else e.style[r]=n}}var Jr,qr=/^--/,Wr=/\\s*!important$/,Zr=[\"Webkit\",\"Moz\",\"ms\"],Gr=e(function(e){if(Jr=Jr||document.createElement(\"div\").style,\"filter\"!==(e=m(e))&&e in Jr)return e;for(var t=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<Zr.length;n++){var r=Zr[n]+t;if(r in Jr)return r}});function Xr(e,t){var n=t.data,e=e.data;if(!(D(n.staticStyle)&&D(n.style)&&D(e.staticStyle)&&D(e.style))){var r,i,o=t.elm,n=e.staticStyle,e=e.normalizedStyle||e.style||{},a=n||e,e=Vr(t.data.style)||{};t.data.normalizedStyle=L(e.__ob__)?$({},e):e;var s=function(e){for(var t,n={},r=e;r.componentInstance;)(r=r.componentInstance._vnode)&&r.data&&(t=zr(r.data))&&$(n,t);(t=zr(e.data))&&$(n,t);for(var i=e;i=i.parent;)i.data&&(t=zr(i.data))&&$(n,t);return n}(t);for(i in a)D(s[i])&&Kr(o,i,\"\");for(i in s)(r=s[i])!==a[i]&&Kr(o,i,null==r?\"\":r)}}var X={create:Xr,update:Xr},Yr=/\\s+/;function Qr(t,e){var n;(e=e&&e.trim())&&(t.classList?-1<e.indexOf(\" \")?e.split(Yr).forEach(function(e){return t.classList.add(e)}):t.classList.add(e):(n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \").indexOf(\" \"+e+\" \")<0&&t.setAttribute(\"class\",(n+e).trim()))}function ei(t,e){if(e=e&&e.trim())if(t.classList)-1<e.indexOf(\" \")?e.split(Yr).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e),t.classList.length||t.removeAttribute(\"class\");else{for(var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \",r=\" \"+e+\" \";0<=n.indexOf(r);)n=n.replace(r,\" \");(n=n.trim())?t.setAttribute(\"class\",n):t.removeAttribute(\"class\")}}function ti(e){if(e){if(\"object\"!=typeof e)return\"string\"==typeof e?ni(e):void 0;var t={};return!1!==e.css&&$(t,ni(e.name||\"v\")),$(t,e),t}}var ni=e(function(e){return{enterClass:e+\"-enter\",enterToClass:e+\"-enter-to\",enterActiveClass:e+\"-enter-active\",leaveClass:e+\"-leave\",leaveToClass:e+\"-leave-to\",leaveActiveClass:e+\"-leave-active\"}}),ri=z&&!W,ii=\"transition\",oi=\"animation\",ai=\"transition\",si=\"transitionend\",ci=\"animation\",li=\"animationend\";ri&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(ai=\"WebkitTransition\",si=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(ci=\"WebkitAnimation\",li=\"webkitAnimationEnd\"));var ui=z?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(e){return e()};function fi(e){ui(function(){ui(e)})}function pi(e,t){var n=e._transitionClasses||(e._transitionClasses=[]);n.indexOf(t)<0&&(n.push(t),Qr(e,t))}function di(e,t){e._transitionClasses&&h(e._transitionClasses,t),ei(e,t)}function vi(t,e,n){var r=mi(t,e),i=r.type,e=r.timeout,o=r.propCount;if(!i)return n();function a(){t.removeEventListener(s,l),n()}var s=i===ii?si:li,c=0,l=function(e){e.target===t&&++c>=o&&a()};setTimeout(function(){c<o&&a()},e+1),t.addEventListener(s,l)}var hi=/\\b(transform|all)(,|$)/;function mi(e,t){var n,r=window.getComputedStyle(e),i=(r[ai+\"Delay\"]||\"\").split(\", \"),o=(r[ai+\"Duration\"]||\"\").split(\", \"),a=yi(i,o),s=(r[ci+\"Delay\"]||\"\").split(\", \"),c=(r[ci+\"Duration\"]||\"\").split(\", \"),e=yi(s,c),i=0,s=0;return t===ii?0<a&&(n=ii,i=a,s=o.length):t===oi?0<e&&(n=oi,i=e,s=c.length):s=(n=0<(i=Math.max(a,e))?e<a?ii:oi:null)?(n===ii?o:c).length:0,{type:n,timeout:i,propCount:s,hasTransform:n===ii&&hi.test(r[ai+\"Property\"])}}function yi(n,e){for(;n.length<e.length;)n=n.concat(n);return Math.max.apply(null,e.map(function(e,t){return gi(e)+gi(n[t])}))}function gi(e){return 1e3*Number(e.slice(0,-1).replace(\",\",\".\"))}function _i(t,e){var n=t.elm;L(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._leaveCb());var r=ti(t.data.transition);if(!D(r)&&!L(n._enterCb)&&1===n.nodeType){for(var i=r.css,o=r.type,a=r.enterClass,s=r.enterToClass,c=r.enterActiveClass,l=r.appearClass,u=r.appearToClass,f=r.appearActiveClass,p=r.beforeEnter,d=r.enter,v=r.afterEnter,h=r.enterCancelled,m=r.beforeAppear,y=r.appear,g=r.afterAppear,_=r.appearCancelled,b=r.duration,$=Kt,w=Kt.$vnode;w&&w.parent;)$=w.context,w=w.parent;var C,x,k,A,O,S,T,E,N,j,r=!$._isMounted||!t.isRootInsert;r&&!y&&\"\"!==y||(C=r&&l?l:a,x=r&&f?f:c,k=r&&u?u:s,p=r&&m||p,A=r&&\"function\"==typeof y?y:d,O=r&&g||v,S=r&&_||h,T=I(M(b)?b.enter:b),E=!1!==i&&!W,N=wi(A),j=n._enterCb=F(function(){E&&(di(n,k),di(n,x)),j.cancelled?(E&&di(n,C),S&&S(n)):O&&O(n),n._enterCb=null}),t.data.show||it(t,\"insert\",function(){var e=n.parentNode,e=e&&e._pending&&e._pending[t.key];e&&e.tag===t.tag&&e.elm._leaveCb&&e.elm._leaveCb(),A&&A(n,j)}),p&&p(n),E&&(pi(n,C),pi(n,x),fi(function(){di(n,C),j.cancelled||(pi(n,k),N||($i(T)?setTimeout(j,T):vi(n,o,j)))})),t.data.show&&(e&&e(),A&&A(n,j)),E||N||j())}}function bi(e,t){var n=e.elm;L(n._enterCb)&&(n._enterCb.cancelled=!0,n._enterCb());var r,i,o,a,s,c,l,u,f,p,d,v,h,m,y=ti(e.data.transition);if(D(y)||1!==n.nodeType)return t();function g(){m.cancelled||(!e.data.show&&n.parentNode&&((n.parentNode._pending||(n.parentNode._pending={}))[e.key]=e),c&&c(n),d&&(pi(n,o),pi(n,s),fi(function(){di(n,o),m.cancelled||(pi(n,a),v||($i(h)?setTimeout(m,h):vi(n,i,m)))})),l&&l(n,m),d||v||m())}L(n._leaveCb)||(r=y.css,i=y.type,o=y.leaveClass,a=y.leaveToClass,s=y.leaveActiveClass,c=y.beforeLeave,l=y.leave,u=y.afterLeave,f=y.leaveCancelled,p=y.delayLeave,y=y.duration,d=!1!==r&&!W,v=wi(l),h=I(M(y)?y.leave:y),m=n._leaveCb=F(function(){n.parentNode&&n.parentNode._pending&&(n.parentNode._pending[e.key]=null),d&&(di(n,a),di(n,s)),m.cancelled?(d&&di(n,o),f&&f(n)):(t(),u&&u(n)),n._leaveCb=null}),p?p(g):g())}function $i(e){return\"number\"==typeof e&&!isNaN(e)}function wi(e){if(D(e))return!1;var t=e.fns;return L(t)?wi(Array.isArray(t)?t[0]:t):1<(e._length||e.length)}function Ci(e,t){!0!==t.data.show&&_i(t)}Qn=function(e){for(var t,v={},n=e.modules,y=e.nodeOps,r=0;r<Xn.length;++r)for(v[Xn[r]]=[],t=0;t<n.length;++t)L(n[t][Xn[r]])&&v[Xn[r]].push(n[t][Xn[r]]);function o(e){var t=y.parentNode(e);L(t)&&y.removeChild(t,e)}function g(e,t,n,r,i,o,a){(e=L(e.elm)&&L(o)?o[a]=ye(e):e).isRootInsert=!i,function(e,t,n,r){var i=e.data;if(L(i)){var o=L(e.componentInstance)&&i.keepAlive;return(L(i=i.hook)&&L(i=i.init)&&i(e,!1),L(e.componentInstance))?(d(e,t),s(n,e.elm,r),O(o)&&function(e,t,n,r){for(var i,o=e;o.componentInstance;)if(o=o.componentInstance._vnode,L(i=o.data)&&L(i=i.transition)){for(i=0;i<v.activate.length;++i)v.activate[i](Gn,o);t.push(o);break}s(n,e.elm,r)}(e,t,n,r),1):void 0}}(e,t,n,r)||(o=e.data,a=e.children,L(i=e.tag)?(e.elm=e.ns?y.createElementNS(e.ns,i):y.createElement(i,e),c(e),h(e,a,t),L(o)&&m(e,t)):O(e.isComment)?e.elm=y.createComment(e.text):e.elm=y.createTextNode(e.text),s(n,e.elm,r))}function d(e,t){L(e.data.pendingInsert)&&(t.push.apply(t,e.data.pendingInsert),e.data.pendingInsert=null),e.elm=e.componentInstance.$el,_(e)?(m(e,t),c(e)):(Zn(e),t.push(e))}function s(e,t,n){L(e)&&(L(n)?y.parentNode(n)===e&&y.insertBefore(e,t,n):y.appendChild(e,t))}function h(e,t,n){if(Array.isArray(t))for(var r=0;r<t.length;++r)g(t[r],n,e.elm,null,!0,t,r);else l(e.text)&&y.appendChild(e.elm,y.createTextNode(String(e.text)))}function _(e){for(;e.componentInstance;)e=e.componentInstance._vnode;return L(e.tag)}function m(e,t){for(var n=0;n<v.create.length;++n)v.create[n](Gn,e);L(r=e.data.hook)&&(L(r.create)&&r.create(Gn,e),L(r.insert)&&t.push(e))}function c(e){var t;if(L(t=e.fnScopeId))y.setStyleScope(e.elm,t);else for(var n=e;n;)L(t=n.context)&&L(t=t.$options._scopeId)&&y.setStyleScope(e.elm,t),n=n.parent;L(t=Kt)&&t!==e.context&&t!==e.fnContext&&L(t=t.$options._scopeId)&&y.setStyleScope(e.elm,t)}function b(e,t,n,r,i,o){for(;r<=i;++r)g(n[r],o,e,t,!1,n,r)}function $(e){var t,n,r=e.data;if(L(r))for(L(t=r.hook)&&L(t=t.destroy)&&t(e),t=0;t<v.destroy.length;++t)v.destroy[t](e);if(L(t=e.children))for(n=0;n<e.children.length;++n)$(e.children[n])}function w(e,t,n){for(;t<=n;++t){var r=e[t];L(r)&&(L(r.tag)?(function e(t,n){if(L(n)||L(t.data)){var r,i=v.remove.length+1;for(L(n)?n.listeners+=i:n=function(e,t){function n(){0==--n.listeners&&o(e)}return n.listeners=t,n}(t.elm,i),L(r=t.componentInstance)&&L(r=r._vnode)&&L(r.data)&&e(r,n),r=0;r<v.remove.length;++r)v.remove[r](t,n);L(r=t.data.hook)&&L(r=r.remove)?r(t,n):n()}else o(t.elm)}(r),$(r)):o(r.elm))}}function C(e,t,n,r,i,m){if(e!==t){var o=(t=L(t.elm)&&L(r)?r[i]=ye(t):t).elm=e.elm;if(O(e.isAsyncPlaceholder))L(t.asyncFactory.resolved)?A(e.elm,t,n):t.isAsyncPlaceholder=!0;else if(O(t.isStatic)&&O(e.isStatic)&&t.key===e.key&&(O(t.isCloned)||O(t.isOnce)))t.componentInstance=e.componentInstance;else{var a,s=t.data;L(s)&&L(a=s.hook)&&L(a=a.prepatch)&&a(e,t);r=e.children,i=t.children;if(L(s)&&_(t)){for(a=0;a<v.update.length;++a)v.update[a](e,t);L(a=s.hook)&&L(a=a.update)&&a(e,t)}D(t.text)?L(r)&&L(i)?r!==i&&function(e,t,n,r){for(var i,o,a,s=0,c=0,l=t.length-1,u=t[0],f=t[l],p=n.length-1,d=n[0],v=n[p],h=!m;s<=l&&c<=p;)D(u)?u=t[++s]:D(f)?f=t[--l]:Yn(u,d)?(C(u,d,r,n,c),u=t[++s],d=n[++c]):Yn(f,v)?(C(f,v,r,n,p),f=t[--l],v=n[--p]):Yn(u,v)?(C(u,v,r,n,p),h&&y.insertBefore(e,u.elm,y.nextSibling(f.elm)),u=t[++s],v=n[--p]):d=(Yn(f,d)?(C(f,d,r,n,c),h&&y.insertBefore(e,f.elm,u.elm),f=t[--l]):(D(i)&&(i=function(e,t,n){for(var r,i={},o=t;o<=n;++o)L(r=e[o].key)&&(i[r]=o);return i}(t,s,l)),!D(o=L(d.key)?i[d.key]:function(e,t,n,r){for(var i=n;i<r;i++){var o=t[i];if(L(o)&&Yn(e,o))return i}}(d,t,s,l))&&Yn(a=t[o],d)?(C(a,d,r,n,c),t[o]=void 0,h&&y.insertBefore(e,a.elm,u.elm)):g(d,r,e,u.elm,!1,n,c)),n[++c]);l<s?b(e,D(n[p+1])?null:n[p+1].elm,n,c,p,r):p<c&&w(t,s,l)}(o,r,i,n):L(i)?(L(e.text)&&y.setTextContent(o,\"\"),b(o,null,i,0,i.length-1,n)):L(r)?w(r,0,r.length-1):L(e.text)&&y.setTextContent(o,\"\"):e.text!==t.text&&y.setTextContent(o,t.text),L(s)&&L(a=s.hook)&&L(a=a.postpatch)&&a(e,t)}}}function x(e,t,n){if(O(n)&&L(e.parent))e.parent.data.pendingInsert=t;else for(var r=0;r<t.length;++r)t[r].data.hook.insert(t[r])}var k=a(\"attrs,class,staticClass,staticStyle,key\");function A(e,t,n,r){var i,o=t.tag,a=t.data,s=t.children;if(r=r||a&&a.pre,t.elm=e,O(t.isComment)&&L(t.asyncFactory))return t.isAsyncPlaceholder=!0;if(L(a)&&(L(i=a.hook)&&L(i=i.init)&&i(t,!0),L(i=t.componentInstance)))return d(t,n),1;if(L(o)){if(L(s))if(e.hasChildNodes())if(L(i=a)&&L(i=i.domProps)&&L(i=i.innerHTML)){if(i!==e.innerHTML)return}else{for(var c=!0,l=e.firstChild,u=0;u<s.length;u++){if(!l||!A(l,s[u],n,r)){c=!1;break}l=l.nextSibling}if(!c||l)return}else h(t,s,n);if(L(a)){var f,p=!1;for(f in a)if(!k(f)){p=!0,m(t,n);break}!p&&a.class&&et(a.class)}}else e.data!==t.text&&(e.data=t.text);return 1}return function(e,t,n,r){if(!D(t)){var i=!1,o=[];if(D(e))i=!0,g(t,o);else{var a=L(e.nodeType);if(!a&&Yn(e,t))C(e,t,o,null,null,r);else{if(a){if(1===e.nodeType&&e.hasAttribute(T)&&(e.removeAttribute(T),n=!0),O(n)&&A(e,t,o))return x(t,o,!0),e;s=e,e=new de(y.tagName(s).toLowerCase(),{},[],void 0,s)}var n=e.elm,s=y.parentNode(n);if(g(t,o,n._leaveCb?null:s,y.nextSibling(n)),L(t.parent))for(var c=t.parent,l=_(t);c;){for(var u=0;u<v.destroy.length;++u)v.destroy[u](c);if(c.elm=t.elm,l){for(var f=0;f<v.create.length;++f)v.create[f](Gn,c);var p=c.data.hook.insert;if(p.merged)for(var d=1;d<p.fns.length;d++)p.fns[d]()}else Zn(c);c=c.parent}L(s)?w([e],0,0):L(e.tag)&&$(e)}}return x(t,o,i),t.elm}L(e)&&$(e)}}({nodeOps:ve,modules:[Sn,N,Qn,We,X,z?{create:Ci,activate:Ci,remove:function(e,t){!0!==e.data.show?bi(e,t):t()}}:{}].concat(se)});W&&document.addEventListener(\"selectionchange\",function(){var e=document.activeElement;e&&e.vmodel&&Ni(e,\"input\")});var xi={inserted:function(e,t,n,r){\"select\"===n.tag?(r.elm&&!r.elm._vOptions?it(n,\"postpatch\",function(){xi.componentUpdated(e,t,n)}):ki(e,t,n.context),e._vOptions=[].map.call(e.options,Si)):\"textarea\"!==n.tag&&!qn(e.type)||(e._vModifiers=t.modifiers,t.modifiers.lazy||(e.addEventListener(\"compositionstart\",Ti),e.addEventListener(\"compositionend\",Ei),e.addEventListener(\"change\",Ei),W&&(e.vmodel=!0)))},componentUpdated:function(e,t,n){var r,i;\"select\"===n.tag&&(ki(e,t,n.context),r=e._vOptions,(i=e._vOptions=[].map.call(e.options,Si)).some(function(e,t){return!A(e,r[t])})&&(e.multiple?t.value.some(function(e){return Oi(e,i)}):t.value!==t.oldValue&&Oi(t.value,i))&&Ni(e,\"change\"))}};function ki(e,t,n){Ai(e,t),(q||Z)&&setTimeout(function(){Ai(e,t)},0)}function Ai(e,t){var n=t.value,r=e.multiple;if(!r||Array.isArray(n)){for(var i,o,a=0,s=e.options.length;a<s;a++)if(o=e.options[a],r)i=-1<S(n,Si(o)),o.selected!==i&&(o.selected=i);else if(A(Si(o),n))return e.selectedIndex!==a&&(e.selectedIndex=a),0;r||(e.selectedIndex=-1)}}function Oi(t,e){return e.every(function(e){return!A(e,t)})}function Si(e){return\"_value\"in e?e._value:e.value}function Ti(e){e.target.composing=!0}function Ei(e){e.target.composing&&(e.target.composing=!1,Ni(e.target,\"input\"))}function Ni(e,t){var n=document.createEvent(\"HTMLEvents\");n.initEvent(t,!0,!0),e.dispatchEvent(n)}function ji(e){return!e.componentInstance||e.data&&e.data.transition?e:ji(e.componentInstance._vnode)}We={model:xi,show:{bind:function(e,t,n){var r=t.value,t=(n=ji(n)).data&&n.data.transition,i=e.__vOriginalDisplay=\"none\"===e.style.display?\"\":e.style.display;r&&t?(n.data.show=!0,_i(n,function(){e.style.display=i})):e.style.display=r?i:\"none\"},update:function(e,t,n){var r=t.value;!r!=!t.oldValue&&((n=ji(n)).data&&n.data.transition?(n.data.show=!0,r?_i(n,function(){e.style.display=e.__vOriginalDisplay}):bi(n,function(){e.style.display=\"none\"})):e.style.display=r?e.__vOriginalDisplay:\"none\")},unbind:function(e,t,n,r,i){i||(e.style.display=e.__vOriginalDisplay)}}},X={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function Di(e){var t=e&&e.componentOptions;return t&&t.Ctor.options.abstract?Di(Ht(t.children)):e}function Li(e){var t,n={},r=e.$options;for(t in r.propsData)n[t]=e[t];var i,o=r._parentListeners;for(i in o)n[m(i)]=o[i];return n}function Mi(e,t){if(/\\d-keep-alive$/.test(t.tag))return e(\"keep-alive\",{props:t.componentOptions.propsData})}function Ii(e){return e.tag||Rt(e)}function Fi(e){return\"show\"===e.name}se={name:\"transition\",props:X,abstract:!0,render:function(e){var t=this,n=this.$slots.default;if(n&&(n=n.filter(Ii)).length){var r=this.mode,i=n[0];if(function(e){for(;e=e.parent;)if(e.data.transition)return 1}(this.$vnode))return i;var o=Di(i);if(!o)return i;if(this._leaving)return Mi(e,i);var a=\"__transition-\"+this._uid+\"-\";o.key=null==o.key?o.isComment?a+\"comment\":a+o.tag:!l(o.key)||0===String(o.key).indexOf(a)?o.key:a+o.key;var s=(o.data||(o.data={})).transition=Li(this),n=this._vnode,a=Di(n);if(o.data.directives&&o.data.directives.some(Fi)&&(o.data.show=!0),a&&a.data&&(a.key!==o.key||a.tag!==o.tag)&&!Rt(a)&&(!a.componentInstance||!a.componentInstance._vnode.isComment)){a=a.data.transition=$({},s);if(\"out-in\"===r)return this._leaving=!0,it(a,\"afterLeave\",function(){t._leaving=!1,t.$forceUpdate()}),Mi(e,i);if(\"in-out\"===r){if(Rt(o))return n;var c,n=function(){c()};it(s,\"afterEnter\",n),it(s,\"enterCancelled\",n),it(a,\"delayLeave\",function(e){c=e})}}return i}}},X=$({tag:String,moveClass:String},X);function Pi(e){e.elm._moveCb&&e.elm._moveCb(),e.elm._enterCb&&e.elm._enterCb()}function Ri(e){e.data.newPos=e.elm.getBoundingClientRect()}function Hi(e){var t=e.data.pos,n=e.data.newPos,r=t.left-n.left,n=t.top-n.top;(r||n)&&(e.data.moved=!0,(e=e.elm.style).transform=e.WebkitTransform=\"translate(\"+r+\"px,\"+n+\"px)\",e.transitionDuration=\"0s\")}delete X.mode;X={Transition:se,TransitionGroup:{props:X,beforeMount:function(){var r=this,i=this._update;this._update=function(e,t){var n=Jt(r);r.__patch__(r._vnode,r.kept,!1,!0),r._vnode=r.kept,n(),i.call(r,e,t)}},render:function(e){for(var t=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=Li(this),s=0;s<i.length;s++){var c=i[s];c.tag&&null!=c.key&&0!==String(c.key).indexOf(\"__vlist\")&&(o.push(c),((n[c.key]=c).data||(c.data={})).transition=a)}if(r){for(var l=[],u=[],f=0;f<r.length;f++){var p=r[f];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),(n[p.key]?l:u).push(p)}this.kept=e(t,null,l),this.removed=u}return e(t,null,o)},updated:function(){var e=this.prevChildren,r=this.moveClass||(this.name||\"v\")+\"-move\";e.length&&this.hasMove(e[0].elm,r)&&(e.forEach(Pi),e.forEach(Ri),e.forEach(Hi),this._reflow=document.body.offsetHeight,e.forEach(function(e){var n;e.data.moved&&(e=(n=e.elm).style,pi(n,r),e.transform=e.WebkitTransform=e.transitionDuration=\"\",n.addEventListener(si,n._moveCb=function e(t){t&&t.target!==n||t&&!/transform$/.test(t.propertyName)||(n.removeEventListener(si,e),n._moveCb=null,di(n,r))}))}))},methods:{hasMove:function(e,t){if(!ri)return!1;if(this._hasMove)return this._hasMove;var n=e.cloneNode();e._transitionClasses&&e._transitionClasses.forEach(function(e){ei(n,e)}),Qr(n,t),n.style.display=\"none\",this.$el.appendChild(n);t=mi(n);return this.$el.removeChild(n),this._hasMove=t.hasTransform}}}};bn.config.mustUseProp=J,bn.config.isReservedTag=Bn,bn.config.isReservedAttr=K,bn.config.getTagNamespace=Kn,bn.config.isUnknownElement=function(e){if(!z)return!0;if(Bn(e))return!1;if(e=e.toLowerCase(),null!=Jn[e])return Jn[e];var t=document.createElement(e);return-1<e.indexOf(\"-\")?Jn[e]=t.constructor===window.HTMLUnknownElement||t.constructor===window.HTMLElement:Jn[e]=/HTMLUnknownElement/.test(t.toString())},$(bn.options.directives,We),$(bn.options.components,X),bn.prototype.__patch__=z?Qn:C,bn.prototype.$mount=function(e,t){return n=this,e=e=e&&z?Wn(e):void 0,r=t,n.$el=e,n.$options.render||(n.$options.render=he),Zt(n,\"beforeMount\"),e=function(){n._update(n._render(),r)},new sn(n,e,C,{before:function(){n._isMounted&&!n._isDestroyed&&Zt(n,\"beforeUpdate\")}},!0),r=!1,null==n.$vnode&&(n._isMounted=!0,Zt(n,\"mounted\")),n;var n,r},z&&setTimeout(function(){j.devtools&&ne&&ne.emit(\"init\",bn)},0);function Bi(e,t){return e&&ao(e)&&\"\\n\"===t[0]}var Ui,zi=/\\{\\{((?:.|\\r?\\n)+?)\\}\\}/g,Vi=/[-.*+?^${}()|[\\]\\/\\\\]/g,Ki=e(function(e){var t=e[0].replace(Vi,\"\\\\$&\"),e=e[1].replace(Vi,\"\\\\$&\");return new RegExp(t+\"((?:.|\\\\n)+?)\"+e,\"g\")}),K={staticKeys:[\"staticClass\"],transformNode:function(e,t){t.warn;t=xr(e,\"class\");t&&(e.staticClass=JSON.stringify(t));t=Cr(e,\"class\",!1);t&&(e.classBinding=t)},genData:function(e){var t=\"\";return e.staticClass&&(t+=\"staticClass:\"+e.staticClass+\",\"),e.classBinding&&(t+=\"class:\"+e.classBinding+\",\"),t}},We={staticKeys:[\"staticStyle\"],transformNode:function(e,t){t.warn;t=xr(e,\"style\");t&&(e.staticStyle=JSON.stringify(Ur(t)));t=Cr(e,\"style\",!1);t&&(e.styleBinding=t)},genData:function(e){var t=\"\";return e.staticStyle&&(t+=\"staticStyle:\"+e.staticStyle+\",\"),e.styleBinding&&(t+=\"style:(\"+e.styleBinding+\"),\"),t}},X=a(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),Qn=a(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),Ji=a(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),qi=/^\\s*([^\\s\"'<>\\/=]+)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,Wi=/^\\s*((?:v-[\\w-]+:|@|:|#)\\[[^=]+\\][^\\s\"'<>\\/=]*)(?:\\s*(=)\\s*(?:\"([^\"]*)\"+|'([^']*)'+|([^\\s\"'=<>`]+)))?/,P=\"[a-zA-Z_][\\\\-\\\\.0-9_a-zA-Z\"+P.source+\"]*\",P=\"((?:\"+P+\"\\\\:)?\"+P+\")\",Zi=new RegExp(\"^<\"+P),Gi=/^\\s*(\\/?)>/,Xi=new RegExp(\"^<\\\\/\"+P+\"[^>]*>\"),Yi=/^<!DOCTYPE [^>]+>/i,Qi=/^<!\\--/,eo=/^<!\\[/,to=a(\"script,style,textarea\",!0),no={},ro={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\",\"&#9;\":\"\\t\",\"&#39;\":\"'\"},io=/&(?:lt|gt|quot|amp|#39);/g,oo=/&(?:lt|gt|quot|amp|#39|#10|#9);/g,ao=a(\"pre,textarea\",!0);var so,co,lo,uo,fo,po,vo,ho,mo=/^@|^v-on:/,yo=/^v-|^@|^:|^#/,go=/([\\s\\S]*?)\\s+(?:in|of)\\s+([\\s\\S]*)/,_o=/,([^,\\}\\]]*)(?:,([^,\\}\\]]*))?$/,bo=/^\\(|\\)$/g,$o=/^\\[.*\\]$/,wo=/:(.*)$/,Co=/^:|^\\.|^v-bind:/,xo=/\\.[^.\\]]+(?=[^\\]]*$)/g,ko=/^v-slot(:|$)|^#/,Ao=/[\\r\\n]/,Oo=/\\s+/g,So=e(function(e){return(Ui=Ui||document.createElement(\"div\")).innerHTML=e,Ui.textContent}),To=\"_empty_\";function Eo(e,t,n){return{type:1,tag:e,attrsList:t,attrsMap:function(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n].name]=e[n].value;return t}(t),rawAttrsMap:{},parent:n,children:[]}}function No(e,l){so=l.warn||mr,po=l.isPreTag||x,vo=l.mustUseProp||x,ho=l.getTagNamespace||x,l.isReservedTag,lo=yr(l.modules,\"transformNode\"),uo=yr(l.modules,\"preTransformNode\"),fo=yr(l.modules,\"postTransformNode\"),co=l.delimiters;var u,f,p=[],a=!1!==l.preserveWhitespace,s=l.whitespace,d=!1,v=!1;function h(e){var t,n;i(e),d||e.processed||(e=jo(e,l)),p.length||e===u||u.if&&(e.elseif||e.else)&&Lo(u,{exp:e.elseif,block:e}),f&&!e.forbidden&&(e.elseif||e.else?(t=e,(n=function(e){for(var t=e.length;t--;){if(1===e[t].type)return e[t];e.pop()}}(f.children))&&n.if&&Lo(n,{exp:t.elseif,block:t})):(e.slotScope&&(t=e.slotTarget||'\"default\"',(f.scopedSlots||(f.scopedSlots={}))[t]=e),f.children.push(e),e.parent=f)),e.children=e.children.filter(function(e){return!e.slotScope}),i(e),e.pre&&(d=!1),po(e.tag)&&(v=!1);for(var r=0;r<fo.length;r++)fo[r](e,l)}function i(e){if(!v)for(var t;(t=e.children[e.children.length-1])&&3===t.type&&\" \"===t.text;)e.children.pop()}return function(i,l){for(var e,u,f=[],p=l.expectHTML,d=l.isUnaryTag||x,v=l.canBeLeftOpenTag||x,a=0;i;){if(e=i,u&&to(u)){var r=0,o=u.toLowerCase(),t=no[o]||(no[o]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+o+\"[^>]*>)\",\"i\")),t=i.replace(t,function(e,t,n){return r=n.length,to(o)||\"noscript\"===o||(t=t.replace(/<!\\--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),Bi(o,t)&&(t=t.slice(1)),l.chars&&l.chars(t),\"\"});a+=i.length-t.length,i=t,g(o,a-r,a)}else{var n=i.indexOf(\"<\");if(0===n){if(Qi.test(i)){t=i.indexOf(\"--\\x3e\");if(0<=t){l.shouldKeepComment&&l.comment(i.substring(4,t),a,a+t+3),y(t+3);continue}}if(eo.test(i)){var s=i.indexOf(\"]>\");if(0<=s){y(s+2);continue}}s=i.match(Yi);if(s){y(s[0].length);continue}s=i.match(Xi);if(s){var c=a;y(s[0].length),g(s[1],c,a);continue}c=function(){var e=i.match(Zi);if(e){var t,n,r={tagName:e[1],attrs:[],start:a};for(y(e[0].length);!(t=i.match(Gi))&&(n=i.match(Wi)||i.match(qi));)n.start=a,y(n[0].length),n.end=a,r.attrs.push(n);if(t)return r.unarySlash=t[1],y(t[0].length),r.end=a,r}}();if(c){(function(e){var t=e.tagName,n=e.unarySlash;p&&(\"p\"===u&&Ji(t)&&g(u),v(t)&&u===t&&g(t));for(var n=d(t)||!!n,r=e.attrs.length,i=new Array(r),o=0;o<r;o++){var a=e.attrs[o],s=a[3]||a[4]||a[5]||\"\",c=\"a\"===t&&\"href\"===a[1]?l.shouldDecodeNewlinesForHref:l.shouldDecodeNewlines;i[o]={name:a[1],value:function(e,t){return e.replace(t?oo:io,function(e){return ro[e]})}(s,c)}}n||(f.push({tag:t,lowerCasedTag:t.toLowerCase(),attrs:i,start:e.start,end:e.end}),u=t),l.start&&l.start(t,i,n,e.start,e.end)})(c),Bi(c.tagName,i)&&y(1);continue}}var c=void 0,h=void 0,m=void 0;if(0<=n){for(h=i.slice(n);!(Xi.test(h)||Zi.test(h)||Qi.test(h)||eo.test(h)||(m=h.indexOf(\"<\",1))<0);)n+=m,h=i.slice(n);c=i.substring(0,n)}(c=n<0?i:c)&&y(c.length),l.chars&&c&&l.chars(c,a-c.length,a)}if(i===e){l.chars&&l.chars(i);break}}function y(e){a+=e,i=i.substring(e)}function g(e,t,n){var r,i;if(null==t&&(t=a),null==n&&(n=a),e)for(i=e.toLowerCase(),r=f.length-1;0<=r&&f[r].lowerCasedTag!==i;r--);else r=0;if(0<=r){for(var o=f.length-1;r<=o;o--)l.end&&l.end(f[o].tag,t,n);f.length=r,u=r&&f[r-1].tag}else\"br\"===i?l.start&&l.start(e,[],!0,t,n):\"p\"===i&&(l.start&&l.start(e,[],!1,t,n),l.end&&l.end(e,t,n))}g()}(e,{warn:so,expectHTML:l.expectHTML,isUnaryTag:l.isUnaryTag,canBeLeftOpenTag:l.canBeLeftOpenTag,shouldDecodeNewlines:l.shouldDecodeNewlines,shouldDecodeNewlinesForHref:l.shouldDecodeNewlinesForHref,shouldKeepComment:l.comments,outputSourceRange:l.outputSourceRange,start:function(e,t,n,r,i){var o=f&&f.ns||ho(e),a=Eo(e,t=q&&\"svg\"===o?function(e){for(var t=[],n=0;n<e.length;n++){var r=e[n];Io.test(r.name)||(r.name=r.name.replace(Fo,\"\"),t.push(r))}return t}(t):t,f);o&&(a.ns=o),\"style\"!==(o=a).tag&&(\"script\"!==o.tag||o.attrsMap.type&&\"text/javascript\"!==o.attrsMap.type)||te()||(a.forbidden=!0);for(var s,c=0;c<uo.length;c++)a=uo[c](a,l)||a;d||(null!=xr(s=a,\"v-pre\")&&(s.pre=!0),a.pre&&(d=!0)),po(a.tag)&&(v=!0),d?function(e){var t=e.attrsList,n=t.length;if(n)for(var r=e.attrs=new Array(n),i=0;i<n;i++)r[i]={name:t[i].name,value:JSON.stringify(t[i].value)},null!=t[i].start&&(r[i].start=t[i].start,r[i].end=t[i].end);else e.pre||(e.plain=!0)}(a):a.processed||(Do(a),(s=xr(o=a,\"v-if\"))?(o.if=s,Lo(o,{exp:s,block:o})):(null!=xr(o,\"v-else\")&&(o.else=!0),(s=xr(o,\"v-else-if\"))&&(o.elseif=s)),null!=xr(s=a,\"v-once\")&&(s.once=!0)),u=u||a,n?h(a):(f=a,p.push(a))},end:function(e,t,n){var r=p[p.length-1];--p.length,f=p[p.length-1],h(r)},chars:function(e,t,n){var r,i,o;!f||q&&\"textarea\"===f.tag&&f.attrsMap.placeholder===e||(o=f.children,(e=v||e.trim()?\"script\"===f.tag||\"style\"===f.tag?e:So(e):o.length?s?\"condense\"===s&&Ao.test(e)?\"\":\" \":a?\" \":\"\":\"\")&&(v||\"condense\"!==s||(e=e.replace(Oo,\" \")),!d&&\" \"!==e&&(r=function(e){var t=co?Ki(co):zi;if(t.test(e)){for(var n,r,i,o=[],a=[],s=t.lastIndex=0;n=t.exec(e);){(r=n.index)>s&&(a.push(i=e.slice(s,r)),o.push(JSON.stringify(i)));var c=hr(n[1].trim());o.push(\"_s(\"+c+\")\"),a.push({\"@binding\":c}),s=r+n[0].length}return s<e.length&&(a.push(i=e.slice(s)),o.push(JSON.stringify(i))),{expression:o.join(\"+\"),tokens:a}}}(e))?i={type:2,expression:r.expression,tokens:r.tokens,text:e}:\" \"===e&&o.length&&\" \"===o[o.length-1].text||(i={type:3,text:e}),i&&o.push(i)))},comment:function(e,t,n){f&&f.children.push({type:3,text:e,isComment:!0})}}),u}function jo(e,t){var n,r,i;(n=Cr(i=e,\"key\"))&&(i.key=n),e.plain=!e.key&&!e.scopedSlots&&!e.attrsList.length,(i=Cr(r=e,\"ref\"))&&(r.ref=i,r.refInFor=function(){for(var e=r;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}()),function(e){var t;\"template\"===e.tag?(t=xr(e,\"scope\"),e.slotScope=t||xr(e,\"slot-scope\")):(t=xr(e,\"slot-scope\"))&&(e.slotScope=t);var n,r,i,o,a,s=Cr(e,\"slot\");s&&(e.slotTarget='\"\"'===s?'\"default\"':s,e.slotTargetDynamic=!(!e.attrsMap[\":slot\"]&&!e.attrsMap[\"v-bind:slot\"]),\"template\"===e.tag||e.slotScope||_r(e,\"slot\",s,(s=\"slot\",e.rawAttrsMap[\":\"+s]||e.rawAttrsMap[\"v-bind:\"+s]||e.rawAttrsMap[s]))),\"template\"===e.tag?(i=kr(e,ko))&&(r=(n=Mo(i)).name,o=n.dynamic,e.slotTarget=r,e.slotTargetDynamic=o,e.slotScope=i.value||To):(n=kr(e,ko))&&(r=e.scopedSlots||(e.scopedSlots={}),i=(o=Mo(n)).name,o=o.dynamic,(a=r[i]=Eo(\"template\",[],e)).slotTarget=i,a.slotTargetDynamic=o,a.children=e.children.filter(function(e){if(!e.slotScope)return e.parent=a,!0}),a.slotScope=n.value||To,e.children=[],e.plain=!1)}(e),\"slot\"===(n=e).tag&&(n.slotName=Cr(n,\"name\")),(n=Cr(i=e,\"is\"))&&(i.component=n),null!=xr(i,\"inline-template\")&&(i.inlineTemplate=!0);for(var o=0;o<lo.length;o++)e=lo[o](e,t)||e;return function(e){for(var t,n,r,i,o,a,s,c,l,u,f,p=e.attrsList,d=0,v=p.length;d<v;d++)t=l=p[d].name,n=p[d].value,yo.test(t)?(e.hasBindings=!0,(f=function(e){e=e.match(xo);if(e){var t={};return e.forEach(function(e){t[e.slice(1)]=!0}),t}}(t.replace(yo,\"\")))&&(t=t.replace(xo,\"\")),Co.test(t)?(t=t.replace(Co,\"\"),n=hr(n),(r=$o.test(t))&&(t=t.slice(1,-1)),f&&(f.prop&&!r&&\"innerHtml\"===(t=m(t))&&(t=\"innerHTML\"),f.camel&&!r&&(t=m(t)),f.sync&&(s=Sr(n,\"$event\"),r?wr(e,'\"update:\"+('+t+\")\",s,null,!1,0,p[d],!0):(wr(e,\"update:\"+m(t),s,null,!1,0,p[d]),g(t)!==m(t)&&wr(e,\"update:\"+g(t),s,null,!1,0,p[d])))),(f&&f.prop||!e.component&&vo(e.tag,e.attrsMap.type,t)?gr:_r)(e,t,n,p[d],r)):mo.test(t)?(t=t.replace(mo,\"\"),wr(e,t=(r=$o.test(t))?t.slice(1,-1):t,n,f,!1,0,p[d],r)):(r=!1,(u=(c=(t=t.replace(yo,\"\")).match(wo))&&c[1])&&(t=t.slice(0,-(u.length+1)),$o.test(u)&&(u=u.slice(1,-1),r=!0)),i=e,o=t,a=l,s=n,c=u,l=r,u=f,f=p[d],(i.directives||(i.directives=[])).push(Ar({name:o,rawName:a,value:s,arg:c,isDynamicArg:l,modifiers:u},f)),i.plain=!1)):(_r(e,t,JSON.stringify(n),p[d]),!e.component&&\"muted\"===t&&vo(e.tag,e.attrsMap.type,t)&&gr(e,t,\"true\",p[d]))}(e),e}function Do(e){var r,t;!(r=xr(e,\"v-for\"))||(t=function(){var e=r.match(go);if(e){var t={};t.for=e[2].trim();var n=e[1].trim().replace(bo,\"\"),e=n.match(_o);return e?(t.alias=n.replace(_o,\"\").trim(),t.iterator1=e[1].trim(),e[2]&&(t.iterator2=e[2].trim())):t.alias=n,t}}())&&$(e,t)}function Lo(e,t){e.ifConditions||(e.ifConditions=[]),e.ifConditions.push(t)}function Mo(e){var t=e.name.replace(ko,\"\");return t||\"#\"!==e.name[0]&&(t=\"default\"),$o.test(t)?{name:t.slice(1,-1),dynamic:!0}:{name:'\"'+t+'\"',dynamic:!1}}var Io=/^xmlns:NS\\d+/,Fo=/^NS\\d+:/;function Po(e){return Eo(e.tag,e.attrsList.slice(),e.parent)}var Ro,Ho,We=[K,We,{preTransformNode:function(e,t){if(\"input\"===e.tag){var n,r=e.attrsMap;if(r[\"v-model\"]&&((r[\":type\"]||r[\"v-bind:type\"])&&(n=Cr(e,\"type\")),n=!r.type&&!n&&r[\"v-bind\"]?\"(\"+r[\"v-bind\"]+\").type\":n)){var i=xr(e,\"v-if\",!0),o=i?\"&&(\"+i+\")\":\"\",a=null!=xr(e,\"v-else\",!0),s=xr(e,\"v-else-if\",!0),c=Po(e);Do(c),br(c,\"type\",\"checkbox\"),jo(c,t),c.processed=!0,c.if=\"(\"+n+\")==='checkbox'\"+o,Lo(c,{exp:c.if,block:c});r=Po(e);xr(r,\"v-for\",!0),br(r,\"type\",\"radio\"),jo(r,t),Lo(c,{exp:\"(\"+n+\")==='radio'\"+o,block:r});e=Po(e);return xr(e,\"v-for\",!0),br(e,\":type\",n),jo(e,t),Lo(c,{exp:i,block:e}),a?c.else=!0:s&&(c.elseif=s),c}}}}],We={expectHTML:!0,modules:We,directives:{model:function(e,t,n){var r,i,o,a,s,c,l,u,f,p=t.value,d=t.modifiers,v=e.tag,h=e.attrsMap.type;if(e.component)return Or(e,p,d),!1;if(\"select\"===v)wr(e,\"change\",'var $$selectedVal = Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(d&&d.number?\"_n(val)\":\"val\")+\"});\"+\" \"+Sr(p,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),null,!0);else if(\"input\"===v&&\"checkbox\"===h)s=e,c=p,l=d&&d.number,u=Cr(s,\"value\")||\"null\",f=Cr(s,\"true-value\")||\"true\",t=Cr(s,\"false-value\")||\"false\",gr(s,\"checked\",\"Array.isArray(\"+c+\")?_i(\"+c+\",\"+u+\")>-1\"+(\"true\"===f?\":(\"+c+\")\":\":_q(\"+c+\",\"+f+\")\")),wr(s,\"change\",\"var $$a=\"+c+\",$$el=$event.target,$$c=$$el.checked?(\"+f+\"):(\"+t+\");if(Array.isArray($$a)){var $$v=\"+(l?\"_n(\"+u+\")\":u)+\",$$i=_i($$a,$$v);if($$el.checked){$$i<0&&(\"+Sr(c,\"$$a.concat([$$v])\")+\")}else{$$i>-1&&(\"+Sr(c,\"$$a.slice(0,$$i).concat($$a.slice($$i+1))\")+\")}}else{\"+Sr(c,\"$$c\")+\"}\",null,!0);else if(\"input\"===v&&\"radio\"===h)r=e,i=p,o=d&&d.number,a=Cr(r,\"value\")||\"null\",gr(r,\"checked\",\"_q(\"+i+\",\"+(a=o?\"_n(\"+a+\")\":a)+\")\"),wr(r,\"change\",Sr(i,a),null,!0);else if(\"input\"===v||\"textarea\"===v)u=p,h=(c=e).attrsMap.type,r=(o=d||{}).lazy,i=o.number,a=o.trim,o=!r&&\"range\"!==h,r=r?\"change\":\"range\"===h?Lr:\"input\",h=a?\"$event.target.value.trim()\":\"$event.target.value\",h=Sr(u,h=i?\"_n(\"+h+\")\":h),o&&(h=\"if($event.target.composing)return;\"+h),gr(c,\"value\",\"(\"+u+\")\"),wr(c,r,h,null,!0),(a||i)&&wr(c,\"blur\",\"$forceUpdate()\");else if(!j.isReservedTag(v))return Or(e,p,d),!1;return!0},text:function(e,t){t.value&&gr(e,\"textContent\",\"_s(\"+t.value+\")\",t)},html:function(e,t){t.value&&gr(e,\"innerHTML\",\"_s(\"+t.value+\")\",t)}},isPreTag:function(e){return\"pre\"===e},isUnaryTag:X,mustUseProp:J,canBeLeftOpenTag:Qn,isReservedTag:Bn,getTagNamespace:Kn,staticKeys:We.reduce(function(e,t){return e.concat(t.staticKeys||[])},[]).join(\",\")},Bo=e(function(e){return a(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs,start,end,rawAttrsMap\"+(e?\",\"+e:\"\"))});function Uo(e,t){e&&(Ro=Bo(t.staticKeys||\"\"),Ho=t.isReservedTag||x,function e(t){var n;if(t.static=2!==(n=t).type&&(3===n.type||!(!n.pre&&(n.hasBindings||n.if||n.for||u(n.tag)||!Ho(n.tag)||function(e){for(;e.parent;){if(\"template\"!==(e=e.parent).tag)return;if(e.for)return 1}}(n)||!Object.keys(n).every(Ro)))),1===t.type&&(Ho(t.tag)||\"slot\"===t.tag||null!=t.attrsMap[\"inline-template\"])){for(var r=0,i=t.children.length;r<i;r++){var o=t.children[r];e(o),o.static||(t.static=!1)}if(t.ifConditions)for(var a=1,s=t.ifConditions.length;a<s;a++){var c=t.ifConditions[a].block;e(c),c.static||(t.static=!1)}}}(e),function e(t,n){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=n),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return t.staticRoot=!0,0;if(t.staticRoot=!1,t.children)for(var r=0,i=t.children.length;r<i;r++)e(t.children[r],n||!!t.for);if(t.ifConditions)for(var o=1,a=t.ifConditions.length;o<a;o++)e(t.ifConditions[o].block,n)}}(e,!1))}var zo=/^([\\w$_]+|\\([^)]*?\\))\\s*=>|^function(?:\\s+[\\w$]+)?\\s*\\(/,Vo=/\\([^)]*?\\);*$/,Ko=/^[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['[^']*?']|\\[\"[^\"]*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*$/,Jo={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},qo={esc:[\"Esc\",\"Escape\"],tab:\"Tab\",enter:\"Enter\",space:[\" \",\"Spacebar\"],up:[\"Up\",\"ArrowUp\"],left:[\"Left\",\"ArrowLeft\"],right:[\"Right\",\"ArrowRight\"],down:[\"Down\",\"ArrowDown\"],delete:[\"Backspace\",\"Delete\",\"Del\"]},Wo=function(e){return\"if(\"+e+\")return null;\"},Zo={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:Wo(\"$event.target !== $event.currentTarget\"),ctrl:Wo(\"!$event.ctrlKey\"),shift:Wo(\"!$event.shiftKey\"),alt:Wo(\"!$event.altKey\"),meta:Wo(\"!$event.metaKey\"),left:Wo(\"'button' in $event && $event.button !== 0\"),middle:Wo(\"'button' in $event && $event.button !== 1\"),right:Wo(\"'button' in $event && $event.button !== 2\")};function Go(e,t){var n,t=t?\"nativeOn:\":\"on:\",r=\"\",i=\"\";for(n in e){var o=function t(e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return t(e)}).join(\",\")+\"]\";var n=Ko.test(e.value),r=zo.test(e.value),i=Ko.test(e.value.replace(Vo,\"\"));if(e.modifiers){var o,a,s=\"\",c=\"\",l=[];for(o in e.modifiers)Zo[o]?(c+=Zo[o],Jo[o]&&l.push(o)):\"exact\"===o?(a=e.modifiers,c+=Wo([\"ctrl\",\"shift\",\"alt\",\"meta\"].filter(function(e){return!a[e]}).map(function(e){return\"$event.\"+e+\"Key\"}).join(\"||\"))):l.push(o);return l.length&&(s+=\"if(!$event.type.indexOf('key')&&\"+l.map(Xo).join(\"&&\")+\")return null;\"),c&&(s+=c),\"function($event){\"+s+(n?\"return \"+e.value+\"($event)\":r?\"return (\"+e.value+\")($event)\":i?\"return \"+e.value:e.value)+\"}\"}return n||r?e.value:\"function($event){\"+(i?\"return \"+e.value:e.value)+\"}\"}(e[n]);e[n]&&e[n].dynamic?i+=n+\",\"+o+\",\":r+='\"'+n+'\":'+o+\",\"}return r=\"{\"+r.slice(0,-1)+\"}\",i?t+\"_d(\"+r+\",[\"+i.slice(0,-1)+\"])\":t+r}function Xo(e){var t=parseInt(e,10);if(t)return\"$event.keyCode!==\"+t;var n=Jo[e],t=qo[e];return\"_k($event.keyCode,\"+JSON.stringify(e)+\",\"+JSON.stringify(n)+\",$event.key,\"+JSON.stringify(t)+\")\"}var Yo={on:function(e,t){e.wrapListeners=function(e){return\"_g(\"+e+\",\"+t.value+\")\"}},bind:function(t,n){t.wrapData=function(e){return\"_b(\"+e+\",'\"+t.tag+\"',\"+n.value+\",\"+(n.modifiers&&n.modifiers.prop?\"true\":\"false\")+(n.modifiers&&n.modifiers.sync?\",true\":\"\")+\")\"}},cloak:C},Qo=function(e){this.options=e,this.warn=e.warn||mr,this.transforms=yr(e.modules,\"transformCode\"),this.dataGenFns=yr(e.modules,\"genData\"),this.directives=$($({},Yo),e.directives);var t=e.isReservedTag||x;this.maybeComponent=function(e){return!!e.component||!t(e.tag)},this.onceId=0,this.staticRenderFns=[],this.pre=!1};function ea(e,t){t=new Qo(t);return{render:\"with(this){return \"+(e?ta(e,t):'_c(\"div\")')+\"}\",staticRenderFns:t.staticRenderFns}}function ta(e,t){if(e.parent&&(e.pre=e.pre||e.parent.pre),e.staticRoot&&!e.staticProcessed)return na(e,t);if(e.once&&!e.onceProcessed)return ra(e,t);if(e.for&&!e.forProcessed)return oa(e,t);if(e.if&&!e.ifProcessed)return ia(e,t);if(\"template\"!==e.tag||e.slotTarget||t.pre){if(\"slot\"===e.tag)return s=(a=e).slotName||'\"default\"',c=la(a,t),l=\"_t(\"+s+(c?\",\"+c:\"\"),s=a.attrs||a.dynamicAttrs?pa((a.attrs||[]).concat(a.dynamicAttrs||[]).map(function(e){return{name:m(e.name),value:e.value,dynamic:e.dynamic}})):null,a=a.attrsMap[\"v-bind\"],!s&&!a||c||(l+=\",null\"),s&&(l+=\",\"+s),a&&(l+=(s?\"\":\",null\")+\",\"+a),l+\")\";var n,r;r=e.component?(s=e.component,a=t,o=(l=e).inlineTemplate?null:la(l,a,!0),\"_c(\"+s+\",\"+aa(l,a)+(o?\",\"+o:\"\")+\")\"):((!e.plain||e.pre&&t.maybeComponent(e))&&(n=aa(e,t)),o=e.inlineTemplate?null:la(e,t,!0),\"_c('\"+e.tag+\"'\"+(n?\",\"+n:\"\")+(o?\",\"+o:\"\")+\")\");for(var i=0;i<t.transforms.length;i++)r=t.transforms[i](e,r);return r}var o,a,s,c,l;return la(e,t)||\"void 0\"}function na(e,t){e.staticProcessed=!0;var n=t.pre;return e.pre&&(t.pre=e.pre),t.staticRenderFns.push(\"with(this){return \"+ta(e,t)+\"}\"),t.pre=n,\"_m(\"+(t.staticRenderFns.length-1)+(e.staticInFor?\",true\":\"\")+\")\"}function ra(e,t){if(e.onceProcessed=!0,e.if&&!e.ifProcessed)return ia(e,t);if(e.staticInFor){for(var n=\"\",r=e.parent;r;){if(r.for){n=r.key;break}r=r.parent}return n?\"_o(\"+ta(e,t)+\",\"+t.onceId+++\",\"+n+\")\":ta(e,t)}return na(e,t)}function ia(e,t,n,r){return e.ifProcessed=!0,function e(t,n,r,i){if(!t.length)return i||\"_e()\";var o=t.shift();return o.exp?\"(\"+o.exp+\")?\"+a(o.block)+\":\"+e(t,n,r,i):\"\"+a(o.block);function a(e){return(r||(e.once?ra:ta))(e,n)}}(e.ifConditions.slice(),t,n,r)}function oa(e,t,n,r){var i=e.for,o=e.alias,a=e.iterator1?\",\"+e.iterator1:\"\",s=e.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed=!0,(r||\"_l\")+\"((\"+i+\"),function(\"+o+a+s+\"){return \"+(n||ta)(e,t)+\"})\"}function aa(t,n){var e=\"{\",r=function(e,t){var n=e.directives;if(n){for(var r=\"directives:[\",i=!1,o=0,a=n.length;o<a;o++){var s=n[o],c=!0,l=t.directives[s.name];(c=l?!!l(e,s,t.warn):c)&&(i=!0,r+='{name:\"'+s.name+'\",rawName:\"'+s.rawName+'\"'+(s.value?\",value:(\"+s.value+\"),expression:\"+JSON.stringify(s.value):\"\")+(s.arg?\",arg:\"+(s.isDynamicArg?s.arg:'\"'+s.arg+'\"'):\"\")+(s.modifiers?\",modifiers:\"+JSON.stringify(s.modifiers):\"\")+\"},\")}return i?r.slice(0,-1)+\"]\":void 0}}(t,n);r&&(e+=r+\",\"),t.key&&(e+=\"key:\"+t.key+\",\"),t.ref&&(e+=\"ref:\"+t.ref+\",\"),t.refInFor&&(e+=\"refInFor:true,\"),t.pre&&(e+=\"pre:true,\"),t.component&&(e+='tag:\"'+t.tag+'\",');for(var i,o=0;o<n.dataGenFns.length;o++)e+=n.dataGenFns[o](t);return t.attrs&&(e+=\"attrs:\"+pa(t.attrs)+\",\"),t.props&&(e+=\"domProps:\"+pa(t.props)+\",\"),t.events&&(e+=Go(t.events,!1)+\",\"),t.nativeEvents&&(e+=Go(t.nativeEvents,!0)+\",\"),t.slotTarget&&!t.slotScope&&(e+=\"slot:\"+t.slotTarget+\",\"),t.scopedSlots&&(e+=function(e,t,n){var r=e.for||Object.keys(t).some(function(e){e=t[e];return e.slotTargetDynamic||e.if||e.for||sa(e)}),i=!!e.if;if(!r)for(var o=e.parent;o;){if(o.slotScope&&o.slotScope!==To||o.for){r=!0;break}o.if&&(i=!0),o=o.parent}e=Object.keys(t).map(function(e){return ca(t[e],n)}).join(\",\");return\"scopedSlots:_u([\"+e+\"]\"+(r?\",null,true\":\"\")+(!r&&i?\",null,false,\"+function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return t>>>0}(e):\"\")+\")\"}(t,t.scopedSlots,n)+\",\"),t.model&&(e+=\"model:{value:\"+t.model.value+\",callback:\"+t.model.callback+\",expression:\"+t.model.expression+\"},\"),t.inlineTemplate&&(i=function(){var e=t.children[0];if(e&&1===e.type){e=ea(e,n.options);return\"inlineTemplate:{render:function(){\"+e.render+\"},staticRenderFns:[\"+e.staticRenderFns.map(function(e){return\"function(){\"+e+\"}\"}).join(\",\")+\"]}\"}}())&&(e+=i+\",\"),e=e.replace(/,$/,\"\")+\"}\",t.dynamicAttrs&&(e=\"_b(\"+e+',\"'+t.tag+'\",'+pa(t.dynamicAttrs)+\")\"),t.wrapData&&(e=t.wrapData(e)),e=t.wrapListeners?t.wrapListeners(e):e}function sa(e){return 1===e.type&&(\"slot\"===e.tag||e.children.some(sa))}function ca(e,t){var n=e.attrsMap[\"slot-scope\"];if(e.if&&!e.ifProcessed&&!n)return ia(e,t,ca,\"null\");if(e.for&&!e.forProcessed)return oa(e,t,ca);var r=e.slotScope===To?\"\":String(e.slotScope),t=\"function(\"+r+\"){return \"+(\"template\"===e.tag?e.if&&n?\"(\"+e.if+\")?\"+(la(e,t)||\"undefined\")+\":undefined\":la(e,t)||\"undefined\":ta(e,t))+\"}\";return\"{key:\"+(e.slotTarget||'\"default\"')+\",fn:\"+t+(r?\"\":\",proxy:true\")+\"}\"}function la(e,t,n,r,i){var o=e.children;if(o.length){var a=o[0];if(1===o.length&&a.for&&\"template\"!==a.tag&&\"slot\"!==a.tag){e=n?t.maybeComponent(a)?\",1\":\",0\":\"\";return(r||ta)(a,t)+e}var n=n?function(e,t){for(var n=0,r=0;r<e.length;r++){var i=e[r];if(1===i.type){if(ua(i)||i.ifConditions&&i.ifConditions.some(function(e){return ua(e.block)})){n=2;break}(t(i)||i.ifConditions&&i.ifConditions.some(function(e){return t(e.block)}))&&(n=1)}}return n}(o,t.maybeComponent):0,s=i||fa;return\"[\"+o.map(function(e){return s(e,t)}).join(\",\")+\"]\"+(n?\",\"+n:\"\")}}function ua(e){return void 0!==e.for||\"template\"===e.tag||\"slot\"===e.tag}function fa(e,t){return 1===e.type?ta(e,t):3===e.type&&e.isComment?\"_e(\"+JSON.stringify(e.text)+\")\":\"_v(\"+(2===e.type?e.expression:da(JSON.stringify(e.text)))+\")\"}function pa(e){for(var t=\"\",n=\"\",r=0;r<e.length;r++){var i=e[r],o=da(i.value);i.dynamic?n+=i.name+\",\"+o+\",\":t+='\"'+i.name+'\":'+o+\",\"}return t=\"{\"+t.slice(0,-1)+\"}\",n?\"_d(\"+t+\",[\"+n.slice(0,-1)+\"])\":t}function da(e){return e.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}function va(t,n){try{return new Function(t)}catch(e){return n.push({err:e,code:t}),C}}new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\");var ha,ma,ya,ga,_a,We=(ha=function(e,t){e=No(e.trim(),t);!1!==t.optimize&&Uo(e,t);t=ea(e,t);return{ast:e,render:t.render,staticRenderFns:t.staticRenderFns}},ya=We,{compile:$a,compileToFunctions:(ga=$a,_a=Object.create(null),function(e,t,n){(t=$({},t)).warn,delete t.warn;var r=t.delimiters?String(t.delimiters)+e:e;if(_a[r])return _a[r];var e=ga(e,t),t={},i=[];return t.render=va(e.render,i),t.staticRenderFns=e.staticRenderFns.map(function(e){return va(e,i)}),_a[r]=t})}),ba=We.compileToFunctions;function $a(e,t){var n=Object.create(ya),r=[],i=[];if(t)for(var o in t.modules&&(n.modules=(ya.modules||[]).concat(t.modules)),t.directives&&(n.directives=$(Object.create(ya.directives||null),t.directives)),t)\"modules\"!==o&&\"directives\"!==o&&(n[o]=t[o]);n.warn=function(e,t,n){(n?i:r).push(e)};e=ha(e.trim(),n);return e.errors=r,e.tips=i,e}function wa(e){return(ma=ma||document.createElement(\"div\")).innerHTML=e?'<a href=\"\\n\"/>':'<div a=\"\\n\"/>',0<ma.innerHTML.indexOf(\"&#10;\")}var Ca=!!z&&wa(!1),xa=!!z&&wa(!0),ka=e(function(e){e=Wn(e);return e&&e.innerHTML}),Aa=bn.prototype.$mount;return bn.prototype.$mount=function(e,t){if((e=e&&Wn(e))===document.body||e===document.documentElement)return this;var n=this.$options;if(!n.render){var r,i=n.template;if(i)if(\"string\"==typeof i)\"#\"===i.charAt(0)&&(i=ka(i));else{if(!i.nodeType)return this;i=i.innerHTML}else e&&(i=function(e){if(e.outerHTML)return e.outerHTML;var t=document.createElement(\"div\");return t.appendChild(e.cloneNode(!0)),t.innerHTML}(e));i&&(i=(r=ba(i,{outputSourceRange:!1,shouldDecodeNewlines:Ca,shouldDecodeNewlinesForHref:xa,delimiters:n.delimiters,comments:n.comments},this)).render,r=r.staticRenderFns,n.render=i,n.staticRenderFns=r)}return Aa.call(this,e,t)},bn.compile=ba,bn});"
  },
  {
    "path": "third-party/webuploader/webuploader.css",
    "content": ":root {\n    --webuploader-color-primary: var(--color-primary, #00B7EE);\n    --webuploader-color-content-bg: var(--color-content-bg, #FFFFFF);\n}\n\n.webuploader-container {\n    position: relative\n}\n\n.webuploader-element-invisible {\n    position: absolute !important;\n    clip: rect(1px 1px 1px 1px);\n    clip: rect(1px, 1px, 1px, 1px)\n}\n\n.webuploader-pick {\n    position: relative;\n    display: block;\n    cursor: pointer;\n    padding: 0;\n    color: #666;\n    text-align: center;\n    border-radius: 2px;\n    overflow: hidden;\n}\n\n.webuploader-pick-hover {\n}\n\n.webuploader-pick-disable {\n    opacity: .6;\n    pointer-events: none\n}\n\n.webuploader-list {\n    display: block;\n    margin: 0;\n    padding: 0;\n    position: static;\n    border: 1px solid #EEE;\n    border-radius: 0.2rem;\n    padding: 0.2rem;\n    background-color: var(--webuploader-color-content-bg);\n}\n\n.webuploader-list:empty {\n    display: none;\n}\n\n.webuploader-list > li {\n    list-style: none;\n    display: block;\n    border: 1px solid #EEE;\n    padding: 0px;\n    margin-bottom: 0.1rem;\n    background: var(--webuploader-color-content-bg);\n    border-radius: 0.2rem;\n}\n\n.webuploader-list > li .progress-box {\n    background-color: #EEE;\n    margin: 2px;\n    border-radius: 4px;\n}\n\n.webuploader-list > li .progress-box .progress-bar {\n    height: 3px;\n    background-color: var(--webuploader-color-primary);\n    border-radius: 4px;\n}\n\n.webuploader-list > li .progress-info {\n    font-size: 12px;\n    line-height: 20px;\n    width: 100%;\n    word-wrap: normal;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    overflow: hidden;\n    color: #999\n}\n\n.webuploader-list > li .progress-info .status {\n    display: inline;\n    line-height: 20px\n}\n\n\n"
  },
  {
    "path": "third-party/webuploader/webuploader.js",
    "content": "/*! WebUploader 1.0.0 */\n\n\n/**\n * @fileOverview 让内部各个部件的代码可以用[amd](https://github.com/amdjs/amdjs-api/wiki/AMD)模块定义方式组织起来。\n *\n * AMD API 内部的简单不完全实现，请忽略。只有当WebUploader被合并成一个文件的时候才会引入。\n */\n(function( root, factory ) {\n    var modules = {},\n\n        // 内部require, 简单不完全实现。\n        // https://github.com/amdjs/amdjs-api/wiki/require\n        _require = function( deps, callback ) {\n            var args, len, i;\n\n            // 如果deps不是数组，则直接返回指定module\n            if ( typeof deps === 'string' ) {\n                return getModule( deps );\n            } else {\n                args = [];\n                for( len = deps.length, i = 0; i < len; i++ ) {\n                    args.push( getModule( deps[ i ] ) );\n                }\n\n                return callback.apply( null, args );\n            }\n        },\n\n        // 内部define，暂时不支持不指定id.\n        _define = function( id, deps, factory ) {\n            if ( arguments.length === 2 ) {\n                factory = deps;\n                deps = null;\n            }\n\n            _require( deps || [], function() {\n                setModule( id, factory, arguments );\n            });\n        },\n\n        // 设置module, 兼容CommonJs写法。\n        setModule = function( id, factory, args ) {\n            var module = {\n                    exports: factory\n                },\n                returned;\n\n            if ( typeof factory === 'function' ) {\n                args.length || (args = [ _require, module.exports, module ]);\n                returned = factory.apply( null, args );\n                returned !== undefined && (module.exports = returned);\n            }\n\n            modules[ id ] = module.exports;\n        },\n\n        // 根据id获取module\n        getModule = function( id ) {\n            var module = modules[ id ] || root[ id ];\n\n            if ( !module ) {\n                throw new Error( '`' + id + '` is undefined' );\n            }\n\n            return module;\n        },\n\n        // 将所有modules，将路径ids装换成对象。\n        exportsTo = function( obj ) {\n            var key, host, parts, part, last, ucFirst;\n\n            // make the first character upper case.\n            ucFirst = function( str ) {\n                return str && (str.charAt( 0 ).toUpperCase() + str.substr( 1 ));\n            };\n\n            for ( key in modules ) {\n                host = obj;\n\n                if ( !modules.hasOwnProperty( key ) ) {\n                    continue;\n                }\n\n                parts = key.split('/');\n                last = ucFirst( parts.pop() );\n\n                while( (part = ucFirst( parts.shift() )) ) {\n                    host[ part ] = host[ part ] || {};\n                    host = host[ part ];\n                }\n\n                host[ last ] = modules[ key ];\n            }\n\n            return obj;\n        },\n\n        makeExport = function( dollar ) {\n            root.__dollar = dollar;\n\n            // exports every module.\n            return exportsTo( factory( root, _define, _require ) );\n        },\n\n        origin;\n\n    if ( typeof module === 'object' && typeof module.exports === 'object' ) {\n\n        // For CommonJS and CommonJS-like environments where a proper window is present,\n        module.exports = makeExport();\n    } else if ( typeof define === 'function' && define.amd ) {\n\n        // Allow using this built library as an AMD module\n        // in another project. That other project will only\n        // see this AMD call, not the internal modules in\n        // the closure below.\n        define([ 'jquery' ], makeExport );\n    } else {\n\n        // Browser globals case. Just assign the\n        // result to a property on the global.\n        origin = root.WebUploader;\n        root.WebUploader = makeExport();\n        root.WebUploader.noConflict = function() {\n            root.WebUploader = origin;\n        };\n    }\n})( window, function( window, define, require ) {\n\n\n    /**\n     * @fileOverview jQuery or Zepto\n     * @require \"jquery\"\n     * @require \"zepto\"\n     */\n    define('dollar-third',[],function() {\n        var req = window.require;\n        var $ = window.__dollar || \n            window.jQuery || \n            window.Zepto || \n            req('jquery') || \n            req('zepto');\n    \n        if ( !$ ) {\n            throw new Error('jQuery or Zepto not found!');\n        }\n    \n        return $;\n    });\n    \n    /**\n     * @fileOverview Dom 操作相关\n     */\n    define('dollar',[\n        'dollar-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 使用jQuery的Promise\n     */\n    define('promise-third',[\n        'dollar'\n    ], function( $ ) {\n        return {\n            Deferred: $.Deferred,\n            when: $.when,\n    \n            isPromise: function( anything ) {\n                return anything && typeof anything.then === 'function';\n            }\n        };\n    });\n    /**\n     * @fileOverview Promise/A+\n     */\n    define('promise',[\n        'promise-third'\n    ], function( _ ) {\n        return _;\n    });\n    /**\n     * @fileOverview 基础类方法。\n     */\n    \n    /**\n     * Web Uploader内部类的详细说明，以下提及的功能类，都可以在`WebUploader`这个变量中访问到。\n     *\n     * As you know, Web Uploader的每个文件都是用过[AMD](https://github.com/amdjs/amdjs-api/wiki/AMD)规范中的`define`组织起来的, 每个Module都会有个module id.\n     * 默认module id为该文件的路径，而此路径将会转化成名字空间存放在WebUploader中。如：\n     *\n     * * module `base`：WebUploader.Base\n     * * module `file`: WebUploader.File\n     * * module `lib/dnd`: WebUploader.Lib.Dnd\n     * * module `runtime/html5/dnd`: WebUploader.Runtime.Html5.Dnd\n     *\n     *\n     * 以下文档中对类的使用可能省略掉了`WebUploader`前缀。\n     * @module WebUploader\n     * @title WebUploader API文档\n     */\n    define('base',[\n        'dollar',\n        'promise'\n    ], function( $, promise ) {\n    \n        var noop = function() {},\n            call = Function.call;\n    \n        // http://jsperf.com/uncurrythis\n        // 反科里化\n        function uncurryThis( fn ) {\n            return function() {\n                return call.apply( fn, arguments );\n            };\n        }\n    \n        function bindFn( fn, context ) {\n            return function() {\n                return fn.apply( context, arguments );\n            };\n        }\n    \n        function createObject( proto ) {\n            var f;\n    \n            if ( Object.create ) {\n                return Object.create( proto );\n            } else {\n                f = function() {};\n                f.prototype = proto;\n                return new f();\n            }\n        }\n    \n    \n        /**\n         * 基础类，提供一些简单常用的方法。\n         * @class Base\n         */\n        return {\n    \n            /**\n             * @property {String} version 当前版本号。\n             */\n            version: '1.0.0',\n    \n            /**\n             * @property {jQuery|Zepto} $ 引用依赖的jQuery或者Zepto对象。\n             */\n            $: $,\n    \n            Deferred: promise.Deferred,\n    \n            isPromise: promise.isPromise,\n    \n            when: promise.when,\n    \n            /**\n             * @description  简单的浏览器检查结果。\n             *\n             * * `webkit`  webkit版本号，如果浏览器为非webkit内核，此属性为`undefined`。\n             * * `chrome`  chrome浏览器版本号，如果浏览器为chrome，此属性为`undefined`。\n             * * `ie`  ie浏览器版本号，如果浏览器为非ie，此属性为`undefined`。**暂不支持ie10+**\n             * * `firefox`  firefox浏览器版本号，如果浏览器为非firefox，此属性为`undefined`。\n             * * `safari`  safari浏览器版本号，如果浏览器为非safari，此属性为`undefined`。\n             * * `opera`  opera浏览器版本号，如果浏览器为非opera，此属性为`undefined`。\n             *\n             * @property {Object} [browser]\n             */\n            browser: (function( ua ) {\n                var ret = {},\n                    webkit = ua.match( /WebKit\\/([\\d.]+)/ ),\n                    chrome = ua.match( /Chrome\\/([\\d.]+)/ ) ||\n                        ua.match( /CriOS\\/([\\d.]+)/ ),\n    \n                    ie = ua.match( /MSIE\\s([\\d\\.]+)/ ) ||\n                        ua.match( /(?:trident)(?:.*rv:([\\w.]+))?/i ),\n                    firefox = ua.match( /Firefox\\/([\\d.]+)/ ),\n                    safari = ua.match( /Safari\\/([\\d.]+)/ ),\n                    opera = ua.match( /OPR\\/([\\d.]+)/ );\n    \n                webkit && (ret.webkit = parseFloat( webkit[ 1 ] ));\n                chrome && (ret.chrome = parseFloat( chrome[ 1 ] ));\n                ie && (ret.ie = parseFloat( ie[ 1 ] ));\n                firefox && (ret.firefox = parseFloat( firefox[ 1 ] ));\n                safari && (ret.safari = parseFloat( safari[ 1 ] ));\n                opera && (ret.opera = parseFloat( opera[ 1 ] ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * @description  操作系统检查结果。\n             *\n             * * `android`  如果在android浏览器环境下，此值为对应的android版本号，否则为`undefined`。\n             * * `ios` 如果在ios浏览器环境下，此值为对应的ios版本号，否则为`undefined`。\n             * @property {Object} [os]\n             */\n            os: (function( ua ) {\n                var ret = {},\n    \n                    // osx = !!ua.match( /\\(Macintosh\\; Intel / ),\n                    android = ua.match( /(?:Android);?[\\s\\/]+([\\d.]+)?/ ),\n                    ios = ua.match( /(?:iPad|iPod|iPhone).*OS\\s([\\d_]+)/ );\n    \n                // osx && (ret.osx = true);\n                android && (ret.android = parseFloat( android[ 1 ] ));\n                ios && (ret.ios = parseFloat( ios[ 1 ].replace( /_/g, '.' ) ));\n    \n                return ret;\n            })( navigator.userAgent ),\n    \n            /**\n             * 实现类与类之间的继承。\n             * @method inherits\n             * @grammar Base.inherits( super ) => child\n             * @grammar Base.inherits( super, protos ) => child\n             * @grammar Base.inherits( super, protos, statics ) => child\n             * @param  {Class} super 父类\n             * @param  {Object | Function} [protos] 子类或者对象。如果对象中包含constructor，子类将是用此属性值。\n             * @param  {Function} [protos.constructor] 子类构造器，不指定的话将创建个临时的直接执行父类构造器的方法。\n             * @param  {Object} [statics] 静态属性或方法。\n             * @return {Class} 返回子类。\n             * @example\n             * function Person() {\n             *     console.log( 'Super' );\n             * }\n             * Person.prototype.hello = function() {\n             *     console.log( 'hello' );\n             * };\n             *\n             * var Manager = Base.inherits( Person, {\n             *     world: function() {\n             *         console.log( 'World' );\n             *     }\n             * });\n             *\n             * // 因为没有指定构造器，父类的构造器将会执行。\n             * var instance = new Manager();    // => Super\n             *\n             * // 继承子父类的方法\n             * instance.hello();    // => hello\n             * instance.world();    // => World\n             *\n             * // 子类的__super__属性指向父类\n             * console.log( Manager.__super__ === Person );    // => true\n             */\n            inherits: function( Super, protos, staticProtos ) {\n                var child;\n    \n                if ( typeof protos === 'function' ) {\n                    child = protos;\n                    protos = null;\n                } else if ( protos && protos.hasOwnProperty('constructor') ) {\n                    child = protos.constructor;\n                } else {\n                    child = function() {\n                        return Super.apply( this, arguments );\n                    };\n                }\n    \n                // 复制静态方法\n                $.extend( true, child, Super, staticProtos || {} );\n    \n                /* jshint camelcase: false */\n    \n                // 让子类的__super__属性指向父类。\n                child.__super__ = Super.prototype;\n    \n                // 构建原型，添加原型方法或属性。\n                // 暂时用Object.create实现。\n                child.prototype = createObject( Super.prototype );\n                protos && $.extend( true, child.prototype, protos );\n    \n                return child;\n            },\n    \n            /**\n             * 一个不做任何事情的方法。可以用来赋值给默认的callback.\n             * @method noop\n             */\n            noop: noop,\n    \n            /**\n             * 返回一个新的方法，此方法将已指定的`context`来执行。\n             * @grammar Base.bindFn( fn, context ) => Function\n             * @method bindFn\n             * @example\n             * var doSomething = function() {\n             *         console.log( this.name );\n             *     },\n             *     obj = {\n             *         name: 'Object Name'\n             *     },\n             *     aliasFn = Base.bind( doSomething, obj );\n             *\n             *  aliasFn();    // => Object Name\n             *\n             */\n            bindFn: bindFn,\n    \n            /**\n             * 引用Console.log如果存在的话，否则引用一个[空函数noop](#WebUploader:Base.noop)。\n             * @grammar Base.log( args... ) => undefined\n             * @method log\n             */\n            log: (function() {\n                if ( window.console ) {\n                    return bindFn( console.log, console );\n                }\n                return noop;\n            })(),\n    \n            nextTick: (function() {\n    \n                return function( cb ) {\n                    setTimeout( cb, 1 );\n                };\n    \n                // @bug 当浏览器不在当前窗口时就停了。\n                // var next = window.requestAnimationFrame ||\n                //     window.webkitRequestAnimationFrame ||\n                //     window.mozRequestAnimationFrame ||\n                //     function( cb ) {\n                //         window.setTimeout( cb, 1000 / 60 );\n                //     };\n    \n                // // fix: Uncaught TypeError: Illegal invocation\n                // return bindFn( next, window );\n            })(),\n    \n            /**\n             * 被[uncurrythis](http://www.2ality.com/2011/11/uncurrying-this.html)的数组slice方法。\n             * 将用来将非数组对象转化成数组对象。\n             * @grammar Base.slice( target, start[, end] ) => Array\n             * @method slice\n             * @example\n             * function doSomthing() {\n             *     var args = Base.slice( arguments, 1 );\n             *     console.log( args );\n             * }\n             *\n             * doSomthing( 'ignored', 'arg2', 'arg3' );    // => Array [\"arg2\", \"arg3\"]\n             */\n            slice: uncurryThis( [].slice ),\n    \n            /**\n             * 生成唯一的ID\n             * @method guid\n             * @grammar Base.guid() => String\n             * @grammar Base.guid( prefx ) => String\n             */\n            guid: (function() {\n                var counter = 0;\n    \n                return function( prefix ) {\n                    var guid = (+new Date()).toString( 32 ),\n                        i = 0;\n    \n                    for ( ; i < 5; i++ ) {\n                        guid += Math.floor( Math.random() * 65535 ).toString( 32 );\n                    }\n    \n                    return (prefix || 'wu_') + guid + (counter++).toString( 32 );\n                };\n            })(),\n    \n            /**\n             * 格式化文件大小, 输出成带单位的字符串\n             * @method formatSize\n             * @grammar Base.formatSize( size ) => String\n             * @grammar Base.formatSize( size, pointLength ) => String\n             * @grammar Base.formatSize( size, pointLength, units ) => String\n             * @param {Number} size 文件大小\n             * @param {Number} [pointLength=2] 精确到的小数点数。\n             * @param {Array} [units=[ 'B', 'K', 'M', 'G', 'TB' ]] 单位数组。从字节，到千字节，一直往上指定。如果单位数组里面只指定了到了K(千字节)，同时文件大小大于M, 此方法的输出将还是显示成多少K.\n             * @example\n             * console.log( Base.formatSize( 100 ) );    // => 100B\n             * console.log( Base.formatSize( 1024 ) );    // => 1.00K\n             * console.log( Base.formatSize( 1024, 0 ) );    // => 1K\n             * console.log( Base.formatSize( 1024 * 1024 ) );    // => 1.00M\n             * console.log( Base.formatSize( 1024 * 1024 * 1024 ) );    // => 1.00G\n             * console.log( Base.formatSize( 1024 * 1024 * 1024, 0, ['B', 'KB', 'MB'] ) );    // => 1024MB\n             */\n            formatSize: function( size, pointLength, units ) {\n                var unit;\n    \n                units = units || [ 'B', 'K', 'M', 'G', 'TB' ];\n    \n                while ( (unit = units.shift()) && size > 1024 ) {\n                    size = size / 1024;\n                }\n    \n                return (unit === 'B' ? size : size.toFixed( pointLength || 2 )) +\n                        unit;\n            }\n        };\n    });\n    /**\n     * 事件处理类，可以独立使用，也可以扩展给对象使用。\n     * @fileOverview Mediator\n     */\n    define('mediator',[\n        'base'\n    ], function( Base ) {\n        var $ = Base.$,\n            slice = [].slice,\n            separator = /\\s+/,\n            protos;\n    \n        // 根据条件过滤出事件handlers.\n        function findHandlers( arr, name, callback, context ) {\n            return $.grep( arr, function( handler ) {\n                return handler &&\n                        (!name || handler.e === name) &&\n                        (!callback || handler.cb === callback ||\n                        handler.cb._cb === callback) &&\n                        (!context || handler.ctx === context);\n            });\n        }\n    \n        function eachEvent( events, callback, iterator ) {\n            // 不支持对象，只支持多个event用空格隔开\n            $.each( (events || '').split( separator ), function( _, key ) {\n                iterator( key, callback );\n            });\n        }\n    \n        function triggerHanders( events, args ) {\n            var stoped = false,\n                i = -1,\n                len = events.length,\n                handler;\n    \n            while ( ++i < len ) {\n                handler = events[ i ];\n    \n                if ( handler.cb.apply( handler.ctx2, args ) === false ) {\n                    stoped = true;\n                    break;\n                }\n            }\n    \n            return !stoped;\n        }\n    \n        protos = {\n    \n            /**\n             * 绑定事件。\n             *\n             * `callback`方法在执行时，arguments将会来源于trigger的时候携带的参数。如\n             * ```javascript\n             * var obj = {};\n             *\n             * // 使得obj有事件行为\n             * Mediator.installTo( obj );\n             *\n             * obj.on( 'testa', function( arg1, arg2 ) {\n             *     console.log( arg1, arg2 ); // => 'arg1', 'arg2'\n             * });\n             *\n             * obj.trigger( 'testa', 'arg1', 'arg2' );\n             * ```\n             *\n             * 如果`callback`中，某一个方法`return false`了，则后续的其他`callback`都不会被执行到。\n             * 切会影响到`trigger`方法的返回值，为`false`。\n             *\n             * `on`还可以用来添加一个特殊事件`all`, 这样所有的事件触发都会响应到。同时此类`callback`中的arguments有一个不同处，\n             * 就是第一个参数为`type`，记录当前是什么事件在触发。此类`callback`的优先级比脚低，会再正常`callback`执行完后触发。\n             * ```javascript\n             * obj.on( 'all', function( type, arg1, arg2 ) {\n             *     console.log( type, arg1, arg2 ); // => 'testa', 'arg1', 'arg2'\n             * });\n             * ```\n             *\n             * @method on\n             * @grammar on( name, callback[, context] ) => self\n             * @param  {String}   name     事件名，支持多个事件用空格隔开\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             * @class Mediator\n             */\n            on: function( name, callback, context ) {\n                var me = this,\n                    set;\n    \n                if ( !callback ) {\n                    return this;\n                }\n    \n                set = this._events || (this._events = []);\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var handler = { e: name };\n    \n                    handler.cb = callback;\n                    handler.ctx = context;\n                    handler.ctx2 = context || me;\n                    handler.id = set.length;\n    \n                    set.push( handler );\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 绑定事件，且当handler执行完后，自动解除绑定。\n             * @method once\n             * @grammar once( name, callback[, context] ) => self\n             * @param  {String}   name     事件名\n             * @param  {Function} callback 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            once: function( name, callback, context ) {\n                var me = this;\n    \n                if ( !callback ) {\n                    return me;\n                }\n    \n                eachEvent( name, callback, function( name, callback ) {\n                    var once = function() {\n                            me.off( name, once );\n                            return callback.apply( context || me, arguments );\n                        };\n    \n                    once._cb = callback;\n                    me.on( name, once, context );\n                });\n    \n                return me;\n            },\n    \n            /**\n             * 解除事件绑定\n             * @method off\n             * @grammar off( [name[, callback[, context] ] ] ) => self\n             * @param  {String}   [name]     事件名\n             * @param  {Function} [callback] 事件处理器\n             * @param  {Object}   [context]  事件处理器的上下文。\n             * @return {self} 返回自身，方便链式\n             * @chainable\n             */\n            off: function( name, cb, ctx ) {\n                var events = this._events;\n    \n                if ( !events ) {\n                    return this;\n                }\n    \n                if ( !name && !cb && !ctx ) {\n                    this._events = [];\n                    return this;\n                }\n    \n                eachEvent( name, cb, function( name, cb ) {\n                    $.each( findHandlers( events, name, cb, ctx ), function() {\n                        delete events[ this.id ];\n                    });\n                });\n    \n                return this;\n            },\n    \n            /**\n             * 触发事件\n             * @method trigger\n             * @grammar trigger( name[, args...] ) => self\n             * @param  {String}   type     事件名\n             * @param  {*} [...] 任意参数\n             * @return {Boolean} 如果handler中return false了，则返回false, 否则返回true\n             */\n            trigger: function( type ) {\n                var args, events, allEvents;\n    \n                if ( !this._events || !type ) {\n                    return this;\n                }\n    \n                args = slice.call( arguments, 1 );\n                events = findHandlers( this._events, type );\n                allEvents = findHandlers( this._events, 'all' );\n    \n                return triggerHanders( events, args ) &&\n                        triggerHanders( allEvents, arguments );\n            }\n        };\n    \n        /**\n         * 中介者，它本身是个单例，但可以通过[installTo](#WebUploader:Mediator:installTo)方法，使任何对象具备事件行为。\n         * 主要目的是负责模块与模块之间的合作，降低耦合度。\n         *\n         * @class Mediator\n         */\n        return $.extend({\n    \n            /**\n             * 可以通过这个接口，使任何对象具备事件功能。\n             * @method installTo\n             * @param  {Object} obj 需要具备事件行为的对象。\n             * @return {Object} 返回obj.\n             */\n            installTo: function( obj ) {\n                return $.extend( obj, protos );\n            }\n    \n        }, protos );\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('uploader',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$;\n    \n        /**\n         * 上传入口类。\n         * @class Uploader\n         * @constructor\n         * @grammar new Uploader( opts ) => Uploader\n         * @example\n         * var uploader = WebUploader.Uploader({\n         *     swf: 'path_of_swf/Uploader.swf',\n         *\n         *     // 开起分片上传。\n         *     chunked: true\n         * });\n         */\n        function Uploader( opts ) {\n            this.options = $.extend( true, {}, Uploader.options, opts );\n            this._init( this.options );\n        }\n    \n        // default Options\n        // widgets中有相应扩展\n        Uploader.options = {\n            // 是否开启调试模式\n            debug: false,\n        };\n        Mediator.installTo( Uploader.prototype );\n    \n        // 批量添加纯命令式方法。\n        $.each({\n            upload: 'start-upload',\n            stop: 'stop-upload',\n            getFile: 'get-file',\n            getFiles: 'get-files',\n            addFile: 'add-file',\n            addFiles: 'add-file',\n            sort: 'sort-files',\n            removeFile: 'remove-file',\n            cancelFile: 'cancel-file',\n            skipFile: 'skip-file',\n            retry: 'retry',\n            isInProgress: 'is-in-progress',\n            makeThumb: 'make-thumb',\n            md5File: 'md5-file',\n            getDimension: 'get-dimension',\n            addButton: 'add-btn',\n            predictRuntimeType: 'predict-runtime-type',\n            refresh: 'refresh',\n            disable: 'disable',\n            enable: 'enable',\n            reset: 'reset'\n        }, function( fn, command ) {\n            Uploader.prototype[ fn ] = function() {\n                return this.request( command, arguments );\n            };\n        });\n    \n        $.extend( Uploader.prototype, {\n            state: 'pending',\n    \n            _init: function( opts ) {\n                var me = this;\n    \n                me.request( 'init', opts, function() {\n                    me.state = 'ready';\n                    me.trigger('ready');\n                });\n            },\n    \n            /**\n             * 获取或者设置Uploader配置项。\n             * @method option\n             * @grammar option( key ) => *\n             * @grammar option( key, val ) => self\n             * @example\n             *\n             * // 初始状态图片上传前不会压缩\n             * var uploader = new WebUploader.Uploader({\n             *     compress: null;\n             * });\n             *\n             * // 修改后图片上传前，尝试将图片压缩到1600 * 1600\n             * uploader.option( 'compress', {\n             *     width: 1600,\n             *     height: 1600\n             * });\n             */\n            option: function( key, val ) {\n                var opts = this.options;\n    \n                // setter\n                if ( arguments.length > 1 ) {\n    \n                    if ( $.isPlainObject( val ) &&\n                            $.isPlainObject( opts[ key ] ) ) {\n                        $.extend( opts[ key ], val );\n                    } else {\n                        opts[ key ] = val;\n                    }\n    \n                } else {    // getter\n                    return key ? opts[ key ] : opts;\n                }\n            },\n    \n            /**\n             * 获取文件统计信息。返回一个包含一下信息的对象。\n             * * `successNum` 上传成功的文件数\n             * * `progressNum` 上传中的文件数\n             * * `cancelNum` 被删除的文件数\n             * * `invalidNum` 无效的文件数\n             * * `uploadFailNum` 上传失败的文件数\n             * * `queueNum` 还在队列中的文件数\n             * * `interruptNum` 被暂停的文件数\n             * @method getStats\n             * @grammar getStats() => Object\n             */\n            getStats: function() {\n                // return this._mgr.getStats.apply( this._mgr, arguments );\n                var stats = this.request('get-stats');\n    \n                return stats ? {\n                    successNum: stats.numOfSuccess,\n                    progressNum: stats.numOfProgress,\n    \n                    // who care?\n                    // queueFailNum: 0,\n                    cancelNum: stats.numOfCancel,\n                    invalidNum: stats.numOfInvalid,\n                    uploadFailNum: stats.numOfUploadFailed,\n                    queueNum: stats.numOfQueue,\n                    interruptNum: stats.numOfInterrupt\n                } : {};\n            },\n    \n            // 需要重写此方法来来支持opts.onEvent和instance.onEvent的处理器\n            trigger: function( type/*, args...*/ ) {\n                var args = [].slice.call( arguments, 1 ),\n                    opts = this.options,\n                    name = 'on' + type.substring( 0, 1 ).toUpperCase() +\n                        type.substring( 1 );\n    \n                if (\n                        // 调用通过on方法注册的handler.\n                        Mediator.trigger.apply( this, arguments ) === false ||\n    \n                        // 调用opts.onEvent\n                        $.isFunction( opts[ name ] ) &&\n                        opts[ name ].apply( this, args ) === false ||\n    \n                        // 调用this.onEvent\n                        $.isFunction( this[ name ] ) &&\n                        this[ name ].apply( this, args ) === false ||\n    \n                        // 广播所有uploader的事件。\n                        Mediator.trigger.apply( Mediator,\n                        [ this, type ].concat( args ) ) === false ) {\n    \n                    return false;\n                }\n    \n                return true;\n            },\n    \n            /**\n             * 销毁 webuploader 实例\n             * @method destroy\n             * @grammar destroy() => undefined\n             */\n            destroy: function() {\n                this.request( 'destroy', arguments );\n                this.off();\n            },\n    \n            // widgets/widget.js将补充此方法的详细文档。\n            request: Base.noop\n        });\n    \n        /**\n         * 创建Uploader实例，等同于new Uploader( opts );\n         * @method create\n         * @class Base\n         * @static\n         * @grammar Base.create( opts ) => Uploader\n         */\n        Base.create = Uploader.create = function( opts ) {\n            return new Uploader( opts );\n        };\n    \n        // 暴露Uploader，可以通过它来扩展业务逻辑。\n        Base.Uploader = Uploader;\n    \n        return Uploader;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/runtime',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            factories = {},\n    \n            // 获取对象的第一个key\n            getFirstKey = function( obj ) {\n                for ( var key in obj ) {\n                    if ( obj.hasOwnProperty( key ) ) {\n                        return key;\n                    }\n                }\n                return null;\n            };\n    \n        // 接口类。\n        function Runtime( options ) {\n            this.options = $.extend({\n                container: document.body\n            }, options );\n            this.uid = Base.guid('rt_');\n        }\n    \n        $.extend( Runtime.prototype, {\n    \n            getContainer: function() {\n                var opts = this.options,\n                    parent, container;\n    \n                if ( this._container ) {\n                    return this._container;\n                }\n    \n                parent = $( opts.container || document.body );\n                container = $( document.createElement('div') );\n    \n                container.attr( 'id', 'rt_' + this.uid );\n                container.css({\n                    position: 'absolute',\n                    top: '0px',\n                    left: '0px',\n                    width: '1px',\n                    height: '1px',\n                    overflow: 'hidden'\n                });\n    \n                parent.append( container );\n                parent.addClass('webuploader-container');\n                this._container = container;\n                this._parent = parent;\n                return container;\n            },\n    \n            init: Base.noop,\n            exec: Base.noop,\n    \n            destroy: function() {\n                this._container && this._container.remove();\n                this._parent && this._parent.removeClass('webuploader-container');\n                this.off();\n            }\n        });\n    \n        Runtime.orders = 'html5,flash';\n    \n    \n        /**\n         * 添加Runtime实现。\n         * @param {String} type    类型\n         * @param {Runtime} factory 具体Runtime实现。\n         */\n        Runtime.addRuntime = function( type, factory ) {\n            factories[ type ] = factory;\n        };\n    \n        Runtime.hasRuntime = function( type ) {\n            return !!(type ? factories[ type ] : getFirstKey( factories ));\n        };\n    \n        Runtime.create = function( opts, orders ) {\n            var type, runtime;\n    \n            orders = orders || Runtime.orders;\n            $.each( orders.split( /\\s*,\\s*/g ), function() {\n                if ( factories[ this ] ) {\n                    type = this;\n                    return false;\n                }\n            });\n    \n            type = type || getFirstKey( factories );\n    \n            if ( !type ) {\n                throw new Error('Runtime Error');\n            }\n    \n            runtime = new factories[ type ]( opts );\n            return runtime;\n        };\n    \n        Mediator.installTo( Runtime.prototype );\n        return Runtime;\n    });\n    \n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/client',[\n        'base',\n        'mediator',\n        'runtime/runtime'\n    ], function( Base, Mediator, Runtime ) {\n    \n        var cache;\n    \n        cache = (function() {\n            var obj = {};\n    \n            return {\n                add: function( runtime ) {\n                    obj[ runtime.uid ] = runtime;\n                },\n    \n                get: function( ruid, standalone ) {\n                    var i;\n    \n                    if ( ruid ) {\n                        return obj[ ruid ];\n                    }\n    \n                    for ( i in obj ) {\n                        // 有些类型不能重用，比如filepicker.\n                        if ( standalone && obj[ i ].__standalone ) {\n                            continue;\n                        }\n    \n                        return obj[ i ];\n                    }\n    \n                    return null;\n                },\n    \n                remove: function( runtime ) {\n                    delete obj[ runtime.uid ];\n                }\n            };\n        })();\n    \n        function RuntimeClient( component, standalone ) {\n            var deferred = Base.Deferred(),\n                runtime;\n    \n            this.uid = Base.guid('client_');\n    \n            // 允许runtime没有初始化之前，注册一些方法在初始化后执行。\n            this.runtimeReady = function( cb ) {\n                return deferred.done( cb );\n            };\n    \n            this.connectRuntime = function( opts, cb ) {\n    \n                // already connected.\n                if ( runtime ) {\n                    throw new Error('already connected!');\n                }\n    \n                deferred.done( cb );\n    \n                if ( typeof opts === 'string' && cache.get( opts ) ) {\n                    runtime = cache.get( opts );\n                }\n    \n                // 像filePicker只能独立存在，不能公用。\n                runtime = runtime || cache.get( null, standalone );\n    \n                // 需要创建\n                if ( !runtime ) {\n                    runtime = Runtime.create( opts, opts.runtimeOrder );\n                    runtime.__promise = deferred.promise();\n                    runtime.once( 'ready', deferred.resolve );\n                    runtime.init();\n                    cache.add( runtime );\n                    runtime.__client = 1;\n                } else {\n                    // 来自cache\n                    Base.$.extend( runtime.options, opts );\n                    runtime.__promise.then( deferred.resolve );\n                    runtime.__client++;\n                }\n    \n                standalone && (runtime.__standalone = standalone);\n                return runtime;\n            };\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.disconnectRuntime = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                runtime.__client--;\n    \n                if ( runtime.__client <= 0 ) {\n                    cache.remove( runtime );\n                    delete runtime.__promise;\n                    runtime.destroy();\n                }\n    \n                runtime = null;\n            };\n    \n            this.exec = function() {\n                if ( !runtime ) {\n                    return;\n                }\n    \n                var args = Base.slice( arguments );\n                component && args.unshift( component );\n    \n                return runtime.exec.apply( this, args );\n            };\n    \n            this.getRuid = function() {\n                return runtime && runtime.uid;\n            };\n    \n            this.destroy = (function( destroy ) {\n                return function() {\n                    destroy && destroy.apply( this, arguments );\n                    this.trigger('destroy');\n                    this.off();\n                    this.exec('destroy');\n                    this.disconnectRuntime();\n                };\n            })( this.destroy );\n        }\n    \n        Mediator.installTo( RuntimeClient.prototype );\n        return RuntimeClient;\n    });\n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/dnd',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function DragAndDrop( opts ) {\n            opts = this.options = $.extend({}, DragAndDrop.options, opts );\n    \n            opts.container = $( opts.container );\n    \n            if ( !opts.container.length ) {\n                return;\n            }\n    \n            RuntimeClent.call( this, 'DragAndDrop' );\n        }\n    \n        DragAndDrop.options = {\n            accept: null,\n            disableGlobalDnd: false\n        };\n    \n        Base.inherits( RuntimeClent, {\n            constructor: DragAndDrop,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( DragAndDrop.prototype );\n    \n        return DragAndDrop;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/widget',[\n        'base',\n        'uploader'\n    ], function( Base, Uploader ) {\n    \n        var $ = Base.$,\n            _init = Uploader.prototype._init,\n            _destroy = Uploader.prototype.destroy,\n            IGNORE = {},\n            widgetClass = [];\n    \n        function isArrayLike( obj ) {\n            if ( !obj ) {\n                return false;\n            }\n    \n            var length = obj.length,\n                type = $.type( obj );\n    \n            if ( obj.nodeType === 1 && length ) {\n                return true;\n            }\n    \n            return type === 'array' || type !== 'function' && type !== 'string' &&\n                    (length === 0 || typeof length === 'number' && length > 0 &&\n                    (length - 1) in obj);\n        }\n    \n        function Widget( uploader ) {\n            this.owner = uploader;\n            this.options = uploader.options;\n        }\n    \n        $.extend( Widget.prototype, {\n    \n            init: Base.noop,\n    \n            // 类Backbone的事件监听声明，监听uploader实例上的事件\n            // widget直接无法监听事件，事件只能通过uploader来传递\n            invoke: function( apiName, args ) {\n    \n                /*\n                    {\n                        'make-thumb': 'makeThumb'\n                    }\n                 */\n                var map = this.responseMap;\n    \n                // 如果无API响应声明则忽略\n                if ( !map || !(apiName in map) || !(map[ apiName ] in this) ||\n                        !$.isFunction( this[ map[ apiName ] ] ) ) {\n    \n                    return IGNORE;\n                }\n    \n                return this[ map[ apiName ] ].apply( this, args );\n    \n            },\n    \n            /**\n             * 发送命令。当传入`callback`或者`handler`中返回`promise`时。返回一个当所有`handler`中的promise都完成后完成的新`promise`。\n             * @method request\n             * @grammar request( command, args ) => * | Promise\n             * @grammar request( command, args, callback ) => Promise\n             * @for  Uploader\n             */\n            request: function() {\n                return this.owner.request.apply( this.owner, arguments );\n            }\n        });\n    \n        // 扩展Uploader.\n        $.extend( Uploader.prototype, {\n    \n            /**\n             * @property {String | Array} [disableWidgets=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 默认所有 Uploader.register 了的 widget 都会被加载，如果禁用某一部分，请通过此 option 指定黑名单。\n             */\n    \n            // 覆写_init用来初始化widgets\n            _init: function() {\n                var me = this,\n                    widgets = me._widgets = [],\n                    deactives = me.options.disableWidgets || '';\n    \n                $.each( widgetClass, function( _, klass ) {\n                    (!deactives || !~deactives.indexOf( klass._name )) &&\n                        widgets.push( new klass( me ) );\n                });\n    \n                return _init.apply( me, arguments );\n            },\n    \n            request: function( apiName, args, callback ) {\n                var i = 0,\n                    widgets = this._widgets,\n                    len = widgets && widgets.length,\n                    rlts = [],\n                    dfds = [],\n                    widget, rlt, promise, key;\n    \n                args = isArrayLike( args ) ? args : [ args ];\n    \n                for ( ; i < len; i++ ) {\n                    widget = widgets[ i ];\n                    rlt = widget.invoke( apiName, args );\n    \n                    if ( rlt !== IGNORE ) {\n    \n                        // Deferred对象\n                        if ( Base.isPromise( rlt ) ) {\n                            dfds.push( rlt );\n                        } else {\n                            rlts.push( rlt );\n                        }\n                    }\n                }\n    \n                // 如果有callback，则用异步方式。\n                if ( callback || dfds.length ) {\n                    promise = Base.when.apply( Base, dfds );\n                    key = promise.pipe ? 'pipe' : 'then';\n    \n                    // 很重要不能删除。删除了会死循环。\n                    // 保证执行顺序。让callback总是在下一个 tick 中执行。\n                    return promise[ key ](function() {\n                                var deferred = Base.Deferred(),\n                                    args = arguments;\n    \n                                if ( args.length === 1 ) {\n                                    args = args[ 0 ];\n                                }\n    \n                                setTimeout(function() {\n                                    deferred.resolve( args );\n                                }, 1 );\n    \n                                return deferred.promise();\n                            })[ callback ? key : 'done' ]( callback || Base.noop );\n                } else {\n                    return rlts[ 0 ];\n                }\n            },\n    \n            destroy: function() {\n                _destroy.apply( this, arguments );\n                this._widgets = null;\n            }\n        });\n    \n        /**\n         * 添加组件\n         * @grammar Uploader.register(proto);\n         * @grammar Uploader.register(map, proto);\n         * @param  {object} responseMap API 名称与函数实现的映射\n         * @param  {object} proto 组件原型，构造函数通过 constructor 属性定义\n         * @method Uploader.register\n         * @for Uploader\n         * @example\n         * Uploader.register({\n         *     'make-thumb': 'makeThumb'\n         * }, {\n         *     init: function( options ) {},\n         *     makeThumb: function() {}\n         * });\n         *\n         * Uploader.register({\n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         */\n        Uploader.register = Widget.register = function( responseMap, widgetProto ) {\n            var map = { init: 'init', destroy: 'destroy', name: 'anonymous' },\n                klass;\n    \n            if ( arguments.length === 1 ) {\n                widgetProto = responseMap;\n    \n                // 自动生成 map 表。\n                $.each(widgetProto, function(key) {\n                    if ( key[0] === '_' || key === 'name' ) {\n                        key === 'name' && (map.name = widgetProto.name);\n                        return;\n                    }\n    \n                    map[key.replace(/[A-Z]/g, '-$&').toLowerCase()] = key;\n                });\n    \n            } else {\n                map = $.extend( map, responseMap );\n            }\n    \n            widgetProto.responseMap = map;\n            klass = Base.inherits( Widget, widgetProto );\n            klass._name = map.name;\n            widgetClass.push( klass );\n    \n            return klass;\n        };\n    \n        /**\n         * 删除插件，只有在注册时指定了名字的才能被删除。\n         * @grammar Uploader.unRegister(name);\n         * @param  {string} name 组件名字\n         * @method Uploader.unRegister\n         * @for Uploader\n         * @example\n         *\n         * Uploader.register({\n         *     name: 'custom',\n         *     \n         *     'make-thumb': function() {\n         *         \n         *     }\n         * });\n         *\n         * Uploader.unRegister('custom');\n         */\n        Uploader.unRegister = Widget.unRegister = function( name ) {\n            if ( !name || name === 'anonymous' ) {\n                return;\n            }\n            \n            // 删除指定的插件。\n            for ( var i = widgetClass.length; i--; ) {\n                if ( widgetClass[i]._name === name ) {\n                    widgetClass.splice(i, 1)\n                }\n            }\n        };\n    \n        return Widget;\n    });\n    /**\n     * @fileOverview DragAndDrop Widget。\n     */\n    define('widgets/filednd',[\n        'base',\n        'uploader',\n        'lib/dnd',\n        'widgets/widget'\n    ], function( Base, Uploader, Dnd ) {\n        var $ = Base.$;\n    \n        Uploader.options.dnd = '';\n    \n        /**\n         * @property {Selector} [dnd=undefined]  指定Drag And Drop拖拽的容器，如果不指定，则不启动。\n         * @namespace options\n         * @for Uploader\n         */\n        \n        /**\n         * @property {Selector} [disableGlobalDnd=false]  是否禁掉整个页面的拖拽功能，如果不禁用，图片拖进来的时候会默认被浏览器打开。\n         * @namespace options\n         * @for Uploader\n         */\n    \n        /**\n         * @event dndAccept\n         * @param {DataTransferItemList} items DataTransferItem\n         * @description 阻止此事件可以拒绝某些类型的文件拖入进来。目前只有 chrome 提供这样的 API，且只能通过 mime-type 验证。\n         * @for  Uploader\n         */\n        return Uploader.register({\n            name: 'dnd',\n            \n            init: function( opts ) {\n    \n                if ( !opts.dnd ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        disableGlobalDnd: opts.disableGlobalDnd,\n                        container: opts.dnd,\n                        accept: opts.accept\n                    }),\n                    dnd;\n    \n                this.dnd = dnd = new Dnd( options );\n    \n                dnd.once( 'ready', deferred.resolve );\n                dnd.on( 'drop', function( files ) {\n                    me.request( 'add-file', [ files ]);\n                });\n    \n                // 检测文件是否全部允许添加。\n                dnd.on( 'accept', function( items ) {\n                    return me.owner.trigger( 'dndAccept', items );\n                });\n    \n                dnd.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.dnd && this.dnd.destroy();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepaste',[\n        'base',\n        'mediator',\n        'runtime/client'\n    ], function( Base, Mediator, RuntimeClent ) {\n    \n        var $ = Base.$;\n    \n        function FilePaste( opts ) {\n            opts = this.options = $.extend({}, opts );\n            opts.container = $( opts.container || document.body );\n            RuntimeClent.call( this, 'FilePaste' );\n        }\n    \n        Base.inherits( RuntimeClent, {\n            constructor: FilePaste,\n    \n            init: function() {\n                var me = this;\n    \n                me.connectRuntime( me.options, function() {\n                    me.exec('init');\n                    me.trigger('ready');\n                });\n            }\n        });\n    \n        Mediator.installTo( FilePaste.prototype );\n    \n        return FilePaste;\n    });\n    /**\n     * @fileOverview 组件基类。\n     */\n    define('widgets/filepaste',[\n        'base',\n        'uploader',\n        'lib/filepaste',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePaste ) {\n        var $ = Base.$;\n    \n        /**\n         * @property {Selector} [paste=undefined]  指定监听paste事件的容器，如果不指定，不启用此功能。此功能为通过粘贴来添加截屏的图片。建议设置为`document.body`.\n         * @namespace options\n         * @for Uploader\n         */\n        return Uploader.register({\n            name: 'paste',\n            \n            init: function( opts ) {\n    \n                if ( !opts.paste ||\n                        this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                var me = this,\n                    deferred = Base.Deferred(),\n                    options = $.extend({}, {\n                        container: opts.paste,\n                        accept: opts.accept\n                    }),\n                    paste;\n    \n                this.paste = paste = new FilePaste( options );\n    \n                paste.once( 'ready', deferred.resolve );\n                paste.on( 'paste', function( files ) {\n                    me.owner.request( 'add-file', [ files ]);\n                });\n                paste.init();\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                this.paste && this.paste.destroy();\n            }\n        });\n    });\n    /**\n     * @fileOverview Blob\n     */\n    define('lib/blob',[\n        'base',\n        'runtime/client'\n    ], function( Base, RuntimeClient ) {\n    \n        function Blob( ruid, source ) {\n            var me = this;\n    \n            me.source = source;\n            me.ruid = ruid;\n            this.size = source.size || 0;\n    \n            // 如果没有指定 mimetype, 但是知道文件后缀。\n            if ( !source.type && this.ext &&\n                    ~'jpg,jpeg,png,gif,bmp'.indexOf( this.ext ) ) {\n                this.type = 'image/' + (this.ext === 'jpg' ? 'jpeg' : this.ext);\n            } else {\n                this.type = source.type || 'application/octet-stream';\n            }\n    \n            RuntimeClient.call( me, 'Blob' );\n            this.uid = source.uid || this.uid;\n    \n            if ( ruid ) {\n                me.connectRuntime( ruid );\n            }\n        }\n    \n        Base.inherits( RuntimeClient, {\n            constructor: Blob,\n    \n            slice: function( start, end ) {\n                return this.exec( 'slice', start, end );\n            },\n    \n            getSource: function() {\n                return this.source;\n            }\n        });\n    \n        return Blob;\n    });\n    /**\n     * 为了统一化Flash的File和HTML5的File而存在。\n     * 以至于要调用Flash里面的File，也可以像调用HTML5版本的File一下。\n     * @fileOverview File\n     */\n    define('lib/file',[\n        'base',\n        'lib/blob'\n    ], function( Base, Blob ) {\n    \n        var uid = 1,\n            rExt = /\\.([^.]+)$/;\n    \n        function File( ruid, file ) {\n            var ext;\n    \n            this.name = file.name || ('untitled' + uid++);\n            ext = rExt.exec( file.name ) ? RegExp.$1.toLowerCase() : '';\n    \n            // todo 支持其他类型文件的转换。\n            // 如果有 mimetype, 但是文件名里面没有找出后缀规律\n            if ( !ext && file.type ) {\n                ext = /\\/(jpg|jpeg|png|gif|bmp)$/i.exec( file.type ) ?\n                        RegExp.$1.toLowerCase() : '';\n                this.name += '.' + ext;\n            }\n    \n            this.ext = ext;\n            this.lastModifiedDate = file.lastModifiedDate || \n                    file.lastModified && new Date(file.lastModified).toLocaleString() ||\n                    (new Date()).toLocaleString();\n    \n            Blob.apply( this, arguments );\n        }\n    \n        return Base.inherits( Blob, File );\n    });\n    \n    /**\n     * @fileOverview 错误信息\n     */\n    define('lib/filepicker',[\n        'base',\n        'runtime/client',\n        'lib/file'\n    ], function( Base, RuntimeClient, File ) {\n    \n        var $ = Base.$;\n    \n        function FilePicker( opts ) {\n            opts = this.options = $.extend({}, FilePicker.options, opts );\n    \n            opts.container = $( opts.id );\n    \n            if ( !opts.container.length ) {\n                throw new Error('按钮指定错误');\n            }\n    \n            opts.innerHTML = opts.innerHTML || opts.label ||\n                    opts.container.html() || '';\n    \n            opts.button = $( opts.button || document.createElement('div') );\n            opts.button.html( opts.innerHTML );\n            opts.container.html( opts.button );\n    \n            RuntimeClient.call( this, 'FilePicker', true );\n        }\n    \n        FilePicker.options = {\n            button: null,\n            container: null,\n            label: null,\n            innerHTML: null,\n            multiple: true,\n            accept: null,\n            name: 'file',\n            style: 'webuploader-pick'   //pick element class attribute, default is \"webuploader-pick\"\n        };\n    \n        Base.inherits( RuntimeClient, {\n            constructor: FilePicker,\n    \n            init: function() {\n                var me = this,\n                    opts = me.options,\n                    button = opts.button,\n                    style = opts.style;\n    \n                if (style)\n                    button.addClass('webuploader-pick');\n    \n                me.on( 'all', function( type ) {\n                    var files;\n    \n                    switch ( type ) {\n                        case 'mouseenter':\n                            if (style)\n                                button.addClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'mouseleave':\n                            if (style)\n                                button.removeClass('webuploader-pick-hover');\n                            break;\n    \n                        case 'change':\n                            files = me.exec('getFiles');\n                            me.trigger( 'select', $.map( files, function( file ) {\n                                file = new File( me.getRuid(), file );\n    \n                                // 记录来源。\n                                file._refer = opts.container;\n                                return file;\n                            }), opts.container );\n                            break;\n                    }\n                });\n    \n                me.connectRuntime( opts, function() {\n                    me.refresh();\n                    me.exec( 'init', opts );\n                    me.trigger('ready');\n                });\n    \n                this._resizeHandler = Base.bindFn( this.refresh, this );\n                $( window ).on( 'resize', this._resizeHandler );\n            },\n    \n            refresh: function() {\n                var shimContainer = this.getRuntime().getContainer(),\n                    button = this.options.button,\n                    /*\n                    width = button.outerWidth ?\n                            button.outerWidth() : button.width(),\n    \n                    height = button.outerHeight ?\n                            button.outerHeight() : button.height(),\n                    */\n                    width = button[0] && button[0].offsetWidth || button.outerWidth() || button.width(),\n                    height = button[0] && button[0].offsetHeight || button.outerHeight() || button.height(),\n                    pos = button.offset();\n    \n                width && height && shimContainer.css({\n                    bottom: 'auto',\n                    right: 'auto',\n                    width: width + 'px',\n                    height: height + 'px'\n                }).offset( pos );\n            },\n    \n            enable: function() {\n                var btn = this.options.button;\n    \n                btn.removeClass('webuploader-pick-disable');\n                this.refresh();\n            },\n    \n            disable: function() {\n                var btn = this.options.button;\n    \n                this.getRuntime().getContainer().css({\n                    top: '-99999px'\n                });\n    \n                btn.addClass('webuploader-pick-disable');\n            },\n    \n            destroy: function() {\n                var btn = this.options.button;\n                $( window ).off( 'resize', this._resizeHandler );\n                btn.removeClass('webuploader-pick-disable webuploader-pick-hover ' +\n                    'webuploader-pick');\n            }\n        });\n    \n        return FilePicker;\n    });\n    \n    /**\n     * @fileOverview 文件选择相关\n     */\n    define('widgets/filepicker',[\n        'base',\n        'uploader',\n        'lib/filepicker',\n        'widgets/widget'\n    ], function( Base, Uploader, FilePicker ) {\n        var $ = Base.$;\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Selector | Object} [pick=undefined]\n             * @namespace options\n             * @for Uploader\n             * @description 指定选择文件的按钮容器，不指定则不创建按钮。\n             *\n             * * `id` {Seletor|dom} 指定选择文件的按钮容器，不指定则不创建按钮。**注意** 这里虽然写的是 id, 但是不是只支持 id, 还支持 class, 或者 dom 节点。\n             * * `label` {String} 请采用 `innerHTML` 代替\n             * * `innerHTML` {String} 指定按钮文字。不指定时优先从指定的容器中看是否自带文字。\n             * * `multiple` {Boolean} 是否开起同时选择多个文件能力。\n             */\n            pick: null,\n    \n            /**\n             * @property {Array} [accept=null]\n             * @namespace options\n             * @for Uploader\n             * @description 指定接受哪些类型的文件。 由于目前还有ext转mimeType表，所以这里需要分开指定。\n             *\n             * * `title` {String} 文字描述\n             * * `extensions` {String} 允许的文件后缀，不带点，多个用逗号分割。\n             * * `mimeTypes` {String} 多个用逗号分割。\n             *\n             * 如：\n             *\n             * ```\n             * {\n             *     title: 'Images',\n             *     extensions: 'gif,jpg,jpeg,bmp,png',\n             *     mimeTypes: 'image/*'\n             * }\n             * ```\n             */\n            accept: null/*{\n                title: 'Images',\n                extensions: 'gif,jpg,jpeg,bmp,png',\n                mimeTypes: 'image/*'\n            }*/\n        });\n    \n        return Uploader.register({\n            name: 'picker',\n    \n            init: function( opts ) {\n                this.pickers = [];\n                return opts.pick && this.addBtn( opts.pick );\n            },\n    \n            refresh: function() {\n                $.each( this.pickers, function() {\n                    this.refresh();\n                });\n            },\n    \n            /**\n             * @method addButton\n             * @for Uploader\n             * @grammar addButton( pick ) => Promise\n             * @description\n             * 添加文件选择按钮，如果一个按钮不够，需要调用此方法来添加。参数跟[options.pick](#WebUploader:Uploader:options)一致。\n             * @example\n             * uploader.addButton({\n             *     id: '#btnContainer',\n             *     innerHTML: '选择文件'\n             * });\n             */\n            addBtn: function( pick ) {\n                var me = this,\n                    opts = me.options,\n                    accept = opts.accept,\n                    promises = [];\n    \n                if ( !pick ) {\n                    return;\n                }\n    \n                $.isPlainObject( pick ) || (pick = {\n                    id: pick\n                });\n    \n                $( pick.id ).each(function() {\n                    var options, picker, deferred;\n    \n                    deferred = Base.Deferred();\n    \n                    options = $.extend({}, pick, {\n                        accept: $.isPlainObject( accept ) ? [ accept ] : accept,\n                        swf: opts.swf,\n                        runtimeOrder: opts.runtimeOrder,\n                        id: this\n                    });\n    \n                    picker = new FilePicker( options );\n    \n                    picker.once( 'ready', deferred.resolve );\n                    picker.on( 'select', function( files ) {\n                        me.owner.request( 'add-file', [ files ]);\n                    });\n                    picker.on('dialogopen', function() {\n                        me.owner.trigger('dialogOpen', picker.button);\n                    });\n                    picker.init();\n    \n                    me.pickers.push( picker );\n    \n                    promises.push( deferred.promise() );\n                });\n    \n                return Base.when.apply( Base, promises );\n            },\n    \n            disable: function() {\n                $.each( this.pickers, function() {\n                    this.disable();\n                });\n            },\n    \n            enable: function() {\n                $.each( this.pickers, function() {\n                    this.enable();\n                });\n            },\n    \n            destroy: function() {\n                $.each( this.pickers, function() {\n                    this.destroy();\n                });\n                this.pickers = null;\n            }\n        });\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('lib/image',[\n        'base',\n        'runtime/client',\n        'lib/blob'\n    ], function( Base, RuntimeClient, Blob ) {\n        var $ = Base.$;\n    \n        // 构造器。\n        function Image( opts ) {\n            this.options = $.extend({}, Image.options, opts );\n            RuntimeClient.call( this, 'Image' );\n    \n            this.on( 'load', function() {\n                this._info = this.exec('info');\n                this._meta = this.exec('meta');\n            });\n        }\n    \n        // 默认选项。\n        Image.options = {\n    \n            // 默认的图片处理质量\n            quality: 90,\n    \n            // 是否裁剪\n            crop: false,\n    \n            // 是否保留头部信息\n            preserveHeaders: false,\n    \n            // 是否允许放大。\n            allowMagnify: false\n        };\n    \n        // 继承RuntimeClient.\n        Base.inherits( RuntimeClient, {\n            constructor: Image,\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._meta = val;\n                    return this;\n                }\n    \n                // getter\n                return this._meta;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    ruid = blob.getRuid();\n    \n                this.connectRuntime( ruid, function() {\n                    me.exec( 'init', me.options );\n                    me.exec( 'loadFromBlob', blob );\n                });\n            },\n    \n            resize: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'resize' ].concat( args ) );\n            },\n    \n            crop: function() {\n                var args = Base.slice( arguments );\n                return this.exec.apply( this, [ 'crop' ].concat( args ) );\n            },\n    \n            getAsDataUrl: function( type ) {\n                return this.exec( 'getAsDataUrl', type );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this.exec( 'getAsBlob', type );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    \n        return Image;\n    });\n    var __assign = (this && this.__assign) || function () {\n        __assign = Object.assign || function(t) {\n            for (var s, i = 1, n = arguments.length; i < n; i++) {\n                s = arguments[i];\n                for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n                    t[p] = s[p];\n            }\n            return t;\n        };\n        return __assign.apply(this, arguments);\n    };\n    /**\n     * Browser Image Compression\n     * v2.0.2\n     * by Donald <donaldcwl@gmail.com>\n     * https://github.com/Donaldcwl/browser-image-compression\n     */\n    define('lib/browser-image-compression',[\n        'base',\n        'lib/blob'\n    ], function (Base, Blob) {\n        var _a;\n        function _mergeNamespaces(e, t) {\n            return t.forEach((function (t) {\n                t && \"string\" != typeof t && !Array.isArray(t) && Object.keys(t).forEach((function (r) {\n                    if (\"default\" !== r && !(r in e)) {\n                        var i = Object.getOwnPropertyDescriptor(t, r);\n                        Object.defineProperty(e, r, i.get ? i : {\n                            enumerable: !0, get: function () {\n                                return t[r];\n                            }\n                        });\n                    }\n                }));\n            })), Object.freeze(e);\n        }\n        function copyExifWithoutOrientation(e, t) {\n            return new Promise((function (r, i) {\n                var o;\n                return getApp1Segment(e).then((function (e) {\n                    try {\n                        return o = e, r(new Blob([t.slice(0, 2), o, t.slice(2)], { type: \"image/jpeg\" }));\n                    }\n                    catch (e) {\n                        return i(e);\n                    }\n                }), i);\n            }));\n        }\n        var getApp1Segment = function (e) { return new Promise((function (t, r) {\n            var i = new FileReader;\n            i.addEventListener(\"load\", (function (_a) {\n                var e = _a.target.result;\n                var i = new DataView(e);\n                var o = 0;\n                if (65496 !== i.getUint16(o))\n                    return r(\"not a valid JPEG\");\n                for (o += 2;;) {\n                    var a_1 = i.getUint16(o);\n                    if (65498 === a_1)\n                        break;\n                    var s_1 = i.getUint16(o + 2);\n                    if (65505 === a_1 && 1165519206 === i.getUint32(o + 4)) {\n                        var a_2 = o + 10;\n                        var f_1 = void 0;\n                        switch (i.getUint16(a_2)) {\n                            case 18761:\n                                f_1 = !0;\n                                break;\n                            case 19789:\n                                f_1 = !1;\n                                break;\n                            default:\n                                return r(\"TIFF header contains invalid endian\");\n                        }\n                        if (42 !== i.getUint16(a_2 + 2, f_1))\n                            return r(\"TIFF header contains invalid version\");\n                        var l_1 = i.getUint32(a_2 + 4, f_1), c = a_2 + l_1 + 2 + 12 * i.getUint16(a_2 + l_1, f_1);\n                        for (var e_1 = a_2 + l_1 + 2; e_1 < c; e_1 += 12) {\n                            if (274 == i.getUint16(e_1, f_1)) {\n                                if (3 !== i.getUint16(e_1 + 2, f_1))\n                                    return r(\"Orientation data type is invalid\");\n                                if (1 !== i.getUint32(e_1 + 4, f_1))\n                                    return r(\"Orientation data count is invalid\");\n                                i.setUint16(e_1 + 8, 1, f_1);\n                                break;\n                            }\n                        }\n                        return t(e.slice(o, o + 2 + s_1));\n                    }\n                    o += 2 + s_1;\n                }\n                return t(new Blob);\n            })), i.readAsArrayBuffer(e);\n        })); };\n        var e = {};\n        !function (e) {\n            var t, r, UZIP = {};\n            e.exports = UZIP, UZIP.parse = function (e, t) {\n                for (var r = UZIP.bin.readUshort, i = UZIP.bin.readUint, o = 0, a = {}, s = new Uint8Array(e), f = s.length - 4; 101010256 != i(s, f);)\n                    f--;\n                o = f;\n                o += 4;\n                var l = r(s, o += 4);\n                r(s, o += 2);\n                var c = i(s, o += 2), u = i(s, o += 4);\n                o += 4, o = u;\n                for (var h = 0; h < l; h++) {\n                    i(s, o), o += 4, o += 4, o += 4, i(s, o += 4);\n                    c = i(s, o += 4);\n                    var d = i(s, o += 4), A = r(s, o += 4), g = r(s, o + 2), p = r(s, o + 4);\n                    o += 6;\n                    var m = i(s, o += 8);\n                    o += 4, o += A + g + p, UZIP._readLocal(s, m, a, c, d, t);\n                }\n                return a;\n            }, UZIP._readLocal = function (e, t, r, i, o, a) {\n                var s = UZIP.bin.readUshort, f = UZIP.bin.readUint;\n                f(e, t), s(e, t += 4), s(e, t += 2);\n                var l = s(e, t += 2);\n                f(e, t += 2), f(e, t += 4), t += 4;\n                var c = s(e, t += 8), u = s(e, t += 2);\n                t += 2;\n                var h = UZIP.bin.readUTF8(e, t, c);\n                if (t += c, t += u, a)\n                    r[h] = { size: o, csize: i };\n                else {\n                    var d = new Uint8Array(e.buffer, t);\n                    if (0 == l)\n                        r[h] = new Uint8Array(d.buffer.slice(t, t + i));\n                    else {\n                        if (8 != l)\n                            throw \"unknown compression method: \" + l;\n                        var A = new Uint8Array(o);\n                        UZIP.inflateRaw(d, A), r[h] = A;\n                    }\n                }\n            }, UZIP.inflateRaw = function (e, t) {\n                return UZIP.F.inflate(e, t);\n            }, UZIP.inflate = function (e, t) {\n                return e[0], e[1], UZIP.inflateRaw(new Uint8Array(e.buffer, e.byteOffset + 2, e.length - 6), t);\n            }, UZIP.deflate = function (e, t) {\n                null == t && (t = { level: 6 });\n                var r = 0, i = new Uint8Array(50 + Math.floor(1.1 * e.length));\n                i[r] = 120, i[r + 1] = 156, r += 2, r = UZIP.F.deflateRaw(e, i, r, t.level);\n                var o = UZIP.adler(e, 0, e.length);\n                return i[r + 0] = o >>> 24 & 255, i[r + 1] = o >>> 16 & 255, i[r + 2] = o >>> 8 & 255, i[r + 3] = o >>> 0 & 255, new Uint8Array(i.buffer, 0, r + 4);\n            }, UZIP.deflateRaw = function (e, t) {\n                null == t && (t = { level: 6 });\n                var r = new Uint8Array(50 + Math.floor(1.1 * e.length)), i = UZIP.F.deflateRaw(e, r, i, t.level);\n                return new Uint8Array(r.buffer, 0, i);\n            }, UZIP.encode = function (e, t) {\n                null == t && (t = !1);\n                var r = 0, i = UZIP.bin.writeUint, o = UZIP.bin.writeUshort, a = {};\n                for (var s in e) {\n                    var f = !UZIP._noNeed(s) && !t, l = e[s], c = UZIP.crc.crc(l, 0, l.length);\n                    a[s] = { cpr: f, usize: l.length, crc: c, file: f ? UZIP.deflateRaw(l) : l };\n                }\n                for (var s in a)\n                    r += a[s].file.length + 30 + 46 + 2 * UZIP.bin.sizeUTF8(s);\n                r += 22;\n                var u = new Uint8Array(r), h = 0, d = [];\n                for (var s in a) {\n                    var A = a[s];\n                    d.push(h), h = UZIP._writeHeader(u, h, s, A, 0);\n                }\n                var g = 0, p = h;\n                for (var s in a) {\n                    A = a[s];\n                    d.push(h), h = UZIP._writeHeader(u, h, s, A, 1, d[g++]);\n                }\n                var m = h - p;\n                return i(u, h, 101010256), h += 4, o(u, h += 4, g), o(u, h += 2, g), i(u, h += 2, m), i(u, h += 4, p), h += 4, h += 2, u.buffer;\n            }, UZIP._noNeed = function (e) {\n                var t = e.split(\".\").pop().toLowerCase();\n                return -1 != \"png,jpg,jpeg,zip\".indexOf(t);\n            }, UZIP._writeHeader = function (e, t, r, i, o, a) {\n                var s = UZIP.bin.writeUint, f = UZIP.bin.writeUshort, l = i.file;\n                return s(e, t, 0 == o ? 67324752 : 33639248), t += 4, 1 == o && (t += 2), f(e, t, 20), f(e, t += 2, 0), f(e, t += 2, i.cpr ? 8 : 0), s(e, t += 2, 0), s(e, t += 4, i.crc), s(e, t += 4, l.length), s(e, t += 4, i.usize), f(e, t += 4, UZIP.bin.sizeUTF8(r)), f(e, t += 2, 0), t += 2, 1 == o && (t += 2, t += 2, s(e, t += 6, a), t += 4), t += UZIP.bin.writeUTF8(e, t, r), 0 == o && (e.set(l, t), t += l.length), t;\n            }, UZIP.crc = {\n                table: function () {\n                    for (var e = new Uint32Array(256), t = 0; t < 256; t++) {\n                        for (var r = t, i = 0; i < 8; i++)\n                            1 & r ? r = 3988292384 ^ r >>> 1 : r >>>= 1;\n                        e[t] = r;\n                    }\n                    return e;\n                }(), update: function (e, t, r, i) {\n                    for (var o = 0; o < i; o++)\n                        e = UZIP.crc.table[255 & (e ^ t[r + o])] ^ e >>> 8;\n                    return e;\n                }, crc: function (e, t, r) {\n                    return 4294967295 ^ UZIP.crc.update(4294967295, e, t, r);\n                }\n            }, UZIP.adler = function (e, t, r) {\n                for (var i = 1, o = 0, a = t, s = t + r; a < s;) {\n                    for (var f = Math.min(a + 5552, s); a < f;)\n                        o += i += e[a++];\n                    i %= 65521, o %= 65521;\n                }\n                return o << 16 | i;\n            }, UZIP.bin = {\n                readUshort: function (e, t) {\n                    return e[t] | e[t + 1] << 8;\n                }, writeUshort: function (e, t, r) {\n                    e[t] = 255 & r, e[t + 1] = r >> 8 & 255;\n                }, readUint: function (e, t) {\n                    return 16777216 * e[t + 3] + (e[t + 2] << 16 | e[t + 1] << 8 | e[t]);\n                }, writeUint: function (e, t, r) {\n                    e[t] = 255 & r, e[t + 1] = r >> 8 & 255, e[t + 2] = r >> 16 & 255, e[t + 3] = r >> 24 & 255;\n                }, readASCII: function (e, t, r) {\n                    for (var i = \"\", o = 0; o < r; o++)\n                        i += String.fromCharCode(e[t + o]);\n                    return i;\n                }, writeASCII: function (e, t, r) {\n                    for (var i = 0; i < r.length; i++)\n                        e[t + i] = r.charCodeAt(i);\n                }, pad: function (e) {\n                    return e.length < 2 ? \"0\" + e : e;\n                }, readUTF8: function (e, t, r) {\n                    for (var i, o = \"\", a = 0; a < r; a++)\n                        o += \"%\" + UZIP.bin.pad(e[t + a].toString(16));\n                    try {\n                        i = decodeURIComponent(o);\n                    }\n                    catch (i) {\n                        return UZIP.bin.readASCII(e, t, r);\n                    }\n                    return i;\n                }, writeUTF8: function (e, t, r) {\n                    for (var i = r.length, o = 0, a = 0; a < i; a++) {\n                        var s = r.charCodeAt(a);\n                        if (0 == (4294967168 & s))\n                            e[t + o] = s, o++;\n                        else if (0 == (4294965248 & s))\n                            e[t + o] = 192 | s >> 6, e[t + o + 1] = 128 | s >> 0 & 63, o += 2;\n                        else if (0 == (4294901760 & s))\n                            e[t + o] = 224 | s >> 12, e[t + o + 1] = 128 | s >> 6 & 63, e[t + o + 2] = 128 | s >> 0 & 63, o += 3;\n                        else {\n                            if (0 != (4292870144 & s))\n                                throw \"e\";\n                            e[t + o] = 240 | s >> 18, e[t + o + 1] = 128 | s >> 12 & 63, e[t + o + 2] = 128 | s >> 6 & 63, e[t + o + 3] = 128 | s >> 0 & 63, o += 4;\n                        }\n                    }\n                    return o;\n                }, sizeUTF8: function (e) {\n                    for (var t = e.length, r = 0, i = 0; i < t; i++) {\n                        var o = e.charCodeAt(i);\n                        if (0 == (4294967168 & o))\n                            r++;\n                        else if (0 == (4294965248 & o))\n                            r += 2;\n                        else if (0 == (4294901760 & o))\n                            r += 3;\n                        else {\n                            if (0 != (4292870144 & o))\n                                throw \"e\";\n                            r += 4;\n                        }\n                    }\n                    return r;\n                }\n            }, UZIP.F = {}, UZIP.F.deflateRaw = function (e, t, r, i) {\n                var o = [[0, 0, 0, 0, 0], [4, 4, 8, 4, 0], [4, 5, 16, 8, 0], [4, 6, 16, 16, 0], [4, 10, 16, 32, 0], [8, 16, 32, 32, 0], [8, 16, 128, 128, 0], [8, 32, 128, 256, 0], [32, 128, 258, 1024, 1], [32, 258, 258, 4096, 1]][i], a = UZIP.F.U, s = UZIP.F._goodIndex;\n                UZIP.F._hash;\n                var f = UZIP.F._putsE, l = 0, c = r << 3, u = 0, h = e.length;\n                if (0 == i) {\n                    for (; l < h;) {\n                        f(t, c, l + (_ = Math.min(65535, h - l)) == h ? 1 : 0), c = UZIP.F._copyExact(e, l, _, t, c + 8), l += _;\n                    }\n                    return c >>> 3;\n                }\n                var d = a.lits, A = a.strt, g = a.prev, p = 0, m = 0, w = 0, v = 0, b = 0, y = 0;\n                for (h > 2 && (A[y = UZIP.F._hash(e, 0)] = 0), l = 0; l < h; l++) {\n                    if (b = y, l + 1 < h - 2) {\n                        y = UZIP.F._hash(e, l + 1);\n                        var E = l + 1 & 32767;\n                        g[E] = A[y], A[y] = E;\n                    }\n                    if (u <= l) {\n                        (p > 14e3 || m > 26697) && h - l > 100 && (u < l && (d[p] = l - u, p += 2, u = l), c = UZIP.F._writeBlock(l == h - 1 || u == h ? 1 : 0, d, p, v, e, w, l - w, t, c), p = m = v = 0, w = l);\n                        var F = 0;\n                        l < h - 2 && (F = UZIP.F._bestMatch(e, l, g, b, Math.min(o[2], h - l), o[3]));\n                        var _ = F >>> 16, B = 65535 & F;\n                        if (0 != F) {\n                            B = 65535 & F;\n                            var U = s(_ = F >>> 16, a.of0);\n                            a.lhst[257 + U]++;\n                            var C = s(B, a.df0);\n                            a.dhst[C]++, v += a.exb[U] + a.dxb[C], d[p] = _ << 23 | l - u, d[p + 1] = B << 16 | U << 8 | C, p += 2, u = l + _;\n                        }\n                        else\n                            a.lhst[e[l]]++;\n                        m++;\n                    }\n                }\n                for (w == l && 0 != e.length || (u < l && (d[p] = l - u, p += 2, u = l), c = UZIP.F._writeBlock(1, d, p, v, e, w, l - w, t, c), p = 0, m = 0, p = m = v = 0, w = l); 0 != (7 & c);)\n                    c++;\n                return c >>> 3;\n            }, UZIP.F._bestMatch = function (e, t, r, i, o, a) {\n                var s = 32767 & t, f = r[s], l = s - f + 32768 & 32767;\n                if (f == s || i != UZIP.F._hash(e, t - l))\n                    return 0;\n                for (var c = 0, u = 0, h = Math.min(32767, t); l <= h && 0 != --a && f != s;) {\n                    if (0 == c || e[t + c] == e[t + c - l]) {\n                        var d = UZIP.F._howLong(e, t, l);\n                        if (d > c) {\n                            if (u = l, (c = d) >= o)\n                                break;\n                            l + 2 < d && (d = l + 2);\n                            for (var A = 0, g = 0; g < d - 2; g++) {\n                                var p = t - l + g + 32768 & 32767, m = p - r[p] + 32768 & 32767;\n                                m > A && (A = m, f = p);\n                            }\n                        }\n                    }\n                    l += (s = f) - (f = r[s]) + 32768 & 32767;\n                }\n                return c << 16 | u;\n            }, UZIP.F._howLong = function (e, t, r) {\n                if (e[t] != e[t - r] || e[t + 1] != e[t + 1 - r] || e[t + 2] != e[t + 2 - r])\n                    return 0;\n                var i = t, o = Math.min(e.length, t + 258);\n                for (t += 3; t < o && e[t] == e[t - r];)\n                    t++;\n                return t - i;\n            }, UZIP.F._hash = function (e, t) {\n                return (e[t] << 8 | e[t + 1]) + (e[t + 2] << 4) & 65535;\n            }, UZIP.saved = 0, UZIP.F._writeBlock = function (e, t, r, i, o, a, s, f, l) {\n                var c, u, h, d, A, g, p, m, w, v = UZIP.F.U, b = UZIP.F._putsF, y = UZIP.F._putsE;\n                v.lhst[256]++, u = (c = UZIP.F.getTrees())[0], h = c[1], d = c[2], A = c[3], g = c[4], p = c[5], m = c[6], w = c[7];\n                var E = 32 + (0 == (l + 3 & 7) ? 0 : 8 - (l + 3 & 7)) + (s << 3), F = i + UZIP.F.contSize(v.fltree, v.lhst) + UZIP.F.contSize(v.fdtree, v.dhst), _ = i + UZIP.F.contSize(v.ltree, v.lhst) + UZIP.F.contSize(v.dtree, v.dhst);\n                _ += 14 + 3 * p + UZIP.F.contSize(v.itree, v.ihst) + (2 * v.ihst[16] + 3 * v.ihst[17] + 7 * v.ihst[18]);\n                for (var B = 0; B < 286; B++)\n                    v.lhst[B] = 0;\n                for (B = 0; B < 30; B++)\n                    v.dhst[B] = 0;\n                for (B = 0; B < 19; B++)\n                    v.ihst[B] = 0;\n                var U = E < F && E < _ ? 0 : F < _ ? 1 : 2;\n                if (b(f, l, e), b(f, l + 1, U), l += 3, 0 == U) {\n                    for (; 0 != (7 & l);)\n                        l++;\n                    l = UZIP.F._copyExact(o, a, s, f, l);\n                }\n                else {\n                    var C, I;\n                    if (1 == U && (C = v.fltree, I = v.fdtree), 2 == U) {\n                        UZIP.F.makeCodes(v.ltree, u), UZIP.F.revCodes(v.ltree, u), UZIP.F.makeCodes(v.dtree, h), UZIP.F.revCodes(v.dtree, h), UZIP.F.makeCodes(v.itree, d), UZIP.F.revCodes(v.itree, d), C = v.ltree, I = v.dtree, y(f, l, A - 257), y(f, l += 5, g - 1), y(f, l += 5, p - 4), l += 4;\n                        for (var Q = 0; Q < p; Q++)\n                            y(f, l + 3 * Q, v.itree[1 + (v.ordr[Q] << 1)]);\n                        l += 3 * p, l = UZIP.F._codeTiny(m, v.itree, f, l), l = UZIP.F._codeTiny(w, v.itree, f, l);\n                    }\n                    for (var M = a, x = 0; x < r; x += 2) {\n                        for (var T = t[x], S = T >>> 23, R = M + (8388607 & T); M < R;)\n                            l = UZIP.F._writeLit(o[M++], C, f, l);\n                        if (0 != S) {\n                            var O = t[x + 1], P = O >> 16, H = O >> 8 & 255, L = 255 & O;\n                            y(f, l = UZIP.F._writeLit(257 + H, C, f, l), S - v.of0[H]), l += v.exb[H], b(f, l = UZIP.F._writeLit(L, I, f, l), P - v.df0[L]), l += v.dxb[L], M += S;\n                        }\n                    }\n                    l = UZIP.F._writeLit(256, C, f, l);\n                }\n                return l;\n            }, UZIP.F._copyExact = function (e, t, r, i, o) {\n                var a = o >>> 3;\n                return i[a] = r, i[a + 1] = r >>> 8, i[a + 2] = 255 - i[a], i[a + 3] = 255 - i[a + 1], a += 4, i.set(new Uint8Array(e.buffer, t, r), a), o + (r + 4 << 3);\n            }, UZIP.F.getTrees = function () {\n                for (var e = UZIP.F.U, t = UZIP.F._hufTree(e.lhst, e.ltree, 15), r = UZIP.F._hufTree(e.dhst, e.dtree, 15), i = [], o = UZIP.F._lenCodes(e.ltree, i), a = [], s = UZIP.F._lenCodes(e.dtree, a), f = 0; f < i.length; f += 2)\n                    e.ihst[i[f]]++;\n                for (f = 0; f < a.length; f += 2)\n                    e.ihst[a[f]]++;\n                for (var l = UZIP.F._hufTree(e.ihst, e.itree, 7), c = 19; c > 4 && 0 == e.itree[1 + (e.ordr[c - 1] << 1)];)\n                    c--;\n                return [t, r, l, o, s, c, i, a];\n            }, UZIP.F.getSecond = function (e) {\n                for (var t = [], r = 0; r < e.length; r += 2)\n                    t.push(e[r + 1]);\n                return t;\n            }, UZIP.F.nonZero = function (e) {\n                for (var t = \"\", r = 0; r < e.length; r += 2)\n                    0 != e[r + 1] && (t += (r >> 1) + \",\");\n                return t;\n            }, UZIP.F.contSize = function (e, t) {\n                for (var r = 0, i = 0; i < t.length; i++)\n                    r += t[i] * e[1 + (i << 1)];\n                return r;\n            }, UZIP.F._codeTiny = function (e, t, r, i) {\n                for (var o = 0; o < e.length; o += 2) {\n                    var a = e[o], s = e[o + 1];\n                    i = UZIP.F._writeLit(a, t, r, i);\n                    var f = 16 == a ? 2 : 17 == a ? 3 : 7;\n                    a > 15 && (UZIP.F._putsE(r, i, s, f), i += f);\n                }\n                return i;\n            }, UZIP.F._lenCodes = function (e, t) {\n                for (var r = e.length; 2 != r && 0 == e[r - 1];)\n                    r -= 2;\n                for (var i = 0; i < r; i += 2) {\n                    var o = e[i + 1], a = i + 3 < r ? e[i + 3] : -1, s = i + 5 < r ? e[i + 5] : -1, f = 0 == i ? -1 : e[i - 1];\n                    if (0 == o && a == o && s == o) {\n                        for (var l = i + 5; l + 2 < r && e[l + 2] == o;)\n                            l += 2;\n                        (c = Math.min(l + 1 - i >>> 1, 138)) < 11 ? t.push(17, c - 3) : t.push(18, c - 11), i += 2 * c - 2;\n                    }\n                    else if (o == f && a == o && s == o) {\n                        for (l = i + 5; l + 2 < r && e[l + 2] == o;)\n                            l += 2;\n                        var c = Math.min(l + 1 - i >>> 1, 6);\n                        t.push(16, c - 3), i += 2 * c - 2;\n                    }\n                    else\n                        t.push(o, 0);\n                }\n                return r >>> 1;\n            }, UZIP.F._hufTree = function (e, t, r) {\n                var i = [], o = e.length, a = t.length, s = 0;\n                for (s = 0; s < a; s += 2)\n                    t[s] = 0, t[s + 1] = 0;\n                for (s = 0; s < o; s++)\n                    0 != e[s] && i.push({ lit: s, f: e[s] });\n                var f = i.length, l = i.slice(0);\n                if (0 == f)\n                    return 0;\n                if (1 == f) {\n                    var c = i[0].lit;\n                    l = 0 == c ? 1 : 0;\n                    return t[1 + (c << 1)] = 1, t[1 + (l << 1)] = 1, 1;\n                }\n                i.sort((function (e, t) {\n                    return e.f - t.f;\n                }));\n                var u = i[0], h = i[1], d = 0, A = 1, g = 2;\n                for (i[0] = {\n                    lit: -1,\n                    f: u.f + h.f,\n                    l: u,\n                    r: h,\n                    d: 0\n                }; A != f - 1;)\n                    u = d != A && (g == f || i[d].f < i[g].f) ? i[d++] : i[g++], h = d != A && (g == f || i[d].f < i[g].f) ? i[d++] : i[g++], i[A++] = {\n                        lit: -1,\n                        f: u.f + h.f,\n                        l: u,\n                        r: h\n                    };\n                var p = UZIP.F.setDepth(i[A - 1], 0);\n                for (p > r && (UZIP.F.restrictDepth(l, r, p), p = r), s = 0; s < f; s++)\n                    t[1 + (l[s].lit << 1)] = l[s].d;\n                return p;\n            }, UZIP.F.setDepth = function (e, t) {\n                return -1 != e.lit ? (e.d = t, t) : Math.max(UZIP.F.setDepth(e.l, t + 1), UZIP.F.setDepth(e.r, t + 1));\n            }, UZIP.F.restrictDepth = function (e, t, r) {\n                var i = 0, o = 1 << r - t, a = 0;\n                for (e.sort((function (e, t) {\n                    return t.d == e.d ? e.f - t.f : t.d - e.d;\n                })), i = 0; i < e.length && e[i].d > t; i++) {\n                    var s = e[i].d;\n                    e[i].d = t, a += o - (1 << r - s);\n                }\n                for (a >>>= r - t; a > 0;) {\n                    (s = e[i].d) < t ? (e[i].d++, a -= 1 << t - s - 1) : i++;\n                }\n                for (; i >= 0; i--)\n                    e[i].d == t && a < 0 && (e[i].d--, a++);\n                0 != a && console.log(\"debt left\");\n            }, UZIP.F._goodIndex = function (e, t) {\n                var r = 0;\n                return t[16 | r] <= e && (r |= 16), t[8 | r] <= e && (r |= 8), t[4 | r] <= e && (r |= 4), t[2 | r] <= e && (r |= 2), t[1 | r] <= e && (r |= 1), r;\n            }, UZIP.F._writeLit = function (e, t, r, i) {\n                return UZIP.F._putsF(r, i, t[e << 1]), i + t[1 + (e << 1)];\n            }, UZIP.F.inflate = function (e, t) {\n                var r = Uint8Array;\n                if (3 == e[0] && 0 == e[1])\n                    return t || new r(0);\n                var i = UZIP.F, o = i._bitsF, a = i._bitsE, s = i._decodeTiny, f = i.makeCodes, l = i.codes2map, c = i._get17, u = i.U, h = null == t;\n                h && (t = new r(e.length >>> 2 << 3));\n                for (var d, A, g = 0, p = 0, m = 0, w = 0, v = 0, b = 0, y = 0, E = 0, F = 0; 0 == g;)\n                    if (g = o(e, F, 1), p = o(e, F + 1, 2), F += 3, 0 != p) {\n                        if (h && (t = UZIP.F._check(t, E + (1 << 17))), 1 == p && (d = u.flmap, A = u.fdmap, b = 511, y = 31), 2 == p) {\n                            m = a(e, F, 5) + 257, w = a(e, F + 5, 5) + 1, v = a(e, F + 10, 4) + 4, F += 14;\n                            for (var _ = 0; _ < 38; _ += 2)\n                                u.itree[_] = 0, u.itree[_ + 1] = 0;\n                            var B = 1;\n                            for (_ = 0; _ < v; _++) {\n                                var U = a(e, F + 3 * _, 3);\n                                u.itree[1 + (u.ordr[_] << 1)] = U, U > B && (B = U);\n                            }\n                            F += 3 * v, f(u.itree, B), l(u.itree, B, u.imap), d = u.lmap, A = u.dmap, F = s(u.imap, (1 << B) - 1, m + w, e, F, u.ttree);\n                            var C = i._copyOut(u.ttree, 0, m, u.ltree);\n                            b = (1 << C) - 1;\n                            var I = i._copyOut(u.ttree, m, w, u.dtree);\n                            y = (1 << I) - 1, f(u.ltree, C), l(u.ltree, C, d), f(u.dtree, I), l(u.dtree, I, A);\n                        }\n                        for (;;) {\n                            var Q = d[c(e, F) & b];\n                            F += 15 & Q;\n                            var M = Q >>> 4;\n                            if (M >>> 8 == 0)\n                                t[E++] = M;\n                            else {\n                                if (256 == M)\n                                    break;\n                                var x = E + M - 254;\n                                if (M > 264) {\n                                    var T = u.ldef[M - 257];\n                                    x = E + (T >>> 3) + a(e, F, 7 & T), F += 7 & T;\n                                }\n                                var S = A[c(e, F) & y];\n                                F += 15 & S;\n                                var R = S >>> 4, O = u.ddef[R], P = (O >>> 4) + o(e, F, 15 & O);\n                                for (F += 15 & O, h && (t = UZIP.F._check(t, E + (1 << 17))); E < x;)\n                                    t[E] = t[E++ - P], t[E] = t[E++ - P], t[E] = t[E++ - P], t[E] = t[E++ - P];\n                                E = x;\n                            }\n                        }\n                    }\n                    else {\n                        0 != (7 & F) && (F += 8 - (7 & F));\n                        var H = 4 + (F >>> 3), L = e[H - 4] | e[H - 3] << 8;\n                        h && (t = UZIP.F._check(t, E + L)), t.set(new r(e.buffer, e.byteOffset + H, L), E), F = H + L << 3, E += L;\n                    }\n                return t.length == E ? t : t.slice(0, E);\n            }, UZIP.F._check = function (e, t) {\n                var r = e.length;\n                if (t <= r)\n                    return e;\n                var i = new Uint8Array(Math.max(r << 1, t));\n                return i.set(e, 0), i;\n            }, UZIP.F._decodeTiny = function (e, t, r, i, o, a) {\n                for (var s = UZIP.F._bitsE, f = UZIP.F._get17, l = 0; l < r;) {\n                    var c = e[f(i, o) & t];\n                    o += 15 & c;\n                    var u = c >>> 4;\n                    if (u <= 15)\n                        a[l] = u, l++;\n                    else {\n                        var h = 0, d = 0;\n                        16 == u ? (d = 3 + s(i, o, 2), o += 2, h = a[l - 1]) : 17 == u ? (d = 3 + s(i, o, 3), o += 3) : 18 == u && (d = 11 + s(i, o, 7), o += 7);\n                        for (var A = l + d; l < A;)\n                            a[l] = h, l++;\n                    }\n                }\n                return o;\n            }, UZIP.F._copyOut = function (e, t, r, i) {\n                for (var o = 0, a = 0, s = i.length >>> 1; a < r;) {\n                    var f = e[a + t];\n                    i[a << 1] = 0, i[1 + (a << 1)] = f, f > o && (o = f), a++;\n                }\n                for (; a < s;)\n                    i[a << 1] = 0, i[1 + (a << 1)] = 0, a++;\n                return o;\n            }, UZIP.F.makeCodes = function (e, t) {\n                for (var r, i, o, a, s = UZIP.F.U, f = e.length, l = s.bl_count, c = 0; c <= t; c++)\n                    l[c] = 0;\n                for (c = 1; c < f; c += 2)\n                    l[e[c]]++;\n                var u = s.next_code;\n                for (r = 0, l[0] = 0, i = 1; i <= t; i++)\n                    r = r + l[i - 1] << 1, u[i] = r;\n                for (o = 0; o < f; o += 2)\n                    0 != (a = e[o + 1]) && (e[o] = u[a], u[a]++);\n            }, UZIP.F.codes2map = function (e, t, r) {\n                for (var i = e.length, o = UZIP.F.U.rev15, a = 0; a < i; a += 2)\n                    if (0 != e[a + 1])\n                        for (var s = a >> 1, f = e[a + 1], l = s << 4 | f, c = t - f, u = e[a] << c, h = u + (1 << c); u != h;) {\n                            r[o[u] >>> 15 - t] = l, u++;\n                        }\n            }, UZIP.F.revCodes = function (e, t) {\n                for (var r = UZIP.F.U.rev15, i = 15 - t, o = 0; o < e.length; o += 2) {\n                    var a = e[o] << t - e[o + 1];\n                    e[o] = r[a] >>> i;\n                }\n            }, UZIP.F._putsE = function (e, t, r) {\n                r <<= 7 & t;\n                var i = t >>> 3;\n                e[i] |= r, e[i + 1] |= r >>> 8;\n            }, UZIP.F._putsF = function (e, t, r) {\n                r <<= 7 & t;\n                var i = t >>> 3;\n                e[i] |= r, e[i + 1] |= r >>> 8, e[i + 2] |= r >>> 16;\n            }, UZIP.F._bitsE = function (e, t, r) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8) >>> (7 & t) & (1 << r) - 1;\n            }, UZIP.F._bitsF = function (e, t, r) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t) & (1 << r) - 1;\n            }, UZIP.F._get17 = function (e, t) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t);\n            }, UZIP.F._get25 = function (e, t) {\n                return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16 | e[3 + (t >>> 3)] << 24) >>> (7 & t);\n            }, UZIP.F.U = (t = Uint16Array, r = Uint32Array, {\n                next_code: new t(16),\n                bl_count: new t(16),\n                ordr: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n                of0: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\n                exb: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\n                ldef: new t(32),\n                df0: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\n                dxb: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\n                ddef: new r(32),\n                flmap: new t(512),\n                fltree: [],\n                fdmap: new t(32),\n                fdtree: [],\n                lmap: new t(32768),\n                ltree: [],\n                ttree: [],\n                dmap: new t(32768),\n                dtree: [],\n                imap: new t(512),\n                itree: [],\n                rev15: new t(32768),\n                lhst: new r(286),\n                dhst: new r(30),\n                ihst: new r(19),\n                lits: new r(15e3),\n                strt: new t(65536),\n                prev: new t(32768)\n            }), function () {\n                for (var e = UZIP.F.U, t = 0; t < 32768; t++) {\n                    var r = t;\n                    r = (4278255360 & (r = (4042322160 & (r = (3435973836 & (r = (2863311530 & r) >>> 1 | (1431655765 & r) << 1)) >>> 2 | (858993459 & r) << 2)) >>> 4 | (252645135 & r) << 4)) >>> 8 | (16711935 & r) << 8, e.rev15[t] = (r >>> 16 | r << 16) >>> 17;\n                }\n                function pushV(e, t, r) {\n                    for (; 0 != t--;)\n                        e.push(0, r);\n                }\n                for (t = 0; t < 32; t++)\n                    e.ldef[t] = e.of0[t] << 3 | e.exb[t], e.ddef[t] = e.df0[t] << 4 | e.dxb[t];\n                pushV(e.fltree, 144, 8), pushV(e.fltree, 112, 9), pushV(e.fltree, 24, 7), pushV(e.fltree, 8, 8), UZIP.F.makeCodes(e.fltree, 9), UZIP.F.codes2map(e.fltree, 9, e.flmap), UZIP.F.revCodes(e.fltree, 9), pushV(e.fdtree, 32, 5), UZIP.F.makeCodes(e.fdtree, 5), UZIP.F.codes2map(e.fdtree, 5, e.fdmap), UZIP.F.revCodes(e.fdtree, 5), pushV(e.itree, 19, 0), pushV(e.ltree, 286, 0), pushV(e.dtree, 30, 0), pushV(e.ttree, 320, 0);\n            }();\n        }({\n            get exports() {\n                return e;\n            }, set exports(t) {\n                e = t;\n            }\n        });\n        var UZIP = _mergeNamespaces({ __proto__: null, default: e }, [e]);\n        var UPNG = function () {\n            var e = {\n                nextZero: function (e, t) {\n                    for (; 0 != e[t];)\n                        t++;\n                    return t;\n                },\n                readUshort: function (e, t) { return e[t] << 8 | e[t + 1]; },\n                writeUshort: function (e, t, r) {\n                    e[t] = r >> 8 & 255, e[t + 1] = 255 & r;\n                },\n                readUint: function (e, t) { return 16777216 * e[t] + (e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]); },\n                writeUint: function (e, t, r) {\n                    e[t] = r >> 24 & 255, e[t + 1] = r >> 16 & 255, e[t + 2] = r >> 8 & 255, e[t + 3] = 255 & r;\n                },\n                readASCII: function (e, t, r) {\n                    var i = \"\";\n                    for (var o_1 = 0; o_1 < r; o_1++)\n                        i += String.fromCharCode(e[t + o_1]);\n                    return i;\n                },\n                writeASCII: function (e, t, r) {\n                    for (var i_1 = 0; i_1 < r.length; i_1++)\n                        e[t + i_1] = r.charCodeAt(i_1);\n                },\n                readBytes: function (e, t, r) {\n                    var i = [];\n                    for (var o_2 = 0; o_2 < r; o_2++)\n                        i.push(e[t + o_2]);\n                    return i;\n                },\n                pad: function (e) { return e.length < 2 ? \"0\".concat(e) : e; },\n                readUTF8: function (t, r, i) {\n                    var o, a = \"\";\n                    for (var o_3 = 0; o_3 < i; o_3++)\n                        a += \"%\".concat(e.pad(t[r + o_3].toString(16)));\n                    try {\n                        o = decodeURIComponent(a);\n                    }\n                    catch (o) {\n                        return e.readASCII(t, r, i);\n                    }\n                    return o;\n                }\n            };\n            function decodeImage(t, r, i, o) {\n                var a = r * i, s = _getBPP(o), f = Math.ceil(r * s / 8), l = new Uint8Array(4 * a), c = new Uint32Array(l.buffer), u = o.ctype, h = o.depth, d = e.readUshort;\n                if (6 == u) {\n                    var e_2 = a << 2;\n                    if (8 == h)\n                        for (var A = 0; A < e_2; A += 4)\n                            l[A] = t[A], l[A + 1] = t[A + 1], l[A + 2] = t[A + 2], l[A + 3] = t[A + 3];\n                    if (16 == h)\n                        for (A = 0; A < e_2; A++)\n                            l[A] = t[A << 1];\n                }\n                else if (2 == u) {\n                    var e_3 = o.tabs.tRNS;\n                    if (null == e_3) {\n                        if (8 == h)\n                            for (A = 0; A < a; A++) {\n                                var g = 3 * A;\n                                c[A] = 255 << 24 | t[g + 2] << 16 | t[g + 1] << 8 | t[g];\n                            }\n                        if (16 == h)\n                            for (A = 0; A < a; A++) {\n                                g = 6 * A;\n                                c[A] = 255 << 24 | t[g + 4] << 16 | t[g + 2] << 8 | t[g];\n                            }\n                    }\n                    else {\n                        var p = e_3[0];\n                        var r_1 = e_3[1], i_2 = e_3[2];\n                        if (8 == h)\n                            for (A = 0; A < a; A++) {\n                                var m = A << 2;\n                                g = 3 * A;\n                                c[A] = 255 << 24 | t[g + 2] << 16 | t[g + 1] << 8 | t[g], t[g] == p && t[g + 1] == r_1 && t[g + 2] == i_2 && (l[m + 3] = 0);\n                            }\n                        if (16 == h)\n                            for (A = 0; A < a; A++) {\n                                m = A << 2, g = 6 * A;\n                                c[A] = 255 << 24 | t[g + 4] << 16 | t[g + 2] << 8 | t[g], d(t, g) == p && d(t, g + 2) == r_1 && d(t, g + 4) == i_2 && (l[m + 3] = 0);\n                            }\n                    }\n                }\n                else if (3 == u) {\n                    var e_4 = o.tabs.PLTE, s_2 = o.tabs.tRNS, c_1 = s_2 ? s_2.length : 0;\n                    if (1 == h)\n                        for (var w = 0; w < i; w++) {\n                            var v = w * f, b = w * r;\n                            for (A = 0; A < r; A++) {\n                                m = b + A << 2;\n                                var y = 3 * (E = t[v + (A >> 3)] >> 7 - ((7 & A) << 0) & 1);\n                                l[m] = e_4[y], l[m + 1] = e_4[y + 1], l[m + 2] = e_4[y + 2], l[m + 3] = E < c_1 ? s_2[E] : 255;\n                            }\n                        }\n                    if (2 == h)\n                        for (w = 0; w < i; w++)\n                            for (v = w * f, b = w * r, A = 0; A < r; A++) {\n                                m = b + A << 2, y = 3 * (E = t[v + (A >> 2)] >> 6 - ((3 & A) << 1) & 3);\n                                l[m] = e_4[y], l[m + 1] = e_4[y + 1], l[m + 2] = e_4[y + 2], l[m + 3] = E < c_1 ? s_2[E] : 255;\n                            }\n                    if (4 == h)\n                        for (w = 0; w < i; w++)\n                            for (v = w * f, b = w * r, A = 0; A < r; A++) {\n                                m = b + A << 2, y = 3 * (E = t[v + (A >> 1)] >> 4 - ((1 & A) << 2) & 15);\n                                l[m] = e_4[y], l[m + 1] = e_4[y + 1], l[m + 2] = e_4[y + 2], l[m + 3] = E < c_1 ? s_2[E] : 255;\n                            }\n                    if (8 == h)\n                        for (A = 0; A < a; A++) {\n                            var E;\n                            m = A << 2, y = 3 * (E = t[A]);\n                            l[m] = e_4[y], l[m + 1] = e_4[y + 1], l[m + 2] = e_4[y + 2], l[m + 3] = E < c_1 ? s_2[E] : 255;\n                        }\n                }\n                else if (4 == u) {\n                    if (8 == h)\n                        for (A = 0; A < a; A++) {\n                            m = A << 2;\n                            var F = t[_ = A << 1];\n                            l[m] = F, l[m + 1] = F, l[m + 2] = F, l[m + 3] = t[_ + 1];\n                        }\n                    if (16 == h)\n                        for (A = 0; A < a; A++) {\n                            var _;\n                            m = A << 2, F = t[_ = A << 2];\n                            l[m] = F, l[m + 1] = F, l[m + 2] = F, l[m + 3] = t[_ + 2];\n                        }\n                }\n                else if (0 == u)\n                    for (p = o.tabs.tRNS ? o.tabs.tRNS : -1, w = 0; w < i; w++) {\n                        var e_5 = w * f, i_3 = w * r;\n                        if (1 == h)\n                            for (var B = 0; B < r; B++) {\n                                var U = (F = 255 * (t[e_5 + (B >>> 3)] >>> 7 - (7 & B) & 1)) == 255 * p ? 0 : 255;\n                                c[i_3 + B] = U << 24 | F << 16 | F << 8 | F;\n                            }\n                        else if (2 == h)\n                            for (B = 0; B < r; B++) {\n                                U = (F = 85 * (t[e_5 + (B >>> 2)] >>> 6 - ((3 & B) << 1) & 3)) == 85 * p ? 0 : 255;\n                                c[i_3 + B] = U << 24 | F << 16 | F << 8 | F;\n                            }\n                        else if (4 == h)\n                            for (B = 0; B < r; B++) {\n                                U = (F = 17 * (t[e_5 + (B >>> 1)] >>> 4 - ((1 & B) << 2) & 15)) == 17 * p ? 0 : 255;\n                                c[i_3 + B] = U << 24 | F << 16 | F << 8 | F;\n                            }\n                        else if (8 == h)\n                            for (B = 0; B < r; B++) {\n                                U = (F = t[e_5 + B]) == p ? 0 : 255;\n                                c[i_3 + B] = U << 24 | F << 16 | F << 8 | F;\n                            }\n                        else if (16 == h)\n                            for (B = 0; B < r; B++) {\n                                F = t[e_5 + (B << 1)], U = d(t, e_5 + (B << 1)) == p ? 0 : 255;\n                                c[i_3 + B] = U << 24 | F << 16 | F << 8 | F;\n                            }\n                    }\n                return l;\n            }\n            function _decompress(e, r, i, o) {\n                var a = _getBPP(e), s = Math.ceil(i * a / 8), f = new Uint8Array((s + 1 + e.interlace) * o);\n                return r = e.tabs.CgBI ? t(r, f) : _inflate(r, f), 0 == e.interlace ? r = _filterZero(r, e, 0, i, o) : 1 == e.interlace && (r = function _readInterlace(e, t) {\n                    var r = t.width, i = t.height, o = _getBPP(t), a = o >> 3, s = Math.ceil(r * o / 8), f = new Uint8Array(i * s);\n                    var l = 0;\n                    var c = [0, 0, 4, 0, 2, 0, 1], u = [0, 4, 0, 2, 0, 1, 0], h = [8, 8, 8, 4, 4, 2, 2], d = [8, 8, 4, 4, 2, 2, 1];\n                    var A = 0;\n                    for (; A < 7;) {\n                        var p = h[A], m = d[A];\n                        var w = 0, v = 0, b = c[A];\n                        for (; b < i;)\n                            b += p, v++;\n                        var y = u[A];\n                        for (; y < r;)\n                            y += m, w++;\n                        var E = Math.ceil(w * o / 8);\n                        _filterZero(e, t, l, w, v);\n                        var F = 0, _ = c[A];\n                        for (; _ < i;) {\n                            var t_1 = u[A], i_4 = l + F * E << 3;\n                            for (; t_1 < r;) {\n                                var g;\n                                if (1 == o)\n                                    g = (g = e[i_4 >> 3]) >> 7 - (7 & i_4) & 1, f[_ * s + (t_1 >> 3)] |= g << 7 - ((7 & t_1) << 0);\n                                if (2 == o)\n                                    g = (g = e[i_4 >> 3]) >> 6 - (7 & i_4) & 3, f[_ * s + (t_1 >> 2)] |= g << 6 - ((3 & t_1) << 1);\n                                if (4 == o)\n                                    g = (g = e[i_4 >> 3]) >> 4 - (7 & i_4) & 15, f[_ * s + (t_1 >> 1)] |= g << 4 - ((1 & t_1) << 2);\n                                if (o >= 8) {\n                                    var r_2 = _ * s + t_1 * a;\n                                    for (var t_2 = 0; t_2 < a; t_2++)\n                                        f[r_2 + t_2] = e[(i_4 >> 3) + t_2];\n                                }\n                                i_4 += o, t_1 += m;\n                            }\n                            F++, _ += p;\n                        }\n                        w * v != 0 && (l += v * (1 + E)), A += 1;\n                    }\n                    return f;\n                }(r, e)), r;\n            }\n            function _inflate(e, r) {\n                return t(new Uint8Array(e.buffer, 2, e.length - 6), r);\n            }\n            var t = function () {\n                var e = { H: {} };\n                return e.H.N = function (t, r) {\n                    var i = Uint8Array;\n                    var o, a, s = 0, f = 0, l = 0, c = 0, u = 0, h = 0, d = 0, A = 0, g = 0;\n                    if (3 == t[0] && 0 == t[1])\n                        return r || new i(0);\n                    var p = e.H, m = p.b, w = p.e, v = p.R, b = p.n, y = p.A, E = p.Z, F = p.m, _ = null == r;\n                    for (_ && (r = new i(t.length >>> 2 << 5)); 0 == s;)\n                        if (s = m(t, g, 1), f = m(t, g + 1, 2), g += 3, 0 != f) {\n                            if (_ && (r = e.H.W(r, A + (1 << 17))), 1 == f && (o = F.J, a = F.h, h = 511, d = 31), 2 == f) {\n                                l = w(t, g, 5) + 257, c = w(t, g + 5, 5) + 1, u = w(t, g + 10, 4) + 4, g += 14;\n                                var e_6 = 1;\n                                for (var B = 0; B < 38; B += 2)\n                                    F.Q[B] = 0, F.Q[B + 1] = 0;\n                                for (B = 0; B < u; B++) {\n                                    var r_3 = w(t, g + 3 * B, 3);\n                                    F.Q[1 + (F.X[B] << 1)] = r_3, r_3 > e_6 && (e_6 = r_3);\n                                }\n                                g += 3 * u, b(F.Q, e_6), y(F.Q, e_6, F.u), o = F.w, a = F.d, g = v(F.u, (1 << e_6) - 1, l + c, t, g, F.v);\n                                var r_4 = p.V(F.v, 0, l, F.C);\n                                h = (1 << r_4) - 1;\n                                var i_5 = p.V(F.v, l, c, F.D);\n                                d = (1 << i_5) - 1, b(F.C, r_4), y(F.C, r_4, o), b(F.D, i_5), y(F.D, i_5, a);\n                            }\n                            for (;;) {\n                                var e_7 = o[E(t, g) & h];\n                                g += 15 & e_7;\n                                var i_6 = e_7 >>> 4;\n                                if (i_6 >>> 8 == 0)\n                                    r[A++] = i_6;\n                                else {\n                                    if (256 == i_6)\n                                        break;\n                                    {\n                                        var e_8 = A + i_6 - 254;\n                                        if (i_6 > 264) {\n                                            var r_5 = F.q[i_6 - 257];\n                                            e_8 = A + (r_5 >>> 3) + w(t, g, 7 & r_5), g += 7 & r_5;\n                                        }\n                                        var o_4 = a[E(t, g) & d];\n                                        g += 15 & o_4;\n                                        var s_3 = o_4 >>> 4, f_2 = F.c[s_3], l_2 = (f_2 >>> 4) + m(t, g, 15 & f_2);\n                                        for (g += 15 & f_2; A < e_8;)\n                                            r[A] = r[A++ - l_2], r[A] = r[A++ - l_2], r[A] = r[A++ - l_2], r[A] = r[A++ - l_2];\n                                        A = e_8;\n                                    }\n                                }\n                            }\n                        }\n                        else {\n                            0 != (7 & g) && (g += 8 - (7 & g));\n                            var o_5 = 4 + (g >>> 3), a_3 = t[o_5 - 4] | t[o_5 - 3] << 8;\n                            _ && (r = e.H.W(r, A + a_3)), r.set(new i(t.buffer, t.byteOffset + o_5, a_3), A), g = o_5 + a_3 << 3, A += a_3;\n                        }\n                    return r.length == A ? r : r.slice(0, A);\n                }, e.H.W = function (e, t) {\n                    var r = e.length;\n                    if (t <= r)\n                        return e;\n                    var i = new Uint8Array(r << 1);\n                    return i.set(e, 0), i;\n                }, e.H.R = function (t, r, i, o, a, s) {\n                    var f = e.H.e, l = e.H.Z;\n                    var c = 0;\n                    for (; c < i;) {\n                        var e_9 = t[l(o, a) & r];\n                        a += 15 & e_9;\n                        var i_7 = e_9 >>> 4;\n                        if (i_7 <= 15)\n                            s[c] = i_7, c++;\n                        else {\n                            var e_10 = 0, t_3 = 0;\n                            16 == i_7 ? (t_3 = 3 + f(o, a, 2), a += 2, e_10 = s[c - 1]) : 17 == i_7 ? (t_3 = 3 + f(o, a, 3), a += 3) : 18 == i_7 && (t_3 = 11 + f(o, a, 7), a += 7);\n                            var r_6 = c + t_3;\n                            for (; c < r_6;)\n                                s[c] = e_10, c++;\n                        }\n                    }\n                    return a;\n                }, e.H.V = function (e, t, r, i) {\n                    var o = 0, a = 0;\n                    var s = i.length >>> 1;\n                    for (; a < r;) {\n                        var r_7 = e[a + t];\n                        i[a << 1] = 0, i[1 + (a << 1)] = r_7, r_7 > o && (o = r_7), a++;\n                    }\n                    for (; a < s;)\n                        i[a << 1] = 0, i[1 + (a << 1)] = 0, a++;\n                    return o;\n                }, e.H.n = function (t, r) {\n                    var i = e.H.m, o = t.length;\n                    var a, s, f;\n                    var l;\n                    var c = i.j;\n                    for (var u = 0; u <= r; u++)\n                        c[u] = 0;\n                    for (u = 1; u < o; u += 2)\n                        c[t[u]]++;\n                    var h = i.K;\n                    for (a = 0, c[0] = 0, s = 1; s <= r; s++)\n                        a = a + c[s - 1] << 1, h[s] = a;\n                    for (f = 0; f < o; f += 2)\n                        l = t[f + 1], 0 != l && (t[f] = h[l], h[l]++);\n                }, e.H.A = function (t, r, i) {\n                    var o = t.length, a = e.H.m.r;\n                    for (var e_11 = 0; e_11 < o; e_11 += 2)\n                        if (0 != t[e_11 + 1]) {\n                            var o_6 = e_11 >> 1, s_4 = t[e_11 + 1], f_3 = o_6 << 4 | s_4, l_3 = r - s_4;\n                            var c = t[e_11] << l_3;\n                            var u = c + (1 << l_3);\n                            for (; c != u;) {\n                                i[a[c] >>> 15 - r] = f_3, c++;\n                            }\n                        }\n                }, e.H.l = function (t, r) {\n                    var i = e.H.m.r, o = 15 - r;\n                    for (var e_12 = 0; e_12 < t.length; e_12 += 2) {\n                        var a_4 = t[e_12] << r - t[e_12 + 1];\n                        t[e_12] = i[a_4] >>> o;\n                    }\n                }, e.H.M = function (e, t, r) {\n                    r <<= 7 & t;\n                    var i = t >>> 3;\n                    e[i] |= r, e[i + 1] |= r >>> 8;\n                }, e.H.I = function (e, t, r) {\n                    r <<= 7 & t;\n                    var i = t >>> 3;\n                    e[i] |= r, e[i + 1] |= r >>> 8, e[i + 2] |= r >>> 16;\n                }, e.H.e = function (e, t, r) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8) >>> (7 & t) & (1 << r) - 1;\n                }, e.H.b = function (e, t, r) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t) & (1 << r) - 1;\n                }, e.H.Z = function (e, t) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16) >>> (7 & t);\n                }, e.H.i = function (e, t) {\n                    return (e[t >>> 3] | e[1 + (t >>> 3)] << 8 | e[2 + (t >>> 3)] << 16 | e[3 + (t >>> 3)] << 24) >>> (7 & t);\n                }, e.H.m = function () {\n                    var e = Uint16Array, t = Uint32Array;\n                    return {\n                        K: new e(16),\n                        j: new e(16),\n                        X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n                        S: [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 999, 999, 999],\n                        T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\n                        q: new e(32),\n                        p: [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 65535, 65535],\n                        z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\n                        c: new t(32),\n                        J: new e(512),\n                        _: [],\n                        h: new e(32),\n                        $: [],\n                        w: new e(32768),\n                        C: [],\n                        v: [],\n                        d: new e(32768),\n                        D: [],\n                        u: new e(512),\n                        Q: [],\n                        r: new e(32768),\n                        s: new t(286),\n                        Y: new t(30),\n                        a: new t(19),\n                        t: new t(15e3),\n                        k: new e(65536),\n                        g: new e(32768)\n                    };\n                }(), function () {\n                    var t = e.H.m;\n                    for (var r = 0; r < 32768; r++) {\n                        var e_13 = r;\n                        e_13 = (2863311530 & e_13) >>> 1 | (1431655765 & e_13) << 1, e_13 = (3435973836 & e_13) >>> 2 | (858993459 & e_13) << 2, e_13 = (4042322160 & e_13) >>> 4 | (252645135 & e_13) << 4, e_13 = (4278255360 & e_13) >>> 8 | (16711935 & e_13) << 8, t.r[r] = (e_13 >>> 16 | e_13 << 16) >>> 17;\n                    }\n                    function n(e, t, r) {\n                        for (; 0 != t--;)\n                            e.push(0, r);\n                    }\n                    for (r = 0; r < 32; r++)\n                        t.q[r] = t.S[r] << 3 | t.T[r], t.c[r] = t.p[r] << 4 | t.z[r];\n                    n(t._, 144, 8), n(t._, 112, 9), n(t._, 24, 7), n(t._, 8, 8), e.H.n(t._, 9), e.H.A(t._, 9, t.J), e.H.l(t._, 9), n(t.$, 32, 5), e.H.n(t.$, 5), e.H.A(t.$, 5, t.h), e.H.l(t.$, 5), n(t.Q, 19, 0), n(t.C, 286, 0), n(t.D, 30, 0), n(t.v, 320, 0);\n                }(), e.H.N;\n            }();\n            function _getBPP(e) {\n                return [1, null, 3, 1, 2, null, 4][e.ctype] * e.depth;\n            }\n            function _filterZero(e, t, r, i, o) {\n                var a = _getBPP(t);\n                var s = Math.ceil(i * a / 8);\n                var f, l;\n                a = Math.ceil(a / 8);\n                var c = e[r], u = 0;\n                if (c > 1 && (e[r] = [0, 0, 1][c - 2]), 3 == c)\n                    for (u = a; u < s; u++)\n                        e[u + 1] = e[u + 1] + (e[u + 1 - a] >>> 1) & 255;\n                for (var t_4 = 0; t_4 < o; t_4++)\n                    if (f = r + t_4 * s, l = f + t_4 + 1, c = e[l - 1], u = 0, 0 == c)\n                        for (; u < s; u++)\n                            e[f + u] = e[l + u];\n                    else if (1 == c) {\n                        for (; u < a; u++)\n                            e[f + u] = e[l + u];\n                        for (; u < s; u++)\n                            e[f + u] = e[l + u] + e[f + u - a];\n                    }\n                    else if (2 == c)\n                        for (; u < s; u++)\n                            e[f + u] = e[l + u] + e[f + u - s];\n                    else if (3 == c) {\n                        for (; u < a; u++)\n                            e[f + u] = e[l + u] + (e[f + u - s] >>> 1);\n                        for (; u < s; u++)\n                            e[f + u] = e[l + u] + (e[f + u - s] + e[f + u - a] >>> 1);\n                    }\n                    else {\n                        for (; u < a; u++)\n                            e[f + u] = e[l + u] + _paeth(0, e[f + u - s], 0);\n                        for (; u < s; u++)\n                            e[f + u] = e[l + u] + _paeth(e[f + u - a], e[f + u - s], e[f + u - a - s]);\n                    }\n                return e;\n            }\n            function _paeth(e, t, r) {\n                var i = e + t - r, o = i - e, a = i - t, s = i - r;\n                return o * o <= a * a && o * o <= s * s ? e : a * a <= s * s ? t : r;\n            }\n            function _IHDR(t, r, i) {\n                i.width = e.readUint(t, r), r += 4, i.height = e.readUint(t, r), r += 4, i.depth = t[r], r++, i.ctype = t[r], r++, i.compress = t[r], r++, i.filter = t[r], r++, i.interlace = t[r], r++;\n            }\n            function _copyTile(e, t, r, i, o, a, s, f, l) {\n                var c = Math.min(t, o), u = Math.min(r, a);\n                var h = 0, d = 0;\n                for (var r_8 = 0; r_8 < u; r_8++)\n                    for (var a_5 = 0; a_5 < c; a_5++)\n                        if (s >= 0 && f >= 0 ? (h = r_8 * t + a_5 << 2, d = (f + r_8) * o + s + a_5 << 2) : (h = (-f + r_8) * t - s + a_5 << 2, d = r_8 * o + a_5 << 2), 0 == l)\n                            i[d] = e[h], i[d + 1] = e[h + 1], i[d + 2] = e[h + 2], i[d + 3] = e[h + 3];\n                        else if (1 == l) {\n                            var A = e[h + 3] * (1 / 255), g = e[h] * A, p = e[h + 1] * A, m = e[h + 2] * A, w = i[d + 3] * (1 / 255), v = i[d] * w, b = i[d + 1] * w, y = i[d + 2] * w;\n                            var t_5 = 1 - A, r_9 = A + w * t_5, o_7 = 0 == r_9 ? 0 : 1 / r_9;\n                            i[d + 3] = 255 * r_9, i[d + 0] = (g + v * t_5) * o_7, i[d + 1] = (p + b * t_5) * o_7, i[d + 2] = (m + y * t_5) * o_7;\n                        }\n                        else if (2 == l) {\n                            A = e[h + 3], g = e[h], p = e[h + 1], m = e[h + 2], w = i[d + 3], v = i[d], b = i[d + 1], y = i[d + 2];\n                            A == w && g == v && p == b && m == y ? (i[d] = 0, i[d + 1] = 0, i[d + 2] = 0, i[d + 3] = 0) : (i[d] = g, i[d + 1] = p, i[d + 2] = m, i[d + 3] = A);\n                        }\n                        else if (3 == l) {\n                            A = e[h + 3], g = e[h], p = e[h + 1], m = e[h + 2], w = i[d + 3], v = i[d], b = i[d + 1], y = i[d + 2];\n                            if (A == w && g == v && p == b && m == y)\n                                continue;\n                            if (A < 220 && w > 20)\n                                return !1;\n                        }\n                return !0;\n            }\n            return {\n                decode: function decode(r) {\n                    var i = new Uint8Array(r);\n                    var o = 8;\n                    var a = e, s = a.readUshort, f = a.readUint, l = { tabs: {}, frames: [] }, c = new Uint8Array(i.length);\n                    var u, h = 0, d = 0;\n                    var A = [137, 80, 78, 71, 13, 10, 26, 10];\n                    for (var g = 0; g < 8; g++)\n                        if (i[g] != A[g])\n                            throw \"The input is not a PNG file!\";\n                    for (; o < i.length;) {\n                        var e_14 = a.readUint(i, o);\n                        o += 4;\n                        var r_10 = a.readASCII(i, o, 4);\n                        if (o += 4, \"IHDR\" == r_10)\n                            _IHDR(i, o, l);\n                        else if (\"iCCP\" == r_10) {\n                            for (var p = o; 0 != i[p];)\n                                p++;\n                            a.readASCII(i, o, p - o), i[p + 1];\n                            var s_5 = i.slice(p + 2, o + e_14);\n                            var f_4 = null;\n                            try {\n                                f_4 = _inflate(s_5);\n                            }\n                            catch (e) {\n                                f_4 = t(s_5);\n                            }\n                            l.tabs[r_10] = f_4;\n                        }\n                        else if (\"CgBI\" == r_10)\n                            l.tabs[r_10] = i.slice(o, o + 4);\n                        else if (\"IDAT\" == r_10) {\n                            for (g = 0; g < e_14; g++)\n                                c[h + g] = i[o + g];\n                            h += e_14;\n                        }\n                        else if (\"acTL\" == r_10)\n                            l.tabs[r_10] = {\n                                num_frames: f(i, o),\n                                num_plays: f(i, o + 4)\n                            }, u = new Uint8Array(i.length);\n                        else if (\"fcTL\" == r_10) {\n                            if (0 != d)\n                                (E = l.frames[l.frames.length - 1]).data = _decompress(l, u.slice(0, d), E.rect.width, E.rect.height), d = 0;\n                            var e_15 = { x: f(i, o + 12), y: f(i, o + 16), width: f(i, o + 4), height: f(i, o + 8) };\n                            var t_6 = s(i, o + 22);\n                            t_6 = s(i, o + 20) / (0 == t_6 ? 100 : t_6);\n                            var r_11 = { rect: e_15, delay: Math.round(1e3 * t_6), dispose: i[o + 24], blend: i[o + 25] };\n                            l.frames.push(r_11);\n                        }\n                        else if (\"fdAT\" == r_10) {\n                            for (g = 0; g < e_14 - 4; g++)\n                                u[d + g] = i[o + g + 4];\n                            d += e_14 - 4;\n                        }\n                        else if (\"pHYs\" == r_10)\n                            l.tabs[r_10] = [a.readUint(i, o), a.readUint(i, o + 4), i[o + 8]];\n                        else if (\"cHRM\" == r_10) {\n                            l.tabs[r_10] = [];\n                            for (g = 0; g < 8; g++)\n                                l.tabs[r_10].push(a.readUint(i, o + 4 * g));\n                        }\n                        else if (\"tEXt\" == r_10 || \"zTXt\" == r_10) {\n                            null == l.tabs[r_10] && (l.tabs[r_10] = {});\n                            var m = a.nextZero(i, o), w = a.readASCII(i, o, m - o), v = o + e_14 - m - 1;\n                            if (\"tEXt\" == r_10)\n                                y = a.readASCII(i, m + 1, v);\n                            else {\n                                var b = _inflate(i.slice(m + 2, m + 2 + v));\n                                y = a.readUTF8(b, 0, b.length);\n                            }\n                            l.tabs[r_10][w] = y;\n                        }\n                        else if (\"iTXt\" == r_10) {\n                            null == l.tabs[r_10] && (l.tabs[r_10] = {});\n                            m = 0, p = o;\n                            m = a.nextZero(i, p);\n                            w = a.readASCII(i, p, m - p);\n                            var t_7 = i[p = m + 1];\n                            var y;\n                            i[p + 1], p += 2, m = a.nextZero(i, p), a.readASCII(i, p, m - p), p = m + 1, m = a.nextZero(i, p), a.readUTF8(i, p, m - p);\n                            v = e_14 - ((p = m + 1) - o);\n                            if (0 == t_7)\n                                y = a.readUTF8(i, p, v);\n                            else {\n                                b = _inflate(i.slice(p, p + v));\n                                y = a.readUTF8(b, 0, b.length);\n                            }\n                            l.tabs[r_10][w] = y;\n                        }\n                        else if (\"PLTE\" == r_10)\n                            l.tabs[r_10] = a.readBytes(i, o, e_14);\n                        else if (\"hIST\" == r_10) {\n                            var e_16 = l.tabs.PLTE.length / 3;\n                            l.tabs[r_10] = [];\n                            for (g = 0; g < e_16; g++)\n                                l.tabs[r_10].push(s(i, o + 2 * g));\n                        }\n                        else if (\"tRNS\" == r_10)\n                            3 == l.ctype ? l.tabs[r_10] = a.readBytes(i, o, e_14) : 0 == l.ctype ? l.tabs[r_10] = s(i, o) : 2 == l.ctype && (l.tabs[r_10] = [s(i, o), s(i, o + 2), s(i, o + 4)]);\n                        else if (\"gAMA\" == r_10)\n                            l.tabs[r_10] = a.readUint(i, o) / 1e5;\n                        else if (\"sRGB\" == r_10)\n                            l.tabs[r_10] = i[o];\n                        else if (\"bKGD\" == r_10)\n                            0 == l.ctype || 4 == l.ctype ? l.tabs[r_10] = [s(i, o)] : 2 == l.ctype || 6 == l.ctype ? l.tabs[r_10] = [s(i, o), s(i, o + 2), s(i, o + 4)] : 3 == l.ctype && (l.tabs[r_10] = i[o]);\n                        else if (\"IEND\" == r_10)\n                            break;\n                        o += e_14, a.readUint(i, o), o += 4;\n                    }\n                    var E;\n                    return 0 != d && ((E = l.frames[l.frames.length - 1]).data = _decompress(l, u.slice(0, d), E.rect.width, E.rect.height)), l.data = _decompress(l, c, l.width, l.height), delete l.compress, delete l.interlace, delete l.filter, l;\n                }, toRGBA8: function toRGBA8(e) {\n                    var t = e.width, r = e.height;\n                    if (null == e.tabs.acTL)\n                        return [decodeImage(e.data, t, r, e).buffer];\n                    var i = [];\n                    null == e.frames[0].data && (e.frames[0].data = e.data);\n                    var o = t * r * 4, a = new Uint8Array(o), s = new Uint8Array(o), f = new Uint8Array(o);\n                    for (var c = 0; c < e.frames.length; c++) {\n                        var u = e.frames[c], h = u.rect.x, d = u.rect.y, A = u.rect.width, g = u.rect.height, p = decodeImage(u.data, A, g, e);\n                        if (0 != c)\n                            for (var l = 0; l < o; l++)\n                                f[l] = a[l];\n                        if (0 == u.blend ? _copyTile(p, A, g, a, t, r, h, d, 0) : 1 == u.blend && _copyTile(p, A, g, a, t, r, h, d, 1), i.push(a.buffer.slice(0)), 0 == u.dispose)\n                            ;\n                        else if (1 == u.dispose)\n                            _copyTile(s, A, g, a, t, r, h, d, 0);\n                        else if (2 == u.dispose)\n                            for (l = 0; l < o; l++)\n                                a[l] = f[l];\n                    }\n                    return i;\n                }, _paeth: _paeth, _copyTile: _copyTile, _bin: e\n            };\n        }();\n        !function () {\n            var e = UPNG._copyTile, t = UPNG._bin, r = UPNG._paeth;\n            var i = {\n                table: function () {\n                    var e = new Uint32Array(256);\n                    for (var t_8 = 0; t_8 < 256; t_8++) {\n                        var r_12 = t_8;\n                        for (var e_17 = 0; e_17 < 8; e_17++)\n                            1 & r_12 ? r_12 = 3988292384 ^ r_12 >>> 1 : r_12 >>>= 1;\n                        e[t_8] = r_12;\n                    }\n                    return e;\n                }(),\n                update: function (e, t, r, o) {\n                    for (var a_6 = 0; a_6 < o; a_6++)\n                        e = i.table[255 & (e ^ t[r + a_6])] ^ e >>> 8;\n                    return e;\n                },\n                crc: function (e, t, r) { return 4294967295 ^ i.update(4294967295, e, t, r); }\n            };\n            function addErr(e, t, r, i) {\n                t[r] += e[0] * i >> 4, t[r + 1] += e[1] * i >> 4, t[r + 2] += e[2] * i >> 4, t[r + 3] += e[3] * i >> 4;\n            }\n            function N(e) {\n                return Math.max(0, Math.min(255, e));\n            }\n            function D(e, t) {\n                var r = e[0] - t[0], i = e[1] - t[1], o = e[2] - t[2], a = e[3] - t[3];\n                return r * r + i * i + o * o + a * a;\n            }\n            function dither(e, t, r, i, o, a, s) {\n                null == s && (s = 1);\n                var f = i.length, l = [];\n                for (var c = 0; c < f; c++) {\n                    var e_18 = i[c];\n                    l.push([e_18 >>> 0 & 255, e_18 >>> 8 & 255, e_18 >>> 16 & 255, e_18 >>> 24 & 255]);\n                }\n                for (c = 0; c < f; c++) {\n                    var e_19 = 4294967295;\n                    for (var u = 0, h = 0; h < f; h++) {\n                        var d = D(l[c], l[h]);\n                        h != c && d < e_19 && (e_19 = d, u = h);\n                    }\n                }\n                var A = new Uint32Array(o.buffer), g = new Int16Array(t * r * 4), p = [0, 8, 2, 10, 12, 4, 14, 6, 3, 11, 1, 9, 15, 7, 13, 5];\n                for (c = 0; c < p.length; c++)\n                    p[c] = 255 * ((p[c] + .5) / 16 - .5);\n                for (var o_8 = 0; o_8 < r; o_8++)\n                    for (var w = 0; w < t; w++) {\n                        var m;\n                        c = 4 * (o_8 * t + w);\n                        if (2 != s)\n                            m = [N(e[c] + g[c]), N(e[c + 1] + g[c + 1]), N(e[c + 2] + g[c + 2]), N(e[c + 3] + g[c + 3])];\n                        else {\n                            d = p[4 * (3 & o_8) + (3 & w)];\n                            m = [N(e[c] + d), N(e[c + 1] + d), N(e[c + 2] + d), N(e[c + 3] + d)];\n                        }\n                        u = 0;\n                        var v = 16777215;\n                        for (h = 0; h < f; h++) {\n                            var e_20 = D(m, l[h]);\n                            e_20 < v && (v = e_20, u = h);\n                        }\n                        var b = l[u], y = [m[0] - b[0], m[1] - b[1], m[2] - b[2], m[3] - b[3]];\n                        1 == s && (w != t - 1 && addErr(y, g, c + 4, 7), o_8 != r - 1 && (0 != w && addErr(y, g, c + 4 * t - 4, 3), addErr(y, g, c + 4 * t, 5), w != t - 1 && addErr(y, g, c + 4 * t + 4, 1))), a[c >> 2] = u, A[c >> 2] = i[u];\n                    }\n            }\n            function _main(e, r, o, a, s) {\n                null == s && (s = {});\n                var f = i.crc, l = t.writeUint, c = t.writeUshort, u = t.writeASCII;\n                var h = 8;\n                var d = e.frames.length > 1;\n                var A, g = !1, p = 33 + (d ? 20 : 0);\n                if (null != s.sRGB && (p += 13), null != s.pHYs && (p += 21), null != s.iCCP && (A = pako.deflate(s.iCCP), p += 21 + A.length + 4), 3 == e.ctype) {\n                    for (var m = e.plte.length, w = 0; w < m; w++)\n                        e.plte[w] >>> 24 != 255 && (g = !0);\n                    p += 8 + 3 * m + 4 + (g ? 8 + 1 * m + 4 : 0);\n                }\n                for (var v = 0; v < e.frames.length; v++) {\n                    d && (p += 38), p += (F = e.frames[v]).cimg.length + 12, 0 != v && (p += 4);\n                }\n                p += 12;\n                var b = new Uint8Array(p), y = [137, 80, 78, 71, 13, 10, 26, 10];\n                for (w = 0; w < 8; w++)\n                    b[w] = y[w];\n                if (l(b, h, 13), h += 4, u(b, h, \"IHDR\"), h += 4, l(b, h, r), h += 4, l(b, h, o), h += 4, b[h] = e.depth, h++, b[h] = e.ctype, h++, b[h] = 0, h++, b[h] = 0, h++, b[h] = 0, h++, l(b, h, f(b, h - 17, 17)), h += 4, null != s.sRGB && (l(b, h, 1), h += 4, u(b, h, \"sRGB\"), h += 4, b[h] = s.sRGB, h++, l(b, h, f(b, h - 5, 5)), h += 4), null != s.iCCP) {\n                    var e_21 = 13 + A.length;\n                    l(b, h, e_21), h += 4, u(b, h, \"iCCP\"), h += 4, u(b, h, \"ICC profile\"), h += 11, h += 2, b.set(A, h), h += A.length, l(b, h, f(b, h - (e_21 + 4), e_21 + 4)), h += 4;\n                }\n                if (null != s.pHYs && (l(b, h, 9), h += 4, u(b, h, \"pHYs\"), h += 4, l(b, h, s.pHYs[0]), h += 4, l(b, h, s.pHYs[1]), h += 4, b[h] = s.pHYs[2], h++, l(b, h, f(b, h - 13, 13)), h += 4), d && (l(b, h, 8), h += 4, u(b, h, \"acTL\"), h += 4, l(b, h, e.frames.length), h += 4, l(b, h, null != s.loop ? s.loop : 0), h += 4, l(b, h, f(b, h - 12, 12)), h += 4), 3 == e.ctype) {\n                    l(b, h, 3 * (m = e.plte.length)), h += 4, u(b, h, \"PLTE\"), h += 4;\n                    for (w = 0; w < m; w++) {\n                        var t_9 = 3 * w, r_13 = e.plte[w], i_8 = 255 & r_13, o_9 = r_13 >>> 8 & 255, a_7 = r_13 >>> 16 & 255;\n                        b[h + t_9 + 0] = i_8, b[h + t_9 + 1] = o_9, b[h + t_9 + 2] = a_7;\n                    }\n                    if (h += 3 * m, l(b, h, f(b, h - 3 * m - 4, 3 * m + 4)), h += 4, g) {\n                        l(b, h, m), h += 4, u(b, h, \"tRNS\"), h += 4;\n                        for (w = 0; w < m; w++)\n                            b[h + w] = e.plte[w] >>> 24 & 255;\n                        h += m, l(b, h, f(b, h - m - 4, m + 4)), h += 4;\n                    }\n                }\n                var E = 0;\n                for (v = 0; v < e.frames.length; v++) {\n                    var F = e.frames[v];\n                    d && (l(b, h, 26), h += 4, u(b, h, \"fcTL\"), h += 4, l(b, h, E++), h += 4, l(b, h, F.rect.width), h += 4, l(b, h, F.rect.height), h += 4, l(b, h, F.rect.x), h += 4, l(b, h, F.rect.y), h += 4, c(b, h, a[v]), h += 2, c(b, h, 1e3), h += 2, b[h] = F.dispose, h++, b[h] = F.blend, h++, l(b, h, f(b, h - 30, 30)), h += 4);\n                    var t_10 = F.cimg;\n                    l(b, h, (m = t_10.length) + (0 == v ? 0 : 4)), h += 4;\n                    var r_14 = h;\n                    u(b, h, 0 == v ? \"IDAT\" : \"fdAT\"), h += 4, 0 != v && (l(b, h, E++), h += 4), b.set(t_10, h), h += m, l(b, h, f(b, r_14, h - r_14)), h += 4;\n                }\n                return l(b, h, 0), h += 4, u(b, h, \"IEND\"), h += 4, l(b, h, f(b, h - 4, 4)), h += 4, b.buffer;\n            }\n            function compressPNG(e, t, r) {\n                for (var i_9 = 0; i_9 < e.frames.length; i_9++) {\n                    var o_10 = e.frames[i_9];\n                    o_10.rect.width;\n                    var a_8 = o_10.rect.height, s_6 = new Uint8Array(a_8 * o_10.bpl + a_8);\n                    o_10.cimg = _filterZero(o_10.img, a_8, o_10.bpp, o_10.bpl, s_6, t, r);\n                }\n            }\n            function compress(t, r, i, o, a) {\n                var s = a[0], f = a[1], l = a[2], c = a[3], u = a[4], h = a[5];\n                var d = 6, A = 8, g = 255;\n                for (var p = 0; p < t.length; p++) {\n                    var e_22 = new Uint8Array(t[p]);\n                    for (var m = e_22.length, w = 0; w < m; w += 4)\n                        g &= e_22[w + 3];\n                }\n                var v = 255 != g, b = function framize(t, r, i, o, a, s) {\n                    var f = [];\n                    for (var l = 0; l < t.length; l++) {\n                        var h_1 = new Uint8Array(t[l]), A_1 = new Uint32Array(h_1.buffer);\n                        var c;\n                        var g_1 = 0, p_1 = 0, m_1 = r, w_1 = i, v_1 = o ? 1 : 0;\n                        if (0 != l) {\n                            var b_1 = s || o || 1 == l || 0 != f[l - 2].dispose ? 1 : 2;\n                            var y_1 = 0, E_1 = 1e9;\n                            for (var e_23 = 0; e_23 < b_1; e_23++) {\n                                var u = new Uint8Array(t[l - 1 - e_23]);\n                                var o_11 = new Uint32Array(t[l - 1 - e_23]);\n                                var s_7 = r, f_5 = i, c_2 = -1, h_2 = -1;\n                                for (var e_24 = 0; e_24 < i; e_24++)\n                                    for (var t_11 = 0; t_11 < r; t_11++) {\n                                        A_1[d = e_24 * r + t_11] != o_11[d] && (t_11 < s_7 && (s_7 = t_11), t_11 > c_2 && (c_2 = t_11), e_24 < f_5 && (f_5 = e_24), e_24 > h_2 && (h_2 = e_24));\n                                    }\n                                -1 == c_2 && (s_7 = f_5 = c_2 = h_2 = 0), a && (1 == (1 & s_7) && s_7--, 1 == (1 & f_5) && f_5--);\n                                var v_2 = (c_2 - s_7 + 1) * (h_2 - f_5 + 1);\n                                v_2 < E_1 && (E_1 = v_2, y_1 = e_23, g_1 = s_7, p_1 = f_5, m_1 = c_2 - s_7 + 1, w_1 = h_2 - f_5 + 1);\n                            }\n                            u = new Uint8Array(t[l - 1 - y_1]);\n                            1 == y_1 && (f[l - 1].dispose = 2), c = new Uint8Array(m_1 * w_1 * 4), e(u, r, i, c, m_1, w_1, -g_1, -p_1, 0), v_1 = e(h_1, r, i, c, m_1, w_1, -g_1, -p_1, 3) ? 1 : 0, 1 == v_1 ? _prepareDiff(h_1, r, i, c, {\n                                x: g_1,\n                                y: p_1,\n                                width: m_1,\n                                height: w_1\n                            }) : e(h_1, r, i, c, m_1, w_1, -g_1, -p_1, 0);\n                        }\n                        else\n                            c = h_1.slice(0);\n                        f.push({ rect: { x: g_1, y: p_1, width: m_1, height: w_1 }, img: c, blend: v_1, dispose: 0 });\n                    }\n                    if (o)\n                        for (l = 0; l < f.length; l++) {\n                            if (1 == (A = f[l]).blend)\n                                continue;\n                            var e_25 = A.rect, o_12 = f[l - 1].rect, s_8 = Math.min(e_25.x, o_12.x), c_3 = Math.min(e_25.y, o_12.y), u_1 = {\n                                x: s_8,\n                                y: c_3,\n                                width: Math.max(e_25.x + e_25.width, o_12.x + o_12.width) - s_8,\n                                height: Math.max(e_25.y + e_25.height, o_12.y + o_12.height) - c_3\n                            };\n                            f[l - 1].dispose = 1, l - 1 != 0 && _updateFrame(t, r, i, f, l - 1, u_1, a), _updateFrame(t, r, i, f, l, u_1, a);\n                        }\n                    var h = 0;\n                    if (1 != t.length)\n                        for (var d = 0; d < f.length; d++) {\n                            var A;\n                            h += (A = f[d]).rect.width * A.rect.height;\n                        }\n                    return f;\n                }(t, r, i, s, f, l), y = {}, E = [], F = [];\n                if (0 != o) {\n                    var e_26 = [];\n                    for (w = 0; w < b.length; w++)\n                        e_26.push(b[w].img.buffer);\n                    var t_12 = function concatRGBA(e) {\n                        var t = 0;\n                        for (var r = 0; r < e.length; r++)\n                            t += e[r].byteLength;\n                        var i = new Uint8Array(t);\n                        var o = 0;\n                        for (r = 0; r < e.length; r++) {\n                            var t_13 = new Uint8Array(e[r]), a_9 = t_13.length;\n                            for (var e_27 = 0; e_27 < a_9; e_27 += 4) {\n                                var r_15 = t_13[e_27], a_10 = t_13[e_27 + 1], s_9 = t_13[e_27 + 2];\n                                var f_6 = t_13[e_27 + 3];\n                                0 == f_6 && (r_15 = a_10 = s_9 = 0), i[o + e_27] = r_15, i[o + e_27 + 1] = a_10, i[o + e_27 + 2] = s_9, i[o + e_27 + 3] = f_6;\n                            }\n                            o += a_9;\n                        }\n                        return i.buffer;\n                    }(e_26), r_16 = quantize(t_12, o);\n                    for (w = 0; w < r_16.plte.length; w++)\n                        E.push(r_16.plte[w].est.rgba);\n                    var i_10 = 0;\n                    for (w = 0; w < b.length; w++) {\n                        var e_28 = (B = b[w]).img.length;\n                        var _ = new Uint8Array(r_16.inds.buffer, i_10 >> 2, e_28 >> 2);\n                        F.push(_);\n                        var t_14 = new Uint8Array(r_16.abuf, i_10, e_28);\n                        h && dither(B.img, B.rect.width, B.rect.height, E, t_14, _), B.img.set(t_14), i_10 += e_28;\n                    }\n                }\n                else\n                    for (p = 0; p < b.length; p++) {\n                        var B = b[p];\n                        var e_29 = new Uint32Array(B.img.buffer);\n                        var U = B.rect.width;\n                        m = e_29.length, _ = new Uint8Array(m);\n                        F.push(_);\n                        for (w = 0; w < m; w++) {\n                            var t_15 = e_29[w];\n                            if (0 != w && t_15 == e_29[w - 1])\n                                _[w] = _[w - 1];\n                            else if (w > U && t_15 == e_29[w - U])\n                                _[w] = _[w - U];\n                            else {\n                                var e_30 = y[t_15];\n                                if (null == e_30 && (y[t_15] = e_30 = E.length, E.push(t_15), E.length >= 300))\n                                    break;\n                                _[w] = e_30;\n                            }\n                        }\n                    }\n                var C = E.length;\n                C <= 256 && 0 == u && (A = C <= 2 ? 1 : C <= 4 ? 2 : C <= 16 ? 4 : 8, A = Math.max(A, c));\n                for (p = 0; p < b.length; p++) {\n                    (B = b[p]).rect.x, B.rect.y;\n                    U = B.rect.width;\n                    var e_31 = B.rect.height;\n                    var t_16 = B.img;\n                    new Uint32Array(t_16.buffer);\n                    var r_17 = 4 * U, i_11 = 4;\n                    if (C <= 256 && 0 == u) {\n                        r_17 = Math.ceil(A * U / 8);\n                        var I = new Uint8Array(r_17 * e_31);\n                        var o_13 = F[p];\n                        for (var t_17 = 0; t_17 < e_31; t_17++) {\n                            w = t_17 * r_17;\n                            var e_32 = t_17 * U;\n                            if (8 == A)\n                                for (var Q = 0; Q < U; Q++)\n                                    I[w + Q] = o_13[e_32 + Q];\n                            else if (4 == A)\n                                for (Q = 0; Q < U; Q++)\n                                    I[w + (Q >> 1)] |= o_13[e_32 + Q] << 4 - 4 * (1 & Q);\n                            else if (2 == A)\n                                for (Q = 0; Q < U; Q++)\n                                    I[w + (Q >> 2)] |= o_13[e_32 + Q] << 6 - 2 * (3 & Q);\n                            else if (1 == A)\n                                for (Q = 0; Q < U; Q++)\n                                    I[w + (Q >> 3)] |= o_13[e_32 + Q] << 7 - 1 * (7 & Q);\n                        }\n                        t_16 = I, d = 3, i_11 = 1;\n                    }\n                    else if (0 == v && 1 == b.length) {\n                        I = new Uint8Array(U * e_31 * 3);\n                        var o_14 = U * e_31;\n                        for (w = 0; w < o_14; w++) {\n                            var e_33 = 3 * w, r_18 = 4 * w;\n                            I[e_33] = t_16[r_18], I[e_33 + 1] = t_16[r_18 + 1], I[e_33 + 2] = t_16[r_18 + 2];\n                        }\n                        t_16 = I, d = 2, i_11 = 3, r_17 = 3 * U;\n                    }\n                    B.img = t_16, B.bpl = r_17, B.bpp = i_11;\n                }\n                return { ctype: d, depth: A, plte: E, frames: b };\n            }\n            function _updateFrame(t, r, i, o, a, s, f) {\n                var l = Uint8Array, c = Uint32Array, u = new l(t[a - 1]), h = new c(t[a - 1]), d = a + 1 < t.length ? new l(t[a + 1]) : null, A = new l(t[a]), g = new c(A.buffer);\n                var p = r, m = i, w = -1, v = -1;\n                for (var e_34 = 0; e_34 < s.height; e_34++)\n                    for (var t_18 = 0; t_18 < s.width; t_18++) {\n                        var i_12 = s.x + t_18, f_7 = s.y + e_34, l_4 = f_7 * r + i_12, c_4 = g[l_4];\n                        0 == c_4 || 0 == o[a - 1].dispose && h[l_4] == c_4 && (null == d || 0 != d[4 * l_4 + 3]) || (i_12 < p && (p = i_12), i_12 > w && (w = i_12), f_7 < m && (m = f_7), f_7 > v && (v = f_7));\n                    }\n                -1 == w && (p = m = w = v = 0), f && (1 == (1 & p) && p--, 1 == (1 & m) && m--), s = {\n                    x: p,\n                    y: m,\n                    width: w - p + 1,\n                    height: v - m + 1\n                };\n                var b = o[a];\n                b.rect = s, b.blend = 1, b.img = new Uint8Array(s.width * s.height * 4), 0 == o[a - 1].dispose ? (e(u, r, i, b.img, s.width, s.height, -s.x, -s.y, 0), _prepareDiff(A, r, i, b.img, s)) : e(A, r, i, b.img, s.width, s.height, -s.x, -s.y, 0);\n            }\n            function _prepareDiff(t, r, i, o, a) {\n                e(t, r, i, o, a.width, a.height, -a.x, -a.y, 2);\n            }\n            function _filterZero(e, t, r, i, o, a, s) {\n                var f = [];\n                var l, c = [0, 1, 2, 3, 4];\n                -1 != a ? c = [a] : (t * i > 5e5 || 1 == r) && (c = [0]), s && (l = { level: 0 });\n                var u = UZIP;\n                for (var h = 0; h < c.length; h++) {\n                    for (var a_11 = 0; a_11 < t; a_11++)\n                        _filterLine(o, e, a_11, i, r, c[h]);\n                    f.push(u.deflate(o, l));\n                }\n                var d, A = 1e9;\n                for (h = 0; h < f.length; h++)\n                    f[h].length < A && (d = h, A = f[h].length);\n                return f[d];\n            }\n            function _filterLine(e, t, i, o, a, s) {\n                var f = i * o;\n                var l = f + i;\n                if (e[l] = s, l++, 0 == s)\n                    if (o < 500)\n                        for (var c = 0; c < o; c++)\n                            e[l + c] = t[f + c];\n                    else\n                        e.set(new Uint8Array(t.buffer, f, o), l);\n                else if (1 == s) {\n                    for (c = 0; c < a; c++)\n                        e[l + c] = t[f + c];\n                    for (c = a; c < o; c++)\n                        e[l + c] = t[f + c] - t[f + c - a] + 256 & 255;\n                }\n                else if (0 == i) {\n                    for (c = 0; c < a; c++)\n                        e[l + c] = t[f + c];\n                    if (2 == s)\n                        for (c = a; c < o; c++)\n                            e[l + c] = t[f + c];\n                    if (3 == s)\n                        for (c = a; c < o; c++)\n                            e[l + c] = t[f + c] - (t[f + c - a] >> 1) + 256 & 255;\n                    if (4 == s)\n                        for (c = a; c < o; c++)\n                            e[l + c] = t[f + c] - r(t[f + c - a], 0, 0) + 256 & 255;\n                }\n                else {\n                    if (2 == s)\n                        for (c = 0; c < o; c++)\n                            e[l + c] = t[f + c] + 256 - t[f + c - o] & 255;\n                    if (3 == s) {\n                        for (c = 0; c < a; c++)\n                            e[l + c] = t[f + c] + 256 - (t[f + c - o] >> 1) & 255;\n                        for (c = a; c < o; c++)\n                            e[l + c] = t[f + c] + 256 - (t[f + c - o] + t[f + c - a] >> 1) & 255;\n                    }\n                    if (4 == s) {\n                        for (c = 0; c < a; c++)\n                            e[l + c] = t[f + c] + 256 - r(0, t[f + c - o], 0) & 255;\n                        for (c = a; c < o; c++)\n                            e[l + c] = t[f + c] + 256 - r(t[f + c - a], t[f + c - o], t[f + c - a - o]) & 255;\n                    }\n                }\n            }\n            function quantize(e, t) {\n                var r = new Uint8Array(e), i = r.slice(0), o = new Uint32Array(i.buffer), a = getKDtree(i, t), s = a[0], f = a[1], l = r.length, c = new Uint8Array(l >> 2);\n                var u;\n                if (r.length < 2e7)\n                    for (var h = 0; h < l; h += 4) {\n                        u = getNearest(s, d = r[h] * (1 / 255), A = r[h + 1] * (1 / 255), g = r[h + 2] * (1 / 255), p = r[h + 3] * (1 / 255)), c[h >> 2] = u.ind, o[h >> 2] = u.est.rgba;\n                    }\n                else\n                    for (h = 0; h < l; h += 4) {\n                        var d = r[h] * (1 / 255), A = r[h + 1] * (1 / 255), g = r[h + 2] * (1 / 255), p = r[h + 3] * (1 / 255);\n                        for (u = s; u.left;)\n                            u = planeDst(u.est, d, A, g, p) <= 0 ? u.left : u.right;\n                        c[h >> 2] = u.ind, o[h >> 2] = u.est.rgba;\n                    }\n                return { abuf: i.buffer, inds: c, plte: f };\n            }\n            function getKDtree(e, t, r) {\n                null == r && (r = 1e-4);\n                var i = new Uint32Array(e.buffer), o = { i0: 0, i1: e.length, bst: null, est: null, tdst: 0, left: null, right: null };\n                o.bst = stats(e, o.i0, o.i1), o.est = estats(o.bst);\n                var a = [o];\n                for (; a.length < t;) {\n                    var t_19 = 0, o_15 = 0;\n                    for (var s = 0; s < a.length; s++)\n                        a[s].est.L > t_19 && (t_19 = a[s].est.L, o_15 = s);\n                    if (t_19 < r)\n                        break;\n                    var f_8 = a[o_15], l_5 = splitPixels(e, i, f_8.i0, f_8.i1, f_8.est.e, f_8.est.eMq255);\n                    if (f_8.i0 >= l_5 || f_8.i1 <= l_5) {\n                        f_8.est.L = 0;\n                        continue;\n                    }\n                    var c = { i0: f_8.i0, i1: l_5, bst: null, est: null, tdst: 0, left: null, right: null };\n                    c.bst = stats(e, c.i0, c.i1), c.est = estats(c.bst);\n                    var u = { i0: l_5, i1: f_8.i1, bst: null, est: null, tdst: 0, left: null, right: null };\n                    u.bst = { R: [], m: [], N: f_8.bst.N - c.bst.N };\n                    for (s = 0; s < 16; s++)\n                        u.bst.R[s] = f_8.bst.R[s] - c.bst.R[s];\n                    for (s = 0; s < 4; s++)\n                        u.bst.m[s] = f_8.bst.m[s] - c.bst.m[s];\n                    u.est = estats(u.bst), f_8.left = c, f_8.right = u, a[o_15] = c, a.push(u);\n                }\n                a.sort((function (e, t) { return t.bst.N - e.bst.N; }));\n                for (s = 0; s < a.length; s++)\n                    a[s].ind = s;\n                return [o, a];\n            }\n            function getNearest(e, t, r, i, o) {\n                if (null == e.left)\n                    return e.tdst = function dist(e, t, r, i, o) {\n                        var a = t - e[0], s = r - e[1], f = i - e[2], l = o - e[3];\n                        return a * a + s * s + f * f + l * l;\n                    }(e.est.q, t, r, i, o), e;\n                var a = planeDst(e.est, t, r, i, o);\n                var s = e.left, f = e.right;\n                a > 0 && (s = e.right, f = e.left);\n                var l = getNearest(s, t, r, i, o);\n                if (l.tdst <= a * a)\n                    return l;\n                var c = getNearest(f, t, r, i, o);\n                return c.tdst < l.tdst ? c : l;\n            }\n            function planeDst(e, t, r, i, o) {\n                var a = e.e;\n                return a[0] * t + a[1] * r + a[2] * i + a[3] * o - e.eMq;\n            }\n            function splitPixels(e, t, r, i, o, a) {\n                for (i -= 4; r < i;) {\n                    for (; vecDot(e, r, o) <= a;)\n                        r += 4;\n                    for (; vecDot(e, i, o) > a;)\n                        i -= 4;\n                    if (r >= i)\n                        break;\n                    var s_10 = t[r >> 2];\n                    t[r >> 2] = t[i >> 2], t[i >> 2] = s_10, r += 4, i -= 4;\n                }\n                for (; vecDot(e, r, o) > a;)\n                    r -= 4;\n                return r + 4;\n            }\n            function vecDot(e, t, r) {\n                return e[t] * r[0] + e[t + 1] * r[1] + e[t + 2] * r[2] + e[t + 3] * r[3];\n            }\n            function stats(e, t, r) {\n                var i = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], o = [0, 0, 0, 0], a = r - t >> 2;\n                for (var a_12 = t; a_12 < r; a_12 += 4) {\n                    var t_20 = e[a_12] * (1 / 255), r_19 = e[a_12 + 1] * (1 / 255), s_11 = e[a_12 + 2] * (1 / 255), f_9 = e[a_12 + 3] * (1 / 255);\n                    o[0] += t_20, o[1] += r_19, o[2] += s_11, o[3] += f_9, i[0] += t_20 * t_20, i[1] += t_20 * r_19, i[2] += t_20 * s_11, i[3] += t_20 * f_9, i[5] += r_19 * r_19, i[6] += r_19 * s_11, i[7] += r_19 * f_9, i[10] += s_11 * s_11, i[11] += s_11 * f_9, i[15] += f_9 * f_9;\n                }\n                return i[4] = i[1], i[8] = i[2], i[9] = i[6], i[12] = i[3], i[13] = i[7], i[14] = i[11], {\n                    R: i,\n                    m: o,\n                    N: a\n                };\n            }\n            function estats(e) {\n                var t = e.R, r = e.m, i = e.N, a = r[0], s = r[1], f = r[2], l = r[3], c = 0 == i ? 0 : 1 / i, u = [t[0] - a * a * c, t[1] - a * s * c, t[2] - a * f * c, t[3] - a * l * c, t[4] - s * a * c, t[5] - s * s * c, t[6] - s * f * c, t[7] - s * l * c, t[8] - f * a * c, t[9] - f * s * c, t[10] - f * f * c, t[11] - f * l * c, t[12] - l * a * c, t[13] - l * s * c, t[14] - l * f * c, t[15] - l * l * c], h = u, d = o;\n                var A = [Math.random(), Math.random(), Math.random(), Math.random()], g = 0, p = 0;\n                if (0 != i)\n                    for (var e_35 = 0; e_35 < 16 && (A = d.multVec(h, A), p = Math.sqrt(d.dot(A, A)), A = d.sml(1 / p, A), !(0 != e_35 && Math.abs(p - g) < 1e-9)); e_35++)\n                        g = p;\n                var m = [a * c, s * c, f * c, l * c];\n                return {\n                    Cov: u,\n                    q: m,\n                    e: A,\n                    L: g,\n                    eMq255: d.dot(d.sml(255, m), A),\n                    eMq: d.dot(A, m),\n                    rgba: (Math.round(255 * m[3]) << 24 | Math.round(255 * m[2]) << 16 | Math.round(255 * m[1]) << 8 | Math.round(255 * m[0]) << 0) >>> 0\n                };\n            }\n            var o = {\n                multVec: function (e, t) { return [e[0] * t[0] + e[1] * t[1] + e[2] * t[2] + e[3] * t[3], e[4] * t[0] + e[5] * t[1] + e[6] * t[2] + e[7] * t[3], e[8] * t[0] + e[9] * t[1] + e[10] * t[2] + e[11] * t[3], e[12] * t[0] + e[13] * t[1] + e[14] * t[2] + e[15] * t[3]]; },\n                dot: function (e, t) { return e[0] * t[0] + e[1] * t[1] + e[2] * t[2] + e[3] * t[3]; },\n                sml: function (e, t) { return [e * t[0], e * t[1], e * t[2], e * t[3]]; }\n            };\n            UPNG.encode = function encode(e, t, r, i, o, a, s) {\n                null == i && (i = 0), null == s && (s = !1);\n                var f = compress(e, t, r, i, [!1, !1, !1, 0, s, !1]);\n                return compressPNG(f, -1), _main(f, t, r, o, a);\n            }, UPNG.encodeLL = function encodeLL(e, t, r, i, o, a, s, f) {\n                var l = { ctype: 0 + (1 == i ? 0 : 2) + (0 == o ? 0 : 4), depth: a, frames: [] }, c = (i + o) * a, u = c * t;\n                for (var i_13 = 0; i_13 < e.length; i_13++)\n                    l.frames.push({\n                        rect: { x: 0, y: 0, width: t, height: r },\n                        img: new Uint8Array(e[i_13]),\n                        blend: 0,\n                        dispose: 1,\n                        bpp: Math.ceil(c / 8),\n                        bpl: Math.ceil(u / 8)\n                    });\n                return compressPNG(l, 0, !0), _main(l, t, r, s, f);\n            }, UPNG.encode.compress = compress, UPNG.encode.dither = dither, UPNG.quantize = quantize, UPNG.quantize.getKDtree = getKDtree, UPNG.quantize.getNearest = getNearest;\n        }();\n        var t = {\n            toArrayBuffer: function (e, r) {\n                var i = e.width, o = e.height, a = i << 2, s = e.getContext(\"2d\").getImageData(0, 0, i, o), f = new Uint32Array(s.data.buffer), l = (32 * i + 31) / 32 << 2, c = l * o, u = 122 + c, h = new ArrayBuffer(u), d = new DataView(h), A = 1 << 20;\n                var g, p, m, w, v = A, b = 0, y = 0, E = 0;\n                function set16(e) {\n                    d.setUint16(y, e, !0), y += 2;\n                }\n                function set32(e) {\n                    d.setUint32(y, e, !0), y += 4;\n                }\n                function seek(e) {\n                    y += e;\n                }\n                set16(19778), set32(u), seek(4), set32(122), set32(108), set32(i), set32(-o >>> 0), set16(1), set16(32), set32(3), set32(c), set32(2835), set32(2835), seek(8), set32(16711680), set32(65280), set32(255), set32(4278190080), set32(1466527264), function convert() {\n                    for (; b < o && v > 0;) {\n                        for (w = 122 + b * l, g = 0; g < a;)\n                            v--, p = f[E++], m = p >>> 24, d.setUint32(w + g, p << 8 | m), g += 4;\n                        b++;\n                    }\n                    E < f.length ? (v = A, setTimeout(convert, t._dly)) : r(h);\n                }();\n            },\n            toBlob: function (e, t) {\n                this.toArrayBuffer(e, (function (e) {\n                    t(new Blob([e], { type: \"image/bmp\" }));\n                }));\n            },\n            _dly: 9\n        };\n        var r = {\n            CHROME: \"CHROME\",\n            FIREFOX: \"FIREFOX\",\n            DESKTOP_SAFARI: \"DESKTOP_SAFARI\",\n            IE: \"IE\",\n            IOS: \"IOS\",\n            ETC: \"ETC\"\n        }, i = (_a = {},\n            _a[r.CHROME] = 16384,\n            _a[r.FIREFOX] = 11180,\n            _a[r.DESKTOP_SAFARI] = 16384,\n            _a[r.IE] = 8192,\n            _a[r.IOS] = 4096,\n            _a[r.ETC] = 8192,\n            _a);\n        var o = \"undefined\" != typeof window, a = \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope, s = o && window.cordova && window.cordova.require && window.cordova.require(\"cordova/modulemapper\"), CustomFile = (o || a) && (s && s.getOriginalSymbol(window, \"File\") || \"undefined\" != typeof File && File), CustomFileReader = (o || a) && (s && s.getOriginalSymbol(window, \"FileReader\") || \"undefined\" != typeof FileReader && FileReader);\n        function getFilefromDataUrl(e, t, r) {\n            if (r === void 0) { r = Date.now(); }\n            return new Promise((function (i) {\n                var o = e.split(\",\"), a = o[0].match(/:(.*?);/)[1], s = globalThis.atob(o[1]);\n                var f = s.length;\n                var l = new Uint8Array(f);\n                for (; f--;)\n                    l[f] = s.charCodeAt(f);\n                var c = new Blob([l], { type: a });\n                c.name = t, c.lastModified = r, i(c);\n            }));\n        }\n        function getDataUrlFromFile(e) {\n            return new Promise((function (t, r) {\n                var i = new CustomFileReader;\n                i.onload = function () { return t(i.result); }, i.onerror = function (e) { return r(e); }, i.readAsDataURL(e);\n            }));\n        }\n        function loadImage(e) {\n            return new Promise((function (t, r) {\n                var i = new Image;\n                i.onload = function () { return t(i); }, i.onerror = function (e) { return r(e); }, i.src = e;\n            }));\n        }\n        function getBrowserName() {\n            if (void 0 !== getBrowserName.cachedResult)\n                return getBrowserName.cachedResult;\n            var e = r.ETC;\n            var t = navigator.userAgent;\n            return /Chrom(e|ium)/i.test(t) ? e = r.CHROME : /iP(ad|od|hone)/i.test(t) && /WebKit/i.test(t) ? e = r.IOS : /Safari/i.test(t) ? e = r.DESKTOP_SAFARI : /Firefox/i.test(t) ? e = r.FIREFOX : (/MSIE/i.test(t) || !0 == !!document.documentMode) && (e = r.IE), getBrowserName.cachedResult = e, getBrowserName.cachedResult;\n        }\n        function approximateBelowMaximumCanvasSizeOfBrowser(e, t) {\n            var r = getBrowserName(), o = i[r];\n            var a = e, s = t, f = a * s;\n            var l = a > s ? s / a : a / s;\n            for (; f > o * o;) {\n                var e_36 = (o + a) / 2, t_21 = (o + s) / 2;\n                e_36 < t_21 ? (s = t_21, a = t_21 * l) : (s = e_36 * l, a = e_36), f = a * s;\n            }\n            return { width: a, height: s };\n        }\n        function getNewCanvasAndCtx(e, t) {\n            var r, i;\n            try {\n                if (r = new OffscreenCanvas(e, t), i = r.getContext(\"2d\"), null === i)\n                    throw new Error(\"getContext of OffscreenCanvas returns null\");\n            }\n            catch (e) {\n                r = document.createElement(\"canvas\"), i = r.getContext(\"2d\");\n            }\n            return r.width = e, r.height = t, [r, i];\n        }\n        function drawImageInCanvas(e, t) {\n            var _a = approximateBelowMaximumCanvasSizeOfBrowser(e.width, e.height), r = _a.width, i = _a.height, _b = getNewCanvasAndCtx(r, i), o = _b[0], a = _b[1];\n            return t && /jpe?g/.test(t) && (a.fillStyle = \"white\", a.fillRect(0, 0, o.width, o.height)), a.drawImage(e, 0, 0, o.width, o.height), o;\n        }\n        function isIOS() {\n            return void 0 !== isIOS.cachedResult || (isIOS.cachedResult = [\"iPad Simulator\", \"iPhone Simulator\", \"iPod Simulator\", \"iPad\", \"iPhone\", \"iPod\"].includes(navigator.platform) || navigator.userAgent.includes(\"Mac\") && \"undefined\" != typeof document && \"ontouchend\" in document), isIOS.cachedResult;\n        }\n        function drawFileInCanvas(e, t) {\n            if (t === void 0) { t = {}; }\n            return new Promise((function (i, o) {\n                var a, s;\n                var $Try_2_Post = function () {\n                    try {\n                        return s = drawImageInCanvas(a, t.fileType || e.type), i([a, s]);\n                    }\n                    catch (e) {\n                        return o(e);\n                    }\n                }, $Try_2_Catch = function (t) {\n                    try {\n                        0;\n                        var $Try_3_Catch = function (e) {\n                            try {\n                                throw e;\n                            }\n                            catch (e) {\n                                return o(e);\n                            }\n                        };\n                        try {\n                            var t_22;\n                            return getDataUrlFromFile(e).then((function (e) {\n                                try {\n                                    return t_22 = e, loadImage(t_22).then((function (e) {\n                                        try {\n                                            return a = e, function () {\n                                                try {\n                                                    return $Try_2_Post();\n                                                }\n                                                catch (e) {\n                                                    return o(e);\n                                                }\n                                            }();\n                                        }\n                                        catch (e) {\n                                            return $Try_3_Catch(e);\n                                        }\n                                    }), $Try_3_Catch);\n                                }\n                                catch (e) {\n                                    return $Try_3_Catch(e);\n                                }\n                            }), $Try_3_Catch);\n                        }\n                        catch (e) {\n                            $Try_3_Catch(e);\n                        }\n                    }\n                    catch (e) {\n                        return o(e);\n                    }\n                };\n                try {\n                    if (isIOS() || [r.DESKTOP_SAFARI, r.MOBILE_SAFARI].includes(getBrowserName()))\n                        throw new Error(\"Skip createImageBitmap on IOS and Safari\");\n                    return createImageBitmap(e).then((function (e) {\n                        try {\n                            return a = e, $Try_2_Post();\n                        }\n                        catch (e) {\n                            return $Try_2_Catch();\n                        }\n                    }), $Try_2_Catch);\n                }\n                catch (e) {\n                    $Try_2_Catch();\n                }\n            }));\n        }\n        function canvasToFile(e, r, i, o, a) {\n            if (a === void 0) { a = 1; }\n            return new Promise((function (s, f) {\n                var l;\n                if (\"image/png\" === r) {\n                    var c = void 0, u = void 0, h = void 0;\n                    return c = e.getContext(\"2d\"), (u = c.getImageData(0, 0, e.width, e.height).data), h = UPNG.encode([u.buffer], e.width, e.height, 4096 * a), l = new Blob([h], { type: r }), l.name = i, l.lastModified = o, $If_4.call(this);\n                }\n                {\n                    if (\"image/bmp\" === r)\n                        return new Promise((function (r) { return t.toBlob(e, r); })).then(function (e) {\n                            try {\n                                return l = e, l.name = i, l.lastModified = o, $If_5.call(this);\n                            }\n                            catch (e) {\n                                return f(e);\n                            }\n                        }.bind(this), f);\n                    {\n                        if (\"function\" == typeof OffscreenCanvas && e instanceof OffscreenCanvas)\n                            return e.convertToBlob({\n                                type: r,\n                                quality: a\n                            }).then(function (e) {\n                                try {\n                                    return l = e, l.name = i, l.lastModified = o, $If_6.call(this);\n                                }\n                                catch (e) {\n                                    return f(e);\n                                }\n                            }.bind(this), f);\n                        {\n                            var d = void 0;\n                            return d = e.toDataURL(r, a), getFilefromDataUrl(d, i, o).then(function (e) {\n                                try {\n                                    return l = e, $If_6.call(this);\n                                }\n                                catch (e) {\n                                    return f(e);\n                                }\n                            }.bind(this), f);\n                        }\n                        function $If_6() {\n                            return $If_5.call(this);\n                        }\n                    }\n                    function $If_5() {\n                        return $If_4.call(this);\n                    }\n                }\n                function $If_4() {\n                    return s(l);\n                }\n            }));\n        }\n        function cleanupCanvasMemory(e) {\n            e.width = 0, e.height = 0;\n        }\n        function isAutoOrientationInBrowser() {\n            return new Promise((function (e, t) {\n                var r, i, o, a, s;\n                return void 0 !== isAutoOrientationInBrowser.cachedResult ? e(isAutoOrientationInBrowser.cachedResult) : (r = \"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\", getFilefromDataUrl(\"data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==\", \"test.jpg\", Date.now()).then((function (r) {\n                    try {\n                        return i = r, drawFileInCanvas(i).then((function (r) {\n                            try {\n                                return o = r[1], canvasToFile(o, i.type, i.name, i.lastModified).then((function (r) {\n                                    try {\n                                        return a = r, cleanupCanvasMemory(o), drawFileInCanvas(a).then((function (r) {\n                                            try {\n                                                return s = r[0], isAutoOrientationInBrowser.cachedResult = 1 === s.width && 2 === s.height, e(isAutoOrientationInBrowser.cachedResult);\n                                            }\n                                            catch (e) {\n                                                return t(e);\n                                            }\n                                        }), t);\n                                    }\n                                    catch (e) {\n                                        return t(e);\n                                    }\n                                }), t);\n                            }\n                            catch (e) {\n                                return t(e);\n                            }\n                        }), t);\n                    }\n                    catch (e) {\n                        return t(e);\n                    }\n                }), t));\n            }));\n        }\n        function getExifOrientation(e) {\n            return new Promise((function (t, r) {\n                var i = new CustomFileReader;\n                i.onload = function (e) {\n                    var r = new DataView(e.target.result);\n                    if (65496 != r.getUint16(0, !1))\n                        return t(-2);\n                    var i = r.byteLength;\n                    var o = 2;\n                    for (; o < i;) {\n                        if (r.getUint16(o + 2, !1) <= 8)\n                            return t(-1);\n                        var e_37 = r.getUint16(o, !1);\n                        if (o += 2, 65505 == e_37) {\n                            if (1165519206 != r.getUint32(o += 2, !1))\n                                return t(-1);\n                            var e_38 = 18761 == r.getUint16(o += 6, !1);\n                            o += r.getUint32(o + 4, e_38);\n                            var i_14 = r.getUint16(o, e_38);\n                            o += 2;\n                            for (var a_13 = 0; a_13 < i_14; a_13++)\n                                if (274 == r.getUint16(o + 12 * a_13, e_38))\n                                    return t(r.getUint16(o + 12 * a_13 + 8, e_38));\n                        }\n                        else {\n                            if (65280 != (65280 & e_37))\n                                break;\n                            o += r.getUint16(o, !1);\n                        }\n                    }\n                    return t(-1);\n                }, i.onerror = function (e) { return r(e); }, i.readAsArrayBuffer(e);\n            }));\n        }\n        function handleMaxWidthOrHeight(e, t) {\n            var _a;\n            var r = e.width, i = e.height, o = t.maxWidthOrHeight;\n            var a, s = e;\n            return isFinite(o) && (r > o || i > o) && (_a = getNewCanvasAndCtx(r, i), s = _a[0], a = _a[1], r > i ? (s.width = o, s.height = i / r * o) : (s.width = r / i * o, s.height = o), a.drawImage(e, 0, 0, s.width, s.height), cleanupCanvasMemory(e)), s;\n        }\n        function followExifOrientation(e, t) {\n            var r = e.width, i = e.height, _a = getNewCanvasAndCtx(r, i), o = _a[0], a = _a[1];\n            switch (t > 4 && t < 9 ? (o.width = i, o.height = r) : (o.width = r, o.height = i), t) {\n                case 2:\n                    a.transform(-1, 0, 0, 1, r, 0);\n                    break;\n                case 3:\n                    a.transform(-1, 0, 0, -1, r, i);\n                    break;\n                case 4:\n                    a.transform(1, 0, 0, -1, 0, i);\n                    break;\n                case 5:\n                    a.transform(0, 1, 1, 0, 0, 0);\n                    break;\n                case 6:\n                    a.transform(0, 1, -1, 0, i, 0);\n                    break;\n                case 7:\n                    a.transform(0, -1, -1, 0, i, r);\n                    break;\n                case 8:\n                    a.transform(0, -1, 1, 0, 0, r);\n            }\n            return a.drawImage(e, 0, 0, r, i), cleanupCanvasMemory(e), o;\n        }\n        function compress(e, t, r) {\n            if (r === void 0) { r = 0; }\n            return new Promise((function (i, o) {\n                var a, s, f, l, c, u, h, d, A, g, p, m, w, v, b, y, E, F, _, B;\n                function incProgress(e) {\n                    if (e === void 0) { e = 5; }\n                    if (t.signal && t.signal.aborted)\n                        throw t.signal.reason;\n                    a += e, t.onProgress(Math.min(a, 100));\n                }\n                function setProgress(e) {\n                    if (t.signal && t.signal.aborted)\n                        throw t.signal.reason;\n                    a = Math.min(Math.max(e, a), 100), t.onProgress(a);\n                }\n                return a = r, s = t.maxIteration || 10, f = 1024 * t.maxSizeMB * 1024, incProgress(), drawFileInCanvas(e, t).then(function (r) {\n                    try {\n                        return l = r[1], incProgress(), c = handleMaxWidthOrHeight(l, t), incProgress(), new Promise((function (r, i) {\n                            var o;\n                            if (!(o = t.exifOrientation))\n                                return getExifOrientation(e).then(function (e) {\n                                    try {\n                                        return o = e, $If_2.call(this);\n                                    }\n                                    catch (e) {\n                                        return i(e);\n                                    }\n                                }.bind(this), i);\n                            function $If_2() {\n                                return r(o);\n                            }\n                            return $If_2.call(this);\n                        })).then(function (r) {\n                            try {\n                                return u = r, incProgress(), isAutoOrientationInBrowser().then(function (r) {\n                                    try {\n                                        return h = r ? c : followExifOrientation(c, u), incProgress(), d = t.initialQuality || 1, A = t.fileType || e.type, canvasToFile(h, A, e.name, e.lastModified, d).then(function (r) {\n                                            try {\n                                                {\n                                                    if (g = r, incProgress(), p = g.size > f, m = g.size > e.size, !p && !m)\n                                                        return setProgress(100), i(g);\n                                                    var a;\n                                                    function $Loop_3() {\n                                                        var _a;\n                                                        if (s-- && (b > f || b > w)) {\n                                                            var t_23, r_20;\n                                                            return t_23 = B ? .95 * _.width : _.width, r_20 = B ? .95 * _.height : _.height, _a = getNewCanvasAndCtx(t_23, r_20), E = _a[0], F = _a[1], F.drawImage(_, 0, 0, t_23, r_20), d *= \"image/png\" === A ? .85 : .95, canvasToFile(E, A, e.name, e.lastModified, d).then((function (e) {\n                                                                try {\n                                                                    return y = e, cleanupCanvasMemory(_), _ = E, b = y.size, setProgress(Math.min(99, Math.floor((v - b) / (v - f) * 100))), $Loop_3;\n                                                                }\n                                                                catch (e) {\n                                                                    return o(e);\n                                                                }\n                                                            }), o);\n                                                        }\n                                                        return [1];\n                                                    }\n                                                    return w = e.size, v = g.size, b = v, _ = h, B = !t.alwaysKeepResolution && p, (a = function (e) {\n                                                        for (; e;) {\n                                                            if (e.then)\n                                                                return void e.then(a, o);\n                                                            try {\n                                                                if (e.pop) {\n                                                                    if (e.length)\n                                                                        return e.pop() ? $Loop_3_exit.call(this) : e;\n                                                                    e = $Loop_3;\n                                                                }\n                                                                else\n                                                                    e = e.call(this);\n                                                            }\n                                                            catch (e) {\n                                                                return o(e);\n                                                            }\n                                                        }\n                                                    }.bind(this))($Loop_3);\n                                                    function $Loop_3_exit() {\n                                                        return cleanupCanvasMemory(_), cleanupCanvasMemory(E), cleanupCanvasMemory(c), cleanupCanvasMemory(h), cleanupCanvasMemory(l), setProgress(100), i(y);\n                                                    }\n                                                }\n                                            }\n                                            catch (u) {\n                                                return o(u);\n                                            }\n                                        }.bind(this), o);\n                                    }\n                                    catch (e) {\n                                        return o(e);\n                                    }\n                                }.bind(this), o);\n                            }\n                            catch (e) {\n                                return o(e);\n                            }\n                        }.bind(this), o);\n                    }\n                    catch (e) {\n                        return o(e);\n                    }\n                }.bind(this), o);\n            }));\n        }\n        var f = \"\\nlet scriptImported = false\\nself.addEventListener('message', async (e) => {\\n  const { file, id, imageCompressionLibUrl, options } = e.data\\n  options.onProgress = (progress) => self.postMessage({ progress, id })\\n  try {\\n    if (!scriptImported) {\\n      // console.log('[worker] importScripts', imageCompressionLibUrl)\\n      self.importScripts(imageCompressionLibUrl)\\n      scriptImported = true\\n    }\\n    // console.log('[worker] self', self)\\n    const compressedFile = await imageCompression(file, options)\\n    self.postMessage({ file: compressedFile, id })\\n  } catch (e) {\\n    // console.error('[worker] error', e)\\n    self.postMessage({ error: e.message + '\\\\n' + e.stack, id })\\n  }\\n})\\n\";\n        var l;\n        function compressOnWebWorker(e, t) {\n            return new Promise((function (r, i) {\n                l || (l = function createWorkerScriptURL(e) {\n                    var t = [];\n                    return \"function\" == typeof e ? t.push(\"(\".concat(e, \")()\")) : t.push(e), URL.createObjectURL(new Blob(t));\n                }(f));\n                var o = new Worker(l);\n                o.addEventListener(\"message\", (function handler(e) {\n                    if (t.signal && t.signal.aborted)\n                        o.terminate();\n                    else if (void 0 === e.data.progress) {\n                        if (e.data.error)\n                            return i(new Error(e.data.error)), void o.terminate();\n                        r(e.data.file), o.terminate();\n                    }\n                    else\n                        t.onProgress(e.data.progress);\n                })), o.addEventListener(\"error\", i), t.signal && t.signal.addEventListener(\"abort\", (function () {\n                    i(t.signal.reason), o.terminate();\n                })), o.postMessage({\n                    file: e,\n                    imageCompressionLibUrl: t.libURL,\n                    options: __assign(__assign({}, t), { onProgress: void 0, signal: void 0 })\n                });\n            }));\n        }\n        function imageCompression(e, t) {\n            return new Promise((function (r, i) {\n                var o, a, s, f, l, c;\n                if (o = __assign({}, t), s = 0, (f = o.onProgress), o.maxSizeMB = o.maxSizeMB || Number.POSITIVE_INFINITY, l = \"boolean\" != typeof o.useWebWorker || o.useWebWorker, delete o.useWebWorker, o.onProgress = function (e) {\n                    s = e, \"function\" == typeof f && f(s);\n                }, !(e instanceof Blob || e instanceof CustomFile))\n                    return i(new Error(\"The file given is not an instance of Blob or File\"));\n                if (!/^image/.test(e.type))\n                    return i(new Error(\"The file given is not an image\"));\n                if (c = \"undefined\" != typeof WorkerGlobalScope && self instanceof WorkerGlobalScope, !l || \"function\" != typeof Worker || c)\n                    return compress(e, o).then(function (e) {\n                        try {\n                            return a = e, $If_4.call(this);\n                        }\n                        catch (e) {\n                            return i(e);\n                        }\n                    }.bind(this), i);\n                var u = function () {\n                    try {\n                        return $If_4.call(this);\n                    }\n                    catch (e) {\n                        return i(e);\n                    }\n                }.bind(this), $Try_1_Catch = function (t) {\n                    try {\n                        return compress(e, o).then((function (e) {\n                            try {\n                                return a = e, u();\n                            }\n                            catch (e) {\n                                return i(e);\n                            }\n                        }), i);\n                    }\n                    catch (e) {\n                        return i(e);\n                    }\n                };\n                try {\n                    return o.libURL = o.libURL || \"https://cdn.jsdelivr.net/npm/browser-image-compression@2.0.2/dist/browser-image-compression.js\", compressOnWebWorker(e, o).then((function (e) {\n                        try {\n                            return a = e, u();\n                        }\n                        catch (e) {\n                            return $Try_1_Catch();\n                        }\n                    }), $Try_1_Catch);\n                }\n                catch (e) {\n                    $Try_1_Catch();\n                }\n                function $If_4() {\n                    try {\n                        a.name = e.name, a.lastModified = e.lastModified;\n                    }\n                    catch (e) {\n                    }\n                    try {\n                        o.preserveExif && \"image/jpeg\" === e.type && (!o.fileType || o.fileType && o.fileType === e.type) && (a = copyExifWithoutOrientation(e, a));\n                    }\n                    catch (e) {\n                    }\n                    return r(a);\n                }\n            }));\n        }\n        return imageCompression.getDataUrlFromFile = getDataUrlFromFile, imageCompression.getFilefromDataUrl = getFilefromDataUrl, imageCompression.loadImage = loadImage, imageCompression.drawImageInCanvas = drawImageInCanvas, imageCompression.drawFileInCanvas = drawFileInCanvas, imageCompression.canvasToFile = canvasToFile, imageCompression.getExifOrientation = getExifOrientation, imageCompression.handleMaxWidthOrHeight = handleMaxWidthOrHeight, imageCompression.followExifOrientation = followExifOrientation, imageCompression.cleanupCanvasMemory = cleanupCanvasMemory, imageCompression.isAutoOrientationInBrowser = isAutoOrientationInBrowser, imageCompression.approximateBelowMaximumCanvasSizeOfBrowser = approximateBelowMaximumCanvasSizeOfBrowser, imageCompression.copyExifWithoutOrientation = copyExifWithoutOrientation, imageCompression.getBrowserName = getBrowserName, imageCompression.version = \"2.0.2\", imageCompression;\n    });\n    \n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/image',[\n        'base',\n        'uploader',\n        'lib/image',\n        'lib/browser-image-compression',\n        'widgets/widget'\n    ], function( Base, Uploader, Image, imageCompression ) {\n    \n        var $ = Base.$,\n            throttle;\n    \n        // 根据要处理的文件大小来节流，一次不能处理太多，会卡。\n        throttle = (function( max ) {\n            var occupied = 0,\n                waiting = [],\n                tick = function() {\n                    var item;\n    \n                    while ( waiting.length && occupied < max ) {\n                        item = waiting.shift();\n                        occupied += item[ 0 ];\n                        item[ 1 ]();\n                    }\n                };\n    \n            return function( emiter, size, cb ) {\n                waiting.push([ size, cb ]);\n                emiter.once( 'destroy', function() {\n                    occupied -= size;\n                    setTimeout( tick, 1 );\n                });\n                setTimeout( tick, 1 );\n            };\n        })( 5 * 1024 * 1024 );\n    \n        $.extend( Uploader.options, {\n    \n            /**\n             * @property {Object} [thumb]\n             * @namespace options\n             * @for Uploader\n             * @description 配置生成缩略图的选项。\n             *\n             * 默认为：\n             *\n             * ```javascript\n             * {\n             *     width: 110,\n             *     height: 110,\n             *\n             *     // 图片质量，只有type为`image/jpeg`的时候才有效。\n             *     quality: 70,\n             *\n             *     // 是否允许放大，如果想要生成小图的时候不失真，此选项应该设置为false.\n             *     allowMagnify: true,\n             *\n             *     // 是否允许裁剪。\n             *     crop: true,\n             *\n             *     // 为空的话则保留原有图片格式。\n             *     // 否则强制转换成指定的类型。\n             *     type: 'image/jpeg'\n             * }\n             * ```\n             */\n            thumb: {\n                width: 110,\n                height: 110,\n                quality: 70,\n                allowMagnify: true,\n                crop: true,\n                preserveHeaders: false,\n    \n                // 为空的话则保留原有图片格式。\n                // 否则强制转换成指定的类型。\n                // IE 8下面 base64 大小不能超过 32K 否则预览失败，而非 jpeg 编码的图片很可\n                // 能会超过 32k, 所以这里设置成预览的时候都是 image/jpeg\n                type: 'image/jpeg'\n            },\n            compress: {\n                // 是否开启\n                enable: false,\n                // 压缩最大宽度或高度\n                maxWidthOrHeight: 4000,\n                // 压缩的最大大小\n                maxSize: 10*1024*1024,\n            }\n        });\n    \n        return Uploader.register({\n    \n            name: 'image',\n    \n    \n            /**\n             * 生成缩略图，此过程为异步，所以需要传入`callback`。\n             * 通常情况在图片加入队里后调用此方法来生成预览图以增强交互效果。\n             *\n             * 当 width 或者 height 的值介于 0 - 1 时，被当成百分比使用。\n             *\n             * `callback`中可以接收到两个参数。\n             * * 第一个为error，如果生成缩略图有错误，此error将为真。\n             * * 第二个为ret, 缩略图的Data URL值。\n             *\n             * **注意**\n             * Date URL在IE6/7中不支持，所以不用调用此方法了，直接显示一张暂不支持预览图片好了。\n             * 也可以借助服务端，将 base64 数据传给服务端，生成一个临时文件供预览。\n             *\n             * @method makeThumb\n             * @grammar makeThumb( file, callback ) => undefined\n             * @grammar makeThumb( file, callback, width, height ) => undefined\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.makeThumb( file, function( error, ret ) {\n             *         if ( error ) {\n             *             $li.text('预览错误');\n             *         } else {\n             *             $li.append('<img alt=\"\" src=\"' + ret + '\" />');\n             *         }\n             *     });\n             *\n             * });\n             */\n            makeThumb: function( file, cb, width, height ) {\n                var opts, image;\n    \n                file = this.request( 'get-file', file );\n    \n                // 只预览图片格式。\n                if ( !file.type.match( /^image/ ) ) {\n                    cb( true );\n                    return;\n                }\n    \n                opts = $.extend({}, this.options.thumb );\n    \n                // 如果传入的是object.\n                if ( $.isPlainObject( width ) ) {\n                    opts = $.extend( opts, width );\n                    width = null;\n                }\n    \n                width = width || opts.width;\n                height = height || opts.height;\n    \n                image = new Image( opts );\n    \n                image.once( 'load', function() {\n                    file._info = file._info || image.info();\n                    file._meta = file._meta || image.meta();\n    \n                    // 如果 width 的值介于 0 - 1\n                    // 说明设置的是百分比。\n                    if ( width <= 1 && width > 0 ) {\n                        width = file._info.width * width;\n                    }\n    \n                    // 同样的规则应用于 height\n                    if ( height <= 1 && height > 0 ) {\n                        height = file._info.height * height;\n                    }\n    \n                    image.resize( width, height );\n                });\n    \n                // 当 resize 完后\n                image.once( 'complete', function() {\n                    cb( false, image.getAsDataUrl( opts.type ) );\n                    image.destroy();\n                });\n    \n                image.once( 'error', function( reason ) {\n                    cb( reason || true );\n                    image.destroy();\n                });\n    \n                throttle( image, file.source.size, function() {\n                    file._info && image.info( file._info );\n                    file._meta && image.meta( file._meta );\n                    image.loadFromBlob( file.source );\n                });\n            },\n    \n            beforeSendFile: function( file ) {\n                var opts = this.options.compress, image, deferred;\n    \n                // console.log('image.beforeSendFile',opts, file)\n    \n                file = this.request( 'get-file', file );\n    \n                if(file._widgetImageData){\n                    return;\n                }\n    \n                var data = {\n                    processed: false,\n                    success: false,\n                    originalSize: file.size,\n                };\n    \n                if ( !opts || !opts.enable || !~'image/jpeg,image/jpg,image/png'.indexOf( file.type ) ) {\n                    file._widgetImageData = data;\n                    return;\n                }\n    \n                opts = $.extend({}, opts );\n                deferred = Base.Deferred();\n    \n                //console.log('image.beforeSendFile',opts, file.source.source);\n    \n                imageCompression(file.source.source,{\n                    maxSizeMB: opts.maxSize/1024/1024,\n                    maxWidthOrHeight: opts.maxWidthOrHeight,\n                }).then(function (compressedBlob) {\n                    if(opts.debug){\n                        console.log('webuploader.compress', (compressedBlob.size / file.size * 100).toFixed(2) + '%');\n                    }\n                    var oldSize = file.size;\n                    file.source.source = compressedBlob;\n                    file.source.size = compressedBlob.size;\n                    file.size = compressedBlob.size;\n                    file.trigger( 'resize', compressedBlob.size, oldSize );\n                    data.processed = true;\n                    data.success = true;\n                    file._widgetImageData = data;\n                    deferred.resolve();\n                }).catch(function (error) {\n                    console.warn('webuploader.compress.error',error);\n                    data.processed = true;\n                    file._widgetImageData = data;\n                    deferred.resolve();\n                });\n    \n                // image = new Image( opts );\n                //\n                // deferred.always(function() {\n                //     image.destroy();\n                //     image = null;\n                // });\n                // image.once( 'error', deferred.reject );\n                // image.once( 'load', function() {\n                //     var width = opts.width,\n                //         height = opts.height;\n                //\n                //     file._info = file._info || image.info();\n                //     file._meta = file._meta || image.meta();\n                //\n                //     // 如果 width 的值介于 0 - 1\n                //     // 说明设置的是百分比。\n                //     if ( width <= 1 && width > 0 ) {\n                //         width = file._info.width * width;\n                //     }\n                //\n                //     // 同样的规则应用于 height\n                //     if ( height <= 1 && height > 0 ) {\n                //         height = file._info.height * height;\n                //     }\n                //\n                //     image.resize( width, height );\n                // });\n                //\n                // image.once( 'complete', function() {\n                //     var blob, size;\n                //\n                //     // 移动端 UC / qq 浏览器的无图模式下\n                //     // ctx.getImageData 处理大图的时候会报 Exception\n                //     // INDEX_SIZE_ERR: DOM Exception 1\n                //     try {\n                //         blob = image.getAsBlob( opts.type );\n                //\n                //         size = file.size;\n                //\n                //         // 如果压缩后，比原来还大则不用压缩后的。\n                //         if ( !noCompressIfLarger || blob.size < size ) {\n                //             // file.source.destroy && file.source.destroy();\n                //             file.source = blob;\n                //             file.size = blob.size;\n                //\n                //             file.trigger( 'resize', blob.size, size );\n                //         }\n                //\n                //         // 标记，避免重复压缩。\n                //         file._compressed = true;\n                //         deferred.resolve();\n                //     } catch ( e ) {\n                //         // 出错了直接继续，让其上传原始图片\n                //         deferred.resolve();\n                //     }\n                // });\n                //\n                // file._info && image.info( file._info );\n                // file._meta && image.meta( file._meta );\n                //\n                // image.loadFromBlob( file.source );\n                return deferred.promise();\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview 文件属性封装\n     */\n    define('file',[\n        'base',\n        'mediator'\n    ], function( Base, Mediator ) {\n    \n        var $ = Base.$,\n            idPrefix = 'WU_FILE_',\n            idSuffix = 0,\n            rExt = /\\.([^.]+)$/,\n            statusMap = {};\n    \n        function gid() {\n            return idPrefix + idSuffix++;\n        }\n    \n        /**\n         * 文件类\n         * @class File\n         * @constructor 构造函数\n         * @grammar new File( source ) => File\n         * @param {Lib.File} source [lib.File](#Lib.File)实例, 此source对象是带有Runtime信息的。\n         */\n        function WUFile( source ) {\n    \n            /**\n             * 文件名，包括扩展名（后缀）\n             * @property name\n             * @type {string}\n             */\n            this.name = source.name || 'Untitled';\n    \n            /**\n             * 文件体积（字节）\n             * @property size\n             * @type {uint}\n             * @default 0\n             */\n            this.size = source.size || 0;\n    \n            /**\n             * 文件MIMETYPE类型，与文件类型的对应关系请参考[http://t.cn/z8ZnFny](http://t.cn/z8ZnFny)\n             * @property type\n             * @type {string}\n             * @default 'application/octet-stream'\n             */\n            this.type = source.type || 'application/octet-stream';\n    \n            /**\n             * 文件最后修改日期\n             * @property lastModifiedDate\n             * @type {int}\n             * @default 当前时间戳\n             */\n            this.lastModifiedDate = source.lastModifiedDate || (new Date() * 1);\n    \n            /**\n             * 文件ID，每个对象具有唯一ID，与文件名无关\n             * @property id\n             * @type {string}\n             */\n            this.id = gid();\n    \n            /**\n             * 文件扩展名，通过文件名获取，例如test.png的扩展名为png\n             * @property ext\n             * @type {string}\n             */\n            this.ext = rExt.exec( this.name ) ? RegExp.$1 : '';\n    \n    \n            /**\n             * 状态文字说明。在不同的status语境下有不同的用途。\n             * @property statusText\n             * @type {string}\n             */\n            this.statusText = '';\n    \n            // 存储文件状态，防止通过属性直接修改\n            statusMap[ this.id ] = WUFile.Status.INITED;\n    \n            this.source = source;\n            this.loaded = 0;\n    \n            this.on( 'error', function( msg ) {\n                this.setStatus( WUFile.Status.ERROR, msg );\n            });\n        }\n    \n        $.extend( WUFile.prototype, {\n    \n            /**\n             * 设置状态，状态变化时会触发`change`事件。\n             * @method setStatus\n             * @grammar setStatus( status[, statusText] );\n             * @param {File.Status|String} status [文件状态值](#WebUploader:File:File.Status)\n             * @param {String} [statusText=''] 状态说明，常在error时使用，用http, abort,server等来标记是由于什么原因导致文件错误。\n             */\n            setStatus: function( status, text ) {\n    \n                var prevStatus = statusMap[ this.id ];\n    \n                typeof text !== 'undefined' && (this.statusText = text);\n    \n                if ( status !== prevStatus ) {\n                    statusMap[ this.id ] = status;\n                    /**\n                     * 文件状态变化\n                     * @event statuschange\n                     */\n                    this.trigger( 'statuschange', status, prevStatus );\n                }\n    \n            },\n    \n            /**\n             * 获取文件状态\n             * @return {File.Status}\n             * @example\n                     文件状态具体包括以下几种类型：\n                     {\n                         // 初始化\n                        INITED:     0,\n                        // 已入队列\n                        QUEUED:     1,\n                        // 正在上传\n                        PROGRESS:     2,\n                        // 上传出错\n                        ERROR:         3,\n                        // 上传成功\n                        COMPLETE:     4,\n                        // 上传取消\n                        CANCELLED:     5\n                    }\n             */\n            getStatus: function() {\n                return statusMap[ this.id ];\n            },\n    \n            /**\n             * 获取文件原始信息。\n             * @return {*}\n             */\n            getSource: function() {\n                return this.source;\n            },\n    \n            destroy: function() {\n                this.off();\n                delete statusMap[ this.id ];\n            }\n        });\n    \n        Mediator.installTo( WUFile.prototype );\n    \n        /**\n         * 文件状态值，具体包括以下几种类型：\n         * * `inited` 初始状态\n         * * `queued` 已经进入队列, 等待上传\n         * * `progress` 上传中\n         * * `complete` 上传完成。\n         * * `error` 上传出错，可重试\n         * * `interrupt` 上传中断，可续传。\n         * * `invalid` 文件不合格，不能重试上传。会自动从队列中移除。\n         * * `cancelled` 文件被移除。\n         * @property {Object} Status\n         * @namespace File\n         * @class File\n         * @static\n         */\n        WUFile.Status = {\n            INITED:     'inited',    // 初始状态\n            QUEUED:     'queued',    // 已经进入队列, 等待上传\n            PROGRESS:   'progress',    // 上传中\n            ERROR:      'error',    // 上传出错，可重试\n            COMPLETE:   'complete',    // 上传完成。\n            CANCELLED:  'cancelled',    // 上传取消。\n            INTERRUPT:  'interrupt',    // 上传中断，可续传。\n            INVALID:    'invalid'    // 文件不合格，不能重试上传。\n        };\n    \n        return WUFile;\n    });\n    \n    /**\n     * @fileOverview 文件队列\n     */\n    define('queue',[\n        'base',\n        'mediator',\n        'file'\n    ], function( Base, Mediator, WUFile ) {\n    \n        var $ = Base.$,\n            STATUS = WUFile.Status;\n    \n        /**\n         * 文件队列, 用来存储各个状态中的文件。\n         * @class Queue\n         * @extends Mediator\n         */\n        function Queue() {\n    \n            /**\n             * 统计文件数。\n             * * `numOfQueue` 队列中的文件数。\n             * * `numOfSuccess` 上传成功的文件数\n             * * `numOfCancel` 被取消的文件数\n             * * `numOfProgress` 正在上传中的文件数\n             * * `numOfUploadFailed` 上传错误的文件数。\n             * * `numOfInvalid` 无效的文件数。\n             * * `numOfDeleted` 被移除的文件数。\n             * * `numOfInterrupt` 被中断的文件数。\n             * @property {Object} stats\n             */\n            this.stats = {\n                numOfQueue: 0,\n                numOfSuccess: 0,\n                numOfCancel: 0,\n                numOfProgress: 0,\n                numOfUploadFailed: 0,\n                numOfInvalid: 0,\n                numOfDeleted: 0,\n                numOfInterrupt: 0\n            };\n    \n            // 上传队列，仅包括等待上传的文件\n            this._queue = [];\n    \n            // 存储所有文件\n            this._map = {};\n        }\n    \n        $.extend( Queue.prototype, {\n    \n            /**\n             * 将新文件加入对队列尾部\n             *\n             * @method append\n             * @param  {File} file   文件对象\n             */\n            append: function( file ) {\n                this._queue.push( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 将新文件加入对队列头部\n             *\n             * @method prepend\n             * @param  {File} file   文件对象\n             */\n            prepend: function( file ) {\n                this._queue.unshift( file );\n                this._fileAdded( file );\n                return this;\n            },\n    \n            /**\n             * 获取文件对象\n             *\n             * @method getFile\n             * @param  {String} fileId   文件ID\n             * @return {File}\n             */\n            getFile: function( fileId ) {\n                if ( typeof fileId !== 'string' ) {\n                    return fileId;\n                }\n                return this._map[ fileId ];\n            },\n    \n            /**\n             * 从队列中取出一个指定状态的文件。\n             * @grammar fetch( status ) => File\n             * @method fetch\n             * @param {String} status [文件状态值](#WebUploader:File:File.Status)\n             * @return {File} [File](#WebUploader:File)\n             */\n            fetch: function( status ) {\n                var len = this._queue.length,\n                    i, file;\n    \n                status = status || STATUS.QUEUED;\n    \n                for ( i = 0; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( status === file.getStatus() ) {\n                        return file;\n                    }\n                }\n    \n                return null;\n            },\n    \n            /**\n             * 对队列进行排序，能够控制文件上传顺序。\n             * @grammar sort( fn ) => undefined\n             * @method sort\n             * @param {Function} fn 排序方法\n             */\n            sort: function( fn ) {\n                if ( typeof fn === 'function' ) {\n                    this._queue.sort( fn );\n                }\n            },\n    \n            /**\n             * 获取指定类型的文件列表, 列表中每一个成员为[File](#WebUploader:File)对象。\n             * @grammar getFiles( [status1[, status2 ...]] ) => Array\n             * @method getFiles\n             * @param {String} [status] [文件状态值](#WebUploader:File:File.Status)\n             */\n            getFiles: function() {\n                var sts = [].slice.call( arguments, 0 ),\n                    ret = [],\n                    i = 0,\n                    len = this._queue.length,\n                    file;\n    \n                for ( ; i < len; i++ ) {\n                    file = this._queue[ i ];\n    \n                    if ( sts.length && !~$.inArray( file.getStatus(), sts ) ) {\n                        continue;\n                    }\n    \n                    ret.push( file );\n                }\n    \n                return ret;\n            },\n    \n            /**\n             * 在队列中删除文件。\n             * @grammar removeFile( file ) => Array\n             * @method removeFile\n             * @param {File} 文件对象。\n             */\n            removeFile: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( existing ) {\n                    delete this._map[ file.id ];\n                    this._delFile(file);\n                    file.destroy();\n                    this.stats.numOfDeleted++;\n    \n                }\n            },\n    \n            _fileAdded: function( file ) {\n                var me = this,\n                    existing = this._map[ file.id ];\n    \n                if ( !existing ) {\n                    this._map[ file.id ] = file;\n    \n                    file.on( 'statuschange', function( cur, pre ) {\n                        me._onFileStatusChange( cur, pre );\n                    });\n                }\n    \n                file.setStatus( STATUS.QUEUED );\n            },\n    \n            _delFile : function(file){\n                for(var i = this._queue.length - 1 ; i >= 0 ; i-- ){\n                    if(this._queue[i] == file){\n                        this._queue.splice(i,1);\n                        break;\n                    }\n                }\n            },\n    \n            _onFileStatusChange: function( curStatus, preStatus ) {\n                var stats = this.stats;\n    \n                switch ( preStatus ) {\n                    case STATUS.PROGRESS:\n                        stats.numOfProgress--;\n                        break;\n    \n                    case STATUS.QUEUED:\n                        stats.numOfQueue --;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed--;\n                        break;\n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid--;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numOfInterrupt--;\n                        break;\n                }\n    \n                switch ( curStatus ) {\n                    case STATUS.QUEUED:\n                        stats.numOfQueue++;\n                        break;\n    \n                    case STATUS.PROGRESS:\n                        stats.numOfProgress++;\n                        break;\n    \n                    case STATUS.ERROR:\n                        stats.numOfUploadFailed++;\n                        break;\n    \n                    case STATUS.COMPLETE:\n                        stats.numOfSuccess++;\n                        break;\n    \n                    case STATUS.CANCELLED:\n                        stats.numOfCancel++;\n                        break;\n    \n    \n                    case STATUS.INVALID:\n                        stats.numOfInvalid++;\n                        break;\n    \n                    case STATUS.INTERRUPT:\n                        stats.numOfInterrupt++;\n                        break;\n                }\n            }\n    \n        });\n    \n        Mediator.installTo( Queue.prototype );\n    \n        return Queue;\n    });\n    \n    /**\n     * @fileOverview 队列\n     */\n    define('widgets/queue',[\n        'base',\n        'uploader',\n        'queue',\n        'file',\n        'lib/file',\n        'runtime/client',\n        'widgets/widget'\n    ], function( Base, Uploader, Queue, WUFile, File, RuntimeClient ) {\n    \n        var $ = Base.$,\n            rExt = /\\.\\w+$/,\n            Status = WUFile.Status;\n    \n        return Uploader.register({\n            name: 'queue',\n    \n            init: function( opts ) {\n                var me = this,\n                    deferred, len, i, item, arr, accept, runtime;\n    \n                if ( $.isPlainObject( opts.accept ) ) {\n                    opts.accept = [ opts.accept ];\n                }\n    \n                // accept中的中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].extensions;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = '\\\\.' + arr.join(',')\n                                .replace( /,/g, '$|\\\\.' )\n                                .replace( /\\*/g, '.*' ) + '$';\n                    }\n    \n                    me.accept = new RegExp( accept, 'i' );\n                }\n    \n                me.queue = new Queue();\n                me.stats = me.queue.stats;\n    \n                // 如果当前不是html5运行时，那就算了。\n                // 不执行后续操作\n                if ( this.request('predict-runtime-type') !== 'html5' ) {\n                    return;\n                }\n    \n                // 创建一个 html5 运行时的 placeholder\n                // 以至于外部添加原生 File 对象的时候能正确包裹一下供 webuploader 使用。\n                deferred = Base.Deferred();\n                this.placeholder = runtime = new RuntimeClient('Placeholder');\n                runtime.connectRuntime({\n                    runtimeOrder: 'html5'\n                }, function() {\n                    me._ruid = runtime.getRuid();\n                    deferred.resolve();\n                });\n                return deferred.promise();\n            },\n    \n    \n            // 为了支持外部直接添加一个原生File对象。\n            _wrapFile: function( file ) {\n                if ( !(file instanceof WUFile) ) {\n    \n                    if ( !(file instanceof File) ) {\n                        if ( !this._ruid ) {\n                            throw new Error('Can\\'t add external files.');\n                        }\n                        file = new File( this._ruid, file );\n                    }\n    \n                    file = new WUFile( file );\n                }\n    \n                return file;\n            },\n    \n            // 判断文件是否可以被加入队列\n            acceptFile: function( file ) {\n                var invalid = !file || !file.size || this.accept &&\n    \n                        // 如果名字中有后缀，才做后缀白名单处理。\n                        rExt.exec( file.name ) && !this.accept.test( file.name );\n    \n                return !invalid;\n            },\n    \n    \n            /**\n             * @event beforeFileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列之前触发。如果此事件handler的返回值为`false`，则此文件不会被添加进入队列。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event fileQueued\n             * @param {File} file File对象\n             * @description 当文件被加入队列以后触发。\n             * @for  Uploader\n             */\n    \n            _addFile: function( file ) {\n                var me = this;\n    \n                file = me._wrapFile( file );\n    \n                // 不过类型判断允许不允许，先派送 `beforeFileQueued`\n                if ( !me.owner.trigger( 'beforeFileQueued', file ) ) {\n                    return;\n                }\n    \n                // 类型不匹配，则派送错误事件，并返回。\n                if ( !me.acceptFile( file ) ) {\n                    me.owner.trigger( 'error', 'Q_TYPE_DENIED', file );\n                    return;\n                }\n    \n                me.queue.append( file );\n                me.owner.trigger( 'fileQueued', file );\n                return file;\n            },\n    \n            getFile: function( fileId ) {\n                return this.queue.getFile( fileId );\n            },\n    \n            /**\n             * @event filesQueued\n             * @param {File} files 数组，内容为原始File(lib/File）对象。\n             * @description 当一批文件添加进队列以后触发。\n             * @for  Uploader\n             */\n            \n            /**\n             * @property {Boolean} [auto=false]\n             * @namespace options\n             * @for Uploader\n             * @description 设置为 true 后，不需要手动调用上传，有文件选择即开始上传。\n             * \n             */\n    \n            /**\n             * @method addFiles\n             * @grammar addFiles( file ) => undefined\n             * @grammar addFiles( [file1, file2 ...] ) => undefined\n             * @param {Array of File or File} [files] Files 对象 数组\n             * @description 添加文件到队列\n             * @for  Uploader\n             */\n            addFile: function( files ) {\n                var me = this;\n    \n                if ( !files.length ) {\n                    files = [ files ];\n                }\n    \n                files = $.map( files, function( file ) {\n                    return me._addFile( file );\n                });\n    \t\t\t\n    \t\t\tif ( files.length ) {\n    \n                    me.owner.trigger( 'filesQueued', files );\n    \n    \t\t\t\tif ( me.options.auto ) {\n    \t\t\t\t\tsetTimeout(function() {\n    \t\t\t\t\t\tme.request('start-upload');\n    \t\t\t\t\t}, 20 );\n    \t\t\t\t}\n                }\n            },\n    \n            getStats: function() {\n                return this.stats;\n            },\n    \n            /**\n             * @event fileDequeued\n             * @param {File} file File对象\n             * @description 当文件被移除队列后触发。\n             * @for  Uploader\n             */\n    \n             /**\n             * @method removeFile\n             * @grammar removeFile( file ) => undefined\n             * @grammar removeFile( id ) => undefined\n             * @grammar removeFile( file, true ) => undefined\n             * @grammar removeFile( id, true ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 移除某一文件, 默认只会标记文件状态为已取消，如果第二个参数为 `true` 则会从 queue 中移除。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.removeFile( file );\n             * })\n             */\n            removeFile: function( file, remove ) {\n                var me = this;\n    \n                file = file.id ? file : me.queue.getFile( file );\n    \n                this.request( 'cancel-file', file );\n    \n                if ( remove ) {\n                    this.queue.removeFile( file );\n                }\n            },\n    \n            /**\n             * @method getFiles\n             * @grammar getFiles() => Array\n             * @grammar getFiles( status1, status2, status... ) => Array\n             * @description 返回指定状态的文件集合，不传参数将返回所有状态的文件。\n             * @for  Uploader\n             * @example\n             * console.log( uploader.getFiles() );    // => all files\n             * console.log( uploader.getFiles('error') )    // => all error files.\n             */\n            getFiles: function() {\n                return this.queue.getFiles.apply( this.queue, arguments );\n            },\n    \n            fetchFile: function() {\n                return this.queue.fetch.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @method retry\n             * @grammar retry() => undefined\n             * @grammar retry( file ) => undefined\n             * @description 重试上传，重试指定文件，或者从出错的文件开始重新上传。\n             * @for  Uploader\n             * @example\n             * function retry() {\n             *     uploader.retry();\n             * }\n             */\n            retry: function( file, noForceStart ) {\n                var me = this,\n                    files, i, len;\n    \n                if ( file ) {\n                    file = file.id ? file : me.queue.getFile( file );\n                    file.setStatus( Status.QUEUED );\n                    noForceStart || me.request('start-upload');\n                    return;\n                }\n    \n                files = me.queue.getFiles( Status.ERROR );\n                i = 0;\n                len = files.length;\n    \n                for ( ; i < len; i++ ) {\n                    file = files[ i ];\n                    file.setStatus( Status.QUEUED );\n                }\n    \n                me.request('start-upload');\n            },\n    \n            /**\n             * @method sort\n             * @grammar sort( fn ) => undefined\n             * @description 排序队列中的文件，在上传之前调整可以控制上传顺序。\n             * @for  Uploader\n             */\n            sortFiles: function() {\n                return this.queue.sort.apply( this.queue, arguments );\n            },\n    \n            /**\n             * @event reset\n             * @description 当 uploader 被重置的时候触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @method reset\n             * @grammar reset() => undefined\n             * @description 重置uploader。目前只重置了队列。\n             * @for  Uploader\n             * @example\n             * uploader.reset();\n             */\n            reset: function() {\n                this.owner.trigger('reset');\n                this.queue = new Queue();\n                this.stats = this.queue.stats;\n            },\n    \n            destroy: function() {\n                this.reset();\n                this.placeholder && this.placeholder.destroy();\n            }\n        });\n    \n    });\n    /**\n     * @fileOverview 添加获取Runtime相关信息的方法。\n     */\n    define('widgets/runtime',[\n        'uploader',\n        'runtime/runtime',\n        'widgets/widget'\n    ], function( Uploader, Runtime ) {\n    \n        Uploader.support = function() {\n            return Runtime.hasRuntime.apply( Runtime, arguments );\n        };\n    \n        /**\n         * @property {Object} [runtimeOrder=html5,flash]\n         * @namespace options\n         * @for Uploader\n         * @description 指定运行时启动顺序。默认会先尝试 html5 是否支持，如果支持则使用 html5, 否则使用 flash.\n         *\n         * 可以将此值设置成 `flash`，来强制使用 flash 运行时。\n         */\n    \n        return Uploader.register({\n            name: 'runtime',\n    \n            init: function() {\n                if ( !this.predictRuntimeType() ) {\n                    throw Error('Runtime Error');\n                }\n            },\n    \n            /**\n             * 预测Uploader将采用哪个`Runtime`\n             * @grammar predictRuntimeType() => String\n             * @method predictRuntimeType\n             * @for  Uploader\n             */\n            predictRuntimeType: function() {\n                var orders = this.options.runtimeOrder || Runtime.orders,\n                    type = this.type,\n                    i, len;\n    \n                if ( !type ) {\n                    orders = orders.split( /\\s*,\\s*/g );\n    \n                    for ( i = 0, len = orders.length; i < len; i++ ) {\n                        if ( Runtime.hasRuntime( orders[ i ] ) ) {\n                            this.type = type = orders[ i ];\n                            break;\n                        }\n                    }\n                }\n    \n                return type;\n            }\n        });\n    });\n    /**\n     * @fileOverview Transport\n     */\n    define('lib/transport',[\n        'base',\n        'runtime/client',\n        'mediator'\n    ], function( Base, RuntimeClient, Mediator ) {\n    \n        var $ = Base.$;\n    \n        function Transport( opts ) {\n            var me = this;\n    \n            opts = me.options = $.extend( true, {}, Transport.options, opts || {} );\n            RuntimeClient.call( this, 'Transport' );\n    \n            this._block = null;\n            this._blob = null;\n            this._formData = opts.formData || {};\n            this._headers = opts.headers || {};\n    \n            this.on( 'progress', this._timeout );\n            this.on( 'load error', function() {\n                me.trigger( 'progress', 1 );\n                clearTimeout( me._timer );\n            });\n        }\n    \n        Transport.options = {\n            server: '',\n            method: 'POST',\n    \n            // 跨域时，是否允许携带cookie, 只有html5 runtime才有效\n            withCredentials: false,\n            fileVal: 'file',\n            timeout: 2 * 60 * 1000,    // 2分钟\n            formData: {},\n            headers: {},\n            sendAsBinary: false,\n    \n            customUploadResponse: null,\n        };\n    \n        $.extend( Transport.prototype, {\n    \n            // 添加Blob, 只能添加一次，最后一次有效。\n            appendBlob: function( key, blob, filename, block) {\n                var me = this,\n                    opts = me.options;\n    \n                if ( me.getRuid() ) {\n                    me.disconnectRuntime();\n                }\n    \n                // 连接到blob归属的同一个runtime.\n                me.connectRuntime( blob.ruid, function() {\n                    me.exec('init');\n                });\n    \n                me._block = block;\n                me._blob = blob;\n                opts.fileVal = key || opts.fileVal;\n                opts.filename = filename || opts.filename;\n            },\n    \n            // 添加其他字段\n            append: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._formData, key );\n                } else {\n                    this._formData[ key ] = value;\n                }\n            },\n    \n            setRequestHeader: function( key, value ) {\n                if ( typeof key === 'object' ) {\n                    $.extend( this._headers, key );\n                } else {\n                    this._headers[ key ] = value;\n                }\n            },\n    \n            send: function( method ) {\n                var me = this,\n                    opts = me.options;\n                if( opts.customUpload ){\n                    opts.customUpload(me._block, {\n                        onProgress: function (file, percentage) {\n                            me.trigger('progress', percentage);\n                        },\n                        onSuccess: function (file, res) {\n                            me.customUploadResponse = res;\n                            me.trigger('load');\n                        },\n                        onError: function (file, error) {\n                            me.trigger('error', error, true);\n                        }\n                    });\n                }else{\n                    this.exec( 'send', method );\n                    this._timeout();\n                }\n            },\n    \n            abort: function() {\n                clearTimeout( this._timer );\n                return this.exec('abort');\n            },\n    \n            destroy: function() {\n                this.trigger('destroy');\n                this.off();\n                this.exec('destroy');\n                this.disconnectRuntime();\n            },\n    \n            getResponseHeaders: function() {\n                return this.exec('getResponseHeaders');\n            },\n    \n            getResponse: function() {\n                return this.exec('getResponse');\n            },\n    \n            getResponseAsJson: function() {\n                return this.exec('getResponseAsJson');\n            },\n    \n            getStatus: function() {\n                return this.exec('getStatus');\n            },\n    \n            _timeout: function() {\n                var me = this,\n                    duration = me.options.timeout;\n    \n                if ( !duration ) {\n                    return;\n                }\n    \n                clearTimeout( me._timer );\n                me._timer = setTimeout(function() {\n                    me.abort();\n                    me.trigger( 'error', 'timeout' );\n                }, duration );\n            }\n    \n        });\n    \n        // 让Transport具备事件功能。\n        Mediator.installTo( Transport.prototype );\n    \n        return Transport;\n    });\n    \n    /**\n     * @fileOverview 负责文件上传相关。\n     */\n    define('widgets/upload',[\n        'base',\n        'uploader',\n        'file',\n        'lib/transport',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile, Transport ) {\n    \n        var $ = Base.$,\n            isPromise = Base.isPromise,\n            Status = WUFile.Status;\n    \n        // 添加默认配置项\n        $.extend( Uploader.options, {\n    \n    \n            /**\n             * @property {Boolean} [prepareNextFile=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否允许在文件传输时提前把下一个文件准备好。\n             * 某些文件的准备工作比较耗时，比如图片压缩，md5序列化。\n             * 如果能提前在当前文件传输期处理，可以节省总体耗时。\n             */\n            prepareNextFile: false,\n    \n            /**\n             * @property {Boolean} [chunked=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否要分片处理大文件上传。\n             */\n            chunked: false,\n    \n            /**\n             * @property {Boolean} [chunkSize=5242880]\n             * @namespace options\n             * @for Uploader\n             * @description 如果要分片，分多大一片？ 默认大小为5M.\n             */\n            chunkSize: 5 * 1024 * 1024,\n    \n            /**\n             * @property {Boolean} [chunkRetry=2]\n             * @namespace options\n             * @for Uploader\n             * @description 如果某个分片由于网络问题出错，允许自动重传多少次？\n             */\n            chunkRetry: 2,\n    \n            /**\n             * @property {Number} [chunkRetryDelay=1000]\n             * @namespace options\n             * @for Uploader\n             * @description 开启重试后，设置重试延时时间, 单位毫秒。默认1000毫秒，即1秒.\n             */\n            chunkRetryDelay: 1000,\n    \n            /**\n             * @property {Boolean} [threads=3]\n             * @namespace options\n             * @for Uploader\n             * @description 上传并发数。允许同时最大上传进程数。\n             */\n            threads: 1,\n    \n    \n            /**\n             * @property {Object} [formData={}]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传请求的参数表，每次发送都会发送此对象中的参数。\n             */\n            formData: {}\n    \n            /**\n             * @property {Object} [fileVal='file']\n             * @namespace options\n             * @for Uploader\n             * @description 设置文件上传域的name。\n             */\n    \n             /**\n             * @property {Object} [method=POST]\n             * @namespace options\n             * @for Uploader\n             * @description 文件上传方式，`POST` 或者 `GET`。\n             */\n    \n            /**\n             * @property {Object} [sendAsBinary=false]\n             * @namespace options\n             * @for Uploader\n             * @description 是否已二进制的流的方式发送文件，这样整个上传内容`php://input`都为文件内容，\n             * 其他参数在$_GET数组中。\n             */\n        });\n    \n        // 负责将文件切片。\n        function CuteFile( file, chunkSize ) {\n            var pending = [],\n                blob = file.source,\n                total = blob.size,\n                chunks = chunkSize ? Math.ceil( total / chunkSize ) : 1,\n                start = 0,\n                index = 0,\n                len, api;\n    \n            api = {\n                file: file,\n    \n                has: function() {\n                    return !!pending.length;\n                },\n    \n                shift: function() {\n                    return pending.shift();\n                },\n    \n                unshift: function( block ) {\n                    pending.unshift( block );\n                }\n            };\n    \n            while ( index < chunks ) {\n                len = Math.min( chunkSize, total - start );\n    \n                pending.push({\n                    file: file,\n                    start: start,\n                    end: chunkSize ? (start + len) : total,\n                    total: total,\n                    chunks: chunks,\n                    chunk: index++,\n                    cuted: api\n                });\n                start += len;\n            }\n    \n            file.blocks = pending.concat();\n            file.remaning = pending.length;\n    \n            return api;\n        }\n    \n        Uploader.register({\n            name: 'upload',\n    \n            init: function() {\n                var owner = this.owner,\n                    me = this;\n    \n                this.runing = false;\n                this.progress = false;\n    \n                owner\n                    .on( 'startUpload', function() {\n                        me.progress = true;\n                    })\n                    .on( 'uploadFinished', function() {\n                        me.progress = false;\n                    });\n    \n                // 记录当前正在传的数据，跟threads相关\n                this.pool = [];\n    \n                // 缓存分好片的文件。\n                this.stack = [];\n    \n                // 缓存即将上传的文件。\n                this.pending = [];\n    \n                // 跟踪还有多少分片在上传中但是没有完成上传。\n                this.remaning = 0;\n                this.__tick = Base.bindFn( this._tick, this );\n    \n                // 销毁上传相关的属性。\n                owner.on( 'uploadComplete', function( file ) {\n    \n                    // 把其他块取消了。\n                    file.blocks && $.each( file.blocks, function( _, v ) {\n                        v.transport && (v.transport.abort(), v.transport.destroy());\n                        delete v.transport;\n                    });\n    \n                    delete file.blocks;\n                    delete file.remaning;\n                });\n            },\n    \n            reset: function() {\n                this.request( 'stop-upload', true );\n                this.runing = false;\n                this.pool = [];\n                this.stack = [];\n                this.pending = [];\n                this.remaning = 0;\n                this._trigged = false;\n                this._promise = null;\n            },\n    \n            /**\n             * @event startUpload\n             * @description 当开始上传流程时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 开始上传。此方法可以从初始状态调用开始上传流程，也可以从暂停状态调用，继续上传流程。\n             *\n             * 可以指定开始某一个文件。\n             * @grammar upload() => undefined\n             * @grammar upload( file | fileId) => undefined\n             * @method upload\n             * @for  Uploader\n             */\n            startUpload: function(file) {\n                var me = this;\n    \n                // 移出invalid的文件\n                $.each( me.request( 'get-files', Status.INVALID ), function() {\n                    me.request( 'remove-file', this );\n                });\n    \n                // 如果指定了开始某个文件，则只开始指定的文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if (file.getStatus() === Status.INTERRUPT) {\n                        file.setStatus( Status.QUEUED );\n    \n                        $.each( me.pool, function( _, v ) {\n    \n                            // 之前暂停过。\n                            if (v.file !== file) {\n                                return;\n                            }\n    \n                            v.transport && v.transport.send();\n                            file.setStatus( Status.PROGRESS );\n                        });\n    \n    \n                    } else if (file.getStatus() !== Status.PROGRESS) {\n                        file.setStatus( Status.QUEUED );\n                    }\n                } else {\n                    $.each( me.request( 'get-files', [ Status.INITED ] ), function() {\n                        this.setStatus( Status.QUEUED );\n                    });\n                }\n    \n                if ( me.runing ) {\n                    me.owner.trigger('startUpload', file);// 开始上传或暂停恢复的，trigger event\n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = true;\n                var files = [];\n    \n                // 如果有暂停的，则续传\n                file || $.each( me.pool, function( _, v ) {\n                    var file = v.file;\n    \n                    if ( file.getStatus() === Status.INTERRUPT ) {\n                        me._trigged = false;\n                        files.push(file);\n    \n                        if (v.waiting) {\n                            return;\n                        }\n    \n                        // 文件 prepare 完后，如果暂停了，这个时候只会把文件插入 pool, 而不会创建 tranport，\n                        v.transport ? v.transport.send() : me._doSend(v);\n                    }\n                });\n    \n                $.each(files, function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                file || $.each( me.request( 'get-files',\n                        Status.INTERRUPT ), function() {\n                    this.setStatus( Status.PROGRESS );\n                });\n    \n                me._trigged = false;\n                Base.nextTick( me.__tick );\n                me.owner.trigger('startUpload');\n            },\n    \n            /**\n             * @event stopUpload\n             * @description 当开始上传流程暂停时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * 暂停上传。第一个参数为是否中断上传当前正在上传的文件。\n             *\n             * 如果第一个参数是文件，则只暂停指定文件。\n             * @grammar stop() => undefined\n             * @grammar stop( true ) => undefined\n             * @grammar stop( file ) => undefined\n             * @method stop\n             * @for  Uploader\n             */\n            stopUpload: function( file, interrupt ) {\n                var me = this;\n    \n                if (file === true) {\n                    interrupt = file;\n                    file = null;\n                }\n    \n                if ( me.runing === false ) {\n                    return;\n                }\n    \n                // 如果只是暂停某个文件。\n                if ( file ) {\n                    file = file.id ? file : me.request( 'get-file', file );\n    \n                    if ( file.getStatus() !== Status.PROGRESS &&\n                            file.getStatus() !== Status.QUEUED ) {\n                        return;\n                    }\n    \n                    file.setStatus( Status.INTERRUPT );\n    \n    \n                    $.each( me.pool, function( _, v ) {\n    \n                        // 只 abort 指定的文件，每一个分片。\n                        if (v.file === file) {\n                            v.transport && v.transport.abort();\n    \n                            if (interrupt) {\n                                me._putback(v);\n                                me._popBlock(v);\n                            }\n                        }\n                    });\n    \n                    me.owner.trigger('stopUpload', file);// 暂停，trigger event\n    \n                    return Base.nextTick( me.__tick );\n                }\n    \n                me.runing = false;\n    \n                // 正在准备中的文件。\n                if (this._promise && this._promise.file) {\n                    this._promise.file.setStatus( Status.INTERRUPT );\n                }\n    \n                interrupt && $.each( me.pool, function( _, v ) {\n                    v.transport && v.transport.abort();\n                    v.file.setStatus( Status.INTERRUPT );\n                });\n    \n                me.owner.trigger('stopUpload');\n            },\n    \n            /**\n             * @method cancelFile\n             * @grammar cancelFile( file ) => undefined\n             * @grammar cancelFile( id ) => undefined\n             * @param {File|id} file File对象或这File对象的id\n             * @description 标记文件状态为已取消, 同时将中断文件传输。\n             * @for  Uploader\n             * @example\n             *\n             * $li.on('click', '.remove-this', function() {\n             *     uploader.cancelFile( file );\n             * })\n             */\n            cancelFile: function( file ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                file.setStatus( Status.CANCELLED );\n                this.owner.trigger( 'fileDequeued', file );\n            },\n    \n            /**\n             * 判断`Uploader`是否正在上传中。\n             * @grammar isInProgress() => Boolean\n             * @method isInProgress\n             * @for  Uploader\n             */\n            isInProgress: function() {\n                return !!this.progress;\n            },\n    \n            _getStats: function() {\n                return this.request('get-stats');\n            },\n    \n            /**\n             * 跳过一个文件上传，直接标记指定文件为已上传状态。\n             * @grammar skipFile( file ) => undefined\n             * @method skipFile\n             * @for  Uploader\n             */\n            skipFile: function( file, status ) {\n                file = file.id ? file : this.request( 'get-file', file );\n    \n                file.setStatus( status || Status.COMPLETE );\n                file.skipped = true;\n    \n                // 如果正在上传。\n                file.blocks && $.each( file.blocks, function( _, v ) {\n                    var _tr = v.transport;\n    \n                    if ( _tr ) {\n                        _tr.abort();\n                        _tr.destroy();\n                        delete v.transport;\n                    }\n                });\n    \n                this.owner.trigger( 'uploadSkip', file );\n            },\n    \n            /**\n             * @event uploadFinished\n             * @description 当所有文件上传结束时触发。\n             * @for  Uploader\n             */\n            _tick: function() {\n                var me = this,\n                    opts = me.options,\n                    fn, val;\n    \n                // 上一个promise还没有结束，则等待完成后再执行。\n                if ( me._promise ) {\n                    return me._promise.always( me.__tick );\n                }\n    \n                // 还有位置，且还有文件要处理的话。\n                if ( me.pool.length < opts.threads && (val = me._nextBlock()) ) {\n                    me._trigged = false;\n    \n                    fn = function( val ) {\n                        me._promise = null;\n    \n                        // 有可能是reject过来的，所以要检测val的类型。\n                        val && val.file && me._startSend( val );\n                        Base.nextTick( me.__tick );\n                    };\n    \n                    me._promise = isPromise( val ) ? val.always( fn ) : fn( val );\n    \n                // 没有要上传的了，且没有正在传输的了。\n                } else if ( !me.remaning && !me._getStats().numOfQueue &&\n                    !me._getStats().numOfInterrupt ) {\n                    me.runing = false;\n    \n                    me._trigged || Base.nextTick(function() {\n                        me.owner.trigger('uploadFinished');\n                    });\n                    me._trigged = true;\n                }\n            },\n    \n            _putback: function(block) {\n                var idx;\n    \n                block.cuted.unshift(block);\n                idx = this.stack.indexOf(block.cuted);\n    \n                if (!~idx) {\n                    // 如果不在里面，说明移除过，需要把计数还原回去。\n                    this.remaning++;\n                    block.file.remaning++;\n                    this.stack.unshift(block.cuted);\n                }\n            },\n    \n            _getStack: function() {\n                var i = 0,\n                    act;\n    \n                while ( (act = this.stack[ i++ ]) ) {\n                    if ( act.has() && act.file.getStatus() === Status.PROGRESS ) {\n                        return act;\n                    } else if (!act.has() ||\n                            act.file.getStatus() !== Status.PROGRESS &&\n                            act.file.getStatus() !== Status.INTERRUPT ) {\n    \n                        // 把已经处理完了的，或者，状态为非 progress（上传中）、\n                        // interupt（暂停中） 的移除。\n                        this.stack.splice( --i, 1 );\n                    }\n                }\n    \n                return null;\n            },\n    \n            _nextBlock: function() {\n                var me = this,\n                    opts = me.options,\n                    act, next, done, preparing;\n    \n                // 如果当前文件还有没有需要传输的，则直接返回剩下的。\n                if ( (act = this._getStack()) ) {\n    \n                    // 是否提前准备下一个文件\n                    if ( opts.prepareNextFile && !me.pending.length ) {\n                        me._prepareNextFile();\n                    }\n    \n                    return act.shift();\n    \n                // 否则，如果正在运行，则准备下一个文件，并等待完成后返回下个分片。\n                } else if ( me.runing ) {\n    \n                    // 如果缓存中有，则直接在缓存中取，没有则去queue中取。\n                    if ( !me.pending.length && me._getStats().numOfQueue ) {\n                        me._prepareNextFile();\n                    }\n    \n                    next = me.pending.shift();\n                    done = function( file ) {\n                        if ( !file ) {\n                            return null;\n                        }\n    \n                        if (opts.customUpload) {\n                            act = CuteFile(file, 0);\n                        } else {\n                            act = CuteFile(file, opts.chunked ? opts.chunkSize : 0);\n                        }\n                        me.stack.push(act);\n                        return act.shift();\n                    };\n    \n                    // 文件可能还在prepare中，也有可能已经完全准备好了。\n                    if ( isPromise( next) ) {\n                        preparing = next.file;\n                        next = next[ next.pipe ? 'pipe' : 'then' ]( done );\n                        next.file = preparing;\n                        return next;\n                    }\n    \n                    return done( next );\n                }\n            },\n    \n    \n            /**\n             * @event uploadStart\n             * @param {File} file File对象\n             * @description 某个文件开始上传前触发，一个文件只会触发一次。\n             * @for  Uploader\n             */\n            _prepareNextFile: function() {\n                var me = this,\n                    file = me.request('fetch-file'),\n                    pending = me.pending,\n                    promise;\n    \n                if ( file ) {\n                    promise = me.request( 'before-send-file', file, function() {\n    \n                        // 有可能文件被skip掉了。文件被skip掉后，状态坑定不是Queued.\n                        if ( file.getStatus() === Status.PROGRESS ||\n                            file.getStatus() === Status.INTERRUPT ) {\n                            return file;\n                        }\n    \n                        return me._finishFile( file );\n                    });\n    \n                    me.owner.trigger( 'uploadStart', file );\n                    file.setStatus( Status.PROGRESS );\n    \n                    promise.file = file;\n    \n                    // 如果还在pending中，则替换成文件本身。\n                    promise.done(function() {\n                        var idx = $.inArray( promise, pending );\n    \n                        ~idx && pending.splice( idx, 1, file );\n                    });\n    \n                    // befeore-send-file的钩子就有错误发生。\n                    promise.fail(function( reason ) {\n                        file.setStatus( Status.ERROR, reason );\n                        me.owner.trigger( 'uploadError', file, reason );\n                        me.owner.trigger( 'uploadComplete', file );\n                    });\n    \n                    pending.push( promise );\n                }\n            },\n    \n            // 让出位置了，可以让其他分片开始上传\n            _popBlock: function( block ) {\n                var idx = $.inArray( block, this.pool );\n    \n                this.pool.splice( idx, 1 );\n                block.file.remaning--;\n                this.remaning--;\n            },\n    \n            // 开始上传，可以被掉过。如果promise被reject了，则表示跳过此分片。\n            _startSend: function( block ) {\n                var me = this,\n                    file = block.file,\n                    promise;\n    \n                // 有可能在 before-send-file 的 promise 期间改变了文件状态。\n                // 如：暂停，取消\n                // 我们不能中断 promise, 但是可以在 promise 完后，不做上传操作。\n                if ( file.getStatus() !== Status.PROGRESS ) {\n    \n                    // 如果是中断，则还需要放回去。\n                    if (file.getStatus() === Status.INTERRUPT) {\n                        me._putback(block);\n                    }\n    \n                    return;\n                }\n    \n                me.pool.push( block );\n                me.remaning++;\n    \n                // 如果没有分片，则直接使用原始的。\n                // 不会丢失content-type信息。\n                block.blob = block.chunks === 1 ? file.source :\n                        file.source.slice( block.start, block.end );\n    \n                // hook, 每个分片发送之前可能要做些异步的事情。\n                block.waiting = promise = me.request( 'before-send', block, function() {\n                    delete block.waiting;\n    \n                    // 有可能文件已经上传出错了，所以不需要再传输了。\n                    if ( file.getStatus() === Status.PROGRESS ) {\n                        me._doSend( block );\n                    } else if (block.file.getStatus() !== Status.INTERRUPT) {\n                        me._popBlock(block);\n                    }\n    \n                    Base.nextTick(me.__tick);\n                });\n    \n                // 如果为fail了，则跳过此分片。\n                promise.fail(function() {\n                    delete block.waiting;\n    \n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file ).always(function() {\n                            block.percentage = 1;\n                            me._popBlock( block );\n                            me.owner.trigger( 'uploadComplete', file );\n                            Base.nextTick( me.__tick );\n                        });\n                    } else {\n                        block.percentage = 1;\n                        me.updateFileProgress( file );\n                        me._popBlock( block );\n                        Base.nextTick( me.__tick );\n                    }\n                });\n            },\n    \n    \n            /**\n             * @event uploadBeforeSend\n             * @param {Object} object\n             * @param {Object} data 默认的上传参数，可以扩展此对象来控制上传参数。\n             * @param {Object} headers 可以扩展此对象来控制上传头部。\n             * @description 当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadAccept\n             * @param {Object} object\n             * @param {Object} ret 服务端的返回数据，json格式，如果服务端不是json格式，从ret._raw中取数据，自行解析。\n             * @description 当某个文件上传到服务端响应后，会派送此事件来询问服务端响应是否有效。如果此事件handler返回值为`false`, 则此文件将派送`server`类型的`uploadError`事件。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadProgress\n             * @param {File} file File对象\n             * @param {Number} percentage 上传进度\n             * @description 上传过程中触发，携带上传进度。\n             * @for  Uploader\n             */\n    \n    \n            /**\n             * @event uploadError\n             * @param {File} file File对象\n             * @param {String} reason 出错的code\n             * @description 当文件上传出错时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadSuccess\n             * @param {File} file File对象\n             * @param {Object} response 服务端返回的数据\n             * @description 当文件上传成功时触发。\n             * @for  Uploader\n             */\n    \n            /**\n             * @event uploadComplete\n             * @param {File} [file] File对象\n             * @description 不管成功或者失败，文件上传完成时触发。\n             * @for  Uploader\n             */\n    \n            // 做上传操作。\n            _doSend: function( block ) {\n                var me = this,\n                    owner = me.owner,\n                    opts = $.extend({}, me.options, block.options),\n                    file = block.file,\n                    tr = new Transport( opts ),\n                    data = $.extend({}, opts.formData ),\n                    headers = $.extend({}, opts.headers ),\n                    requestAccept, ret;\n    \n                block.transport = tr;\n    \n                tr.on( 'destroy', function() {\n                    delete block.transport;\n                    me._popBlock( block );\n                    Base.nextTick( me.__tick );\n                });\n    \n                // 广播上传进度。以文件为单位。\n                tr.on( 'progress', function( percentage ) {\n                    block.percentage = percentage;\n                    me.updateFileProgress( file );\n                });\n    \n                // 用来询问，是否返回的结果是有错误的。\n                requestAccept = function( reject ) {\n                    var fn;\n    \n                    if( opts.customUpload ){\n                        ret = tr.customUploadResponse;\n                    }else{\n                        ret = tr.getResponseAsJson() || {};\n                        ret._raw = tr.getResponse();\n                        ret._headers = tr.getResponseHeaders();\n                    }\n                    block.response = ret;\n                    fn = function( value ) {\n                        reject = value;\n                    };\n    \n                    // 服务端响应了，不代表成功了，询问是否响应正确。\n                    if ( !owner.trigger( 'uploadAccept', block, ret, fn ) ) {\n                        reject = reject || 'server';\n                    }\n    \n                    return reject;\n                };\n    \n                // 尝试重试，然后广播文件上传出错。\n                tr.on( 'error', function( type, flag ) {\n                    // 在 runtime/html5/transport.js 上为 type 加上了状态码，形式：type|status|text（如：http|403|Forbidden）\n                    // 这里把状态码解释出来，并还原后面代码所依赖的 type 变量\n                    var typeArr = type.split( '|' ), status, statusText;\n                    type = typeArr[0];\n                    status = parseFloat( typeArr[1] ),\n                    statusText = typeArr[2];\n    \n                    block.retried = block.retried || 0;\n    \n                    // 自动重试\n                    if ( block.chunks > 1 && ~'http,abort,server'.indexOf( type.replace( /-.*/, '' ) ) &&\n                            block.retried < opts.chunkRetry ) {\n    \n                        block.retried++;\n    \n                        me.retryTimer = setTimeout(function() {\n                            tr.send();\n                        }, opts.chunkRetryDelay || 1000);\n    \n                    } else {\n    \n                        // http status 500 ~ 600\n                        if ( !flag && type === 'server' ) {\n                            type = requestAccept( type );\n                        }\n    \n                        file.setStatus( Status.ERROR, type );\n                        owner.trigger( 'uploadError', file, type, status, statusText );\n                        owner.trigger( 'uploadComplete', file );\n                    }\n                });\n    \n                // 上传成功\n                tr.on( 'load', function() {\n                    var reason;\n    \n                    // 如果非预期，转向上传出错。\n                    if ( (reason = requestAccept()) ) {\n                        tr.trigger( 'error', reason, true );\n                        return;\n                    }\n    \n                    // 全部上传完成。\n                    if ( file.remaning === 1 ) {\n                        me._finishFile( file, ret );\n                    } else {\n                        tr.destroy();\n                    }\n                });\n    \n                // 配置默认的上传字段。\n                data = $.extend( data, {\n                    id: file.id,\n                    name: file.name,\n                    type: file.type,\n                    lastModifiedDate: file.lastModifiedDate,\n                    size: file.size\n                });\n    \n                block.chunks > 1 && $.extend( data, {\n                    chunks: block.chunks,\n                    chunk: block.chunk\n                });\n    \n                // 在发送之间可以添加字段什么的。。。\n                // 如果默认的字段不够使用，可以通过监听此事件来扩展\n                owner.trigger( 'uploadBeforeSend', block, data, headers );\n    \n                // 开始发送。\n                tr.appendBlob( opts.fileVal, block.blob, file.name, block);\n                tr.append( data );\n                tr.setRequestHeader( headers );\n                tr.send();\n            },\n    \n            // 完成上传。\n            _finishFile: function( file, ret, hds ) {\n                var owner = this.owner;\n    \n                return owner\n                        .request( 'after-send-file', arguments, function() {\n                            file.setStatus( Status.COMPLETE );\n                            owner.trigger( 'uploadSuccess', file, ret, hds );\n                        })\n                        .fail(function( reason ) {\n    \n                            // 如果外部已经标记为invalid什么的，不再改状态。\n                            if ( file.getStatus() === Status.PROGRESS ) {\n                                file.setStatus( Status.ERROR, reason );\n                            }\n    \n                            owner.trigger( 'uploadError', file, reason );\n                        })\n                        .always(function() {\n                            owner.trigger( 'uploadComplete', file );\n                        });\n            },\n    \n            updateFileProgress: function(file) {\n                var totalPercent = 0,\n                    uploaded = 0;\n    \n                if (!file.blocks) {\n                    return;\n                }\n    \n                $.each( file.blocks, function( _, v ) {\n                    uploaded += (v.percentage || 0) * (v.end - v.start);\n                });\n    \n                totalPercent = uploaded / file.size;\n                this.owner.trigger( 'uploadProgress', file, totalPercent || 0 );\n            },\n    \n            destroy: function() {\n                clearTimeout(this.retryTimer);\n            }\n    \n        });\n    });\n    \n    /**\n     * @fileOverview 各种验证，包括文件总大小是否超出、单文件是否超出和文件是否重复。\n     */\n    \n    define('widgets/validator',[\n        'base',\n        'uploader',\n        'file',\n        'widgets/widget'\n    ], function( Base, Uploader, WUFile ) {\n    \n        var $ = Base.$,\n            validators = {},\n            api;\n    \n        /**\n         * @event error\n         * @param {String} type 错误类型。\n         * @description 当validate不通过时，会以派送错误事件的形式通知调用者。通过`upload.on('error', handler)`可以捕获到此类错误，目前有以下错误会在特定的情况下派送错来。\n         *\n         * * `Q_EXCEED_NUM_LIMIT` 在设置了`fileNumLimit`且尝试给`uploader`添加的文件数量超出这个值时派送。\n         * * `Q_EXCEED_SIZE_LIMIT` 在设置了`Q_EXCEED_SIZE_LIMIT`且尝试给`uploader`添加的文件总大小超出这个值时派送。\n         * * `Q_TYPE_DENIED` 当文件类型不满足时触发。。\n         * @for  Uploader\n         */\n    \n        // 暴露给外面的api\n        api = {\n    \n            // 添加验证器\n            addValidator: function( type, cb ) {\n                validators[ type ] = cb;\n            },\n    \n            // 移除验证器\n            removeValidator: function( type ) {\n                delete validators[ type ];\n            }\n        };\n    \n        // 在Uploader初始化的时候启动Validators的初始化\n        Uploader.register({\n            name: 'validator',\n    \n            init: function() {\n                var me = this;\n                Base.nextTick(function() {\n                    $.each( validators, function() {\n                        this.call( me.owner );\n                    });\n                });\n            }\n        });\n    \n        /**\n         * @property {int} [fileNumLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总数量, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileNumLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileNumLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                    // 增加beforeFileQueuedCheckfileNumLimit验证,主要为了再次加载时(已存在历史文件)验证数量是否超过设置项\n                if (!this.trigger('beforeFileQueuedCheckfileNumLimit', file,count)) {\n                    return false;\n                }\n                if ( count >= max && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_NUM_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return count >= max ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function() {\n                count++;\n            });\n    \n            uploader.on( 'fileDequeued', function() {\n                count--;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n    \n        /**\n         * @property {int} [fileSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证文件总大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                count = 0,\n                max = parseInt( opts.fileSizeLimit, 10 ),\n                flag = true;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var invalid = count + file.size > max;\n    \n                if ( invalid && flag ) {\n                    flag = false;\n                    this.trigger( 'error', 'Q_EXCEED_SIZE_LIMIT', max, file );\n                    setTimeout(function() {\n                        flag = true;\n                    }, 1 );\n                }\n    \n                return invalid ? false : true;\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                count += file.size;\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                count -= file.size;\n            });\n    \n            uploader.on( 'reset', function() {\n                count = 0;\n            });\n        });\n    \n        /**\n         * @property {int} [fileSingleSizeLimit=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 验证单个文件大小是否超出限制, 超出则不允许加入队列。\n         */\n        api.addValidator( 'fileSingleSizeLimit', function() {\n            var uploader = this,\n                opts = uploader.options,\n                max = opts.fileSingleSizeLimit;\n    \n            if ( !max ) {\n                return;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n    \n                if ( file.size > max ) {\n                    file.setStatus( WUFile.Status.INVALID, 'exceed_size' );\n                    this.trigger( 'error', 'F_EXCEED_SIZE', max, file );\n                    return false;\n                }\n    \n            });\n    \n        });\n    \n        /**\n         * @property {Boolean} [duplicate=undefined]\n         * @namespace options\n         * @for Uploader\n         * @description 去重， 根据文件名字、文件大小和最后修改时间来生成hash Key.\n         */\n        api.addValidator( 'duplicate', function() {\n            var uploader = this,\n                opts = uploader.options,\n                mapping = {};\n    \n            if ( opts.duplicate ) {\n                return;\n            }\n    \n            function hashString( str ) {\n                var hash = 0,\n                    i = 0,\n                    len = str.length,\n                    _char;\n    \n                for ( ; i < len; i++ ) {\n                    _char = str.charCodeAt( i );\n                    hash = _char + (hash << 6) + (hash << 16) - hash;\n                }\n    \n                return hash;\n            }\n    \n            uploader.on( 'beforeFileQueued', function( file ) {\n                var hash = file.__hash || (file.__hash = hashString( file.name +\n                        file.size + file.lastModifiedDate ));\n    \n                // 已经重复了\n                if ( mapping[ hash ] ) {\n                    this.trigger( 'error', 'F_DUPLICATE', file );\n                    return false;\n                }\n            });\n    \n            uploader.on( 'fileQueued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (mapping[ hash ] = true);\n            });\n    \n            uploader.on( 'fileDequeued', function( file ) {\n                var hash = file.__hash;\n    \n                hash && (delete mapping[ hash ]);\n            });\n    \n            uploader.on( 'reset', function() {\n                mapping = {};\n            });\n        });\n    \n        return api;\n    });\n    \n    /**\n     * @fileOverview Md5\n     */\n    define('lib/md5',[\n        'runtime/client',\n        'mediator'\n    ], function( RuntimeClient, Mediator ) {\n    \n        function Md5() {\n            RuntimeClient.call( this, 'Md5' );\n        }\n    \n        // 让 Md5 具备事件功能。\n        Mediator.installTo( Md5.prototype );\n    \n        Md5.prototype.loadFromBlob = function( blob ) {\n            var me = this;\n    \n            if ( me.getRuid() ) {\n                me.disconnectRuntime();\n            }\n    \n            // 连接到blob归属的同一个runtime.\n            me.connectRuntime( blob.ruid, function() {\n                me.exec('init');\n                me.exec( 'loadFromBlob', blob );\n            });\n        };\n    \n        Md5.prototype.getResult = function() {\n            return this.exec('getResult');\n        };\n    \n        return Md5;\n    });\n    /**\n     * @fileOverview 图片操作, 负责预览图片和上传前压缩图片\n     */\n    define('widgets/md5',[\n        'base',\n        'uploader',\n        'lib/md5',\n        'lib/blob',\n        'widgets/widget'\n    ], function( Base, Uploader, Md5, Blob ) {\n    \n        return Uploader.register({\n            name: 'md5',\n    \n    \n            /**\n             * 计算文件 md5 值，返回一个 promise 对象，可以监听 progress 进度。\n             *\n             *\n             * @method md5File\n             * @grammar md5File( file[, start[, end]] ) => promise\n             * @for Uploader\n             * @example\n             *\n             * uploader.on( 'fileQueued', function( file ) {\n             *     var $li = ...;\n             *\n             *     uploader.md5File( file )\n             *\n             *         // 及时显示进度\n             *         .progress(function(percentage) {\n             *             console.log('Percentage:', percentage);\n             *         })\n             *\n             *         // 完成\n             *         .then(function(val) {\n             *             console.log('md5 result:', val);\n             *         });\n             *\n             * });\n             */\n            md5File: function( file, start, end ) {\n                var md5 = new Md5(),\n                    deferred = Base.Deferred(),\n                    blob = (file instanceof Blob) ? file :\n                        this.request( 'get-file', file ).source;\n    \n                md5.on( 'progress load', function( e ) {\n                    e = e || {};\n                    deferred.notify( e.total ? e.loaded / e.total : 1 );\n                });\n    \n                md5.on( 'complete', function() {\n                    deferred.resolve( md5.getResult() );\n                });\n    \n                md5.on( 'error', function( reason ) {\n                    deferred.reject( reason );\n                });\n    \n                if ( arguments.length > 1 ) {\n                    start = start || 0;\n                    end = end || 0;\n                    start < 0 && (start = blob.size + start);\n                    end < 0 && (end = blob.size + end);\n                    end = Math.min( end, blob.size );\n                    blob = blob.slice( start, end );\n                }\n    \n                md5.loadFromBlob( blob );\n    \n                return deferred.promise();\n            }\n        });\n    });\n    /**\n     * @fileOverview Runtime管理器，负责Runtime的选择, 连接\n     */\n    define('runtime/compbase',[],function() {\n    \n        function CompBase( owner, runtime ) {\n    \n            this.owner = owner;\n            this.options = owner.options;\n    \n            this.getRuntime = function() {\n                return runtime;\n            };\n    \n            this.getRuid = function() {\n                return runtime.uid;\n            };\n    \n            this.trigger = function() {\n                return owner.trigger.apply( owner, arguments );\n            };\n        }\n    \n        return CompBase;\n    });\n    /**\n     * @fileOverview Html5Runtime\n     */\n    define('runtime/html5/runtime',[\n        'base',\n        'runtime/runtime',\n        'runtime/compbase'\n    ], function( Base, Runtime, CompBase ) {\n    \n        var type = 'html5',\n            components = {};\n    \n        function Html5Runtime() {\n            var pool = {},\n                me = this,\n                destroy = this.destroy;\n    \n            Runtime.apply( me, arguments );\n            me.type = type;\n    \n    \n            // 这个方法的调用者，实际上是RuntimeClient\n            me.exec = function( comp, fn/*, args...*/) {\n                var client = this,\n                    uid = client.uid,\n                    args = Base.slice( arguments, 2 ),\n                    instance;\n    \n                if ( components[ comp ] ) {\n                    instance = pool[ uid ] = pool[ uid ] ||\n                            new components[ comp ]( client, me );\n    \n                    if ( instance[ fn ] ) {\n                        return instance[ fn ].apply( instance, args );\n                    }\n                }\n            };\n    \n            me.destroy = function() {\n                // @todo 删除池子中的所有实例\n                return destroy && destroy.apply( this, arguments );\n            };\n        }\n    \n        Base.inherits( Runtime, {\n            constructor: Html5Runtime,\n    \n            // 不需要连接其他程序，直接执行callback\n            init: function() {\n                var me = this;\n                setTimeout(function() {\n                    me.trigger('ready');\n                }, 1 );\n            }\n    \n        });\n    \n        // 注册Components\n        Html5Runtime.register = function( name, component ) {\n            var klass = components[ name ] = Base.inherits( CompBase, component );\n            return klass;\n        };\n    \n        // 注册html5运行时。\n        // 只有在支持的前提下注册。\n        if ( window.Blob && window.FileReader && window.DataView ) {\n            Runtime.addRuntime( type, Html5Runtime );\n        }\n    \n        return Html5Runtime;\n    });\n    /**\n     * @fileOverview Blob Html实现\n     */\n    define('runtime/html5/blob',[\n        'runtime/html5/runtime',\n        'lib/blob'\n    ], function( Html5Runtime, Blob ) {\n    \n        return Html5Runtime.register( 'Blob', {\n            slice: function( start, end ) {\n                var blob = this.owner.source,\n                    slice = blob.slice || blob.webkitSlice || blob.mozSlice;\n    \n                blob = slice.call( blob, start, end );\n    \n                return new Blob( this.getRuid(), blob );\n            }\n        });\n    });\n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/dnd',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        var $ = Base.$,\n            prefix = 'webuploader-dnd-';\n    \n        return Html5Runtime.register( 'DragAndDrop', {\n            init: function() {\n                var elem = this.elem = this.options.container;\n    \n                this.dragEnterHandler = Base.bindFn( this._dragEnterHandler, this );\n                this.dragOverHandler = Base.bindFn( this._dragOverHandler, this );\n                this.dragLeaveHandler = Base.bindFn( this._dragLeaveHandler, this );\n                this.dropHandler = Base.bindFn( this._dropHandler, this );\n                this.dndOver = false;\n    \n                elem.on( 'dragenter', this.dragEnterHandler );\n                elem.on( 'dragover', this.dragOverHandler );\n                elem.on( 'dragleave', this.dragLeaveHandler );\n                elem.on( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).on( 'dragover', this.dragOverHandler );\n                    $( document ).on( 'drop', this.dropHandler );\n                }\n            },\n    \n            _dragEnterHandler: function( e ) {\n                var me = this,\n                    denied = me._denied || false,\n                    items;\n    \n                e = e.originalEvent || e;\n    \n                if ( !me.dndOver ) {\n                    me.dndOver = true;\n    \n                    // 注意只有 chrome 支持。\n                    items = e.dataTransfer.items;\n    \n                    if ( items && items.length ) {\n                        me._denied = denied = !me.trigger( 'accept', items );\n                    }\n    \n                    me.elem.addClass( prefix + 'over' );\n                    me.elem[ denied ? 'addClass' :\n                            'removeClass' ]( prefix + 'denied' );\n                }\n    \n                e.dataTransfer.dropEffect = denied ? 'none' : 'copy';\n    \n                return false;\n            },\n    \n            _dragOverHandler: function( e ) {\n                // 只处理框内的。\n                var parentElem = this.elem.parent().get( 0 );\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                clearTimeout( this._leaveTimer );\n                this._dragEnterHandler.call( this, e );\n    \n                return false;\n            },\n    \n            _dragLeaveHandler: function() {\n                var me = this,\n                    handler;\n    \n                handler = function() {\n                    me.dndOver = false;\n                    me.elem.removeClass( prefix + 'over ' + prefix + 'denied' );\n                };\n    \n                clearTimeout( me._leaveTimer );\n                me._leaveTimer = setTimeout( handler, 100 );\n                return false;\n            },\n    \n            _dropHandler: function( e ) {\n                var me = this,\n                    ruid = me.getRuid(),\n                    parentElem = me.elem.parent().get( 0 ),\n                    dataTransfer, data;\n    \n                // 只处理框内的。\n                if ( parentElem && !$.contains( parentElem, e.currentTarget ) ) {\n                    return false;\n                }\n    \n                e = e.originalEvent || e;\n                dataTransfer = e.dataTransfer;\n    \n                // 如果是页面内拖拽，还不能处理，不阻止事件。\n                // 此处 ie11 下会报参数错误，\n                try {\n                    data = dataTransfer.getData('text/html');\n                } catch( err ) {\n                }\n    \n                me.dndOver = false;\n                me.elem.removeClass( prefix + 'over' );\n    \n                if ( !dataTransfer || data ) {\n                    return;\n                }\n    \n                me._getTansferFiles( dataTransfer, function( results ) {\n                    me.trigger( 'drop', $.map( results, function( file ) {\n                        return new File( ruid, file );\n                    }) );\n                });\n    \n                return false;\n            },\n    \n            // 如果传入 callback 则去查看文件夹，否则只管当前文件夹。\n            _getTansferFiles: function( dataTransfer, callback ) {\n                var results  = [],\n                    promises = [],\n                    items, files, file, item, i, len, canAccessFolder;\n    \n                items = dataTransfer.items;\n                files = dataTransfer.files;\n    \n                canAccessFolder = !!(items && items[ 0 ].webkitGetAsEntry);\n    \n                for ( i = 0, len = files.length; i < len; i++ ) {\n                    file = files[ i ];\n                    item = items && items[ i ];\n    \n                    if ( canAccessFolder && item.webkitGetAsEntry().isDirectory ) {\n    \n                        promises.push( this._traverseDirectoryTree(\n                                item.webkitGetAsEntry(), results ) );\n                    } else {\n                        results.push( file );\n                    }\n                }\n    \n                Base.when.apply( Base, promises ).done(function() {\n    \n                    if ( !results.length ) {\n                        return;\n                    }\n    \n                    callback( results );\n                });\n            },\n    \n            _traverseDirectoryTree: function( entry, results ) {\n                var deferred = Base.Deferred(),\n                    me = this;\n    \n                if ( entry.isFile ) {\n                    entry.file(function( file ) {\n                        results.push( file );\n                        deferred.resolve();\n                    });\n                } else if ( entry.isDirectory ) {\n                    entry.createReader().readEntries(function( entries ) {\n                        var len = entries.length,\n                            promises = [],\n                            arr = [],    // 为了保证顺序。\n                            i;\n    \n                        for ( i = 0; i < len; i++ ) {\n                            promises.push( me._traverseDirectoryTree(\n                                    entries[ i ], arr ) );\n                        }\n    \n                        Base.when.apply( Base, promises ).then(function() {\n                            results.push.apply( results, arr );\n                            deferred.resolve();\n                        }, deferred.reject );\n                    });\n                }\n    \n                return deferred.promise();\n            },\n    \n            destroy: function() {\n                var elem = this.elem;\n    \n                // 还没 init 就调用 destroy\n                if (!elem) {\n                    return;\n                }\n    \n                elem.off( 'dragenter', this.dragEnterHandler );\n                elem.off( 'dragover', this.dragOverHandler );\n                elem.off( 'dragleave', this.dragLeaveHandler );\n                elem.off( 'drop', this.dropHandler );\n    \n                if ( this.options.disableGlobalDnd ) {\n                    $( document ).off( 'dragover', this.dragOverHandler );\n                    $( document ).off( 'drop', this.dropHandler );\n                }\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePaste\n     */\n    define('runtime/html5/filepaste',[\n        'base',\n        'runtime/html5/runtime',\n        'lib/file'\n    ], function( Base, Html5Runtime, File ) {\n    \n        return Html5Runtime.register( 'FilePaste', {\n            init: function() {\n                var opts = this.options,\n                    elem = this.elem = opts.container,\n                    accept = '.*',\n                    arr, i, len, item;\n    \n                // accetp的mimeTypes中生成匹配正则。\n                if ( opts.accept ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        item = opts.accept[ i ].mimeTypes;\n                        item && arr.push( item );\n                    }\n    \n                    if ( arr.length ) {\n                        accept = arr.join(',');\n                        accept = accept.replace( /,/g, '|' ).replace( /\\*/g, '.*' );\n                    }\n                }\n                this.accept = accept = new RegExp( accept, 'i' );\n                this.hander = Base.bindFn( this._pasteHander, this );\n                elem.on( 'paste', this.hander );\n            },\n    \n            _pasteHander: function( e ) {\n                var allowed = [],\n                    ruid = this.getRuid(),\n                    items, item, blob, i, len;\n    \n                e = e.originalEvent || e;\n                items = e.clipboardData.items;\n    \n                for ( i = 0, len = items.length; i < len; i++ ) {\n                    item = items[ i ];\n    \n                    if ( item.kind !== 'file' || !(blob = item.getAsFile()) ) {\n                        continue;\n                    }\n    \n                    allowed.push( new File( ruid, blob ) );\n                }\n    \n                if ( allowed.length ) {\n                    // 不阻止非文件粘贴（文字粘贴）的事件冒泡\n                    e.preventDefault();\n                    e.stopPropagation();\n                    this.trigger( 'paste', allowed );\n                }\n            },\n    \n            destroy: function() {\n                this.elem.off( 'paste', this.hander );\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview FilePicker\n     */\n    define('runtime/html5/filepicker',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var $ = Base.$;\n    \n        return Html5Runtime.register( 'FilePicker', {\n            init: function() {\n                var container = this.getRuntime().getContainer(),\n                    me = this,\n                    owner = me.owner,\n                    opts = me.options,\n                    label = this.label = $( document.createElement('label') ),\n                    input =  this.input = $( document.createElement('input') ),\n                    arr, i, len, mouseHandler, changeHandler;\n    \n                input.attr( 'type', 'file' );\n                // input.attr( 'capture', 'camera');\n                input.attr( 'name', opts.name );\n                input.addClass('webuploader-element-invisible');\n    \n                label.on( 'click', function(e) {\n                    input.trigger('click');\n                    e.stopPropagation();\n                    owner.trigger('dialogopen');\n                });\n    \n                label.css({\n                    opacity: 0,\n                    width: '100%',\n                    height: '100%',\n                    display: 'block',\n                    cursor: 'pointer',\n                    background: '#ffffff'\n                });\n    \n                if ( opts.multiple ) {\n                    input.attr( 'multiple', 'multiple' );\n                }\n    \n                // @todo Firefox不支持单独指定后缀\n                if ( opts.accept && opts.accept.length > 0 ) {\n                    arr = [];\n    \n                    for ( i = 0, len = opts.accept.length; i < len; i++ ) {\n                        arr.push( opts.accept[ i ].mimeTypes );\n                    }\n    \n                    input.attr( 'accept', arr.join(',') );\n                }\n    \n                container.append( input );\n                container.append( label );\n    \n                mouseHandler = function( e ) {\n                    owner.trigger( e.type );\n                };\n    \n                changeHandler = function( e ) {\n                    var clone;\n    \n                    // 解决chrome 56 第二次打开文件选择器，然后点击取消，依然会触发change事件的问题\n                    if (e.target.files.length === 0){\n                        return false;\n                    }\n    \n                    // 第一次上传图片后，第二次再点击弹出文件选择器窗，等待\n                    me.files = e.target.files;\n    \n    \n                    // reset input\n                    clone = this.cloneNode( true );\n                    clone.value = null;\n                    this.parentNode.replaceChild( clone, this );\n    \n                    input.off();\n                    input = $( clone ).on( 'change', changeHandler )\n                            .on( 'mouseenter mouseleave', mouseHandler );\n    \n                    owner.trigger('change');\n                }\n                input.on( 'change', changeHandler);\n                label.on( 'mouseenter mouseleave', mouseHandler );\n    \n            },\n    \n    \n            getFiles: function() {\n                return this.files;\n            },\n    \n            destroy: function() {\n                this.input.off();\n                this.label.off();\n            }\n        });\n    });\n    \n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/util',[\n        'base'\n    ], function( Base ) {\n    \n        var urlAPI = window.createObjectURL && window ||\n                window.URL && URL.revokeObjectURL && URL ||\n                window.webkitURL,\n            createObjectURL = Base.noop,\n            revokeObjectURL = createObjectURL;\n    \n        if ( urlAPI ) {\n    \n            // 更安全的方式调用，比如android里面就能把context改成其他的对象。\n            createObjectURL = function() {\n                return urlAPI.createObjectURL.apply( urlAPI, arguments );\n            };\n    \n            revokeObjectURL = function() {\n                return urlAPI.revokeObjectURL.apply( urlAPI, arguments );\n            };\n        }\n    \n        return {\n            createObjectURL: createObjectURL,\n            revokeObjectURL: revokeObjectURL,\n    \n            dataURL2Blob: function( dataURI ) {\n                var byteStr, intArray, ab, i, mimetype, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                ab = new ArrayBuffer( byteStr.length );\n                intArray = new Uint8Array( ab );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                mimetype = parts[ 0 ].split(':')[ 1 ].split(';')[ 0 ];\n    \n                return this.arrayBufferToBlob( ab, mimetype );\n            },\n    \n            dataURL2ArrayBuffer: function( dataURI ) {\n                var byteStr, intArray, i, parts;\n    \n                parts = dataURI.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    byteStr = atob( parts[ 1 ] );\n                } else {\n                    byteStr = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                intArray = new Uint8Array( byteStr.length );\n    \n                for ( i = 0; i < byteStr.length; i++ ) {\n                    intArray[ i ] = byteStr.charCodeAt( i );\n                }\n    \n                return intArray.buffer;\n            },\n    \n            arrayBufferToBlob: function( buffer, type ) {\n                var builder = window.BlobBuilder || window.WebKitBlobBuilder,\n                    bb;\n    \n                // android不支持直接new Blob, 只能借助blobbuilder.\n                if ( builder ) {\n                    bb = new builder();\n                    bb.append( buffer );\n                    return bb.getBlob( type );\n                }\n    \n                return new Blob([ buffer ], type ? { type: type } : {} );\n            },\n    \n            // 抽出来主要是为了解决android下面canvas.toDataUrl不支持jpeg.\n            // 你得到的结果是png.\n            canvasToDataUrl: function( canvas, type, quality ) {\n                return canvas.toDataURL( type, quality / 100 );\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            parseMeta: function( blob, callback ) {\n                callback( false, {});\n            },\n    \n            // imagemeat会复写这个方法，如果用户选择加载那个文件了的话。\n            updateImageHead: function( data ) {\n                return data;\n            }\n        };\n    });\n    /**\n     * Terms:\n     *\n     * Uint8Array, FileReader, BlobBuilder, atob, ArrayBuffer\n     * @fileOverview Image控件\n     */\n    define('runtime/html5/imagemeta',[\n        'runtime/html5/util'\n    ], function( Util ) {\n    \n        var api;\n    \n        api = {\n            parsers: {\n                0xffe1: []\n            },\n    \n            maxMetaDataSize: 262144,\n    \n            parse: function( blob, cb ) {\n                var me = this,\n                    fr = new FileReader();\n    \n                fr.onload = function() {\n                    cb( false, me._parse( this.result ) );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                fr.onerror = function( e ) {\n                    cb( e.message );\n                    fr = fr.onload = fr.onerror = null;\n                };\n    \n                blob = blob.slice( 0, me.maxMetaDataSize );\n                fr.readAsArrayBuffer( blob.getSource() );\n            },\n    \n            _parse: function( buffer, noParse ) {\n                if ( buffer.byteLength < 6 ) {\n                    return;\n                }\n    \n                var dataview = new DataView( buffer ),\n                    offset = 2,\n                    maxOffset = dataview.byteLength - 4,\n                    headLength = offset,\n                    ret = {},\n                    markerBytes, markerLength, parsers, i;\n    \n                if ( dataview.getUint16( 0 ) === 0xffd8 ) {\n    \n                    while ( offset < maxOffset ) {\n                        markerBytes = dataview.getUint16( offset );\n    \n                        if ( markerBytes >= 0xffe0 && markerBytes <= 0xffef ||\n                                markerBytes === 0xfffe ) {\n    \n                            markerLength = dataview.getUint16( offset + 2 ) + 2;\n    \n                            if ( offset + markerLength > dataview.byteLength ) {\n                                break;\n                            }\n    \n                            parsers = api.parsers[ markerBytes ];\n    \n                            if ( !noParse && parsers ) {\n                                for ( i = 0; i < parsers.length; i += 1 ) {\n                                    parsers[ i ].call( api, dataview, offset,\n                                            markerLength, ret );\n                                }\n                            }\n    \n                            offset += markerLength;\n                            headLength = offset;\n                        } else {\n                            break;\n                        }\n                    }\n    \n                    if ( headLength > 6 ) {\n                        if ( buffer.slice ) {\n                            ret.imageHead = buffer.slice( 2, headLength );\n                        } else {\n                            // Workaround for IE10, which does not yet\n                            // support ArrayBuffer.slice:\n                            ret.imageHead = new Uint8Array( buffer )\n                                    .subarray( 2, headLength );\n                        }\n                    }\n                }\n    \n                return ret;\n            },\n    \n            updateImageHead: function( buffer, head ) {\n                var data = this._parse( buffer, true ),\n                    buf1, buf2, bodyoffset;\n    \n    \n                bodyoffset = 2;\n                if ( data.imageHead ) {\n                    bodyoffset = 2 + data.imageHead.byteLength;\n                }\n    \n                if ( buffer.slice ) {\n                    buf2 = buffer.slice( bodyoffset );\n                } else {\n                    buf2 = new Uint8Array( buffer ).subarray( bodyoffset );\n                }\n    \n                buf1 = new Uint8Array( head.byteLength + 2 + buf2.byteLength );\n    \n                buf1[ 0 ] = 0xFF;\n                buf1[ 1 ] = 0xD8;\n                buf1.set( new Uint8Array( head ), 2 );\n                buf1.set( new Uint8Array( buf2 ), head.byteLength + 2 );\n    \n                return buf1.buffer;\n            }\n        };\n    \n        Util.parseMeta = function() {\n            return api.parse.apply( api, arguments );\n        };\n    \n        Util.updateImageHead = function() {\n            return api.updateImageHead.apply( api, arguments );\n        };\n    \n        return api;\n    });\n    /**\n     * 代码来自于：https://github.com/blueimp/JavaScript-Load-Image\n     * 暂时项目中只用了orientation.\n     *\n     * 去除了 Exif Sub IFD Pointer, GPS Info IFD Pointer, Exif Thumbnail.\n     * @fileOverview EXIF解析\n     */\n    \n    // Sample\n    // ====================================\n    // Make : Apple\n    // Model : iPhone 4S\n    // Orientation : 1\n    // XResolution : 72 [72/1]\n    // YResolution : 72 [72/1]\n    // ResolutionUnit : 2\n    // Software : QuickTime 7.7.1\n    // DateTime : 2013:09:01 22:53:55\n    // ExifIFDPointer : 190\n    // ExposureTime : 0.058823529411764705 [1/17]\n    // FNumber : 2.4 [12/5]\n    // ExposureProgram : Normal program\n    // ISOSpeedRatings : 800\n    // ExifVersion : 0220\n    // DateTimeOriginal : 2013:09:01 22:52:51\n    // DateTimeDigitized : 2013:09:01 22:52:51\n    // ComponentsConfiguration : YCbCr\n    // ShutterSpeedValue : 4.058893515764426\n    // ApertureValue : 2.5260688216892597 [4845/1918]\n    // BrightnessValue : -0.3126686601998395\n    // MeteringMode : Pattern\n    // Flash : Flash did not fire, compulsory flash mode\n    // FocalLength : 4.28 [107/25]\n    // SubjectArea : [4 values]\n    // FlashpixVersion : 0100\n    // ColorSpace : 1\n    // PixelXDimension : 2448\n    // PixelYDimension : 3264\n    // SensingMethod : One-chip color area sensor\n    // ExposureMode : 0\n    // WhiteBalance : Auto white balance\n    // FocalLengthIn35mmFilm : 35\n    // SceneCaptureType : Standard\n    define('runtime/html5/imagemeta/exif',[\n        'base',\n        'runtime/html5/imagemeta'\n    ], function( Base, ImageMeta ) {\n    \n        var EXIF = {};\n    \n        EXIF.ExifMap = function() {\n            return this;\n        };\n    \n        EXIF.ExifMap.prototype.map = {\n            'Orientation': 0x0112\n        };\n    \n        EXIF.ExifMap.prototype.get = function( id ) {\n            return this[ id ] || this[ this.map[ id ] ];\n        };\n    \n        EXIF.exifTagTypes = {\n            // byte, 8-bit unsigned int:\n            1: {\n                getValue: function( dataView, dataOffset ) {\n                    return dataView.getUint8( dataOffset );\n                },\n                size: 1\n            },\n    \n            // ascii, 8-bit byte:\n            2: {\n                getValue: function( dataView, dataOffset ) {\n                    return String.fromCharCode( dataView.getUint8( dataOffset ) );\n                },\n                size: 1,\n                ascii: true\n            },\n    \n            // short, 16 bit int:\n            3: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint16( dataOffset, littleEndian );\n                },\n                size: 2\n            },\n    \n            // long, 32 bit int:\n            4: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // rational = two long values,\n            // first is numerator, second is denominator:\n            5: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getUint32( dataOffset, littleEndian ) /\n                        dataView.getUint32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            },\n    \n            // slong, 32 bit signed int:\n            9: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian );\n                },\n                size: 4\n            },\n    \n            // srational, two slongs, first is numerator, second is denominator:\n            10: {\n                getValue: function( dataView, dataOffset, littleEndian ) {\n                    return dataView.getInt32( dataOffset, littleEndian ) /\n                        dataView.getInt32( dataOffset + 4, littleEndian );\n                },\n                size: 8\n            }\n        };\n    \n        // undefined, 8-bit byte, value depending on field:\n        EXIF.exifTagTypes[ 7 ] = EXIF.exifTagTypes[ 1 ];\n    \n        EXIF.getExifValue = function( dataView, tiffOffset, offset, type, length,\n                littleEndian ) {\n    \n            var tagType = EXIF.exifTagTypes[ type ],\n                tagSize, dataOffset, values, i, str, c;\n    \n            if ( !tagType ) {\n                Base.log('Invalid Exif data: Invalid tag type.');\n                return;\n            }\n    \n            tagSize = tagType.size * length;\n    \n            // Determine if the value is contained in the dataOffset bytes,\n            // or if the value at the dataOffset is a pointer to the actual data:\n            dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32( offset + 8,\n                    littleEndian ) : (offset + 8);\n    \n            if ( dataOffset + tagSize > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid data offset.');\n                return;\n            }\n    \n            if ( length === 1 ) {\n                return tagType.getValue( dataView, dataOffset, littleEndian );\n            }\n    \n            values = [];\n    \n            for ( i = 0; i < length; i += 1 ) {\n                values[ i ] = tagType.getValue( dataView,\n                        dataOffset + i * tagType.size, littleEndian );\n            }\n    \n            if ( tagType.ascii ) {\n                str = '';\n    \n                // Concatenate the chars:\n                for ( i = 0; i < values.length; i += 1 ) {\n                    c = values[ i ];\n    \n                    // Ignore the terminating NULL byte(s):\n                    if ( c === '\\u0000' ) {\n                        break;\n                    }\n                    str += c;\n                }\n    \n                return str;\n            }\n            return values;\n        };\n    \n        EXIF.parseExifTag = function( dataView, tiffOffset, offset, littleEndian,\n                data ) {\n    \n            var tag = dataView.getUint16( offset, littleEndian );\n            data.exif[ tag ] = EXIF.getExifValue( dataView, tiffOffset, offset,\n                    dataView.getUint16( offset + 2, littleEndian ),    // tag type\n                    dataView.getUint32( offset + 4, littleEndian ),    // tag length\n                    littleEndian );\n        };\n    \n        EXIF.parseExifTags = function( dataView, tiffOffset, dirOffset,\n                littleEndian, data ) {\n    \n            var tagsNumber, dirEndOffset, i;\n    \n            if ( dirOffset + 6 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory offset.');\n                return;\n            }\n    \n            tagsNumber = dataView.getUint16( dirOffset, littleEndian );\n            dirEndOffset = dirOffset + 2 + 12 * tagsNumber;\n    \n            if ( dirEndOffset + 4 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid directory size.');\n                return;\n            }\n    \n            for ( i = 0; i < tagsNumber; i += 1 ) {\n                this.parseExifTag( dataView, tiffOffset,\n                        dirOffset + 2 + 12 * i,    // tag offset\n                        littleEndian, data );\n            }\n    \n            // Return the offset to the next directory:\n            return dataView.getUint32( dirEndOffset, littleEndian );\n        };\n    \n        // EXIF.getExifThumbnail = function(dataView, offset, length) {\n        //     var hexData,\n        //         i,\n        //         b;\n        //     if (!length || offset + length > dataView.byteLength) {\n        //         Base.log('Invalid Exif data: Invalid thumbnail data.');\n        //         return;\n        //     }\n        //     hexData = [];\n        //     for (i = 0; i < length; i += 1) {\n        //         b = dataView.getUint8(offset + i);\n        //         hexData.push((b < 16 ? '0' : '') + b.toString(16));\n        //     }\n        //     return 'data:image/jpeg,%' + hexData.join('%');\n        // };\n    \n        EXIF.parseExifData = function( dataView, offset, length, data ) {\n    \n            var tiffOffset = offset + 10,\n                littleEndian, dirOffset;\n    \n            // Check for the ASCII code for \"Exif\" (0x45786966):\n            if ( dataView.getUint32( offset + 4 ) !== 0x45786966 ) {\n                // No Exif data, might be XMP data instead\n                return;\n            }\n            if ( tiffOffset + 8 > dataView.byteLength ) {\n                Base.log('Invalid Exif data: Invalid segment size.');\n                return;\n            }\n    \n            // Check for the two null bytes:\n            if ( dataView.getUint16( offset + 8 ) !== 0x0000 ) {\n                Base.log('Invalid Exif data: Missing byte alignment offset.');\n                return;\n            }\n    \n            // Check the byte alignment:\n            switch ( dataView.getUint16( tiffOffset ) ) {\n                case 0x4949:\n                    littleEndian = true;\n                    break;\n    \n                case 0x4D4D:\n                    littleEndian = false;\n                    break;\n    \n                default:\n                    Base.log('Invalid Exif data: Invalid byte alignment marker.');\n                    return;\n            }\n    \n            // Check for the TIFF tag marker (0x002A):\n            if ( dataView.getUint16( tiffOffset + 2, littleEndian ) !== 0x002A ) {\n                Base.log('Invalid Exif data: Missing TIFF marker.');\n                return;\n            }\n    \n            // Retrieve the directory offset bytes, usually 0x00000008 or 8 decimal:\n            dirOffset = dataView.getUint32( tiffOffset + 4, littleEndian );\n            // Create the exif object to store the tags:\n            data.exif = new EXIF.ExifMap();\n            // Parse the tags of the main image directory and retrieve the\n            // offset to the next directory, usually the thumbnail directory:\n            dirOffset = EXIF.parseExifTags( dataView, tiffOffset,\n                    tiffOffset + dirOffset, littleEndian, data );\n    \n            // 尝试读取缩略图\n            // if ( dirOffset ) {\n            //     thumbnailData = {exif: {}};\n            //     dirOffset = EXIF.parseExifTags(\n            //         dataView,\n            //         tiffOffset,\n            //         tiffOffset + dirOffset,\n            //         littleEndian,\n            //         thumbnailData\n            //     );\n    \n            //     // Check for JPEG Thumbnail offset:\n            //     if (thumbnailData.exif[0x0201]) {\n            //         data.exif.Thumbnail = EXIF.getExifThumbnail(\n            //             dataView,\n            //             tiffOffset + thumbnailData.exif[0x0201],\n            //             thumbnailData.exif[0x0202] // Thumbnail data length\n            //         );\n            //     }\n            // }\n        };\n    \n        ImageMeta.parsers[ 0xffe1 ].push( EXIF.parseExifData );\n        return EXIF;\n    });\n    /**\n     * 这个方式性能不行，但是可以解决android里面的toDataUrl的bug\n     * android里面toDataUrl('image/jpege')得到的结果却是png.\n     *\n     * 所以这里没辙，只能借助这个工具\n     * @fileOverview jpeg encoder\n     */\n    define('runtime/html5/jpegencoder',[], function( require, exports, module ) {\n    \n        /*\n          Copyright (c) 2008, Adobe Systems Incorporated\n          All rights reserved.\n    \n          Redistribution and use in source and binary forms, with or without\n          modification, are permitted provided that the following conditions are\n          met:\n    \n          * Redistributions of source code must retain the above copyright notice,\n            this list of conditions and the following disclaimer.\n    \n          * Redistributions in binary form must reproduce the above copyright\n            notice, this list of conditions and the following disclaimer in the\n            documentation and/or other materials provided with the distribution.\n    \n          * Neither the name of Adobe Systems Incorporated nor the names of its\n            contributors may be used to endorse or promote products derived from\n            this software without specific prior written permission.\n    \n          THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\n          IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\n          THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n          PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n          CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n          EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n          PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n          PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\n          LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n          NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n          SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n        */\n        /*\n        JPEG encoder ported to JavaScript and optimized by Andreas Ritter, www.bytestrom.eu, 11/2009\n    \n        Basic GUI blocking jpeg encoder\n        */\n    \n        function JPEGEncoder(quality) {\n          var self = this;\n            var fround = Math.round;\n            var ffloor = Math.floor;\n            var YTable = new Array(64);\n            var UVTable = new Array(64);\n            var fdtbl_Y = new Array(64);\n            var fdtbl_UV = new Array(64);\n            var YDC_HT;\n            var UVDC_HT;\n            var YAC_HT;\n            var UVAC_HT;\n    \n            var bitcode = new Array(65535);\n            var category = new Array(65535);\n            var outputfDCTQuant = new Array(64);\n            var DU = new Array(64);\n            var byteout = [];\n            var bytenew = 0;\n            var bytepos = 7;\n    \n            var YDU = new Array(64);\n            var UDU = new Array(64);\n            var VDU = new Array(64);\n            var clt = new Array(256);\n            var RGB_YUV_TABLE = new Array(2048);\n            var currentQuality;\n    \n            var ZigZag = [\n                     0, 1, 5, 6,14,15,27,28,\n                     2, 4, 7,13,16,26,29,42,\n                     3, 8,12,17,25,30,41,43,\n                     9,11,18,24,31,40,44,53,\n                    10,19,23,32,39,45,52,54,\n                    20,22,33,38,46,51,55,60,\n                    21,34,37,47,50,56,59,61,\n                    35,36,48,49,57,58,62,63\n                ];\n    \n            var std_dc_luminance_nrcodes = [0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0];\n            var std_dc_luminance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_luminance_nrcodes = [0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,0x7d];\n            var std_ac_luminance_values = [\n                    0x01,0x02,0x03,0x00,0x04,0x11,0x05,0x12,\n                    0x21,0x31,0x41,0x06,0x13,0x51,0x61,0x07,\n                    0x22,0x71,0x14,0x32,0x81,0x91,0xa1,0x08,\n                    0x23,0x42,0xb1,0xc1,0x15,0x52,0xd1,0xf0,\n                    0x24,0x33,0x62,0x72,0x82,0x09,0x0a,0x16,\n                    0x17,0x18,0x19,0x1a,0x25,0x26,0x27,0x28,\n                    0x29,0x2a,0x34,0x35,0x36,0x37,0x38,0x39,\n                    0x3a,0x43,0x44,0x45,0x46,0x47,0x48,0x49,\n                    0x4a,0x53,0x54,0x55,0x56,0x57,0x58,0x59,\n                    0x5a,0x63,0x64,0x65,0x66,0x67,0x68,0x69,\n                    0x6a,0x73,0x74,0x75,0x76,0x77,0x78,0x79,\n                    0x7a,0x83,0x84,0x85,0x86,0x87,0x88,0x89,\n                    0x8a,0x92,0x93,0x94,0x95,0x96,0x97,0x98,\n                    0x99,0x9a,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,\n                    0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,0xb5,0xb6,\n                    0xb7,0xb8,0xb9,0xba,0xc2,0xc3,0xc4,0xc5,\n                    0xc6,0xc7,0xc8,0xc9,0xca,0xd2,0xd3,0xd4,\n                    0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xe1,0xe2,\n                    0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,\n                    0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            var std_dc_chrominance_nrcodes = [0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0];\n            var std_dc_chrominance_values = [0,1,2,3,4,5,6,7,8,9,10,11];\n            var std_ac_chrominance_nrcodes = [0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,0x77];\n            var std_ac_chrominance_values = [\n                    0x00,0x01,0x02,0x03,0x11,0x04,0x05,0x21,\n                    0x31,0x06,0x12,0x41,0x51,0x07,0x61,0x71,\n                    0x13,0x22,0x32,0x81,0x08,0x14,0x42,0x91,\n                    0xa1,0xb1,0xc1,0x09,0x23,0x33,0x52,0xf0,\n                    0x15,0x62,0x72,0xd1,0x0a,0x16,0x24,0x34,\n                    0xe1,0x25,0xf1,0x17,0x18,0x19,0x1a,0x26,\n                    0x27,0x28,0x29,0x2a,0x35,0x36,0x37,0x38,\n                    0x39,0x3a,0x43,0x44,0x45,0x46,0x47,0x48,\n                    0x49,0x4a,0x53,0x54,0x55,0x56,0x57,0x58,\n                    0x59,0x5a,0x63,0x64,0x65,0x66,0x67,0x68,\n                    0x69,0x6a,0x73,0x74,0x75,0x76,0x77,0x78,\n                    0x79,0x7a,0x82,0x83,0x84,0x85,0x86,0x87,\n                    0x88,0x89,0x8a,0x92,0x93,0x94,0x95,0x96,\n                    0x97,0x98,0x99,0x9a,0xa2,0xa3,0xa4,0xa5,\n                    0xa6,0xa7,0xa8,0xa9,0xaa,0xb2,0xb3,0xb4,\n                    0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xc2,0xc3,\n                    0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xd2,\n                    0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,\n                    0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,\n                    0xea,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,\n                    0xf9,0xfa\n                ];\n    \n            function initQuantTables(sf){\n                    var YQT = [\n                        16, 11, 10, 16, 24, 40, 51, 61,\n                        12, 12, 14, 19, 26, 58, 60, 55,\n                        14, 13, 16, 24, 40, 57, 69, 56,\n                        14, 17, 22, 29, 51, 87, 80, 62,\n                        18, 22, 37, 56, 68,109,103, 77,\n                        24, 35, 55, 64, 81,104,113, 92,\n                        49, 64, 78, 87,103,121,120,101,\n                        72, 92, 95, 98,112,100,103, 99\n                    ];\n    \n                    for (var i = 0; i < 64; i++) {\n                        var t = ffloor((YQT[i]*sf+50)/100);\n                        if (t < 1) {\n                            t = 1;\n                        } else if (t > 255) {\n                            t = 255;\n                        }\n                        YTable[ZigZag[i]] = t;\n                    }\n                    var UVQT = [\n                        17, 18, 24, 47, 99, 99, 99, 99,\n                        18, 21, 26, 66, 99, 99, 99, 99,\n                        24, 26, 56, 99, 99, 99, 99, 99,\n                        47, 66, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99,\n                        99, 99, 99, 99, 99, 99, 99, 99\n                    ];\n                    for (var j = 0; j < 64; j++) {\n                        var u = ffloor((UVQT[j]*sf+50)/100);\n                        if (u < 1) {\n                            u = 1;\n                        } else if (u > 255) {\n                            u = 255;\n                        }\n                        UVTable[ZigZag[j]] = u;\n                    }\n                    var aasf = [\n                        1.0, 1.387039845, 1.306562965, 1.175875602,\n                        1.0, 0.785694958, 0.541196100, 0.275899379\n                    ];\n                    var k = 0;\n                    for (var row = 0; row < 8; row++)\n                    {\n                        for (var col = 0; col < 8; col++)\n                        {\n                            fdtbl_Y[k]  = (1.0 / (YTable [ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            fdtbl_UV[k] = (1.0 / (UVTable[ZigZag[k]] * aasf[row] * aasf[col] * 8.0));\n                            k++;\n                        }\n                    }\n                }\n    \n                function computeHuffmanTbl(nrcodes, std_table){\n                    var codevalue = 0;\n                    var pos_in_table = 0;\n                    var HT = new Array();\n                    for (var k = 1; k <= 16; k++) {\n                        for (var j = 1; j <= nrcodes[k]; j++) {\n                            HT[std_table[pos_in_table]] = [];\n                            HT[std_table[pos_in_table]][0] = codevalue;\n                            HT[std_table[pos_in_table]][1] = k;\n                            pos_in_table++;\n                            codevalue++;\n                        }\n                        codevalue*=2;\n                    }\n                    return HT;\n                }\n    \n                function initHuffmanTbl()\n                {\n                    YDC_HT = computeHuffmanTbl(std_dc_luminance_nrcodes,std_dc_luminance_values);\n                    UVDC_HT = computeHuffmanTbl(std_dc_chrominance_nrcodes,std_dc_chrominance_values);\n                    YAC_HT = computeHuffmanTbl(std_ac_luminance_nrcodes,std_ac_luminance_values);\n                    UVAC_HT = computeHuffmanTbl(std_ac_chrominance_nrcodes,std_ac_chrominance_values);\n                }\n    \n                function initCategoryNumber()\n                {\n                    var nrlower = 1;\n                    var nrupper = 2;\n                    for (var cat = 1; cat <= 15; cat++) {\n                        //Positive numbers\n                        for (var nr = nrlower; nr<nrupper; nr++) {\n                            category[32767+nr] = cat;\n                            bitcode[32767+nr] = [];\n                            bitcode[32767+nr][1] = cat;\n                            bitcode[32767+nr][0] = nr;\n                        }\n                        //Negative numbers\n                        for (var nrneg =-(nrupper-1); nrneg<=-nrlower; nrneg++) {\n                            category[32767+nrneg] = cat;\n                            bitcode[32767+nrneg] = [];\n                            bitcode[32767+nrneg][1] = cat;\n                            bitcode[32767+nrneg][0] = nrupper-1+nrneg;\n                        }\n                        nrlower <<= 1;\n                        nrupper <<= 1;\n                    }\n                }\n    \n                function initRGBYUVTable() {\n                    for(var i = 0; i < 256;i++) {\n                        RGB_YUV_TABLE[i]            =  19595 * i;\n                        RGB_YUV_TABLE[(i+ 256)>>0]  =  38470 * i;\n                        RGB_YUV_TABLE[(i+ 512)>>0]  =   7471 * i + 0x8000;\n                        RGB_YUV_TABLE[(i+ 768)>>0]  = -11059 * i;\n                        RGB_YUV_TABLE[(i+1024)>>0]  = -21709 * i;\n                        RGB_YUV_TABLE[(i+1280)>>0]  =  32768 * i + 0x807FFF;\n                        RGB_YUV_TABLE[(i+1536)>>0]  = -27439 * i;\n                        RGB_YUV_TABLE[(i+1792)>>0]  = - 5329 * i;\n                    }\n                }\n    \n                // IO functions\n                function writeBits(bs)\n                {\n                    var value = bs[0];\n                    var posval = bs[1]-1;\n                    while ( posval >= 0 ) {\n                        if (value & (1 << posval) ) {\n                            bytenew |= (1 << bytepos);\n                        }\n                        posval--;\n                        bytepos--;\n                        if (bytepos < 0) {\n                            if (bytenew == 0xFF) {\n                                writeByte(0xFF);\n                                writeByte(0);\n                            }\n                            else {\n                                writeByte(bytenew);\n                            }\n                            bytepos=7;\n                            bytenew=0;\n                        }\n                    }\n                }\n    \n                function writeByte(value)\n                {\n                    byteout.push(clt[value]); // write char directly instead of converting later\n                }\n    \n                function writeWord(value)\n                {\n                    writeByte((value>>8)&0xFF);\n                    writeByte((value   )&0xFF);\n                }\n    \n                // DCT & quantization core\n                function fDCTQuant(data, fdtbl)\n                {\n                    var d0, d1, d2, d3, d4, d5, d6, d7;\n                    /* Pass 1: process rows. */\n                    var dataOff=0;\n                    var i;\n                    var I8 = 8;\n                    var I64 = 64;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff+1];\n                        d2 = data[dataOff+2];\n                        d3 = data[dataOff+3];\n                        d4 = data[dataOff+4];\n                        d5 = data[dataOff+5];\n                        d6 = data[dataOff+6];\n                        d7 = data[dataOff+7];\n    \n                        var tmp0 = d0 + d7;\n                        var tmp7 = d0 - d7;\n                        var tmp1 = d1 + d6;\n                        var tmp6 = d1 - d6;\n                        var tmp2 = d2 + d5;\n                        var tmp5 = d2 - d5;\n                        var tmp3 = d3 + d4;\n                        var tmp4 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10 = tmp0 + tmp3;    /* phase 2 */\n                        var tmp13 = tmp0 - tmp3;\n                        var tmp11 = tmp1 + tmp2;\n                        var tmp12 = tmp1 - tmp2;\n    \n                        data[dataOff] = tmp10 + tmp11; /* phase 3 */\n                        data[dataOff+4] = tmp10 - tmp11;\n    \n                        var z1 = (tmp12 + tmp13) * 0.707106781; /* c4 */\n                        data[dataOff+2] = tmp13 + z1; /* phase 5 */\n                        data[dataOff+6] = tmp13 - z1;\n    \n                        /* Odd part */\n                        tmp10 = tmp4 + tmp5; /* phase 2 */\n                        tmp11 = tmp5 + tmp6;\n                        tmp12 = tmp6 + tmp7;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5 = (tmp10 - tmp12) * 0.382683433; /* c6 */\n                        var z2 = 0.541196100 * tmp10 + z5; /* c2-c6 */\n                        var z4 = 1.306562965 * tmp12 + z5; /* c2+c6 */\n                        var z3 = tmp11 * 0.707106781; /* c4 */\n    \n                        var z11 = tmp7 + z3;    /* phase 5 */\n                        var z13 = tmp7 - z3;\n    \n                        data[dataOff+5] = z13 + z2; /* phase 6 */\n                        data[dataOff+3] = z13 - z2;\n                        data[dataOff+1] = z11 + z4;\n                        data[dataOff+7] = z11 - z4;\n    \n                        dataOff += 8; /* advance pointer to next row */\n                    }\n    \n                    /* Pass 2: process columns. */\n                    dataOff = 0;\n                    for (i=0; i<I8; ++i)\n                    {\n                        d0 = data[dataOff];\n                        d1 = data[dataOff + 8];\n                        d2 = data[dataOff + 16];\n                        d3 = data[dataOff + 24];\n                        d4 = data[dataOff + 32];\n                        d5 = data[dataOff + 40];\n                        d6 = data[dataOff + 48];\n                        d7 = data[dataOff + 56];\n    \n                        var tmp0p2 = d0 + d7;\n                        var tmp7p2 = d0 - d7;\n                        var tmp1p2 = d1 + d6;\n                        var tmp6p2 = d1 - d6;\n                        var tmp2p2 = d2 + d5;\n                        var tmp5p2 = d2 - d5;\n                        var tmp3p2 = d3 + d4;\n                        var tmp4p2 = d3 - d4;\n    \n                        /* Even part */\n                        var tmp10p2 = tmp0p2 + tmp3p2;  /* phase 2 */\n                        var tmp13p2 = tmp0p2 - tmp3p2;\n                        var tmp11p2 = tmp1p2 + tmp2p2;\n                        var tmp12p2 = tmp1p2 - tmp2p2;\n    \n                        data[dataOff] = tmp10p2 + tmp11p2; /* phase 3 */\n                        data[dataOff+32] = tmp10p2 - tmp11p2;\n    \n                        var z1p2 = (tmp12p2 + tmp13p2) * 0.707106781; /* c4 */\n                        data[dataOff+16] = tmp13p2 + z1p2; /* phase 5 */\n                        data[dataOff+48] = tmp13p2 - z1p2;\n    \n                        /* Odd part */\n                        tmp10p2 = tmp4p2 + tmp5p2; /* phase 2 */\n                        tmp11p2 = tmp5p2 + tmp6p2;\n                        tmp12p2 = tmp6p2 + tmp7p2;\n    \n                        /* The rotator is modified from fig 4-8 to avoid extra negations. */\n                        var z5p2 = (tmp10p2 - tmp12p2) * 0.382683433; /* c6 */\n                        var z2p2 = 0.541196100 * tmp10p2 + z5p2; /* c2-c6 */\n                        var z4p2 = 1.306562965 * tmp12p2 + z5p2; /* c2+c6 */\n                        var z3p2 = tmp11p2 * 0.707106781; /* c4 */\n    \n                        var z11p2 = tmp7p2 + z3p2;  /* phase 5 */\n                        var z13p2 = tmp7p2 - z3p2;\n    \n                        data[dataOff+40] = z13p2 + z2p2; /* phase 6 */\n                        data[dataOff+24] = z13p2 - z2p2;\n                        data[dataOff+ 8] = z11p2 + z4p2;\n                        data[dataOff+56] = z11p2 - z4p2;\n    \n                        dataOff++; /* advance pointer to next column */\n                    }\n    \n                    // Quantize/descale the coefficients\n                    var fDCTQuant;\n                    for (i=0; i<I64; ++i)\n                    {\n                        // Apply the quantization and scaling factor & Round to nearest integer\n                        fDCTQuant = data[i]*fdtbl[i];\n                        outputfDCTQuant[i] = (fDCTQuant > 0.0) ? ((fDCTQuant + 0.5)|0) : ((fDCTQuant - 0.5)|0);\n                        //outputfDCTQuant[i] = fround(fDCTQuant);\n    \n                    }\n                    return outputfDCTQuant;\n                }\n    \n                function writeAPP0()\n                {\n                    writeWord(0xFFE0); // marker\n                    writeWord(16); // length\n                    writeByte(0x4A); // J\n                    writeByte(0x46); // F\n                    writeByte(0x49); // I\n                    writeByte(0x46); // F\n                    writeByte(0); // = \"JFIF\",'\\0'\n                    writeByte(1); // versionhi\n                    writeByte(1); // versionlo\n                    writeByte(0); // xyunits\n                    writeWord(1); // xdensity\n                    writeWord(1); // ydensity\n                    writeByte(0); // thumbnwidth\n                    writeByte(0); // thumbnheight\n                }\n    \n                function writeSOF0(width, height)\n                {\n                    writeWord(0xFFC0); // marker\n                    writeWord(17);   // length, truecolor YUV JPG\n                    writeByte(8);    // precision\n                    writeWord(height);\n                    writeWord(width);\n                    writeByte(3);    // nrofcomponents\n                    writeByte(1);    // IdY\n                    writeByte(0x11); // HVY\n                    writeByte(0);    // QTY\n                    writeByte(2);    // IdU\n                    writeByte(0x11); // HVU\n                    writeByte(1);    // QTU\n                    writeByte(3);    // IdV\n                    writeByte(0x11); // HVV\n                    writeByte(1);    // QTV\n                }\n    \n                function writeDQT()\n                {\n                    writeWord(0xFFDB); // marker\n                    writeWord(132);    // length\n                    writeByte(0);\n                    for (var i=0; i<64; i++) {\n                        writeByte(YTable[i]);\n                    }\n                    writeByte(1);\n                    for (var j=0; j<64; j++) {\n                        writeByte(UVTable[j]);\n                    }\n                }\n    \n                function writeDHT()\n                {\n                    writeWord(0xFFC4); // marker\n                    writeWord(0x01A2); // length\n    \n                    writeByte(0); // HTYDCinfo\n                    for (var i=0; i<16; i++) {\n                        writeByte(std_dc_luminance_nrcodes[i+1]);\n                    }\n                    for (var j=0; j<=11; j++) {\n                        writeByte(std_dc_luminance_values[j]);\n                    }\n    \n                    writeByte(0x10); // HTYACinfo\n                    for (var k=0; k<16; k++) {\n                        writeByte(std_ac_luminance_nrcodes[k+1]);\n                    }\n                    for (var l=0; l<=161; l++) {\n                        writeByte(std_ac_luminance_values[l]);\n                    }\n    \n                    writeByte(1); // HTUDCinfo\n                    for (var m=0; m<16; m++) {\n                        writeByte(std_dc_chrominance_nrcodes[m+1]);\n                    }\n                    for (var n=0; n<=11; n++) {\n                        writeByte(std_dc_chrominance_values[n]);\n                    }\n    \n                    writeByte(0x11); // HTUACinfo\n                    for (var o=0; o<16; o++) {\n                        writeByte(std_ac_chrominance_nrcodes[o+1]);\n                    }\n                    for (var p=0; p<=161; p++) {\n                        writeByte(std_ac_chrominance_values[p]);\n                    }\n                }\n    \n                function writeSOS()\n                {\n                    writeWord(0xFFDA); // marker\n                    writeWord(12); // length\n                    writeByte(3); // nrofcomponents\n                    writeByte(1); // IdY\n                    writeByte(0); // HTY\n                    writeByte(2); // IdU\n                    writeByte(0x11); // HTU\n                    writeByte(3); // IdV\n                    writeByte(0x11); // HTV\n                    writeByte(0); // Ss\n                    writeByte(0x3f); // Se\n                    writeByte(0); // Bf\n                }\n    \n                function processDU(CDU, fdtbl, DC, HTDC, HTAC){\n                    var EOB = HTAC[0x00];\n                    var M16zeroes = HTAC[0xF0];\n                    var pos;\n                    var I16 = 16;\n                    var I63 = 63;\n                    var I64 = 64;\n                    var DU_DCT = fDCTQuant(CDU, fdtbl);\n                    //ZigZag reorder\n                    for (var j=0;j<I64;++j) {\n                        DU[ZigZag[j]]=DU_DCT[j];\n                    }\n                    var Diff = DU[0] - DC; DC = DU[0];\n                    //Encode DC\n                    if (Diff==0) {\n                        writeBits(HTDC[0]); // Diff might be 0\n                    } else {\n                        pos = 32767+Diff;\n                        writeBits(HTDC[category[pos]]);\n                        writeBits(bitcode[pos]);\n                    }\n                    //Encode ACs\n                    var end0pos = 63; // was const... which is crazy\n                    for (; (end0pos>0)&&(DU[end0pos]==0); end0pos--) {};\n                    //end0pos = first element in reverse order !=0\n                    if ( end0pos == 0) {\n                        writeBits(EOB);\n                        return DC;\n                    }\n                    var i = 1;\n                    var lng;\n                    while ( i <= end0pos ) {\n                        var startpos = i;\n                        for (; (DU[i]==0) && (i<=end0pos); ++i) {}\n                        var nrzeroes = i-startpos;\n                        if ( nrzeroes >= I16 ) {\n                            lng = nrzeroes>>4;\n                            for (var nrmarker=1; nrmarker <= lng; ++nrmarker)\n                                writeBits(M16zeroes);\n                            nrzeroes = nrzeroes&0xF;\n                        }\n                        pos = 32767+DU[i];\n                        writeBits(HTAC[(nrzeroes<<4)+category[pos]]);\n                        writeBits(bitcode[pos]);\n                        i++;\n                    }\n                    if ( end0pos != I63 ) {\n                        writeBits(EOB);\n                    }\n                    return DC;\n                }\n    \n                function initCharLookupTable(){\n                    var sfcc = String.fromCharCode;\n                    for(var i=0; i < 256; i++){ ///// ACHTUNG // 255\n                        clt[i] = sfcc(i);\n                    }\n                }\n    \n                this.encode = function(image,quality) // image data object\n                {\n                    // var time_start = new Date().getTime();\n    \n                    if(quality) setQuality(quality);\n    \n                    // Initialize bit writer\n                    byteout = new Array();\n                    bytenew=0;\n                    bytepos=7;\n    \n                    // Add JPEG headers\n                    writeWord(0xFFD8); // SOI\n                    writeAPP0();\n                    writeDQT();\n                    writeSOF0(image.width,image.height);\n                    writeDHT();\n                    writeSOS();\n    \n    \n                    // Encode 8x8 macroblocks\n                    var DCY=0;\n                    var DCU=0;\n                    var DCV=0;\n    \n                    bytenew=0;\n                    bytepos=7;\n    \n    \n                    this.encode.displayName = \"_encode_\";\n    \n                    var imageData = image.data;\n                    var width = image.width;\n                    var height = image.height;\n    \n                    var quadWidth = width*4;\n                    var tripleWidth = width*3;\n    \n                    var x, y = 0;\n                    var r, g, b;\n                    var start,p, col,row,pos;\n                    while(y < height){\n                        x = 0;\n                        while(x < quadWidth){\n                        start = quadWidth * y + x;\n                        p = start;\n                        col = -1;\n                        row = 0;\n    \n                        for(pos=0; pos < 64; pos++){\n                            row = pos >> 3;// /8\n                            col = ( pos & 7 ) * 4; // %8\n                            p = start + ( row * quadWidth ) + col;\n    \n                            if(y+row >= height){ // padding bottom\n                                p-= (quadWidth*(y+1+row-height));\n                            }\n    \n                            if(x+col >= quadWidth){ // padding right\n                                p-= ((x+col) - quadWidth +4)\n                            }\n    \n                            r = imageData[ p++ ];\n                            g = imageData[ p++ ];\n                            b = imageData[ p++ ];\n    \n    \n                            /* // calculate YUV values dynamically\n                            YDU[pos]=((( 0.29900)*r+( 0.58700)*g+( 0.11400)*b))-128; //-0x80\n                            UDU[pos]=(((-0.16874)*r+(-0.33126)*g+( 0.50000)*b));\n                            VDU[pos]=((( 0.50000)*r+(-0.41869)*g+(-0.08131)*b));\n                            */\n    \n                            // use lookup table (slightly faster)\n                            YDU[pos] = ((RGB_YUV_TABLE[r]             + RGB_YUV_TABLE[(g +  256)>>0] + RGB_YUV_TABLE[(b +  512)>>0]) >> 16)-128;\n                            UDU[pos] = ((RGB_YUV_TABLE[(r +  768)>>0] + RGB_YUV_TABLE[(g + 1024)>>0] + RGB_YUV_TABLE[(b + 1280)>>0]) >> 16)-128;\n                            VDU[pos] = ((RGB_YUV_TABLE[(r + 1280)>>0] + RGB_YUV_TABLE[(g + 1536)>>0] + RGB_YUV_TABLE[(b + 1792)>>0]) >> 16)-128;\n    \n                        }\n    \n                        DCY = processDU(YDU, fdtbl_Y, DCY, YDC_HT, YAC_HT);\n                        DCU = processDU(UDU, fdtbl_UV, DCU, UVDC_HT, UVAC_HT);\n                        DCV = processDU(VDU, fdtbl_UV, DCV, UVDC_HT, UVAC_HT);\n                        x+=32;\n                        }\n                        y+=8;\n                    }\n    \n    \n                    ////////////////////////////////////////////////////////////////\n    \n                    // Do the bit alignment of the EOI marker\n                    if ( bytepos >= 0 ) {\n                        var fillbits = [];\n                        fillbits[1] = bytepos+1;\n                        fillbits[0] = (1<<(bytepos+1))-1;\n                        writeBits(fillbits);\n                    }\n    \n                    writeWord(0xFFD9); //EOI\n    \n                    var jpegDataUri = 'data:image/jpeg;base64,' + btoa(byteout.join(''));\n    \n                    byteout = [];\n    \n                    // benchmarking\n                    // var duration = new Date().getTime() - time_start;\n                    // console.log('Encoding time: '+ currentQuality + 'ms');\n                    //\n    \n                    return jpegDataUri\n            }\n    \n            function setQuality(quality){\n                if (quality <= 0) {\n                    quality = 1;\n                }\n                if (quality > 100) {\n                    quality = 100;\n                }\n    \n                if(currentQuality == quality) return // don't recalc if unchanged\n    \n                var sf = 0;\n                if (quality < 50) {\n                    sf = Math.floor(5000 / quality);\n                } else {\n                    sf = Math.floor(200 - quality*2);\n                }\n    \n                initQuantTables(sf);\n                currentQuality = quality;\n                // console.log('Quality set to: '+quality +'%');\n            }\n    \n            function init(){\n                // var time_start = new Date().getTime();\n                if(!quality) quality = 50;\n                // Create tables\n                initCharLookupTable()\n                initHuffmanTbl();\n                initCategoryNumber();\n                initRGBYUVTable();\n    \n                setQuality(quality);\n                // var duration = new Date().getTime() - time_start;\n                // console.log('Initialization '+ duration + 'ms');\n            }\n    \n            init();\n    \n        };\n    \n        JPEGEncoder.encode = function( data, quality ) {\n            var encoder = new JPEGEncoder( quality );\n    \n            return encoder.encode( data );\n        }\n    \n        return JPEGEncoder;\n    });\n    /**\n     * @fileOverview Fix android canvas.toDataUrl bug.\n     */\n    define('runtime/html5/androidpatch',[\n        'runtime/html5/util',\n        'runtime/html5/jpegencoder',\n        'base'\n    ], function( Util, encoder, Base ) {\n        var origin = Util.canvasToDataUrl,\n            supportJpeg;\n    \n        Util.canvasToDataUrl = function( canvas, type, quality ) {\n            var ctx, w, h, fragement, parts;\n    \n            // 非android手机直接跳过。\n            if ( !Base.os.android ) {\n                return origin.apply( null, arguments );\n            }\n    \n            // 检测是否canvas支持jpeg导出，根据数据格式来判断。\n            // JPEG 前两位分别是：255, 216\n            if ( type === 'image/jpeg' && typeof supportJpeg === 'undefined' ) {\n                fragement = origin.apply( null, arguments );\n    \n                parts = fragement.split(',');\n    \n                if ( ~parts[ 0 ].indexOf('base64') ) {\n                    fragement = atob( parts[ 1 ] );\n                } else {\n                    fragement = decodeURIComponent( parts[ 1 ] );\n                }\n    \n                fragement = fragement.substring( 0, 2 );\n    \n                supportJpeg = fragement.charCodeAt( 0 ) === 255 &&\n                        fragement.charCodeAt( 1 ) === 216;\n            }\n    \n            // 只有在android环境下才修复\n            if ( type === 'image/jpeg' && !supportJpeg ) {\n                w = canvas.width;\n                h = canvas.height;\n                ctx = canvas.getContext('2d');\n    \n                return encoder.encode( ctx.getImageData( 0, 0, w, h ), quality );\n            }\n    \n            return origin.apply( null, arguments );\n        };\n    });\n    /**\n     * @fileOverview Image\n     */\n    define('runtime/html5/image',[\n        'base',\n        'runtime/html5/runtime',\n        'runtime/html5/util'\n    ], function( Base, Html5Runtime, Util ) {\n    \n        var BLANK = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs%3D';\n    \n        return Html5Runtime.register( 'Image', {\n    \n            // flag: 标记是否被修改过。\n            modified: false,\n    \n            init: function() {\n                var me = this,\n                    img = new Image();\n    \n                img.onload = function() {\n    \n                    me._info = {\n                        type: me.type,\n                        width: this.width,\n                        height: this.height\n                    };\n    \n                    //debugger;\n    \n                    // 读取meta信息。\n                    if ( !me._metas && 'image/jpeg' === me.type ) {\n                        Util.parseMeta( me._blob, function( error, ret ) {\n                            me._metas = ret;\n                            me.owner.trigger('load');\n                        });\n                    } else {\n                        me.owner.trigger('load');\n                    }\n                };\n    \n                img.onerror = function() {\n                    me.owner.trigger('error');\n                };\n    \n                me._img = img;\n            },\n    \n            loadFromBlob: function( blob ) {\n                var me = this,\n                    img = me._img;\n    \n                me._blob = blob;\n                me.type = blob.type;\n                img.src = Util.createObjectURL( blob.getSource() );\n                me.owner.once( 'load', function() {\n                    Util.revokeObjectURL( img.src );\n                });\n            },\n    \n            resize: function( width, height ) {\n                var canvas = this._canvas ||\n                        (this._canvas = document.createElement('canvas'));\n    \n                this._resize( this._img, canvas, width, height );\n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'resize' );\n            },\n    \n            crop: function( x, y, w, h, s ) {\n                var cvs = this._canvas ||\n                        (this._canvas = document.createElement('canvas')),\n                    opts = this.options,\n                    img = this._img,\n                    iw = img.naturalWidth,\n                    ih = img.naturalHeight,\n                    orientation = this.getOrientation();\n    \n                s = s || 1;\n    \n                // todo 解决 orientation 的问题。\n                // values that require 90 degree rotation\n                // if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                //     switch ( orientation ) {\n                //         case 6:\n                //             tmp = x;\n                //             x = y;\n                //             y = iw * s - tmp - w;\n                //             console.log(ih * s, tmp, w)\n                //             break;\n                //     }\n    \n                //     (w ^= h, h ^= w, w ^= h);\n                // }\n    \n                cvs.width = w;\n                cvs.height = h;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n                this._renderImageToCanvas( cvs, img, -x, -y, iw * s, ih * s );\n    \n                this._blob = null;    // 没用了，可以删掉了。\n                this.modified = true;\n                this.owner.trigger( 'complete', 'crop' );\n            },\n    \n            getAsBlob: function( type ) {\n                var blob = this._blob,\n                    opts = this.options,\n                    canvas;\n    \n                type = type || this.type;\n    \n                // blob需要重新生成。\n                if ( this.modified || this.type !== type ) {\n                    canvas = this._canvas;\n    \n                    if ( type === 'image/jpeg' ) {\n    \n                        blob = Util.canvasToDataUrl( canvas, type, opts.quality );\n    \n                        if ( opts.preserveHeaders && this._metas &&\n                                this._metas.imageHead ) {\n    \n                            blob = Util.dataURL2ArrayBuffer( blob );\n                            blob = Util.updateImageHead( blob,\n                                    this._metas.imageHead );\n                            blob = Util.arrayBufferToBlob( blob, type );\n                            return blob;\n                        }\n                    } else {\n                        blob = Util.canvasToDataUrl( canvas, type );\n                    }\n    \n                    blob = Util.dataURL2Blob( blob );\n                }\n    \n                return blob;\n            },\n    \n            getAsDataUrl: function( type ) {\n                var opts = this.options;\n    \n                type = type || this.type;\n    \n                if ( type === 'image/jpeg' ) {\n                    return Util.canvasToDataUrl( this._canvas, type, opts.quality );\n                } else {\n                    return this._canvas.toDataURL( type );\n                }\n            },\n    \n            getOrientation: function() {\n                return this._metas && this._metas.exif &&\n                        this._metas.exif.get('Orientation') || 1;\n            },\n    \n            info: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._info = val;\n                    return this;\n                }\n    \n                // getter\n                return this._info;\n            },\n    \n            meta: function( val ) {\n    \n                // setter\n                if ( val ) {\n                    this._metas = val;\n                    return this;\n                }\n    \n                // getter\n                return this._metas;\n            },\n    \n            destroy: function() {\n                var canvas = this._canvas;\n                this._img.onload = null;\n    \n                if ( canvas ) {\n                    canvas.getContext('2d')\n                            .clearRect( 0, 0, canvas.width, canvas.height );\n                    canvas.width = canvas.height = 0;\n                    this._canvas = null;\n                }\n    \n                // 释放内存。非常重要，否则释放不了image的内存。\n                this._img.src = BLANK;\n                this._img = this._blob = null;\n            },\n    \n            _resize: function( img, cvs, width, height ) {\n                var opts = this.options,\n                    naturalWidth = img.width,\n                    naturalHeight = img.height,\n                    orientation = this.getOrientation(),\n                    scale, w, h, x, y;\n    \n                // values that require 90 degree rotation\n                if ( ~[ 5, 6, 7, 8 ].indexOf( orientation ) ) {\n    \n                    // 交换width, height的值。\n                    width ^= height;\n                    height ^= width;\n                    width ^= height;\n                }\n    \n                scale = Math[ opts.crop ? 'max' : 'min' ]( width / naturalWidth,\n                        height / naturalHeight );\n    \n                // 不允许放大。\n                opts.allowMagnify || (scale = Math.min( 1, scale ));\n    \n                w = naturalWidth * scale;\n                h = naturalHeight * scale;\n    \n                if ( opts.crop ) {\n                    cvs.width = width;\n                    cvs.height = height;\n                } else {\n                    cvs.width = w;\n                    cvs.height = h;\n                }\n    \n                x = (cvs.width - w) / 2;\n                y = (cvs.height - h) / 2;\n    \n                opts.preserveHeaders || this._rotate2Orientaion( cvs, orientation );\n    \n                this._renderImageToCanvas( cvs, img, x, y, w, h );\n            },\n    \n            _rotate2Orientaion: function( canvas, orientation ) {\n                var width = canvas.width,\n                    height = canvas.height,\n                    ctx = canvas.getContext('2d');\n    \n                switch ( orientation ) {\n                    case 5:\n                    case 6:\n                    case 7:\n                    case 8:\n                        canvas.width = height;\n                        canvas.height = width;\n                        break;\n                }\n    \n                switch ( orientation ) {\n                    case 2:    // horizontal flip\n                        ctx.translate( width, 0 );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 3:    // 180 rotate left\n                        ctx.translate( width, height );\n                        ctx.rotate( Math.PI );\n                        break;\n    \n                    case 4:    // vertical flip\n                        ctx.translate( 0, height );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 5:    // vertical flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.scale( 1, -1 );\n                        break;\n    \n                    case 6:    // 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( 0, -height );\n                        break;\n    \n                    case 7:    // horizontal flip + 90 rotate right\n                        ctx.rotate( 0.5 * Math.PI );\n                        ctx.translate( width, -height );\n                        ctx.scale( -1, 1 );\n                        break;\n    \n                    case 8:    // 90 rotate left\n                        ctx.rotate( -0.5 * Math.PI );\n                        ctx.translate( -width, 0 );\n                        break;\n                }\n            },\n    \n            // https://github.com/stomita/ios-imagefile-megapixel/\n            // blob/master/src/megapix-image.js\n            _renderImageToCanvas: (function() {\n    \n                // 如果不是ios, 不需要这么复杂！\n                if ( !Base.os.ios ) {\n                    return function( canvas ) {\n                        var args = Base.slice( arguments, 1 ),\n                            ctx = canvas.getContext('2d');\n    \n                        ctx.drawImage.apply( ctx, args );\n                    };\n                }\n    \n                /**\n                 * Detecting vertical squash in loaded image.\n                 * Fixes a bug which squash image vertically while drawing into\n                 * canvas for some images.\n                 */\n                function detectVerticalSquash( img, iw, ih ) {\n                    var canvas = document.createElement('canvas'),\n                        ctx = canvas.getContext('2d'),\n                        sy = 0,\n                        ey = ih,\n                        py = ih,\n                        data, alpha, ratio;\n    \n    \n                    canvas.width = 1;\n                    canvas.height = ih;\n                    ctx.drawImage( img, 0, 0 );\n                    data = ctx.getImageData( 0, 0, 1, ih ).data;\n    \n                    // search image edge pixel position in case\n                    // it is squashed vertically.\n                    while ( py > sy ) {\n                        alpha = data[ (py - 1) * 4 + 3 ];\n    \n                        if ( alpha === 0 ) {\n                            ey = py;\n                        } else {\n                            sy = py;\n                        }\n    \n                        py = (ey + sy) >> 1;\n                    }\n    \n                    ratio = (py / ih);\n                    return (ratio === 0) ? 1 : ratio;\n                }\n    \n                // fix ie7 bug\n                // http://stackoverflow.com/questions/11929099/\n                // html5-canvas-drawimage-ratio-bug-ios\n                if ( Base.os.ios >= 7 ) {\n                    return function( canvas, img, x, y, w, h ) {\n                        var iw = img.naturalWidth,\n                            ih = img.naturalHeight,\n                            vertSquashRatio = detectVerticalSquash( img, iw, ih );\n    \n                        return canvas.getContext('2d').drawImage( img, 0, 0,\n                                iw * vertSquashRatio, ih * vertSquashRatio,\n                                x, y, w, h );\n                    };\n                }\n    \n                /**\n                 * Detect subsampling in loaded image.\n                 * In iOS, larger images than 2M pixels may be\n                 * subsampled in rendering.\n                 */\n                function detectSubsampling( img ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        canvas, ctx;\n    \n                    // subsampling may happen overmegapixel image\n                    if ( iw * ih > 1024 * 1024 ) {\n                        canvas = document.createElement('canvas');\n                        canvas.width = canvas.height = 1;\n                        ctx = canvas.getContext('2d');\n                        ctx.drawImage( img, -iw + 1, 0 );\n    \n                        // subsampled image becomes half smaller in rendering size.\n                        // check alpha channel value to confirm image is covering\n                        // edge pixel or not. if alpha value is 0\n                        // image is not covering, hence subsampled.\n                        return ctx.getImageData( 0, 0, 1, 1 ).data[ 3 ] === 0;\n                    } else {\n                        return false;\n                    }\n                }\n    \n    \n                return function( canvas, img, x, y, width, height ) {\n                    var iw = img.naturalWidth,\n                        ih = img.naturalHeight,\n                        ctx = canvas.getContext('2d'),\n                        subsampled = detectSubsampling( img ),\n                        doSquash = this.type === 'image/jpeg',\n                        d = 1024,\n                        sy = 0,\n                        dy = 0,\n                        tmpCanvas, tmpCtx, vertSquashRatio, dw, dh, sx, dx;\n    \n                    if ( subsampled ) {\n                        iw /= 2;\n                        ih /= 2;\n                    }\n    \n                    ctx.save();\n                    tmpCanvas = document.createElement('canvas');\n                    tmpCanvas.width = tmpCanvas.height = d;\n    \n                    tmpCtx = tmpCanvas.getContext('2d');\n                    vertSquashRatio = doSquash ?\n                            detectVerticalSquash( img, iw, ih ) : 1;\n    \n                    dw = Math.ceil( d * width / iw );\n                    dh = Math.ceil( d * height / ih / vertSquashRatio );\n    \n                    while ( sy < ih ) {\n                        sx = 0;\n                        dx = 0;\n                        while ( sx < iw ) {\n                            tmpCtx.clearRect( 0, 0, d, d );\n                            tmpCtx.drawImage( img, -sx, -sy );\n                            ctx.drawImage( tmpCanvas, 0, 0, d, d,\n                                    x + dx, y + dy, dw, dh );\n                            sx += d;\n                            dx += dw;\n                        }\n                        sy += d;\n                        dy += dh;\n                    }\n                    ctx.restore();\n                    tmpCanvas = tmpCtx = null;\n                };\n            })()\n        });\n    });\n    \n    /**\n     * @fileOverview Transport\n     * @todo 支持chunked传输，优势：\n     * 可以将大文件分成小块，挨个传输，可以提高大文件成功率，当失败的时候，也只需要重传那小部分，\n     * 而不需要重头再传一次。另外断点续传也需要用chunked方式。\n     */\n    define('runtime/html5/transport',[\n        'base',\n        'runtime/html5/runtime'\n    ], function( Base, Html5Runtime ) {\n    \n        var noop = Base.noop,\n            $ = Base.$;\n    \n        return Html5Runtime.register( 'Transport', {\n            init: function() {\n                this._status = 0;\n                this._response = null;\n            },\n    \n            send: function() {\n                var owner = this.owner,\n                    opts = this.options,\n                    xhr = this._initAjax(),\n                    blob = owner._blob,\n                    server = opts.server,\n                    formData, binary, fr;\n    \n                if ( opts.sendAsBinary ) {\n                    server += opts.attachInfoToQuery !== false ? ((/\\?/.test( server ) ? '&' : '?') +\n                            $.param( owner._formData )) : '';\n    \n                    binary = blob.getSource();\n                } else {\n                    formData = new FormData();\n                    $.each( owner._formData, function( k, v ) {\n                        formData.append( k, v );\n                    });\n    \n                    formData.append( opts.fileVal, blob.getSource(),\n                            opts.filename || owner._formData.name || '' );\n                }\n    \n                if ( opts.withCredentials && 'withCredentials' in xhr ) {\n                    xhr.open( opts.method, server, true );\n                    xhr.withCredentials = true;\n                } else {\n                    xhr.open( opts.method, server );\n                }\n    \n                this._setRequestHeader( xhr, opts.headers );\n    \n                if ( binary ) {\n                    // 强制设置成 content-type 为文件流。\n                    xhr.overrideMimeType &&\n                            xhr.overrideMimeType('application/octet-stream');\n    \n                    // android直接发送blob会导致服务端接收到的是空文件。\n                    // bug详情。\n                    // https://code.google.com/p/android/issues/detail?id=39882\n                    // 所以先用fileReader读取出来再通过arraybuffer的方式发送。\n                    if ( Base.os.android ) {\n                        fr = new FileReader();\n    \n                        fr.onload = function() {\n                            xhr.send( this.result );\n                            fr = fr.onload = null;\n                        };\n    \n                        fr.readAsArrayBuffer( binary );\n                    } else {\n                        xhr.send( binary );\n                    }\n                } else {\n                    xhr.send( formData );\n                }\n            },\n    \n            getResponse: function() {\n                return this._response;\n            },\n    \n            getResponseAsJson: function() {\n                return this._parseJson( this._response );\n            },\n    \n            getResponseHeaders: function() {\n                return this._headers;\n            },\n    \n            getStatus: function() {\n                return this._status;\n            },\n    \n            abort: function() {\n                var xhr = this._xhr;\n    \n                if ( xhr ) {\n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    xhr.abort();\n    \n                    this._xhr = xhr = null;\n                }\n            },\n    \n            destroy: function() {\n                this.abort();\n            },\n    \n            _parseHeader: function(raw) {\n                var ret = {};\n    \n                raw && raw.replace(/^([^\\:]+):(.*)$/mg, function(_, key, value) {\n                    ret[key.trim()] = value.trim();\n                });\n    \n                return ret;\n            },\n    \n            _initAjax: function() {\n                var me = this,\n                    xhr = new XMLHttpRequest(),\n                    opts = this.options;\n    \n                if ( opts.withCredentials && !('withCredentials' in xhr) &&\n                        typeof XDomainRequest !== 'undefined' ) {\n                    xhr = new XDomainRequest();\n                }\n    \n                xhr.upload.onprogress = function( e ) {\n                    var percentage = 0;\n    \n                    if ( e.lengthComputable ) {\n                        percentage = e.loaded / e.total;\n                    }\n    \n                    return me.trigger( 'progress', percentage );\n                };\n    \n                xhr.onreadystatechange = function() {\n    \n                    if ( xhr.readyState !== 4 ) {\n                        return;\n                    }\n    \n                    xhr.upload.onprogress = noop;\n                    xhr.onreadystatechange = noop;\n                    me._xhr = null;\n                    me._status = xhr.status;\n    \n                    var separator = '|', // 分隔符\n                         // 拼接的状态，在 widgets/upload.js 会有代码用到这个分隔符\n                        status = separator + xhr.status +\n                                 separator + xhr.statusText;\n    \n                    if ( xhr.status >= 200 && xhr.status < 300 ) {\n                        me._response = xhr.responseText;\n                        me._headers = me._parseHeader(xhr.getAllResponseHeaders());\n                        return me.trigger('load');\n                    } else if ( xhr.status >= 500 && xhr.status < 600 ) {\n                        me._response = xhr.responseText;\n                        me._headers = me._parseHeader(xhr.getAllResponseHeaders());\n                        return me.trigger( 'error', 'server' + status );\n                    }\n    \n    \n                    return me.trigger( 'error', me._status ? 'http' + status : 'abort' );\n                };\n    \n                me._xhr = xhr;\n                return xhr;\n            },\n    \n            _setRequestHeader: function( xhr, headers ) {\n                $.each( headers, function( key, val ) {\n                    xhr.setRequestHeader( key, val );\n                });\n            },\n    \n            _parseJson: function( str ) {\n                var json;\n    \n                try {\n                    json = JSON.parse( str );\n                } catch ( ex ) {\n                    json = {};\n                }\n    \n                return json;\n            }\n        });\n    });\n    \n    /**\n     * @fileOverview  Transport flash实现\n     */\n    define('runtime/html5/md5',[\n        'runtime/html5/runtime'\n    ], function( FlashRuntime ) {\n    \n        /*\n         * Fastest md5 implementation around (JKM md5)\n         * Credits: Joseph Myers\n         *\n         * @see http://www.myersdaily.org/joseph/javascript/md5-text.html\n         * @see http://jsperf.com/md5-shootout/7\n         */\n    \n        /* this function is much faster,\n          so if possible we use it. Some IEs\n          are the only ones I know of that\n          need the idiotic second function,\n          generated by an if clause.  */\n        var add32 = function (a, b) {\n            return (a + b) & 0xFFFFFFFF;\n        },\n    \n        cmn = function (q, a, b, x, s, t) {\n            a = add32(add32(a, q), add32(x, t));\n            return add32((a << s) | (a >>> (32 - s)), b);\n        },\n    \n        ff = function (a, b, c, d, x, s, t) {\n            return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n        },\n    \n        gg = function (a, b, c, d, x, s, t) {\n            return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n        },\n    \n        hh = function (a, b, c, d, x, s, t) {\n            return cmn(b ^ c ^ d, a, b, x, s, t);\n        },\n    \n        ii = function (a, b, c, d, x, s, t) {\n            return cmn(c ^ (b | (~d)), a, b, x, s, t);\n        },\n    \n        md5cycle = function (x, k) {\n            var a = x[0],\n                b = x[1],\n                c = x[2],\n                d = x[3];\n    \n            a = ff(a, b, c, d, k[0], 7, -680876936);\n            d = ff(d, a, b, c, k[1], 12, -389564586);\n            c = ff(c, d, a, b, k[2], 17, 606105819);\n            b = ff(b, c, d, a, k[3], 22, -1044525330);\n            a = ff(a, b, c, d, k[4], 7, -176418897);\n            d = ff(d, a, b, c, k[5], 12, 1200080426);\n            c = ff(c, d, a, b, k[6], 17, -1473231341);\n            b = ff(b, c, d, a, k[7], 22, -45705983);\n            a = ff(a, b, c, d, k[8], 7, 1770035416);\n            d = ff(d, a, b, c, k[9], 12, -1958414417);\n            c = ff(c, d, a, b, k[10], 17, -42063);\n            b = ff(b, c, d, a, k[11], 22, -1990404162);\n            a = ff(a, b, c, d, k[12], 7, 1804603682);\n            d = ff(d, a, b, c, k[13], 12, -40341101);\n            c = ff(c, d, a, b, k[14], 17, -1502002290);\n            b = ff(b, c, d, a, k[15], 22, 1236535329);\n    \n            a = gg(a, b, c, d, k[1], 5, -165796510);\n            d = gg(d, a, b, c, k[6], 9, -1069501632);\n            c = gg(c, d, a, b, k[11], 14, 643717713);\n            b = gg(b, c, d, a, k[0], 20, -373897302);\n            a = gg(a, b, c, d, k[5], 5, -701558691);\n            d = gg(d, a, b, c, k[10], 9, 38016083);\n            c = gg(c, d, a, b, k[15], 14, -660478335);\n            b = gg(b, c, d, a, k[4], 20, -405537848);\n            a = gg(a, b, c, d, k[9], 5, 568446438);\n            d = gg(d, a, b, c, k[14], 9, -1019803690);\n            c = gg(c, d, a, b, k[3], 14, -187363961);\n            b = gg(b, c, d, a, k[8], 20, 1163531501);\n            a = gg(a, b, c, d, k[13], 5, -1444681467);\n            d = gg(d, a, b, c, k[2], 9, -51403784);\n            c = gg(c, d, a, b, k[7], 14, 1735328473);\n            b = gg(b, c, d, a, k[12], 20, -1926607734);\n    \n            a = hh(a, b, c, d, k[5], 4, -378558);\n            d = hh(d, a, b, c, k[8], 11, -2022574463);\n            c = hh(c, d, a, b, k[11], 16, 1839030562);\n            b = hh(b, c, d, a, k[14], 23, -35309556);\n            a = hh(a, b, c, d, k[1], 4, -1530992060);\n            d = hh(d, a, b, c, k[4], 11, 1272893353);\n            c = hh(c, d, a, b, k[7], 16, -155497632);\n            b = hh(b, c, d, a, k[10], 23, -1094730640);\n            a = hh(a, b, c, d, k[13], 4, 681279174);\n            d = hh(d, a, b, c, k[0], 11, -358537222);\n            c = hh(c, d, a, b, k[3], 16, -722521979);\n            b = hh(b, c, d, a, k[6], 23, 76029189);\n            a = hh(a, b, c, d, k[9], 4, -640364487);\n            d = hh(d, a, b, c, k[12], 11, -421815835);\n            c = hh(c, d, a, b, k[15], 16, 530742520);\n            b = hh(b, c, d, a, k[2], 23, -995338651);\n    \n            a = ii(a, b, c, d, k[0], 6, -198630844);\n            d = ii(d, a, b, c, k[7], 10, 1126891415);\n            c = ii(c, d, a, b, k[14], 15, -1416354905);\n            b = ii(b, c, d, a, k[5], 21, -57434055);\n            a = ii(a, b, c, d, k[12], 6, 1700485571);\n            d = ii(d, a, b, c, k[3], 10, -1894986606);\n            c = ii(c, d, a, b, k[10], 15, -1051523);\n            b = ii(b, c, d, a, k[1], 21, -2054922799);\n            a = ii(a, b, c, d, k[8], 6, 1873313359);\n            d = ii(d, a, b, c, k[15], 10, -30611744);\n            c = ii(c, d, a, b, k[6], 15, -1560198380);\n            b = ii(b, c, d, a, k[13], 21, 1309151649);\n            a = ii(a, b, c, d, k[4], 6, -145523070);\n            d = ii(d, a, b, c, k[11], 10, -1120210379);\n            c = ii(c, d, a, b, k[2], 15, 718787259);\n            b = ii(b, c, d, a, k[9], 21, -343485551);\n    \n            x[0] = add32(a, x[0]);\n            x[1] = add32(b, x[1]);\n            x[2] = add32(c, x[2]);\n            x[3] = add32(d, x[3]);\n        },\n    \n        /* there needs to be support for Unicode here,\n           * unless we pretend that we can redefine the MD-5\n           * algorithm for multi-byte characters (perhaps\n           * by adding every four 16-bit characters and\n           * shortening the sum to 32 bits). Otherwise\n           * I suggest performing MD-5 as if every character\n           * was two bytes--e.g., 0040 0025 = @%--but then\n           * how will an ordinary MD-5 sum be matched?\n           * There is no way to standardize text to something\n           * like UTF-8 before transformation; speed cost is\n           * utterly prohibitive. The JavaScript standard\n           * itself needs to look at this: it should start\n           * providing access to strings as preformed UTF-8\n           * 8-bit unsigned value arrays.\n           */\n        md5blk = function (s) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n            }\n            return md5blks;\n        },\n    \n        md5blk_array = function (a) {\n            var md5blks = [],\n                i; /* Andy King said do it this way. */\n    \n            for (i = 0; i < 64; i += 4) {\n                md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n            }\n            return md5blks;\n        },\n    \n        md51 = function (s) {\n            var n = s.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk(s.substring(i - 64, i)));\n            }\n            s = s.substring(i - 64);\n            length = s.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= s.charCodeAt(i) << ((i % 4) << 3);\n            }\n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n            return state;\n        },\n    \n        md51_array = function (a) {\n            var n = a.length,\n                state = [1732584193, -271733879, -1732584194, 271733878],\n                i,\n                length,\n                tail,\n                tmp,\n                lo,\n                hi;\n    \n            for (i = 64; i <= n; i += 64) {\n                md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n            }\n    \n            // Not sure if it is a bug, however IE10 will always produce a sub array of length 1\n            // containing the last element of the parent array if the sub array specified starts\n            // beyond the length of the parent array - weird.\n            // https://connect.microsoft.com/IE/feedback/details/771452/typed-array-subarray-issue\n            a = (i - 64) < n ? a.subarray(i - 64) : new Uint8Array(0);\n    \n            length = a.length;\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= a[i] << ((i % 4) << 3);\n            }\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Beware that the final length might not fit in 32 bits so we take care of that\n            tmp = n * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n    \n            md5cycle(state, tail);\n    \n            return state;\n        },\n    \n        hex_chr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'],\n    \n        rhex = function (n) {\n            var s = '',\n                j;\n            for (j = 0; j < 4; j += 1) {\n                s += hex_chr[(n >> (j * 8 + 4)) & 0x0F] + hex_chr[(n >> (j * 8)) & 0x0F];\n            }\n            return s;\n        },\n    \n        hex = function (x) {\n            var i;\n            for (i = 0; i < x.length; i += 1) {\n                x[i] = rhex(x[i]);\n            }\n            return x.join('');\n        },\n    \n        md5 = function (s) {\n            return hex(md51(s));\n        },\n    \n    \n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * SparkMD5 OOP implementation.\n         *\n         * Use this class to perform an incremental md5, otherwise use the\n         * static methods instead.\n         */\n        SparkMD5 = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n    \n        // In some cases the fast add32 function cannot be used..\n        if (md5('hello') !== '5d41402abc4b2a76b9719d911017c592') {\n            add32 = function (x, y) {\n                var lsw = (x & 0xFFFF) + (y & 0xFFFF),\n                    msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n                return (msw << 16) | (lsw & 0xFFFF);\n            };\n        }\n    \n    \n        /**\n         * Appends a string.\n         * A conversion will be applied if an utf8 string is detected.\n         *\n         * @param {String} str The string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.append = function (str) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            // then append as binary\n            this.appendBinary(str);\n    \n            return this;\n        };\n    \n        /**\n         * Appends a binary string.\n         *\n         * @param {String} contents The binary string to be appended\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.appendBinary = function (contents) {\n            this._buff += contents;\n            this._length += contents.length;\n    \n            var length = this._buff.length,\n                i;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk(this._buff.substring(i - 64, i)));\n            }\n    \n            this._buff = this._buff.substr(i - 64);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                i,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff.charCodeAt(i) << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        /**\n         * Finish the final calculation based on the tail.\n         *\n         * @param {Array}  tail   The tail (will be modified)\n         * @param {Number} length The length of the remaining buffer\n         */\n        SparkMD5.prototype._finish = function (tail, length) {\n            var i = length,\n                tmp,\n                lo,\n                hi;\n    \n            tail[i >> 2] |= 0x80 << ((i % 4) << 3);\n            if (i > 55) {\n                md5cycle(this._state, tail);\n                for (i = 0; i < 16; i += 1) {\n                    tail[i] = 0;\n                }\n            }\n    \n            // Do the final computation based on the tail and length\n            // Beware that the final length may not fit in 32 bits so we take care of that\n            tmp = this._length * 8;\n            tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n            lo = parseInt(tmp[2], 16);\n            hi = parseInt(tmp[1], 16) || 0;\n    \n            tail[14] = lo;\n            tail[15] = hi;\n            md5cycle(this._state, tail);\n        };\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5} The instance itself\n         */\n        SparkMD5.prototype.reset = function () {\n            this._buff = \"\";\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.prototype.destroy = function () {\n            delete this._state;\n            delete this._buff;\n            delete this._length;\n        };\n    \n    \n        /**\n         * Performs the md5 hash on a string.\n         * A conversion will be applied if utf8 string is detected.\n         *\n         * @param {String}  str The string\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hash = function (str, raw) {\n            // converts the string to utf8 bytes if necessary\n            if (/[\\u0080-\\uFFFF]/.test(str)) {\n                str = unescape(encodeURIComponent(str));\n            }\n    \n            var hash = md51(str);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * Performs the md5 hash on a binary string.\n         *\n         * @param {String}  content The binary string\n         * @param {Boolean} raw     True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.hashBinary = function (content, raw) {\n            var hash = md51(content);\n    \n            return !!raw ? hash : hex(hash);\n        };\n    \n        /**\n         * SparkMD5 OOP implementation for array buffers.\n         *\n         * Use this class to perform an incremental md5 ONLY for array buffers.\n         */\n        SparkMD5.ArrayBuffer = function () {\n            // call reset to init the instance\n            this.reset();\n        };\n    \n        ////////////////////////////////////////////////////////////////////////////\n    \n        /**\n         * Appends an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array to be appended\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n            // TODO: we could avoid the concatenation here but the algorithm would be more complex\n            //       if you find yourself needing extra performance, please make a PR.\n            var buff = this._concatArrayBuffer(this._buff, arr),\n                length = buff.length,\n                i;\n    \n            this._length += arr.byteLength;\n    \n            for (i = 64; i <= length; i += 64) {\n                md5cycle(this._state, md5blk_array(buff.subarray(i - 64, i)));\n            }\n    \n            // Avoids IE10 weirdness (documented above)\n            this._buff = (i - 64) < length ? buff.subarray(i - 64) : new Uint8Array(0);\n    \n            return this;\n        };\n    \n        /**\n         * Finishes the incremental computation, reseting the internal state and\n         * returning the result.\n         * Use the raw parameter to obtain the raw result instead of the hex one.\n         *\n         * @param {Boolean} raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n            var buff = this._buff,\n                length = buff.length,\n                tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n                i,\n                ret;\n    \n            for (i = 0; i < length; i += 1) {\n                tail[i >> 2] |= buff[i] << ((i % 4) << 3);\n            }\n    \n            this._finish(tail, length);\n            ret = !!raw ? this._state : hex(this._state);\n    \n            this.reset();\n    \n            return ret;\n        };\n    \n        SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n    \n        /**\n         * Resets the internal state of the computation.\n         *\n         * @return {SparkMD5.ArrayBuffer} The instance itself\n         */\n        SparkMD5.ArrayBuffer.prototype.reset = function () {\n            this._buff = new Uint8Array(0);\n            this._length = 0;\n            this._state = [1732584193, -271733879, -1732584194, 271733878];\n    \n            return this;\n        };\n    \n        /**\n         * Releases memory used by the incremental buffer and other aditional\n         * resources. If you plan to use the instance again, use reset instead.\n         */\n        SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n    \n        /**\n         * Concats two array buffers, returning a new one.\n         *\n         * @param  {ArrayBuffer} first  The first array buffer\n         * @param  {ArrayBuffer} second The second array buffer\n         *\n         * @return {ArrayBuffer} The new array buffer\n         */\n        SparkMD5.ArrayBuffer.prototype._concatArrayBuffer = function (first, second) {\n            var firstLength = first.length,\n                result = new Uint8Array(firstLength + second.byteLength);\n    \n            result.set(first);\n            result.set(new Uint8Array(second), firstLength);\n    \n            return result;\n        };\n    \n        /**\n         * Performs the md5 hash on an array buffer.\n         *\n         * @param {ArrayBuffer} arr The array buffer\n         * @param {Boolean}     raw True to get the raw result, false to get the hex result\n         *\n         * @return {String|Array} The result\n         */\n        SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n            var hash = md51_array(new Uint8Array(arr));\n    \n            return !!raw ? hash : hex(hash);\n        };\n        \n        return FlashRuntime.register( 'Md5', {\n            init: function() {\n                // do nothing.\n            },\n    \n            loadFromBlob: function( file ) {\n                var blob = file.getSource(),\n                    chunkSize = 2 * 1024 * 1024,\n                    chunks = Math.ceil( blob.size / chunkSize ),\n                    chunk = 0,\n                    owner = this.owner,\n                    spark = new SparkMD5.ArrayBuffer(),\n                    me = this,\n                    blobSlice = blob.mozSlice || blob.webkitSlice || blob.slice,\n                    loadNext, fr;\n    \n                fr = new FileReader();\n    \n                loadNext = function() {\n                    var start, end;\n    \n                    start = chunk * chunkSize;\n                    end = Math.min( start + chunkSize, blob.size );\n    \n                    fr.onload = function( e ) {\n                        spark.append( e.target.result );\n                        owner.trigger( 'progress', {\n                            total: file.size,\n                            loaded: end\n                        });\n                    };\n    \n                    fr.onloadend = function() {\n                        fr.onloadend = fr.onload = null;\n    \n                        if ( ++chunk < chunks ) {\n                            setTimeout( loadNext, 1 );\n                        } else {\n                            setTimeout(function(){\n                                owner.trigger('load');\n                                me.result = spark.end();\n                                loadNext = file = blob = spark = null;\n                                owner.trigger('complete');\n                            }, 50 );\n                        }\n                    };\n    \n                    fr.readAsArrayBuffer( blobSlice.call( blob, start, end ) );\n                };\n    \n                loadNext();\n            },\n    \n            getResult: function() {\n                return this.result;\n            }\n        });\n    });\n    /**\n     * @fileOverview 完全版本。\n     */\n    define('preset/all',[\n        'base',\n    \n        // widgets\n        'widgets/filednd',\n        'widgets/filepaste',\n        'widgets/filepicker',\n        'widgets/image',\n        'widgets/queue',\n        'widgets/runtime',\n        'widgets/upload',\n        'widgets/validator',\n        'widgets/md5',\n    \n        // runtimes\n        // html5\n        'runtime/html5/blob',\n        'runtime/html5/dnd',\n        'runtime/html5/filepaste',\n        'runtime/html5/filepicker',\n        'runtime/html5/imagemeta/exif',\n        'runtime/html5/androidpatch',\n        'runtime/html5/image',\n        'runtime/html5/transport',\n        'runtime/html5/md5',\n    \n        // flash\n        // 'runtime/flash/filepicker',\n        // 'runtime/flash/image',\n        // 'runtime/flash/transport',\n        // 'runtime/flash/blob',\n        // 'runtime/flash/md5'\n    ], function( Base ) {\n        return Base;\n    });\n    \n    /**\n     * @fileOverview 日志组件，主要用来收集错误信息，可以帮助 webuploader 更好的定位问题和发展。\n     *\n     * 如果您不想要启用此功能，请在打包的时候去掉 log 模块。\n     *\n     * 或者可以在初始化的时候通过 options.disableWidgets 属性禁用。\n     *\n     * 如：\n     * WebUploader.create({\n     *     ...\n     *\n     *     disableWidgets: 'log',\n     *\n     *     ...\n     * })\n     */\n    define('widgets/log',[\n        'base',\n        'uploader',\n        'widgets/widget'\n    ], function( Base, Uploader ) {\n        var $ = Base.$,\n            logUrl = ' http://static.tieba.baidu.com/tb/pms/img/st.gif??',\n            product = (location.hostname || location.host || 'protected').toLowerCase(),\n    \n            // 只针对 baidu 内部产品用户做统计功能。\n            enable = product && /baidu/i.exec(product),\n            base;\n    \n        if (!enable) {\n            return;\n        }\n    \n        base = {\n            dv: 3,\n            master: 'webuploader',\n            online: /test/.exec(product) ? 0 : 1,\n            module: '',\n            product: product,\n            type: 0\n        };\n    \n        function send(data) {\n            var obj = $.extend({}, base, data),\n                url = logUrl.replace(/^(.*)\\?/, '$1' + $.param( obj )),\n                image = new Image();\n    \n            image.src = url;\n        }\n    \n        return Uploader.register({\n            name: 'log',\n    \n            init: function() {\n                var owner = this.owner,\n                    count = 0,\n                    size = 0;\n    \n                owner\n                    .on('error', function(code) {\n                        send({\n                            type: 2,\n                            c_error_code: code\n                        });\n                    })\n                    .on('uploadError', function(file, reason) {\n                        send({\n                            type: 2,\n                            c_error_code: 'UPLOAD_ERROR',\n                            c_reason: '' + reason\n                        });\n                    })\n                    .on('uploadComplete', function(file) {\n                        count++;\n                        size += file.size;\n                    }).\n                    on('uploadFinished', function() {\n                        send({\n                            c_count: count,\n                            c_size: size\n                        });\n                        count = size = 0;\n                    });\n    \n                send({\n                    c_usage: 1\n                });\n            }\n        });\n    });\n    /**\n     * @fileOverview Uploader上传类\n     */\n    define('webuploader',[\n        'preset/all',\n        'widgets/log'\n    ], function( preset ) {\n        return preset;\n    });\n    return require('webuploader');\n});\n"
  },
  {
    "path": "third-party/zeroclipboard/ZeroClipboard.js",
    "content": "/*!\n* ZeroClipboard\n* The ZeroClipboard library provides an easy way to copy text to the clipboard using an invisible Adobe Flash movie and a JavaScript interface.\n* Copyright (c) 2014 Jon Rohan, James M. Greene\n* Licensed MIT\n* http://zeroclipboard.org/\n* v2.0.0-beta.5\n*/\n(function(window) {\n  \"use strict\";\n  var _currentElement;\n  var _flashState = {\n    bridge: null,\n    version: \"0.0.0\",\n    pluginType: \"unknown\",\n    disabled: null,\n    outdated: null,\n    unavailable: null,\n    deactivated: null,\n    overdue: null,\n    ready: null\n  };\n  var _clipData = {};\n  var _clipDataFormatMap = null;\n  var _clientIdCounter = 0;\n  var _clientMeta = {};\n  var _elementIdCounter = 0;\n  var _elementMeta = {};\n  var _swfPath = function() {\n    var i, jsDir, tmpJsPath, jsPath, swfPath = \"ZeroClipboard.swf\";\n    if (!(document.currentScript && (jsPath = document.currentScript.src))) {\n      var scripts = document.getElementsByTagName(\"script\");\n      if (\"readyState\" in scripts[0]) {\n        for (i = scripts.length; i--; ) {\n          if (scripts[i].readyState === \"interactive\" && (jsPath = scripts[i].src)) {\n            break;\n          }\n        }\n      } else if (document.readyState === \"loading\") {\n        jsPath = scripts[scripts.length - 1].src;\n      } else {\n        for (i = scripts.length; i--; ) {\n          tmpJsPath = scripts[i].src;\n          if (!tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n          tmpJsPath = tmpJsPath.split(\"#\")[0].split(\"?\")[0];\n          tmpJsPath = tmpJsPath.slice(0, tmpJsPath.lastIndexOf(\"/\") + 1);\n          if (jsDir == null) {\n            jsDir = tmpJsPath;\n          } else if (jsDir !== tmpJsPath) {\n            jsDir = null;\n            break;\n          }\n        }\n        if (jsDir !== null) {\n          jsPath = jsDir;\n        }\n      }\n    }\n    if (jsPath) {\n      jsPath = jsPath.split(\"#\")[0].split(\"?\")[0];\n      swfPath = jsPath.slice(0, jsPath.lastIndexOf(\"/\") + 1) + swfPath;\n    }\n    return swfPath;\n  }();\n  var _camelizeCssPropName = function() {\n    var matcherRegex = /\\-([a-z])/g, replacerFn = function(match, group) {\n      return group.toUpperCase();\n    };\n    return function(prop) {\n      return prop.replace(matcherRegex, replacerFn);\n    };\n  }();\n  var _getStyle = function(el, prop) {\n    var value, camelProp, tagName;\n    if (window.getComputedStyle) {\n      value = window.getComputedStyle(el, null).getPropertyValue(prop);\n    } else {\n      camelProp = _camelizeCssPropName(prop);\n      if (el.currentStyle) {\n        value = el.currentStyle[camelProp];\n      } else {\n        value = el.style[camelProp];\n      }\n    }\n    if (prop === \"cursor\") {\n      if (!value || value === \"auto\") {\n        tagName = el.tagName.toLowerCase();\n        if (tagName === \"a\") {\n          return \"pointer\";\n        }\n      }\n    }\n    return value;\n  };\n  var _elementMouseOver = function(event) {\n    if (!event) {\n      event = window.event;\n    }\n    var target;\n    if (this !== window) {\n      target = this;\n    } else if (event.target) {\n      target = event.target;\n    } else if (event.srcElement) {\n      target = event.srcElement;\n    }\n    ZeroClipboard.activate(target);\n  };\n  var _addEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.addEventListener) {\n      element.addEventListener(method, func, false);\n    } else if (element.attachEvent) {\n      element.attachEvent(\"on\" + method, func);\n    }\n  };\n  var _removeEventHandler = function(element, method, func) {\n    if (!element || element.nodeType !== 1) {\n      return;\n    }\n    if (element.removeEventListener) {\n      element.removeEventListener(method, func, false);\n    } else if (element.detachEvent) {\n      element.detachEvent(\"on\" + method, func);\n    }\n  };\n  var _addClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (!element.classList.contains(value)) {\n        element.classList.add(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\") {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1) {\n        if (!element.className) {\n          element.className = value;\n        } else {\n          var className = \" \" + element.className + \" \", setClass = element.className;\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            if (className.indexOf(\" \" + classNames[c] + \" \") < 0) {\n              setClass += \" \" + classNames[c];\n            }\n          }\n          element.className = setClass.replace(/^\\s+|\\s+$/g, \"\");\n        }\n      }\n    }\n    return element;\n  };\n  var _removeClass = function(element, value) {\n    if (!element || element.nodeType !== 1) {\n      return element;\n    }\n    if (element.classList) {\n      if (element.classList.contains(value)) {\n        element.classList.remove(value);\n      }\n      return element;\n    }\n    if (value && typeof value === \"string\" || value === undefined) {\n      var classNames = (value || \"\").split(/\\s+/);\n      if (element.nodeType === 1 && element.className) {\n        if (value) {\n          var className = (\" \" + element.className + \" \").replace(/[\\n\\t]/g, \" \");\n          for (var c = 0, cl = classNames.length; c < cl; c++) {\n            className = className.replace(\" \" + classNames[c] + \" \", \" \");\n          }\n          element.className = className.replace(/^\\s+|\\s+$/g, \"\");\n        } else {\n          element.className = \"\";\n        }\n      }\n    }\n    return element;\n  };\n  var _getZoomFactor = function() {\n    var rect, physicalWidth, logicalWidth, zoomFactor = 1;\n    if (typeof document.body.getBoundingClientRect === \"function\") {\n      rect = document.body.getBoundingClientRect();\n      physicalWidth = rect.right - rect.left;\n      logicalWidth = document.body.offsetWidth;\n      zoomFactor = Math.round(physicalWidth / logicalWidth * 100) / 100;\n    }\n    return zoomFactor;\n  };\n  var _getDOMObjectPosition = function(obj, defaultZIndex) {\n    var info = {\n      left: 0,\n      top: 0,\n      width: 0,\n      height: 0,\n      zIndex: _getSafeZIndex(defaultZIndex) - 1\n    };\n    if (obj.getBoundingClientRect) {\n      var rect = obj.getBoundingClientRect();\n      var pageXOffset, pageYOffset, zoomFactor;\n      if (\"pageXOffset\" in window && \"pageYOffset\" in window) {\n        pageXOffset = window.pageXOffset;\n        pageYOffset = window.pageYOffset;\n      } else {\n        zoomFactor = _getZoomFactor();\n        pageXOffset = Math.round(document.documentElement.scrollLeft / zoomFactor);\n        pageYOffset = Math.round(document.documentElement.scrollTop / zoomFactor);\n      }\n      var leftBorderWidth = document.documentElement.clientLeft || 0;\n      var topBorderWidth = document.documentElement.clientTop || 0;\n      info.left = rect.left + pageXOffset - leftBorderWidth;\n      info.top = rect.top + pageYOffset - topBorderWidth;\n      info.width = \"width\" in rect ? rect.width : rect.right - rect.left;\n      info.height = \"height\" in rect ? rect.height : rect.bottom - rect.top;\n    }\n    return info;\n  };\n  var _cacheBust = function(path, options) {\n    var cacheBust = options == null || options && options.cacheBust === true;\n    if (cacheBust) {\n      return (path.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"noCache=\" + new Date().getTime();\n    } else {\n      return \"\";\n    }\n  };\n  var _vars = function(options) {\n    var i, len, domain, domains, str = \"\", trustedOriginsExpanded = [];\n    if (options.trustedDomains) {\n      if (typeof options.trustedDomains === \"string\") {\n        domains = [ options.trustedDomains ];\n      } else if (typeof options.trustedDomains === \"object\" && \"length\" in options.trustedDomains) {\n        domains = options.trustedDomains;\n      }\n    }\n    if (domains && domains.length) {\n      for (i = 0, len = domains.length; i < len; i++) {\n        if (domains.hasOwnProperty(i) && domains[i] && typeof domains[i] === \"string\") {\n          domain = _extractDomain(domains[i]);\n          if (!domain) {\n            continue;\n          }\n          if (domain === \"*\") {\n            trustedOriginsExpanded = [ domain ];\n            break;\n          }\n          trustedOriginsExpanded.push.apply(trustedOriginsExpanded, [ domain, \"//\" + domain, window.location.protocol + \"//\" + domain ]);\n        }\n      }\n    }\n    if (trustedOriginsExpanded.length) {\n      str += \"trustedOrigins=\" + encodeURIComponent(trustedOriginsExpanded.join(\",\"));\n    }\n    if (options.forceEnhancedClipboard === true) {\n      str += (str ? \"&\" : \"\") + \"forceEnhancedClipboard=true\";\n    }\n    return str;\n  };\n  var _inArray = function(elem, array, fromIndex) {\n    if (typeof array.indexOf === \"function\") {\n      return array.indexOf(elem, fromIndex);\n    }\n    var i, len = array.length;\n    if (typeof fromIndex === \"undefined\") {\n      fromIndex = 0;\n    } else if (fromIndex < 0) {\n      fromIndex = len + fromIndex;\n    }\n    for (i = fromIndex; i < len; i++) {\n      if (array.hasOwnProperty(i) && array[i] === elem) {\n        return i;\n      }\n    }\n    return -1;\n  };\n  var _prepClip = function(elements) {\n    if (typeof elements === \"string\") {\n      throw new TypeError(\"ZeroClipboard doesn't accept query strings.\");\n    }\n    return typeof elements.length !== \"number\" ? [ elements ] : elements;\n  };\n  var _dispatchCallback = function(func, context, args, async) {\n    if (async) {\n      window.setTimeout(function() {\n        func.apply(context, args);\n      }, 0);\n    } else {\n      func.apply(context, args);\n    }\n  };\n  var _getSafeZIndex = function(val) {\n    var zIndex, tmp;\n    if (val) {\n      if (typeof val === \"number\" && val > 0) {\n        zIndex = val;\n      } else if (typeof val === \"string\" && (tmp = parseInt(val, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    if (!zIndex) {\n      if (typeof _globalConfig.zIndex === \"number\" && _globalConfig.zIndex > 0) {\n        zIndex = _globalConfig.zIndex;\n      } else if (typeof _globalConfig.zIndex === \"string\" && (tmp = parseInt(_globalConfig.zIndex, 10)) && !isNaN(tmp) && tmp > 0) {\n        zIndex = tmp;\n      }\n    }\n    return zIndex || 0;\n  };\n  var _extend = function() {\n    var i, len, arg, prop, src, copy, target = arguments[0] || {};\n    for (i = 1, len = arguments.length; i < len; i++) {\n      if ((arg = arguments[i]) != null) {\n        for (prop in arg) {\n          if (arg.hasOwnProperty(prop)) {\n            src = target[prop];\n            copy = arg[prop];\n            if (target === copy) {\n              continue;\n            }\n            if (copy !== undefined) {\n              target[prop] = copy;\n            }\n          }\n        }\n      }\n    }\n    return target;\n  };\n  var _extractDomain = function(originOrUrl) {\n    if (originOrUrl == null || originOrUrl === \"\") {\n      return null;\n    }\n    originOrUrl = originOrUrl.replace(/^\\s+|\\s+$/g, \"\");\n    if (originOrUrl === \"\") {\n      return null;\n    }\n    var protocolIndex = originOrUrl.indexOf(\"//\");\n    originOrUrl = protocolIndex === -1 ? originOrUrl : originOrUrl.slice(protocolIndex + 2);\n    var pathIndex = originOrUrl.indexOf(\"/\");\n    originOrUrl = pathIndex === -1 ? originOrUrl : protocolIndex === -1 || pathIndex === 0 ? null : originOrUrl.slice(0, pathIndex);\n    if (originOrUrl && originOrUrl.slice(-4).toLowerCase() === \".swf\") {\n      return null;\n    }\n    return originOrUrl || null;\n  };\n  var _determineScriptAccess = function() {\n    var _extractAllDomains = function(origins, resultsArray) {\n      var i, len, tmp;\n      if (origins == null || resultsArray[0] === \"*\") {\n        return;\n      }\n      if (typeof origins === \"string\") {\n        origins = [ origins ];\n      }\n      if (!(typeof origins === \"object\" && typeof origins.length === \"number\")) {\n        return;\n      }\n      for (i = 0, len = origins.length; i < len; i++) {\n        if (origins.hasOwnProperty(i) && (tmp = _extractDomain(origins[i]))) {\n          if (tmp === \"*\") {\n            resultsArray.length = 0;\n            resultsArray.push(\"*\");\n            break;\n          }\n          if (_inArray(tmp, resultsArray) === -1) {\n            resultsArray.push(tmp);\n          }\n        }\n      }\n    };\n    return function(currentDomain, configOptions) {\n      var swfDomain = _extractDomain(configOptions.swfPath);\n      if (swfDomain === null) {\n        swfDomain = currentDomain;\n      }\n      var trustedDomains = [];\n      _extractAllDomains(configOptions.trustedOrigins, trustedDomains);\n      _extractAllDomains(configOptions.trustedDomains, trustedDomains);\n      var len = trustedDomains.length;\n      if (len > 0) {\n        if (len === 1 && trustedDomains[0] === \"*\") {\n          return \"always\";\n        }\n        if (_inArray(currentDomain, trustedDomains) !== -1) {\n          if (len === 1 && currentDomain === swfDomain) {\n            return \"sameDomain\";\n          }\n          return \"always\";\n        }\n      }\n      return \"never\";\n    };\n  }();\n  var _objectKeys = function(obj) {\n    if (obj == null) {\n      return [];\n    }\n    if (Object.keys) {\n      return Object.keys(obj);\n    }\n    var keys = [];\n    for (var prop in obj) {\n      if (obj.hasOwnProperty(prop)) {\n        keys.push(prop);\n      }\n    }\n    return keys;\n  };\n  var _deleteOwnProperties = function(obj) {\n    if (obj) {\n      for (var prop in obj) {\n        if (obj.hasOwnProperty(prop)) {\n          delete obj[prop];\n        }\n      }\n    }\n    return obj;\n  };\n  var _safeActiveElement = function() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n    return null;\n  };\n  var _pick = function(obj, keys) {\n    var newObj = {};\n    for (var i = 0, len = keys.length; i < len; i++) {\n      if (keys[i] in obj) {\n        newObj[keys[i]] = obj[keys[i]];\n      }\n    }\n    return newObj;\n  };\n  var _omit = function(obj, keys) {\n    var newObj = {};\n    for (var prop in obj) {\n      if (_inArray(prop, keys) === -1) {\n        newObj[prop] = obj[prop];\n      }\n    }\n    return newObj;\n  };\n  var _mapClipDataToFlash = function(clipData) {\n    var newClipData = {}, formatMap = {};\n    if (!(typeof clipData === \"object\" && clipData)) {\n      return;\n    }\n    for (var dataFormat in clipData) {\n      if (dataFormat && clipData.hasOwnProperty(dataFormat) && typeof clipData[dataFormat] === \"string\" && clipData[dataFormat]) {\n        switch (dataFormat.toLowerCase()) {\n         case \"text/plain\":\n         case \"text\":\n         case \"air:text\":\n         case \"flash:text\":\n          newClipData.text = clipData[dataFormat];\n          formatMap.text = dataFormat;\n          break;\n\n         case \"text/html\":\n         case \"html\":\n         case \"air:html\":\n         case \"flash:html\":\n          newClipData.html = clipData[dataFormat];\n          formatMap.html = dataFormat;\n          break;\n\n         case \"application/rtf\":\n         case \"text/rtf\":\n         case \"rtf\":\n         case \"richtext\":\n         case \"air:rtf\":\n         case \"flash:rtf\":\n          newClipData.rtf = clipData[dataFormat];\n          formatMap.rtf = dataFormat;\n          break;\n\n         default:\n          break;\n        }\n      }\n    }\n    return {\n      data: newClipData,\n      formatMap: formatMap\n    };\n  };\n  var _mapClipResultsFromFlash = function(clipResults, formatMap) {\n    if (!(typeof clipResults === \"object\" && clipResults && typeof formatMap === \"object\" && formatMap)) {\n      return clipResults;\n    }\n    var newResults = {};\n    for (var prop in clipResults) {\n      if (clipResults.hasOwnProperty(prop)) {\n        if (prop !== \"success\" && prop !== \"data\") {\n          newResults[prop] = clipResults[prop];\n          continue;\n        }\n        newResults[prop] = {};\n        var tmpHash = clipResults[prop];\n        for (var dataFormat in tmpHash) {\n          if (dataFormat && tmpHash.hasOwnProperty(dataFormat) && formatMap.hasOwnProperty(dataFormat)) {\n            newResults[prop][formatMap[dataFormat]] = tmpHash[dataFormat];\n          }\n        }\n      }\n    }\n    return newResults;\n  };\n  var _args = function(arraySlice) {\n    return function(args) {\n      return arraySlice.call(args, 0);\n    };\n  }(window.Array.prototype.slice);\n  var _detectFlashSupport = function() {\n    var plugin, ax, mimeType, hasFlash = false, isActiveX = false, isPPAPI = false, flashVersion = \"\";\n    function parseFlashVersion(desc) {\n      var matches = desc.match(/[\\d]+/g);\n      matches.length = 3;\n      return matches.join(\".\");\n    }\n    function isPepperFlash(flashPlayerFileName) {\n      return !!flashPlayerFileName && (flashPlayerFileName = flashPlayerFileName.toLowerCase()) && (/^(pepflashplayer\\.dll|libpepflashplayer\\.so|pepperflashplayer\\.plugin)$/.test(flashPlayerFileName) || flashPlayerFileName.slice(-13) === \"chrome.plugin\");\n    }\n    function inspectPlugin(plugin) {\n      if (plugin) {\n        hasFlash = true;\n        if (plugin.version) {\n          flashVersion = parseFlashVersion(plugin.version);\n        }\n        if (!flashVersion && plugin.description) {\n          flashVersion = parseFlashVersion(plugin.description);\n        }\n        if (plugin.filename) {\n          isPPAPI = isPepperFlash(plugin.filename);\n        }\n      }\n    }\n    if (navigator.plugins && navigator.plugins.length) {\n      plugin = navigator.plugins[\"Shockwave Flash\"];\n      inspectPlugin(plugin);\n      if (navigator.plugins[\"Shockwave Flash 2.0\"]) {\n        hasFlash = true;\n        flashVersion = \"2.0.0.11\";\n      }\n    } else if (navigator.mimeTypes && navigator.mimeTypes.length) {\n      mimeType = navigator.mimeTypes[\"application/x-shockwave-flash\"];\n      plugin = mimeType && mimeType.enabledPlugin;\n      inspectPlugin(plugin);\n    } else if (typeof ActiveXObject !== \"undefined\") {\n      isActiveX = true;\n      try {\n        ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.7\");\n        hasFlash = true;\n        flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n      } catch (e1) {\n        try {\n          ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash.6\");\n          hasFlash = true;\n          flashVersion = \"6.0.21\";\n        } catch (e2) {\n          try {\n            ax = new ActiveXObject(\"ShockwaveFlash.ShockwaveFlash\");\n            hasFlash = true;\n            flashVersion = parseFlashVersion(ax.GetVariable(\"$version\"));\n          } catch (e3) {\n            isActiveX = false;\n          }\n        }\n      }\n    }\n    _flashState.disabled = hasFlash !== true;\n    _flashState.outdated = flashVersion && parseFloat(flashVersion) < 11;\n    _flashState.version = flashVersion || \"0.0.0\";\n    _flashState.pluginType = isPPAPI ? \"pepper\" : isActiveX ? \"activex\" : hasFlash ? \"netscape\" : \"unknown\";\n  };\n  _detectFlashSupport();\n  var ZeroClipboard = function(elements) {\n    if (!(this instanceof ZeroClipboard)) {\n      return new ZeroClipboard(elements);\n    }\n    this.id = \"\" + _clientIdCounter++;\n    _clientMeta[this.id] = {\n      instance: this,\n      elements: [],\n      handlers: {}\n    };\n    if (elements) {\n      this.clip(elements);\n    }\n    if (typeof _flashState.ready !== \"boolean\") {\n      _flashState.ready = false;\n    }\n    if (!ZeroClipboard.isFlashUnusable() && _flashState.bridge === null) {\n      var _client = this;\n      var maxWait = _globalConfig.flashLoadTimeout;\n      if (typeof maxWait === \"number\" && maxWait >= 0) {\n        setTimeout(function() {\n          if (typeof _flashState.deactivated !== \"boolean\") {\n            _flashState.deactivated = true;\n          }\n          if (_flashState.deactivated === true) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-deactivated\",\n              client: _client\n            });\n          }\n        }, maxWait);\n      }\n      _flashState.overdue = false;\n      _bridge();\n    }\n  };\n  ZeroClipboard.prototype.setText = function(text) {\n    ZeroClipboard.setData(\"text/plain\", text);\n    return this;\n  };\n  ZeroClipboard.prototype.setHtml = function(html) {\n    ZeroClipboard.setData(\"text/html\", html);\n    return this;\n  };\n  ZeroClipboard.prototype.setRichText = function(richText) {\n    ZeroClipboard.setData(\"application/rtf\", richText);\n    return this;\n  };\n  ZeroClipboard.prototype.setData = function() {\n    ZeroClipboard.setData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.clearData = function() {\n    ZeroClipboard.clearData.apply(ZeroClipboard, _args(arguments));\n    return this;\n  };\n  ZeroClipboard.prototype.setSize = function(width, height) {\n    _setSize(width, height);\n    return this;\n  };\n  var _setHandCursor = function(enabled) {\n    if (_flashState.ready === true && _flashState.bridge && typeof _flashState.bridge.setHandCursor === \"function\") {\n      _flashState.bridge.setHandCursor(enabled);\n    } else {\n      _flashState.ready = false;\n    }\n  };\n  ZeroClipboard.prototype.destroy = function() {\n    this.unclip();\n    this.off();\n    delete _clientMeta[this.id];\n  };\n  var _getAllClients = function() {\n    var i, len, client, clients = [], clientIds = _objectKeys(_clientMeta);\n    for (i = 0, len = clientIds.length; i < len; i++) {\n      client = _clientMeta[clientIds[i]].instance;\n      if (client && client instanceof ZeroClipboard) {\n        clients.push(client);\n      }\n    }\n    return clients;\n  };\n  ZeroClipboard.version = \"2.0.0-beta.5\";\n  var _globalConfig = {\n    swfPath: _swfPath,\n    trustedDomains: window.location.host ? [ window.location.host ] : [],\n    cacheBust: true,\n    forceHandCursor: false,\n    forceEnhancedClipboard: false,\n    zIndex: 999999999,\n    debug: false,\n    title: null,\n    autoActivate: true,\n    flashLoadTimeout: 3e4\n  };\n  ZeroClipboard.isFlashUnusable = function() {\n    return !!(_flashState.disabled || _flashState.outdated || _flashState.unavailable || _flashState.deactivated);\n  };\n  ZeroClipboard.config = function(options) {\n    if (typeof options === \"object\" && options !== null) {\n      _extend(_globalConfig, options);\n    }\n    if (typeof options === \"string\" && options) {\n      if (_globalConfig.hasOwnProperty(options)) {\n        return _globalConfig[options];\n      }\n      return;\n    }\n    var copy = {};\n    for (var prop in _globalConfig) {\n      if (_globalConfig.hasOwnProperty(prop)) {\n        if (typeof _globalConfig[prop] === \"object\" && _globalConfig[prop] !== null) {\n          if (\"length\" in _globalConfig[prop]) {\n            copy[prop] = _globalConfig[prop].slice(0);\n          } else {\n            copy[prop] = _extend({}, _globalConfig[prop]);\n          }\n        } else {\n          copy[prop] = _globalConfig[prop];\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.destroy = function() {\n    ZeroClipboard.deactivate();\n    for (var clientId in _clientMeta) {\n      if (_clientMeta.hasOwnProperty(clientId) && _clientMeta[clientId]) {\n        var client = _clientMeta[clientId].instance;\n        if (client && typeof client.destroy === \"function\") {\n          client.destroy();\n        }\n      }\n    }\n    var flashBridge = _flashState.bridge;\n    if (flashBridge) {\n      var htmlBridge = _getHtmlBridge(flashBridge);\n      if (htmlBridge) {\n        if (_flashState.pluginType === \"activex\" && \"readyState\" in flashBridge) {\n          flashBridge.style.display = \"none\";\n          (function removeSwfFromIE() {\n            if (flashBridge.readyState === 4) {\n              for (var prop in flashBridge) {\n                if (typeof flashBridge[prop] === \"function\") {\n                  flashBridge[prop] = null;\n                }\n              }\n              flashBridge.parentNode.removeChild(flashBridge);\n              if (htmlBridge.parentNode) {\n                htmlBridge.parentNode.removeChild(htmlBridge);\n              }\n            } else {\n              setTimeout(removeSwfFromIE, 10);\n            }\n          })();\n        } else {\n          flashBridge.parentNode.removeChild(flashBridge);\n          if (htmlBridge.parentNode) {\n            htmlBridge.parentNode.removeChild(htmlBridge);\n          }\n        }\n      }\n      _flashState.ready = null;\n      _flashState.bridge = null;\n      _flashState.deactivated = null;\n    }\n    ZeroClipboard.clearData();\n  };\n  ZeroClipboard.activate = function(element) {\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n    }\n    _currentElement = element;\n    _addClass(element, _globalConfig.hoverClass);\n    _reposition();\n    var newTitle = _globalConfig.title || element.getAttribute(\"title\");\n    if (newTitle) {\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.setAttribute(\"title\", newTitle);\n      }\n    }\n    var useHandCursor = _globalConfig.forceHandCursor === true || _getStyle(element, \"cursor\") === \"pointer\";\n    _setHandCursor(useHandCursor);\n  };\n  ZeroClipboard.deactivate = function() {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.removeAttribute(\"title\");\n      htmlBridge.style.left = \"0px\";\n      htmlBridge.style.top = \"-9999px\";\n      _setSize(1, 1);\n    }\n    if (_currentElement) {\n      _removeClass(_currentElement, _globalConfig.hoverClass);\n      _removeClass(_currentElement, _globalConfig.activeClass);\n      _currentElement = null;\n    }\n  };\n  ZeroClipboard.state = function() {\n    return {\n      browser: _pick(window.navigator, [ \"userAgent\", \"platform\", \"appName\" ]),\n      flash: _omit(_flashState, [ \"bridge\" ]),\n      zeroclipboard: {\n        version: ZeroClipboard.version,\n        config: ZeroClipboard.config()\n      }\n    };\n  };\n  ZeroClipboard.setData = function(format, data) {\n    var dataObj;\n    if (typeof format === \"object\" && format && typeof data === \"undefined\") {\n      dataObj = format;\n      ZeroClipboard.clearData();\n    } else if (typeof format === \"string\" && format) {\n      dataObj = {};\n      dataObj[format] = data;\n    } else {\n      return;\n    }\n    for (var dataFormat in dataObj) {\n      if (dataFormat && dataObj.hasOwnProperty(dataFormat) && typeof dataObj[dataFormat] === \"string\" && dataObj[dataFormat]) {\n        _clipData[dataFormat] = dataObj[dataFormat];\n      }\n    }\n  };\n  ZeroClipboard.clearData = function(format) {\n    if (typeof format === \"undefined\") {\n      _deleteOwnProperties(_clipData);\n      _clipDataFormatMap = null;\n    } else if (typeof format === \"string\" && _clipData.hasOwnProperty(format)) {\n      delete _clipData[format];\n    }\n  };\n  var _bridge = function() {\n    var flashBridge, len;\n    var container = document.getElementById(\"global-zeroclipboard-html-bridge\");\n    if (!container) {\n      var allowScriptAccess = _determineScriptAccess(window.location.host, _globalConfig);\n      var allowNetworking = allowScriptAccess === \"never\" ? \"none\" : \"all\";\n      var flashvars = _vars(_globalConfig);\n      var swfUrl = _globalConfig.swfPath + _cacheBust(_globalConfig.swfPath, _globalConfig);\n      container = _createHtmlBridge();\n      var divToBeReplaced = document.createElement(\"div\");\n      container.appendChild(divToBeReplaced);\n      document.body.appendChild(container);\n      var tmpDiv = document.createElement(\"div\");\n      var oldIE = _flashState.pluginType === \"activex\";\n      tmpDiv.innerHTML = '<object id=\"global-zeroclipboard-flash-bridge\" name=\"global-zeroclipboard-flash-bridge\" ' + 'width=\"100%\" height=\"100%\" ' + (oldIE ? 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\"' : 'type=\"application/x-shockwave-flash\" data=\"' + swfUrl + '\"') + \">\" + (oldIE ? '<param name=\"movie\" value=\"' + swfUrl + '\"/>' : \"\") + '<param name=\"allowScriptAccess\" value=\"' + allowScriptAccess + '\"/>' + '<param name=\"allowNetworking\" value=\"' + allowNetworking + '\"/>' + '<param name=\"menu\" value=\"false\"/>' + '<param name=\"wmode\" value=\"transparent\"/>' + '<param name=\"flashvars\" value=\"' + flashvars + '\"/>' + \"</object>\";\n      flashBridge = tmpDiv.firstChild;\n      tmpDiv = null;\n      flashBridge.ZeroClipboard = ZeroClipboard;\n      container.replaceChild(flashBridge, divToBeReplaced);\n    }\n    if (!flashBridge) {\n      flashBridge = document[\"global-zeroclipboard-flash-bridge\"];\n      if (flashBridge && (len = flashBridge.length)) {\n        flashBridge = flashBridge[len - 1];\n      }\n      if (!flashBridge) {\n        flashBridge = container.firstChild;\n      }\n    }\n    _flashState.bridge = flashBridge || null;\n  };\n  var _createHtmlBridge = function() {\n    var container = document.createElement(\"div\");\n    container.id = \"global-zeroclipboard-html-bridge\";\n    container.className = \"global-zeroclipboard-container\";\n    container.style.position = \"absolute\";\n    container.style.left = \"0px\";\n    container.style.top = \"-9999px\";\n    container.style.width = \"1px\";\n    container.style.height = \"1px\";\n    container.style.zIndex = \"\" + _getSafeZIndex(_globalConfig.zIndex);\n    return container;\n  };\n  var _getHtmlBridge = function(flashBridge) {\n    var htmlBridge = flashBridge && flashBridge.parentNode;\n    while (htmlBridge && htmlBridge.nodeName === \"OBJECT\" && htmlBridge.parentNode) {\n      htmlBridge = htmlBridge.parentNode;\n    }\n    return htmlBridge || null;\n  };\n  var _reposition = function() {\n    if (_currentElement) {\n      var pos = _getDOMObjectPosition(_currentElement, _globalConfig.zIndex);\n      var htmlBridge = _getHtmlBridge(_flashState.bridge);\n      if (htmlBridge) {\n        htmlBridge.style.top = pos.top + \"px\";\n        htmlBridge.style.left = pos.left + \"px\";\n        htmlBridge.style.width = pos.width + \"px\";\n        htmlBridge.style.height = pos.height + \"px\";\n        htmlBridge.style.zIndex = pos.zIndex + 1;\n      }\n      _setSize(pos.width, pos.height);\n    }\n  };\n  var _setSize = function(width, height) {\n    var htmlBridge = _getHtmlBridge(_flashState.bridge);\n    if (htmlBridge) {\n      htmlBridge.style.width = width + \"px\";\n      htmlBridge.style.height = height + \"px\";\n    }\n  };\n  ZeroClipboard.emit = function(event) {\n    var eventType, eventObj, performCallbackAsync, clients, i, len, eventCopy, returnVal, tmp;\n    if (typeof event === \"string\" && event) {\n      eventType = event;\n    }\n    if (typeof event === \"object\" && event && typeof event.type === \"string\" && event.type) {\n      eventType = event.type;\n      eventObj = event;\n    }\n    if (!eventType) {\n      return;\n    }\n    event = _createEvent(eventType, eventObj);\n    _preprocessEvent(event);\n    if (event.type === \"ready\" && _flashState.overdue === true) {\n      return ZeroClipboard.emit({\n        type: \"error\",\n        name: \"flash-overdue\"\n      });\n    }\n    performCallbackAsync = !/^(before)?copy$/.test(event.type);\n    if (event.client) {\n      _dispatchClientCallbacks.call(event.client, event, performCallbackAsync);\n    } else {\n      clients = event.target && event.target !== window && _globalConfig.autoActivate === true ? _getAllClientsClippedToElement(event.target) : _getAllClients();\n      for (i = 0, len = clients.length; i < len; i++) {\n        eventCopy = _extend({}, event, {\n          client: clients[i]\n        });\n        _dispatchClientCallbacks.call(clients[i], eventCopy, performCallbackAsync);\n      }\n    }\n    if (event.type === \"copy\") {\n      tmp = _mapClipDataToFlash(_clipData);\n      returnVal = tmp.data;\n      _clipDataFormatMap = tmp.formatMap;\n    }\n    return returnVal;\n  };\n  var _dispatchClientCallbacks = function(event, async) {\n    var handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers[event.type];\n    if (handlers && handlers.length) {\n      var i, len, func, context, originalContext = this;\n      for (i = 0, len = handlers.length; i < len; i++) {\n        func = handlers[i];\n        context = originalContext;\n        if (typeof func === \"string\" && typeof window[func] === \"function\") {\n          func = window[func];\n        }\n        if (typeof func === \"object\" && func && typeof func.handleEvent === \"function\") {\n          context = func;\n          func = func.handleEvent;\n        }\n        if (typeof func === \"function\") {\n          _dispatchCallback(func, context, [ event ], async);\n        }\n      }\n    }\n    return this;\n  };\n  var _eventMessages = {\n    ready: \"Flash communication is established\",\n    error: {\n      \"flash-disabled\": \"Flash is disabled or not installed\",\n      \"flash-outdated\": \"Flash is too outdated to support ZeroClipboard\",\n      \"flash-unavailable\": \"Flash is unable to communicate bidirectionally with JavaScript\",\n      \"flash-deactivated\": \"Flash is too outdated for your browser and/or is configured as click-to-activate\",\n      \"flash-overdue\": \"Flash communication was established but NOT within the acceptable time limit\"\n    }\n  };\n  var _createEvent = function(eventType, event) {\n    if (!(eventType || event && event.type)) {\n      return;\n    }\n    event = event || {};\n    eventType = (eventType || event.type).toLowerCase();\n    _extend(event, {\n      type: eventType,\n      target: event.target || _currentElement || null,\n      relatedTarget: event.relatedTarget || null,\n      currentTarget: _flashState && _flashState.bridge || null\n    });\n    var msg = _eventMessages[event.type];\n    if (event.type === \"error\" && event.name && msg) {\n      msg = msg[event.name];\n    }\n    if (msg) {\n      event.message = msg;\n    }\n    if (event.type === \"ready\") {\n      _extend(event, {\n        target: null,\n        version: _flashState.version\n      });\n    }\n    if (event.type === \"error\") {\n      event.target = null;\n      if (/^flash-(outdated|unavailable|deactivated|overdue)$/.test(event.name)) {\n        _extend(event, {\n          version: _flashState.version,\n          minimumVersion: \"11.0.0\"\n        });\n      }\n    }\n    if (event.type === \"copy\") {\n      event.clipboardData = {\n        setData: ZeroClipboard.setData,\n        clearData: ZeroClipboard.clearData\n      };\n    }\n    if (event.type === \"aftercopy\") {\n      event = _mapClipResultsFromFlash(event, _clipDataFormatMap);\n    }\n    if (event.target && !event.relatedTarget) {\n      event.relatedTarget = _getRelatedTarget(event.target);\n    }\n    return event;\n  };\n  var _getRelatedTarget = function(targetEl) {\n    var relatedTargetId = targetEl && targetEl.getAttribute && targetEl.getAttribute(\"data-clipboard-target\");\n    return relatedTargetId ? document.getElementById(relatedTargetId) : null;\n  };\n  var _preprocessEvent = function(event) {\n    var element = event.target || _currentElement;\n    switch (event.type) {\n     case \"error\":\n      if (_inArray(event.name, [ \"flash-disabled\", \"flash-outdated\", \"flash-deactivated\", \"flash-overdue\" ])) {\n        _extend(_flashState, {\n          disabled: event.name === \"flash-disabled\",\n          outdated: event.name === \"flash-outdated\",\n          unavailable: event.name === \"flash-unavailable\",\n          deactivated: event.name === \"flash-deactivated\",\n          overdue: event.name === \"flash-overdue\",\n          ready: false\n        });\n      }\n      break;\n\n     case \"ready\":\n      var wasDeactivated = _flashState.deactivated === true;\n      _extend(_flashState, {\n        disabled: false,\n        outdated: false,\n        unavailable: false,\n        deactivated: false,\n        overdue: wasDeactivated,\n        ready: !wasDeactivated\n      });\n      break;\n\n     case \"copy\":\n      var textContent, htmlContent, targetEl = event.relatedTarget;\n      if (!(_clipData[\"text/html\"] || _clipData[\"text/plain\"]) && targetEl && (htmlContent = targetEl.value || targetEl.outerHTML || targetEl.innerHTML) && (textContent = targetEl.value || targetEl.textContent || targetEl.innerText)) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n        if (htmlContent !== textContent) {\n          event.clipboardData.setData(\"text/html\", htmlContent);\n        }\n      } else if (!_clipData[\"text/plain\"] && event.target && (textContent = event.target.getAttribute(\"data-clipboard-text\"))) {\n        event.clipboardData.clearData();\n        event.clipboardData.setData(\"text/plain\", textContent);\n      }\n      break;\n\n     case \"aftercopy\":\n      ZeroClipboard.clearData();\n      if (element && element !== _safeActiveElement() && element.focus) {\n        element.focus();\n      }\n      break;\n\n     case \"mouseover\":\n      _addClass(element, _globalConfig.hoverClass);\n      break;\n\n     case \"mouseout\":\n      if (_globalConfig.autoActivate === true) {\n        ZeroClipboard.deactivate();\n      }\n      break;\n\n     case \"mousedown\":\n      _addClass(element, _globalConfig.activeClass);\n      break;\n\n     case \"mouseup\":\n      _removeClass(element, _globalConfig.activeClass);\n      break;\n    }\n  };\n  ZeroClipboard.prototype.on = function(eventName, func) {\n    var i, len, events, added = {}, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (typeof eventName === \"string\" && eventName) {\n      events = eventName.toLowerCase().split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.on(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].replace(/^on/, \"\");\n        added[eventName] = true;\n        if (!handlers[eventName]) {\n          handlers[eventName] = [];\n        }\n        handlers[eventName].push(func);\n      }\n      if (added.ready && _flashState.ready) {\n        ZeroClipboard.emit({\n          type: \"ready\",\n          client: this\n        });\n      }\n      if (added.error) {\n        var errorTypes = [ \"disabled\", \"outdated\", \"unavailable\", \"deactivated\", \"overdue\" ];\n        for (i = 0, len = errorTypes.length; i < len; i++) {\n          if (_flashState[errorTypes[i]]) {\n            ZeroClipboard.emit({\n              type: \"error\",\n              name: \"flash-\" + errorTypes[i],\n              client: this\n            });\n            break;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.off = function(eventName, func) {\n    var i, len, foundIndex, events, perEventHandlers, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (arguments.length === 0) {\n      events = _objectKeys(handlers);\n    } else if (typeof eventName === \"string\" && eventName) {\n      events = eventName.split(/\\s+/);\n    } else if (typeof eventName === \"object\" && eventName && typeof func === \"undefined\") {\n      for (i in eventName) {\n        if (eventName.hasOwnProperty(i) && typeof i === \"string\" && i && typeof eventName[i] === \"function\") {\n          this.off(i, eventName[i]);\n        }\n      }\n    }\n    if (events && events.length) {\n      for (i = 0, len = events.length; i < len; i++) {\n        eventName = events[i].toLowerCase().replace(/^on/, \"\");\n        perEventHandlers = handlers[eventName];\n        if (perEventHandlers && perEventHandlers.length) {\n          if (func) {\n            foundIndex = _inArray(func, perEventHandlers);\n            while (foundIndex !== -1) {\n              perEventHandlers.splice(foundIndex, 1);\n              foundIndex = _inArray(func, perEventHandlers, foundIndex);\n            }\n          } else {\n            handlers[eventName].length = 0;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.handlers = function(eventName) {\n    var prop, copy = null, handlers = _clientMeta[this.id] && _clientMeta[this.id].handlers;\n    if (handlers) {\n      if (typeof eventName === \"string\" && eventName) {\n        return handlers[eventName] ? handlers[eventName].slice(0) : null;\n      }\n      copy = {};\n      for (prop in handlers) {\n        if (handlers.hasOwnProperty(prop) && handlers[prop]) {\n          copy[prop] = handlers[prop].slice(0);\n        }\n      }\n    }\n    return copy;\n  };\n  ZeroClipboard.prototype.clip = function(elements) {\n    elements = _prepClip(elements);\n    for (var i = 0; i < elements.length; i++) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        if (!elements[i].zcClippingId) {\n          elements[i].zcClippingId = \"zcClippingId_\" + _elementIdCounter++;\n          _elementMeta[elements[i].zcClippingId] = [ this.id ];\n          if (_globalConfig.autoActivate === true) {\n            _addEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n          }\n        } else if (_inArray(this.id, _elementMeta[elements[i].zcClippingId]) === -1) {\n          _elementMeta[elements[i].zcClippingId].push(this.id);\n        }\n        var clippedElements = _clientMeta[this.id].elements;\n        if (_inArray(elements[i], clippedElements) === -1) {\n          clippedElements.push(elements[i]);\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.unclip = function(elements) {\n    var meta = _clientMeta[this.id];\n    if (!meta) {\n      return this;\n    }\n    var clippedElements = meta.elements;\n    var arrayIndex;\n    if (typeof elements === \"undefined\") {\n      elements = clippedElements.slice(0);\n    } else {\n      elements = _prepClip(elements);\n    }\n    for (var i = elements.length; i--; ) {\n      if (elements.hasOwnProperty(i) && elements[i] && elements[i].nodeType === 1) {\n        arrayIndex = 0;\n        while ((arrayIndex = _inArray(elements[i], clippedElements, arrayIndex)) !== -1) {\n          clippedElements.splice(arrayIndex, 1);\n        }\n        var clientIds = _elementMeta[elements[i].zcClippingId];\n        if (clientIds) {\n          arrayIndex = 0;\n          while ((arrayIndex = _inArray(this.id, clientIds, arrayIndex)) !== -1) {\n            clientIds.splice(arrayIndex, 1);\n          }\n          if (clientIds.length === 0) {\n            if (_globalConfig.autoActivate === true) {\n              _removeEventHandler(elements[i], \"mouseover\", _elementMouseOver);\n            }\n            delete elements[i].zcClippingId;\n          }\n        }\n      }\n    }\n    return this;\n  };\n  ZeroClipboard.prototype.elements = function() {\n    var meta = _clientMeta[this.id];\n    return meta && meta.elements ? meta.elements.slice(0) : [];\n  };\n  var _getAllClientsClippedToElement = function(element) {\n    var elementMetaId, clientIds, i, len, client, clients = [];\n    if (element && element.nodeType === 1 && (elementMetaId = element.zcClippingId) && _elementMeta.hasOwnProperty(elementMetaId)) {\n      clientIds = _elementMeta[elementMetaId];\n      if (clientIds && clientIds.length) {\n        for (i = 0, len = clientIds.length; i < len; i++) {\n          client = _clientMeta[clientIds[i]].instance;\n          if (client && client instanceof ZeroClipboard) {\n            clients.push(client);\n          }\n        }\n      }\n    }\n    return clients;\n  };\n  _globalConfig.hoverClass = \"zeroclipboard-is-hover\";\n  _globalConfig.activeClass = \"zeroclipboard-is-active\";\n  if (typeof define === \"function\" && define.amd) {\n    define(function() {\n      return ZeroClipboard;\n    });\n  } else if (typeof module === \"object\" && module && typeof module.exports === \"object\" && module.exports) {\n    module.exports = ZeroClipboard;\n  } else {\n    window.ZeroClipboard = ZeroClipboard;\n  }\n})(function() {\n  return this;\n}());"
  },
  {
    "path": "ueditor.config.js",
    "content": "/**\n * ueditor plus 完整配置项\n * 可以在这里配置整个编辑器的特性\n */\n/**************************提示********************************\n * 所有被注释的配置项均为UEditor默认值。\n * 修改默认配置请首先确保已经完全明确该参数的真实用途。\n * 主要有两种修改方案，一种是取消此处注释，然后修改成对应参数；另一种是在实例化编辑器时传入对应参数。\n * 当升级编辑器时，可直接使用旧版配置文件替换新版配置文件,不用担心旧版配置文件中因缺少新功能所需的参数而导致脚本报错。\n **************************提示********************************/\n\n(function () {\n    // 资源文件根路径，如果你的页面不是放在根目录下，请注意修改这个路径\n    // 通常情况下这个可以配置成静态资源CDN的地址\n    var URL, CORS_URL;\n    if (window.UEDITOR_HOME_URL) {\n        URL = window.UEDITOR_HOME_URL;\n    } else if (window.__msCDN) {\n        URL = window.__msCDN + 'asset/vendor/ueditor/';\n    } else if (window.__msRoot) {\n        URL = window.__msRoot + 'asset/vendor/ueditor/';\n    } else {\n        URL = getUEBasePath();\n    }\n    // 需要能跨域的静态资源请求，主要用户弹窗页面等静态资源\n    // 通常情况下这个可以配置成静态资源CDN的地址\n    if (window.UEDITOR_CORS_URL) {\n        CORS_URL = window.UEDITOR_CORS_URL;\n    } else if (window.__msRoot) {\n        CORS_URL = window.__msRoot + 'asset/vendor/ueditor/';\n    } else if (window.UEDITOR_HOME_URL) {\n        CORS_URL = window.UEDITOR_HOME_URL;\n    } else {\n        CORS_URL = getUEBasePath();\n    }\n\n    /**\n     * 配置项主体。注意，此处所有涉及到路径的配置别遗漏URL变量。\n     */\n    window.UEDITOR_CONFIG = {\n\n        // 为编辑器实例添加一个路径，这个不能被注释\n        UEDITOR_HOME_URL: URL,\n        // 需要能跨域的静态资源请求，主要用户弹窗页面等静态资源\n        UEDITOR_CORS_URL: CORS_URL,\n\n        // 是否开启Debug模式\n        debug: false,\n\n        // 服务器统一请求接口路径\n        serverUrl: \"/ueditor-plus/_demo_server/handle.php\",\n\n        // 从服务器获取配置\n        loadConfigFromServer: true,\n\n        // 服务器统一请求头信息，会在所有请求中带上该信息\n        serverHeaders: {\n            // 'Authorization': 'Bearer xxx'\n        },\n        // 服务器返回参数统一转换方法，可以在这里统一处理返回参数\n        serverResponsePrepare: function (res) {\n            // console.log('serverResponsePrepare', res);\n            return res;\n        },\n\n        //工具栏上的所有的功能按钮和下拉框，可以在new编辑器的实例时选择自己需要的重新定义\n        toolbars: [\n            [\n                \"fullscreen\",   // 全屏\n                \"source\",       // 源代码\n                \"|\",\n                \"undo\",         // 撤销\n                \"redo\",         // 重做\n                \"|\",\n                \"bold\",         // 加粗\n                \"italic\",       // 斜体\n                \"underline\",    // 下划线\n                \"fontborder\",   // 字符边框\n                \"strikethrough\",// 删除线\n                \"superscript\",  // 上标\n                \"subscript\",    // 下标\n                \"removeformat\", // 清除格式\n                \"formatmatch\",  // 格式刷\n                \"autotypeset\",  // 自动排版\n                \"blockquote\",   // 引用\n                \"pasteplain\",   // 纯文本粘贴模式\n                \"|\",\n                \"forecolor\",    // 字体颜色\n                \"backcolor\",    // 背景色\n                \"insertorderedlist\",   // 有序列表\n                \"insertunorderedlist\", // 无序列表\n                \"selectall\",    // 全选\n                \"cleardoc\",     // 清空文档\n                \"|\",\n                \"rowspacingtop\",// 段前距\n                \"rowspacingbottom\",    // 段后距\n                \"lineheight\",          // 行间距\n                \"letterspacing\",       // 字间距\n                \"|\",\n                \"customstyle\",         // 自定义标题\n                \"paragraph\",           // 段落格式\n                \"fontfamily\",          // 字体\n                \"fontsize\",            // 字号\n                \"|\",\n                \"directionalityltr\",   // 从左向右输入\n                \"directionalityrtl\",   // 从右向左输入\n                \"indent\",              // 首行缩进\n                \"|\",\n                \"justifyleft\",         // 居左对齐\n                \"justifycenter\",       // 居中对齐\n                \"justifyright\",\n                \"justifyjustify\",      // 两端对齐\n                \"|\",\n                \"touppercase\",         // 字母大写\n                \"tolowercase\",         // 字母小写\n                \"|\",\n                \"link\",                // 超链接\n                \"unlink\",              // 取消链接\n                \"anchor\",              // 锚点\n                \"|\",\n                \"imagenone\",           // 图片默认\n                \"imageleft\",           // 图片左浮动\n                \"imagecenter\",         // 图片居中\n                \"imageright\",          // 图片右浮动\n                \"|\",\n                \"simpleupload\",        // 单图上传\n                \"insertimage\",         // 多图上传\n                \"emotion\",             // 表情\n                \"scrawl\",              // 涂鸦\n                \"insertvideo\",         // 视频\n                \"insertaudio\",         // 音频\n                \"attachment\",          // 附件\n                \"insertframe\",         // 插入Iframe\n                \"insertcode\",          // 插入代码\n                \"pagebreak\",           // 分页\n                \"template\",            // 模板\n                \"background\",          // 背景\n                \"formula\",             // 公式\n                \"|\",\n                \"horizontal\",          // 分隔线\n                \"date\",                // 日期\n                \"time\",                // 时间\n                \"spechars\",            // 特殊字符\n                \"wordimage\",           // Word图片转存\n                \"|\",\n                \"inserttable\",         // 插入表格\n                \"deletetable\",         // 删除表格\n                \"insertparagraphbeforetable\",     // 表格前插入行\n                \"insertrow\",           // 前插入行\n                \"deleterow\",           // 删除行\n                \"insertcol\",           // 前插入列\n                \"deletecol\",           // 删除列\n                \"mergecells\",          // 合并多个单元格\n                \"mergeright\",          // 右合并单元格\n                \"mergedown\",           // 下合并单元格\n                \"splittocells\",        // 完全拆分单元格\n                \"splittorows\",         // 拆分成行\n                \"splittocols\",         // 拆分成列\n                \"|\",\n                \"print\",               // 打印\n                \"preview\",             // 预览\n                \"searchreplace\",       // 查询替换\n                \"|\",\n                \"contentimport\",\n                \"ai\",\n                \"help\",                // 帮助\n            ]\n        ]\n        // 动态选项配置，该值可以通过后端配置接口动态返回，动态控制toolbars的功能\n        , toolbarShows: {\n            // \"ai\": false,\n        }\n\n        // 自定义工具栏按钮点击，返回 true 表示已经处理点击，会阻止默认事件\n        , toolbarCallback: function (cmd, editor) {\n            // console.log('toolbarCallback',cmd, editor);\n            // switch(cmd){\n            //   case 'insertimage':\n            //     editor.execCommand('insertHtml', '<p><img src=\"xxxxx\" /></p>');\n            //     console.log('toolbarCallback',cmd, editor)\n            //     return true;\n            //   case 'insertvideo':\n            //     editor.execCommand('insertHtml', '<p><iframe src=\"xxxxx\" /></p>');\n            //     console.log('toolbarCallback',cmd, editor)\n            //     return true;\n            //   case 'attachment':\n            //     console.log('toolbarCallback',cmd, editor)\n            //     editor.execCommand('insertHtml', '<p><a href=\"xxx.zip\">下载文件</a></p>');\n            //     return true;\n            // }\n        }\n\n        // 自定义上传功能\n        , uploadServiceEnable: false\n        // 自定义上传函数，需要在这个函数中实现自定义上传逻辑\n        // type 上传类型，image 图片，video 视频，audio 音频，attachment 附件\n        // file 文件对象\n        // callback 回调函数，需要在上传完成后调用 callback.success、callback.error、callback.progress\n        // option 上传配置，其他一些未来扩展配置\n        , uploadServiceUpload: function (type, file, callback, option) {\n            console.log('uploadServiceUpload', type, file, callback, option);\n            // var i = 0;\n            // var call = function(){\n            //     i++;\n            //     if(i > 3){\n            //         callback.success({\n            //             \"state\": \"SUCCESS\",\n            //             \"url\": \"https://ms-assets.modstart.com/demo/modstart.jpg\",\n            //         })\n            //         return;\n            //     }\n            //     setTimeout(function(){\n            //         callback.progress(0.3 * i);\n            //         call();\n            //     },500);\n            // }\n            // call();\n        }\n\n        // 插入图片自定义配置\n        , imageConfig: {\n            // 禁止本地上传\n            disableUpload: false,\n            // 禁止在线管理\n            disableOnline: false,\n            // 自定义选择按钮\n            selectCallback: null,\n            // selectCallback: function(editor,cb){\n            //     console.log('selectCallback',cb);\n            //     setTimeout(function(){\n            //       cb({\n            //         path:'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',\n            //         name:'测试图片'\n            //       });\n            //     },1000);\n            // }\n        }\n\n        // 插入视频配置\n        , videoConfig: {\n            // 禁止本地上传,\n            disableUpload: false,\n            // 自定义选择按钮\n            selectCallback: null,\n            // selectCallback: function(editor,cb){\n            //     console.log('selectCallback',cb);\n            //     setTimeout(function(){\n            //       cb({\n            //         path:'https://www.bilibili.com/video/BV1y44y1g7NR?spm_id_from=333.1007.tianma.1-1-1.click',\n            //         name:'测试视频'\n            //       });\n            //     },1000);\n            // }\n        }\n\n        // 插入音频配置\n        , audioConfig: {\n            // 禁止本地上传,\n            disableUpload: false,\n            // 自定义选择按钮\n            selectCallback: null,\n            // selectCallback: function(editor,cb){\n            //     console.log('selectCallback',cb);\n            //     setTimeout(function(){\n            //       cb({\n            //         path:'https://example.com/test.mp3',\n            //         name:'测试音频'\n            //       });\n            //     },1000);\n            // }\n        }\n\n        // 公式配置\n        , formulaConfig: {\n            // 公式渲染链接模板\n            imageUrlTemplate: 'https://r.latexeasy.com/image.svg?{}',\n            // 编辑器模式 plain live\n            editorMode: 'live',\n            // 编辑器地址\n            editorLiveServer: 'https://latexeasy.com',\n        }\n\n        // 自动保存\n        , autoSaveEnable: true\n        // 浏览器初始化时自动恢复上一次的内容\n        , autoSaveRestore: false\n        // 自动保存Key，为空时根据网址自动计算\n        , autoSaveKey: null\n\n        //当鼠标放在工具栏上时显示的tooltip提示,留空支持自动多语言配置，否则以配置值为准\n        //,labelMap:{\n        //    'anchor':'', 'undo':''\n        //}\n\n        //语言配置项,默认是zh-cn。有需要的话也可以使用如下这样的方式来自动多语言切换，当然，前提条件是lang文件夹下存在对应的语言文件：\n        //lang值也可以通过自动获取 (navigator.language||navigator.browserLanguage ||navigator.userLanguage).toLowerCase()\n        //,lang:\"zh-cn\"\n        //,langPath:URL +\"lang/\"\n\n        //主题配置项,默认是default。有需要的话也可以使用如下这样的方式来自动多主题切换，当然，前提条件是themes文件夹下存在对应的主题文件：\n        //现有如下皮肤:default\n        //,theme:'default'\n        //,themePath:URL +\"themes/\"\n\n        //,zIndex : 900     //编辑器层级的基数,默认是900\n\n        //针对getAllHtml方法，会在对应的head标签中增加该编码设置。\n        //,charset:\"utf-8\"\n\n        //若实例化编辑器的页面手动修改的domain，此处需要设置为true\n        //,customDomain:false\n\n        // 默认显示编辑器\n        //,isShow : true\n\n        // 提交表单时，服务器获取编辑器提交内容的所用的参数，多实例时可以给容器name属性，会将name给定的值最为每个实例的键值，不用每次实例化的时候都设置这个值\n        //,textarea:'editorValue'\n\n        // 初始化编辑器的内容，也可以通过 textarea/script 给值\n        , initialContent: ''\n\n        //,autoClearinitialContent:true //是否自动清除编辑器初始内容，注意：如果focus属性设置为true,这个也为真，那么编辑器一上来就会触发导致初始化的内容看不到了\n\n        // 初始化时，是否让编辑器获得焦点\n        , focus: false\n\n        // 编辑区自定义样式，如果自定义，最好给 p 标签如下的行高，要不输入中文时，会有跳动感\n        , initialStyle: '' // p{line-height:1em}\n\n        //,iframeJsUrl: '' //给编辑区域的iframe引入一个js文件\n        //,iframeCssUrl: URL + '/themes/iframe.css' //给编辑区域的iframe引入一个css文件\n        // 给编辑器引入更多样式文件\n        //,iframeCssUrlsAddition: []\n        // 给编辑器引入更多内联样式\n        //,iframeCssStylesAddition: []\n\n        // 首行缩进距离,默认是 2em\n        , indentValue: '2em'\n\n        // 初始化编辑器宽度,默认 1000\n        // ,initialFrameWidth:1000\n        // 初始化编辑器高度,默认 320\n        // ,initialFrameHeight:320\n\n        // 编辑器初始化结束后,编辑区域是否是只读的，默认是false\n        , readonly: false\n\n        // getContent时，是否删除空的inlineElement节点（包括嵌套的情况）\n        , autoClearEmptyNode: true\n\n        // 启用拖放上传\n        //,enableDragUpload: true\n        // 启用粘贴上传\n        //,enablePasteUpload: true\n\n        // 启用图片拉伸缩放\n        //,imageScaleEnabled: true\n\n        // 是否开启初始化时即全屏，默认关闭\n        , fullscreen: false\n\n        // 图片操作的浮层开关，默认打开\n        //,imagePopup:true\n\n        // 自动同步编辑器要提交的数据\n        //,autoSyncData:true\n        // 是否开启表情本地化，默认关闭。若要开启请确保emotion文件夹下包含官网提供的images表情文件夹\n        //,emotionLocalization:false\n\n        // 粘贴只保留标签，去除标签所有属性\n        //,retainOnlyLabelPasted: false\n\n        // 是否默认为纯文本粘贴。false为不使用纯文本粘贴，true为使用纯文本粘贴\n        //,pasteplain:false\n        // 纯文本粘贴模式下的过滤规则\n        //'filterTxtRules' : function(){\n        //    function transP(node){\n        //        node.tagName = 'p';\n        //        node.setStyle();\n        //    }\n        //    return {\n        //        //直接删除及其字节点内容\n        //        '-' : 'script style object iframe embed input select',\n        //        'p': {$:{}},\n        //        'br':{$:{}},\n        //        'div':{'$':{}},\n        //        'li':{'$':{}},\n        //        'caption':transP,\n        //        'th':transP,\n        //        'tr':transP,\n        //        'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,\n        //        'td':function(node){\n        //            //没有内容的td直接删掉\n        //            var txt = !!node.innerText();\n        //            if(txt){\n        //                node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);\n        //            }\n        //            node.parentNode.removeChild(node,node.innerText())\n        //        }\n        //    }\n        //}()\n\n        // 提交到后台的数据是否包含整个html字符串\n        , allHtmlEnabled: false\n\n        //有序列表的下拉配置,值留空时支持多语言自动识别，若配置值，则以此值为准\n        //,'insertorderedlist':{\n        //     'decimal' : '' ,         //'1,2,3...'\n        //     'lower-alpha' : '' ,    // 'a,b,c...'\n        //     'lower-roman' : '' ,    //'i,ii,iii...'\n        //     'upper-alpha' : '' , lang   //'A,B,C'\n        //     'upper-roman' : ''      //'I,II,III...'\n        //}\n\n        //insertunorderedlist\n        //无序列表的下拉配置，值留空时支持多语言自动识别，若配置值，则以此值为准\n        //,insertunorderedlist : { //自定的样式\n        //    'circle' : '',  // '○ 小圆圈'\n        //    'disc' : '',    // '● 小圆点'\n        //    'square' : ''   //'■ 小方块'\n        //}\n        //,listDefaultPaddingLeft : '30'//默认的左边缩进的基数倍\n        //,listiconpath : 'http://bs.baidu.com/listicon/'//自定义标号的路径\n        //,maxListLevel : 3 //限制可以tab的级数, 设置-1为不限制\n\n        //,autoTransWordToList:false  //禁止word中粘贴进来的列表自动变成列表标签\n\n        // 字体设置 label 留空支持多语言自动切换，若配置，则以配置值为准\n        //,'fontfamily':[\n        //    { label:'',name:'songti',val:'宋体,SimSun'},\n        //    { label:'',name:'kaiti',val:'楷体,楷体_GB2312, SimKai'},\n        //    { label:'',name:'yahei',val:'微软雅黑,Microsoft YaHei'},\n        //    { label:'',name:'heiti',val:'黑体, SimHei'},\n        //    { label:'',name:'lishu',val:'隶书, SimLi'},\n        //    { label:'',name:'andaleMono',val:'andale mono'},\n        //    { label:'',name:'arial',val:'arial, helvetica,sans-serif'},\n        //    { label:'',name:'arialBlack',val:'arial black,avant garde'},\n        //    { label:'',name:'comicSansMs',val:'comic sans ms'},\n        //    { label:'',name:'impact',val:'impact,chicago'},\n        //    { label:'',name:'timesNewRoman',val:'times new roman'}\n        //]\n\n        // 字号\n        //,'fontsize':[10, 11, 12, 14, 16, 18, 20, 24, 36]\n\n        // 段落格式 值留空时支持多语言自动识别，若配置，则以配置值为准\n        //,'paragraph':{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''}\n\n        // 段间距 值和显示的名字相同\n        //,'rowspacingtop':['5', '10', '15', '20', '25']\n\n        // 段间距 值和显示的名字相同\n        //,'rowspacingbottom':['5', '10', '15', '20', '25']\n\n        //行内间距 值和显示的名字相同\n        //,'lineheight':['1', '1.5','1.75','2', '3', '4', '5']\n\n        // customstyle\n        //自定义样式，不支持国际化，此处配置值即可最后显示值\n        //block的元素是依据设置段落的逻辑设置的，inline的元素依据BIU的逻辑设置\n        //尽量使用一些常用的标签\n        //参数说明\n        //tag 使用的标签名字\n        //label 显示的名字也是用来标识不同类型的标识符，注意这个值每个要不同，\n        //style 添加的样式\n        //每一个对象就是一个自定义的样式\n        //,'customstyle':[\n        //    {tag:'h1', name:'tc', label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},\n        //    {tag:'h1', name:'tl',label:'', style:'border-bottom:#ccc 2px solid;padding:0 4px 0 0;margin:0 0 10px 0;'},\n        //    {tag:'span',name:'im', label:'', style:'font-style:italic;font-weight:bold'},\n        //    {tag:'span',name:'hi', label:'', style:'font-style:italic;font-weight:bold;color:rgb(51, 153, 204)'}\n        //]\n\n        // 打开右键菜单功能\n        , enableContextMenu: true\n        //右键菜单的内容，可以参考plugins/contextmenu.js里边的默认菜单的例子，label留空支持国际化，否则以此配置为准\n        //,contextMenu:[\n        //    {\n        //        label:'',       //显示的名称\n        //        cmdName:'selectall',//执行的command命令，当点击这个右键菜单时\n        //        //exec可选，有了exec就会在点击时执行这个function，优先级高于cmdName\n        //        exec:function () {\n        //            //this是当前编辑器的实例\n        //            //this.ui._dialogs['inserttableDialog'].open();\n        //        }\n        //    }\n        //]\n\n        //快捷菜单\n        , shortcutMenu: [\n            \"ai\",           // AI智能\n            // \"fontfamily\",   // 字体\n            // \"fontsize\",     // 字号\n            \"bold\",            // 加粗\n            \"italic\",          // 斜体\n            \"underline\",       // 下划线\n            \"strikethrough\",   // 删除线\n            \"fontborder\",      // 字符边框\n            \"forecolor\",       // 字体颜色\n            \"backcolor\",       // 背景色\n            \"imagenone\",       // 图片默认\n            \"imageleft\",       // 图片左浮动\n            \"imagecenter\",     // 图片居中\n            \"imageright\",      // 图片右浮动\n            \"insertimage\",     // 插入图片\n            \"formula\",\n            // \"justifyleft\",    // 居左对齐\n            // \"justifycenter\",  // 居中对齐\n            // \"justifyright\",   // 居右对齐\n            // \"justifyjustify\", // 两端对齐\n            // \"rowspacingtop\",     // 段前距\n            // \"rowspacingbottom\",  // 段后距\n            // \"lineheight\",           // 行间距\n            // \"insertorderedlist\",    // 有序列表\n            // \"insertunorderedlist\",  // 无序列表\n            // \"superscript\",    // 上标\n            // \"subscript\",      // 下标\n            // \"link\",           // 超链接\n            // \"unlink\",         // 取消链接\n            // \"touppercase\",    // 字母大写\n            // \"tolowercase\"     // 字母小写\n        ]\n        // 动态选项配置，该值可以通过后端配置接口动态返回，动态控制shortcutMenu的功能\n        , shortcutMenuShows: {\n            // \"ai\": false,\n        }\n\n        // 是否启用元素路径，默认是显示\n        , elementPathEnabled: true\n        // 是否开启字数统计\n        , wordCount: true\n        // 允许的最大字符数\n        , maximumWords: 10000\n        //字数统计提示，{#count} 代表当前字数，{#leave}代表还可以输入多少字符数,留空支持多语言自动切换，否则按此配置显示\n        //,wordCountMsg:''   //当前已输入 {#count} 个字符，您还可以输入{#leave} 个字符\n        //超出字数限制提示  留空支持多语言自动切换，否则按此配置显示\n        //,wordOverFlowMsg:''    //<span style=\"color:red;\">你输入的字符个数已经超出最大允许值，服务器可能会拒绝保存！</span>\n\n        // 点击tab键时移动的距离,tabSize倍数，tabNode什么字符做为单位\n        //,tabSize:4\n        //,tabNode:'&nbsp;'\n\n        // 清除格式时可以删除的标签\n        //,removeFormatTags:'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var'\n        // 清除格式时可以删除的属性\n        //,removeFormatAttributes:'class,style,lang,width,height,align,hspace,valign'\n\n        // 可以最多撤销退回的次数，默认20\n        , maxUndoCount: 20\n        // 当输入的字符数超过该值时，保存一次现场\n        , maxInputCount: 1\n\n        // 是否自动长高,默认true\n        , autoHeightEnabled: true\n\n        // 是否可以拉伸长高，默认true(当开启时，自动长高失效)\n        //,scaleEnabled:false\n        //,minFrameWidth:800    //编辑器拖动时最小宽度,默认800\n\n        // 编辑器最小高度,默认220\n        , minFrameHeight: 220\n\n        // 是否保持toolbar的位置不动,默认true\n        , autoFloatEnabled: true\n        // 浮动时工具栏距离浏览器顶部的高度，用于某些具有固定头部的页面\n        , topOffset: 0\n        // 编辑器底部距离工具栏高度(如果参数大于等于编辑器高度，则设置无效)\n        , toolbarTopOffset: 0\n\n        //设置远程图片是否抓取到本地保存\n        , catchRemoteImageEnable: true //设置是否抓取远程图片\n\n        //pageBreakTag\n        //分页标识符,默认是_ueditor_page_break_tag_\n        //,pageBreakTag:'_ueditor_page_break_tag_'\n\n        // 自动排版参数\n        , autotypeset: {\n            // 合并空行\n            mergeEmptyline: true,\n            // 去掉冗余的class\n            removeClass: true,\n            // 去掉空行\n            removeEmptyline: false,\n            // 段落的排版方式，可以是 left,right,center,justify 去掉这个属性表示不执行排版\n            textAlign: \"left\",\n            // 图片的浮动方式，独占一行剧中,左右浮动，默认: center,left,right,none 去掉这个属性表示不执行排版\n            imageBlockLine: \"center\",\n            // 根据规则过滤没事粘贴进来的内容\n            pasteFilter: false,\n            // 去掉所有的内嵌字号，使用编辑器默认的字号\n            clearFontSize: false,\n            // 去掉所有的内嵌字体，使用编辑器默认的字体\n            clearFontFamily: false,\n            // 去掉空节点\n            removeEmptyNode: false,\n            // 可以去掉的标签\n            removeTagNames: {div: 1},\n            // 行首缩进\n            indent: false,\n            // 行首缩进的大小\n            indentValue: \"2em\",\n            // 全角转半角\n            bdc2sb: false,\n            // 半角转全角\n            tobdc: false\n        }\n\n        //表格是否可以拖拽\n        //,tableDragable: true\n\n        //sourceEditor\n        //源码的查看方式,codemirror 是代码高亮，textarea是文本框,默认是codemirror\n        //注意默认codemirror只能在ie8+和非ie中使用\n        //,sourceEditor:\"codemirror\"\n        //如果sourceEditor是codemirror，还用配置一下两个参数\n        //codeMirrorJsUrl js加载的路径，默认是 URL + \"third-party/codemirror/codemirror.js\"\n        //,codeMirrorJsUrl:URL + \"third-party/codemirror/codemirror.js\"\n        //codeMirrorCssUrl css加载的路径，默认是 URL + \"third-party/codemirror/codemirror.css\"\n        //,codeMirrorCssUrl:URL + \"third-party/codemirror/codemirror.css\"\n        //编辑器初始化完成后是否进入源码模式，默认为否。\n        //,sourceEditorFirst:false\n\n        //iframeUrlMap\n        //dialog内容的路径 ～会被替换成URL,垓属性一旦打开，将覆盖所有的dialog的默认路径\n        //,iframeUrlMap:{\n        //    'anchor':'~/dialogs/anchor/anchor.html',\n        //}\n\n        //allowLinkProtocol 允许的链接地址，有这些前缀的链接地址不会自动添加http\n        //, allowLinkProtocols: ['http:', 'https:', '#', '/', 'ftp:', 'mailto:', 'tel:', 'git:', 'svn:']\n\n        // AI智能相关配置\n        , ai: {\n            // 大模型驱动\n            // ModStart\n            // OpenAi、DeepSeek、Anthropic、Google、Baidu、Alibaba、Tencent、Huawei\n            // ByteDance、Zhipu、Moonshot、iFlytek、Volcengine\n            driver: 'OpenAi',\n            // 大模型对接配置\n            driverConfig: {\n                // 模型API地址，留空使用默认\n                url: '',\n                // 大模型平台Key\n                key: '',\n                // 大模型平台模型\n                model: '',\n            },\n            // 自定义接入\n            // driverRequest: function (option) {\n            //     var texts = []\n            //     var mock = function () {\n            //         var text = '测试' + (i++)\n            //         texts.push(text)\n            //         if (texts.length >= 10) {\n            //             // 调用 onFinish 方法表示结束\n            //             option.onFinish({code: 0, msg: 'ok', data: {text: texts.join(\"\")}})\n            //             return\n            //         }\n            //         // 调用 onStream 方法模拟流式返回\n            //         option.onStream({code: 0, msg: 'ok', data: {text: text}})\n            //         setTimeout(mock, 50);\n            //     };\n            //     mock();\n            // },\n        }\n        , aiFunctions: [\n            {\n                name: 'translate',\n                text: '<i class=\"edui-iconfont edui-icon-translate\"></i> 翻译',\n                systemPrompt: \"你是一个专业的翻译专家，擅长在中文和英文之间进行准确、自然的翻译。请将提供的文本翻译成目标语言，保持原文的含义、语气和上下文。只返回翻译后的内容，不要添加任何额外说明。\",\n                prompt: '{selectText}',\n                enable: function (param) {\n                    return !!param.selectText\n                }\n            },\n            {\n                name: 'continueWrite',\n                text: '<i class=\"edui-iconfont edui-icon-continue-write\"></i> 续写',\n                systemPrompt: \"你是一个优秀的内容创作者，能够根据用户选中的文本进行自然流畅的续写。请续写内容，使其与原有文本无缝衔接，并保持一致的风格和主题。只返回续写后的内容，不要添加任何额外说明。\",\n                prompt: '{selectText}',\n                enable: function (param) {\n                    return !!param.selectText\n                }\n            },\n            {\n                name: 'summarize',\n                text: '<i class=\"edui-iconfont edui-icon-text-shrink\"></i> 简化内容',\n                systemPrompt: \"你是一个内容简化专家，能够将复杂的内容用简单易懂的语言表达出来。请简化提供的文本，使其更易理解，同时保留核心信息。只返回简化后的内容，不要添加任何额外说明。\",\n                prompt: '{selectText}',\n                enable: function (param) {\n                    return !!param.selectText\n                }\n            },\n            {\n                name: 'extend',\n                text: '<i class=\"edui-iconfont edui-icon-text-extend\"></i> 丰富内容',\n                systemPrompt: \"你是一个内容扩展专家，能够将简短的内容进行扩展，增加细节和描述，使其更加丰富。请扩展提供的文本，添加相关细节、例子或解释，以增强内容的深度和吸引力。只返回扩展后的内容，不要添加任何额外说明。\",\n                prompt: '{selectText}',\n                enable: function (param) {\n                    return !!param.selectText\n                }\n            },\n            {\n                name: 'optimizeWhole',\n                text: '<i class=\"edui-iconfont edui-icon-robot\"></i> 优化整篇内容',\n                systemPrompt: \"你是一个专业的写作优化专家，擅长提升文章的整体质量和可读性。请对提供的整篇文章进行润色和优化，包括但不限于：语法修正、结构调整、逻辑梳理、表达优化。确保文章流畅、清晰、有吸引力，同时保持原文的核心内容、意图和风格不变。可以适当添加Emoji表情来增强可读性，但不要过度使用。输出必须是有效的HTML内容（body部分），不要包含<html>或<body>标签本身，也不要添加任何额外的说明或注释。\",\n                prompt: '{html}',\n                enable: function (param) {\n                    return true;\n                },\n                param: {\n                    showInsert: false,\n                    showReplace: false,\n                    showReplaceAll: true,\n                },\n            }\n        ]\n\n        //默认过滤规则相关配置项目\n        //,disabledTableInTable:true  //禁止表格嵌套\n        // 允许进入编辑器的 div 标签自动变成 p 标签\n        , allowDivTransToP: true\n        // 默认产出的数据中的color自动从rgb格式变成16进制格式\n        , rgb2Hex: true,\n\n        tipError: function (msg, param) {\n            if (window && window.MS && window.MS.dialog) {\n                window.MS.dialog.tipError(msg);\n            } else {\n                alert(msg);\n            }\n        }\n    };\n\n    function getUEBasePath(docUrl, confUrl) {\n        return getBasePath(\n            docUrl || self.document.URL || self.location.href,\n            confUrl || getConfigFilePath()\n        );\n    }\n\n    function getConfigFilePath() {\n        var configPath = document.getElementsByTagName(\"script\");\n\n        return configPath[configPath.length - 1].src;\n    }\n\n    function getBasePath(docUrl, confUrl) {\n        var basePath = confUrl;\n\n        if (/^(\\/|\\\\\\\\)/.test(confUrl)) {\n            basePath =\n                /^.+?\\w(\\/|\\\\\\\\)/.exec(docUrl)[0] + confUrl.replace(/^(\\/|\\\\\\\\)/, \"\");\n        } else if (!/^[a-z]+:/i.test(confUrl)) {\n            docUrl = docUrl.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/, \"\");\n\n            basePath = docUrl + \"\" + confUrl;\n        }\n\n        return optimizationPath(basePath);\n    }\n\n    function optimizationPath(path) {\n        var protocol = /^[a-z]+:\\/\\//.exec(path)[0],\n            tmp = null,\n            res = [];\n\n        path = path.replace(protocol, \"\").split(\"?\")[0].split(\"#\")[0];\n\n        path = path.replace(/\\\\/g, \"/\").split(/\\//);\n\n        path[path.length - 1] = \"\";\n\n        while (path.length) {\n            if ((tmp = path.shift()) === \"..\") {\n                res.pop();\n            } else if (tmp !== \".\") {\n                res.push(tmp);\n            }\n        }\n\n        return protocol + res.join(\"/\");\n    }\n\n    window.UE = {\n        getUEBasePath: getUEBasePath\n    };\n})();\n"
  },
  {
    "path": "ueditor.parse.js",
    "content": "(function() {\n  var paths = [\n    'parse.js',\n    'insertcode.js',\n    'table.js',\n    'background.js',\n    'list.js',\n  ];\n\n  function getUEBasePath(docUrl, confUrl) {\n    return getBasePath(\n      docUrl || self.document.URL || self.location.href,\n      confUrl || getConfigFilePath()\n    );\n  }\n\n  function getConfigFilePath() {\n    var configPath = document.getElementsByTagName(\"script\");\n\n    return configPath[configPath.length - 1].src;\n  }\n\n  function getBasePath(docUrl, confUrl) {\n    var basePath = confUrl;\n\n    if (!/^[a-z]+:/i.test(confUrl)) {\n      docUrl = docUrl.split(\"#\")[0].split(\"?\")[0].replace(/[^\\\\\\/]+$/, \"\");\n\n      basePath = docUrl + \"\" + confUrl;\n    }\n\n    return optimizationPath(basePath);\n  }\n\n  function optimizationPath(path) {\n    var protocol = /^[a-z]+:\\/\\//.exec(path)[0],\n      tmp = null,\n      res = [];\n\n    path = path.replace(protocol, \"\").split(\"?\")[0].split(\"#\")[0];\n\n    path = path.replace(/\\\\/g, \"/\").split(/\\//);\n\n    path[path.length - 1] = \"\";\n\n    while (path.length) {\n      if ((tmp = path.shift()) === \"..\") {\n        res.pop();\n      } else if (tmp !== \".\") {\n        res.push(tmp);\n      }\n    }\n\n    return protocol + res.join(\"/\");\n  }\n  var baseURL = getUEBasePath() + \"_parse/\";\n  for (var i = 0, pi; (pi = paths[i++]); ) {\n    document.write(\n      '<script type=\"text/javascript\" src=\"' + baseURL + pi + '\"></script>'\n    );\n  }\n})();\n"
  }
]